From 28ba9b97f29b1c6c3419df9a557e1a71ffed9bbe Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 29 Oct 2026 16:14:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appointments_1024x640.png | Bin 126846 -> 121074 bytes .../appointments_1366x768.png | Bin 170685 -> 167195 bytes .../patients_1024x640.png | Bin 118061 -> 119414 bytes .../patients_1366x768.png | Bin 170917 -> 168588 bytes .../prescriptions_1366x768.png | Bin 162819 -> 114570 bytes .../reception_ai_exact/reception.png | Bin 192769 -> 150095 bytes .../prescription_ai_report_920x760.png | Bin 94154 -> 91817 bytes .../prescription_detail_920x780.png | Bin 67559 -> 68735 bytes .../prescription_editor_860x900.png | Bin 75043 -> 78800 bytes app/research/client-ui-design.md | 72 ++ app/research/im-ai-assistance.md | 75 ++ app/scripts/render_client_design.py | 143 +++ app/src/doctor_workstation/app.py | 6 + .../services/mock_repository.py | 18 +- .../doctor_workstation/services/repository.py | 27 +- .../ui/appointment_drawer.py | 95 +- .../ui/appointments_style.py | 130 +-- .../ui/chat_notifications.py | 3 +- .../ui/consultations_style.py | 117 +-- .../doctor_workstation/ui/design_system.py | 76 ++ .../doctor_workstation/ui/diagnosis_drawer.py | 126 +-- .../ui/diagnosis_index_widgets.py | 122 ++- .../doctor_workstation/ui/diagnosis_media.py | 12 +- .../ui/dialogs/ai_consult.py | 124 +-- .../ui/dialogs/app_update.py | 17 +- .../ui/dialogs/diagnosis.py | 10 +- .../dialogs/issued_prescription_ai_theme.py | 36 +- .../ui/dialogs/local_audio_queue.py | 3 +- .../ui/dialogs/prescription.py | 89 +- .../ui/dialogs/prescription_ai.py | 49 +- .../ui/filter_disclosure.py | 17 +- .../doctor_workstation/ui/infinite_list.py | 9 +- app/src/doctor_workstation/ui/login.py | 322 ++----- app/src/doctor_workstation/ui/motion.py | 184 +++- .../doctor_workstation/ui/pages/patients.py | 239 ++--- .../ui/pages/prescription_library.py | 5 +- .../ui/pages/prescriptions.py | 111 +-- .../doctor_workstation/ui/pages/reception.py | 71 +- .../ui/patient_orders_style.py | 245 +++--- .../ui/patient_progress_style.py | 109 +-- .../doctor_workstation/ui/patients_style.py | 295 ++++--- .../ui/prescription_library_style.py | 829 +++++++++--------- .../ui/prescriptions_style.py | 222 ++--- .../doctor_workstation/ui/reception_style.py | 29 +- .../ui/reception_workspace.py | 53 +- app/src/doctor_workstation/ui/shell.py | 21 +- app/src/doctor_workstation/ui/theme.py | 137 ++- app/src/doctor_workstation/ui/widgets.py | 3 +- app/src/doctor_workstation/video/im_ai.py | 387 ++++++++ app/src/doctor_workstation/video/launcher.py | 4 + app/src/doctor_workstation/video/window.py | 65 ++ app/tests/test_ai_consult_ui.py | 5 +- app/tests/test_appointment_drawer_visual.py | 34 +- app/tests/test_diagnosis_drawer_visual.py | 7 +- app/tests/test_diagnosis_index_visual.py | 11 +- app/tests/test_diagnosis_table_blue.py | 86 +- app/tests/test_doctor_selection.py | 3 +- app/tests/test_im_ai_repository.py | 42 + app/tests/test_im_ai_service.py | 270 ++++++ app/tests/test_im_ai_window.py | 157 ++++ app/tests/test_motion.py | 307 ++++++- app/tests/test_prescriptions_tech_blue.py | 13 +- app/tests/test_reception_blue_design.py | 9 +- app/tests/test_text_call_policy.py | 53 ++ app/tests/test_ui_contract.py | 42 + app/tests/test_ui_detail_refinements.py | 4 + .../dist/assets/index-CMN1CXTr.css | 1 + .../{index-B4Apl_Sl.js => index-C_tMrPfb.js} | 291 +++--- .../dist/assets/index-D8_VIZ6e.css | 1 - app/video_companion/dist/index.html | 4 +- app/video_companion/src/App.vue | 200 ++++- app/video_companion/src/ImAiPanel.vue | 174 ++++ app/video_companion/src/env.d.ts | 3 + app/video_companion/src/im-ai-layout.ts | 23 + app/video_companion/src/im-ai-markdown.ts | 325 +++++++ app/video_companion/src/im-ai.ts | 309 +++++++ app/video_companion/src/main.ts | 112 ++- app/video_companion/src/style.css | 617 +++++++------ .../tests/im-ai-layout.test.cjs | 45 + .../tests/im-ai-markdown.test.cjs | 164 ++++ app/video_companion/tests/im-ai.test.cjs | 643 ++++++++++++++ 81 files changed, 6361 insertions(+), 2301 deletions(-) create mode 100644 app/research/client-ui-design.md create mode 100644 app/research/im-ai-assistance.md create mode 100644 app/scripts/render_client_design.py create mode 100644 app/src/doctor_workstation/ui/design_system.py create mode 100644 app/src/doctor_workstation/video/im_ai.py create mode 100644 app/tests/test_im_ai_repository.py create mode 100644 app/tests/test_im_ai_service.py create mode 100644 app/tests/test_im_ai_window.py create mode 100644 app/video_companion/dist/assets/index-CMN1CXTr.css rename app/video_companion/dist/assets/{index-B4Apl_Sl.js => index-C_tMrPfb.js} (58%) delete mode 100644 app/video_companion/dist/assets/index-D8_VIZ6e.css create mode 100644 app/video_companion/src/ImAiPanel.vue create mode 100644 app/video_companion/src/im-ai-layout.ts create mode 100644 app/video_companion/src/im-ai-markdown.ts create mode 100644 app/video_companion/src/im-ai.ts create mode 100644 app/video_companion/tests/im-ai-layout.test.cjs create mode 100644 app/video_companion/tests/im-ai-markdown.test.cjs create mode 100644 app/video_companion/tests/im-ai.test.cjs diff --git a/app/artifacts/patient_appointment_density/appointments_1024x640.png b/app/artifacts/patient_appointment_density/appointments_1024x640.png index 83cfc4ceed504333d7f05e57094de200a6aaa8b1..64ef0aa17735c424f4015210af5c2011229c7be5 100644 GIT binary patch literal 121074 zcmd43WmHu0*FQRdfHVps9inunv?3)b(%s!TG$<+!(%mWDogy7WI&{O(LpL+``23#V zUH|*;u65tswP3*vGlz4&XMgwJpV$-jNm&*Tn;aVi0^xm>lllw-Jpq124SI_4?}tCO z3Gf5USx(0d1j7IG?;9nN6`ukGq6K}Fdav%4ak%V}k)ZLi`*fAJX1ThW4G%|d0965; z{1n3!Y(f`)TAD)2amZ%qErLI0lqpGT!2 zEYN@dK&TP)1oWTR5K4x!yh8>3_f=9aXi-4_`*y-S?4O{Z{~kaUT@Li_zXvEmeGQ`h z?*Y_N{=fd4i9|5kH^MjhrN(L+>M!20!*`z2v528dqePh^1L;cR6kM49bDhSGr75E< zBYoa8B8 zr3A3(d2!VX>L2f4N+z(TEA_Ete~?U&OPZ9C|B+Z53M*qNFxMX9kv~y>YQl&TWI8-J zy499?{t+_Bbj7cnEe1h+7&u!3A4?Kni=T-ikLT11>^yh9>CKM4+O>~9$}9Jo)({`) ztKOAsdhe1*CP>_}J zS^;`8q{WLPTCCdZ!IDovdNgZT(T1xtQFq z=Ny-k@Y_E|segJpxCwd9W)gLfd?zNoZozrU_>FLz-B*Z5=hdgsydj>2L7qe-M$r-T z4`nDSU@|089!nV?3MgIajnJ~x=hA0E?cFqi z3^pw5ou00kfX%7DsE`7EW8#aKW>1bqmK9RiTQ}6I=MZY7#${NR{8V9*iBI$&Aesx{ zN_u1@`l!ggHS4fmjDsT<(wW|8$Eoi-I2@FeGb$3n{$zr$4Mb&(=Vb!OWY<<_m%D!tH~sB{_J zt!)^MY+09CXHlEO5Ldlq}C3gg^=R%lYl#FNDjDF$_^ zpf&@PCtUI1~L+=<3JHZ-XB%Ptp)ia;#P+DPz@yU6J zg5kZNfBX5{DGqUNvP?|{uY1i=#JX8l+64nJs5s#dL_ydS2yJJTx%6#f%v_xPJmq? z3w2IjHUbhPV`-`8KJ71=NnftTsVT=IZ>FGCf95C&S-qZzRyx4i3H>R^{tS zy%k)&eEshe1E7nxfZL;kLmSTOtC;&F@ zBKTZi4Bi;ivU#e%2<&h71;?7Ltj{i257O!yg`U=9c8z5pH!=9^7D6jTu6`zD>?ctD ztLX_LqoZtyh2|*WSyyfrk`6;zAbxD1tz;iCFS?bg1}y7bc6XU|S0+fKi0dmpnQlC< z)~%Q+B^xbX9naM@2E{A~vf2qej5r0BulKa|pRL1qb?Qu5BP^AQ9glvVIl9Jb{Fy

Kc%f?wb@HOTmd&v%+?X-d{`v8xl>9s8Sa}&X)@$+SFa0 zB6y$8lxo%>H={|HLI&Mldas?noDbY3ZHgl6=Z#q&U^E&l@E9oqGUC|Y%>y7y@rd+v1lp<$iIvBSnXcl=qR+Exn=n^8j;a42WD>FH8wA{qQWtz()< zfplHRk$~2z%QNxrmgrDI3!AYY6@C}nY|rCAPaL?N&Ic%8Rz_U6$?Vpg|tp z6k#)hJ)Ipp>at0urKPTCJzrYNSd79U=BGb+zn7M$Wm#D6$M||7_d-9j;x=D*KNG%a zuhE8Cnp?&tWDG+kMlHr#$C_K(&acWKJocYx0#Yt1>UP+7Iz=2kpMd=Q+E1^~EqcS} zm7zm*Pjkll*}+OVniZ`1kG@wl7&$hZcj%3FkNttav=|dQ#a`X)-wQpo`8PcQRjLVS zY(u}Z-XLJ;DeNRmOBdRsBm&5`2y}(NC&O+rge&9x1eEBhLf~iD(OsYGc{u2vmGuqp zUm~3$NBKDZnWJoI=PxU_5F&0byV>MqEJ?aJ?&{=VnPN13r}444hX<573JMAXV`F&W zYu1A@PNRk|j?a!t49Bu&%^J12%*jqJFHQOnrI+{}iG2)uvQ@3d4PO^ndWee2gByrI z@$-?B#;>Q1Y3Y04>FNqI+w8r5{n~^tm6X3+!ca@2Bb(dz+4WLD{u4~8UpMQ?(taZ6 z;8Jw-lfNTGyVLpf)W=s{==qa>j3}B;H#sA`E|)n;mmmni)Yw#wEG3Ru2a#*u#{;9c zRNg2-GI;x3r>AXUPn`_L*;%vBU*>!7Y+vuq7ouhM>YblIyon^8i6}C;f<1HMRI&6! zFzA5~%|-_i!1m|4z1$N$nK>v=LB8St%IYa#B~YhP_|{CHsMz5Z%ec4h;bv1~k(L*g za)#2*VIkk|{Z_|R$@F0l9oz}inw++NuuW3W?i76T_mWyd4j zvcI~=Kjma_`N_>K&*Mn;jRk_H-flW$fQB6Y)@osqljQDBH>#hR*0}DM{cHTMd{VUJ1)|a7 zE?MGy2`RpIud-S&#Q#;MGH&@<6_IYdrBdaCh(U)V&ab__8y{a@^LHws=*-ZqlgW5x zm=zfwh|RE30NNl@Z}i3nXc-*kXNz*b5hDSX?uO-_=o2rAMS+OWtj9-zt z4=yMw-h{ypyr`&%AcZM!g~3cqy$`wcj6$CKxbz?Hg&n{iD6JC61u4nTJi?jy;122z zLlt|!S4Rs=@2o4*>f3Xr>d>k7lwgm2eQFrPv$Kr|JQTcXj+B^Z413*Lfl1$+-tL9vBQZ z`;%jMv9}T%R^>Oif2lX}tFW@hd0uw~>5jo4T*mFW1p+nNFZRaA7oTnL5^z~cAzd9! zCOaM{!3Bj@XFU`|lY8}%6uhsY+!cC!xgHS=(NG{t>%12o-S38{TX+(=9=l}kKXLpi zct)1k9~fe~_rfs540Z@Q*u0-g?lE16V5LLc=o53xTa@_G*>Fqg`|p?sSOJqo=h{`H!Ts$+TMMO7Kw6Vg z*3X00_F3EQKzKmULRV8yulh0QooRTiMLNXrzI()dfi*B8;%~O+gJ_WvJt$IIu}Zgb zkFB>A`ep*s5SRgurif}P#_SEb7;8}J$jEcP?7i(Pu?7h|)&(!*(zzcjWswN-^;oLS zH(Q7p1xTb%$HK@aibb3{&+12Hrq$K60uBw8GlgKG>MY@LF!x9|SpHM|${(6#7JF5z z8^=3I2c)XE(phcY*AkqxuiEiwIxpKdS4%_ML<~e4wtuJ;JHvW8Pp;~#QcwFt3VCWN zl7Grs7NMk%iRWcyGDwsdfr~dWuHikE{vkqv>v3j!@%@)rcIwc*=215KE@Vx(YOgC& ziDftulBgK`rPbrZ?p);y=Qk(L)7v2q)iKs(LZ74T1rl!~G~XIh;4*-AIJA$wj<)xd zfl5x9iQL*!2ZD_&mF*AX>)3<@`3_;a*9?V(`W4Rfy7vUsR(9II zemCG!&5i6e^jMo8!&!GH7?45s?`wHk5D#{0odbNOMj?jFBHJzSD!jxt`s8G@;_+Jh zOUpd7jnlI;^H13v7opaAhxmwD*ss!ILEe|ob;~dW@%KEU>R3C0entGwm1OoS>e=B# z@S_-~Zf7(QAPbGQ{fJ&hpgAFp?02~ao`8`~nd-=|baFC_yC_b!) z_&vF)%P><-7|t z%(!7{ilp9{iWRGn=^e~{%xKi8A{hj>kD>Ru*#P+j0CgxuT{Cjge9`1!Na04mS%y&( zoEWjU;*dbQFNgpj`6R$C5#ya72Ev!I*yQZ(U%6miy$~7C=vX5)(QdbASL!8y8@*U< zBVtuq>QdvgyrT~t;hWz zy{f3if3Z`M%(yjwiwT_LMlZz5v_V+HiWE1I6I2Z(@<Q#Z}J3QpLB{g<4Ywe^)ZTrrjjRmtpb7YZI1>}s43R2EQ zw%4M`mnx!x0LCS%jnm-1`*WiUn2%t|3(e87P(-4^yN(NJ@VU|y>un}yPPwv=qV=4% z9{Q}s1FqkIqO;$Qm3v3n%v4jWNO%%7t?&`6KrD#P^g{H!E z^$$^3WHXOVFq6bQI+FY^&e(Md(7crcMc}3U8_-0pcS=6HzmGe^n>SHMZTN3xHtJ+M z@2|qU;ib4i3f!m4^s5XJsU7z*Q#pnXw)zcU`=ggJKe@g3X>goOuoMb6u{5`+u{|OY zuJ1Ub7O8jm0^7bo{wXkTgfGF}$AAL_iK)@*%@mU6arA)*Cu{K79jz6UdV+xB!JZz% zeGe_%t=HY3{nZyFZa@VyGC=FLZKw^{6xfI270N>U?N?i}JuA}I4-SHd%y;1IBB2U$ z=FUiJ4t7IcaF463szWg*>MCTc#A$#VM2dL4g!6l5E$82o)@z4BIZw5px((*61F7d`O|D6bIj80>No$lCz#wNDptwM3JDcu!Jzs1B7h6!Y#5hFZ~+;w zo<2!dmttoIiogmHmb;_QLw!qz+x~ez6Lw(LD3!(N)gjTfP)Dc3;Zxy|rd*f&4an(S zhxf;taSHBw8v4p%Y(foL&mM{R`9r265B?8H{!+^ZRh%P5FLcXDl(V8ky(it~qr-p2LVAiX5`16A=Hh10{Vk zVcQT%xd5FEvzy7mFZ=62SMK7koFyJ&SZp@)v-4($_m!@`5HIE0FmcdBI6X`F*RLJj zFW>q3y=suO&B-IN6*io%#!ybBhVlka{%OIP6b*p0w_M%c-<@ozU7s8?N^l=VS%G|Q z1MT%+!SYPKVA}&973D4V_8*ErXS5OaE`2W}lkk*_-Pcrif0=LkODA8qGh223E9%43 z;TruT6*uG>JkaxG*S{&rlgNNYKs*eDd`Mo#!#!aX;HbgXQ+Ms+FjRtYPE;8eSQ3JN1796gO%ke+5TnI$ zlnIt{Va@d6qUD#rcHr;ZihA0){BcxW$T)C7TeE)+dpp;(l(= zE83zsoX!1)eT{g0yaElg?cpH77}BBGqY+oCWDBmdjf6cvaBZ5F+S^k)A7M^(QfND%2vRXTm$c2O+aghgNu%hf?NbwJ@yO;5a_3;=P9DE{3Bg#!Fi z1;@+cTHT6_w;oBsvXH4(3$=wN$1JC3B6WR|`jXGzqoDlx(}yzA@`2(3hr5{nK37{q zLtWzyyI8!~ee}dHe^%W_>#s#$BTsbMG&hLiKy$VJg28w01GWt$&86>keJ~=D9?|uG zS>$xcupAtjg>3F#j(;DaLYVqCr1ynQ^f%M_)F18}+I+^m- zGn#dW^p|DSQ}7!L{a-<6TS%!s)DZxdmc^Bw|m1Me*B+}iA^T2_h1!oBa6)hkO{ z2n%hteg?2<*Z$ZuLX6^NE4%FL2aDw)2F@BT4rae&T<#~xQ`F+hj7u4ITLx3L;ZL=g z*%eRjWWyeN*aa7GC=Cow#V1w?RKVc7t9{(k-(hO80A`qa)6TAx#z!ko7rR|1z*TJ| zi2CTpnSC)3?h&0`#|v_G1Qi){l;Q90U{FKSlPLdZaO+7ky=Fv5&r}|n+${cOR4jlM z#w_)%X}u~+&t|Eb`uO-(f)A+BB1zyS@ETLiX;@2=TKfv1KjoCNq^ACm#6;mESIU+7 zWG_Gg>>*3JF30xkJw+hR%Sqi_s)poxTH^^gEl2fOw_B3D69}G^1Cr=i8Xwbgf0!hY zDao?~C1Qkg>GVu3LG*8)J2lW^ijBL+J;!}$EJgRj5$YWaaR6E69 zPUM$n)**SUQZ^$COnv}ci2~FRrPlG@P#bZz!n>>*Y)5I?!jcvoWod$(t7Fu z-16*zrp^la43vau`2z5c%NUChoBZWQAwsJiaQBsFOvc!_IE;6S`mabLz8ebdV^}xn z3b5T{=_+LE{?`k@$*F>Ib<|(2NAqSs&MoA2pBW_Ke~EvjxB98%+O+Oh%gU#Q91sB7 zzl;^-P49VK-pZmhA0c3r5@@2Q?QUaVfg2c*R+sWoMcC?a!Jfqkk^=DuFD0;!uyo}u zyqPTtV1kJHQK(6zqjxK)EGy;T-Ks3Iv1d^q`#nw~haWnjb%$RAfl6K+=;Zs(e!2gM zDg5(oF=)=7C5-u2)*%?J>H(#Xk;3%|>8mxPQN{UelI8koz$NJ3V?m(8&=^F^JR3Sz z)LOq^LYSCX74x!6^!h2}5sr53cZ1#^MJ7L8Ekjz1d${EL^9}3YTvL_rP1@zR(XPpV z#>FtHY`l9huNj0HIG}##8CAWDjX6i#n5bp5!-XkcS2V)PuJSBV)Dg;09_A?Ix7Qsi1XG`eC4g%>%X(Jcg7N_A21%=xk>UN&7zcap;VRBbHY2nj| z43(HX&UGNU8ti5Z6lC#YVR9e*LP;pV9c;CP0@v#^*Q$j7JXfK*eH}3z9tnTId(RSFF?WUx9 zq?zw{cGVR?(0){aJQ|ctGX3d)b8t$Ro%W)72lRvB8ed@4F9Zdyrs#CqFm@@`sr7IA)ldg$-%nC-5m_rtSl zpa-=UubcX(+z=PhE^Fe^cMu@&$H681gzGNj;Vmo< z0@RD$DHLhdx4tVYLj<@d#hw-91x1CE4Q{@CQI<;NaX(W=jRKu4{`~BWo}8I$enK22=_)Tgi~0zF z5?yQ zjZy&1-RkK$U_^m@POJ_sa{#$PGxXUY@!&=Q+2d(pcJ#VnhZQPfABtt@3kxoRmbE#0B|qgja?&|tmr zbK>WI`C@&r2^u!kq;e4BYHwIe0x`_EI$ER$YrL&|@{=6^JbOk+$xk^FXm{?+`I<>f zL%gumCg(R;VM9#a6!5@In2U=`SV_0ubm#U}P481X?bBeh&3@c%fJ<>6py#Y{fF_!j zinVzf_l(9+Ew+AZa?!Ot5u4v>XHiL`}MLL zNxdI=zr8X0KbiF;myq#Vl z{vpvW!e^+*K4KMm0=e%ygaHs;)Q&`_XnGhR)~9*W>|@@&yd3rAv9<1~%m1I?Vrhc+ z)^!6{x8g_ahr72jrzpS4X91T^tGNaFTfYb5bqBqTog%CCTK@_uGb(3VOnvjs zY}BeE=?;D0aVE-0+f5KZKe}#KJe>2rGIyFOg((1|dz$7!$v)3tUiW}uHl^W^D>iw` z%j$O`^Jk#PW;L?!Q>wBU&Nm1*cqy4ID{$DcDeDIJy1ytdHq01)1g~t>Bj*Q>cYeJr zp6XD*tQX=LQ_d0^;5<)0yG}yhJOpc5&x=Ox!IgK$2s+mhj7Hlbkd;5Z9T!<0@OF>a z@x^|J#2_FvsQ_+BmGyNBAd%K+mls%BPKo8AX{ILvPJpQfHIadfI)G|tXg}eI5#x&X z@i@ab_VxBYy9ovy4Ckq%5BpRDSAbe@`k!XEf{Gq@UPm^H{IA7okJ&>DfR06)+zLd1 zo%#d}7TkwoZSU4hM>q6-uvNF3ndr>uAna>7PX@$UA_Xmn93ZhPe+kL!?4oKT_?eaZ zF+1zou7_}B|I)~z!3fZm1Y{+*q1N%o*B)nC! z?tkFz_E)25QC}2y@lT%C$>a~6w*wlO@&L-Wzvbg0YFVDD5hJTPoy%{*bZJgji1CVR z2?%e@%ExSKDysKF!IOildY(LhcKnYCj`ejiG0wK*OxKPD_%u$yrtz*rG{)<`GFbF_ zKg5sA;uQ-^e6b=dzbOkmU>-NW6a=Opa2Sr{ZeauF-^xm$_;Qy zyqC8XX4Q1sI>mI7)zAQh0y(cX5>YRx_JBu)z&*H}L6-4ohXS+40VWQp7(N}*eIw8f zIP60)K2&x&aaiul#*5WYv#42e^0LV%0w>k}v+?aR*LA_5v2+2~nGY_BJUE~ycP}c9 zAt?b-q)YtQANE(_Mp3kQ)-yA3 zd;$DvM7m`R#x(C$AfvCEb!nIBg+FyUGVPI(={J-1cA^c)$tjxd1{vPm-@D%2FhBVF z@6B|+2+uP)J!>#0!@cqH2Ef^O<>ErMd(GD~RbzW~FMp|ake8NjR6?hlte%ADeX3Gs zLLP~AS3YVL(f%rxhaYF2oSzq}#Edt?RKEeeMEos|*49E+s)c(Rs`J_j7KfBHZ?hA4 z;37B>DKZ+SW|cWUA~XLGBy$byaa0pY8R!8rKPpT zd*oA7JQI6-(z-+o_Z-339ogXqp{gbXL(qX=c@eWL(fDPPmnfGOr z6W68klZJ*_(Z8^7AK5BZ2v+!i_;^U(?2hQP-yOdMcIH6F;#@Oek;MU&wD$8ZMl$t} zIPyD(6HSiKWB`6Qel-REopBINh2FRA;pSg#wofomH?5pbMn~Y&4krfDM+6f03>3*@ z-6JFMW{j_dfba&<_}}t^Bm%Ag{2!8_kRI`&N@IfQ(~^&~AVG7SCSoX~qj|3(ayL;V z-cGLRuKbQMt|gF~KF?$9l^7?;+be}BG!@m2||C5d1)+b_CwJpjt~G=Gqm9+*P* zV@}xeT^z3rG5hw6Ob1sLbzr~SYKicB+^l*KIM0`CQfoF0X=Fb+J!LTMzWL3Wm{)pp z<3+Smx!bp^kY}UqpZ4R0sI*$yY^(d0L^@zhWs1*z4pjT3A-i*`RI=$RI+Z0|=Rf7h ze67FF421pVzRZX;ziAPd~7t!DvY1L*}UsH&xZ9t>hd2l4) zTX7jVk)M4w4gmzZcEGMsZ~ZsLw?E2sVor9KdNTTpf9qKv!THCJAI(OxCE^p}e)QQh zH~hBMY6GmPweYKYHVO>2No*8z2s|5!_|%Q?znbLq-JPdPsK@0kLxjC%;XqRXQ%NY3 zfx7RgUcP;qIXs4zzNYpE6cmz+K6f8PFm@wDN2%PVG~#BNhd zENm!XzBY%h^nT9@$_K3<>8`m^&62ey@%TQUwI=@hu>5f_|F=Z<2Ay?`QX$|wM%RpMI2y4%Zqh7ccUMgs zZguqc4p3fzvu97gasu{KB>6&!>W6#4v?_0~yg=7}Gm5sojGJ7lC-Tk7jX1H*jT(7wqQ z)COr_AY!{1y3dt%Hm+HQ%cf~pDH$Od8h3hC()_+5d`W;#YL9uk>!DGpY`usRNkAdk zk>sglPNf8#P37j^-j5-3h7sdGMM=geCp?x73tXv6=9Xlq7bO|rx4)H?T<8``7R|RE zB%($jvFIv|EXeo4;OVKh5A2AAfSN&=Cc%mElz{_PRfO&~U-1f+q_dmb^4+#%f;hT- zbyhWDo;_gQGUiMFsKBe9MjNDA_Pz@Gq9!QUo$?zKn-c*ZLqvmiS$rafbnGNB15wKZ zxomUzL`ngcHRFMa6(enTDDCtJjtn`W0r4%?1lo>1?0`S|#U3TyupZfLJrOXo&}JCp z`$jjpHdta-dB9DdpVo4k{>_fFoTa;k?KqkH{g+8=hhcHwPv$aI=od%LM?_zY1aZ zv{GnfGV0NmfawA@08H-F55gX}Km6Y&RIg!N73%(BddS10@g zT(=k%#P~#cbAF=y*8Bb^f@Rk&lN=AO2T{dVLTpWMff1IB!=clzql*F`29W?s&Oppk9S224IC z8ze#9ZilNG@tp?7vEI2Ti$VxkZnq8qN~9J(;bLDZpMTfjeKJ0I3;16bw0Ny2%b&5Q z@uRLKuWC&+m{I&D|2uY`5q+cws&-j)6kR&HBoq}B^*R~nF4u4SUXYMr*I1*od6zOq za@=a+6}ytoL?)Ptkw5=~MGfT}p@pI<@sc~wSEg^k_z*EL(qK+%PdZk3o_SoUb#gT! zH=+D=y+9ugWK4kCj&y&bW_8G{t`wA4qSl+9Ol=LXjYVeY0T`wMIkv>l16W0CkuemzZ01^gyv-vo37N7|F`UAnSu{Op>{SG&`cYrT_ zxX}QUa)46o8CG{uAb7gV%Bo!RALDy6)7vBx9o9-bQogEr@<0Seb3QiZ6G#u2$tQfa zlIHf3WBp)r4A{K~Z(+d@E8&jutKm8Vkn_fj5Mt3c^wcb5XA!|j)0!CpTp`kvqbZtN zF}Sti#%e(PidwY)hWo=)+(8k$^-CB{&$1Hu*8eCMSS5E|JR)jJ*_lFZafBuQiec9G zJF4(FmuVYd6sufQ0~-ySPCiOTb;9<|kx}SW0hHy5mmT;2j-APPF$~n39cU=RU?3-YQFjYIfL6Ib^)+37srIZn|n+OTW5^C+IGBrT6xWm zpF2{Cg>Dv)Kck|6%sqSLP962TTh^Ds-|s749V^r;761X#&GWdp+na-VbF#?SZ;E*W z4nJ)W#SabgIX|es27IKwz2Mbv#UYpmB8?0}LW%VkxR&F3GN!d+>=J;m9MhGBH^++& z1kZ3zrvasdi1XHy3c&AcTUT1jBs465tTUql0ZuM}o%^u2(!xF)jGEHq#UHcm8*$zu za36@Nq5^hLuEVx34VO_pxxRiQARar2GkJ6CLqxm=FEy%b#yHw;X)d)z!cAh(yMLiW1sGCnQuCnBe2YR%xGUZ+~&!(_$>*T9Gy>Kgbh^G~9Dt+I^Fzf6#l6hrF z4%}4yZpeA^bi2)mc2Tj=C>2^UF`OVEz9Xq7X~2TMw66f`7Rea7+v4tf%D1jxy>YbE zI&?wdsPMomA`d(0R;+LT+WN7wOwpIIMbA3Nb9~`O2W53dQHUrHHP9;;Hc7yKg*eI< zPoE7nxqVbn0oy|VBCp(TZpaY&*D+>#o~qq|`~t`qDQqMU4}PR`#W-!(R7EP+(R?^% zD%1U!pNI#C`J8w3iN7E^wac#}BllKE>FDX>x#{mrxb^;xDBS(v0AWye zwj?xZl#0!loJb%ONrrBezR>5!;JMJ*9%DY#YSg zPZIk`R{+g;^Y1c%IwXrHoj=6?_yvRW+aI4z$(h)6a~y*zL|ZuNKz2!nv^gp*WhF?te^A?_P1b7@Dk2Jh_; z^n6BG}EkE#tA}*bfI#fra@7?BK)5PL#L9J`{La zf8;Lw&ZzOf+3^?w<4N7|8n#-<7K*4nZaud*N zer zc-cRBgpm9*RiBrVm=s{H{AG$jv!03wEct;gaut6dTfxm!k0jv-`)Gh|NN? zc+V^jPBjZ9nyTwKvGM{V&#hS6)h=U0MDuI*{Y` zp_SY2RRHVj112a2UpoU$%HWSc&$He`X;F7*ifPwsIWF3>^$N-=PW?!RJb#7gY|#h+ z*RB}|qEvg``ZOY%vZ^N#qA-0a6Sm@Ib6u6tylIy0 zWj0k%{(ShPJ^hF^eXlV?w_eO&^xOOY<4xN7rD4^dR?i$`Y^~@2>jn71gbMB;0lp+S z~IK2J`)0jZg~iEA1;9?lStH zxOefd)zx6W0aH!byhtuz`cwb{s><2?LonN_dlIyBeyFdx{JG$}(6fTCVuU%v_N4#W zEq^X6`F4 z;j5i=OkA|k0ASEArHuh}vI&EKrhi+axX=KfsF9@7s`7ja%*QA%0z0|8#3csBd2Q7K z+Ad?OD=dMiB@8O2ZXv4BoSOa5ZgozS!~}U#g~4LF=rbGN6wU{Orn3&dB!{fbIuPY4 z&f8-PM17TE_O?}WDJZs@TZ~n4AxO8SKRc8LjgpM;S6%O58lBy5Xh_@k&Oo!x{`?eI zUOe`5{+v6Wc{UaQ&$29c-KMMS!@wJ$1M1!+SmF5Z=P2lxeEK(=Zt*vK)BBiWr7hPT z(dW@?JDoGBJJLpmub^2@Pd_a_+ixx))Cjrv7XnHGXsrn9a=uG3ZR-BSsn0@YvX+M7EOurEKxFRLc+tp|+t8NbCM^Q3t3s zI}3>O_P*%s4pA{|To7Qk&#Pz&|rZpSr82NHx%j6))YBF&cb)YK^yUCKVx6jNR5-6yHNl8Y5z&W}&OT;0*D-Eqs6}iwn zPkJ;^7rRa$E0KgN>w(V!At(Uh$P#?Kt6-bvW*gLJYcl@u26S;a6@4}t3nIl8w0tt2 zMCA*zUd}u9pt0*YRB>aE32S=?|I&+cAOG8FQ3+ib(X59?3bvz_sDzjgFtg%itK>*FC$(;SEG^80EEiWS zA$54d_VClRJjAt-LgJM18rzrXHW{7Pu-MA+3@}bpYUoEc@%-<|2vl?sezx)z6U9Ue zdHAc5kD*ht>@p*$(WJtImv!@TL?BWTpSLgaa7bJpJg@wq?RQ9)X>-f51$L01m>qT7 zHT4r(@%866d;b@4Zy6R<`^EnbARtH>2oi#bbcuAMbazOKba$tMAYDo~5|Yy0B{_sJ zbP59uFm%WN=6Rmq|2pU0d3RoT2^X{X%nX-_1Mmucx4q z`+fEx{y0TVcZT#tix}JEob<2otE1EkTuCPH3Z{T&?jsjm2pcbs@O{Ximr3qE`qE}Gpv};CCHLW=yXo8idr;GQR3^$k_6rjg}s#<#@x*FHcmg^q1g9gfx&vG<(;CU zKh-F=l25RHQ)#wUe7EZR{klQlZoVFBb9ut3Pb6kL4#9qd{-Vt3U-v8Cx$YnNgk|4c z(=Q!Kw1JIUz#ylcI;?3GPIi;2n~v-4UsI+hmj6W+%k>HeJBD(&KmYNz8go(Z$1^`g zy!p)RNCSyrWiG9N(d>ivr4Kb3RcwWt5FJIWq{>mTR#Txa+S#Pm?k>F&ACv-JiGfg} z&Y#apP4@Agpy`|+Y>E!IiLQ+jY2AAEnI9RHilF$*RhsqeN59C>wZx`uTI<|oKisZ| zlG9``*Ls{QM!5UuO9(7|cS@@LU7y@$)7<#lUCB@LJYn&=W6O_Qxz@EkAI)aIKB}t9 zIohcP2SA6{ExVStjGX z@op7qn?Aes{vMM=C3sb~6$-m!KGQ4^7Ey8yz-sJ4ax=ZTqz~Xcwt# zJll1D-G*x)9D3!mt;Uc;&C)kqwMOiHnh1Y0=g+vO#3Ck};3>p3v!3etq5NlQ28y-@ z%s?}GMS_0sjsLr^q`kJaMzz;EvW&u5Ls6tCp(^x%f_G67#?X~aO^MV(teMf|pG-tmw~rW8c^*f_gDe>iax%vmT;&Wz(w<>O;J`DDDdYq$BHo4WuYpU-3< z5OfS1cjl!*s%)lzwDpotwbDL+tX=nAPe$%zJ90p93(s%Qwn`h?CazZBl+*Uls*!CD ze|QaU;mU^RTsJ6h1{s9-zMMmO^4lhfy*@2O_?+=r75Jo;6P@|!@<1?{Q|pcM zd-;d`MJ)5!KPY(>n~hy;S5&+unQUD?-{$esqoKgZq6Bvu1hURHO99YF53KNb@>_++ z`Tfm2G3z3oyky~3{!_0o@!gJ$q-gz4(yQ5aC)=#*-ia#$RuMr~ed|qMKD)28&S$7~ z&B2mSt!ljrdTj#(Lr-x~eP@hY-sfggqDEi+RttWr-X@f`F@sim`;|6p%J#R;=CIF0 zI&S0DsyY%vha@*QH*y{b-jyeh*>srx6sZP;!lJD{jI_1bmL-(EhX$VBpk|szFnIIt z*hqx?Mu_&FiMPfObXCrPSE% z@6}vM%cnYHv&c`j$GB%(_7MWVhf2pa;lhqOTqJYDR1o4yQtoCy0|qC8qQObz2z z3>!w%b76%hE_yB5*RI{RB%N@{lTIA+-1Pf#@h;|ju36b$p=~(x(KK-+Cr-H&L1d=F{DAyK1p!6KPuvD15v{Eh_zSZc35yqB ze~!20$_7u~Rec@G&-34%rE(qi*dEmNZ`1t5FT106sGL+T zOk__abSu&*GxC4^t$)34$L7E@*^}Z{Pn&JfyeOBFjIP7wIa+Dh^=gKmNM+BWe42^t zdsKqyYoqFz5I4+6kAA#WPh+HzGl*#iD{2!*rg8W^It{QHn}56gg@9|DS6(Zc!X`z{ zWwyl^E*(4eW^<7_%Tx^Hj_v-MC4Yoz0V=)Zd= z8JfmUUZUIU%K*U|@nFmP{1Vphk_I2dxc&6Ekqd1?o(nw`je}R$GVO2nHF01En-w^G ze})A=WEL(dy>)v3gq^)r1F*=({RJ>5sGF+UMGjx6m{C$DjmBOie z5DjaAj_`U!9|u1vC;iW)a8Iwdr7jd1uknQ`1fy^*6`?woUOQyP8vM0UH$l`HQF~La z$h!C5{QLS>J`V^D58{vH*aOnjk`TOlvd@(d)JmW2aHTF$lev=@^fRegSXr>*y9+xZGm| zU4DCP&&*+Y^j4F$`vv)=q7u0sK4}Mse(9N4GCRc5!_Yt0$#k7eXAx8$uP! zei3Pmt9mkSAF6+DxODsBiIm@mZ1X-IkgUAPQ&FP>2q&X`;Y+MNwvk37y;@IM82QUi z>nsB}hV_(7Y?SG>ym68U32eA^bOqOfn1;-9_pp@cwmG8=Zr9ZteYwW*-dey{(d)w5 z5pOh7UTSR=<~w}Yd|>rkr^J=q*CbNsy+j_nayJ_Ec1ig*hsZYHTC49_61yM=JX$wZfZ z7QJJl4gL67-kHs22;(@;Dj*1hv?UKoq9nd9#9!+O;31Ba64Qd5p4jYaAXP$R!la3D zh(|&fo^QQ5`p#QC?fr)l1rjz9)Mt(MV%%Chf8x!-Q2nd?^`l5UPgj~23_+9|4AW*r zOOQt|A?GvhDy!07U!#W0k=+B6fcFRI_lvnOPa{(LYM&sfct)DtY8K-R*v$GLMj34$ zYx|~hOqDQs-D~^4_Ku(n$U0HJhK9d*#e-ayB_@{WX?c@m!+(+uLnL18hTZ;T^OZ%I z&W$w?L!_n6^wtiEn2ivTg4T02q(%}nX*0DemGotXTq)=F7jp5X+P!%;Ue9>9^)F60 zWt5`t)%)CqA&=)P$x+7WOAadmZ%5XtHsWd3&wr?b8gv2A)w%~+Sy3&Y*_J!^9rBxj zk-6?_SRgR)w}5~;MPPA6?uItS#SP73*N}2>;fT+Aqzt(Q{GkMzV zSgtDR%Z~Y+hUSKveEBd5Z$T%N2fhZwK5mN)5q|$>Zc3GbCsX^1O-()Db=cXcH|`tP z@?QQ+K}R1(i{<#EJm`C*M!X<8BvZ0cTR^A)4bnU_k)_$l2Xnr1&Pj6NS9s&0>(}u) zErce|yEZw~zlfIDTDun2K(US+uJv9O!ovE5TJ+0?qnM;PFmWbz#ssserN$A23l7Ot z!dtXU&+F@%Y6}T1bGn4baS*eLW|^ni&-V9TXmddYwVdJp`k-f?&BaRHXl_IDYv>W# zOPBie`588^UAqkz?RW1!7Z~JY-l?U3t>wxDZD5kZm66?q8Pg51YS4g6Fn!@%JV50( z?^qqh6gpB?nLq#Q6mS7s69zk$mCC2BK|n)5eH()&gn{PNdKvBSKgWJ)@Y5lHZ(F;z zK*Yt%#l|4hGhx7r6YZZnxh!3#`da7tV+h@{93dvg^|7KL9U+SU%F^oe?JtuIcFLq7 z%Y4;=EwRA$BdH$hA7h!O-z4$;#WQ%|A8)VVcz78yOUJaOEi|5%4Iw3$!*8}eMarGq z;!<^4rVUuij|~g|OH-RupQ6d2T z-0|4&6b5GsCmu^0X0{^S8~=wXcb`(GXapj-FHNKN6zD7{nhDct{+d>_5+|0pg4>-$ zNJ^Lz@HG=*cO}Y(4Jjz#HqIbr=ADpIDU4xw+Tk?ca%s;b{gWmyoWg&-qJAo))s=fm zZqKb=#19Ss*iL+>(4^k)%DUD@9-;o>1GI<9z%9}8X}|k<+<)a8nU^IP{lS-@zSy1h zxqG+Gmi5NwXG+rB{Ps-E*XEq}yt3fJI>3{B!^Lg0E`RhSyefuC*Jlh0xC$bLRX~))Pf7iD<4%;O)T__*+dl0 z!*%TCg=-{306J9nF*843(=;tWr`|urAGmjx4a0# zu(X{^C@|Nfrrc7n<{{2W-D_4>?7saaXHQBmu&W_W_D-LxC{4VF)pOw z5RntiX<5bd(^dlGli#ZWGvf`)Ps`GSYk9~RT!WM0Z@y?0T^IJ9Tf1UvM+D7jScJ(- zQI8wvN>CGT89c+$zEnp%W0w!SC++I}uj?1I>?jRM|TP-oGazkVMCZe8bw`r{nh$8bZ)gi8(~OZAtw1 zce;9zw=Gbm{*z-pDom?9QB?YZPAnvc?!b%r-xJXJfESpL*QH8Mx8xALuUZfMC$XCs z^S>fXHUWbYB-119K7%;A=QpUHYalg3!Q(PDknRok|1IErQve^roC90bwj>QvLw%dt zWnSTV{3DQ#K|3O+K=FSSOlTqgsW|Cx#@NG#w_}H_|9#b+Z+|()U8=pw3O{#dEk#d^i(_Ri>24|J z=q^V48RdmUzaU1T`tP;Gr55)@Y&k$_h_N~U|K2hO*LhI1=!!6`oGzb!KDC1fh@e@8 z1%>w(|2vGHg9JSyJ5!m1P8&Tm8I;{xQMM^NjgVeb$}k6-!1V%SLop6UU(XDaQ7rkb$rWP?;s{Gbs$)eaEK$ zHJR+dadQF=5@yfTW{}epDkuycHKwE<`kGOOkKwZ%asRI9*Bw4&+G}3%kZeg-%U(n| zBl2In$$m&5`p!QC9~}0>Eb(!6 zNN?DQj0I4N{ZN&!rv)>eP(%FZ^F&IOk{5Wh$rMw#JYZhE7{| zT2>l?GtQ93){Q;@;vl{fjDWYn`bFIz>h=vxxM6~t&Zp5~ou4dg14Lsp^rancRx{13 zm)3&CfDwy#!X%><^4C;k_-=$SsXFle_!t7DHGZJTUm_LI!_%xka9|x=avoqP=xl6U-_Qg3kEjWog z;iD92kQPpdTe{6fpE8E9+{&v}kq}T&5Ht%cU{Q)m=Z{-{#lc^{>Q?)V>Z80j>{bTk z-wjFW9|QMD{;?asGO_{V@}(l!DpK=Ty%58PYF>MuzbDtMz#IZf_dNSqX!3KGt~!~q zGv>2Cmd{}Au|FhO(xF3Ao~AZ-v;-@ulSw=&9MW({Du>eZJty%qc(nqY8FdERc=)vC z=?pf?fir^`+Xt@M(x3ZwB}fc2E2^8C6y{t-a8zPv8aenj9orn z9T0^7e2t`3dny^EOmYi*TRm-W{A@XoTfDU zIU@*|6f4*}9BV(k1EmwNfv~aFu07~z>UrVOJI@$!(ND*YoeK(`hFg!Wi0A_}L}eQK ztZ-fH;Ro;`ulp72SF+GnSOFJlp?YaPPp`9)gfK_6P(05G&^(LvV3+2 z=EHPns)4|(`wF2COr|z(C+?M|=FXKyO_(Mau5@GtNPK{sA0 zmTvx{rA2q2#u9t3(HeViQ{~foe=4pC3a#yt$|6MQS-EJ#t5k^3c42Rff#!%OW0)NrI zmHP;i{h^5+RfNSoE5-_hTGZ(pMf)=PFaP=Ez;J8YntKi)n(j>_UOx*f{<^Yd(Yagj z1dEvW4OhYn;wraYn_ynzT#vK zpz2llI5;?1o8Fp1QEjC`#Y4A*k(Ttob;nLdmisZ0-y?vvb*{hf?Sm`sBa^FNjs+>! zs{91N%j99xDw!8TLPFslD~6uV^|{edxvyi=>gp=0<5*Z=&nE1$PWE&_av;|A-}JZ= z(Acp#?LKzhe14M)CU$gixZ=3U&$G)Wbk9T&bSv}`~KR7^j|lQRvQ^{dAT-0T_IJv~veG+RP=;#SDV ztINJJjo>w*45X_DZ`dP?l%r+t{2kZ1yK)VaWOM0Y7hqq}2d$tUtJi?;VI+(hmEKT# zx;e9W=(V@=)8Nq)_&JkR_4HJo3%-u)c5~?|6IN*VegB+ZMWC3g+ws$@yPhORU$C1= z5Vk)$qu1uJv7d)$j&CNtK4)LZI1^x1OzhwF33e)h+w-`4%t|?6wlb#N*dS zgLhq1pv@PH@=b^BM1#p}Ne9Ynx@&9>`vM#Xpo`aJ&2AB1KlHKsppD9CzW>deR8^W? zU-K%->rINLx6@zu1fpnd^;=o>I{k&_QO=B}7v(NCtP0hCw)Ks(70>^Q;C&Ded5s8@ zF7;Vwxe5b1s>jbauY7hVk%pi-b!EnPyNftzj^96cw{c#b3&gZc?@w4ieex}>kd$cs z+@6WKG&s!@&vLd!q9Ll3#IyF`WrrxS;6eNC*=88GpP#{SH+3eei>2CnV@ARf60xd5 z%PANjiHUFDywGq6`92`oFfmas<#J5H0?1H4=eaYiX zJaV@kyV}`uEt|Q?O2N^XN9av5+zIcUe5p7%x{e!k#fam}7DVP}CN@WE&ecy1YArAg zpjYVP%2M*|W7+S~8eA*`MAc>Ix1JKYABv^ z`I9e`yCo~@o5h^J&6E7GrI>at_HeR{8|K=kO9nn+1I=rvqRE(;r?2WrirA2w;g~Jw zF=s=wqxud8Xj5gp|LyJjChI^KRRQKAfu z5k*qJ;(6$glQYT)AIUQ@0+SkgDP(WguWJu%Q=>d>KTA$eDT{h|bOd|z8FA%E;-M^E zeYw|?eEtCK!WABIn#Z`K; zR-rF~mr>E_hQ^!y)%P&GI}Hw7U%le_N}n*#N|o+AwAu`c1E&kq3A1)C7^HkB#DlO5 zIcIbT_-T8Rip=W<725LciSySGr<0DM)I(C&#x&4Y!B=C|t{R1VGB!b{kM~?~sAe8h zS^YcEIPW8S(m=8gV}2JW@}|*&HqF+e2L^z#h?{+^kUP2i$dX8dtGP77^qALkg$Z!v zs;pI@IXBP;n$Z?-;9d%~Rn}6S4V=2YFocU(AU|miVNt{o|H*j6dmk1W8r4#{XSBmz zA4d>hBN=3K57r8v&3~sLVp?6`_skyWLql7m8cCdFnOE7)9Ya1Uyc`o8G>FWb7ZckUDr7;y)H3u!5B=KzkN2;D~I+j`kz9`j?>+q9W%~D_}sy2K2#C?js>c@g{Ls>7rZ_ zQ3gs|YHTQH=ht~_O2HEWA<5m6i!E3kE z90O$O)fM8ggdq2)S_4wi?gQo0YdkVOiQG_SkW!|^o`qEs?)?sMb2!_ezsoD^qPEH+Xx`RrulZW5#WbyGL9g~S+jeNnwmJ0Ca@JLgGp8Su z&T66C`F(%B>cWPIRC)^a$c)zOw&RPUq{E+DEo3{|+^a*<8KdQTvgsuIB0mw;gBrCO zPq!u=BMYZm;1501B6qwTC0?ZoJdw@UNv_|COHO|a{GxQ9#j_(%PiJd!bE$`b%vwC- zM*v1KNZCImtwoB0{6V3`aO>$(qo=|6xy_=}SI}7NwEXcgz}Wzb0mPo`1l7!l^&!}_ zsA{kz{2F1I{v8B;=WBs}f&l2-$4qxwQe135Ayl<@&_R&m@^`I)Wx%&r} z5wHEmv*4)okH4R)s=gC-{H&T%vzyn+%zW;7;+@QC(Uwikcy@5JjLcTP5!=G;_f@iI5piZ8-&eXmfRu%M z4Kk|whvppNfQ@qM>hNqs9XjMU^93X-YwMY-}?%`>)CU@liSRo~YTGPo7F;~<4}tIR@wJIO=gg!gvZkd8VY+VEuH-!dkEHq+hNn4>^W@Ko+Xb)Fs3g>%uCr(Z)_`YvTCR_mD`Y9R zR%kg*Qxf#xV>)|6%|eW5p#T^p^iK41V&xJmAF=>cU(kJE_qBjjuZ=yZSVw7^?I$t)P)$8Eiu zbE;3n^k=&0aN!T}J#>8^i%!r+_S&k)7>3xUha@Cm#UzBT<<#Bo&Q7^4JyT~$$Oo3U zy@0U(aI!PqSF)RxlP?8gDuNBD7llvvuXZ$E556FEAa90V{wOc}?yl~`X-#3naxG#( z$JgH(8*bT3m8)Y)JO>Ituj}EQ9*##9d~OIFn^bo)ImI%$PC&=SwVOSb+L=o9e8!o54mu$TE9%s@VS2C$9&scGHA@zIK12+ z^Pu*4w;!C&b9FUT<()DC2-b$K7UK`vXNSpekDTFjv8^yWliPNqz%N0da}c$SN_4j? zadWWRkb}?b1wMtK^nfYuRE-lwRD{QMA(Hpzn4Y|>5)DGc^2!mE5+Q*>7=Y$r6qzP~ zAR$Im0{eEt+v=X3XHmF~2_s6Ul%u)bK_y-gsR4Vu9jNIWoxQ`p=KXzmKkm`SpZ?wu8pVPpi(>v-cuUKcNgSk4(P}rdVfnxyG?y+K`4c zRN1{f2L@Sbh^dj1cJ?44@$`}b0xLu}xZWdmo1cvMH8RGHZ#SQ}qgJL8^JY0K@XHqv zt4%cmoEOQTVW$j0iWsdI9d6xZeQ^7d<^qGgJ`PeT!ie^MpS;HyC)owUPclU6lEl|CArMqr<7t7XHBI7koRd zsJ)=w@vIt!tF|2%32Omt-W>ZuY5J)l!WzY!Z~nh4{`kGJ+E{(4r&EeTj>32UAW1Y&GKLd} zz66Q^vT*lgnwJN{1pZJwY`P<|854AWN&5yr;m(qaOA>O6c#$o~lQDc2qp+hL{cXkC zxaDw*z3FCwqeqZ4JVM8{AwD~diF8>;sm9~dHr@TNFMz~ZOc!VM-uGuLxkg~Zpbq;) z?q~Z6XBXok^$Lh-0L!EpO8mk*{!U5hg*t=y;W=hHN>HQ^MqJEp+P%!~p~*DNy2QkA zjiM}_%lP8iCep=XUV9=I>KF?yBaUQU69}ADx8uXeljw!UKkXEVQNqHW(o0q0x z6I48B2C00cy`g?J;QsU~_9_*5QfsQ3gFvVBG`-Ru{l>QiXJbCb(d3Yz}ZM{>~rw?~#>!7%bicsg0-DsQk zl{IJNpLn$3$o)S#r{xw1TOd@ukJnItF!YxT9rB`3&uTKigM+YB; z?>lFhbSgvQ<+s+7F(Ii`lnEu%VwDorPR}V5ljGlNX}u1WSl)~Yc;9G2s~AN#2-@Nt z1s59R`OlYt7u|Gv@3G#J%A1iq!2k*%O$Xs>u|QNLvXiWS9~WxN9gNtPt5hpqoO1W%(CB)(L4pg4nQf39HpPlHD-L5qxB0cVgNEvAw-yeqdw{jmW1hd!W7_csQIX=UiXa|0+!V3BJ z<$(C!okNbV@e&bjyYa@Lj0G zyl)Hvcb|FwcT#0}s(@2uT)xq>)2&wxZk9Tkk0AV~}hw8!4I1U@YlA@3cc}Zm<0w!$&5MPKq+fd_E?wcYoM&OGjb|+ zOP!&vpGDVs-Tb${_FnM0?0h^i6VW3DxjFIL)$J*##4u@kTa%LHN!oF1*9X?$2!Hp<=b_IVA*!hG{m@W&2PL>j-{3cDJ1|DIlOqFcmN1*hsT2+5T^7?bfnMO zQ!q*d>XdP}56gjf>R`;B2F`lXqYv`z+Vk)@AH5oHNsTBg!>4FDd>OO$66CI^2Vlkd zdK$Awa6(vDR2=mM+`IxTx!92DQyXiQ(TJPo{~oMiDDGx7!#0;pis={ zo5~L=ci$v2^<{_J@l!OY&mdMy#z(l)bu44H^2^ZaC#GitWBq#XhR34UVW5Ci2 zKM-O+1yd~;f-pu4J$y9vjD)5g%YMMD(juJWl8o{{ehq2#@BWx89dMP;jG|RMSxk@R zdk+(1q{$&ocWY{7JUY4 zV?cAlB7WF}jEp6T2@B%`T-^0~<<7ZSYgDj0rOtY~9gop6EU;KF4wa*ap-k}}KR~V2 zSfp2NWeHjmiM(yNxAg|KKD zi%o$_-?`h_5y&|M*Q$FZPVRT6&~c!Zj0E#GaJFFqKEZQdSL*8G$^=o=kmq=q6n^_? z_;af`la`z$D=VxAvj%>uKRe_J$?_Ay2<2q1!rnnBE&EXj5kUMe)oao?fo&oQcX4MX zzpc36^p(1>urP>&kd|UzaqXG;-fH!?-<0eogh}sq;UJLxjEQVa)6wSYUbcVjwfi!@ zL>Kz4wl}Bs<-jrE4TEg%dYm+CBeT`XP`(}7@IAkT2iSW+UB>@Yr-;uDmw2tF#3K%4 z&PS5sM*9YTqUhW3U-OlVv@k)aDpdZ5W-VUR?WEHk(DcM6B`!JMjlkv4*Hn)RP-e)J zIPMSk+wrN{o$C!5H^aiiab|w&`genVkdX1NWlUTw$sSDCSe6sR1oFa|G9llvAu!b8 z;}C|vx9h7_gN%1Ygb{nEPObSVT%`l~aRTtYb*_m_4q18Vhk@a1XIogR-eqL=3J&BI z4ZJuiB|g1<{W<0@ZJVRrNx}$;0PO8Kw{J3|Yjl9++V58jvhzl$mGNws4((&88KOC! zoJs^=u7eeogx-7x(dkbWwovDsL%TnN^}}m}Od2T&_=!!jN~I+_j;EmBOl_t{brUHk zE!YFFWINOF>$G@+Em>pPX(`xXJDYcpO(2Lp7oU6Vrlh9!2WLQE3N61>UG#0YnQiZ+ zwJ%^$XN2o&0`m5FkIVel&Xf~G?YqX1ZKScEp^Me1$BdV4-{D7??aOQrsueD4YTJ3! znWkd_3)|7{FYbQa&&+jN8UH9m>!vBdMpDr<#XT9Jg3lV59g!8%x4Q7D1G`@ zihvRx0*dP<9ikz?Dn~}2+*t^@&qg|F!-5;|y-qe)I>j0sp%_I&yX9m{H^m#{6tbG^ z%WL`cPsrbewP9RU`aS?HsEJ^=4#u%!w7=!;0u}4Vjr!+AP9yoPIo2T&0n{_{dAXujuu$QRrG3$AOx2sN^uYe-;c+vg#} z^K`RwlZUISc(WZx=niD~92ml&3Gn{kgrH~;C3H>VG+!AzFc7(G%IUJ9(znGC1TMFJLbH!e>W1 z!?e18H)BK#v=*E;LgsDZHusy+D!G2eiM8a zkW4-^+(iOy25S`QxdCg~?_joZF{zPb`M1*2?2q-heu%i(xMFg7l{e@K{>UZWKjw4~ zcRptYBOJII=Z(}v3_;Vl^9+L2mpmc*bF1Ab$FGXurl(a`rXM)oKk&9&%jKDK>XB0| zJ@p?lmCTu#8-aNEHaXz)%9;KtHg4-y&RS3eA{SH9obff@jwMezAq)-=CIcWP$^Hva zT=lyrlI0H|KXUWqqNAmbEx(6dsLk=HaY8Xm7;A0jYQjj=8I(({7X*=nMaOqKI4*we z5*iq0WMZBB8+Q3W#rnDa86xf}_aHJ+vE-14=`ymA%pY~cs1WKTz(#nO?Yt)e$<&fZ zfxu(^rw338Y0r-y&i*?BtMh z36axlTw_=XD(u^d+gyKAs+Kq8f%Ys-A)rh@NXTjLGg&2QtjBDk91v2+ubOEbA*^A-VEC_9t&jNKha^bA--+ zAiN*8GTCz=ba!}@qjOy6|H%=w08roa+aa;(e@y zCLhc0nQ>M{hihvt9Z(j*Z#&}_-k))}4a3zrJ(!1vm04s6$Cs_Hmif9ehDEgg{$WvB ziqI9?1T;V8diRxTl8ZTS_SUIg{VsN`h%2rNYD!|6Bj zrZ?Kvl#6@=lh&_FIOv4X%T_b+!Ha)qlel!5iy&=Td2-9aMLf7hN{eUgWuMkIx;T0?eU>m8!BL1Cbptm_Ae`ud+!xI48%(&KYVc=`n=I zYoG5y3&pKIl2#D|VmsFYO>1natK%6f(3dYRVT!1+a^d?CTP#S>$_gO61)L<-`qv*J zU0pp?anj>e1`mZapaG&uwcb>+e#v6L!|d0Y7r)L85$Y~ar`%LObCB4H}mOqx^f09rKCT-W?Nlz-B zuT$J8RC3>KI@iwEtv>LVV_0ing+Rao^y=APM}1waG`c!E=FHPF{9YU;*nAj+qhW=8 zT`|$R$4-L}FKfkTTOTJ+92j?<3XD?K^+pYm?xXw0pdTdu!OEt4SJbQyet8c}gzT+# z(nM3Le@72UnHJ98up0TFhg*gm)#D4A<4x2Pn;+nxRFAgCVyDAkq$QZ)lRh(zXkX^_ zQ0{v?N?#7x@f)gmB&0wcMr1mC1U+*dX7%Q_c;;A7jQu6HlF0V8+XXx^Wgw~5n+p8_ zPcCnbt_42EsjZ^1TCp-jBxm$R+!_+nR+&j;J>}{D2(58xeJgddC4T(^Nlj|S*n^9V zIL%G*zwvVGwwtxkEn}!IQa3)go0V437%9-NCbRR?UsA4m_(b9e8mw!Gx20+?oj-z3I*N-+L9&&aJhCI~#Tyn_kyO zv;T5~GwBHn2!slCwk(}3;J&x5Jk3Rr@p%SKFZvi(37v`4aZPGWY3Z1p>wbYnI}|x#!G%@3YU|*S_|(X+zlbC8$6lq!BMQ>-6RO&(78PhPz!i_3fe5o&p9m zF->QJVs{8GHh-UA#1OF0p_s-pLuIos1NR^2A^Z2tvpEI5;F+A{@-M|{-(_ZKzE#L} znzUVf$-y6JpDR>wv|ernJKa?E&TZ5kL&d)r;W8mqo~_PSh5No3o8?(|+S_ z%=%leJ6{hGqO?M2%22N>{`dGxt>WIvT*cPa2fgp9 z=)8qrv|Ankl)C-pAW3|Cdp6`Lk4?j{mk9DgwPxX)q+}=CdgG-BPcap!vG$zU`9*2H zAn?SfHQkKwpnYL~l*s$l4F=ygSuZ&1dDGo(J=_5Kc#xgrWx( z#?j`vxMX*CM;8f8kiR79f*{`BcsvJf=(_gmsgJ2B^%I6-?{9@l!;cRaoj(+6GXN1# z%q;|IWOCclYN`^LNGO@p9jC+0HKQrA zzIEE$=IO+CmB^?5C`!SH9)rOS2_!RRoJ#LlY7Y4%p`}nGSF>+X-l~l1Au{VScHmtU zn!GO<`6mhj{ed-W9*pEMbcSpN)%`gb;cu_L&iENJw;jk1F`| zJ9)rISo-?3KR9r&y<^Qt#R5jHDj@P*CRgs#3Zhi_Bv?Z1Rx@sN9uBr?JKU0IZ_Vx( zX!0fWVE;kY90?uC*Rqr$V(MSKme2T5xHVaVqZhW*&2Y$+*n6Uqz#;V$cj)V#dxKOE zQC(yG=h4kf{Vih`i6?Y)N>5}6-~Immf|lu9M0k7e$USM2b1wH|w{|!ZW-{Cooqq=d zjLC?A05rqEb5X`PrRs9BeNArtSsPX$H5#FoZ#eCD_}Rfp|1w!*de_M>V~O~Qor1{s zI10nSGsB(xOez+H6z-9EhAFXJnuRJMVwqWQW3E8MFBp6-x#1;3;uB|yG(h;SLdZot z9~G+fE;Z{EXx5Y8DWtP6??SOrFmq)(qfq9z7L}0`^c;-IZrnv29-kGS(V~93J%M6R z+Du<6a}{D9fI)O_*rcW(Bf>``eRp`49NH_tHnGeLc+>DB+b{~%V3=0(o?Nvl(W?>A z`VNIr5l&5;iSj^d$Y)@y3hBb#z#ivxbhajiXlbY@Ne0rt<|`JCgF;T~y}<~{O=pFd zvJ5TnWYiRA#21I7e&;w^Pma;Me2+e)!x7K_>XdTMX7DD#+i4%1w7DsFtkKedUBE%u z8*emM9q>^@th2H4p6&253aHYoWBGHxnzBwoTgr(fL zdcV>+%`|V{No_1RBv0%y^5C>Hi=Tx(`$`i}gZk#8w&qX>{TFaQA;fn1#xeYVBc+GW zuh<-xHR;0kuyXDzV-Y&?`HeasLpxR3N<@~89HbG2Gg`8^NyWC-n z@1^q%@CeVVyXF1>OOhE@%ju=VzlUXy-1{LjZV*8A>)vKDs$Q+ImyLRS|Nb2)guI~L z4V_KQRsOZH=yDsVldG0HZDMS$Zzh#+&SE}V8Lh8nU-`Y4u&?|g-yGt>=lKdV?z<31 zB&XFUJRouUY3j?(7}aR?_*ew<;3=_w zzg9zQc}q&sV`8PZdno)cb3d5VU75g0iKlY*dfP#1@pO62OHpcwq&Vb<%2AH(8a_;D4xW&l&GuLn$btg2N(+KDoo;%eljO@K{p7L7j z2a-Hgi?=7I*prr)$+Hg_0bI!}l^89zFvdyT$pv=S;D^w7aPRo?wx^c(uWg@FQ zC?GBagI&om?}OHnIdV(O)n`ry1{`lW82pRGrH}{v^eRJ1qr|1l4u|ZjO!2?B={8Ah zaZw--LcewKjh}v%Dd`#;i@ky|Dz~T^XOlu+!u9meSI+34FoJ<`*f3=d%$~IzK|+Yx zaNR2~&(ru0IWbb|^!Oe$==0H(#t$_{Da0W3^UWAqmwb9aRSaq?s~8x~$&aQ@zUZ}5 zE3HPqHD-#P;oXiq)BuL6YZZ-id|rE!y*1r$z6zvYZ?lLMQ2pw?PH|h19E%tHGK3~& zN)dn(WvKv!-Ld=BAxWfz#=rr(DSOns18Jc<-6XEA8%BbLtK1A<#ly}1I@@s0k z3{}vm%NiXAg6z{N>*vGB5nJz`5p8T-Tw?f0_{HU-A*h5hmFkuLdV@*C!+p&iDo`A* zAIjC?lp$tqTWB|RC4HLOSAt~Yi$+h@+dtkz z#CgeQr~K_FyBPjq@ya4{+CSY=B%O*XJ>l%)JZ<5#&9P^HmNNAqc$7lMC#I+pC~sOb z%x`xb&8DMBPSr>A>hG!y29aJbc|=9H*qn&MLSuwtx^lug@o*nLe)Fn*NxBnP9OS<+52f_{fIP+2Nh?vIsSG^tS>toa|$!y`-8 zGKuvN<2si!Iwr5%n6j3qXj_~(x>6%f{1h^AA$ke@9NLFYI6h;$UPw#gXvHhcm{)@l zfA(gGh9)1s_Shqr0L?4Rw^f~h1Y8?S+xLI)S)2Gvh9#7)3V!js0P_nFZnj}W}4XPAw1<&=56%@?v7Owd3jaoQq z*Exow2+g8ICFcCv8CUVpNV<2F2N%!g+8ra`vr0N~y=rO1QooBfNzuOBVeyr33r%?R zHyTP{eg68^LMEfUhrWjSHK0Xs=tUerOY|{8ezq|y;A7h?%^;YnNG%6Jh@pj5Mk#4k z*%2SuB(7jiaBukn)&O^1Bg z40cm75L&p3ZeaRcSM7mDzM|#Sz7wf{7Fh_PGcDU1?fV_oe5rgQK`(+1AIdA!b=fk; zs+PQoElUd)U09O5HR&mQeD=w!HNWhy6d;f{xK20p;P(35j9ra>KM;(-5JmrE)(0{# z6-K@9=&+)!3A5MsJ5+7Yv$jWJPRWDbVqzS#&Q$GPUEl56-Hr!3s1y4J>Kqm$bui?I zVLGE8B91hI9Lb{#lfmJkrZWmm3@d6rxFw`Y#ox%TaiPX$KS+Fm<14SJTmz3K)%{H8 zj)u$cM_ljIK)t3xNRL%~d}=%}H@LWNrNiN)d-uLR^m-IhQo1hu+po`>+a>&W!aXB$G`{&w%+2ry{PJb#aAv%}k6*mN0q zX;`_tWPb0f-qZNSVxNT)9nO%tM*FP}G;OTciXHQWFimj-C8cBoPtB57^Lv#!IYui4 zF(dmfD2a(Z^qN!L?K~#cEHAjov1Iv>T1_P24gtgmduup;;{C3HzRloyQ}>5FWvC>+ z(zW~I!}JzxPUe50()J z0~BXFxUle{Zg&$qd-QOD4IwT?%NuB^MoRP>e25Vphnu5?XpGzV!^p6W?zg*JGd0s% zk=LGmUXZTvtpFO0->hWL9Qv_$jn$6FG*6sZdy;VkNQ5(FlMmA*N%=`{_2 zr#ijq-z56BMq{)p#iTKWA8 zZ#=O9Z#_Vcu5)^LuwW`hvm_J14o~d9`{9<=WXw z8rl0bJn`BM8||S(5B{Pz;Dp>0bO`~;3r^ZCfR&0rw%`P-$i(q(h+@=v!r^RZV~t$9 zyNZc@>)<8*qI`C@T3;)>L3Mbidamh^RVf$kxw`FwDKgq2umN9{(N*b(gbYeE-C5Y~ z6GD4gZ|5k0b^#N6LpQFVGhSc=lQTsh(z~W)RYD_!_=&Y)PqRBuOjO&BLpV8=Lx@>A zs-bE$aa+6e+m8Hl@8zEIW)V-Q#TTg1)X^F#Wb-q$%tlg*WILaQJYmiA_A1k960AKG zHaJ|anwp+jT8mXG%k?Y@#6B3O1ed#8_~M7sG(&>scSvD z9=EtO+!e)a;2&=C#1ahIIIO)ZBxF(=Vhh-@1ThUYpN42vAZ*HM>501Syj00B09CoI zN=imjvmNbLGieF?NZ}&}wkc=Z3yWy)9JTFB;qCUD3*yZ;Ca*y2uE|~j$`j_O6WUy* zqGJGH#8Hs9V7Bz@ z-jwGzfZ84p9fBB^w-u2o0!khv92v7(aHeSK&tDwY4^Ty35IlSpamAjhSrSiM#KTsg zV2Vp2BA!ANeqnKOGynF#T!6L*2XpQ{V9N1@bMMnwM(%{t`L?c^5Sz3=+jh={Ay@T8 zpH~p74x`$fXKeRH@lS}AAIAuu{Jvd&ce~CU9d+;;-jCTALH_3)ev?YWuO%k`U3%e8 zz~uOcTA&2Yqn1dq^zRL)cvp*xNqa5C58VAh*ar25&JRop3zS;b*9v&K@x?hvfWN@Sg2Xz-^Ko&YYyD6n3+C zdKf(eBNKjN$NFu$sMZ;j3BHEI2my}zhAt*kWg8VQuGjsfZ-vT*6yJZcf>RDE7#OZ~ zj*owFBeIzN?1A5ZUPs5hX9#JT-0%J!5+OvtJ&MDn6mO@}kG`3;H~5vlDi|kyB4eC4 zdScueI`kPmJUIkB<@aP0UA-gUmr>n6z?AsJjqG|a^!xR0n23lru(zQci;g=qK80_) zJJ>;wQR>d+i4(8f zmxS2Zj?<_QGI1`v0nsWJ+;kioc?=mK;CPsnADqXx5nl1`&<~WbO4JN5+_#O@9e@lP%fC}Xi+PgZ%rPz$K0zxmaY2f9w79eHQ1RZ%6IT7Q+}N`#t&{m-NuO zvqR*JKwxi z3MOJQ7o;Olwc%YCiOy)3$m)_Hh}6z{CTbb3_VPPzz!%vNT+7(R3{Tt1*o^l36m;~_ z&uJ++tECra&(K7B1UhPy|M{NCcV1gJEx#qQ+GI$fvjg}inTYvI@0f?0#flp zzt53vqV(2=SG-4R&CDKlicEf}34UlK0r&sjzmITPFGlveL*qj} z#v(-iXl~fDS`jz1c4czig+ICZC=1kmZ^rw9PeFm%j1yVn^T|gGLVP>mxryppgg$$4 z7+HYw&*Iuz=wjCPv^sENNKd!3s>~;lm#VVpgCgnKlY#w*We$g#JvmBaq}&#;Kpm|K z{Z|R67w;go9tQ@7)^P`R)7#~ffEq{Dl44PPuoYYdfO(Tka41HG&E!gYgsj{VIG3K^6YXlCZY*9GVP(iGJYNN#RM);kR)_u_)y?-sj z-d#hc?)eKk+GWpUOhDO-lquxUmd%wDz-}Mw=aSugvH<<#1#PpPU!S=#hP;kF zz5i_IPW%O!^cqRxCz1TUoa}7r5zy-VWMdntypE}z)|80Zj*%fFy>|R#v49sLAjjN~ zbB&SqT0!h6l)3gT*t-hk zZZv%2%Yh-e6=bUMjQ7#~3&?Br!Z(En6v1_yvipa0D4%l{>3=9(r7l$w2V*_xXfige zX5>bZlGoR(;X>OT`&Ht_ViiIpNfT$F+7lNQs_s(l#Je8&2ki|Z^i4T}*5Z9iVoL4H z2V#`Z|J`V7b(?sv?2OKc!#>*4%3cQvA5-s5>p&=Vj-lgm=F2%o6oTG=}KO*cLY|>@E*w$*l0$b$@k1S!^$sbRA z>^3MBD%f6brQUFViGRqqM zwS$mg;~BZ9!0qb(yQRg_m5c2SLsV_T;Dsz>du)LhJ;ah4_xMY?%O@0h-|YsyxM91J^ftWSC}MX@9|lM1Q6ay22jcuUsWV0&?Nj*#=c1{hVJ)>FA5?fLFz{Bh zZbabTPveKr!@5K>9=Fp$J`}%q=*8W+^|F=3_ZR%@!~Z&J7h4`Vi_`tiCQiL?BVZdV@aGIiaH!l%IWiSzWuhEJQH9DX#d6ecg;T3 z(t)l$luz9Us6KWSJ|$#o2Kt%aWR`TihU+W!iHTcSP3EvGK)cT&A@(BUGlDQW-KE+q zN<$@RT6^cir+nVf0K$HulIsf&657V<=OdfKcz1K6;}4(XT=VL{er;VaRS{EjCbS%y zVEIJ_1^;`Z9KLrWyhSN>FX?QXXf@L@kbBMemLSMG$*08O(GDWjs@nU^`T0od=2^K9 zr}seH!uVIl67;6_iF|m;CzNy%Z{Pa*RJbH|o@WXXD8=!g-^4b}ddVW5BJ<%F`sXz5 z_F@KE&9~y+r2B~Jo>nePZ7K+;_T6GcUTg$inhzp2`tJ!fI)CbUb3B0%CvZYiZ#G}> z47hDF5!IcE?uKNcB${Ff4>qt@iUqKRHS`|lU2KNuMN ziKw|0Jep{E|K+SeqJnqfLQmwU@H_hi(UXIw%?hhgT-1xqK1}YxwBKYp`Uzu`y5|xxk)?Jl*GE_Cfn}K-_YW}PK&eD z^;RaSA+2Dl7>`>ZLci||MZtvgYlwgef`;!E!O$e+;puNv1t50{uC*rVdA&P4AtoQr z>D6EE2)ZsuRGq0__p{1w*l$g}%ael+d>N%%SzC%axDyl39gQX@e7k~mdqlX{;{2gf z3uDb0%-H;>`HcM?2~C!=rHlR216ZE-JA41T!Sy5HPqT+23Dc#&e|23~EC$%W-qc zAn1A(wnF(9XZKLprDx$*>cIo-wR{pi#bPskNjx(D$>tI5<}|rsngb1+q9{Zz z0zu%mPvj+lK>ciZY*CCwc>hJw~6~F93UCqGD?&l zvz=G4DOB*r^FD`c0=0_y&H6*aY71^>w2++XjV4cO#a6GtbzW1Hf~jgeO4StOnZPxF zGciite0?612SZyNuX+<^`i9uORc?fNUdKt9PoKSMR7f^7wC>FAzLP}p0sWefZdP)KowBnGAs0K1(2?pw z?W7S8{tWf_L)9Kv(ie$8A3;9TYbDb$ZRj5)em{QXaX^(?q)xNeMkqF@mo*rv_h=It zwu_aZd=@(Vk;t*ryOx+cFC2d3$4?b%xiV z-A8jcJ@>Skcl}i}ulwg<=2e0w!{0z#%mOowkM8?L?ZM`XqOTISaI58|sTs^16&+-{ zSXxq~XDJa9jO~Xz`lSb2!Ir^{kl2EW)E98lz}r4v?pL2TRq7lYCROQPmOIE(y-*^t zcuTOJ@~6kq#OKceE0Z=>UAf7nhgEUObhS0{_0Ndm9DSYkb7v?QZ!&4Q6f(AVUskPj z;OJ*){B7^xfF(Ex@{Jzik(2LL&7IR6*w`+-44{ z&0;VytiDNTV|*Xfru|*?@;=90)lHN{I7yPw@KY=(dp+Z0B#p!^;jjV$A{EtNghTD* z+5m^@v|}K06l%lrF|R&!bar!EtRQY` z>~S|vVi`1b0|Q6BJB$EI7L|L-taXcFEJM5*LlkabkSpf)57zMRIv|aL-7XmW;#Drq z`NX9)(y|I1K??$88q9Rx1qFrDg4T~kr1Y?T>kD0mo0YSh|cJc?%b z5dOI+z-J54ka>&<&+CX^<)T7cvrS+1U55$^@3$~cobbdk#p@p{FqjA7-QHu1{vF1T zL`uSX*Qd)}YyXom)zg41AdXA;5FO^^ ziOa}tkXf*R%;F3<&NY)Oyh7#8JNDw)CL}%Ro9(WO?e-RKNh{&Lt}XG}^%BB(FI{yI z$&H0AQoDD<;LcOlcBM+1Aep@!W79s>V$DsoVXpkZ^Y#WH?J|v&&p-V5gZEy!3oqLu z*WUcxbH8l=ddMQIg^i1pMf%g~hLE|gm801xwiHHV?Lx}m9e$&wnHKvxoW(>5&Hfz+ zM=)Jz0Lm#51pya72{3D!5*Go+HEb3FgXrf{U&*;S9Qp1LS>k@^4>9FFM8O(}{<;t< z2}lO`I1k=+PJ-`$s!&~!4&k!uw$!rR@dqt3-xO8`J@tT~#`SsHVswlt>+wL&FsKAf zvfXcEP(?}HZ*1B+lWh8`Y|5JHM#$`v<_cJjeiAgx9Z6W`rNcRj*8jvnr16|RKR1-JakI>b;U)Jykv;U0ultR3JD5~AwF zkb7UnA@sUq6fjBDUlq#4QGM%*8g%@s?skA zOrfB+5)$mz8#Ff87aLnnu`;TG$U<%s1&18hadTeo-Fgb4u$A*ZIn6K!99!`olchOy24H zJb!zpf*W9pnKmVilHK+74M&}(P!7{!)?ytV3@tLI?0sLj_ybpxc$<_W73RJyX!GDn z)BiyPms;uA5dQ!v`-2s3{%Z4(V7ac;x0Xkzc%ME%Uyc3HeWWLXByV&!Q9c| ztKM#3WP)QhoI?p|_ENaiKj5e-*0Y)_9X2zcbh!W5Lff=O=#=P2O&>7pT~NHmYOK&7 zeH8(1?m3N0kR#`OJ-|&iQS|Pk%L`5G8JP;NNGN-O0x|m8zCpDYAh=Z25|0wCV<=Yq zzG)Z@BExH|^t7s9i5M%}k<8u+VB_tJ@!t9G1NtfDTB-i|c0xz3WVYi>>x-R}-O9>3 z8IVee^!4Q5v}iQ(IIAD7l%QdE+@iV=&J(L20YR$~hk5cDSQg4quBYtAtt}3%?2}y0 zxRY(&TFdSU^9hDH##cH`Z_7%}H^U>tLUM~ugNx^5qw;UTdae~{kmD5ysKg1|vyc?L z_C$_?E&-dQf6hv!FW20b8eoBRHyIUmL zu{WUB@tB10eUZsomD51^k#zh`rLV!;x%&N6AK>z`0TNbQrN6f73{dw~@c0nG)2Gh)w}MUO&16f?7++_K%XWRgt}`e}4kj8trtG#0-_ zDUlDle;eiBH)&&NVIWq|L5o~PKB5+3(3m=C(mQoM!t%PkWwlv!^(ib2im6M97NpGCY+OGgjopd1mE#xm=BI1ew?}$1`*cJm@nn=2S|Z8BWI!RM`$_!gw1+ zBo2wZ4y5Pjh3QGvS6eYJ(!5%OIu;fp0{YaHVKQ%NXtIv^?P=z3<c^@}pf6o{|1Y7Sfb`>`PbO25}vQ;?^gMylx#AwLg%^cw7A z3JUrc)r9}J8#wkie#q2jn1R`}tq`_6dQ29{llHkPI5-T%TXK{l*gge`ug~4mmbz`} zj9z<*2z@!YIvGcZD3>{N=gB<{tk;%L8lnBzVu0HX*Y3E67VRx~$AT$sAOeCsooeI+ zGhOs|!qB+PKLjm*btfGpCL(HGV%MXNNqQD1L&9E1JTZMSLUw% z*rXIDo~y>`x#7|45^ppO7a;&pMy2ZR$7(?3_uzc!QRTA`g{NapXEBD(PtY zAPRgF>Kl;6At(hqUIbNnpCohl5tW-I-N~8_SL*ROO_2Ej)iVMT!hr0r;O+%-Oi#VAbz%FS}-khyv7={jS; zIjIOFCI{UdOQe5D)<$ zUsKI)0Z6BcnAv!t-#pOgJjiA@P<5(#N3Uj=Ckm{I^Qu;%tQ~oUruyl_g9W5^o6WQEE#`;@6vS zIn>E}gXCB46pS!Z&e6!CsuwxsQ7LThax5YB)A%V-jSLznaK8sQSf;~sho9{obENfo z(a&~&!)3ih|8}hWp4xQsPuCH6x?sX%{xK3&w;Kn=CwaW+14!x)KyF(y`^DkZxpMvJ zn3Gv6jzegx;P}eS7G6pbri8CoR;H3!yo?3O02f`e_mpty|0XJTWA(K5aKZF$CC)?0 zoZ0J6A*t#U$y;4Q0<@@<6s1Bjjcn(i^~}*SpuSmroDz9fRF2;3(ZN9?<(Mx>7-BpDN|JQ}0pc?2-LA493dc3Bv|L!uP~V7&86-PZZ0F=} z5CYO6(4@pxfC@?Fk1948+40wy2Zo0O;9J=J;NVsYkT?ELD0)vi=Cx}FnY6k3eBMTz zWw>HjUYpzgasV_TeQdA>j*bXylwTsxqNW$U%>QiARq+@hyu@?^D<*fJQnR)JE=|t6 zcK)$aUA_T6j>e6~*HX@h+r4MAUKhu37a{S zYAb8&&T`SFI*&6V$Zt%v79{Lz1MG)llRer55{4Qe_6`UKbN-Z~_Li2GUONDBJ6CbS zzTx4uaF$d8E`&Z7lTPjum-yw&S2qp;ECS~QCp1q0;#H|PFE zNJxwwh2K`*1CBq(H3wJ2`4W&Hx{3n=*MXh}oAJuiJOz?6IQCDM04h_t)<3GqO!t;Y zflw515-0I_5-8lehw=aiZ*!N#VS7IN@xHM6AW*NnSlOjY2*7M!OzA_p#-mv6 zzx2lLd*1#2EnSRaqnm0V-gd%vg{-$mkW6k?d81ac_4&DT;O6YlXMi073B)`2?IWBf zEhjhVC?YF+YLz>?$xRUa;{B#b(Zb$MzHt85jrUJb;{5C zo)J0l{DT|R7qqmXEMxe$zsMHlm-eg8B35N3UAUXx#_v%uy5#V8%E=Du#If>1EQ@l8 zR}+7>3jH(;Nk5AqH<fU;a&+E|N;#zS0jyR;zDn`F>nxom1$bYrm0P$Th-C zNIbvX6AS z^kX*m)^73&bw^MsHRNDiH$~WO9-x9^#;=?4q45#gko<>`x%z9LbW}-{sHnt?h{G2S z0N;aL;UV$r9atam{T`XSFYEBQEj#?H(bpOGk#Y-BKp+t*ZR|Q7^4GS=OmAwU$PU6W zI{%sb*9L*!=m{bnHH;)vAuYs(Q2&d)^mZ7(06z#V;tno_U#P{$gQWI^>jU(p!5yg& z6#D(s(pa3GYXE@}vemst%)Iq|BmB>=<;UN?h2=O8{17~GZ_6#>t+N-R%@{5Bvi_@& z`-f`dc)e~o5F^blrkPeFv!~jcC530D@A&!R`u;{TO~5?1;fA5%>QgRz8gTyE#QqQj zH>lctJdCF#*<^Rl+vYL_h}40xz_ZNxC%#@*OKI+SQ+3<64PVTIBxqcB7w>HaB{X>r zd4eGVwKj|EeRj_a^lH^=X3|ow5IaT}(;Xvz=uSna*Li<6%Ry(XR0|~qfYG|!=2C&0 z<>#|23c$*TF55x!2XDoTHp1!EIw*!r8;$c)O&RvA#rZr|iifXiVblVM$0QWuRvv<9 z7OLVVG}%6(&%<{nSK4xSCDRc7rP~K;Z0!!Qf9QLG>TM$1#;6<|6maUT7Dp|I+1cmn zJR^^@(aF#tBPr(QeTx9LabmtTM$JIp-oGWg1KFDShemW^ga?CG%@g&q#di)jedQ10 z?@k123i)>}!jo-Zk|`A3bjRxmdY-2m1^6k7U#)CXy-C0=Ii^=i1e!t_DnGU+DsVuz zODH0@2=q|RtrkV0s`Q3ck&Gu-xBh~)*wS!ur3T3UY2N~FKU9K-nx8K4Qbax-Ivm(rh6QQi0PQA3rP@vjCKIkqdqaS+(M9@kTWe_k1$6ersfejf=~m z;R}KYpn5bn7B)1*CQNagt3MmRsD83F{J0ruLXayZaCy`eeVrEv6p4|shr`%2@E99wyYHRY!b|GAXrHUiCC3Ur)ITBoh>_u z!_twR%oA3Nu}i$rZ@=Kk?Uv+pr^Qx7K+dsWIyz>?fKXmsv2Ukn0K?U+HIr-6)xnwN zxYm-k{!ev>!UvjA>YHl`@yt}uReIO$T=JCD<3r8iOJ0fYj+Het1vx8b&?qPQHfs)x zXz9;%XcEwOiIV=?M5n}1G;#YDc-zj9x>3Nwvx?*%up#5HOh`+^F)=X#%~nC^PCr23 z-?zmWh?p*^_koG?K>r|h+&ep_t&<6dn_2e}3mEgqhIk;$NMc-C!1+|{;_{pC3#KPM z18eYAaC08gWfG!EjL+B#;}F?aE`D- zI$FgB;(aXZ?z-{ z!b`x}?l16#ip{NUvZJ$;tg=HFqd$e){1bgx%EHA#2L5fBP$cyJTH%v}y(@RP=quf3 zNif{{V}m_~gNfHb)vq_04S61cKfQQ3V^Z`@O)Vc(*6#A)gAnJ4`u50k4Zdb;qF5J2 zR@DOSt;+ZWKvs}3XGk1p)!W-1`mLyz7iz3tnQ>n=;8|<(aL>HV-rgEmGbz>wQ8))YTs8w>7TI)8M6_~~|?o<&(e$m^f>48|l)!d;*nEV_Rm z;5OL8o3FGDwtp;MSoX<-$lG^L8@iq?$L$#gVqwNOucI_?ACcOF9L29Q^ zHti-xN(^LoGlMT#QYx)Cg@K4c$DojIwb{tfmTa#4fCWfP-i9`iWu1OG*bcqIp_obm zEe(5C)Uz{<{?$_??#&h@McHS75J3)VBiFWs##wfsF*ZahL9tH>Bz?_IV zo72sz7j}={F~+gV`tpwORb?4As*wwNq=NFD$z|gA&d`dzO)A%;Uy&j;ci~#Co_`KX zy+c!{fs^KZ%40PXfe=v#@gE1wLWP|lk#tI&)Z#)2vsCFjZ(2i#X%3Ja%7VPO`{)C$ z!uT{7C+BmGXlI#{v2NNIJ6KD?E^F|m=6TRPU^TniNm;gvy_a^EcoJrmk7L_N1#-bF z#9l|Hq3P>g&m=K4ETH9ucB9)w0`KMK6bJ%Yd0FZHqFaQwy8?(SF`hB<$0z772c8`V z2b+hWG@oDV32aR=(c;$_!m0Ok39*%n>`Tw1yfgMgGP=zsQELmz3A~CbQ=I8wzxf|Z!N76ZO%w(ai0vxk z;^E)6nmNy-*1J1b3clY^t+OOm2XEb0=x#hsoQx|0zEMy4y$|%?L052+i9t|c;BdaX zsl{Y*Z`H5O{`A^dbLFn}3!$~@jt&Vxw>6u~unDBN4Z9HW?7}Ow$p0z7>3v#qXZjpt zwAijU_SoP7AYN%ydKBT+Oqg($Zghn`;>O-R6bfGPPO;fc(zgIH9)Pv`d6m1Uqou*s zUV(fUj2uc4y>(mK%VAw2dGshC=Ih-i2pChV*qT&yzw~WVZvI5-4^*N7+q?HT>7mGA zVlSAha^!s#X4{hdt0wK*Y^?m1u9Sk^Nx!S+&uFxxWWb%HZl!ji5PGZsg;yKv2HJET zQFeTV`ueUOLC3315G;+~v7oir)Vbh3x{|M%JHz-RgjBVJ5vD1#|9))2{cy^!C%y9U z=JwGm^}wlC#I4)exZoz=rt4tv+#28FCbqgfwCT-h9uBCfW_|GW$b*19kD!K!r`l>F z>cZaz-8))Pr39!3#xkqjXJRVCvu|0r4T?Yos(*B#1G`YC33EAGv3T)kxE(7y21$nL zNWTDq}3unbN*%3N|__)1)AAAk^^oYwF0Vx?%~B3`?ly|*=1v#35W7;JiWee9zUY+$6y$z=hSUPAmP^IrNB z#wGLKRrgz>b7yCg=FQ!@uG3Oz@_r-U(KELDaRDKN)+rSWrY~zEB{79u@Fjq53Z9_> z08hLSHx&RK8K{j64c(mBZ>+XhhyqY70r2nP;qQ|X9)y>t8+3F$5$l$`*^?w&3x%LX zuhm~lQus^q*NdZYx4h9LI42$y?*PauZVrqXuCDNXImX=Ov7x1-i+3Wcy(jpkch2x{ zlOJ4KSu?DJ&isPx7 zshnAqQjI1Kh=4QIr|I4^Y_bt3O~8r6QIFkE##m3=e7m5)pw)weUhvr$`Xj6iH9Xk3 z4-Na0I}76n4wHhw4oi-pirgqt&*#5&cVgEvTsG%Gd-EWgn!m|67;Eqi@??xLK@cIp z%ouIwoi0|y`Ezwf=-37AGziZS6ctc@@fAI0XRiRbRpr#|YBUo@f=8KR-KUfC{m=wY z2E{+OVWlGbQ^BJk?daZ%3~KR)RBf!`Zir@wsj+w_K&x*+qS_(e18ll(<#u^xrp>i2pKutMVj`MXNa6Ms zB~IpTr+se0#l6<3KRZziFr^}O3!8=W_R-Pj?FbKwNtfYW)L448#2IeJ)6+w&@~Wy_ z>r=_889L;gZj&7u6BGCFa7EaaeNgimY=g0ry^GBqC}x0q%G6R-%*;5Ga=igbR#vtKtTjm9dgQJap9(sCN<3QV zDXU#+(%Hph%*IIn`n9WPg_J`@2`5`5QuGaey?w*ur%(J^yq_(E?^c5GAEi1iZ=>57 zYL^E3W#Z_&SVcS|=d%yrk4ic*=vL!rE-%lWH%eXFD>zdHyIn*vYwV3QJVF2JyUT0C zY1(Q~TvC$6um5Dasfzr*FWp$Lg%fu;wo1D%EOW(98*gRf-CNnP=PNS zDiAA596dpowb#xyHERR=qMtr|V_5WU@9s%wA$uG8WNj_UfnHVSWPPB0#aq3~T>(jAL^doM2YT{z!-NXegwv3qb}aEq4|Ky z=h0#BS+(`_T6k0D{Rfd@Yu@e6*`|}YD)d_4Gcxdrn04i0y@ZPYkF~cBtFr69g*PG~ zk}A@IU=Y$NjVPdWcS$$W9g0Y9knWc5?(UXuHr?Hu*qp`tKF|4`bA8|S{q^||>a+Q(b^gY zEY{^}+XD|$PU^YqKf6MLlirIb&2jZCt@j$hND}xweWb7LoKsyh?V+!szo7hen^T=U z^JeuD@w`dXAC|2*1gKv}R9`-P%p2E4LZ000&q|OjpU!e-%BSknpj#t%snsOBV+j4b zT@Ikz61#Dc-Mw9)Ga-4lpkylk`1#>IaRQp{A0n-jJ|qQxwmF%OoQ$&#jZ}jkoW)<7 z!vY=KxN|H^-tf~sX2Jh6VOnkus|f)L;PE5ar2L&*Wdxrk#L_@I_YlRGpH3}m8_XeSbb()kTWsTiyTpgJJ>D#4A$&cta8q+go+(Xsp=E(?{56%* z*VTcHKZrSFZD6G(U*IlHYku3%YS-Jl?c2b5*tY#S+56rlJu3Km-`#M9ygIEioo|bd z&UEhC?wsxKo|Pu|SF^i~SRg3`aD{hhThealNskeYBazq;&@=@Lg2(XyX0$w2)Dz$3 z{r%RZ)c%_6mnUn|QM%~wjbXccfa5;+p1SZg2)q!{m3xYEoYB~@7k})55Jx`>9o@n@ zaLa2trH&MP8~mat0Y#jU-I4`N4Tx#25l$7=(MXrQJwwL`S-kcimCYN+M3h%;(Nhan zd91fxUtx=BK{*<@zQ=wykwVDlk11gi#n>>vA~7?gaZ#(hBnQDevsBqREsgyCSAX3W37l=e76{t0 zbD6N16YHv^S1mDol{J{q)hcw>@(==Mir+hL^MZMlR+xa7M?>96rSP*s?fU*3;lAk` zm=qYqyVv3!;I=Lb6racsy3xh$Q?k-oT3%DhR=AfVMl^(9U<`H}Ep1f-4q3oiJfh9` z=bigVyrJZF(>Zq&x@W((5V&1WLS+-0?8YPb_h*Mp6q??~BW4GNSP4=}Wn{fY%dS-}nFGKw!`VV)JLB;Pci&(=He#T| z`+74+80!^fI^1f~gN+!gp|)H&Lr%B-M*~`jY_%5^*PJHYaa=^rne+3}^-#|+^WNYc zYkKH|A3|UNKE-A2F`I>oZ%nmH;pM{WT*f;Ub=Bc?TlF~&`GW*MoW7M%n=YxOR0aRE z9K`4 zf}g~$oi(^1dlm3FFoR771`X5d-M?UyaSaBHlUO?p_5vveZ71uAe*Ke)#Hra?dC;P; zTsThuy!4Mxzu1hfM(sw&-3!+ zeWN3#))txYiJ`&VB5jc!){#y9?77Z>MDWcP-jWQ+hD#o)1g z6b)KR@`R}F?!_G5a%R)h6P~QFWlE9)`wQhVf%Om~OjNwbD9tBX}u6DH#65;Fl$M%6EoVrxVk`prD~)-%DR zJUu@;`uu}~Q|)?m$8u$TK>xL&%1ZvzI>*w603qM9CvTAd*P#|YwnF7+U{^{d)ikH- zQ2}FvilzT$Fr?jyCb@~j$&WEhAObm=f1PKJ$F*K*4@+V$9Z zDhJ?%XccXQI0wFWSjNO5?~LKrk}fNjSqf!E^A^~%P)m@`8xG6|tWg3A^(Z`D#yMI1tqTcG_-|dB+hw40HR6uYiI1 zcqwmKU?kJ|*-V8;Q)U{k8{x-|1@Gy4mnYgD*T~2&ju{||?#{UWjT?i;w=spT!+nyoM;e+`(YKye%f5IPUzMXp0e_>SW4t|zWK+!@H`ru) z_Yuf<*8iz`0-18&B@5)x`fwMPSM?5$sraLbsdD$(O+V$RzrX*0i~`@6@OsI~uJvFT z9|*6U@j{_-etxT4uLlQXZLdC?Yw%X>U&^K#KPlrx6RI~eDIf|{s~wKH;iP(niP}a& z6#A-t)Q;Od0G1@kW`77AV3aryeo)82SUYNp4uVGyWw87SI@ z!v9q07@KY}ve2t>-z{5wrccS0p-!s9EreFs=K`3;oZ(=@Quwh?Yx%E{vSa}t$~{Gb zB&^2@g_j=YqSurx$Jd`Tu8M!007H7pXJtz2hl)cNj*5!^)jj>RPC=paza>y#{hxZM z|G&NP3yB!MEHrxwls_%P?$t~mQ7q)P|9M>qtJjOl95(iIxx~Hm(kawvXlZ#xrCQAoq9^1S)VA8$x%{pitc;3~aCTdxU z1qK4OfPOeA5sF>!p0KG|#I04C&$iukykoU10+hIK(-$tkjMa&JZ&24MY)64aM`H&{QC4s#P(*4t2cVr7z2lpS;ELB0@TqjknAk%20vR}LW z#{>BB;_nVJFVN!xb5x0@v5SA1K$$NN{yab*o^CK)z18j$vxs73rtlv^J40>m=?N8E z>npZfLnWTf>v2hb0ipJiT?vP|jILH_%<}mi_dony!4CQal5bUEemtd1jx!tDjzfh<_)+co8>X* zm(CA6VdBd29eJc{;?X)wBVbI_1e9jy8QZVH;<}~yubOW?e&oA|FDG;J*9gO|N{)#e zD?vv(I=V-Xv5{X=P@tz%to^ZjS3%4wtAJ0-d*T!m84r$pwZvc``e%^6Mf)J||pmI^m~i=3ZR+W&fw|FX6?wfmmH13>}Mbm)|SS0B|93a~MgLlwW7m@)s>6 z%~=oh3rcee{ZVc)JQZPRVIT}TlGTm^UgIQH08S+`Rmk!46vTC}t1vnWI0H?ZX#9n< zZ~b9w8QWApaVby!BN6$EG|BXxN~*ya+_AX5i{r%VFTpN(yb;H39)bWuR1&J*h{u{}?-#h%%(_J#m&38fuMTGyFuv>S+$Yo!t_WV!Zw}E{sDzzp*Dn8#8=4! ziUQF6KuW4S!F49qIk`=jd1f90*6OhC)$Ws{MmR6?U* z8#g;7=47%7$iZ?5Z>SYb%GVoH$Q!xMNjD+kk`X}z%bsm#aTkJPp=@RK`ML7Sd^WaJ zFg6g< zc_13OPOk>Uj_GBn@idy85+fZ_o^tbnr~goAZ{0#Ahkk3J2FpF59Ibiq z-XrCs{@6#Q!dZ!`-~w%UlJ~Wv-qMI7Q0e()&Y(IlNCZv!Ox5{Yz{(P+x2ZHbu(~9E z-%nI~f=ejjr2pDLyvGvgjvrC{yDwE0#y(0VHtBOa^d&*T`YkzFWLD$I8H$6>8c&v* z1lWLyllZDzW7rJO{0^*+yg3((-_Ybq=rANG=@4U3^~Jzoh1ED)N2|y0Ik<&fQ|8wD zFL`=PVTwamI^5tidQ8wS>difF?P$wBi;DZwk--t6R{INtxzSP+Z?-Ci{_N~cT*pN1 zf4Kn0nTV)*t=3+9_5MM=N0_KOQ;Ut&hPG0&9CW;4e%;g@m%D!)&UzIJReoh}8Y@{G zrpm_~7AY`-rxBZc?_~f!TrcQUhB&5k-{;BORwp$cE7?K~SoJYL@&-L)d?wZZ^yYLq02OtlU_ICQjJGTiUbzUONke7shYydt36SP;)CF$@p+|HeH`_G$0)n6`gIO*zQ>PGE(%AVINQs0jpE5@bnM z_HzDY1HgKa4=t%0AmI=~IkrB#lAO5S{R0G803|Rg%?IP2*&O~6Uje_zYN&~D4y{2- zT0(;k;0JW)s?`VN%|Lv^39P44)Cy_<@Ut2+{_!Xr(O7!; z2THbb9WgirDlK7sZ(t-5w6ZY(yR<%UeQx8rsx$D*!YPum16Yj@6xwcB9=HBFAt;it z4zbAylrPbsv8k>bE;15LASI=iV%Idrw2*}MJPjI#D=i=gU%J}2@&RBGz9EU77c-J+WSzXR&4|rAQ*rh^HI7yw zJK2C1EZZny4YrWgcD6trYV$4H2auY?1{jE!+#RBeJ!h2g*Y)ua2sWH-Ob4hdnn-b} z5&#vzw9=+MDyR#zv0muRST72Lg~axS7*N|JOuD2KsVJC3frutxAwZ>yjLxnK=Bn33 zf%sYXejF6wP6n4`&NgeW&6Lo9M&1Vn1BdIA(F|WKah!J;f8rj*<>?*6lA8Z+DhzFWvu8{6 z97l*|VnK|<*nmM_$TUVY5>vIdavW!&_l($WLYPqfi~B^-FIta@5TtdNLx6xUxA&I> z6V=WI;B>TsRdUgjEg*C2xgcg3RJFEtXr1Y$g}R}prRjkP9{u$e90Fuc@km}0oG6Rd zU7j7>k>dz`TiVEQ9QuZHd;@(U9mI{kwoa)Qwx)rK~y3OmEZR^{0 zO*(~KHs3J=g_@BLP@2qQMAz*(hLC3sdeFN*#rW@^{fR5xhbIqV(5kV#s?AkaHB~wj zDyWnQl`g3KW2ne@vwu})aLq42omKVR<@u!L!rPbB4-d|f{~A|7+}O*tYbUj9O`oAQ zw9rWwae6(#XPnhh!`&)bm)yP&$!lg+#fQo4hJhr+m_3swQ?=3o!Z=m=ae*@|YZssX zb<^nflXwEzTqt>ig0X7QbBuNW%wM?TfEKGJcoe?^ZI5p%fPjfo{z;3`wHDwA_+Yq< zq>G#7Do~%yY?o{_TZ>?ke{N7ytOh7(GB!zI;7R!HPvrubSQp2Fp#gwegU@A)UxEww zBDE}}#(V5=AP}}p2F80?26}A!_FJ1yvf>AC`5n>Oa}`oFVwZ~wB>%nZ5A{LSCzP6E z+EJ>IBlAlyYp6^gjyhqr@O|jKVJv?erMV@YO5X0~`B0;lC&~wk)XVv^uG`^-nhWFy zNZrv?(Iy#yP8FhKU?BYN;40Gw!$^|N-5tIy*(njz66QS0;s(oU8rW!FlFzh9;U}<3t%kAl7m-zP%y$pW{0fBA#GRGDer11*BTs%@gHR3^RFlrif%+P~i7d0_J zTyOJ&<7yXmapp`Nk5SI6uaUERfBQ$ExYCc0tq{Vy`3+2>BjhA!8`(_#UPY($G;&=d zvp|t_cJav_dleNm-B?|AU6fY>e{^U zE~w>8sYj_i^td?)F*CiqV49v_8mbxQDe*vOqCSJIQ2QQj`R8V7#e>xZ#L|%>X(N_l zit$qw2h?p%@#c>oD&)!#zZC9jl5N+W)9@UGg&ZLRQ}mN_AKC}3Z;1f@&ED#ps&owCrIG!N9b^W&yS;c{r-E1 z_u}r*k6M0OIkM{&8l)heUFSHc2CqArYM|qCrrbD!QZjwm=4Q+p@TcRJH9oC=48R|> zioyr;NE}8~baV=CTz?oPwjw;XoIjv?lE+_UQ zz^6`B<9ze}bNY`%UCrMonG?tNu1>CC|U6e@DxSdugmNe|7NJdmj} zR3xt0ir;2ew<9(tegY{*z*K<*TBFd;C&S3Lvpx4k5VP-Z2YC@#9*6xqEsW2a*auEL zIdCC=HZL!>N8XM{UTRNh-a$lef%ih;^rgw%xBYn>oz`-$o2nfMxWRvnmu~L6xZF#$ zkxyND)X5&Ap3Gkofn^nURgw2VhlyDBcYVW>|0qFmd2xzL=z~nxL~d82#05bx={hBQ zP=se6O7lPKlv7wiBJD_1d0ADO@$#aabNC3Y+6hjq?Rm!vxGg|0>N<7;@2_z=P@Rcr z>yolQ@OU|lqX!ZUNQ!8d5~vh@B0h@B*SQz~5~i12D&!@&%Ua%zA{nKCD*?m|NoFeD zN-dkWv1Wmsw%yKOmhr34ki}cv{~+JWB#}>EJY#(IpM)6PmWRJYvf>ccO}K=_x4pL^ z5=0QE-J6U&I?b9VUZ6T?I1j$l1Giedk&{}n{tzQt64=PnMhZWIio8-w#IDFNh`UhW zeN5-bSpTUcKsdE`CP9L%os|81tl=)ZQ~e(%M*lZx_nW2?={~-; zUk{~-H)l&W8;^ZI;?vOmoGO@FEcn&Ld!%(;b5g`@F^JgW*b}ua{;r-Hk2*pO&r}?5 zdyF6(U&xIVcyNJ>@l)1gOOX!f%$}^@iK{0DFsW=H^Or!`XusaxCwMF>a`lF&uYUb} z2wW*<>#~OZWQ)3DQbbe7)5=SbGImAYw0C_*|wjQI3RPEjXad!EzI z{cC#{Omy^vU4)RI`CBECi;~ zt_(7z91U{=ahLZ(+5dB|k4Az-=1Ce5X-gHGe7AxDr*E`5Q@SEFtxgwydtB#oZuyI4 ze99Y59o^zuEPDiePYUNxSH^0@-|Lr%SIh<4P35^n8m_Ne4UBNyR)z4A?GrWr>gEkX z{n&ZDbw&+Rh@qVdVmAVYwlaffySBB@>~Ha-&d;aT?2vVgiYVALcrhB3J}$PbIF04O zN9>;nxvBhf-=m{j#`_4cihMpKI~aj-UbZ@nv%)o~@9$aIQ{7Qs$8R0dmx=Sx48`8a z8+L!|)pxMpafwZm8TzzIqm9V?f$v>gqJ6|CS@l<67iu+mi^Sg;R=9*G89KY#nGQDd zzd)L5TC*~@$UmwhXioC(+L|qp{FVERAQ`-%x-?sN0;xirsFgK)PW^ylpXouYG_8R2 z*9}HnmtF}-DgHZ5!9NG~c=)tpINRPraQ$Y>)o~K1O4A<|;m;T{#J`!gGDd8|URVGG z-tbO%Jh@ZntDZ&gLDMy^HPQ#7Lhu0E{#m{C)_j?}Z)p$|mDmh9NwDLcEW<8z<|oF> zdVk-(!F}OIutPUU3Ogi0C?%JFl^cr&tnu|3+ihc<=kx5 znK(%v0B-%=8@1{m$>U_l;ee1L4#?3T)T5O~(tK!fpnue40~OQzgHnmTjPG55>$rDMDzse;0E$qfR` z0-;HCev>GH66?1{mGly!g_3?9Wf~0x`R-Q?*9)uRT6;*3FtJ}zzYYQh9kLByq^0(? zk_>BJQ4LxnM%V+M4|e5Z&2rf;MC z@%^y1AX-mO>0V@O+^#ZOqL+H3Qdj%!7RK(xkt4m!=V=K*xdu_GQ9LBq5Yo(>H>h@0 z6tDa3@?~Q zV89M<5`MAgmQ%tUFU=^^+T7*jz^iBy#{)C~`*(Dwx*NkvDNwz?(?V-)on{4cqG~*L z7}`Ymw(>hVJCOfY-wKwwX?re2zdg%CPEnw(`3C2{yEc^z*x{=y6D%5}Ct?w-L~~32 zbfvYiSUgNKQU*3p^Y`?hiA|r58s{ap2HylOX_UsOE`&eJjDOLE@-SWS$dH!qrxW8B zh~Rx#JD4j=gtxuR`gV4R3Yp^-550)xMBJ}@dYL9;mC6 zm@3dn1KIOnX$vH$^JT^3jkD(AmW2qVYC)}YOP5lSmNWwrxZcv^dXkCNlkf8~>Y0sB z+8M_g{p;6##1Qh}u}lc0S~;(MLAvpig_W;s#<8Kn%>`*Y_iVTiyV(sdn9A}eA3%Np z!qR_Ztv+#9)nNMP$f$_?+1LPj)Dkxd+g|oPoaSxx7hi(>Az_mcm1BEk2x;j?>iA)k z#H63oH}9V@j~x1MSvt=2D1T6o7E?v4xu2_TUo*W8-bWT4E)=%W?39QT_MVB{`kNa{ zGgK3(JY9S866PN3(yR+h4X0DDi+qleS-N1viOhfZJ=v2qI8S^+;Uo|zV)(PJ{_CR; zJ)_En^qP|2D+fw!`X6}t6kt6Lq>}#>#LeeeY2LL{$M^+P8lgc-4ELUXvvPy{jX~~^ zo?YVvWVshVT)DvnOnSvrA2>^H zfo7Fn$IKl-;geP6MPy%UTZ&+A4a^MGZC*^PcwBFp9j~2rJ8259NB3^LSv_^OES$$| zp4LXR^Jnou7&-#e9Evw4xXJT16M!&9`xRQ865;~p`l#yxyx76HbX*^r1B=(>nSTNq zf=`3QCFb7%nkl2A!^ZFVmHXZ7>e9j2i^4E^>FvBJfog}R-cr7L=W{fJFSOX9-CpsT zD@Kk;)T&vmNd`Na>b~vO)DMc1Q#&zsaZ_aUcV%f_Qvc-gELaUm7S&@T^q(}A;oa8B z8IL;Mo%;d3+cRkYz0h;UNj%+fM>tL!Y0&DJ9E*?q(0DQpDOhzEhzL}wLUdY(PO8aq z^&McK7>DrRj<{`d3T`d?z_srNi7fM+PVmIuh%_wF(VGnmjU}-YnQc(L;(vfm_DUTt z_mGV1%VO$^0^-O_*AlkUUk;<;F@IUPZ#k#c6!{p2EqV7#L@(}zdxxzULv&tKM{JrSLv-B823gnfXr~aXYXK{|2&~hT^<{7sFZ6E>hIf!1es(rj}M=nIm%go!SLqnGVK_clU zc)evHzlq3s_yU|vN;<}NxmzLE7~fNei{|crmk9hPQ+-4GP85&!tgcXG2Jf)~eiY*Z zyebS*;B*_ou^tF-pxJUjSg>%E3O_np`lotvVt@RGb|;_E4xO+9oe)}!$$%Nt19ERX zd}=xi8MV)7U+O8uP{erD|DTyT(G_F6sMJ3vK79l}$IBN+6fB>(S3oxWA@e^yllzOp zB}e*iB>R7Rp^7XBqDB@gF7Em7nCd?S3_H6zKq{9QjptoNZ%~mN{eSC^OD1q6`$^Ef z+@+w+2z!b$r&Vp<-u6(aRnN~~{B>2`C`oqWe@nt;cS?E4&+c~J<*@F^`K63rZk{Qb zsnJMZMrN1)9O?iqTnYup4Egt;ulMQ-TSa^FJP2;~QT{kD=rGk+x|*;ZTis9qoV5ky z=#H9L6f7v|N1Bs@^=88F*j`h=Kh5aXs&|9J1C=u4H(-$@faN6>S~$KEc7n4SJ$?7>DuFR7iq=#yuN$Z@f!;n^voRZs>yp@n#Wb{{B2L<+B1>_! zHuD&?X8L2wB0hEvf_Ri8-xgTJzXMIQSYOc7NFRQRd%8-|ao}MCd6`xBj<^6Hl(`Vl zCo)+ucywYIl=1n4G~}1Z$um)DEvC8!kb+NpUcPReJor7~E9 zS-J0Oz2v6|of)|PquLc-7u{sa$_fo~2!rXzhkGhTe>>bHg5)YQbRAMOd~*;ZYd8VX z#J{P3rTgea-_hRi^WETBfohKe|67hEmx3$4s^Eo0L|4Q?Q;NcokX1hYavMI;3-1Ga zfn4Xv-fyvijaAf&`4AwCpK7?qQf=heBSSPa#|8Lc*FqQmP;mg^g&A&94QhQwj7at; zBP4$nz2TS2$a9JRu>|_S<9P}?gF)o64LUS{!J!9_8+iB-b+k#DN(6JyO6j~3#^>U} zlF(tBwFH382ur57Xxoat7j;dbs)8HdSe+hBN9`645;1T(jF7MPhb9i8+I>iMDoq+Y z=MyF5J93<0gg*~SVC0u%2YTR>6rG4uG>DkN@wK&gi_X;*vv*6gW1B!~h2!zbcHqP9 ze=0Jh7;rFQMCZ5lieU-rhW&b07u8_H!$K?n5YpQAiimZKvk-Rb3RDv?T#i>9wHKG^ zPU3yKC4fltM-i#CPbEL-;I>aejx3SDA7U+U$f~#e83K%o27w1J+tUyd$H|8f4=bXQMV<2{1|;348lqL8;CQiyz2 z)tuO~Nn(ETzoAW0*Wdbv1cWtpSDq5iWznyR;iJAR^5tPA$bU;m8HW$eMaCsa?*4U$ zt&>r?IisCL>FfXvvDdz{-!U{n!YI-Oj zsadbh(0jy{{7zPhFcKMDp}3oMyizbr3l_Vg(u}~kq#fca z@=IdVWb0T;2-9syQ_aeTbhN`j&&JmGWiE^;66m+Cp=5TFsw03AGh6pZ7iEw^XHE^e zuA2Hsf|F~TJNhO!VR;|p*4WhOP5Z`R#bg5Z-)#&6GMo`5hlihm+1X+D7Gn810cCiN z{RaQ{malXPaOA@2grolO@DJ`h%nl=TfVoT?84$TsHJoQFK04dqd6rw^(uOS$(b=y4 zT5U9BSi4Tuz{3Qe^oiw%$mBXvjK*seU1_S^UfA)TtUgTna!c$c;LOptE(w^B&&Ki; zxrFVeS*4}q5kY^D0ds`tdOT}4TP47pK`QfxJdgpok;9dBxbfnfJY>;cs_b*$&jWr| z;UlE03*#=olF{L9JK*GNyVz}FD0v&@=4=znD9r$fmF)nWxisnDFr0M0LVC%;!7r?) zFxJL77Zy!`OWHXz;96tdMV>zV*`E@=HIj)GjC~F|Wl;sQJ+T;*#pN=xO;H4rJBrSh zTwZNd48;})%#>-m-Rrxbvy`x?wWe6dxp#SNqU1N+Y8-aRY_p(j*X9|@z62ISw_dmi z&AP;EBnn^}JY4Sa+*Fa~T4Xz1tC7HBv_)@Ys(9}uD1*X{+*Rvs-T`j>Tc{X=`=`gW7umlBgkeaUNI1V=zDT0EmM6JItenw+%#s0b&-TC6@hpPcOL~ z{oS8LV1(xd5J>}L#3{$LM;05B*QKCgL3EiHn^&-d=f-LMR=IFteKJ`jliKsbLnn6!HG%7( zZ&IND^Th&mTS;%?W^H%M^`TeuA`^H7fJ61r=jYPys#j!W9O-_cVLJK(7*dpGCP6AT z96qh$ez3STC?M!2^Z?ij1C~7)oX}+>?unjkvul)thxI31{5iSTA8j8_jtzF)=jnv1 zI}*(m$p^R^OrYgM?_T_o=n=x)9*t`MgmssH72?xZdAQa*m_J_{lJfhT$Cc&FBXoa> z_y$a)EII`SZOVBYQE6@6+lgDu-SJ-!k^t?(CvALdB>$t5sH+(Mz)*$yg zctI-<7;mz;Yc`0XlD#1-&q zL|J#|Tq6RNE&n`%2-@J@$9nL9e{PlGvldH>&af2?4FkAwG@s0YgX5H#H%?1aZKO^- zuWC4-GZXkNyN$f7VLZQd2E$JR_tJ21@kwf>_xIF^jecis0L}Rhq#K3m`W$CHf`FAI zJ|A@p@q-3>4$yyr@!&v!tE(;(;Wzsp(@JA+aZIUg%Xq(Gi>aMH!-ksKXgcTxj64y9sCEGmuO5PEHw7-C{cIlSc&&X7WthHixg3gUiWpka{Die**tZGxzh@41xdbD8K^- zG!(fi7ZlKTT>WO7YCYe(%kM-h4E(6K<_%C+le_(4jm>!B2Iee?!z^+9<$KZvu{~C{5Zs8be&r#$~5w&xM(4X(z5(7 z-v=FJF)(4}pn!4oenKn$tF;T1JP=Qlf40AFBpZ1FBk?%h{QFY~Zd2xVD+O{y7yHxo z9g6vB=f#In_y;#fiuytVlF4n}UOJ7$d_-P`(CrimaG6wLvEo+Tu2?x79EU{Y4L|Ub zRCi>x>DM1+$KF%CEl{n&iCSQs{0mH)Vpmy`j1%gixi`h2fdrjAB zUT&i!Lrq_Y#s1^su`!$zB`G$-q&N6PD|uZ zrdzBo`30WW81SN)IXycXCCHX5=_je1tOW{*j$5=K&V$T&B<%~|1mm@L$urND!0!#+ zQS|T7(a|xDfq) zz!Eub{{~EoqA3dv&KJ%jF(`!%v`T$VwR)NaK+ObS#Q$w;S8Q}r=`LuqNT_q2)JAh$ z4|v&C&qxS{wxK*Mq>yT-HPqW*9wEcVe+)*sPY*(Qce$kZNdbq@aJUp2M1Cf4v(LX+ zRU`gA;$1wWT4ksJej#M>x~B~8acut5IYI>h`oRSx@jr}XHJw&Jmev`*q1>hbL27mI zOg}WczGm)l+WGyw4RguSLthb{R5|9O$qrC`$T20O@y&2LFL@3T6nu0!>%B6@8)#YC zFph$Rox4MWrS;)?KGLz|c@*ER!!tNn)TH!>0BsIr379q;K`^NzFot;peg?+l2QJL zf#*=YN5%9$BGSxVhDI?cnI-Tw6!l$2+!t6= zlJgy;BG>tzHy2DQ@DY?f*48}%a;YgEd$haU-+qGm{-cZ1Gf>RE72ddG=22G%G`ju; z@2(iWJ8hS{1SeLT|&Zjlvoo&B&gz>yyL<1t>OgphuoG5j~T zPp7glAvlfNss6BarQ;nPeZRHTTKjsUFQ6xW$Qx(AfZ2ltYbo9N>JsH}u>?&oiy`RD zr4!R+cq^#sC#>;;u*r*ab-05*O@UFRyY-+4JoWx9}NV#7+ z$p+<}nZOr&{^0>P;R)=#r4vcFm4ta!p-mvZ;=r>diqUg#yulSQ{jEa{yAeX4ZV zYZ3D)j~G7R!Qag8ree?gx(e!;9k(tcj)5xI-wesykj(2b?t+;=IHXrsD94mDmTv&V z%Q{#tf!hjeo`;Qtlu@g~8!z~Z?6&#=TC#T5m($GyWh?#^w?l}2K)iaO~Gn3x^m4~F+ep&nJdL#tK3qW`6i|>S_O0CPYYwX0;swd$< z3;Z>CB}ZlTAF)e(eDZKw#m90PV&ByYI_c$6*BP|hTGFq$$^+7ht#`C;kQeIrOt?Q? zmFL8ASW;^hxf_q#r%)tg^%>e+Af6!*>Ev9c28QsN0u7)NTjGfYHe>JVKqQo)s2*~g z?L8f+^c85n6@7U12rKY43(HemR@VFi`jX1h)``xzljy=SyKzIHyiIC0?ejT+x52I2 z`Wk5kaf1Rv;BbAMaKB&pgn8txD6 z(Vg0;>zD5RyESygCbAZierSj^7v*W>7!hT{LRW9%Px*^ywB7^3ZVDB=yFNkqh zT0YtosB$QZhk}8c969b%y8(_iYOKGW*5g}t`FD;iWducQgSTB^S3xS&pjAZz;fC}X zE*T@h67;34!4*E3IKxo3oa77&TyGoFzRTd_rF^O`|E_IFDQf*_VPlU3BA6#Kj;Y?G zSS0hKMx4`jc~^15oC^X6iDLumPr>n74fKUz~RU)WZ?OiuA5Q=VdyG~h@ zv4nXF&1SOKxZk0Jq(s}?Y$8FG6^u-@)~~7mHMKk4oQlaB(q7uzxf?dYri8OFGc)(s zoS$K&h~6!oZq7t8hZ_RUVW?F<8K8kiHLvG6D-e2WYHm+O#LPO*_uVLny%~^65hMUB0f@e zPR$&yy|WtJ*CyI&;3_p-KCHapc~?&|pj@ZMb>(38Y(waf1!b{dj3I}R`|l-ritx(J zt}9PMnbBk=TkiFm3k2ww-zQBr&W=FH5xu#%DN8QT1*JD4X!;~<=FM}oN(Q79Q*Ue_ zoeO^6lXx9+Y0yp0@<+PwvI+J06fO=B;F?k+ik(^dra5suN~2)9sTnmr3lsl}iZ@D1 zO4$N_+$bo%-*#8wj7mlnjXxI`aRp&zu`{Z$Z0WU#AI+RCpG?@MW~ak?*k42!!6>Aq z+;Pq_@~Ws~IJ0E=!2{82|5+0RPnQnbI}W2I7jSP|+wItiiH|?pShO4~kVPs`5>M9d zl4r7#%2oO%nm$}=cgCS)HD|$=f8Dl+u$*&-G;e-wfTo>{Zge0%*d0!(8q%vkv!Zdr z@5ubbGFtol@qpY^=78q+H0nR!>@FX$-_?#}N_F(`^PNMQ1?k#ai>Zr+vZG$!EnXL;^j?9aqKdA5Goym*=!`<|Wa<#~{ z>7z8u|B|Rf@-lY~~-b#E5rgYhGY7nU7z|aW%PDF^f}DTHeg~(yzy}LHqadewz_nUJ*H}*;mWX z&P35{mCQ%$hF3))Nm~5+Hn&bX$CI+Qm;z0+EKK}b3m#6_sKst=WTuJ?!W|<%M`t+t z!?}BQCgH_N>Y?>~PNxwI$f7b?hHqvnOxt6=l;tSp&`l^Qm0vr*9PPUM&~nqcvpF@@ zjw#~Id(qz8J5o&6SJ$+1vbtqE$6~NJeG<*7gaj=+O>iBF*VJ>jv;wzCm2rmDbkCy^TVF05-neT>Z&!f7ZK>-rg{{yl*%M zly#?a*PyFWPk~x~*Gyp}u=?VVXu7OExwY6C&X&IOCa>a)48N#Ug3)-VX1?nC?*lwI zBNYda-rn-P>{N3cZa{zBIV5m6`WWHg2-Z%&1o@gPXTsjcSdCHn3SAnv+Xva&d11p9 zju-WPEAsT(bw0Pgr+f&9N{;@xCQ@les~ebQjUBLZ%^cAB;n_?ARB}to*^F*Sh^*H) z*494mte;skD*etPW4yH8mH36jys!8fP4B@&2+5#z3iOYTA0( zGT%*PF{lwJQt{WcLPY&iGNyzOQ24~^_uPZ}KrM*$-g=!S7~3J}rXcHUW0P2hu3*u* zMxz4>&iM>=5WW)#LfctT4Y6A7LQE8{is7}=;Hh=%YKr=?qKY}g)ZFr z=$L(Uqu`I+^zyIHyM&IN?oj$?sz4IF{^VtmyW0vWRL9DwZEDHgWY`2Z(FG?<;phiA z0fq>63~n{Ft}j`QdJI{NB*ejCj%lx)qYy!plx*P|va%lc3rx6SlQs#iRONMa*(a+N zq={sNnJ>6wPTDcV#Kx8!bgKpsh}}dVghWy>pCP@sTc%W#J6PKnHlb zX8(+$;-w6GPI5kyA=%(G>MoWzrvdduTVO{dyEeY1ejlMReRd$+Lh+T9$JS>?QB1aK z=6WgDKpcN@djRcbto&`LtnB+N8~yXJ0dTVY=7-wm4^@^kQCSW4-yGZazo6HBM*6ff z0L%64f06c*6fC+s1p(;}>F$t{ZloKe8>Nvh>F)0C?v6#Tee=EV zx5wW5jB&=;=ls$&P++a+dG0yqHLp;6VsF+1Aj6Uh`mNo8+kyq>2*V4?sB6U8)pOy@ z5o6^B9WJI#>MW0=!3tAT!ef)sU!p@%fYiGz8Vav>0`IPc|s5iYvVnO8!NG}1Bl}Gd=W>!YmlIAK5mr4rERuvE*z3+2DOHdjX4TX|g3zx}<)z;AsBl75rW;j zt7Nfgv&`N%`AtXWXmGtZ)i;A|2#78Ds51_fW!`E@WrsY_OuF8ny}3=>C26lpSIkdf zd0--}VrdXvC~SeCVDj2HHv!)hYW%bl^>h|!*(Cmt6cn5jdSBV@1y z--U{cfd*IGL|_{_*Hh5+vEo&$Le#w?7QL`>i9|D0|H?q~#1uu&u!w zUtllW&UlP@^Zm~)+65qD#e@IKL$(!7adivTq*iYX+&NR!1tA*%&%4T+yG77BBuq$P z@W2M`c25!&RXG_d3yN9z;8>r3Th~zO_ckdkL0+vAll%B!ITFE)Y}$9!+)pgEJO(uy z4cK|j_96HadCh+$Z?DbI)g>e)bJhRm>O6OFg-#SGM3$617m~Wh0UZ31Cmbesl<_;?JUG<$MbZD#9i6ki5UW2(1^;7FWHgSLq9DmRqEn_OVWNkGRAIy zN|=u$&Bokorc~S=T`B+<&tOE6ry(a>s@{X^L>{C&o={?!<4ze-6;7w7IIwZGb4JMJ zl$t_tE>K4>p4WTIl9W*ANb;%nBlj}2(AQU3+rlsi<%XgIyxBoB60Xz3R2ZI*(B!p_b#)QRde{3^Nnde9%vuGiV2I&ZfrG=Fi~rkCMZzI zmwX%C{z5mH2q=7IIDn(k8%x~}y1>uT-a_XXQ}0x?q}XiV(r#$J}lY@fAcyt>&-jt&Ide~FS(#C z{ie=?%%x^_IPcM4aNSp0QK2oeRFr8i+7X+AIPGxtajdH$Jc35OHdPHu)J_2DPG;~9 zfrz97gF5Sy;A;{dh9}3Ul9jAlxq4iUWg3;@5VKRnZ+DvyhxjP;w9GEsp?ihXRyryF#Yk|;hm}*ulM-1ki z;!w!RyVzt`?Hc#TUE>(m_qZMs<~3tqeloPb=HvoBwyL%FG6!Hak4}?`=BK zf-bIuo-~D~3g|0fHC>qapUvelfJ!)DefAuh?gaFn5(#yF6?yVJ)!&dP`M%HnXvFZaI3U^!EnFnpmL1I8tt=23nq;;x;mRv(xAE88orb{cG`A z+e2Z0R>|#oTI;=bS1KG3>vS_8qu(D98-h0)!6p1U=yk8&He{Frsp^PlwetXx+v7S2 zhfZrO+v!bEqq*9BF-)XF_03uK-4Dh5$I0Vy&H`iN$aPLR(ZOP zoA>lNG3QS(=j!U|b?{>P;WyfR(JH5Sx4PS2YX|+UBUX^(us;U3Sc${k@Dyfq`#}`M z8l*bcYcI7#IXd0q1KPz7C!`}7x2aiUpLT9ts ztLji@*Tb?%U~G4`oIrT9J(BgZOIk~Nx|wL+44hX)WR$U3Fw0F|cM=Le9=v$R`Ewb)h#(P-0x`L>osz95OxOT@W z$8a8M>5LIj)ItV*{d~J_ex%D|0s0T9JxgXrruZL*Ba(M`w)yUk6NNHB6=4>Y#)G?W zH3d^rwoIeC&?iKGS2N`OmcKtf%N_-?An!b=p1Kd;4E50Ff0sFMtf>h=oM^t zk>>o8qy3T(Q|&235e0^645g@a+*R=^LCY`2JRWiMO|z2n%53F#Dii7-KUu>M>2jsT zvnMe>bW9!VtP!6VYea?DD;E|P>YCp@We|Gndc<>=OcN*ZH$yVSr=Hji2&N-^o2m;L!A1mZD0)Wr|X$|pig{< z7oO@!Z+`hoj*CmS^Zp)bFgUiDOzUu8g6N(~wJ>ZXYV-SM>(?>^`wfpbYI4k}boNJw z!2_PZ*Ld`31ixo0=37agUE@dphbYM(K&%v*@C1DUS(=WB#~tCbwl+Eh)e`z^Ad%z4 z&RA!|z(CdU%5nS{PEiC)6cz0t1C%*jDt`jpPYGKI5^kaYRi_0Ix1q7XzpXttkteGW za(Cq+B$EH5{F_}4pNWBCG96L7lpwli_)ZqCx+Io=pV{UZ+;aKmQvb+Vl zhA&?-M`|8tjspU1cAoFMjM8aMH|>eI!K23UtR6J@g_BmaU`|*P8rqmaru%!u#Rt+b zlA*;j-#r7%l}NT#<}Op0M=R@Ih`HQf3P@>HW31iP^i^FsEmuF=c+`L0YTpzh|3^}` zUOY6MmnpqRxOD;e2=tb#=#X(rY_7{RK=+K6>o~Or&{=HJoMh*Dp6JH92$C?D94CiN zx(E?tT{g=)h_Ps`R70z_+F;E~Nx58{yR&B*sPPWkWBHl z{>BeRCS#chi;ZxEpX?GwJ5JqVJ-h)_p=WLom=_qhlAMr0fgg$hrYY`|WBr9m@4NAW zO%LZm@2;Vl#-nG~Hbxu!8*0|sRMBi)SwR~gz^B%)TunsW^m+Fy-P6w^#_VeL#BHtf zAxt=ytD4M59+Xi)G`G(84^8)qdVJUCC3Qs!eU8JHp~RgLNlm#?>qrZ#C)|RXj=2He z-X}Uur*iu~KBSF4slwjFA;+Yj2B!r}{gRp{F;R6Uepv1h@BbH1#|zWOv?W{6+kO!EOS zTE1La!BC)+SvGsM65zl0prKlEa8uyAihlbP=IreUU4 zh2BN>eKc(*7VBYvuSPoyca4mjJUWn5_t}=U_T(;=|09sio&At7d!%Pt8?0-rMF-C{}(2 zuEX6^@8_tfEFsQU!wvpJy3ZKIum^?3e#QM<7dIsQ}-W_C7u~D z+H<&`%6W}d8O!)4IS|`ywa5d>ATlXT?2C`PPQ8lW4Z-Neja$&lbiV}5u49hP6P!Nu zztpG>xgC){cb+o_4n64F^Il#yliKi7KuFk9VaZaxyFs$tw4RAcn2nflSZX6bsLSI=e%SS2^S;S` zH|TqI?0(2A^H!QQ z7?-F1mmGX*tASlq#hSwH0~Nn;|zEa6#)sqCf9AuJ!I*g-~`Qm*JlmFE}?}sZgPG zS%*SIP{4Rwyp#he(LbOCo%Z%j9!1l-8JuTIC<{PiuCCzAv^x}Q9gOeN(m2lJE+tay z62bW$F+0<M?y?4h^A-^<@{UE@J zlVJ{l12|pZxRV)&%?Uywfl|25UaQaP1=>2mmm$g}x=ACI0O5x_hDH=+T8rYXY0_Ep z-YWoLEca^-7PdG}=M-;*Aecb1B=2B|k9QgGzjqmLzFZORz@AbkFMWWP@W4vvf$(^) zLL_pY-0@lSNi=n2T%_PB?x(9o+I7PIIlf ze|HiUa@8SEw&Th?_l2WiFv3^SHQjlF2XOL(o`74^QAby|6`U~D)>}Vi6Q}>KCsjIr zzz_A)a<};T>jru-3m{*uu$0DD0LJHOmVN{$%`5DzmB|J&u-B*n&w^`B*)lQic@NbA zulr@BFICl8slglIb0yVMKa(r-haM0=0nl(V+m)7W<@@aeW-{Rc-0>yy^1}x- za7I5lZXHY7t0InMGkRULSU+_7(#3cp7vEo6GhKV}Tm9upSI-EMyu91db$5%#h;hX; z1bDr4#Wiiqu8bTycBcnU(AA`yECj6&9(EG1ZOJz|tE4s@>uz*5OwXvSX?~=0`mWyz zP@Wy+N!jc#aE3ICB5ku935;dZAw-CIIK`T`a+R*uAmK|w zTZSGime%&Ok{);M`8M*SSyC~-YLVXgh%73=@vXqzPLt4ie*x&2aKC^zm7eGa-|tL2 z`zr~OSNs9RbjOnPxeC*Bv$&fn4sYngvM(sD_YU~R8%J>G&YarlVn7ubrz2c@H9XMxnl^syaWu8KOH zt{?5d83&Bcx@LL?><;VW2B4S8Q?8{4t0dqh_PTI>aG);SWTu32XO!Irx-#~R_k&sX zdFJ=;+R)!jS2s;9b6shmcoM2GMSikD7$-GN{RCYdyw3r*E&J@;>bACUpWjzFaNA=X z3Z8+V3a;Es6ZxD>h0;6yo{tR={LgzUo{r4@I!a_iI~d?Ycg3|jU5PWCnh9~?&v|9B%s zF6E^Cqpqnxr)~7UyT=m=-&SEL@Eg=8jYpJ z*T}$j3VctWE9)MtN2{mDzoV}r{;wXg|Nme7&uQVvTMEdU#Cd%=0RH6_aMS$HRhG^k z^Ko+sg*jlEf8-2hj&9$|_#)&s*4gx%5T8a&f4qv;4}F#3zYTT5s|z=_2uxL8l37BF zP@z7+N?DPV>BgZL^QB@_snH<=Y3FcQ#iP5y+`_KzqIn}J(Y^0|uAKE>{^tU?G765k zj@-qekW2gbbm=B*@nll+hVmW@roB9wDwY_q2Yo}}s4*}^A)Kpu1{z?Hh1v?fGaxJl zUNp8dPm5#IHHTO?;ib&|y?u_ylqqUO^nORiw$>+W%v3fZzTHWK0K4ZvFyAU)3vmY+h`Vow#Tief*L2Xxx&ZPuA#`^-)p34fxW}t<1N#X_OEQ(wf0$&W~2UR zC)?R-f-%)XKSB~y`IVfeSJ7Hul&zAd!iw?wqWTaS$^&X5J@g%)Cj={GsP`@D)-b&$ z&RZ%?5wCVVU=3FMmOZu1Fkb_W?j$H;xe+o%gPIa~r5@U*1|}k~yX6=B znvG&sDn95-|E=S}w zT{s3I=cLK^n}B;O|8N>@!qC3`5E<(J&fjGLcc{kNk>x>CnnxgXk<0FZQj$O+2Utu& zZ1*n^d8;gi6su6G*||Dgj&gg>0z-n{N14^)P9@8+%dmUUX4nw?Js^AkK9Uu7JF)GW zpxW7j;0Y9jqUdk&M849~%_NSuK_@lD?ie7R4TUh_pKza?oc5Xdq(6yhRdUyozm$d& zbuuW~k496A&5m}I_Qk`21PIC6amQ4ip?j93o&{On){m6zK5=A2a(7i)jRqIsN&By% zMMp!mO>BeB?TFpv^|LIG`zwUSA&Vzgusd4DO$veQ$u^WJoJ;GRi`*3JMGuQT6xst7 ztTk5!WqJ!=DzdWklRBqcIPeaUJOP~nR6Lmq8H?WWZ(Y~k`D^t@<26+34c2k<9E{}_ zeVViy4U%9@Q|dhDoy6txIs@VfSUXgc2igx6yf3%hz*c*vz@>f&qsJR|;F65XK5w-j z@d-J0kfNsQ`%?>+eDu404ycl4E2{u!8y4Igipk5JGkbIKX*1%s(%yETCktFUrf+OM zhM=!@J)V5vocqX;fD}z8|KoI?y*^Rbt`2h_+G`x`nLdX9ChprbqES^nB--p+t=0d^ z1EC{$U9WFY0I>H`0K_j}EF>r~eo|ach=I{F&e4~^OSw9}_iFGjT~g%@U5@os*E zMx!An$RM~27yE4^8pZc5dQda8qgYwq(Q)(1K6gCFk~gFJHd=jbe5<+0?Z|&9Rajyx z)^gTHR$ZfABkPXH1%-brKhV2wI<>l|DD?cN{=dEoS_6@A8+xCJu`&EKdO58ZjSNk^ z)mno5*0y<{D$nM8T%ORgAJ~QeEYfTS`9`R*+F$`@xJ<;?$;Tq8s_YD>OG{l#nA zrDx5fEOU@GJIJMFqW{I*qB1hFjUrt$yo`JH1MNz>QD?s9wLl~r92bdldh(*N5J z=Leb#dU%T0z1B8JYu#2i{)Hxsp|hVbhI6Y>6m7veOz!q`Rzq+7%tEz!1p9-v#DP$Y zDZ^H$hXvkf&SsuJnPTi~l*6%~*%$c$O13IqjE!=M?QkAy@R#0!-rjbq0tg?%l4#E) z#+GSGW~xX55`PLef#~d^^} zZ{SOnGDq1;Io;@_(6Y#=*b#bQ|y2Cn#^QsFl{(K}M5M$kW?t5sk8<>#Hy*}cI_&m-Y)@({>qG;PaD z+O3|2nLy$z!H`2I_igsryhXYK75h<S~R@CR9n*CE8f9k8xv!o>-Ui2vCk#y|Z z8C?+DQK;u5L-vGO$hf=FhKu1!Tt&V@_B9wswVQPXh}`K8F<-BDH9FnvtrM?9gS;kY zWz+eNhU6C6_}*04$q<JEG`@JqHnWG!*9;7uMSN$1N9YMQ^aXWd_*$MK}$ zLc<_@B^Grv5i(j~qUsNJX4bG3`7)yceRhwHPL0WL^8;;UME&?ME)}La#u6o9K*;-f zYq2eX$NqT&lYxk%ir^?t-%;OQu#!`WH5Vi|h#U4Tjsr09G`6y`4z)g5uMNCva@A&ku)^_l#a3HY%$2J*c#ig>`D~G-msHmu z5<{t@6{FecJdoUBc5O6DkCno2tpD*()k|s{8>ZRHg09I0f4u2@@5Z~J)|Lz-a*cHK z48KcOYJ}&*nVMe-_rKNHL4V3Zw8t~A0d{O~uCCSe8S*f-x}~uB1CIW6MLX$HFjOSRAV!0**KLrfjo|Mm&OA+#!d$CO zCs&@~k}bNBQ82|MQlD<~HHSrTit|Cru!=@Q7MF8E9nl zB!|EF{LJAWb96umD0F}ElQtB2FHWKpq%T~Hvz37I@<)l%pn4I!=kXDIb?iMm#=ARc zrjzyN?bH>1T&%8|sB7gxZBv$Xa?i zS)XHd_@T9rj$rh?4dTL&jJm=F>Bg5XHU8QS?=y1Cx`(!cFB)*o>-9Jx-b}nO%U+TwRLq9b9II& zF>NHM4Tu`A>TTcsCdWVM!h8@8O2-xY?J8nm>ctuR%NzZ@$=NyT-OvFV-t7la)&gMd z?X7Szf!9^ELh}lg5)uQimaeKIAca?Vq6x)=*?El%FGoEV&5GVippsM6b7JkMb z}prj#FjeI}^x0cv>f*dXN*w=&6 zFS#2GGm#~~BA$=dO?!+sNL?xdmDc6}SqRa;zmluR<2Z=+miqm!8V=vb=E@}KwA=ER zf~iz)7ts^S!p84`K)ak;tWu$SRz=%s1Z=@S!j|~!v&fffpS|a(b3da+jx7jf8|bZ6 zJ2^uOvF4!^6DUfbcpfgYm_o5dw*XRgZ2}wV7%2~r!pVj-1EIAdwfab&=)4fB;NqsC zSGwI@^rWv@daeHL1=~pie@kZp? z#M<1QlR$c-srx-O53Il6RbXIfsl_#VSYLE5IF12IVTkAlMBFf9?n~|Y3PEo78!w_1 zwO`~&URq0g|QvY(l|3d3~2#l&Rd*9?<@CfL}`9 zn)Jj0reD?{W=WaZhX$@Q8~<3pwI^Aon0R?0b0#TCwzGlUCi`Jv-t^Mi5622dVp972RJ4W6yh_qozdFiIx{MTKhQnVgHN_WIvGY~fQreODSpR1k!cA1 zfr&zViv}^RZ1hmi8N+jT7tR@Dux%b6I9`X#<96#WH?_c?alwLN{!>mJjxZwtLR5&F;QshY_JPgH~mx5lTMR ziPAYm=eYz+fjV&6S}7e5Ey#v%~xdx)>*(CM8RTshFtP|4GatbM5Yl$+GG{WnAoj$UZWk% zOSY1!jBTCzF*h?d43ZvCKFZ1=A5H2|b7=G}axWXaXi zAr0^viO!ukc`gDO%36mG_HJEV22%U^>AtqmJiQgB9j>)AwoJ|?xA`D6-xPQ z%U_mLn_xS`G`SSK96=A@Ux^i04oG+OyO&I_i@Lh#A^?65L4Som7`xC_LeI9=-;q>} zGjMzT!0;t9x^?7-cvqDhvqr-1fL?N)y)#Zzc>I^2UQQ;nC9ffDmP=bJYewq4xA@LuNAfG4uiE@L-;7Uxb7JritST z++SoXw224_&r_Hzz4#q5v2>q9PzbJ=n(lahykL4T5LuFf)Vp3JCY&ja6!6(0z*u59 zqWthU9U|-QlQ!43wGp=opgEV+OgBy8g)JVoT}{B+_H=zl9Q6&acn)jmtMdYW`0oss zy;cxY=7UQ-u{5j4lhD;3jo4)wFc{PEK3GX@_^5T-0{W@fik{)`2~$Ar*E!hyRAH&I zG@PW8@!e$7a>mFQD-?fr4jm7E`&1qi0W}RkSKbMr{hges*LiumH7IqMtOAaXPa~I4 zrvA$X*xP~t0zb*Z4a}S!!40iTnr8Q843Q6^P%+r$;%|S_DPqyinCrx;2aRgsYpo_| z8;j+FOFKw-?@1#gC~mmdZ6Fgwx~03E1=(EMop)a=Oyz=|#3uIzc@Y(y6|0NN{>&kkjoIWRD>{1&@j9sjfc zFmek4vb)aIHlt(Y=kH^pp3>kekVvCeDfd|cw2)T4W?;d8D4xx_M0QBh)j;H%8@Fbo zA;5M)qY~Os__Fd(wftg(OnNWoQswq4m4oh{?Oi|i-+hiSshqXDjX7$KIxx{Nb>0CS~#@Fn~^KDB8*FIa>HH-Guknld`VF zi_hR~PI_PNj_01Av=djmUc3gU6yz;8w->3oO9X2r(=F;7qrvpAAbJKUgbc58^B$!e z%y}tr0E7*>HKPX{#gJ2E4G!b$*C6N<92goQW>OS{kqX1G z+xyovK39h7avYEAhOw-&UywkPy{QH+oyaU8<`dT#OQ!C!Iz+5MQeOWsIDv*0Q zo%8~BJ92HMr3l!DUtJ-T+#cfrvXkgqWF**0=o%V|Wz1qjt~SC=`tgXNN4n~OL7A&E zlLFQ!C5{)UAd=@xB@&6_>WXMnni{>$2m;uf@#l9=h@AY5lXCR{KC%N~!TpgFvb=}$ zSzqBJP}{-bo^CyZa5vN^(3|ssJ5gk3-T0~|#6?yB0+a^*(I~{v2A(d}^NDr_%U}(r z1?zFeL2jCRr5F6`4TdODry&C(xeB=QX-37+HxJhj2H2e1sf$xE|~N z{zNKYTh4I485Lz5RSRG!;*Qrng)H*i5UFlOA8pOlWQqk=6?=r#1Cl{p(SqS+dga}C zdeI1BMJ6Tt$7r3W?ou+dU($h^lDmZu~aYNrVCeR78Prwwr&c$JaIyFSf+7{u0grViB8-w{Qa?H$w;M7{iGyd9&6?? zL#mEGZQf-O+;LPB#Pr69DAY7%9llwFam~ys%T~HFWDjWhr;|UfsVolgbpbD?GKS=9 zAI{cQLOxhKvJKus><@Vb+h(!5V>zBecE&g{)4ZHOh>-CR5ZZ(cdK7^BI6Pbn0%z$3 zyj;k^Dn3&(B@#bI?ECSRFZi^pAJ1D*#YqP=JG8txyVMR}`JR2Ol{&h*LHxeCD)~S- z+(QmQpL5x(H&7ei!Fou{MH5=Azr`Jf9vk%~|M;`<-R5NX4RF^QJYiDOn}>mt!AnNX zi~`&ZjF|x?bc%eT-*>MDb_MjS7$`dvv2)P0WBKw#{h|F{z*7K@ap`VnvyWf6?;3QQ z%4lwP0US+h&ETLQJQTn@My1nqW-yL#?5dNx2+DYc;$txa}-$XW;q0+Vsh&HUQM~s!5(?%HaNvhZu7;=<}#sxP`i9`I#HE7 zX>>x{&7|8(_{inif=$6JB_z&2RBTG%zus#AJOQAPOa__+*@B3N`zps6#r_mV!o4au z&uJ`*c(q3(z(%?(aV-6r*@J?aili4~IP&Sn?v&9qsM|PPaP({*u-E!J7JgDW9~c>X z>F@S$3U6%>&&Yz(WttQPYwxgbWkxeMy93XF#EXs3awsn%`A#OzQ{{DD`1!4Pq0g9nX=FHo$iK zkqVc~*wNAcMbgi9keCLVGbx$_gj%^A(KIT<#?fCDq7jhK;)6R-_ojY;O*-(4!M%g> zN)Rq$dd@*ptu7{?0@JQqM`z(Bw>)d8r&LPzwia8mY7iIG<>n+s@ zedNi!WR;Y0t9LPKU==MiAZ9IXgT55!1p@8Z&6Snexh@G?LF(4(Mg>`7aVCE!^Otb@>UL4;~ zpRoLi)&XEme=2jdurxPdgLFiYa;w9f40Lp)kc3^@93ob~o+CpZMjL3@j<_?$(|CK< z6T=eLJl0OiaRAZgQHUG%Eum3#fyY0fDs7_jPpsgr{er(=WhfWg>aJ&53BA#U*NgbX zU16kc+nd{{(}1s!2Wn%$?+n9H&}hyw7Y_W$Fv4YVf;)TAkcLVP09HHXTwq`kJemB3 ziUceH-wkc_uICv*mRMSi_~g%b8m2(7do{5ascdJa@XI0;NodQI3#ZG%qfLjzzuf_Bu7V&z!_r zaSyT~CDwCrU>Pkr%X|XG@5%=M^V{^_aDY>KFdyXED1rU=i;VP_E8(>7iZ1}y{1Iyf znhyr^e)QgG=2Yp%qhkud?iW>ot}{S6D8ZS| z;$;X-31HW@Ci1Y1jfY1CeFYi>U~GW-#F~tT^dhtrcbQ9mtMIprf2ZGCN4|YTtL#z+ zvC{Ig4QS<2X?7!c3YieYwH}3ASTqr~o5MkLM}r;r)|z`<>z0fLj=WPh|GQp3&FTNp z%P%}xzW?9l@-qk!0B>r?Ctl8V@9eAIqM24EB8GqJUX5*upylQ!j1lvlm>Vjbc5FP& zmQNCjwxjD`%NfFBc0~e8@{QoB6>((L7ac&PV~Qu_^eCf_FtCyQ_r{@eN{E4Sg`$QGI8?ngEdMFAH0ncJKwaC4K$Mi3r3Jc98XKG+jitZ!^lD>@S z)Hk|dZb2ZE#vrP;y>mgYvpxo8`-~LcmAY;3eTHs-Cqdbo^qnBCa>Ity>ROc^r}){} zZ#&Fp#wXg>OKK`SMqUHMpESgfL`Cs8CEs{Ifp3!5`f`5%DHN8-jn5Sm6d1K-pd)VM zhZua(uUYK}EP7N~3WfD;sevX)e|7sEEUzEVZL$BH^95*J-tqAKKwY4L^F)+~sMe2! z>v-P`r(2u9U7NZY7^asX#q8UX&_3PIQm_B+y||zykf-np?@iy3$DLq)_C>B*`KgEL zP_RB@LVS%?N|v5_!+VC(SYPDIS}gU0@yWCaDO9}8;E=GVzvc*N3e|clP1S?*JPHku ze#=v<=*_f>7220M)h55L%+RZ~bCgpFpF;k{pRfwTgsiZEUau&7&dL2X-UL^M*^Wx3 z4i1~8ptey?y4DbCzg8)p62QY***_-xwCjUUvS15Rq>k31a-g4LnHCY>?@QGJ43!g+ zmApj7CRKBA4JsLb2!g~8-Pt=9+?S+0`wKslst(cd-rTkWG5b*x^C3afT3MDj{Y_HK z{-R6wrYkU80U==emvR8n*hs|7Lpo+no(*)!-Z ziV30Kdm zOE##U>5A7^asYznp!eC0%&Za-+8I@PWe*uP)5_p!Tph){DNKkbgouQ+wuIxG2> zj|I4UUW3NW3tFKyNH0y5dTbjQ{|E>fWPL5JNN#fV9{nN6sF7BX>tN_!9FF`)-A^fL z%HS$K511pJNyRBy+m*U@rZ!r=tc?1=VEsbk>T<<6R(y(od$ffSWpbn?HHN@`B-0%o z6^aA!ihy+GpJYeOryJY;b#dI&jPxHcelmO!>SFNdFw`_x1kU$=Fy0Uh6$tKa&wV(O zGI}L_bZgyo#+P<@b>q0U8p(-^?My{jIs3w>a%0vTX7urDljcbfHtD(|?v%HHQ@%Wx z;zL7%yb+yTmhK_GuUvzelOgOOg{1^4RJW;6B$F7>ZA`0GCz_Io#tYM3J2GJJ=+$Qg zq2ny>H*Tn=m6&55c%po~#Ic1ltv7|RS?X`ebLx$+`SV_(<7PvE04sr0Q2KN$lMa$9#j?#aoBUXy9e=Bc^*>xfV*$>B*y!C!g`E zs_l@`WR^dXH8&xH3l?#+W3BG`#EpkYRQt1zh5u5P{e>9HZrXz);})H!aQ>KV?k_r2 zR8;0%`Oxf_ri|97+=ln8lnbudeKEQ#=hh)tD{S_MpPp#<%$1O4bV_clCy4KC4jk+s z>>DrC^IUT;;9Yg#0&O@?M~D;E&PdIGjYf6PS!qnS+Yw^Dt6P1cfDDs!A@AVAfN$vs z#F5G&nHyK`$Xb?s`pqQi)H(Udg70jUu@p8+ARm>_+1|b5hUY6e)_Ac>V5Qn6x=eex zerT-6C1KXu{lw~6UycH$W0r}zqUBB8`-jHqxw`ZiT`yP;c>{?j&Afe3P$^qwJL zr3W<80Rhuy^GG=gLHx<3OhVQ~R*81U>zhmCG@S;Rc+!)g>BF}tzs@|U?r2{G_C(Vd zT%RVzXRa)HlbMXw(;leu5Ejk;vNr&!HNA5wYEkJ^AW=E0$3|)GaFhQXZyNK_!TR=R zU&fB>^ZRiw)l3ow(Kat^HEOjdmma~g0=KK{+s&YTQNDrN*H%~xoiGbY1lE(33zXPV zP*AHi{A@gGH273yy+?bw&&yvXBz~)ugz3x$+R%`6rzqz;PA61LI}60-YOS0sl}$_e ztx{;StYSYbiZ^Fy>%zX!>ihTg28YFU{}Ycg{X@$dQ}NGST-d(%$kQPbDAbxhrA_^r zlKFnD()(?#ALK*ZUA50H-9SuMJcE`8f0Jg4i85I?Bfsebu+)BtqrenepY7m?Vo?R| zBK_MKXx?clOK!D-QPQam?U6A_)vpPAiP!uvmFu4iAT;*%+QE(&yFMf^+v9cwt7NOG zqcwKy`lXSbX{f~E85vL8cnak&{>4^!#o2_J_ zjEPb=C|~xVN|?9zr#6HJVGs}Rh8X&uk~Ed)lU9!72tTWnRB}y#Vouw@L<0O+r|O4G z;tRLn>1r3Sw!px{4%XoG&_8o=VYF*yiT`$@c_V*P44`qSVhbzOi zFlkaKW8`F^odXv|2snrf#Gww1)x!eI;}R;ZQtbF@rG@TvnKF4n!mGIpNbilmnZjQ^ zB3V6(OAEiT6{{5B6S@E-ZB5I!cNP_u$sxP<73N~%`nH5rQ%C92RrWyp4k@3J0EXLY z;nb$McyGFbF1SW^lt|L?2)1^^xRpY8eiGMO5X`yTTyLRTLhw&1}4q_>)pGOW#=Mp5Z?% zY9}CJ;b9LX3d+yeEI)@Ga<%$l$NpX@t~77CBgs$Tba_X7Iq+#oaI|b~scnDO#ixU* zOV4@Ttr|M~q8Dt@qb|>D`XE4G7y4oe?Ojt9S>*!d$3US9W; z;d~#44XlV2sMR80OYV+l8wl*VT9@3FYSvkkH4Q0CtlhBSa-4gAE3m$?Kji4oG(ipw ztrNcZvtcq(K?E`s2P>uJzYJc^bc^1dF1!T|q%v&C9mM*Dl+Ol!LXW}%kL6uN_LwOPJ{~=Ofq3a1eDuA z;PaU6{zIft+N`}^b=GCn`G+`nlgOUFfeDdxAeExZIa);X!frzeOF z#*6J`1H02NmSj@91*7-Q`H%A|*cgJuT0V*f&dC%aicu4~`$xE{;S&Se|l|0UNJG z@(;PZ%n}bc(l8>^a;9d)G!Op~W8K+yOL~0C5PaU427f6T(h}UGhJ_Q}gNmpz*VBz~ zTjPcH+D1NA9^w-aQjpr#Avln>CajDjT`*HWC%<3@z2PvS?R5p2QhUrTWG}))JT@Qv zK^JiquK5M>mX@z?Vf&dFBKN)6Cc{b3e4tcjNio-9k&_MlRWdn;O52}{ISMV(2uf^m zHKlcr`II`@WNw=mpo-Ao8(FAPHMDq&Wr<@~V8oil zkT75pM(OyLLq))#?)}vJA2Jar6oOxRRuO9zvL^DMX=);VCId zE?hGca{n+R-i@BMI!hQb;f5fbJ3qCcHB}!U9G$_DmdsQ5rSPXj7~V5@76Tmlk)*yp zA8CM1d#=KtZ$(*;oC>b^fwx*+fE>PY!rv*SmO5@K%QY)M-1St+2yy2wm^wp-+{(^A z^H(_HrM;Nk`OSV&B%q_97*}u(YSvrWNacvXBRwQ)`R(wy_ffMa(%o#e18B`sA}I)n z9xka%00GC}gmT17IjZdYh~8(c6?D~IrY&z4a=}VT{+=T|ZIaRoYB8=z6&I1%%qPx% z^_|PhP7RtaE()_8k7R)zgHs`)b_z7j9PT%A*`uj7R-wR{ESuBgs@-Xk_*5^u_wjA8 zaYHd62pJerBLQ0O;ahH0@2qUBTNkCIUA+(x5nZCiREU9uMbihAPX6CsJUg0A?q{rH z?)V5GT2lM|uNz280EdR)B@t(bRv)Wug$&%Oi&Ny#*h@<~G*kGP9LJwtlZ*=Xlwixz zI}(LMzP#3vOhQ1udX%(z&$GJ_7?7(Bk|%n$?(0@o_n&z-rJ;e-EnPTADIg?F510Us z=gTsPyCVuqsW+<}_$++*FtUGeK#z-pbpj<}XHGWou-rPJElk_t0cKRX3zH2BlsMhL zF}KDfl`8oub|-U1N?YCUSZz3D8BV}zh1fGwpT>;!J{T-3fSquL)CJOz0vRC5)U?^W zgy4pfh6sIV)U+5nW96R)8?UZGDM4HH_o$bzo`GwJ^FLU7>!>QDu6y)=B8r4aODRZq zHwYpqozmUi9S23E1f)T_LAsFx9FT75?(Xh5ck{mAcgOGkb?+Z{I2-~4&v~Bb?7j9{ zbImm;Rb^UjcsQo_tuBG@wbPq5DZJK^)?*=qLqA*I!j$1YryIGq(i7GXy7vv!MVR0X zD&x**!z4Ou-!D9Bp6T`P;#a+L8UTuY7JavPNld|g|Ln@vx@)C!Rs%mlkytIw7xJtQ zDP^cRv|LFu5dwBUi-t63BBL^C_H{w|pF&A}P6mqLiLBC%pu%Q#f5!uyjFHqO^l#a1p2_Z@DuSp^EvE(Ib=If5bi{vexYOx5B%%Lj zrhFs~fHg)7HnUhX-}KU=2UJARP>wf^*V<}%NR7quh1{I=tTcg zv<%!njaw#yoJ)9X21Oti4TQ%WDcthz3$Ri*&z^k8@}yC=S@2nW44SW5e)7UicOLjc z0=1^=U#oc+$UPpiCf}xcAeu4kxo?puL%m))`PXZ1<_P?ET$b%L(|S<6{r>!5IIUNm zsw}`aT(3b|g0f(GzI?{{TPrp$tYRea^nbYkR@fx32FwoJ)-E&{c%gg=wxn87gYU^^ zpS}^-J)1=aTf(GVc^CIuH7IeA$j7>eI3@qUQoBO zScZZoL5f$ISLnPxL?2Y>7VAExUS8WOrG8+Yfx1q;!IBuTQ;_xhvOTyho{O+!EKP2O zwslZJ7WH0>sQKHK8x67nT^*?fvb`ZoW#Cv|G+P$>Y{A!BIUKygZ<%oOpr9WHL%)jw zrzsihdwAZ%qh(h7=CI)XO$?DTV^6Hi9lAjslKUBH-hgqLmFv1j9#+f;;&d(sPy_78hqjcx7^fxgYD!u^cf zbzdNL>r_Y2YT%DFPo4W2^%MU{BAh1iyh_F&7o7=%#an=^VJ=itTkEY847T|FaXzcO#M8$-9#C z2G_=;_H?=uSWc(&gT3&`o%ez~U%M&0|DSsbbHI{Op3ula^U%;2iRwbu`@w)y=!Oe$ zWH4jaHk!C!!KG7y#7cdtd@}Y>dxP^ufj-Sg^B1sfiry&t3u0(eVP$_c$V1vgE_0G5 zthrBYCu(r%H(P-r5ueLG{TM?Y>CcCgp;j=SEV9MC?Ze*f>Nl|l2(u;X%V?JewocFn zEd_ntzZvXtqhjU&fGsH1sIZ}3dqx)xRrt;b=Y}IFROf+V5Aq{46ZNLX6jC2A=X7_) z-V%stY|jgo0`!F+Ndx&AJ{*mZC7|t2bkT{t)Ge`~W+TY*6yM3B}4W^V@WUs z;VzeHv^?du`r~YJfknj5&7!{pdOmU&7T2dy@nznwS~^zVjur5_Fs_~L(hRO9zS?nE z4e=*AMGiSYyjh(Eh38YbCp_U}++%-z^|x+aEoa(1i$-=5Sxt^`X5v8%!Nco~TdW?( zpxZsLs>FEx?kE%G%4Avzi0w;*wKF_d&sv#jv~uNmiVHDiRJU^41BX4tTcn5_guQ}e z3Goi~T&1GPzQX=(z+&M7znWNW4xX*?tsNN4qPXZien{Lprn-d-L-Cdq^HX+*%)>q+ z^g!H-0E*CuV41ab&>XI9(j_OlJUpK$^ZV)jhsrIK=5Xf)fx&t7~zno2=ngqaz zYcLt1|9uVh39ez^;XOpWy{+7O4->RnTL6hTU!$0W=l#LIvugayt7%~jEKCeZP@{Va zAje9zPlZkZW2buAUsW}$H%8}DK=VDVX@N_5k9_n%7I;ftT{M3h&}$L}tyemo%%>ol zoW%PBblCY|G9<)A`UP>?VVc@B9Q$PlXnk+qebzcB=X)QEMrEO0`wF-nVIX!lY*iS+ z=acgLBrPG^pe2MUjtS`o-VTp-cmn1b= zA&8($F6ZwLvY+h`FucgHHw}FdamyUZv0sv6)lJ=phx}d7fN;)aHR78rUwml*B#!ARxf*b1cr{ugHYDZ?oOCc))ArRgUvjS4o~^1#i}gCzFs?7WF+;@U>=II~2li62A(Q zY5d2k@CZOIU&X$_3PWAyJ>V@O!+_HZ1kXi5=%v+Y03D`zp*BAoy**9;c=3()Wv z1!$Gc1vUT>#bjoMK#7AE@b?-jiHhp!;)AC~Us(O)EmZG5m<%ERhJh z#yzQ~uLR6t;H4_9u*NRl*#Y!ObbI%aOce@A*^>G})`9+nk~%uLobt(S-kBjfa4ok% zD~VwAYp_B*i{jG!HCp(+a{8J7P*+jF4lq@CV%Ip23>6^JTaD1Z34(-8P8iS0R&cZJxTxf#y3?~ z>Wr|$sN8>AOPm%9NlvH}xl_SBiG6RWXq;Hy1m|z6gXQrQ<`fUeLbkIF?SDci?44W; z)*AEP3918VN7)?#^b|IZo&f=Dw=vDL- zx}Q{{XG$lq&=8fa*Jo89mj!%D08~MAEp*dB-|%0CEXP;+_~`#F*~M0|!OOlNiTgRH zTGsQs9{p~kq1(6yA)bT~q9O8a@y_^+B$&h^^P0TG2iVivw+Lb!gP?M^FGd0xr- z6n%x1N9)B*I@3crc%7J)`n*}VMk1AQ7}f2op#+*)V@K zR*3XY|6Qb63GBa5TP$dn5_~?#zf!y~qhpGepsm8$BLZm^;1#E9ZKJks6^F{XshoX3RH!B;@Q;XX8)R*f+*wjZ;ZfE;XhvNNd^9#z0jmWF)TJoQ{H zU!{o?0tgTgfCT=a#%Xy|tDFP(ZG9>Jks)DmdszmF{6MBw8f5Oh-Nyg)$E{eCFzli9 znkAVE=?aq>WolVf%4Tjh;$&uWLt6J7iK&R24;k+=R5I<$BpsmQ`2hO(&&AlDFhg_? zj)M2DWCb`#A@1I25CGt>Uv543KGS#v0n#}TOB$N}IcXUV{lj;f6Pi4B&1oXgl!9w; zQ|`|aWeHu562j=FbfV3SxQ)1X*mh16Ff>)d$+4 zG!4TJ(2Y5+MYAgp9V$zmppRbIcxe;%p9((v%3mY`2rqFc+!HZCv3jML&NApfdWKg}PgWBOeY zGjq7j<#3MJq)n6g=@F!u&cS)otWvmbXZ(lEjW0J2l)(nuxx)4rN%vaFu%5kUX{>LI zv%QD9lIoAu+dv+3?f(ERnYG?0N*UIlnh+NBDg0GcC6x9&>`x$eEQ1@956hQ@GFmix zgCBtfo?HU@t3=G#6+iesq!p(?t%T4e`sh5tPuiq6a|kEKdGpgGHtQ7Zp%cWD@^;X@FgzbPcR?bvE8OcXhj1O~H^%iC66 z?dOJQN?iOphr6?)ZiZh)$Zr<#phRlv{&RZVBi ze2p<{Tl80x*r1LqZ?^u7ZUNOkM(uJWzs&?*OYVbn?S0CMRB+V~QR$NlwpatNhwo#* z()eHONU6zi?9l0<@a213+%qStRXM|&ajUJ}XBMey^mrsw<)fa-^FMFTi<7danGa{% z3qj7(U$g-4WJp5=tyR;zxVgG|-V+N%ZFz0&-NyJ1M%5NO1Q1m~yW(`~sH2ig3aoqS zPHS$#iQ^4S+cp@^y{wDxeHng((0*T3o; ziZ%la=o81ni1Xymcu}97h_8v0?Ov`9F4J!O7Q6U>0e2#M{D8T5WQ#vhmTFD((#MGCFFwI27ra9tlw2UE;yR?_LH_?0wLESiqJC^fB}~ zToDgPv(ve#d3g`_)PdK(IyhZh9y=b1;- zl8r`vxATdW7~mAl@Ilxn^ahU*Bvk8jJ%SUqw)gUU9MVcH8n?R(mz}PK)nq{rc#tL= zeK7|tX@Kt>kiAsM^*{X7{mONhuWxsuiIVDre9v889i4?>zst|1IX?MUrFr?v8@$~6 zJdoqqN}1$?6G$uxeL->1dxPY6^Zq_UC#bDO_fw}Sl{xNe8qFifyWip7o+$`a zGIBgn5s3+6*+tBRGhdMn>|59|!0sooti!pUv1PxdNuRI?il_^YP9g{#msuXadIU+3 zmB9Cz!}l|ceWeKBVNJTNUbu`IcA3tpADl`F4Gw!c@D*RE3eiQ!4<8SqKC^=S^IGI- zSSWn{1qq1kAN8;vY(5+LG_*taxlLq@tJIrJrBG#jeKw?e=HHgm=21&L_r?y~lGqwD zS!l?VCUDeqO9AEYI<2;;B#WMt0f?byn3e1c4q?$!2{rc z0INH&`#yknR{p{@X}GmsvTYL>nsMCTrRs@g9;o2b;`QA|UXvn_1ZEz#f0U@Kks+Wa zXH>6A-Gbi_dJ2PBJg)P^*quC5piQ@~Z~hHsaVJ@h)Z*$&|5^aUQ}emxwx3$s8VzU@ zfA7cXkV^u{OKem#^yE3+vWhydn1Ix~am4aqCIZ_zBH&*AcmC`0#45@(!T+_$IQa(cv`ZN~lUVT5%tAj0RIW z_!>XG$hz0O<&k|gD#JzpZWZIIC$@$N39_hE2KiLm+G0(;e=WP4JXUvkt=e+FtWE zfBPTVhUI`HfjY%s8)y6&w(~Y4{bmQNV(((9$5$kwPwX8psP_jjxbN9s_+{6@fWg^y zu9j)w8z=kzMNd<%5;gxJoZOKj118e}J(OlW>2c(m9f-9S7skeoyb&oWsk)$%psQM-UgWH96ejU7FE)YNr;D1v$U+Z z%=~=QN3blrJ`HOQkuP3$5arLEOeIT)M~Ib^#O71%T zGCB&$J;w=}EH3_+uRkXIUy3zoA6rAxMO8(1 zkliP2=PLi;t51^peHTU1I2t@7(B*kZJSROHIN)|$yv+MrkKTRplfw1d4MrUGR}P~? z03uHU^JW|~W~EGZ1HoCH;teTOe4~x& zKr7rnol_ntP_<8r!yp=kqhg+0u*|D5;Lp2_~KKN(_GBUkJ&0TMV6N$FYVIiJz z^u~C&5bqkauFTXw4PN=j_wuHyHU(d-q2b~BkM5Qbg|6BggC-l+B^Vwsw9;`Fsg>8z z|Mv6vy2`^w=#=vw;UzVF2s?kIek&{RyK$PpZ!K#IjoND&HTzv+XA&7rjw z5nF9(`lld+ovK0Q*t8c;f%HrZ8RJ&uW}kcxsNN1$BJBCAYe&~Wmhiy#tZx|a`L({9 z7-~IR6NsIbM_M*neev{xF52C9R5V|f;_EMQbaLT;bTkle>KQ4S*l%uR^r^`xvB}Y* z#SvMcrgf+l10rC?g$4^$7VmpP$un-3u^u!yB%w7=-~}f%Q8pefW^L$+@fO7ZOvNW2 z?2yI%<#(~{S4h0KT|l`GGY!^TcowQu;x2sb#gC1b=QE^=3j*fxlK_h7n_x3r!sFOh z;-~1A0eO1wep~4@>6+eotkbx-d(Dbi#4YL6$<)IztP`(^bnoSd-gy3Xt>3q0w$@<7 z^W!3R{h1IWlZVMc@JhJ88!X{TeW1|vf1)}X%A&JUW65C zUtk^h2u6J}3RG-RU+SAsUG=tT(Ay^yXdjE+f$*|9(1W}J;vUZu>JMX>_-xbMJ@Y(E zSAMzJey0af>$=}gS;i|jk5&82n)M#aZDPiYy!fot=8gD#3^*>&3NJI1=syl6@%r%b zkDaX$WPxreZ7kX=6g=axaN;Qi>4zlvLYa1#H7TuuH6^Rk%%dDtQX$ROnkUL zJK^CWQ`Gi!lZgm6@wxrce5V^y{^TkX@^9|`GR*00-oGs5c`eGjFVYo^_Y0LKQ($1o zJ4OV0|EjWE#!)K7g+3Fcx(5wosc@b>khr@so$(}1HQl^Evs5)X4T>lZMM8GATtLR+ zQ3DW>Ee?e6?!;NFb$@b}ho73v4@YVo7>`+vEFqpDy+7Kt$|v{{85^FX6L^_q_Kb2P$_(A_KlCbxod>WAN*@E5yJ0 zw_H#0I$TiRP$8JH3^{0L@Rat6I zcs45E;M0hPebY7oah{#LV&f0a#8UX$RXhG5{(?3)QG801S`Ow^v5Q6th`VksN z#E>#KhmQGnK2^=TMseGNdHJx&_x8u9ZFF5Ypt*h7)QW4X9f9of)t*U-c8@r*f0y{0 zX?l_udAeGLBlz!|Jr`;Kq9#!=izX#HcqPUa4FTMQk|DGza)f_tCa-32pFT(iE#il~ zo820MLL;lamFbLpHxE1Q=dJbv3&=((2&>EgQ{jc3CiWACJyD^D<-IyDQs7H>jPkgo zuu6=IVk7<`FL(K)&$QA7w`T>{l|IJeF)3iYX}KHUa$JZQ?>?lpZ&HJMh8_jIt zeQsj*KdkzgS^sy18;u#|E*FCq!#t3nd>V(4$=yKsD$**@#?q4Pnry;fu>1jFkAlE- z#!ybGKmzG#_|(PDjKeCoM08?YHHR+gc$YUOkxkr!R~2Jh@gl0@-`_Ctxg|ziWm}AXq_^3bF@vM?Ok5|^M|A4;k?vwoXc7O zxEKJutXrj_UW| z9UtCSd?0=Y8Dc|>Ytk7x12C|Z;7*Kr5MgDa8O&VY>-)isnXM;~b?5@RU+F!s z_{DfmzRK`(zl)}s_O`*DrKM|oBTR>pv70-6|=$7A&52Nb$A}A0L2v%IO8KcU^s? zSgCp(NL6-p!Oc6Z^*OomtFGMk#j|Hx` zFWx&_>4ebdG+wz3Suj88bf9`mre@|g z8a%|kSNK^vt%g%Nv4|qKzzRQ;Ns)KpnG|i1x$#J}X7;ODs1(00vGn>iPAk5FPvv)- z2k{ozqkY!x8LktwD)mvYl#6b_?{>g?lK5+jd8X6JOZ1z&7xSrdkMZNMA$*ErQQ>G` zQ0|p=S=_jE_bmr>Lc5kVgOj%h=4ipy1B!yFo9cg85oXMeD^iy<;O;amlna6xDC4QR zxQ8##T`dsNm!1WQx2o@tH+pB!rQD3Tc7;3wHSv53RE9&rdRLfTz>q}6%L(MxcT2v%;QQ)r9b7S{GsI&S zrD4<>AVMkgU7)hJ7IB=ZpN3DNOAgGfjqJx-%%sy&M{BGHZ8%tV62J%TyNd0pn1Nh4y57SMIO!r^91 z>(|z;sk+}pOc~cpsjN6+&x^xL*)Ox)Aku+)fKa5%K^SIzZN~Dzja=W6w?5|M=T|6u z=eu)MO`Jg@;F4;TH{f*IrU9PcWSup;@cb3zDLQQ*;H0ZJI8qAn*ZPc8uM;Njy(OP& zy5yT^qbQ!R6gTFCos+Gl>7ep@oWF!k43;N`$NWr?shpViG9;aGz6)|d+{8$&NefMI zgU!q>{N;JPe}P)1QtnAIASOwzA!{_*qGDL7wG2)OD1)&hT<_n5I~)WhkqOxuwqYUM z8(3+)gFjHL64{n|W#XxHfZ>4&`agQUJi$!|&TSJkD=uwh zT#kKdmjtJ4V9LWfSHy0rJgpRZnKE_)%_&1bi3@&3KRi0h&iiM6N){f3R_uvIA|il5 zNyv8Tqibh$)pX7I<+`4W;bbO44~g}z6c6~!p-D>iZrXqjb}NF>bKTWA?lI&zA4FT< zWG`f!kjQNlpM13(h~%JT#rcAM6z7vystg~U8{&Qn1n=_WcYu?{*e&)0Stbu5A(#)K zk74M(EieM~sI|anBUi4o#=cie&mnOo^MC7^U{@}E1mc}-Y_~THw3>CV$LOcz{HGdx z$S2sZ9t-9rvTbPz&dov8|JV|*^*&ZAaelUQ#@vWHlTCiUCl0Xq$lu8f6SlchS|!d7 z>#{^fLaDqS!csX=2Z7MGq38{bMqdHlR4mC0ch9<`_RdDOUoslQHOa;cxgNZ{>R+|F zlH4k{^d&pnhU$C$2$UjDbqgnKzdZl}yQI3_ujPUyJ?deO=ff_5a))85YPzU~1DH(Z zpKyps%|@nl8y$FJdr+pcfhZ^eAbh>c8jCC%T22|Pi0hBg)0(#e+^btQFBJdl#_rvA z;$d&Sx6~GwWp0wcRT(kf{lD?NG%k8y@Wtucy-VweUIT*=tHxnx>IF(*w!mCS*hinT zRq{?oAr{Tq_f8cupi}p^n)ppJU)?i59#8ainS$klp8M<2FX&gEjFb|x`rFw<<0sTB zcMw1Nizg6pHzG0#1Ax^`c+<<+!Ok#O6>#gF03P`q$?s;U1~|a34+5d(;KK{{n0;d^{T> z3%pc|wc{*sB#{rLHtsbPZu+7j@0iCL5d29i;qPnIp}u)K7U0BaCusb=ykQgE)HyrC zX0zroZ>bt}Om&{TRZjNeY+M6R(vkWw+Ts-nATn;w!YJeNrZP z;l}c%5mg@YFI|ocBH?}S`^&@A)uI=Sg&|3IB5v1qK>mtVJ<`g;X9P{`4(OdI?zH0G zUtOIFMJJjJ^$C>A9NMN;%YE#kc~+IXbz4H^m+tDA{b7Y)W9Farc<};j5)Dqu0x4*S zCFm+NQ)W$AHfpLCs1?!!HL2yUqspzgqfG+8wzgH3jpgNi6NlnTIdySdhKaq^o-nP1 zepC7wI?-Al&Bdktka>N5Fg-vb;`7W)0I#2TY<0}kB{cy{e_?6Fdfww_LfvD)VSL~= z#ITV5G$nQ26KMg|#X4uEZx$jx1}Cf3{}~_vWk>~R=7WEh_qYER_V4`5mmACbJs3Tm zlISU7lXOlZ*!`>Di#1V(gwNp%JkGWa%w(~(GL@Etud~%AxB+KG``1;eHoSdYC-CUx zEK@H6)7f(7+k;96nB$qyvoVgYQ8y5o<}B^)u2dtO%v1igcE>q&ZV?YldhUs@jcbZ7Y>-R5P zaBs*Z^UE*j>LC5IbaCFkdV})(vdpEEEVoZn{Ntugj1(26B;s%2o#(PzGiq58)A>rR z-U|nwo?OAO&w>8_J|(1dNuU!qLr$}@x!HWtifTHEX;wXbO}d5zdhx!bCn#zqfsnZB z?@!S0zsw8i=7FN+w%VAf5!JV~)Tk-leCg|8H51EUfDBI7pZJ~CoxuDR3sfG)2;@;u z`(D%hNM%jIZA>-%aI36y(z6k{jid(J-|v`DhLYkoFU|}0(h|-^H^`fN=ORlzMZA>@ zN%sgZKFx1G4oYt2ffLZjh9uSgJ?ge2vdmSY2LxzfG=NQz)?8fn^tbS_fqJ#0hUsnf zaBec_k>P+v|7whWwFhW=Xr<^<0qlBn@9D46Qqh&`I351kIUS{(Vuh0Ie)4}JW=u;R z{j2~1oTSz{G7M1o&6pAlBp=yqhZ&zhCqpr9et{m%_dlTs)4vz*AHr{ZDGG<->4CHL zM6zwl^y)MV8fQF8xNKRhRzhC^(~;IXEv0N-)z1i4m3?H+&ELs#^$v7}&leUwEV zYB&8pHYA7eAMAmZa1v)@IG%atJ&#}lgxU5K*w7Esp)?T4(x_Sf_Kt*2i{i2Oxh+m= z06Se-gs$BSLWP7ffyhmat%J+x!B(KYDs8`|`SG_E(b$s3^vS0M=38zfqOk4HCS88} zU=Z-Aw~7jskok)3=e;^$4kmvtvG`)7robTOH)jKRzB?X7S zICmnk!OUWD(%6#bp^Yhvu6$O#s>M_tKA_xqpZlu$rd59hjG(RYa;mF+ksKV4!NWJ? z?A~30+#5Zg?Yc|CLW@YxtH3E2nJJ$k{tg@R{mxDhpwN*&5H9@KZdr%t$5r>*a5cEh$WO&*dRPQv;qE%B~=d&x(;eP8vbYbW({4mSIol_GKnK4O(q!Dhq zoq(GN=3T(gD>fGCEKyZI@{l)wx4H3Xlr@sVXF-3L@pTJ&gqp9EfeUC_fFRquejB}g z$hj9B5=;pQ(y}{h4}9$wng$)0@No7N3xja*thhF!_-t6QF=x8eccE`pq zo&V1KLB5n{hSgeMzUI!0&`aRznqG-mzyPhbm4fj4ECNzxGxiwe1u1do?G{e{ND-Ov545rA&J1LT!i|g}DkO?Z~k zvU2|ks(O_nC6Gs#IT0>gzY~iT^KBR|B4bJ#&vBTUH+SJ*m%T^I5fcTy=w8IU)Wv{} zdXp&wYIt(4ZGVr(P#X!DP>KbTB1q~23tFzb(y{9npvB*Q4eOPGye`x&bRxLxPpgcB z9Ky+IPQc$saaT$FI%sxH_aR(CaU&l(=UXRe$k`k&K8~ByDQzxMD7K^F>9^MS5Uqo` z3u=mE#O|D%J8nC1^U*=|DJIfO{*1tRFH~$gDI6qGY?XJSbeR;F@5>=yGfy*Vp9a0w z2|1njI-q*-Iy-)+7A}H`8IFtmII8(U>7fz^{&Z5goecB|D4KJDxMK9vov!bm3$e6b=N z-EX=w5*b~f+}J>Qg*&;S4a@zRwHz9;AZEw9yuRH-qbG0Nci030lS;v@Gy?|Znj_j8 ztNZcWuni>d!>LK*HR0VUBtJ!*b^Yoo^RXgK5LDJ~^zPFQr(QP9=2HVvfOM5|F-|+$ zEP^z%EZ^iFJ16{H_af2If$novdh(uGFdkdVQ)YPfWOi12Yp(J+;>K0b*H<`y%<_C+ zM65TwF(^1J%cN5mvIz#$HEYdfcJRZHZfN~cb?OZV^&FN@`F^X&K#%*1wu^bDv-yx0 zOVS0ugtt|x63^g3d`Dpno$@JpW^fj|1d#+i37?L3hKVvwn{RRG8SX>7FwUE~$9*h3 z1^#Dp^MPtwoR0L-N{f$o`Q+DS$-~YEc0Ap-Gq|5`ggy8aEEf>+9~1C5UB7&g(VSb? z`9UI(QUJe`Js=}>fQ<-Pan4B}8*wHA&)~Yc%?G2$ya64qhKJSKF0MG4zU$8(X^aD1HAEp(Hf9X&hIv<(9)`+{k= z`!^YKVY_S>Q`R+QmaTHSw%Q}u=uWWG@~!Rduk-p+Ck>YZd@sV2c_rbgq(E+k$SIz~ zZ0OZ>Q_6Aj@u;8_DcQMT2{XT^8#FASm#4zBl^JcdU$&p#gx7)J<9Oh-9&!D^t=JvD z&N%a(HT!ilsM$**H9T5)c9^Wc#6z(;w8jNQ3%lBT4baJi!w=xM zn-;1!iJv~oh~s}P#HKC!5@N2N;)oRe5GD?jWK%F+#mE2e5boz+HMsT7MAB?=9RT= zJ7^m{;mMW_#hR|MPJSjI>&s&+@ghcm#xgcUw6(Ls<3>1d1&ZM29$UI3Ubd^rR-Ly)HICg3U0Z z%1t?67+RcH#O==>)pdx z=`jfksexMX5X!n+%#n(~V1Kebbj6L)A$ASpqvbK$mDghl$2W#Gd%}IUR67uRH#etk z9l79}6vidGu_c2E&oW&|1{E5P=CUsS5m+EO)9$_rF(qlKo_Q{eT!^CCwzaY(^XgZg zE;c|FxA5q=3SJXm@(m~Lr?`xDgAw@y8SV%m4Slr{@*kH$rwv%%Cr6vHL?#$FpU`21 zGGiL1j#87SxUVk%xD%i(c1WtQP4hdwWm&0m`#r)G1u zCl@BU74c2s3_-q17I`m?&+@m+;L%irP3_42<>h17J)ySJN(41EcetL}Odg1E#Oo<> zS)Fo22Y36omDU&s@M!PHVy+pqXo!+IfTFG*kJ*>#!nSx_1=xQ9dQ=nfxJVeoB$tIg z`Ik!TG3s1IdC-#o0%eu)Q$XR$bUh1^dlp(5orE2^iZRe$GlxpV>MT={gHgH=q<;a0 z=DOP+{rqaJ?P_Nd0L!}4p9t^oBC;=^0GiQ#$W+ee-Vl^9*K-NY~}Qh&Nu-aR$Mv zilwB4UvhmaeU{H+I-T0C%4_OqZFWqxlSj|{ql}Dpjoq#P9Z_xReQUW7c=7q0ONO}q zJ1PyMqRzn9?pThy9Ws%SAMT}bEXrSxO?D6Nu)JJM+cvu!E{@bry-J@`O31(Am4BUv zwR!ck&{#NYsI6*BTCrg4bldo#{ruvjqjfF}z+C(l7kbZNqW3pV+Bwd;m{7f&3MsW# zQt5vh#Wey`3BAgB^(QgEszL+1`agW}d+caLd=FbSUr0Mpen4VQ^-;9gl8VEj=maQxh$41`eN_9X5<9cw={ z1sDFl&>-7#>k+lEi^43TD-I7CI&~ZSsx30X@9??iaZdkhMy?X<7I|> z_>xg8yPJJi47d!Ac4)23QzCq%rSnzN^(B=SGrH@{*YQ^z5|!?2o}OpqEm(S3&OIJy z>2;TnGc%3IOP3=aG|hw136yw6P>xZK?&LX$CTj&i1SN91&j6Ww_^NCv{QM=y24gO$ zu*42zG2>oRY;gbuK)Mim8&{DZ@l-HqU~I`>2XmzF7pfV ziE|ddxCZ3{mC+K-I1{THC0Zz1)ajFPn>ooDfvII>0r}$3M@p^RjJnkUw=IAEZ8;as zRVDq#BfIOpXx%=f9eh+~FykwRwnhcDX9gu}>wr%u;j!p+@B5sKYcQ9=_k03)kr#6A z-0=>o(85m+n&>X%H*I8n43efMiTZxjdPbOOzX>ZqBL=7~!*^E~-5$wfMo_L4w` z@~m&GGg~9{=;-{dU1~G#!QT3|n0fGD?^D}jJSL^6pZR73f4R=7kQNTwf?9+eoLrU; zk1B7gorOp>xiSx(e)XwLYB1ujGieVDMnlb-0}l=*yf*ygVch*kXJ_kkzVElj|1b&F z*SHyLqF%b~QP=EGN=MDVD~u<0I@9C@S{LaK{+hR(TRi;LcF&sg(~{${8g@45pk+22 z!uSKJU2PVX9@QosAlLNB(~@i=5{kU4^c`?5+#>uz&EGWrL+#fXB{<;#p%$dBB=56^ z(v@0fbaZpP^2X($8)Q|Ucdp#lbFH;{r&($j=cC1n-NIij&MCkO_`6#EzS72V;BDiV zESdpU$IZsYjk%oYk)40#BYk>RAt&)A>;|J7-*5*8)3N3ahmKtuPL}LDpge6yb9;Yt zSbguDo_#Ki9ZwMfWKyL}^Nb(f*?~Q&2qm!~M%m)e90sFiKN49(oBZM63{|c*rF!D? zZ%#4SXD4?yBxpHnP;zB^`|r;PPhL;aN`?=L3CAj+9TKHQxDezfu3t7*fThGOCi&%VUVLf+~sTlqQZHMdVAux zOj>FRt@djcNEY-y?CX`kxk@R2aIoh&DZiXyRO&F5*rjEk3aB5Y4r&D|40gzTf3YVS z_|JQFl=h8ayWUZQKx)zwHRf!KK+~CqM-}y@KI&8`R86c${_EfSqG@_exbN6@AQ1M~ zZr*fdTG#zZg3BSW>BJQ#(9W~n*K^#r-DF3tM z;{2^V#r930_yh=JhU?m`7COKU%GC?BOCFPI<_YF3FP3xk-8%iDe4_);5aGwzk}t%J zxE5sQXHxdn6SLMvZt-v&u9butGvEpq2^Z)fU>S|i;CNe;a)t8|*D`eAoehRUWKZ3* zs1PL!!I`vg-)=vHu@o49@cUfNy3L$(sMHLV^A#6=6;MNoW~V}n7U3m`He41<1$4n&fQq6c)@f?27g`(iIt5;>G5zAwpLKhWbm?(? zusRSM{luk^2KGIZR?ew0zNAVXC8UnDJL-?}WW5uMR?UIQn%K?1eeP0DgY(;VnX5DT z>r?M4KRwf7;vaRJRiI(RVKuLWNh;J{9=)NUz)Bbf`mhyd2)0vC%B!zVI0+nnVpsko zl#}7WHmo^w4Z(K4Bf8qRB3C<5w!#^ztvVp zr$S@sRAUyXy;F*2=inRLsE&_8jJ@uM<*ODWQwI8OegqCHC8{{yjg7nx*Iy|i_8b%; zHB7|Hxhjf1am*6;4OrwKVuw`Nj=rPo%(8#7drf<|)C&9NKK_@|kfZ8?_mf@o#LUVP z$_SVZj9EXBb{8iB83eL7S?L7}J@+&JZYlfpqWD`z@U9^Jq=C-QI$Pd2hM45uHT~Rz zGKv+B{bb?gK@blI{);+)Gtdf8>iX?6L#sqf4)D)B)e}#-LX-pouyS&Hihk1jGcA!R3{jKtJ4K6E?*r<=9+=($* zb8@=R4=Ox=IEkeHwCdJu6Uqm)Ibyt{PQBj5N_`Z~uqWU|T1ZW)aDMLz_QH>}YnmZ8 zhX-{uQw*!2I^Q$vnIwvenux%Njn2|*&}AMBaSjtPQ*{#CGDhGnJ;I(FPJ=$@h)?pw<^Vcw>|xXlWmE zp@w_8o7A1qXDYli5!Nj5=@ZV&Gtlz=@+$Uy`IPmKB=$6rl;vyWFn&OjDn*1+ykUFh z=EjrP_D6s4AAD=!&uaG`i8Y`@w+>E_xwHS00YXban5c zI`9wi;iV4@FvvXdA>QZ0u!5EE2G!GqY@TQ{uH@O`A4TUqDw)O@%of^$+|F)Jy}zThIAn7UTHec=0Zbw)1K`vSNAmQZ=>k@Xk z{Ommd3)~HiJ0b668op>n9^tZ_Zl26%8AjJ(C%$Xa7QS>h*)up9j7IgsQ{pfADfkur zXF_(TG5gBFM)Yml4Vd^h-ZA%*C>Q$Yf4RsO+Wu9p&}a2W)1aoe*vq^@oounhC^;ci zG2@!i`_!B&J;m3Ja7*qaCSaK>X8aiZ`uUf4zcXnkaj7)?mV7^b@?_R|mgU@S*d0Ds zNAx9=_OVb|%)!Za%ivTo3{#=#BhvAzr?13H_QpZvnB|8YC6i$IgT~7;Hn;=7{#^UL z&x{Vi9gin1a6Y0VJ|Im2h z|35WeAphUK@ndX6^Bc>xzx75B9PF^alAtJmM*YK7%T!HT@IwhdSCcL?Zr{qMD?{Iy zXGiag2d1su|A*})?)uZ@5$Ke+mpMxl)@EWP>fjxr6ZLc3eju*Hv(Z23{^)oG8_Lxc z?!k}EIs7j{>c#RW<3A9;c0;3Ey}Uo(l-LmeAu(s`m%*NtrlA-~vJw!%K>*HK=4SVtM(S*JT~`|K4;RZj0G}To#(lvsGufYVM}XE zoHAU>vw#A)j`Rj3ZeTmpY5#GJUbCt-;7n8&g5F2D{7B^F(Yes9F(pO~&pvQE0^TaS zvu=!2_drYPa6kQE#03M~(O@7W7xLofAHuv2sEUjs^~6VGdX!AVCjWX{#o(0ovq`O z%cX-2*>H&7Z&iBPrCZT(EAy&X09Wb+oS1G>!e+Y@wI~r@wUCRQ8&?6_`Eb*rkT7(2 z1cso{Ead3`PS><7Y-@O*ih{yuvSH0v?UEVp(iJ(=z$(7hdI-u-kF<7Nn^(m7CK&NOESg=F}FOy~z%d0Fu6Z^Hj zeI)(are*9yXUSb>fg;~&@HX(9qVVcsM}j2D8f?X}LjKxGujtJhL0M=Yqg+>jg_aTE zL&cU32E9bLo#jRxU0jx0-S}Bem(ybCKfeGSFUXT~-$z((wYYFzG+Zlps(O1g8?-QC^YZ2C?-=lkw+f8PCX zvllDon(@x@j&}?|;VTZI#)LlFaC$2ZK1AdHM`BPgR)rv}mACcX;{I}H9{Gdz_brm5 z;fScjyg!FibXuiD5^L;6^{0oMgMJa&3S^Ex$0kIWaLh3N@OHAwB>(+NFXmUEU-Hpx zg=w+k4MDrN)4*u95mH2ap zkQ(e9(xp>E@3@FNw>c9|AF(D``Ps~W6~N}%;=e!6veoZQtnaM}9rH7Pblt>-^(lP; zRpNSzFx=>T@8iRog5&NUFHqm^2LuIM??gZIgPO2ovTh{kNpe|#dqA)VVz?_j04G7y z)f8#g#RjO2f9gPqq2ZtNUT0VFGU8PkA?nzLS~=3&*CJ z>2`Z;iAoY_7UW>pe|=LMd*1IllB0<2X4-zYDE(pHdH5-iHsG@oW``Q9EG_mVU*eVT zWvT|D0u&Y1qtSCxQ)948B=Bb5M|9lWdhnOvy03TqGl`xXT^fLf9nUQcjugm*E%6;O z8px|jQ^HT;JAoD=0jT8%*)74ZUo8S1>;`~SPdGBYf$V#pieOqGwf<@fhG$R)EDZQ& zaaW~k+kPhc-~)rJWz#-YG#*nrh82%|pnmJe!p4*-zj)oFbWH@Pu6qPZbl`{U3hj{P zdEWb0qUgSkg0Y=*NtpJm#QFZ&+H+jqbL0b!vld?g=K_k_p?gOK75Y7g!#F@ygaJDs zYV$i+t6nKtTl~Q;Bv6IHNwhvOwz;Dw2L^h~&AGwD`n!h!RDYQAd2WRjTBBAL31}+= z#nJ6LGBITfYM>Gywc%b^q0kwY_9r!cW^)8Uh1-a|E0+BoJc{-~q3Qnj*&p@_gflXcW_maF%Toah}^cjYV# z%~CU4KfOT{{+|zcd2yqQJzlv^cilwyx_Z%gqgwmFFu`E=1u`1xSFxZDTuV&h9rQF_ zy?@BC{OfPmFouBExe}}Mx;J1hIkq;L4t&n{PoefYG2m{XG}v<8eF30)ICDM?Hr0!6 zY+I%_F1Qi3y6MDv*XBM`^86^@dZ{x@vrGF}(4&L%#@=4927DJlMezkQMi!BLcRp~% zh@@70x-d86nxed!D$27Q#E+Tm%5v(b`an(&2l$)!Z}_<$xm3sj9tA#!eG)L`2<0+0 z0Xvs_Qw_f5IOS>w5}u<8_=O$)W`!$&ikhdpn>Xdb7SH|SINc#XmAv-!l4=DVRqJNV z8K2W7xNBAN$$dSJUA@OAud3Ue|PReOXQ%|20S{tFPcXq}T#2xQf6Ii+AQNViDI;RsA z-?8-@6`29t4+xh=t)2F(Rk!t2btj(j@lGA1)Untx{a{V7Y_6T%jMDPEX_$i>p9?)` zFCR40*;%p2aIP-}nDl)_9=~SYiIdQ+|LU__6S6zpd`oR-$~CahI6kA=O2dJVzx`;l zqZ1NNF6r5vSS`eZoH){P>@8Nm+U)iEl3z*td*#|!Nq{|K&R3wE&bat|qD51Di3 zQ0bqC$q6)>@)v^v1URiA~8`U-rdquH30f0RNhZMsk8-k~}0&P56xywq`>^<8K<$(whC3zI%*+ch&9r%aBYmrD?p&6g@k zy{_AH@*aJbVi=%lSGf&$xO5T1I!e=sQU{?YCjQ2k#ahmmcQGGbi2c)a)66VKpORGp z7in(xR4^us&06^b`7r@y?M*{JikolN%Rbf0F3>2D@;@O9AWrlAN!|n;++yp@m_cqN z64-}{bC!}ibxy|=nBFjPC+B%Lb35v*})_*X8avzXsOR*`l5C*MXP@dIZS#bGw`xgqxnr2B; zwqHBdHG&M0;JBgLvMko}@1ExQ{&2k`jHPAdpoQQtyB;MQgYb0AW3DN$TuJ9ZW34S47F8v7fT;0ZEbO?Uo zz*uP-twn;CuUyj^q!h-KEf)n$kDlQrHvnH&U_AK|q!OJDL>=8N*M-MRP(cJb_b)nN zNqdhD44jAcZ?o7CLGAtCx?0vr)u&R5gE|cc&%<|K1u`4FFeEEW*S?e42QiWfbk`W9BZdHg(Wfif?$#@v}^`|h}0+5 z>lm0iX#>+;k=dnR`{#iAguy9H%dDqyF?X@13n2#Jx`A-L5ObPtqE zXh23EkjoTXx$xf8ohC;J<0*!8{v%d+4yU1v?C5lRziM|kO+)&M8g5@Bo_k#*-ujbiryP^S$WBnzrAxcB}p1a;mPt0!b~qOL$xM2bR}gyB;#@UD0@2KLAO zVS$gJ4lFlattI#GphGNdrLKj%(2ZeEB_2F{$A6ytrSY|?`vZ=RsnnOMd%$DnNNbNp z#LjxbKyyjtx@OmZ`IEiH)LkR3YJl!;`buZyn5aSLPmjgG7z2zf`9B}PZMHRw1jGj% zhqgmRa>}J=gqS6x{7#x@sP`%$9Z5+t9&8zHu$x;0WtE`{gU_<5vbkA`zob8PWk2p& zjHaefy|4N}a3f2pI!10Y5}Yr#(hhi7sCR=5IK4ky&NSRt1J)N7Hm9*Vw|SIP{icf^ zw)L|1xaF@>B#irj0imZ%Lz_w4{?vvs4Cw3tztr|V0ao;LS2NTG7Ux`vG$RwBPsZw( zE6USdjhwi}xEpX8{0wTRB@`W)Qvw;y*amgTKj3;&%ChE~WU8h+ zsVM_L+4VoUHW(gu(z?Iu{iXYX>Mi>lK7{Q=B*zSYxaE$Mv_A)2Hg~D?ZlzVvTWqd7 zdSA9}Sf#zVHySb<)CYx_ZTi^_<_`>h4S(zxVYm1YPJ_~vEl1HoAAL8lIXx3NG@S0h zS&naKchs^+^KBqc+r0g3$h?<;t6$ABcr!rk_wtMXp88Q3fgrT-m?*2_zWewb zY3_8@F(gR>=*azjD&Dg<2yX2s1|CgF@am)a#7$`P*Km%$ED4uxL5pOj(^E&vS)p-z z#k{zFN9m=dQ@i?P>rl#!2d`%G5ZRv0FLX?PZAe0*V>T_L{1R5n={YOhqE&8w=ukUs z9>MA?i1we#61SEbh;7h%4OiD^Z8G4RON40rhShzCX2VCDN-q%Lb~{h}aZWN^R(%S3 zw-cGXfP=a8jMtKjM&+46mrnL_>wClRd4qMcvi6q z)$sEX9t!@?#n@@@yXtkVivDm4UGux$)rRcpP0j*~?9V;ec*%kDUUPb2`}Z|CDPU>1 zf>IKkndB4#!n1DtswbYS^^r0~qAN4Ca1k$#v{j)cCV#@u`I_`^=e+ z-q?pIDGJFif}N0vFP!9A=j=xjS>(_iLo!X7-2bPe?g+lXH2s>?xc8WJ6CI!roJaOI zZBy$RL|j(~S~mTddHm>)cTD$L%m&!kdxG=sqd6j>cqofVo|6Psld!}8{ztb*BcOYaonoS>P3|Lu4( zKRS)N$Bu8nYO3y9z%F)=#Q(2umhcfZ8&Zid)G*%d1<(U4MP`1fGvjpsOo7}oTGx&3 z)$mT{PI(5zzcDtb|D@K6%^z{MXGb`&vhDqUwu}Gvs7viw=re%(Ao!I7l+%+J*x?{; zJC7$`U+MZz4s6Q*9#xzS@CtIwC4u*@EHlbwNN^4X%?F3qj}J~8dS$-lLo8ibVZ_J( zj`&B1S@$7+p6opq2)QFVKRSrem}`39&_7HsRxeWLlr_r04fe5rPfRHD^DzWP(rm5A z%o}4M+I1MY;l!dMUb8b;{&1?GZ<N#qVz3)q`I~45Z(Gl73&E=|~HZp`VKg&J|7pG~; z60zqrNr9s}4`LDT&+VhxY!Jv-6vt5WPK;kd9E;I^Fi?{|#r!m?|4G=P5$cCJ!d6XZ zn{#O_tlSrTrhM8T(rj!|HeWtl@`_wcHZX|7^%zVTjDE4?w}Fn`NeteZSf}M6+|^B! zS%bMv$A-DZawC@ImMBI3&&0{4a1HF~8_WAwlqT`Ld_ufE?d7VEvtdAcw?*F5^l3FrI`0TDnoH0DJ~-*X;jkLb_;TE0(iLSYj0(#F?qQdJ=x zb_&^piBVf`Jnd{4I8mUKVFN!griInTOQ!dO!wkv#3~ml^TR3tj>GSfp>0m`!r+gF=0ld zYKZ}>%k3>=rgOKfaq8!K_RV_lj!#%hmq%I@vQ(5JTZuTbC4Lc%>yla4mbLE3Pc7Hj zKhe^%dssd=P&>!aySzgBql38!Dt!wiX4`?r&eFw^G$I56-0JyrbUS;Y=5Ja_a9)o0 z;k&Y+3OmV4^dg?Qknn@yR*-(~DEFZOP1fDo-H7cVB;gjXFh{?GU#Tt8-%wp5}x$yJ(y+;je zFJOy6Ni&0Le6rA*g`>LmXZ{xHyG`%~19p4;;$6h6;Y3wsDb%{Eql;+dj02ZyXZXh} zfg3b8*X$*TH<{f-DEF80eucy=ix>UnhyrSvesFv;5o?!MvFXZ3ZbzHegqW5KL73!m zjfUR-_Q@k9SWwG0%a95Vz_#|Yk%4L%xw8 z_gV@BCwg}p{Z_wS&}v7#cFvYBPam%L>b`9T$?4TPvBa}+mr2$MsL*+o=s8lyLyMmn z8G1Fcyh$HL$}}Dz$PZs|P@?a2pVF}T!JMLMMYc2;l`3m>NL=0qgk?HtyBo-~)_mra zHegNyM6LO%=#pa`sV(EHN0^q}Z^kS3e{bm$X|F9mCN7T2#D+kOvgsQ%o;GSQU_gox zZ)X$8&sg->VMaw8*B_t}$m62BI=zu0o6H)f)m`(|c7eWB?Fb)h&ec#O^F`|V)IJ9H zZ^(J{k;wga00}NGOZC$pt*hQkBvcur6W=ni>BES1y9!4~0Kw0#wdGBN%&0%;`$e`l zwbK35fOYE=lK5Ntu!&l}*c))uBy;REX7*1Oep1S|P(T3S=}kbUia8sO4!!|{kZFH_ zt@p}zhxl^kRXIBD-ozP=EK)@Se!_(%u~!_+yG5awy6ZO{a`o!%SO^79UxJT*)m5j$ ztf!0ehV;nCYfuzJR!B5}(pr8dE(Bd2lyt-(S*#z}PgOieEIhvkIRb#8SGcckNfat` z1REy^ME$H2^sQcG5&|zhu{;+x71F@{3mVxyQMmMh>$>Gcbrou@KKxXw-&QPxr++H> zfC)pvzDeGIdJIU5Weh9LA zxccr;@gq4ZJ2(eKuV}cxH#r8tP`mRT|=sL2UGO+8yRo3@P-FhwSn`mu`yI4dxSvb>H zyW``#<(h%s+iHZ1>2STZ6rjE_$60G%ZE;DmulHPZJ6&JYwJCCIK8I+_T<5cALT@?r z<|;p^-*H;6z+YWHx&1JCN~o-m0$4^)1K)n4^oXX4C24H8tC3D8mpGA+SM02uEq;&O z8*DA&N)e_&?25FYtg&5@&)fymkp%I4h1b(__6P`aLyh9Vag+6E)FUSD^p#C(n-%eq zP5Y82ktUH#O8$CCt85a)y#V``jYqF*bZ<4_%N^~IbOp;@5XVH!{OvfosIeO2=RIz1 z3i#)cyC0*BQb2Bq+&?I{y+W#du|ywgZ)*eTfrA6HOwk}AAeFo9IRD%YB_t{JYoikY znpn?XU{G|lX`fqQ^~BXg`Z2B#r|PR*!sd~qrQIh-DWk08_Gww6Bq9nC1gJwQ7Z-1y zz%3w}%sxlP;uD!sv+Rt;+_ygp>pleu!TT3etgk_A&`%ASaV3fdh-Lz8;1`P`2o65P zqw^J=uc3zFmI(z3AsdvTN>kqRZ&ZHQ27zFm9r@}mk>3wDk7BqGQ%3PrXRh$4v{Mxs zop&(bcJDQGH3xk366J{Gb4m7BH#N3 zgy5{-DflS`Lw|G_A8RZI_uOgVRV?C3zO2AM{~7m(@$y@yVJ0i$XZ~5#L+*cKq@;sePXVUGyH0oDzii3^(yt*xafYXPSHXOp3=U%JwWysA@0<&5H_?j9~{h+qWYOX z)d6UD#p7xc@-TaxvK$%pl>rQbP6%PD%)q^%0*6dg%?uR^yw<>#E0{N{HU%jFXdm5- z5GV$ZWjeP=PteQ9VdMaoT*AK!)Smj~f6eS;H=B9qw-pK^5We zWxE<#kpzB@4|=1`hsWbw!Xl^DcX-UPy;LrsE-L7GD{2@?1MRFet@P`Uv)ZjCzbpoS zZ6rQ`K8ayiB@uRZ#VtRtEVoCI@y2NC?Z>DPav}HUhM#e)_qUwNRiliew-$jDES9DBR@A5LOE2}zOsydeYe%%@f$ z!Z7}ihEv3Kza6uCgDa;djT_yQ&%Xtx3B}nomRl7d2gHyxHOm@1KOC;JJkQ}wq6B6d zqQ9FFZeOxA$u#rhcAderm{W59w~2lTB`>2;LAL}iN0ADh^e{3@CX0hZTv+GI^~3b= zowG!?c=l+PvK7OLnlDbmJ$4A@RN@gu+feV4r<-qr%!zq*LMfp8+qr+sE&qH56z2c? z<=(UW?++ks)VjO9*`&l#PT9bm|Mq{6;(eE+Ty@0LeZM0=bOv(Tyx3vSU;}?olKmJp zGK0p;Zcy+E;9=Zf05}dIzy2%!_y6}L^sO9%e614=*dVNIm6<`RhLfK4b=5i+d7gIF zq>Kgsom;<)fdqPEB4EBOi{zh5XFa9{yp`tmrhalG9~Wt@I%qCGhp+iiFzFv-k2jg> z*jWD$g5qn$2e1oqhMMPq8lH9+8U|reD7*cGQ$V-qvj|dyo}_h2V~GxIQRhb|3-OB& zK!%8kF^38X5_EV_KSwBL6*K`S-2|)k-}Yjcw&UHwtl(mBMrtTKh)26Iz-P{tP7&*W z-_q7L^hd&&8x;p?Xr4_>7Qk5U9amc|n0L_}O??$fBa?8;!*6kAW92>CY*Z8q1lKgi z|LR@dKVWgVa6bZ_O;Z7|EjnD)B}yGN(3{TDFJ{R2<|$sy>-)V1lyw6O6HoqV^U-=8^zs`(kgQ$)Hq8 z=n}z=e1vGWdBl9Q+Up^kOUytS=TMeAT%o&;mTPIymr&EPm`0|5XJ9E!IVuJF9~E=o zKeWRFP$ao55)KYQQIWam6(~7TsL{YPWHBOPpd8zrP`mq+@^ujr0PEWF90szvUt#Ap zj3?XX39Pn{A)u$0arEoD#_ZGG`-G&eswxX)@e0`&IkJ=inLcdRhBCiQ@+d2-s>FdY z>(*Ef_ib(CE7@@$LE$0Bn-Ewmo$(X@@J&Yc|GF5r7D6l`v@vq_0+3f%(RA$Fl>YH3vCr zIsacCbGjE>LHE8(|BfF7ts^Wqzu|QdLIa3M_WeH-j<+y8mLL<;(qAgu(U5$l75aQ| zVwY(|J(++TEz!Ai{1^@HF>K#eV=^bGb}VNSbM$-fWu7v6O(U>gdwC{EWU=1W2_o@{ zQfnMcSNM>`d$Ih_YqxdocOQ0B1fp$_*3cH3TB(>!rQ0_hq;zli^0uPLm2zT+U4qUg z>t=vEJx_)ty+w}}#A#QND~$5ro%-ScwQdNzKwhAi@&(*!z_GHX=0V}zfCM0>>y2N& z74Rr?j*o^rc2b@Zec~_SFB{Y^yB{95)iw*6oiHwQ4v-*eYULAf;(pUEnvlU;)CBIi z540%Q4*I0c6kygb%4%UjppX*s#G(jYV#XWK{ZUboIm{Wvf81j2jCHS_H=+Il=#<;No!{}(#!_ypA+`EuBf(5$6N~cq-(;!O4PlPU`1YtX z#R8rRnAL|wB-Hn~4DD`4-{}oMs-;mZ3Ip=;q#2F${@ngo|4tbl`3%fZD3vZWdQw%0n&z~WAsM!5ZEW_l+(RO{~ zkkRRC6*_vj`tUUaL)U!Nd@=lE9P8^~-=f@~)!XKw6gS$-Z1GM%6s z9n!_(LV7nAJimJt8+<%qsS0URPD3ypRz#-@rv*nRHXF)+unQ1D;~ZWzoZ}0gfO1;Y zhSW*S1AFxtXMWJ3PBx~32f0LacUY1&q>O+mqKA#KYST2;Mf6!qdb+d^yq)YFN7Sd^ z+Q(-cPRGqyip-|u$9E-kWr|(^Ta@LhaZLtVF89?Weae+hJw!gg6>MgI)?F7Zs9CHX zEO*lnLzPx<@!dMpxEhC-2L<-o0|CVy=EOqY%P`CNGHk0TBe&cP4p(>=LfC{6u?7T^ z^yjjEOU2UG$GeZ}kSy6SX^flx8Z{tSqV&YSt+#TmL%uj((`o8~5d^scBHov@Do}%jpMmtJYlV zi`w(C?N^Fqd=mF7rPn{JKv~KFpWVV;WB%H6(x?%XsBIgo2_DwMJ$c))+))&$$I$YY zo52y1xObDDiW$|%-3hnXPvx3S4vqtnAyU$#(@(i$`wKO{oC~LnfO<+ii>hH8AW|Ys*ut>@ zM;}tZm@@t|UF@?FWB1UBHEE&}37DsUNm6D7zG92JEQ*N07HG3}EENGzr*v9fr=dzf z?rQ+vArnP7qKS1qfNf5p&{IFu@gprWTe`f3(K+$&Qo(!ny@W!GH(3MBd64GP^GdTr zRA)zP>#1athG<|moM{&vQosT#Nr!c5we(cLsX71&Hd{3V|I|S4L5f2eD%#a08N?s- zGVoJWTd873s$y#~1tFUqoY#BoSfiGGc5}3jWOurjH0X|6G*9w-+2lajE%f<^lRbRV z^#-~My{qBMEKLj#Z$$+z?7eE=Zoic%p9=i~o;~=$4#k&9ht9RA?wTdJPVDx|p(NS+ zROzhP{K|#jLvBPmzwb`irsi7#8a;~%+L$6EW!GA3rZPS}A zm-eR0;?i=hNe09}A8jcD0sS=5MeYd^TeA-b8{z;UNGLMrHVZVntYj8&tpPVbO}ZEe zjQw9`Kh!fXSDv7ye904PX?d$&Hl?S0K8NMmEoUlTWMtm;ld=nNRFKvmJ1va^NqW$z z?00|0*42?9w^1X6g@(rOrABjZl@oRk(eZlS>P;m+jLb3W01gb77O8HZN-Btm@Y${K zX~i%ex(tvsZ<(L8yb|WeBv3PKj4!Cr1Z$|#RJjiv&Rb8w34uz;jl)hc& zRT04WAXty4e8zp6^Fp%r3@nU{f08yOsMDXea-(t#JNmb$Nlv@Qmc%ImjqgBT&7(hj z2{kYI_59v|`lzs&O1pQxik`_KEXc>}zd$7tNb)=DrRW0&nbEvujBM|gWRcOK&)ocP za(UxTN0lCIs(4%c6!W?qYLzmtA8Ns3MKe?)1|{axoJVUSj{#ac4#rq1Bhe&e~lk;s-5+iQXZdCel-eR0rLSj(|UB$PG zFjakDKNJ78-Zw>e;?FeWSkSi!{d|3W$!jTcPf}ftJkgz`i=>@U372pt%O9L zOjd99={!fOoMFJ7qONeHK=2ofh6jvWH#3T5@H`ESNh*6<#Y(H$vcOp>ZPH$}#288{ zC!Q(%!RQi8w9~68?+%R;g5bgZT*-A=edaoYo^m?DD3BJ~PKH`CyCLV%+_gx9yvXqD zZd87Z-2%0%)q}0lB#x^)bl?=1;=*ybxJK}DnP~mYj`*_Xbw@E;#O9Rir?j*;VK=$L zwMBZ!s!6PzDZveyZ09L|W`dVnbqAM!U2WI0yt)5CW>wn0OT86Quw4WQ+OQL2yI#zb zI~=Q_8sKDoOyZ5!0xIt4Z8Zo9F9cau3g(~^a?NgU?fUO!s;?v@!iZIX>)U4o|AOb0 zgL*CLJ+MDM~nQFHEz9)w1sN6)eKl-P}MV!dx;hnE{xm)Uw z2;E+c9N⪚G~a1WysT^XC6;bLEUJhTRX5zQ-054G&bcb7fa%lh>#GDH>`Te!63ki z;28BlG#U?>!F)rBRLS9uYWDN|Nk3l4fBz7uL{U$0a9IqVhF5JFLvG{=6MuB1S(SbD z^w15Q1`nm+!&@QrlxfMTUiHq?NWuisKW0|(=nBO!*r#rO{OmN2I^4{|yMr>Q?)+uVX$ER^<>vWZ{kiv(IUmW$6m8Ke9h_v5nOy%i)SwS2 zlw(~yv(um-zb?JmcJ>Jyxokru$m~xN7@Iji!Gv_b3DGk%K7c~QM^MF{Y!T3%33now ziWohX85P&JO%Ysv^zkiDu#+Q03OWfC>7o{V&5TFG6fx@Fuxs*FVEO!(2a(g7UbY+rp9Y*Rig2J(D&5NZFj z_nFmgjWYRA4ie0Hd^kq^)D>-AU(+!2GLQi!RXzQc^=2d-yq#S=pe$A zhqqs?nz_(fEcyNE8+pPI9G#L!GNbBfU$(LDJ5cpi)vT&=PWVBZcX?=EH>EW1=~s`3 z*iLE^GV7JqAI@j4efoNhZV?)G#55MxlJBqSPFz(-4nvN2bwhws9r);Q2OBioY;mX- z0ql8haesvG#$Cr==t3mBp4C4e?w|({?`iPsM|xNqUIMb>l8OjEE8f59rF{M#X_Bsw zi!aI|Bt(^x^+><(E@}eVEsKz$0SZv?Y^82mJ!{%4Y$knFs31c37!j%QQKO#Q58a#l zY0G!-rGE~$3^TbuDxb`vMfX7$Dz%PO$9BM|=lzZK89dV{^A*QJCM-bgT=mK^5N8e| zdvO1MzI(6v)1L8r+@%dd5?Cgin0Hk4&}S>3r$`9yW|qjCe~%$|DtZV#`}>i2sSdgQ z{i82A8XfeR_wNVm;Y;ZCeG`IF_y7%L3jcn*5dQ6*;P9sV2mkk@vEbUPXZOL~V}~2O PA4rf-lsBJS-TnUn*&e}# literal 126846 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

Vvovjf=J>$R3ejgQFaJ>l_q*a~)b_8xq+ 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%0A}Iumulsha-B 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�@E_pKR%hV*6 zEdPSRBL~r_^=A7{?s%so;`%u$_NBXBgKMU#uCX~VQDehGHy9#tU*EkZ_?7?(So>(C zF_d0oc$Sj`Mi%SjO8F8@IOR5JxcDzVFEa5B57~IOH{n4*3GT-`CD*Lt8G^dWT&78eQr#c%2Vd5q31n zmY!C6-Wy9GRW0myJ3Yc8%zR^G;}u+sMResm2I-KKLPrU)m2?saZlzgxHY@yr?@UU}WlLZE4ubWAaA9_>zUa`JY^w z7jJ3`s2FHqt;yE-V<}mSeX-HWr93wq6eSN*Z~4n^b`A5ZyRPLf{F0sy1d&ppgybR)8$Qh;XQF9rnM6EnbNK54WLZ#9cNaoBCXV4)7DSgaS9uU6YHQ>k;?mh z*x(n!{)-#8`j1?ie6=pg7vW`~))_7AMO22w)xlr7=%Lj%FKDrk%*^H1povqm?wHBM ziJ*_Mp%R!o6jnwp6?6J_1x+dFBgju+dIO!$4|zqeVBekuhDvgkXm*kZR%KA zQoG4;WG1I-3&)pOtu!;O%^QGUOG$Y%gs?#tS{^@>*mT>lpw`DN4J$NeBhWhQ;dSsRlwj8b{ai2rF0TDLCa7?8d2(za;tOX?lEFtz3Lq*HEr`@Z= z6Qtrdx!zqR4^0y^?VYgTJj&LYxk4!}K1?m+|sv()0Lr#1Er;>>xImHu8 zZ;PExM!__gJv0W-oB{74G3<`|sDBZAISJQ?>TY&X9h#<*HrH^@?u6}GYyV}q^18ZC zu%+9j`@NLY9BG)TQ*+K=Y5}%-h&{CJ@i%yw9Z%~lcE`5AQOBxavURQFnEK!xCWGkX zb=UN1VcFxQ)7ozQ?f2NW9NQ$rO3HjI*K?jGBi9g zVhZDO`8jHowp_W23|5XC4Au6?@thNEwyU%}TeSIG-IlAY#HB*A6ehwU8uARUP*CBI z1<*J+rz@8pirqm~TRbO9o`wLjOublB6DYkXdgcwc67y+jD>O%MT9yvd@YMwC<8mDq z|5F|}eDlUm`5j*TYDc`KniG16r2T<%ejLYqT*s^XO+CbjWEhww)ql{@)mhYT!6FiD zf%QSme)Qmgrkh3~uK{rQykJuc13A6jd{dwsCzE#bqWh)G!TyeAQ6&QCZTZ+0n@BUh z8mh3FF4(en+>KB8{OQa2FCH-4vR}f2bUa%u^?9&#Lyx%~e4k48S{74`J9Rn?w!h2} z?-52R2$X`oWISf*YG>mKmoYMZ;`fVF!kdglRDfwD{Q5+Db+KNWP3T_`Xt3yYGe&5? zCaLfhu;q2NSn-b^9?HN`cUP)cy_M4suwUsHOua1|q4g8k8bgZA&NV#fqI2i8&~lxw zKY<6%67ejPn$9y03)ns}Z(uR>p~Lxq&m{D*NSm4v)ViNF)lyVlkBI*mRAAc3JwvZ- zd$&3DbGUdxhSS`1>)yrXWHrBi*bkFIID2F{g7o8OcwahQZH zudvg;bzAicwpp7}|K+02K6qiN_+}W~bj+6^{h*pyh$VAH2M-tVkNH42*Pk=eL96+n z8J(4PN>?M1oeEO~!wQGxgo$Y^2}4BXGa47=6Zkj)n7`RCI389C;uWVuntidO z67vfSIXr&9)JZj~W;iOGK7{Bp7xoxc%TjBMI9ptUA*?>90p8!NOg#fhOlh<@2a-%6 z$N(N)U-r->VwIAM?Qo~dR~~q1U6BH7FS81=wXoYNlj57@owPqo_Ry#s&TX=mkGSp^ zO3DSM*6Q6Y3IdOOFuyBEQo#?(kaOqXpzeU}7RL&fnd@e~kNEjxP;|R199XoJtWLV5 zZ#ei*%9CC4uneBVbqeUv^gE*kP!q&EW4E?dgkQbLTE2=_9k7M8 zTfBD!45xYDscJ4ra8TiVHbaV!fA4iKX|^L2Ni@vL{(Knx@FG$K6q&)%q9xe!@!ULo zUex}iP5k~+%whl_+fTQ7!uu>WL(Pyy5Ed10|EzY|Nhix2+}BzUe#hb_*vIpQVNKlb znr1Fg4Nbhb_~6x=U$7(KNy2aR6B`8Q$@M*tAL^Ff&)Vw3+d?Q>wRGNs6L;bhqIdR9 znqfV94Co@JSo}P#DzC5T=`A6=91k#GEAqGjug-LdK=!@kiwnV^ z!GxNhDiJ6Ej*?mf37}EAE0EvY{IfXLH(BI|9ffC>f8hbfbvXY<$713oZj2+S6w^{` z6ot|HR0R|p!5n25 z5jVF(T%)5-0aQeX$E?j@tr3DTM=rd zecf`k7GK!R=U9OGa=1ka5nIJoBfQAeiO+ylVHn8b9lkemI(b$gpbq zdunBMMAQD{j}D&M8^%-D-OH!`E_)58x0pb{gD1GG=*H}CFUr=17^BDZug43vaMf<~ z)CUF`A|rhi3jg5AW0Om*|BiU+jLWa!{&0Rm{(pc`BCO_Z%wQQAJC(s02PZzKmrvE7 zpFwVY?l>sD^`4J4%h+@r4pe8=2B88Z$TEWIC^KJA72hENDA@$Oj%R1NJAcac%HY;q zRb$qLK0_o_D5Lqj@#<~HBq>_maQohmi14E_ATekH0%n1K}T6KmGxJ`TiKGf7t@d>=;{dho0vYOE?kePJ*5h)$%AGy zIJGbWqiz`ASk+)h>1#TA*bDM#M1XM=a|3767k2O)Jdu`8%9FlIKRlcu4@~Sf{J^ih zq~Gyof9a2hMJF~7?K!%1WSY;!(87MI(#j2S>(op?rZo&DyP(t%9_Y1$6g`KCV(P(v zSH$f%V*??(_DK2d{2l576L5t;wLFd7XZDpAfRs{+9)nIjItWX}4HvJSY6?K6v&$)@ za4?YcG*S=tO;7=__z#-qX^O%FY3=8-DzUju^nr=xpI*x3fqU+Qt=J1^;5xI3Ff%Q? zwEXYU-@N>;4i^Sh`dHril;%$jw?1=$TCvE!n{LN^p;cCfMTMo7)~4QDZWg*m+Dai4 ze`XoqQ%x<4Ms=IPzo20eaCEGD%UcId@yh-i9RdwMwlh(5gn)8s4pa^dpz0YE;z6>| zxr8-k#Xr9itWpTR9BJ!`lf_DHwiz1;n-eKx47Vu{H(sC0_}(_k!f2_(41Breqvv31 ztWA_bS9t;{O{thmODH=V)y3hAIq1C=LYEA(QSK*}Cb~u~NQvpG5RBJiN^!{{&wIn; zAa}t2?()cbCh=55k(tZo$!`Ad2kb}QX3V{V`kR6BUTf?-uU60KE*)f^V=F}si@GUpY3`M_>bY-M*#QHqu-LCo+ueZ1JOd?+z>o(JSoY&c`vuDS& z??;EQRo~;wTNK&!%fE_1Lb(4>Rz4^Qd#&_(*8*32@p~j^cCJiP@+&j5yk>3>gU(O% z($8JQKC`2~w@p7nV{PwaF*9Q_nAV(N2V5|Vy29S_K_mG#*^Ye6h0Y&!9R=Sv@lLN? zQy%3rM>m-Fkp)UiiVo@iSk8>?pYA=hx72yOCL$(D&MQ{BR})c+1L^2`_IK}gACkqy zBD4abo4340Xqn`+LrGKvQFmV{^~NOFA() zV198TJmLqJQcaFgNtQo2s=!A%Kn5kybng17oAm=#Z0zv%*z<{XLZ!lj^YC!t_9$+g zpGq=DS=qpBxutPG`<-`*MrDnFb@oqbncP+JVQJ|qh8ORry}ke6Y)BXi&|@_JoQMLb zv+QU(hIC&4pu_?EVR8oV2>*GN zxnQ=O;YjXFCOI;oQd^+DVqXE9|4&^FDPhS$&I%RQACQ%k{O0e@<`m^t*8zvY&rcpK zUam7bGYwz`J51!c9{v6T)3-C1@cj_&dRFtD%)dYOVDFVehGh3|(@<{U?CgA_zxQIh zCOu6ONaEF~a-q}FXe`@@9Z}9U#sa_>zPq6}P0ZN;sl-bJA)>(P6nSK<$iihPKd(U2 z%Qh1@LLf$Eb65j42$B68WFRNUgyaZJ?*@s8EG#Y0(}?J~G(aus)nV6~(|c-lx08-K zYy5jr5o(~#lPZ-b-qc(o?8l=4wUF?)k)H1pf8GOYW5jfc2!MgD2oLX+e&F!rs^$g#tT@4a?B2J)hvUBD!!#ZdoEu{lv^^Q_9@p6ZH5*@O=?4a zpd{yP`NBR|3u$_`hR!}nM9Hx5c}Pz-V9G%Bj>m>JSHfLfQ*%N3GmV0j ziz_M%3lE^%Os=#!kxR3(kbM2v{Cek~xDUL>NM~Y~K$-vz5*Z5o^>H3PzDg)+m!chx zLsSI@unUbcG!W|P8;rmRc{4nXuc3V&OU9(f{8Di|L+atu@CTL9ONWPsJO%rE|L4o5 z`B0q^?K-kVCI%gE6>h}c!c0W1WLJmo`g}TZum3LcZf?g9K&UI{g;b%4nOlDSBJT|) z5f%pVZ%Qdic{jG_tOaQExwZ5FjPx0p=HC+C3*Lp+EK8DF4jSe18+M zb90_kt%(Tq^bbQt6U0%Dk3TZR2L}A7iho%`I)e_RxP&=0GP?jj!YW-f8N|Al+}W$Y z8`b_e)_cc9Yzdt1*B@SLvB9xAeNuS`xE%CNOp=eK#a|u_zh(b^w_pD_%T#PcQFXq6 zMLLFo84o96_|4xrkupT;e8_CY%v7bA@9sGu=ey|LRw<6P z%w!>M`{PS+_Ut>mF=0F>LZ{b~GH!1uPedhA3h>cKJnIB!a=OPz&K$WX$$tbDW|f3c`z8NmnL z&i7It3cY=UYL%F%(Jf7rChP+P;3yyc#X*N{*}bLwf}ze-UAzGt0G~zD;SCv;@slT- z_Xp>@t80DNLXTy!r(fo3Z*JohSGp7u>AeZmg2ziL)F=Rp7F^IbZ~vxT7`Pg`&hQiS zf|Xwj=$@gTe@DC$TA#K=O^Y_rBl(Y^;BdnHfEGCVyTqy6pqiis@qe!5XAW5)t1=i) zsC(j1FU^1K#idxO6`{Eg$RUf05)q z2Yic(#rVi{;A(vAtBXq?$v^oxN;Zpjw<YT~CpI!zR_UCYc z`zJ;JtnU%&`^&(bJdm+Sep!TczfWx;WQ?GKjgls>&hh$%5$eFEkdIp{=4T)Rks6^& z`R0#2 z8G}^%gaA+>SfZkQ5t5qG_jsZno38Fmy?Kj1_e;=?NF(i#%Uj-?yi$F2p?0{ZuGHGgP8B9g$O$CzLWi0i8wxAdmRp9{ToP{Tw=#ZO1IGP@|tlE*1#H^CU0r+|1&bejsYmjt>Fs_OUk`x+26}R z-5MusytL;vq5$|{<}npw)`j{XfUGs2o?5?-v%BY_g6MQ|tqw-O<3L2PBGg1s~9D?`ZMyEiDfDdOpMT2UU>y zexq^}JqY`_;?u^0>H2kqb31QciCr{7)Nf2)s><9q{okqaO`N0^7o&f_!x8#0@g`Wz zQueKS-4&_4y`Yv^->q=}i>Ov`5}kowKktQ7n!H-y zAdg>zpeI2xOhA`$U?UKsoaWu;{2FLNelpshB?LZ394=x&3fnl>56@HL^W1MDr*>eR zu9H=36Gb3RgdC;EME6R!>E7Xad4Yf z|7(E&tZUdy63cnYECn(13KxMMu@k3N9K`RZF<9ppLp|F{Hg{-VBQyKpi>B#RSelrh za1GA73oD6_l&Z)qMlAPmRGC=5W0-tx-YaORN?ucJ9+(SbX%3c6=#`cq;3U5%7S2OA~hb}E8t2EW81mOL@ zg*aOz>n>@KEi_;Qan-1419*Mqe8NR72Jrsi?&z5YYpyjfHH_euqkl@M*8yUUd+XhN zT)i~*kMtG;99zxd{o56W@r-9Vjz12z9$B>4CfS4y%}|#3^sF@X=&z6m`?A_U4XrCZ zeAuoa;U%XguM4@Bp^;eHarA-{%2vdB$Hl@=Vg9!bwY{Z&Mjl~;$K~?8a4K=XV>%UK zf{on>c1;yun*A!eVOISEjda5?91s*%%YIzFKls7mCk6}l-t&e_^bbKZR^asB<*#T1 zB9M~v9r|puDNXUc}3oX}5#!k0UFD@!}jqcFG3 zqgMqqltlV(IZcxDohgvQ+>dUuV;(h3^?%y${PErY8mca$NSkBnx%2!1@$)C%Hwu$S zZ{G=6KetRFYwW4R@+|Kkx4h63?9Oj4Qm%TF(Ji#K@O> zMXff(NeJM1%rN@26@2v4asb0Z_Q_e&bC;5rJZY_}d4(r*&Q7iK3o1~PyJI3T{;s(K zB|GISs(-X0D@b$5q#^J$Be^npe78P=2c&jpi}Hk#p`6l|*>-8;Pd?57nax1W>EB`J zOg%ZC+Lqp?E5=B*!6_-~QsFlP!}u*9kB^SGo9=hs;TEv)-rl52y+F8kS*|*Qiu5yM zAL70MoC2*T=Isw{%l))JQPrrS04^4U*X$h5qoiJi-t|Toi_P)Pe$I-^2vw$BR4>_= z_1;#DrA%Xly?TQ4uUk_RGa^F;*0A?_BkYiYk7B3-u(5%7aTK*uD|rCrTNZ5!r6W}9 zLqWC$&dnDI6t&QN6^iy`05uqYyKvb~z{>Sd5OQwIPtZWLjx()gj|Iezj?1+m0q(FA z-E-Z>pGiOA&>2+WB#={i@i`HGMaRyGV;$p7^vGl@Qg;sR_8KDmYO56Z_$()G}<|2x$XkP zysGJSJ|ciOm(p9WKHLNRsjPy~irimb)(QXbSGT%6#VT!9j z51Qm=+v1y&l5sRQAhOg4t#Gwyoy`V*nbqE7!CKO$f-(0~qLaNgwz*D?dY-uzTqd+fb2zddrcR;{Ydael#%hPLg4!xAlD>)C-I@eq!;nc;#G7}lN)rIFR zTwQf_vwUcb#QAPLb?p9}q8oSC!=I-y`1g6yREUYFZPBM8(bjOhp=#XAk>WaYuLYNw zpuSk~h443Tg+ng})pidz<7BGw=hhZsjfxLt1%5d`*=;_gC^2gnWjnH_P24gKC%L9* z+Qmk}i142QpzH5Tb-X|bV-_0PS2A!#iI;y8F5-Fhf;^zX)#NSSs}fZ!Bvj6XH-t4> z_Q_@?l&_0Feq?x%sFBTS$tjj*|!n^qrlQwS3=1s7e067%X&X&$cwb)ej zWh+mEFRtZ>PH3l;+^hzQlFN8zT%VqWp=%g}poESnV%bs?q;jNoo*(NP6yEvn$EfVs z=L<5g`qP=6CK6z}?*A%j`4gp)oq4-;aCU)j-}c2uFG77!@37tLbsL{)oV{K(6x~w$ zE)@>HU?nlk$z`brhjMCiu>bcTiL^vnx;L}OU)etgH82PTQ!eoFx*u6fmot8G#Rl(* z%_XmMo0Xwbj4r@eM8sO(UTRBip#^Zxh)n4>Ifhh?IRF3Yme$ryf0lv`E=9Rc!1N!L`%Nj9i zc{wG<$y>TK(GoNaUq8*0rHN}hVRa5)=rUiI2DF0PYp)`reyax?SvFIbPe+L{dNif; zdSK9+i1VOZseQ-i>Z@DUbWk~LOzX7u_|iFeZWr&}$AqW?Mggz0$ZJV zqt~HREi0@9vJ*R=sNd`e+gn+WXFlnr8B6Irb~FmDja?}uz0Bk>{BeC7-drk@a_{@G z#eI*#2JH3y&BbR(Oxl!mLBgMoaawJ(eXG9hDAT|GRv!N#F~p>X*k?&Si+#8KEoBj= z)gA-x)Z9gSVmWn`c)N3l>tz?mB7Ub}TMftAtabIo%I_dD1HbVzD3r%;_^$-1Ztg@; zOxQWZx5|Im08S`eW5WK1!Lt~w;Zd0}Rmbo;H7W2RE0+iYTAw^n(iNcMV6TzvB3e1`aYe|>|BooQc zhWm1`$ybmi?R;e&6FB`_v>MU20!Mad8pH{AYqeiANQ#}pcGC#nxf{&(Dy3#=0%iYO z3&4TUKk{yw#dBkyTkk_ZuKEB>5`Hy&aHAT5OMO95LZ1$plA(N& zsI|ttW6bN8_-ea&0&z8;*H}>gvxb}MXDL_}CV@+^t1y0YPf4px_=Mn39Nbvj9}Lmw zCR3+l)FJ{Dr(Orpwkj-5%VwNiB%_0h>!$()i2OSb*rFSNV#RND($Fi1;0^rZHTl`l z#am~&L3Kfs$>UdQTe^18Nb1}8r8}cM%tO}=rc|q^N5mr@M0g_}ZnU<`{Xvj)rbEtR zuQBrYE?-P^t(T#?(_Wy;y!1I}izjt%%=Xo*FI>liH4qpQfGHMDNev(wvn8ViDre_? zI^=nnE(t_Mnv%{J&(B^c^W@JE;C$Z8?DRV@u-`DS$DOJlZGTXBxZ3}zLALC7`@7e; zv$d7GrIkC9n55SD#L^aCk@j^nH}5VU0oRKq_w+Wm1319u{@}Er6HDR#3mH(idl{`? z4aQWTbC0vlUjGD&GRC`qQvYRz7lApq!BXulV%j=tPT15R&bOAKSR~DefONcexq1|l zAjB)Jz%p91#0OsFUIKQ$v4f=VFm}^xFnG3Y%xLdc=!KxHu-eT9pK8LV$cv;y_Ph{wS z2G)#^9ExrVTX6H~^L33$jB#fx(_R39!j2|4s6NJvme}<1^d#WmzjDQrPigC_=C@hQ z1ejNyg4oaPJJZKZVTU&5eR8@@mZMxMo!V^PigO{Pm z`jDsv$_ks#8dI&e5~)}@IB@o>xfwr4PmZPZ8qS4bL(-KL^ENL&^;HB$yY5feTwGIh zeT|sZH_zm8w|)u*33|?Fx~Tpc&R^if* zKB8Yl9Z!_`ELBb3g}lgIYV|T%PuFW90cSSzUj}%zpxo{j|JyYx((frIpsfw|S$Iz^ zCij&x1qi$Op|cG3b*4i(J2QuxXC> z7jAJbY+FwAqdhzjcL<$ZY=(_&^u$T8C`QCGsM@9?%f6k;t&(Kl=|5u9X?!EIi9DVO z;c+ih&d+Eykr2I5C&*fCFq1{OoQyYQ9l%_|ZnS!}nC<#gwgQp4b(14dOu3zb_I1gH zdj(VSO|)=vM(r1`FJZIcjZ1%@?{9<@V}sDdDz1kgq96h?V~>v4MgQ)wA%3|h!W!w1 zCXe+uM*qFU5k>N4&mkSc9p6~2`JUfNYn}}7U2HOd#*QhSx21`oOF%kb`vm3WC?ys1 z8xZL++xFdgPhqL$9{3f0YJtq$84-3fH`+4N?D%P@-BF=3tFn?9-oHbFi;rof!Nk!h zcziNFiHgZn^`~W>r^a&GoptbK6xRKTV5BBvea)sNq*Rq2D|p3t0w0@{278ZmWxlZM zB5sc6x?Gi3Eui1`gN;GrL_tK`bruQgD^S_uEl@zuv0pM3? zJ#XjJeXb*g7wAEMptOTs>FD|gq-K2gaaLYtiCs{K6aI0Yrh!76PicVLAZ)`qyGjkY z(r83~;M=e%DwS1a%x}~#v(LrTD568>OV4su!#UKCm)&vl?Sj^?Io|?(QAdO`pdmIW z)JrF_aiu^xIx63C3Y0BaJNxua_|N$auX@GO%)pY*P+@=s=AQoQjCF6)U$&^s4n%+T z(SU8AE5rVbSlkTCgLoy{IKlFJof}i3;a7lzLqB`7F1PLMP+td$(oqW2!&RkrSv{Mn z=?*Ec&(m=r*TbBC3km*0%OQ;XBqo(6srA%v36{jdNbmLI@hb)XNsqvt=^veRROMpt zwIuG^f~Y;58DV#a%{99>_p|kblivt&c0u-S7LO56C0n&uKsFNP?C-@VZ<7AGC5|&K zPf@|1k8jY%m6#7EQ-#G>h#N-NU6!luOo_r4l3h*= z&I2ar1S40lu%W+)$Od}Cke4|X2 z@G0VD_i;NTHz18T&eiw==8mI>(^hhyzfSzg4yO{o3<3r>(F7{LIR+=_$)$ zUK_AVk_5=9>>qkJ=Q0I%v8LW}UHw$dQ?|6w!#4I2pStWYAEc)6qu5c8B=nr5kJ3ne?2=AY^E$r;i4j zE`u`h9pCETbXxaMocKOVlotrRTe)htR=)e_vf!~R?b2#ct(x&j-zv$-(D^us?r6@u zLL+6=m*)$-%>3!}yeKk`B=0!`)}x`W)S+CEb0t!E<)Y<3{XWSkIG7Q%nUq zso(nt?J6P{BSrI-#bUm%?hAp))UEk=F(@dk)*5-gv3=HbSSdhinzuj4S+Ct~#&)8& zsJ-3lcf^zJm7c0mL}*;BSYpxAv>;=Bbe_znxAbd?AIwW>UoXJ8@a3}=omk;mi9WO6 z;bCNp%HjOl0sS4>2b{JI=P3GY<>nMWiv9U0H@q2_k|X)8Y-i)ywPMxV0rnS6Km*Pqqxix3eoG;lj^2mQhI zZ$g%GYfuLajBTr3wjhKW<9A?oA3o9s@q@mZ=s5@*?5^)Ue<21^X1-@7iO;?nncfrF zz&6Y3?$O>XxEM}Sudzu@awz_kYJAP2<)+$z8Ye#V)S0smT%}@v;$3jJ(7Cqa#B!UZ zKz6@4^R%W*oq;V~&@)*doS2ThPmna(pk|_f9Xj^hD$a|obMUy;TDx8Ouz&G~0?D08 z%Xc`^7@ryX@Fm>$B3_Ey?Rqs{C(2yz9q6$e5u|_zgHWQ9q1L!0lUIM_>a-Z-GETy9 z>Iz*!RZt0df|fC<+@mct2ad;lm}P!e%~yuCoLNZvo8RT)iUhRjn{R=COMAT52A0YM%AIFpvc&(yc$uEr83&AdxR*={-=}&}$5`8U+JS9m~4Yl=v;j6meov zyl$V@v#sqHm-aws5$ZvM=&Hm}v&lFGF34`rDq=yiy8i^3PMN6RZSitJlD^1X|Sv>d2*hCi$KC8w5suglwm$4>ZNNC3O^r95zE+piKbzY{ZJ!A-|zFYJs?7bYwK4NW8(|5zFr|V!8}kTjy8&E+@NJlr%aZQ3?6hGqujO8R@BT zzskh?nz;!-(m|n(U#0W$WH!|k_`E>EYvw0IT)sW#OwDMNJ<98vh;#|&DE>m;B)V4_ zvOYC89&M{H$@IRyXjGuwG>^2J^gi!hQ4!&}Uut%EH&U8Bcr?7I{L6*$*)He0H_4C< z%*h|S^G27V7?V`m+*4HxXje2KAkac^AqUeZW+sJOI(@W8-Bv9)i8(oU`)0Llzq zT$xGwD-Vz-d=AS$k|r(Vbt@#j(w(2K zyY2okeNOe9Dc|-h0)5T^6a)5Tzy)&@sYp}UkYF#^ayke8iZvc>t_myq??*Wn%?6MC z@9!75UkE{!X$<8YW2VQ|cEE&zpkefv!BE>*hH~N<`$)i;yqgruB#_mg z#f6~P@pRt}R?f?UoxwD(fB0w$`<{khfgg-(@l>$GUS3SXPlT&~y-p_8SMKS}nOBp! z?MDNw{n(O6>gKrnp3x?V6V6IFwv45I{voeU^oKhTC3rD?Wch4mXn&cxPDfq#2!0b1mWQ)2QBh==lQZi z7IvNnRIA-%R`+{@qgF5md1}z&3|Fl9PL|3z$7^4FqHDKBhsA8kOj*!kih(=FFc+y; z6YsocVxu3J$D7n9W5me%#*c2*lrehH*B3}qGWk%9MRIydlx)2t_t}a>mwauaQ+q|I ze!QJWvU?X&7_YbYUg*xrvZaYtNBdGC3LC4CZzMh>m@^XaUl?umb#puk{FUQlqZ?IhMVl$4WqLY$C zElF8}Pq+8=S$~m5W(@JxJLmb@;s4wO_$C}J$@t_oUJULhK0B+%oWb>O-K)ISQT3&w z114x4a7(Mni7lCADP$_B1#cq9J z@CWvbgtGbB`F;_5le=PsQn2n9C>}{AmE-ZnU%DI#&@d0ynvyt3=qX-ua(ZFTyu9ju z`}-h#8Juh#K}@1T8B?}U)#x*lr_gux;GoJPGU*?qqhv+6T4$c$IR@vS)CJjJt#7FL za(C)~?P`}n_WZY2WycN`P3)E7^Dw^rpGevdrp0^Bd++WbOv@!tPKRqnrv{lxyFX5R z7o}dZ+F5*z9i*)t8Gs|kgEeFp>=iZ0wG(#K7nX&^mao1c*FnrP-5k|#OE1{FE{9L~ zNN<0_3Wk2QFpVRX5{?S_2Hd_jb2L|N@l{g4^lc|iA}s60+g0F{mhI}XKKKLm^;D_& zUZ~oBa`sKt#_4zge|%9K9^(_VelzDWwphV8l<~Rr>ZyDqfzhoH$rml6Z)$&(1s&6+ zLiRVAB=EB&-uOx9dD8b+h(=W6D!+5nIN}lGw^`=Z0H5xlwE4F3B~7l5cQ#Hn_kLat z$DiD`C+ruoN#v%$ef#3lVWuNBUXLtcz|%Df5QxvH(Apsn&0eg-fBmy$?*jXQN;d!r0t;hN)#{ zsCTLdM{DkR%J0J$}khgDE_(mSxbZ539zoC-TXz2!vX_vwj;u-abCH- zMT+WLUf2*pwmb7nfNwS#Nj^H@#k{ET#BKZ|1ao-EqYArF6W!Tw?L}ifbswcD^7|b@ zY)tc5wY!A+_q{J&C42qo66b7!&g|&Hbhg&u?+t3^&5LFVB-aQlQl&&;*o{Exp0m1- zfT84u`2CX;I7(dqsgvIZuh#r#KyYr13MI!HW*H^T6sR#-^;yqP=Xw@;=Sp}}I+L;& z8yt~-+Fd<02X5sh`BQQZVOw>KA+5E~D)cb~uU8G>4G;^I!uH?6RGd+T*2BE{V{-6tukBRi%Y{J1Ka7esw$fLO1QGRie=|=8~SThvoQlOgxn! zW7FA`c`<%PUklIDO@t+ci-7l_Pob>Xs`iIq6`wX~B2P`N}p?2~{+MnO7C;8@91-zT!n(thaX z-sI}=y-A(n)?j%uF5tgIR@_DI*_w>hUI#GvBg!Y{1>i$z;pO%$$? zocSBbGYOt!xEjb9Ng{_9L|V@4ZGgr1!O?LQoK%1rKy!7g_o(}Xy{{!Xb+?h==B1=j zeqswlX6cmi#0c(pI?|=u3P9*$r#ecrNys&!)$_+jOmSgb#-KZ!~J@n=wP&_%w`RAHk zQWzV%?jO&MB3SJt>`r_e%??BVNHo&~#x&FDittZ1JkVu|{dta#+Ay z`KGm7FXa<`JFT}%fzZrnmi16>*|*E5ZuID%UO)B>%zuyKJ&Mnp5r%1dDdcmn``(Ef ze(u%y!lOP_ZPhwjxHFGiM0%k-9}adWsJZ_Nlqr9MJ-N)75BpS2imws6hxhD|ERX1hWB!aM!8Q$%`ZJiOIx@opH<;3 z6hA=JMb_HIPF_1LHOxh?b@#x~<^~~agxR2Fk_Mg7*ysDKQ`Lt>3Ar8HmTr^9%99=) zxf+~b{MQQFbG_D^+N8`uu;vL=}>#}GB-8V z5V5Cj=3TY25r6&9pJ}V^_+EuG(rX35K=lnnYc_@K#g5b2UHF^MyTg`AVW&zpb9^xc ztE3#jBjY&Au$D35z;%;=fS!Yl(Mmk9a38|QP_roxH^ZD25G=V)Si1{O-d~1V#Me55B;`+gCPHsh{WbVXM~Ua%Xva>q+MS0Z zWC}9#is;{fcNwyYrqZN~Xti@rpH|;8Hm(CUaHi7L0Ji&O1JiR{?YeI`e_P7eTx&2T z$yGlDJ}y61f0;`_n4J3X6PmxxT_U}gXZ)_k_D_DvCYDY)aZfp6ND3gALil!IoUDqK zxMvA1aPBqg59c=I-jNMpnw~P`6L1WT)hTPa+?7ZifFN>4Rz2!zx0#mqPqqj@6FrD$ z@Kp*I;R#F!lMR8n*zb;DJ*4N&IR~$8j5Ugpw9la2FpSiv-lf4Lw|LyY%?o+$`sSO^ zaaKsrnyDi_Idip^2q%Cs=%o94F~~!Y?#-H=HDZ$T>+9>gm}o$x$TL0m<0v-$WpAbV zPRG|hDY1y-vIjZ4mVmBz;Gt1xAqK`uMOw*onU_0-Qj0nn%?!Llz(k|y$wN)nWDc1p zWR9E1%Xcg~n7**G%JBtJpUVd1T0KoDQeW1Tmdcp->Fbi=CH+cdDQ!8uor<@$;R^Mi=%u?T}dcPaT@A zHA{xKNnk#*A*R>a>P8q5Gd9sp62*K17g#yg=FeN$x1Eah9Robl8?!F{Sr)R~SNprV>ge1>@R&SyBQ zQwTK1C(i~K`q@UiygyzR^5azmufdm5`=<;iRW($Yp8l-0sW%dNVzC2koPj+2H0ev0 z>)$l0OopBWLC~h`P1=6hq5$wn}{!H0pX zkz_g6%#U1`{1;iJg1cGtVeujQwRH{KOVT>0kEPxrl=D8mo9bcJ{`EtCoxb_#+glYv z_cbl9I<@?bx;a2AWs{9A^qIzWAFpJ1pE!qNBqcDz1)=SwHBCj zHgMGaGGWI%)VstZR=wL*b6c zky(3wP+BRyP|g-+H<#?|O{#)ZnJ z0P4B#%<`opMZWa)bws=MIy{_Evd%2x*col-ieP;{m@>}<0Ph=Wo#*(Hx^3g==i4iu z-~*r=S|djvk_SnleAZL6lfM>Gq|=OjM|*yK1(n^h!1L=C9%RArqK6HQ0r!o~trWLD zX~guW;mVL~HV`7Af;_N@)2S~XtLmZc+UJYPn{F8&k z9@N;?b?x&y6w3!HA8ygr*biq$bY9#5T(XWu|9Fqzci$SV12H;CihF&N$BRbB<<5q> zum(A92m}qP`1xK7lqIb(#&N35WiItP&e_+ktbVP4A3Cr6Fp9qK84IJMrS~}4PL+sl z)c9}a#nj5$Ld{b+x5AQFUYxYwZ{Zsbv-7u9wNQE|i~v!tMLXRnz2wnA<>hAQ%BG`a zp5cPJS-vQ9bqIspkz6^8KxMyAGxzc3a% zmDBuL_;PujK6zkIM}$8e#re?zzdt+cg;Sy+O*`8T(VK)(Wl%G;f9pmZh>m^ z4TtcV{Yu8gpp*02@bTQN2!z;;y(-KG&b5fx4>mEcSK`-iHZ5^|{&N4a!d08{z&?)8 z7cAn02goFzCJ4cv{!HM@iWIu79&y=k>0om_Oz~FZ1cu%qi@Lj2xzOYU+fKZ#(F_KE zyPA#bfRcI}ggqz+E$LQ}1#zjjxSZhCk>Z17k+R~-cM z#Egpm%q>t_b;tdU%E~d*CDs7|(2>xg>BU}L^ef-LnCrNJ*9EniWB^mj#rvn$r76kn zA@4jm$$Z@V&p~v+Op4^&~^SD)N3YQ^22O}-Ls0c#eC_-PuwKRvp>d)rU z*Mm9Ay~!BB9YTXuDlq$Ct*uOUVFXg@s=qocMgjNzo-p#tb7kwf^(Q3v zilzY!6*0$4<`3idA5YCJ82f)WFxwB~atdsXY;B&MUOC6b-kffhJD=z%gML2fdwA~B zq+Uc1?rL88`|iu76wGCiS+;m!tb-BOEJKJl&S)gz>v^WA_!?Fr66jxFwZ>EY2jPW! z16Yp5qGF2I!%M0kn!Wt?!&%bL5-gz!k^n@{?gg4KN&8<;#D8SURX7V+&cY63YX=h7 z5Qm%RZ>Jft?=$X&FiA^BrFVFo6;7qzX7Y4p{{Cx=k7n>A)ip>8_-xf0$I1FUBOyCn zW1{V`%67dI2bvL+6R29{`sIa|5j!5h0FQMmrbvvrNe@c9HCtlp{bug$sEk0hO7pFF zo^Gq)MelUd3QJ@v+ummj4wnnOViFk(#sWE8XlNhH7ZKZn;vkt>0;n(1OyLF?eH+^I zX{lv+g)}IUU8;5-46^>S9n9usYLN zpk(bg60Yve_}{no#F?onGZ*v^$~;)q6)S0Y6==UfBq*LZB+O7l98O7r^9d#{qb)?iu9rfM}EW#egvE3ZN0{ zw@yhj=6|U;F5Fr{EF$%NsZJHnBrk_R&=)S^V)Yi3*;LLOmWeP~DV+D3dY{3bDj&mc z=j`GX`ca2ARbFs725QstKAyqpqo+Mm#t0`#rZokCV!ye8>rN-+VAq{8gi*GhoWI^A z9HGOXTvo|9^r{XoxElwxXsGZTk^;eftegQ|oXg{vP%+$iGknVg`3i~YtFBAMgM$er z(@oy)&l`|yfHD2 zLb`@_g5dP#O#%?KBhI`Hq9)|{RyAs(sqFFM#TT6?rFv=Vnpa2=k*L;<*fqD8X{$dc zMHrpo*=JkXSf+ctnhau!R(rW7%*LChM&Zhv|#*VR-~?$7PmIVpfvo* za(!O)vf{X9GqiOIAKjpJinD#h_2M1rin!PrTYFtWB@Tj{bA)-&itmE-bZ5NVia4m~o*r{_5v<6>#%6F@ z($x~*(nRyU{q6I@Au9p3qWQcL>MMY4T^l8=KgXKq;b09Sh^V6|!{$}bOpQ>{l6Z04 zB;gvwWL>svQG1c9c9EQbeS?d_xy{I1ExQh}s6Oaqy;(@^zm2uDY`TuzF%N7Wa9BC& z*()dpk32t1beihP;9W{^b3+f_PcwATznXC)Bp_t5szOOdN72hMwze$*M%O?7yzBx22@XO+5d1+75W> zi8^+=fMSm7O)na<#G#w!L^Oa}C<}4dH95^PQoyqQnw%FOqN{YQrPVEU2&0fZl=7LK z80=-@OlJ&3gT0AyJLlEP3erG}OpFObgf+1e=aerk zc^e)D;dilze6G~_qy=g~zDy*|n?WkRMhq(lD(sfvHD`l8A}b9d;|p?>jzpy>0%qUm zZC&70s-XK&u=WmVIfkZ`C(Ag(-anKDVMYWL-hqStl|h3&EiEHex`dAF2XoKcX0<1$ zJDo{=_s}gP!5IR2t`JrcO3iy;syGT2a-Qveme^bfu#@I+gS9Wf!R2e}eU?c2sb|y@ zfS}JEQd{*AyeoafNXS@pC$eHxe;^@%BS03Rxx(2sJNfc=DTW1!fT zYoea6iSOEgj>IEKR&UwF#Xq~KB}Nw0l9rBT$rkDJ;EhcbgZ$QcBMLl14d+!9s}Gg1DpW5(?mbq{Z>z{{qyCYcGD2c3-hHtzIy z@Jh?5df1I3m^1ttPJ9qvTkj_PSC%T@kB}Pp_u~eo#{YuVDAh-JSHl!anf|{{yr6&~ XWpC!_?~8%m9RY~4mQt01W$6C^%{Lcn diff --git a/app/artifacts/patient_appointment_density/appointments_1366x768.png b/app/artifacts/patient_appointment_density/appointments_1366x768.png index f927c4fa3388d9cfc9e3cce6a1a5ee640850fb10..1a435e4c80a486b171c3b58d60abdf41806ea62d 100644 GIT binary patch literal 167195 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/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%0DABQ4@T#l8387Um8KQPj&?0~s52hO8 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

_Czni$WA(|1#3y%GoPw3n2I$KP4T##H-lk>dW} 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

Sp(wprD?@_<^a9R26F%Rhkw;(a0(b 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%0Ald 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

$xGlrwwyPGAGMtlh201_-*{>uNamvEj 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 diff --git a/app/artifacts/patient_appointment_density/patients_1024x640.png b/app/artifacts/patient_appointment_density/patients_1024x640.png index bec10d926375361d346bb8d5f8773959d3a99083..a2e433bdb0ddfcab34bf101573e6903ef60e88ab 100644 GIT binary patch literal 119414 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�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�leJ{BTT(zh%F|>% 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 diff --git a/app/artifacts/patient_appointment_density/patients_1366x768.png b/app/artifacts/patient_appointment_density/patients_1366x768.png index 9a8e0100da37552bfe1566f099273c3ae19ae988..d74ac64569e55073a13452c59d8c06cd7d380223 100644 GIT binary patch literal 168588 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

E`j;#8y^@X;t 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

XcP>7bZ*K1yVVUIT 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

=`&jt`3~Bk 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 literal 170917 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

@fa&N*`c~ht6xGY4~u(4 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 LEyY54i)a4<>5CAxCeK4ZGwA$C->fW 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⋙NI=jM6VfR0iSa#52Z3C+V{tA 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

?gT|FOd^uyBN-*j0kN1`I%C6#0&1Kph{bZ66>K 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

OTt9|sP6&dqzV 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

sC|EN{`S&Q zNM`n=hFXF$n)Z5^-MfzWWQ(*2Cc>HYFEgn_Vn*Lh><-uw!4#bambo-7|AN-mZGWgl z+yzg(9I~L>{@$EtD*bLFS|Nt+L*a$x=?4AhVuyq9icynE;v!KmP(%kAuShLCDNX~q zPx7t)VoJxV*?(ssYq}+rlfCfSTK3bA!a=&iQU3U07uD#@p5snZoK)HnWo^T%5Ji(8 zXwF**i$SFlB?>2-1hkdn4#PyY)qk(bXRH26D94o?2Y#;pmk>3}bH&pZVpmD-=Lie3 zRNMESo9fM7f_WX2|1o3rjjg-5EmwHDD$BT_5+rN1@UsmutJDjIHq zb#s5W=@Yx)ls*Ok`r0H3Fj?b^OPQBtenkC|a(0nm?g$x;kG)>|-$shp0`KsRtL*W2 z)XG0={D(@eI8uP(CE|^|{hdGrkskC@6*EW3>xbyB|G_fXmUG1*x4ZKP%|^V!Xqo!) zBo0v#0BbyfhP@_EQa6GnAO3uON>5FjC!w3cOPLCENAjoGZ+dyE_xjR4q z&DZS+pYJ37jA4Dw%2;I~A2VU}`teV^5TYE{isIzpBIFwul$dNGfuK=8;wfQfKd z?|6$(6o)24+*=SKzoR^ivSDL4_>`C2HM`t>p))32b%?` z7wPpp677V+CrN~-Z=NWg4Bn4%VANa9;rtIveqd@kr>|vWg(KRYp(8BD0F@Oi6V8g} zLSs+ZClad@x)_t0Gr>_IAdE*LyLh~g%l{r94>H(S>y;t|ArhQbYf?Rhpi{5tivSCU zFSM=(IGyYbVG2Wu#aUrG+L8EggahK63(`3Z*S8`tDWG~W7XTPQTGsp(g&vbOBTM7I zJ|nzU8u&9@dQ{k+1mtt?5KO8=%s6(Z=d^rEn=%VNygn~L~S z*3?-^?+{-?;Ck0{K%h&6O9D@Xfk2<(Mh-QhX(fqNCis0^Xo6Xv1x{Fek>>g?2U@O~ zHrcN}uCRfW_yQvB-@6=twYb;gLJD7|N8+sk8NNqenom0%6nF}tr)B~ZOAY&sy0wg+MABjA>m#~h3@KTM1()fi{lul~-2;`^=STDNEq23?Z&j90 zv#F(?8lG~E$?qf^tI!bmSYaa7ZezduENGI#-UO=#@r;wX-h)L?}59Y<-&M1$={c0>ey1r6Llq))K}gKz>qX#NzhVlx#(eQPaSN&89!+ zJRoS2?~RGXu`w&HrZ9H5y4lfbrfNn zD+_?zW&Ci9=B+z_8o+aSHOexkCFx%*fKcVf+X1xD#)`~}Kq#U2vG9Cylu%_&jxp|N zqxHRX7Ua8-{bPW)w-nr~y7Y9swxF~vflXnv?ikC+Xnv@5ok00zpToyW62BnZ4^8?L zK#}1S3tbBr6?RX|M+rt`DLjIN&r-<2bx~E^O0!fI#P}`E3+YHxZ_m);7`VDaQX?$? zl1K+YKB3Qtog&vPh_TDbGW@u01#xBH@b9F^r-SJYXlUa5RdNI$#=PZH1@6W&83o40$Y}L6*^GkR3#ae%52(X>U+I zmIOdMrV>87G@-!71uIWcVnm!*Z@kDi*i9+lF6c^d7+t+;>K^bMQ=x zrt@rZ4Fjo9{tM>qsq-uWc%(2 znc3!}UU4bq5VnQd$k3X zLJOYYlmaU>7uLLodh;)JisfCbX)IgMyQ;=f1BgG+uf~g?;oHr&?~k*#TzDE*Pt}}G zia$m5-$>NPQUC5gntp1sOX*_78SR%}`e3E}P?kHIWw{V@GnB`KA;E!*xxc(UnYTUL zP{m(ZG*&X-WIcPz`F*KwEoB?={^>E8nWdoV!nX@pWqZ@Ab+zSy$@exM{9*KUT``=1 zx{Q(Znq(OHFJOK7pmBOSoOdL2-gZA*pEqPgHY8}X)7jop@9B1ReSIJqY@)L@D&L~X zX7c4@2OH^rMP%CJMn8cdKrA&9ktVq2sM>15ih&*<45DRA_--FAz}Z{Cszp6&_Wx1! zj?rzZ@x z*vH0{^3Xq=|J`j_6FDa^sNySxB@{wzh5H9~gb;Z0{sorib=t^}ml15*Fe*B>?;}

{%X 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%0A*jzAM!ljvD))k_ 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

{Bo5ONA1{rmsWr6;>xJ) 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�#A>A@$JoG%2qO5X!rTz*H=Ncgu&g}fM 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⩔|!_2-$K&>vwqAJ<(#Cj!V9!h<2=b2DphYauR(uc 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℘mIo6rZ@l>A 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 literal 94154 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 VdD}V$^YUAZ2uQxpf2H;De*tD{mIeR- diff --git a/app/artifacts/subwindow_exact/prescription_detail_920x780.png b/app/artifacts/subwindow_exact/prescription_detail_920x780.png index c0143bd85281bc623fb7a72ea216f4bfceb60915..029dd3ca95ed47b704a512c696969c8f9c99a125 100644 GIT binary patch literal 68735 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ℑ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⁡C3KnYq(+ED+{7eFK# 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%0D!r0hLSxAu$9A2W5N&Jju2 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 OR7cZ5qe%T((0>4^fKrP9 literal 75043 zcmb5W1yEdD*DcD45`r}vBoLb5?hXkw?(PuWf=dUFVZlOhcemg{JGi^MySu|%obUUq z?tS&@)_qh_yL<1|yO-@b=NNO$4p5L2M?)b*K|(@8lazodAt6210sr5TAAvKxTiJu) z@WM_)(-8>?z2)KmpGZ1%A|#|YNRqJkDxVT|X5l(G;zZ96)@_RI#BCovLZLO>uRkYo z->-+B*#zmPm$ZDPEP>1J2sA{sFqQ<@dY`$d>ZKsR;JoI8YJ!jc)494nxwr{~qPFM^hgE<)( zbpJ{Oe1A*5pb)gI@lQ#MY1itSQf|fvy2qfM54u*QpuUz?&AYc0UvmDE3q!GxzrV$_ z7p_*yrQWD{_{K%$gFzXx$fP1nW+mlqZ+ztM3Gd>PLjF8-QV{KHQ-8*wxy%tSx*|G>E; zK7|(HPX*99cWgCOTa;Rr?Rs?ZD*3w5qgpky3?fbXX?#gDALN(bS8sS3Q&0=cFoyTB}Vy_p^1b z-L0*eW}$mxJfs31#Ds*F76ylt&MtPp&yQ%GPq!)R@FF!r{=QV$l3L;80 zUu+D9Lzw#`XzYovsh~$5y_yQE#rN=c?`S#r+)O8?F89XNpoLNK)%VA2+EAI{R zBI6CC`yI+kOdH;*f@Mqj@S6LRzrWl0R;);p5ISk63hnjjHXSDN(N;}08VY=8#^jIt z<`J%!(cHP?h5rEj=1&}l)mVWhxgYc1#3435lb+l0nk)Hu4 zZ#>ubOfGpc8ynlPssbkDQZ9i$y8G+buiep1>)UKais`?E_ba-g@kFUi1a&1^KFg>KC?y7VBmDWHFkjx;O95Z2z@bg|@f)r+6p{ zDUaL7gOo4y-Fs8@e*Vue2s`W(vzLE;b-SSxd0aY>-oNk|$a8Jw+z*In8ROxI)UBm( zxq7vJnV();QC6tf$zQANHS@~Kq!V+nf^SnP;J{U3EgWA8k=c6uTMg{J4_}`=dVha+ z`zmasUx?{9@9eepm+P}#!~r63cdBypP|wzqakX)%J~ubFYX8EjLJN9z-1HOdzFhOVZ~oQ#(*1l_zZCW&-H}PZK^V5&77{C9 z^{m}qZ*Db0Dzmn>R#0TSau;J~TDe$H*YgK_a|nFNjf3J5JWkwt6X~&b8IsMD zjo77|$dS52TrkF%0>OIs09YEES>Kk1%fjb7kAWupnWXw_M%|j3RFP{N-P)B)(c?GN z1uD5qv+n2mh>({rUrNjOZ;X@}^<4(y*wbs4KDj@#1)C}%G4b-GFOk=IYsmU*F$U!J zxPNxKYF{Rvbu!1@?e>`v^yuW|OlD=74?*g;p2#h3Z3Mj85%WB&!s$=Yd_qdYLGCS3sOn}#|i_emS zo+)GB(phiexJ~EB`I)v>O&M5ZcW3dO6nPraeFj&qQNX`@Hhw7Goy*riE{VUjbZ6oH z;{fyZqFL|TQ+WG6uhZrbk5Exee#*hsDN%Y`khGj!^*M@9 zo3(?*rUlH{$|^j*_U>(v!W*m?mg;5vjx;|0gd?RmflpvKkiw{LA0|B$ElpO@oz_hL zo~{U1@-$Y8Of@`Ih&A6UdDtdFjsL6Dvw7?W4If~T{=%Gghcw?}y%ul_8Z7~Du1*hDv7gJtV$oG*5V&HAtuuU)J!b)UPtdo6DcoB3vca{FYguGKweeR}DA zzswA|J#2?Gqi%D4T;T$nh2N>;gZI6+e~#9urElZ>4e6S0y~}P}aJ*N%*C7E{+Xj|m zm?8`Z2Pa{5g=08dHg?39ovWN3T&Da^%* zRY7g`kQvpk__(PxavFlTzxGQ=NC10F5*A6THdAXBt&}SxD_g(3FJyH_d>0v3X{|++ zIFw`1e0O`zX*uwh8u~UZnhEUp!?dR&&oEeJz`ni>r}~GJbBwfLE89|~eW==>n@sYW zpL=-h7ld^rE8sLn)4+xE{&Iy)b>|xr1w>Zw)nH~JL-(&j4mSIi>A|S7XmJOfF-M($ z2O*U`Y&~_-4GhH9$(|_e8iV*`y4hb(r#0fN_akjoWaLo<2~RjybWXja5P7^3cqSI;vPUg%Z#d_@4^s5!1sSy1si3|F zXM58KgY@M7KP8tC{58v1K79P>NV+KL%powRYK2;&jL{fGyl=_Lje56|jafB4JnFg; zws=I6((>!`f<+qDQv(L%r<+wadhU1!{`cqoiSe3ARt5%hc_uHt+&6x{*IerydhLDx z^XE^f=ns_wg+}H?lgaPjpFnAsR92RyuO&(j35&5z(JVDL%8A8ws$4292x^WpdxO@R zbM+(}?BcA>(JSXDdS5M08%5h>9Niz){p+;4%C&Z{(1=L+J-F@Oc?*J-U+axWBj#Qh zOmE*Fw_VA8)T3RE#wMS{Uw{9%aja15sMh|_9zTg_DyCPAkrgD|58m}*d?TF8JE*-u2sJZ{FimN-fcB#TfYSrb_t9}_78eYm*<^*<& z@U zPKh2pNM)=}=XOiH)sx>(%1o8aM5Y zyQ}kh45_f3EY+zlCA#H2tSC^bKDst@b#segQZJHTmrLaJRL|(}CS31J5HzqhX|**o zrq-&kIKSKMjw&7~maQ^B9P;<}j$Tn1)%TuuI9_9rmhKKC_a%7kcD6$R z;o;?ui8rflkzhRCG#<|$o^IH5>7A4HFY~N0i@J1o`pq$;D^RQDT~WYiu!U*b4kvP@M2 z-=6xTD8dD=T3IocmX^My@d&*>d(C&5i;2$=V{2t)rLyA_h#!#S5J|tJ4m$XmN%9Tm zNTGJNSG}9_ed6i9r}Orh!7H&swfKRlcCgw4-e=_@qqof71{xaNh&KD|ka^(Muadp@ zc=`CobCs{dQ4$2Le?-2QUMyV|+QJaYV1CPc4cY+zGlcee)z2VAyFry@+X z&buUG5Fh5LP7)_6vS@t2Lq*n2oQa`851W;4?0U=%;UdBol@Cx3D? zz13=aZbASVTKE0-Fg*QaonGY&2BTNL%M)LVMDe&odJ#|Uz=Z`XpOgbOmLQ3DHQ>A& zx7ypTZq2}l3)-K-g-&DBmOPn~lAo%b#zS9=9$+61D>8}@b~Ey-gCkk?TRCaUgHrVN z65{;Ta+FvZ%W~tFpv~XsxLH-9vdV5X!s&xJpTfzS0ltmuhCl$2{JZ{NoV+3U3^e^O ziu@m7{9i!*UxX?Ae?rtyMI|MN|3FqGlvh#J4|o#EiS*w?SWXJv!&@Z%zU6lLASGJ0 zf_LUL|Dx9a<30a(l>Yy#GbB;14>-b9Q!Rb4l)k(4BMIKak{mF6ctzIi4}*%m#R`DA z66CGY_ZMX-<>H`F=sWvDezZcry!)x{^U!M#a*Ze>%|xw2#e5E!v4zE5ARvG!j+{9({1nXaK5z!fgC;>PyBjg&h>K&% zu9b>;{O{QnzEp*rQOo0!o0){3(gFp44#kJYM~Mp5J>zmyGtYctQVGF{g_oGfPqK*q zB~kv4|MMTl3Qx*5&Z%U?#e)< z#W!VA64y7N7h)YZ@haRzMvJlaiPhzpadE2Sdq&m%?pTo}i_OpB#_)jaP%6S%txpkdJ)fcSNpw)7QJ6|WPKLI2 zE&2K{=NfopFpS=Ow4+9vXxcR&iXC3TVowOimkd2S6L3E-ys~J$rg-v%KR7gSf4mq2 zalO#k9A9M<`kIZFX&*eL4VK6#FO!v$OuJ40Ad>I49psy5tLey->lB{&w2b#A_tgv-~HM5)Qy&bpT`pA4LY>yWD0&uNP13FTVCQ$kl=c5?<=_e*9INd!u<80 z+1F`?Be0Q*!q*VVmakuCiP4i}RC0NsN>+cs3?j~*cc&*8$Lou`BYp{>skr@-ri~5{ z-B5Zo6(+GaSF2vH#nBunCMFhjc-G*uI~D#JiO6cZ zM`jez4_9ZquL%e?*Vdxe&w-WGr+9C}8}sYeuT=+4lCibvk!h-%@S~ScY~v5V3pf5u z3JKoUphOJjj($`$>pVQ}^pm5)5{G3BIuMHkRO}U}P4744HH{Cy8k(l?9A`NBU19i3 z+4*7fefMulAB7o{;ZIHa^I~|%imviajTd|rG*SF?`eSWatX8Kks%G_F!eD+jmyHee|K;6bOajIf_yf_=N7m+($mai1m`{Ow}iRD~DZhHDMh|fLRuMh0=U`LhJ zRR+z^07xT)28%hKY#jQ9k_5CaiJ=j(Ta88d+sypATv$v`Nl5{C>7~yr??*@nqBJ;C ze0IO@Yd_Al_bVy z)a{{Si6ykO^aKBFCK0@WGHng5perI`S0L`^FUz`&q{yeu?b<@tAyE=@cX77E6E&hD z+s@NLwT99-;plsdIrD`oYI3lvK|cV+UsBdW21DkTzcs6RR5^f+a*HH-e&$k-D7&Ap z7|}nkw^173x};mpn>TF3a4Ax6KJrryi=~b7SGy&|#?2>7drTyKTgkMybgBZ)(~%Rj z(ot;iNd3uMSx%9L-fL}E?C&3>x-Bwlq%C#bgSMJ306jWl4wN5>>5fI%WO|J^sm;&J z!c6LoAJ~~lItuN23Q889{+#ARF0u7DNZs9{>jWZ#a z#hbK2&FgF^d1SX zTXm73qBDmru!rO3IefQRCBUJ1Z^p3Ccnt+s+Jw8J7H( zktAqW)M}fKxW~kVa1cEqGSBzamlZFRf~-U;U+D;wVUq^43hSg90v|46kjXpqnU}E}*@qI(b(iW5q8tDs`D&pj)uXt{^TW7fz zBZqFbZC#z~xlkZ}nJX{8^CYVYn2S@}&Ykj2wslV-s_xY9!1^s{qXgubE8+`2;lE$^ z!DEO!CaAQTCc(nWQ=#>23r0gl-5IO5dLiF$)E<(rvXvxIdmTh{eLk9RcsQ+?K^W}I z^do!TbiTGeCML#to6C|tj>mD`p18eqC#x6Xv^6o<)pZd`90bCPlg|8zcRIiq!Qksa*6Ppk+T4?$nM$1uU zZmqJ+t9B@r5q>rUJg-dqatcDg;qBti>4e%}h3b zH~_Za5ZdgEPL_5`bfcj*o~PQqu<#Siq*|Uvs&aM~K&2-~w4>#c*q){(8vG_lFfaG6 zk`<;Tu#oJ8t^;;ZC;7F?rz(DTbVG&Kpz93~<1iS8)`{ir` zg&*gt{TuU+t}ZE|-=Y4Dx(yCjC$S)}h_Nxhf7|0b+b+1=h6M;>c^8nf!+A-#!W0`7 zRSD8fiE3P*22wgYa#~tiEJyQ>#H~LTc1ikO%LzYPdJu(#Y z3Bsra1sgQWvT*6t-a-RlL!~Bxh1ylvVX-|y{v(zg^Io}1CUKIP$+wFDt!#=YX#BCB zxV$>Mg@0R_;wmE;*wvL#%q^%>HQF9Uw8nJ%%uY{+#t|5PvH=94ShzY@q1ow5b()uK zH-2Mm5hGS%2yJAfkXx2H035+tn7~y+Qp7iyYcg?I-1@V^KX{D->xt z#u53maE2iL-}_TzA<5YT2U?bB;;E6dE7-D>K4ay&0R{Z29BjxtR-yB{+wHZ~T->E`C<3;F89S#o-a zMkemJ8Q<5ZX{c~fT1ovvwY0Q?NH`p}Mrce;hp7Jfhe|GC>q6JhuyrPYn)|Ksdf%)V z?!fu`;~J+;l}rbdTN^2fj>e*0t2lke!mA9$BfKO0k4~tx!Y?~(^9|`^YPW+N~e6! zUjKS|jGE74vgMSHLr!BmH!(FefS_A@;nOr#VU;KVXQZT5qsAG@(W}?JcJb(Qv7ROt zaPv6)WdaQY8J}k$x9*9B`5V6Pb=LwS2|yMeHzdbLlR^PYNc_adr~mrp4`Yjth!4%a z?|?&J)DIRP$-L!zU9Q!uR}yvN?JuXlEIaJ%n$R6CelpX^bD*T;{{j*X3tkFVc-dk){9qth=c(4oX8 zsQZ-=mO4=j*FU$>?TVrif!Wv;iTI%kx^6|7y^treif{0AS1(ozHkquyM(5_i-30mQ z!zCVB(K{Bv*S6YTgq$yO)zwS8yPK8tRcO%ffvjDB((EY>h?uyDxn2NFiCti>bRg&~ zij7T%^#T_3P6)fV-HwUYH9U_^Cnkfr%Rn@|zuBI6z6=m4KiLY*A7x1ZLUl_1IuN>4 zZ(;b^9}`fgpK1OMWj^p|pHl{&OiX+1q~R+p>{t)}0X(BV)f1nm{iCg)E;*Pr_ZS~! zMhn{y z%F7lgrNIs6a~8svvhfPclJ%-ykiprIcYkjPQRW!2Vy_ss9^RHmaJ=Nh501vVvHgxV?ma zO#Im=KZEbWWaOAXCB9Q>e`#bxdBc}=AH+In`96xBFj%g=Yt`Y)=U2WEl)-_Q2Y}fc z-Ylo@HZje6i^bCLMxP`}5s8QS)(q!sldwpknq$J>wzirSxWBX(0LU4~K0hrR@`!3h-=Chygsq+ot{)iyRJmTffXdD*%^@butN z=8V86<+t5{Wrag^U5eE|3Nan4tc7ao0~Hr)4-Il<4*qShz>S5BQiFx$6ZF}iZiCl@ z4t&Rj6XkgjSW9j@;&x`4_v4RJm>~hLqBshl@2R8qQ-78>`Pxqn9>mAprIZ(OSf6RI zQGBvE_15Wp&2au^vo@OHG&Da<_kT59m^f=~*_Bt6l#~D(c;ul19^XE}0`0>ir0}EN zXFf)4S02nTKKrGWUhS%r+6QlXR^bJ2?Mhx+#=fwQl)}X(l7@k-OBp>a;JG@7RfoHMfvcLhCHaj!h`}aXi%qw+x=!^;mlAt^Y35|_Mo|ggPnBDf7b#sLG zT{Rz&cX{OFBjLE|FaDrBR4>|&i0!kEM|f|{R3CHM%mEB~vv)+Qez1+v;Ptx7ZL}*v zT+)%a%4nSt5IZCSHOIi5WlT*^A5QltBM#2*%`Og7HPvYZy*h_XVC84)&K^=)T7(em zqv-GRlE!b(`eFsb{eN)tChPYdZ8DVzNR((J6Zznlvw0K{ zTqeDb&0>g_mW;FADXcKzRBo@O3>DgX$99BTVVtko?zH#9T>Z6D?g%pro3duT+i8QR z+xk5kXfThE9w+I4M53vw2~pJX@Yo*P^+hAvVzcRq&PCFT{$e|$j*GLUlJ|EsUZcWy z)Ldy#h<24v2_(8=-scZjm=D$|Hv7WZO$+*a2!=0lP1}M_2iGMfBs8k-tP9$>b`k~L z<+6>2hllCZi$?0*xu8-~QYh%?l9H0Hmq#YXDo(pv6~e;8{QLr?1*3t{OjWkigX!W` zrn2!{*i|;udJP`c{PoxJS)-f&)CaA@djf8`qg$`};Dx%ijDlnaTjd10wN5}~W2!k; zA^~Yut~uXmwS~2}5blYIih57hJoc#l`t_Up*^d2raxI_?IC;z6di$@eL1Huj+oM>o zUJNFcd9?1l9nWr~k}bDeAylkP8yQT*#mZlzUB&3UJ;EYW?Q~gc&@M42B_YA@aIygc zjyl)lwX@!B&9yJ1Cs?m{D+Y8ISC02J9wh*p@kAW6R6YAp+K`v>GfYZ4h~(x&(?`SV zu6%q#(eE&0YirNl2U5%Sp!O=N34}GLuEfN|c#JXqw#nS~LnZ!3nLltJW-HTSb#Jy7 z<;f%H5C0(kPaAM(4N$KDJp=J;;=X&=FaCXreEp?6BNlA_Il?|iAYlj^o%6x>PWI>J zO-I7RPRk1Z-v!*yWel8$0T91$~^Z zG+Op`rr;M4iczKvudp0t<>od95+*dF5!<;sO%08UC-aBkYlYnJ>fpsmAguQ21CtDP zQs04&kFaK;)~HAIKWX2;UjPjj9bG=y_B%)PdZp}~oG$HW3^zuO<9h;TeF*~Id+hC{ zkDsB@XpLlgBN|*I?*RTY>Gr;H-HnsNrAxR!Zp!FXmUed?%~y~1SDLGv+^I?hqBM^} z;@7V)gLk^_W3(SLYwD{iNWgOcVbYnZz|_>p;77Kz9BtV!2fH?w)#PIL;J}~Nr0d{4 z8RTh$+p2EO$?-aq%idIBfAX(iY4afg0rl{EK?oX<1UO_$*%vOo^3ByuUju6bz&Rj3 zqZu_}4~ETK>oWbWz*058++wz?smU;XKCAY8?|gUox@Xccl`NH99KApKnktURXzIj5 zIfPh%)8c3(UEHf!ts+l>8YHs2fO1hjnZ>Hb-@wtVzpK>yyF9&Wp0R^NX@0FZ2-J3_ z%lM$srs3gme*kl#>1lW8h`{|~<4gr=O1T4u17CThf#c)p8(M0KTot)Q*3HXfd?1Nr zRLxsSoxkts=^-9K%#YB7GwRj!oQGp7&I{Hf?6~Z~9N_gNSAm5G0lZ1<;!3A-?fDL$ z*9r4{s0@tHWhai;M2Q6shsN<+Ecpg|d0<9SZG!B4{nfZh!{d6u=<>mL8$4Ev-A=b0 zh@+#T)>c)!T3cIld?zFC8^QdW=xZx%C?N0led@aKBUo1qqbZCD0tH+@jLT! zQ%}@7S#WWw-v!FT08$eVAs#hn7pQ?dIyemBFRiUf!BSHV7~;4>1Knj|OnMC;XL1ap zP7jZcmblu2NKS9-E{%$VZHN90<|vY%G@2&?PbQptFtW)8W4B+55P5!HTU`xKH4rQ; zwMrkad)mezgfsIxJ3B!vj1lV34Z`0`p?h{NE~+$=*;*4*Q%>^{r}??rn^_BvxXs}# znFCKQ1pz4Q&|qV#c(I^m1#dEV5CoeiO40*1vQ_h)c`JdL|5B`1s8O9~8QBH8Uh96I zR8`aR204LmaEM*r8$TiMOSxv2h(LYJq0i zGlX`nnr!kR6AsGLc6--fjM3d_ekysYmOxMem6Db=(j1#>Yy?v~`aEAq#NfQ*sn69Y z*V9S*=G=V=3MfK0{&Inyho{;ioDybiU;v2W>W&WTyLwD0t=7ouRWQ+&GB11!Txqn| zdG~ji?A!C(+w)PN{6QrinBNf4CkGx3sC|blD_$eE2P&=Ob!HdDkzZoSOUsg{5wK;U z5wh;A9Fm7ADt30#z>G~yoX_{_w?^}Uc;e6ce7%|NgL_!wc4@AuAR!?EPU0mV<5?ni zwP7m?$NerB8Axc`U33fr;yvQ*NQoK;c(PlI)ljHd#PROqca2LLHVdDXIRA18X5!$kXBR`ex`qGK3Ej-LnlZO@x;UtHaH)B z>ccaH*p2@g^XJpykS3eitBQ%I&;5w`Pin=0xN)_wPYwWA7JgpSf>5R0w`nIQPLWd1 zCliOie;=^U&7n3Y@H<}tl_9L9bmxSi%s)qWn)7sPwBGx^F}*!>f3{X0wzjqwU3}ww z*`@Dc0sgkV^wRemJ4J+U%WJ&v8{jv$(^XbPBqU^50cu4$9OeU`pNEs8gH^E|UMtl0 z8a2ZUfI)p1^VKV)B7s!MAB2@#bA?s_mIO%LXDH{YfZ$-V)8g;n#_lNk2A~ZFUtg$R zT%-YQy9q?fDsZwW9vK;7(5|#_o>C+i|L!N=Le(;!cX{^OIAl4A{{^!LcF_kAL|D)K zwz++Vz@_ur8fZv_K^KQlZ-s7r-@RGja!4*hlq=;X@VicRK$F9 ze40x2FXERrKdN7z?VWoB{7X$3FXPaJ)$0{fr zphTdBQ_5RUXPtH>tIgNK?{CRgN?1zz_3LKJ;I^lhqX48a>69DaVI2E+bWQ!(XOWka zD=8_-)knKIg4V5D-JZt>sS5zdL zua*mql#-72;zMC(X0`*d_+%tym;^loz5m8e^)Y$~Ixd~cC!tUU>W_dT5S*2Bx#6@< zx^L$9HMp4d@921eO;xO46=jQU^2&4wravDL&ZK`6-oLP_%gDx7=5cw1M#O0jJ}Dv5 zu_B2Lm`Hp^E!L(FQ=)}xL|BAdx;5;O!`n@0m^t9j(#3WHP+tu@DEhkKVZe zw|Yj({lUV5!@lWaf4z@|jm`aHV{oxq9K=F~+`6CRrO-Es-+6j12V#-hk% z@THm+yGL234r6~2@n_*(Fn=JTG&M5XT~tiaPbxAW1d4PSj89i1^Y_UhRrRw??Z z*&Nf>-QAsI-EYU+%y)NpPRg%SZr8xd77k%0t#kYEVWD8s5ltCY-?~r4YP?`fK35io zRr0Cjz(5vt?d|q-c2#|SeZw^GL96mDS)|nI#-Y*k=kB+!8iT#!+d>E!Fp-P&YHe(6 z^h%8bXq2<{8;-`4*Za76d7btrr<-P)n$s_CpJM=hZnV zV`G3wK=AFdJx0O7aS9e3SQZo3$(X_PIq&E(2{Ey@?&vR<=TfD>UYN53W{$W$Gb;-# z?2f@m1cZ|lHO|w($(Nb-y<#{2n>T8er;^)KvI7F(P(qfk{ozy(6Bx&Tx;N|22e(nC z#<}T|@9XPp_6;r2&X!weOoXA9!RNp5!Ee@k;$j^yNnNdwvNplI2ISZ#13L-ihCSB? zg2`!v=I-ZPngucLp?kAIW31??s0oMr?pC-h+j@9 z(nc2PmPsXFc=^Z5&$jzQ$RIpCJeMJ)W-(AqHwrhI+~srO<>Ncwn429QUKUxU$3-EClp6hG zpMK-M`DrYn8gcIxGta2qfCVwB*7~JE4}juPP;8kWKooZG?m@6=+N%v2OaZ&;bh~-I zGyDX^+xPYt$Pf#HwMekK-Q5SV;7(F9iN8vdF)1Z2K|7Ti)X`7r1Tb+UdaOnq}wF@N;xT-QMv z{c~9VC$ZH|`0n8{l^6}kFaVOqrxpLx0wo2-WZGPql(&dx>9HzByAgt3T zP=1M0a>P{^DFTy#`6C03T7%7h>fw;y8;~_J3;)Y{AW_SdYrSq>fSmjM5B&jZ8@}uy z`vl4PWv(Czev!+@^=ffa{7Ln|fT&Pj{L6qKKQU%ELPuH&GU2JiyZV<}`5)#4GXO># zsg*6VkNQ`9aXlC-KxVu6p!gM_bdp=xlNA9^j1~Y(h>KGjs6e8A;>4?KX&I*xq`ror z=1)fw{M9L#E>k4@^L45MH5Lm{+!?d7eR&67-p~&t{T;S+=1q(;(TtR02=hOs``jG; z#SG_NpUnLOXTuB$Y(;I(Q?Z1GnD7KG{KMSBES&lig8anPRI^z0$t4<~XozF(*igXm z$$=mc>*f#*i4p~zZF;G%`#{Y6S1S46s=@yo=Ig8Q!{`2oGSgT?M{0OP-)&i;6+#}; z>{d&;IM1Oc`L@Y6_R+U}pInyPeV+iemq-ib7VLzHA(7pykN#mnCC5p7oUve0!J8=8 zU8-Z6B?W~n3$1oHpEo^;y*qydWO_J;mKAZ!Pk^ZZsV?LKBg`MrP9WdklACJ*g^=R~ zzN}H2$Mj&53E%W)0vy;=qzef^g3+5pr zpGdWQ&;=lqyI`)?$r{~4sll5^@nAxEiG8C7WPzWXek@D8q27@CD-OZ5f2!+e`?LYy z$FI|q3CzqpgI0UuX6AoC9OiGJIefKxj@x{m_M5qJ|0$Ri>H>`@j>hrx1yAABfsr;j z&(?!_YI>Oi_bMCU+D0SI5EIQPlgmqHAK@?W z-r%6fn$QOb=N@|};E_be7L9B<6{z%RX!%Ryu^rom^GwB#Nnd~)d`|g&u*eN!Y-pGU zt;q$AB)CC^*6Z#qCtj?;mv@NMMYh(}_|8H5nsTSEjyDy)^gYgaYc*6%tgk-~cSZcF zurO91a0X(`&u|n$x6krvYF7T-03dv6oHn`fh*6?}0C5d~h!Ik~C|kR1A?eoMFsio} zq(W4MYr1Z3&oa$0A@wMOqV3s!FxqF%G_=tMNI+xyS@Li3N)xPb4D&@nLBW$raSzs5 z8Tu$owB`~ftLyzimg0(YQe|{ivVd42P_TVa=cZKxhy@*sKqjsf7=8N#Gw^USS>cUP=J(atBHBP&WTYEqV zb=Y`v(_C8PjzLmVz}P+8ggo0$is`*tBNw|lQ|XHCs`u>K+#h?#kq!uLWY@+301hW~ zM3hui*Va1nFav|d)q)qkbRJfwc8<2C6!JPOxqO@y9{YB(yIIEc?2C}x-mLdPx#V(xKCXxB z^%*I(ViQ|;+iY7fQTJ*oh$cY-sc&N-Q(7IY)K?KRUmEA}|S+bi`#t<#xU&-1MtsuU7+gy+gim}XhjLZETg+vIBY@87=^($W1ff*gW^f@i1OPmkAkr|R3yW;8(b&R;yy z6I)hTSO~J;X-c^u6cLz%FWq_8o`ULFzPqK>Zhi!HOaXDy0W3o;9|&0iGyupH09pWn zKF&8JD!u@pbiG?bct3gh#G68yaaDox7s9n3ZNzQOD zgXS<&Qqw+Us9P@8qD&) z>8T>Urch6zVG@OX7RHMSlVv9iKF8h{g69lAi;A%pn{5FCQ`4v0OMh+mdEyS*H{Uj= zTM&RsZ%d8gi-JFYE}p)`C&;4LDPOszlS}3t1<~fQ<;%jCwSZ&%GgA zuCA^?Mf1gE5)^iC4pjqVXp}AY`ThqgmQ2!qA4hwELB zDe378Tz0EM*QP2g3-!u4{cd;@_ohyX_$qC07gm9!wv>KyvK7>X0@{U}j}IF{jswIP zaYyqvytB`*{Doo~*<<&pY*3UQ>-{OWA}jqZ;flF1k{2K-0B)>tXb4lOu#7wfa;qX0 zi<6Bo7<*s)d3NMI0S-lU_u4IU@_b+K_FwvLudPy1)aDibiF=?`z0%wVML=X>pp2$a zZQV|)ZzxhLU6I(P56crop|`wzGd1xx6M8X8a+^}S*P=Xpd>|$C4hDX<0B{{b7DG=$ zms&4Hy1jJ27)2#_V)5mz}+pMm=S^_gbp%_HDGZar6v5tq6Rw?;F6Sjfmy z@$caF01P(aeZ75-j=nL^WSeg`aTSx4L>AqBif|Y!oL9(G=>&A@+AeNmi^=(SsoXomZK zCP=1Iwc~iwO!N&4iGZ6*O*wuub4f{YK*wZffIQsZ-W3oSemCzM8?_3fj3)IwuRsY^ zo!)FscQivuWu@1B#Ez7UlbuGn-QB<aa`I}@LwqhK*HMNmRnr@N7 zl469N$q~xerUdSh;#NNgvB5}Iwz6^{(O^LxF4V>kE2OQQV8&u;xJeggZA37CGw@z8%*{beFVsj0RQmn4(G6U9k#Nw z!|&XcQRBRI<9gRrZlR1$%&jstP4||&9KN5VrltmR@o+mkK)V1PC8#4e7F1Qr9-eLR zTyMvvYY!sn^yUCtyV82z^=jmh_*rGMI!!H=$Aef+E3P6E#HF5xOFkgEtGcy|v2tJ_ z0)$sXow*XND7Yt=;lF-4^Uk(NDxc8MM&^0ly4_x%a?o=!GY>G!N6pO4nD!>Tf0oz^ zR0ST|?t;#w+kk!Eo2(7pzX$r)x6p>n&;FnwNG=-?d>(#7*O$Y?LjmTUrKI3D4zwAg zFN2bqZSR_r%LpkVMLK2U*w2oq>rAFACmj*C6DeNtV}(bjUXH~%Wy-r+ni$XOJ=gc} zi)8fPE5xLGH`Ap5$pdZ08%olfn)c7MnqA z@YL@+Dk%7@!ud}ZwKqc!johtz5! z?yaM$e7mh-OcX&tx)nh--AE%y2ugPgNJw{wq97n4EiE7*-6f?`($dn>-5nd=wf#NM zdCwW+eB=Ah_x|@X7=n9q@4K%1y4IR&&bg8S5@L>);U>kx1u84h1ecFPy(Q*=Y#cAz4F*j?YwMM$66R< zuGA52FT_9lI4NZ)K^jAhOFF;!&VWh(YZa)8#ksz_oc)k^|FVk#2-)6;GMazhXYoY| zLNWW^h>}PY?{r#Ce8Zar7^k>!Ui`9FfJ$n0zO+J`HAbyH%MYy7<3^h7kU9aLs zGimM=0$hQ>Pr@SLSC-6+7 zMD-?nKi761--Cbv#>KVEfV}YXGU>3T$WMK>@&H0OxGwC>rlHi0E(-%t8G|eG_2?v| zezq0X$N9EMv<9rzomqQ@CxiLg?*hifbRi_v1}JK4`r`8aRQXLq~%sH z%V}!+bPKFW7Dj_m%umejtf{RBu@VWuvpG}-=|U-{8$kzcN*xp!;$&}6owl^Jl*Yos zH@ApR8boV|)cu@gx>Xpc!|T(s)wCuP8XOD=`vrLZsNk!UUEgwXHd!9LOsIf=$-_n? z{kP#}%Wv7>-ll@$&z{o3%+4V~fute2cos|=cWyBtcvPCi2=K3cUMs0lt`~VQVrkY# z=sbN)A>X~$IT0uDwoXvMVR2GB;i2_&;!G%ZLVT%LY+p`}!MS!R7$fypKzlT^c7f#x zM6!By?mSkba|6r$L&sj3N~zCX^^P_V%PRl4-Rp4s&=Eyn>fAM@>z|&Mu3n&noH(<= zqPn5`)v-FVR9To|S+jXX&&=IF8akS=yM=H?=Fyey5+-_y;OP zeEwa<8@t2eR(Q{?N;BHYgi562=%=b78MwK-Hd5%Gty7Rs)=CpzHQ3J~I1$hszVhaQH^=f`Hr|G{b;}pD zk3>jhB%}IetxD_W63f<53JxLx`#H0&cwyuAGl2r&q!!Xh+dH*sGmcg}WP#dVx7IZq zRO}GBp{Rk5j)LAZ;(F-iUAbVZ;VC%XKa$dA`K#!A$B`>FgMIiS+_-$McB1Hfp%?crnQEY)e>BP=`#mG=bB&E4ZE&n~u3fQ$JZ zU8Uk=eY}pVcJ3M%>NUtIXX~`b_88Q$Lr^zS6}OHyF^#JjLTY@*VnB$4ackw<_s2U} zhSYZ?6h$64e!GOsRk4H1Dei|+pqf*)D_E$Mjp;G ziI4dGI66`XvkU>BX)!tx5s`*a{{%{5Ok?7l4_$bwe2n@nX=+%jzmEodyeVxI2Sd!= zMx&hC57?7nB-glX>NZdklMy|9{>Y~xlmaF;Y~YQb`H6V!uk}LZvsT#iie$5$PBeq& z*`s23xL}I#qvS(or^P%+j_OGz1bZ#rKVk$!}V4u z)xa*1V zPJvX~>*za(Hx@yx(@WJ&%sCo%YIeD2cdA?e6V<_LZzGPj_82?|O)V`zJ{W3mH}4fm zy5@ioas35pyI$AF<2bE+N-ncMKoKYrFpTjq(R3az6sSL2S-to89X);!OOk-sY1c)` z*yHq;i`zy+IZgsF17o1>t*eLIoyUPUHL+EHe^C_LByDlm>iz2)oLin}@}E?@Kt)v;=McC^Y(G&EXSM;uZtT+RwMG-}YFBHa0n#CFq64X^alc z{y;p+&o8ZyAv`$R&Xm7U?L_%CCUZ!trhGiP2~`!hA!L zZOu7t8GeDtcLM$8xEx;93JD6v^H}wzNjQ*^kx}PpmM+v*mjWGYXKeG` zed_!3!rjlEfs|uojQVP3>-_F>{nTo>ARiHA-*7G_l9rphify4@s8jBK?t6_qYpoYK z!P;ZLvwX6!7ok1t zi-q8qJ37kr^z?9RzLhZb>|Q~?{qt84kSBKEJUHC&6ZAaVn%$;i$5bxO?D2SfT|z?Q zq1EW;XC#Y%{%F@YZ_=w5B<5Op*B2}@&5X=44Rd00x^!C}D=v)#wI>iyIGJ~Pwvv*) zMyRHy+UoSUwX!~`B+R|#{VPq5{@<~jnRj=G=xAt2C*9s+?lpdY5UK*qCwb*ucsj`5lAXQn8F}C6>YrCQmX556L}nQ$F2tdoqHRtUDMYn8UWY z|7B_IXARMk;^8~d7!`){X)6IXW0So@>U;MTv*#xH z^ASC}ab%rqqt1LXS_{9~1$RAm*@;P}9SqcVwyP0Q7Y)F`?I_CBtNZ$v(ND6OIN0UG z^rp_aFHz$ea?VF9K4?}WbXFrq6@f3vdIQF|F9HLSy2Kl$0`3bk3t=JUhHIaKTqtvx znC}?s2hhKaikH!%7#WGEgMXAXO)FxuoScVm?2p^84g2wGD8=oNUssTs+hMhiX~-QZ zU*~K6zBc)ul0%{C*Lgf`sF9oAFLS2|n!vQ5B^Z9bst97f`-Cp*0Rbz+W!pPN7++5x z2x>*Nq{;OW(U@T%@6#`Ha-G#KJ@--?>DHZup@+Z((AJ0%k|E?ya9OcW=ONC%tz*nf-Av zn0a>KU|>&h8SST#pV)UhOQk+C3kybnMcc$|%t6iew)-pZ)4ueYF*8LmS!l&RmJ#%1 zK>_?MI2f0{)zU}H#1L?kGKbRy-EmiryX+?JPJo}s{*vQf2$U#bAvCj|LzCFbHocxKZJ~*D#}X??Pn-LhRLF-!|fWT zUn0WLSpxN9I-bO9;}G5-j<3b;wH8+?p*#x|u8J$p@ZOgTRsW_CaPzMXL6HB8fhE-& zsR}r@=p^tb-vX|R-Zgyo5dThiU0sq|E@M;<>eC(pF*yItn>s~o#a{|P*@B~^jorUy zDww0J8qi3-43cVVlNnKE;80ptR8%bRs%16qqt4>h4|vvOGAfFTOUlZ)4vH}ryUUW2 zk|fhrvsGj=lp@4|x1@j|_NR|ZLVZ#cWf~$d?QYN=fL z|9Dg0`~UfaU}L;Bg63tpmLk3rzaGAXBK|GAMbzhJTOyDD>2F-lw!9xJW<(15k|^`HmJ1agRHa&iX5Eu*733I{0v z4+V32{9v(d7cso6_vn{HqN6j)%gcMiw6}C==&}&_!AhErv48C>WUj;*17^uZY6Wv` zahU2a1sIEP8QaMw{~lEkY)T_d8Zz`nie3Q`MI)V|G)s!Q5U&(rY(~q_N=IzpR{VtW zrLYSDTS2r>H*Cr2MBEK&u3`8QJED%|)0Zc{cZqE_;RSw*LWSq!sL_Fz4i#|09x}U& zYi^~8AdG7Z;;55j%@EtedTL)e2RTYzX0~j>6D{C=8!gO6qi`;KnPG=bA$!BhonHC~^V(y0f2aNG-}moIzpXYx+X=WA5ma+K;~E@# zEoU_kq(XvEA^<@AyP+*PV^HScpP1+WdAp#ro5Gn_pSK4KIS3MqkzMhd^m+czi$d+@@+l%%Lq-(~$aHa6>?jPu^A{b@Ian`U~iiu2*mf)~av z*ddblS+U8vUi|!Jz_)q4QohPMJ9{fT9?j%gh7y2HdNs~oz+HJ7%i@DPDW4vqwoc!e ztc#6^h&PxA-_a8C=uFgB@)1bM7CY~rxgtAgvS{f8j0Ef2j z2ossA^I&x-1_KBoOs}X8ugf1fCG4 zd_UWVG!nvB0Y1LAU7<3|kslCp>NQxMvI5ZNWNZ6Df2Ve>rouNn*&2$ANi;kf!61bmE&iprEth+@>PP|67M7a>>tLHa_@vAO-&KVY8;$e!w<}EU^1lER+S*&~>8-mx;HOjVX;E+=rC2_(f z)2n?hMEx)bP=-e0W0mJR6_#;=NwIn9`mqFzF_3C#YimO>Y=zsCW8eV16oF(0vfBGn zVaVgwF7noihKo-i=$jQGRnKzHCwuq?Qq1*@1xazio?NJIL6$X9j*O)+l|vd-F+ueQCX#)d!ewPEt)bXx{2OO+TJhXl8 z6FML8#eQB!d=J62cC;-bt{BD0X+CFr>(=`zY%054oobmuhV%19*e-WwBiW!Qf(E?P z9?;Xj1XtD(A)KV-Lf*7H+yd@6d^p z1<2J@KaBd4(05s>T-Wp$Q#MN%6WizzQUyz~sd`=Q>aLf+i(c1q^YCoAKmT+V=S6(7 zRM^16^K$%)bYzS89*6MxKsKjbXecNW+HBhtaNers4!gUnZH{FfYBPS&MR+3lr? z;fXPB=k1u@8O$9XA>3gPhc-e0%O_P6NfQ3s-mzAecEt5M4 zX}g$yCTIzg1dfxAW?!UC)?F^pyPuXnR*@p)VGSQ*|GGVzk>qw_g6`$+)Jp0{()JhM z-=z3V#u&_ZYL;T@qreX^<9uHqf?|&KB|HQg`NY(E42YH}@Y1LD5NpMrr@TBY8xz3H zMey@~1v&Ou#RZ3b(-t@dJFSn7OkIrUkNLQWIy*Y%X%zcDP{tOk=62ngdkIYc^ZL@s zNw3q{8NDU_cHJ-Pg~#%S1q$DtVDtl(fAXuQ!$@@IpdSP2QGxW*Zi@I;w(PF58 zF)`)FtF}joP5|%ShjY~rS8W!064|@@`Z)Oc7k-APHv95Vk4v)vSgf(Rc>U=U znT1;Z7p3y{Zi+E%Dn5SqPW0K;wnbtGzOsbj8{!ypUf&emPw3l2fS86SNwQE^x;iO$b*8=YhVn8P{l36h5_k($>jP z{+P;K80KYsthYaW-M43&ef{1uG3TeHr-S`ZsZ5u`yWKjo8B4)m)lkG>3(n|35XDp6NtgrC3NJqxMDp_T^Zp(igMC@-#!y)d zY>^+FD@4n9Ed*b%HmvE?m=K^4OP8X`*o#-krzx~)uX2a?hIw9`&_!LkYYMAt+e06t zS;N4eV;!qMQhX%D#fb@B_g9=^yORPC?Ck6u3@e~yGA|#Ux=75=mwm3F02V$*hRN^z zg}>TP_W=I!g0J=)&^^W{#`%wrk+n`^tHU>sS67)%A^J#7O%;7;jiZ>WR?n=>73+Z~ zDJdc3K^W?$^XaW9f(fCnK3we}+^ z?`_rBuOP(haLsSSUggoLvK7^nd-8-P?e&}UjSK(;wHr+hX{13ywf1{D3A;7q5bS`v zCs}B@qXWbh$%PIY`AS9Z1DmD;rlP4%{jJ8)!Bp(W#oh_T|KX>Gp9O{%9vN0zK8f!L$>1Xw*X(&lHK_drf~31X z+U6-8T^2BwRSIZK z@-;@#v#B15J{PN+qw;bjjSn{?BZGp^{aJeN(a{km)q(f#*;ZIsA;JRu*y-#j@bl+~ zU??I={r1lF)S^$Ah4>~*rvUVTSt-njb&kt2H5FEwa&de64|g~H-gYK&dW==9OXd&G z(uJk?N$sum>UwAU+*km6coIqs&D}<9wHP( zw~b^Qyt#hmmTxpxYb6mGb`42|PC8L_x(N z9I(iF4{y}P4Kqe37TP?e=J%PFhX8WNOWSRLL9yMr<@YDDhwE#WUbS@rD1Rdn@bt$e z(H#6U$%RWxLqkJL3#^JZ)_s?P#vecCeo2c%77zZ^&i3}09%pl~II_%lgb}j?2(Q06 zJLuFT^#zghdrKZk__y?3rSafUT6L@H2k+8Y+1lJ}j7pHUvgw z65@sWbU5Kpk9Rh)kuKj}!w_w|1!YeT1_mA;xqLMkhfigxYyh|q4=5qST>!3{sHmvd z=|T7{2nH&4tlU=Smcf-^baa$7#?jtBf~trU|6(ekS3X4;>d*yQru!S4&i!WPi`_|d z)E*wEhwthucZc=s>T21v?nSZP@H_rI_;T3h_tO0Q{!H_GP-bdsX@ME)7nL0N{hgoR zVBYcJdPh|i5rqHBS-Aqo$Dq;s(-xV9(j^VH6&i_&{W#ks?EWY`*w&U^)olo5j5_y& zFEbnUX45X1jpQQUGe7)9dQMVEPtF52>ycWN$6*05ZNWEK??3?ykK8jC#_FLzX1D!2 zpreq zC13V&pP!q;c?B#Pd!BXcyO^>>e*B1kvK20<(_Mw#I$2BdOdR4+@z2jos%%bI23H?9 zP*@L@Wl#U{3nAt9JYYKe*=q#pO!QQO2RO}Ij92yU{{9W6u&DT$(dndvz(8rbbKaK* zsg}bP>(lq8(6QE1j+af)cKsAS%IEp+@8#)b$yp&QZIQlO`9oo+TJ@gC=T}Zt^Ax7R z^;X||zg#kMveXnCcmUL-f@aVAAIJu=#uUXpy2ab>E7k_&`~8pc zi}OQc2u`l=ZMNEtgLJ`i-SYHs^>oPmD*DvUPMa(3;|!(!qs7UGxXfB-$kWGDxeBS5 zVZPvS`}HA}LZJ5k#kbPh=dZ?^&`OGmih4|Xx{CU?r1K14rr*KCgMyU+FR$a~TPB3G89BxR9t6wf?*Pg%Kb?J&vQ>`eHnj?elZZ45ecb;tmXyfyx+t>Z{jmi!7>^9F>^p zIor}D=S^WTTo64!?O*@!2*`vO%?(rc($ms7Q70|f1I}2=7kwSMl2H4BDcFhMyMKWh zptrZPo+ovS7%XeVNhKk>yy=lV5j_t?cTYVE^T;IEM-YqX4Yu>*8eb>|8-ad}w znCkUqnLA~Q5}8Y5h~qHzaM_3IP4C_)UFM8OJA0a~vfvb?TE~R`<`3`fK%7rph#60R z-WwU0S~M=BAf>lroZm|@l8J(92+uWsdyC6rl}Y@`ceA9_v{+i&CNDpqSP~HT7^4!jC@oaIgEc5kGQGS=p(O96*EQB{)G>GNp|CfH zG!+I-wE?p-@d$*>()TO>#t?&}RVOp6{C@cUZ)A`J5K4pBtW#*u(_s6Lte%c2;1ca0 zh!Q}1`2E%Y_y=28(g?0Z_@bLMwe*kLG_;HDp4zk~JF}4>tp6tjQx##GO7utnpVLxu z|Jw3HED-xiFX~!d>9;{$O@HA1)3mg;6<47wHF!hkd1HWiiKuwt2QmM!WT<*`{Op*(vk_qmFIGn zmU(V^hz+eM!vBm#N;k1J>)u4;Y{Zdn)_vD^89>s>I2|%S1v5$-X+zD5znk)g5=iu$ z+dgH3Pj)l*{rkx{61`WclrOUxWBC0TI9ZMQ4}{ax|G!*dQC4>L-lo6Ue9Id!>42EF zsk!c_^(v$e>V=w&H!kB!N4(r;h=!zh{a3MrjJY{Whr072P?S4Tzg6!N@jI{NC}q1Q z7p`q=a|r9{_3V0zu3{+g;}@yk^x8uR3F+#|$;wVtUcB<|2OSR3fWG+fxl9s~Oaez5Sb${jqWjwzdfjTJEvt`cZZQ#<jG@c{eg0Fa^M+JTx|Ey=K4eHaRf8- zdQSsO{jS_8CczCXFUO_IsX5~i$x^fJJ8so5t?-yBG~o2?fi|z<98AXuuBJi+x$3O} z^gR1by`K@Au{@T)p0E98hpglwQ=wWesJKS{mEdkiO2@fWxla4y-uEXk#JVKI{PxG0 z_SQtDg^z}fk(I1C1%GXSYNG%YbOHH;sA(x-6EHa}vWIntlYb!iz0(Vc%NY!t>?a#PhYS$5H3ymtKx-KO3IK6++?XM1YCEl#LISv zbx-E`oy^H*pHaOXC*gL_^Hc(X-^J<5`<}%vKDV6#2thdC{^-*7w(KpDfR-gd_ZAap zSDY4C>FPfniIfso8JTD#9=w7`!ok>;&q9H@)H{bF9y4K)D9*SDNt(=^DVr4W;RC>)6&E{O(~X-8KKC0OZEb(GwuU5BaGC$U z+gL1^qb6j(XV#x73mErParHvo6t?L|Fw~G(3woxU?Yud1+Db(ixCF@P>Ttf*cvU!i zH_@ji#JF09?pTGPMR-8B{*kg?sar=FfF>&T-!_W>^V%W+<=y>MVh zpVxt}KrB(P(67!GSzv~ZKNH^uf<-)^*Gg2IzcvuODy=8HcfyRI)<53hGxdf05*iGt zQ{&cd=m!A6JSYZtcUOP1b-oQunS^#ATHIj(fIx&_4jceTT~Akh^nqfK5CB<)Fa{Qx z@R`@~ddq6L!`3ew$br~(IGs*>Lb=b=?SKmcnCDs5HXii$(Ql~NYcMcsyo^Q09ZlrC z@p}@2NAW$lT)CIjW4#(^8jFF_PROdoYt)kGU@EVzsR>>!;N~J1C%8PUTf-dHzSv_# zCwsEDQXURWS;yl=o6aGtF{v=pxJ{3KG+GUVat3s4N_R>!5Ad*t;bQ0DkN_PTYR@C( z>3oix7f%}NT(?VtOF3~>3-#9b;y9&3Df?}-pub?hoI+NTeg`Pfo_@l^=kp#Y8y9rh^dTci_s+1}`fM)b`gmig-nXuvA^& zn??FgBO5?o_K4t+5ZwyTd4TnTT{h4ba*MR0FI_po>xIBom4O=8F6p zf|AD&e4W*DLCyWE-bdri$(kA&EWT-mWO!v zBT@Hgm$h6=2*A)ajLu{si!LJjpfaGnGo%+zlz$a~XR3WE#Md+?5q>+@X zE{|2pPt|(`EWs#Z)jCS@_JYuHZEfu~@<0GrLP~0LvaV8wzy&!3{+B>}Bs$sW6UA9h zvF^fb1eijI4eR!`q*~o*sNW+<7^0|zGb2C6HWE_sfxHkpm#dk_lZ*P{_fJ;IQ zUIGAVP@+uaT8;#p5|RS_YQwmU3}|!o@n|{CZ)!Qk@X{+Lf~UDND=YB^vXuq8`yC0D zwMa4}VKeCSwzHQ*A7lt-fL>nOdf1rcobCfa)rKtI(@VQOP{A4C!Syj0CZu=q#fXD} zLD)^~cr;?X7Wz(X)p)RIF$M@#Pft%AAIG*lQeUc?*}6Y-5GES^I(G?irVi(g0eXIZ z6968D)YRbNqfYa9^MVhyN>1`Je+g&+Qdgbi;6ROdqZIqObB@%*|v0!6cn(m4iyYdaZ>`k2*q4u#CTt2$TYO5Tk+BTsd4>N z6sKe^b6AW{p!CU zoZGfyP<_<;2bZ&7zGM-%vttEhFH=t4WoMU+%k~=-ssh1lHYZZQ6$p{2VaV>46B!v9 zz7m%^){6OfNlAKFb$o2^3a!QK9gsZ$*b|mk!Q#qnAD;P+r{`BeEfvG$BVvC zz0uZ%MvBKf^V3teS1LnEgjN7^4x!xr4zU*n1%;P(#V<21QPGF6&`F9*61p3seZvtm zNDfT<(!UJVyMxt&iJlY@Dn7%i^78#Y;|>_QRu&f8)%LX1=0j_n_jKE1S*Ls+H3Shb zBno>ibQIPPne~C0*!0GR9ID-p<>=?Y@H^8GYqIE6;n?nz;{F>GcitE;x0yPJWWB|Q zOHRM9t#^B)&I5`)fCG^@gMGm{uUn3Mp&qE+!0jB%krvOYcOwtTBYdISf=(f zLbRXgMr8~@P*i1{!fo8;8*I(&(w>=}6>!;M{H%O7Jow6DhxjOhW-woQv5}wy_=$6| zn2#|VEl0|xWxlBb_5HLviO)e8sw%I6bOE6Y1TnONW|yBodnTGWBm3k@S#dE-)96Q5 zQ5<{>iEg7!f;mki(3^)zhLZuiu*jol5~fv?YNxJIDmaggT-FQ9TqZU)v+i0}c!W3y zLJWxgQvvMA*Q~Q&EUb}B*)Ck3?f)c-9Lo2^vO(4o6yS@obFA{T|IU}0ZZ{^2PD~Uu zS$lVSu#qfiJPLV846|+@kf$rHrzp8x5gjEKYK2RE)ur{e&pLN^iCDO-Mw?p45)6pl z;%nBmeK^Lazpzt1j~8ImKQ>F>i9#=N00SXR3$PG+dc$uaO~LynnhY5#rGI4=C6^T` zaQku;15_GiXBZyHUL(fPW|9&vJP_Q26;0 zT&@3`s9k-njwt!)j~;vp@;JS?=YR7!Vt;W(rVTB$k9dkv_TG*}7$}xaEywr2R29(N z_L{Mal0Ra(>H7)V@OGEg`^Emv<(jxqnRY2Op8&EFJ!<<)K^ocZZ2JV{;z&Xm0}%0cv5 zN=OKI&#h+N_ZNuQsch#z=Bq@y7jz^eK0{SNyUc8RsBUERH@T3z;O9)6FHP;=CMybiX1j$MUTn>_ARoA*j4%%)c5VMtQt;5WOIVEg*zyt*-5twr3me{q&8m7L036*p_teW*25TCxgO<`zbBjVIP z2aF!vaIJjsuvr&aA1k*UF&tdsHZT7Q_GBkJJVQK{o8$M=EQT*bU63X%OynF|=Y2)*lb>DsnNCdu_@q;n)^xa4$Mi*{CR=$duDgT&_mPs2|wgX4`e%i`l4s_fU_8^oKhYECQd3kgI zvH$T-ZXq;eTS{4d4+Fy7%8I$cs|9o%bl%Uzq2V9S)nciz4TCT$p9V*_bbqYtSmd?< zp;A$$0L6Y8`>>4;&(~&RwD!2QEm9b$B%Ibhgm>&y0ziaVTU(o>zWbL8`^r$g543W2 zm=9VPISO>@XMA{O(_6u%Z2RC~#!auyZuflIt7^VA#d;Fc*&$c(v{Z8hOOz$B54^h= z)C)W}#*e|DklTFVmu)U0==Ja$Fnw@7{|XiONtq0L=n^Z=IpI4G&Cyx49{q4M(! zxiHfK7uWr7J}IKY&S!89n8_(9(BZV#Pnc}tzXj@UG&K8bsch-sTt%wKoh<0~)o8JBw#DnN3oS60fT=}_O9EWNQ79v| z(ZX#5AYd2bigJs=lb!cHfOL7lA`BcEu-F_1B3wfwfLXYTKq!E!EO;~KK4nit(T*R5 z%Jk-U!eY(oNkT|iVR;+`AP~60E~!InA@Iy)fJWDV<K%A^zH3;piEqdejUJj`6E|P$e`vcVRj8%+GVYe&<8QEAo$Ne zy6~11QH6cK5@e8o0Xh$ID1cos@2FY&N@KA!pCnmOoS0Ic; zCmDL0;MQKY8OzdNID%a5 zhM;18SqHkHoHxf_l!D8cv^0r;i6ay;(hyc7J4Q0*IWqf);@sfKI2h}*TKx|V>FBue~pV=UIx2P@&r?6pq!4m~eF=oP}oCP*v@vI+1zwNbm7IT-a>uclZ?gZPJ;! zxib5~co>dDTRFJoo{V?zJ}QV7#$Q+%heO_+tbbVr^qMsF6mLK}`wOhdkTQI@?Ua)Z zxm4eDHsQL<#!tJ`Kv;G4h9B(*wOpk2_cW@Zf(=ugX8WzyHf118K6rN-Ja>Cp0eR-F z@+pMW^e^7=i|$F?F44J8yB;Z1^FAyL_5}!&fZL9Wup9&Lks7zWO}^UdD&(Q*l3~%qt3*348zoRl z#PZrRTk?2(n~HC=xKZHX;2^GpNxPl{DD%J$4|9MykWCb>QCFLC76cs!t=snr7*vR% zRBAn`RO6fv+#AQW->*3)gok2ruTG2pqzIi|8L&87Yr9V^^X!>rf5GFQ6WZbfpEaMJ zY~nptR8#~NPe@3J&~~ddb&g(LeD3>>58vNdoE*(<2F8FN3x&{GLcI(O94{n)>eI>% zd#ib2pJQGZ0GN^*{+u1(^7f{Ho(7PsHvo*)wW8{ODK;Q6Dd~`k7m-qa)@Q3MEQb!k z8*mX~xS$YOpkFwNP8Av!5ZqZr&(0oh@NwymtI3hr~2J+xR^i28>$UtRbZQjkep6K1}>kx7g#@+ zpYR&9v53iI*Tfd8lY2rOaIHH-&+_a{;Cf>?d&nJIos3-hVp8`WALdB_}Tm2U}&uxRGu{0 z-Y=|-kj;y`JMKza`Jlo#`_UwSr9f|Ye?J7%#~$z!nCD?F-2?AfeNW+sREyr*GZ}9B zp37@%o_kw1aMynoZcgN8RjP;JrnkKH^UK#MezqZ11;jXLU2lzad#Yyvj{DD9*t&G- zXa4-z+A;QA2&X6UmzI^KO#_>AkY2hT55!!+$c{TIM&9Cv@1=4Kmo9JWAR=?X{?KtPoks)M5kTh=q_0VHz3q`Z7tQ?Md$%z@ZGt+#_ z#pMvxt7>^VPR}nUpT-vAgr7}0EV4dJ5T2b2G&+exYiw*3a9$a0(ARH7PvrDC=BQWi z+2~5(wwTOYj-m3QhA^7%B2*vz$8iVqbi)D`x{^>xqE500aCt9ZDI6UeF;+*xC+~a& z5Uful9RK{er-;uT-|%iC5Ys2(u@!1;;TGV>P?NWUm*1|*Rz9HBll2Z#dYajW&G{n8 zqusCs{aRN$Pz-k`Axk_?K`b5P-SGRz4{&T33JcM#bmqndZzJo|W2r_%2mmd5Yu$j$ z=6m#MW&Jch&AIv?)rgU5%jSC?3JhZ~c(V8@_T`vlrn# z{BWT^V!r*+XFUGSh{PWZjx@(A^09_d$kF74hrZWw_1Vrs*Ym@i!Ta~qb2$gAB-I^NObly}QnK0^` z^I1%P9~=}f>;Sz6`yF`OfmnI6zdpONGFn!>8JQ&y^hv#{#pF_Ek@LBY1)eozDqy(U zJT~LCc6Isr>+fb;D#7yI9V;bg&|D>7&8U4KaRqYE=Y$_S!zkwTgdf=ZpV3F%EaH6n zc^mSV7YeCcpC8PWrBu?wjV!!ulH37GwNI~h!qbDJ&|d(m z@%>8!O1q}8_ly~T<^Y;o{2!<3|Kq&=|K1H!t3maKO6H-hE*gSdkhLi9WiwlU4%Q2) z)aTb;vjRc`fyOjQq*9;1uOYm64JG`4LqC7tkO(yRI8)HTnjS52UY_9 z&pr6Vf8!#+#{j(^G~NKnK*3BeN`|&0h%_YT$sLKCb(p9r=~@Q^K1PfIF(YHgOu^G3 z;5-D2r4|)^yM~esB3=YQ^AtFqf3#2k2%#SRw?9Dc$drpCkzJJYm*4_aj6mZMSH8km zsUPqpI$KZ|=(%GWq9_kn>LZH+Vvd(k{V&lY=oLbS+_b4}8-o~w{T>GV*`wYM!K8H< z_wX?;Z`?)Y0L0;UZ-@sk`-@RSRtLV8eoFr+EkWGpWLxxbtgNh^Er&5WlRN^5QPJjq)ov+ zAdM!-7jd5S>%Yn$C9|2nvZ3yk!VFxZ!Iiu`CLkljB@(;g2c#E_Ysyjo5bE68YZPtz2)XbL-24J$0!Ibi*My(jLv- zddPm*KUK@6w;z-gsZBw5=pMS^lv6>jG!8o9S7|NyFY2TIougvSS&qa#UZkA#PFKq= zi=QcYPg1I)#jB;sx+ah#JxFT9?74a9SD2!cKjx6>JD)hQs>SyeUli;8Q^SF}rk?`w z1D{RR54nkX8}dv`X9{r9(9Yh;WUwf=j64yLLU56F$Wig{{u%0s`aDzci(e`XAZOH*d4lpBhlpP@iHXd&OLBofL{BCsO-+lGMI1dwFBu zexj5MlM$_Kj-(UYk&Lr;`emQoF$WXHq1J(c&3(;*{WpK-Lj*OfKGSlYoO}0~92xQt ztQ}pQwfpt_7=J4vX<~e5`}8F6U6^693V_M)UBKI;nF6sk{PPtF=Y+|oaTn)8?WkyW z?rzo9hQP1tK!k(aiaG$cli={r=B3E*nGJ55B`MtAj22Sr`w5nhIU$z>;x63Y3)4-O z*|guIXs<*{DVq9p84O;f85+F*Juzvai+4IYu?=Voh){yk)GZ~hN-yj2$E;7p9X9?c zV!CB$n0V2H4HdM`#JJ`OQ#tAzzP@5tMR8Ey*Zc^++tq%3zvb}BK*NdXQZ|n0ClMof z=W~vC%_lYn26Jc?H_$=CX}a3UWA!zZ&ja~D?!g<0axG?-rz{sozy7>J$M*G|^tApi zf``>uHp4^sxHUkF@Qt0}TH*t_0u`D2@3g{m558)SsM>D{HD-0L4HPmoe=)KW`DB-y zLvTD>o2X+M@~mN~H%HyM)4|TVU8*#DZl)A(J>wc}DMQd(J5#z*_4=oOy2DdrhrIo$ z)zE$KMkot=YkR+Nb32AkHM!)#=k|)8Ju{4w$r)U zWjv1;&u4Wy4)<<#SA`?D0<{=Q*ZM>`+3(*sIt|rD`w$z8j&_TP`CdQh-OB6Craf6I zWp0&0C%2RaTlNQ;FZA?HO-&y^egnN97~W_woqL>cfnQQr9h8Q<6NSf$Qt1wWqj~+| z%bKdz4<{WD7*rV0p7)X5>u@fpwmbPVxLdb(fVNO4ga?pU_;pqm#SYb-E?TdP^?IuZf5rzV?9t=}~5 z=cYx_5jg~&Nm$uFCfM=xoo`~2j zQ56vHq z37pjqD#e|h54Q2>=w$bdiZ%2zo`}5HXF#ZQ%(ExBOk>a%s1RO#Hx$nwn%YV?RZ>!- zRcC$;4btEScOFUy`~~s2<-_$5UEMb(B(+=o0}a}?H>z82D4&Kg0hoei{DF`sHQ3?)|lBq zfB0777)k2ZvoWr}dSlE#CJ>D@|0A{H&nrehYN|Y(e)D3tSBtFr@Uxol1X6fNJsaC! zoD&vMiwTp;4OgA0fYJH2u#f%T!M+5uDw22)K9h$T6Ka_vvHJ4epx4d+XE)=>c(*tt4 zF=QVsk`}9f)tO`Z5ZPGcNidwp<@CRyf4ODnmY%G%0@liFc%%q|?e%wLJ2dH%G=qI9 zQ`Kyy-d-R;LhFh9KgpYNNxfsm7Wm*!aa2$*hyKoWcJ{pKvdH-OnzwT&Gc%>o&_KCK zSzZaHih0C)JmZ?CkT?o2bv++ys$qO&z66 z`Y`E?4Gs3o#dkdOALQh^pf`=Y0^5wCw6!%WVsfq`*cmd5`k3hETOIM$d};v zN6b$5r;(D8y}D~36A}!X!rE0ZNi%8!YXO8d{y|||J-l# z847}M(Gd4<3SRQmJVzG5i#zwY=6=Tdxz(`E@D~XB*&}7S{4tO}R?`Qoqy2vpWnC-P z?>lbI%+{ieO`E^j`O*l%@#Z5vyA7@V_)S4fm)vT1Wg>E@WMuwXzIn4Unt+mf(J@6O zANREC-Yo^es{H&bi4XpHlNl{2i-|z5ii2}caQ!COvBS#VZ7bD##~F$_><(?59-^5J zWhaJ7KI$On$#<{%{f1Is$f>VUCOnwzjxRbQeF?}2kM5=JXsy)VAc>>^irwK0G#_ki z>}xl&*LPvy{B~GTa=m#o$6=tOBOAO25O|Y#@zV{zMn&PdaiN(k@$rW-)LP$@=$8t& zscFC@srZUYgEvuy{&MuU#YzZU&=`rxtT$ftybW*QT%l2Sj$-{|7M7ZX1O!P|dW>}Z z;5`jW6a|q~VEiMU^YtU&Q0NQ|;bKc+czHd3oPl`EIcRHxfiEX6jxus*a=EZvoRm7j zBkdaEs2{9WvdC$MR=dzj6PB8$cVRCukMVtjt;L|A;}t2cj0h9<@#*y3$q=kDGw-Ge)~1H zx3*px%!hMa_g9Obu;U|71;~DA{b+7%K7{a$LYN+a_Iw~2*!hFC>g={$%+t||m)&YPno7Qqs*t|1m>R~;$oQ0zvC?Ht z4AMZO9ULErwe|Ga8~RmLoI(LZSy?%n>+MgaEd8nGy_J3~v%In5Nk+!Dj)d>w;c?N? zr@`YYgn@IH0#18>kJ}3jB%sxjr(J-H)YU(Lp(Ov~Nv_L98_R6yKQe^F;%|zb4!d#K z@pO&~Jsh|$;sgWuDtvtly2i?2*@=t8gO7K`JWfobLq31@M)jz<6bO@UOz2lN2I=h=7NW>=2Zr%yesqc@T`!99^FJgCnbQj#yK^JC*H2dH0YE+v1`Mpmj zdC9q>I5Q_#UG43SIiK?-!2f|~BY6Hews$iB_EuJDIXJI5JObhX)%UC)25gaYO@X}c zk6J*j2JLgDeYU0f`G+*Lc$6I9TvnD}Sy@=DZpPiJYSY-6%r4A4q=K1AJI-L zc=+2Fb`lb}b#((c?>*G5bjdizF*7%WaAhgghLO=xkV!oR-8e0+-0lqVE9mj1=|=q^ zE;V1lLm&xbwDOIalamCEo@GrOtaIodKetS>as_b(sy>y@0_>1;8gR}LdD`32PXyW6 z+6D$5Qd6_CuvkG?eZFFJloz64EeA6f7GIFTu5w-I-8<-;9vq|u`TE?r2lWTO0 zPm$G>fLe5f4SSbkH=p<`^S^+gr&WhF(Z&Miv0bu1?nSHiwK%{2`*Ujir5KJf3KgeN zT5D!V-rQpfr$Ce0eup<+c-+Zv1*_eQ4QTPnE1T+#GDzs@k`x*U9qD>}+(o z5*6pL5LrG0;Zk8P)P8}>$pOA!&zUh095mrVQp@hSq?zVt-mVl&y2I?YpMQ17mPwPi zSZ45W7k^l4)pTa%Jwd3LZW)OSaoP`VPo6J!+;8Wz;K4M)mZJ7&ajv( zfUOfMY}PI3{g)sQQ=uU?IyA=DRNWWO`zF)(89gY#@G(ClJ!YV8~7M_Ck`3KJmuiMj1hhF(3?RD=xV5f{o;YpBtK(C`g^M#CJo3tr?2?RZ$$do3jM~*9?B(T~RTNgL9K5eiU5! z;H73|Rb-fK?N!`e=+dcxKTwpROwae&Q6}w0w8+quz}aRm42YI$4cOfR{}<5Z8-rPr zcUeBFgq{PuZ-~g*ERKj0VQvNGk>WCI}1!N63h0sKmA8AGF6wW-C z@GYw;biLm$DFFNhy(oqU;32KcCm_qF*lZYJheLZo#f@esn~DiZNoc|znmJRDevs_z zhCC~g1f=?(v8Jf6Sm4oRB*1Rpl*8x;Gwjax%D1qvDo8Wl8O6r&hdJcCyzvua3Rk|f z3Rh!j6hOjdruriEp&gw|d$O%$pZ#Pt@GqJ09N;1mKy6PgxYzD|18?$Kx(a@Qd9SijYZ`( z(*n(2skTXe$fDD|PBc%RPgfEfMC3Jk2WD9`OaC-m7sww5&U_ z9=4jenz?fJehxwzuiGvZ0R^J6@9`zR(mcsnFe zu*#lk{`dqXX(OQX+NQ?%;N)7(vc0|+F0#|uXc)I-t(cf`ojWaWfcKjQV+2!~Lz#<{ zf0SKIK)DX)-ekG-+FUO4V(wH^Af6?YRhsPxi)YfX;YicYN?rOho4F0Iu57jLDwZze zH4@hxJ`p8r>w>W2VljZ*KRm%a(Jvrwwq|3?(kN__JS9;3o?|h7r8LUWO1p8qc6FE{ zAsMWADOH1EYg>r7Cc}3Z2#4_yZ)-1w{9LCDk_86tM#uO1%PAXz5rBawfjjrE7{ zRzpBbo|z4_9Bxj7et?dKZfR-BYNYJAe#Hh9$m5lc>^JQXZ)}WjAD;n!-Rtw`gU#XL z%c=AEK8rM|` zL8#L{CmV=sVT^=XJD9?lo>#CRgvWI;JH-p*l{zrEA+(_k;ss#lpa&;;w$;qF-t3{ko+nP2M+1Ne{+uu z_o7A%+i<_QoXxL5hZ|zqI2c&0$zhC#(!HQ}{|N>spn_Ibx}c%C=4i#n#GoQj)cL{Y zsIS_Fi?9|HfSx~1w{Hd4z#xgY&^Y|^mepjnvbMIYT94Xxa$QFU#KfT>-c?RJdyz^R z2!flmFh8HIQDF%#8AH)akBf86Jr+kf1^TevMHX!k#t%)q>_W5|w;48~U*K@;r^;@p zstLa^CcdV}vi7+6+*Fu)-!pSi=vjse;oZC7T>+UOvu=?Ba|E~55F;CXUtL{HtKl7V zxRN90gb4IzVC(n<-h>Lp>G3&05Ch;R* zNzRFm!>i-so+*q)#eltPcJ?24V$oXDuLXt-%IDK6qSuU(A5#V0ixosDwS#?x$OPj? z`WPpvcYsyDYQP-chS_W4p}z85b!HqXsjYlFbdRu?@?HNX+z<0xJrB?1QyD4bjjha^ z3<~abJl-WpSIU}8rV3nk7ZVVLW+j?72dJI_bk4l9ut}z;$JM0(zE>a;kcOd|KEG+E6%r zz8@QCJ^XjA$a2!Dd&(7$%t=W|h?ce~)`dTg-(C0zgx5XpXlpAe`9;cZwC8s>OS5FJ ztEHu9U2^}Q4l$x#ZBy)C6B4!F92Ac{lazn z-%)qWHuqpU2b?=?Je~}CuI4E|7|Pb+UOS!$pJI{-Bvq_tahEkWe{S+;0`F&#Od zsKAU2%Qldk7&$rZrY}4>&4#`N1_H0>d3Q_x;Gi!%0IR1jr=U+=dRC~)UX_sWZa)g! zm>TP55d2H{L@zBSW|*fd0Fb`Bw{I(^$;Gy{pUsM44A7u?goY-?#!d=pmA+Pw+(d^^ zJ{PybR6cqf2HwY*>S=P-`vOmS$Zz;Jf~SsfzXm8)%r#VcS!b%j@p=hrSs7e-2uy=7 zqPcq4*-e2Z^esNmY*TNDg@{1ynY{d_yV=XlsY3gqj+z&;Uk6R?z#+9cv0r05Tmu^) zoAMYcEM^}ZB!XG@Ur(Z|p^8cXshm45h3u_{kDfkJ4xAqtUnWihLkrWhz2%+J6}C@y0nzdl4JRs6xSdzQ1T1S`K@d}2E!5Fqp(&R}w9J49?Ei&^aiSQ8@Q|=#= z<(D2hS^kDf$n(eJzqH#Y#!4;gJwMui3emqO=5@9)ekiPxuC0oPFK?pM+W6}}g^Ws? z*TnVmvN7X-c7)Jb+mof>5UsEKdYJL2RGUALJ7?w1#=qTvZI{`TuFD-Eg0keIyF;Nt zcatSPPoFj0U%aT!aP=>!AU3Zu!-;yYIp00RuGmV0`ysNr5d9-jvc!NXe_ztemAtac z%imdsje3Vpow6^+ORenpMy!$if&wTs8P;56XPYDHrEX}*-bR1(XgMJQSesSejXE!x z0_%dPQSb9(pWMxGVZ^-$H*&l^ZCV9 z8;J7R5!iUgnX5L(lZ)x`gfUd6goq zTHpE>_JPO~`zcf#QAR?4KR*C9LUjq)-B*uSC25WO7N@OK6oH}T=lNl zX<{T~DjZU>6H9JV2xjiC-wl>dft_TgR;e7IAq4qu>?K72L?+8-8Wv=J`!G5Dp`VWI zpqBv`-&;!C<(@yqlM^cRcRl~0Bkq^Z2R9B3AIz<=8{3t9R9jGXIORe|vqcU3(m!U4 zrAd6n@%7IukkFyldivZ1C(HcIOizV93(=A$sMT^b3R7caEsp=?0~rUZYLJFr6B&8X z0$zY52#{)QYINeXloc%OjNvqH{R{EF-qI;-Gk-)k2|J4=>LHK;97zGhtR2s(%3Pak zK5UG|vp)LKsE>E=AWiK)uky#Pv#|Jqy1I$dq?_ddb4O6;%&4h?C=z$zA@;(P;%h8cM=qme>1?mCTN=G5oq$EDu&@v z?-R6hR2e8J2oH@Zg#W@q?aF`hrBNT5**)%#6M8vk`tl`_4GZW{U^lqqPziqEFd^D~ zujn5?o(~b2#sz{4#l7FA{OLoEA|DA%Xt+St^tQ{i9CV6^z0c>|Q=Z+|9W*{l7uC{c zG}kZebLKE9neD;|)5Jsc%grymM3HwiN25ZbO=z_lL^nBahA`2uSKGaftmos4-rBdS zat44zS69oMUp8VXIeoM)p4mT9W2gcJaLP^&NFsNeitdKWugkXFhGbl8YUF5OTYI>s zZp`1-4M(P{Oy6&@Jk@@kNwMXoU^Nb+b;hC>Rpj6@o;&_e=eT2hFD%(>!qK{{F8qu0 zn)C&7V(B}8J6D%$`6}NrS8xucwrY5y!tA%$)J3UoP@mjO@w$pcRv~syMJ3%PgOx(A?<^ODS9oSpu*bN>V0Kpzh2whEOl&G zLw*Q2rw)BlL9lMPF%TG;3ig1u%A#FJOH_2)(V;B#F@5n^Z||S>EMV>^iptB!P+3k^ ziv~VbuQVi4-Q1sV4aMAFqobiY1iL32y);O|@yyW?!T1`(*1zxs$i{K>wzNDCn1d}a zDk>%VQ-_h((j@I%Dy&cSv#_bQ->ieeSqnAJQ%V+CA!~tM*|2`_B zLO%$PJ4iPN-v6Bboav7JdUlqpgzIre#>QBQZ$N;5fPYd{kXc1}ER5dLq#!ZI*0wfO zBt;2)4@ybi_};Irt+!R)%%@4nEUZ;ROmX{kwZS!nfRGTv>7&{gaF?g2dwP0CMvlPC zqO$vl26~E@A4Nd}nyytE*hOMnt}O?BUk37-i&== z5PAzOhMIBvkn#Bms(I_@fQb85T8M@)N5~9vhjumt+A1^s_&z<~7*t=`Q`A+=Un!*i zN=-;mP_V>W$=k5Mj!lBw^!;(@y7|W5{{BooJ9=~{bT(B8{l(>UAKk)&FLIu?!&3kq z5j@g#XEDA(NS}G}+EjDQ)59l8A^`D#_XZ6!(+@h`t*z8pV5jI%_+yn=oaLOWPCz58 zVZS!9vb`(eWRLElVSE_BtMw$onjvRqvoAVLG^zx{gJ`?=_YF1E=b>CA7>-sUGS}Yq zzU5FBsLwBYNZ&Zsz(^xRh73*c91S%9BA8EGulO?h+;eO4P)A+q{F^JzSv-n~w zW8=8{+cwis$DHyCG^GDl^sPev@WpcR1(SyIbFR~npa0fnamwd-Uy*2a6C=1e zI%dTrl#b37zRIFmP8%rCXozYAYRHjaQ$qdhwj5cieTzyJ{qx+$gu|N^ Sv*lh;4_X@8M7eYk`A83DW8V> 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 X7$xh0<{{qs6wZi?$RKirpS}J+%(sVK diff --git a/app/research/client-ui-design.md b/app/research/client-ui-design.md new file mode 100644 index 000000000..0a780bbb3 --- /dev/null +++ b/app/research/client-ui-design.md @@ -0,0 +1,72 @@ +# 医生工作站客户端设计规范 + +本轮覆盖现有 PySide6 客户端与 Vue 视频伴随窗口。按 `redesign-existing-projects` 审查现有页面,结合 `minimalist-ui` 的扁平化原则实施;医疗工作台保留信息密度,不套用营销页面的大留白、装饰动效或布局模板。 + +## 审查结论 + +- 主框架与业务页面原先并存科技蓝、紫蓝及多套中性色;登录、AI、诊单的控件也各自定义配色。 +- 页面内圆角、边框和层级不统一,部分阴影、悬浮位移和过渡使操作显得跳动。 +- 小窗口的表格、诊单与视频操作需要分别验证,不能依靠整体缩小解决。 +- 键盘焦点、禁用与选择状态应始终可识别,不通过改变控件几何位置表达状态。 + +## 视觉系统 + +设计变量以 `src/doctor_workstation/ui/design_system.py` 为准。旧页面通过 `clinical_stylesheet` 迁移已知的浅色主题颜色,新样式使用命名变量。医学数据曲线、模型标识色和深色主题不进行全局替色。 + +| 角色 | 值 | 使用场景 | +| --- | --- | --- | +| 主色 | `#4267B2` | 主操作、选中项、重要链接 | +| 主色浅底 | `#EAF0FB` | 选中背景、轻量状态 | +| 画布 | `#F5F7FA` | 主窗口背景 | +| 表面 | `#FFFFFF` | 内容区、对话框 | +| 次级表面 | `#F7F9FC` | 筛选栏、分组、只读区域 | +| 侧栏 | `#F0F3F8` | 导航区域 | +| 标题 / 正文 | `#223047` / `#344258` | 文字层级 | +| 次级文字 | `#647287` | 说明、辅助信息 | +| 边框 / 强边框 | `#E6EAF0` / `#D4DCE8` | 低对比结构线、输入边界 | +| 成功 / 警示 / 危险 | `#287B65` / `#96601D` / `#B54A59` | 保留明确语义,不只依赖颜色 | + +- 圆角:标签 6 px、输入与按钮 10 px、内容面板 16 px、独立窗口 20 px。 +- 间距:8 / 12 / 16 / 24 px,根据现有表格密度调整,不整体放大行高。 +- 字体:继续使用打包的中文字体与现有可读字号;标题层级通过字重、字号和间距体现。 +- 表面:纯色为主,轻边框划分区域,减少嵌套卡片与装饰阴影。 +- 按钮:每个操作组主次清晰;次要操作使用浅底或边框;终止、删除等危险操作保留语义色。 + +## 交互规范 + +- 悬浮、按下和焦点反馈不移动布局、不改变控件尺寸。 +- 动画短而克制;滚动可被键盘、拖动、程序定位与反向滚动即时打断;尊重减少动画设置。 +- 切换页面保留原有路由、权限和数据加载机制。 +- 登录表单保留密码存储、服务器设置与提交保护;组合密码框使用实际 Qt 焦点状态。 +- 大小窗口都必须能找到主要操作,优先局部滚动而非把全部内容压小。 +- 视频保留原有截图捕获、确认上传、大预览和小窗关闭返回大窗逻辑;视觉样式不改变媒体内容或尺寸计算。 + +## 覆盖范围 + +1. 登录与品牌区:扁平品牌面板、简洁功能说明、清晰表单与焦点。 +2. 主框架:导航、顶部搜索、工具按钮、标签与 AI 入口。 +3. 列表:挂号、接诊记录、患者、处方库、已开处方、业务订单及患者进度。 +4. 诊疗:接诊台、预约抽屉、诊单编辑与只读、指标和保存状态。 +5. 辅助窗口:AI 问诊、处方编辑、处方解读与报告控制台。 +6. 视频:通话控制、聊天、录制提示与截图确认。 + +## 验收方式 + +`scripts/render_client_design.py` 使用演示仓库生成 1440 × 900、1024 × 640 的真实页面,以及 1280 × 800、860 × 640 的登录页;输出 `artifacts/client-design/index.html` 与原尺寸 PNG。诊疗和 AI 弹窗使用现有专用渲染脚本验证。 + +检查重点:小窗操作可达、中文可读、表格信息密度、长文本换行、键盘焦点、布局稳定、登录与页面路由契约、视频截图与窗口状态回归。生产服务与真实患者资料不用于视觉验收。 + +本轮共享组件还覆盖筛选展开按钮、列表加载状态、聊天通知、更新提示、本机录音队列、媒体预览和上传进度。860 × 640 登录表单完整显示,不需要为纯留白滚动。 + +## 验证记录与边界 + +- 主框架、登录、遮罩与动效首轮 100 项通过;新增组合密码框键盘焦点检查通过。 +- 小窗登录与焦点补测 2 项、最终登录及主框架复查 68 项通过。 +- 筛选、无限列表、通知、更新窗口与本机录音队列 37 项通过。 +- 原生视频截图、截图预览尺寸、小窗关闭与视频契约 199 项通过。 +- 视频前端 26 项检查通过,生产 dist 已重新构建。 +- 当前视频 dist 在 1120 × 760、540 × 356、440 × 300 的合成画面中完成 27 项布局检查,截图与关闭事件正常,未访问外部服务。 +- 临床页面、AI、处方及图表分别完成专项测试和真实控件渲染,详细记录位于 `artifacts/client-design/*-report.md`。 +- 最终修改文件的 Ruff 与 `git diff --check` 均通过;AI 工作区及快捷操作权限最后复查 24 项通过。 + +此记录不表示整仓所有历史测试全部通过。扩展测试中存在已用原始 HEAD 复现的 AI 流式/延迟生命周期失败、共享 QApplication 样式引发的图表测试顺序依赖,以及 Windows Qt 网络模块异常;本轮没有改变相关业务行为。未连接真实面诊服务,也未重新打包或安装 Windows 客户端。 diff --git a/app/research/im-ai-assistance.md b/app/research/im-ai-assistance.md new file mode 100644 index 000000000..19774606a --- /dev/null +++ b/app/research/im-ai-assistance.md @@ -0,0 +1,75 @@ +# IM 问诊 AI 辅助 + +用户确认范围:在现有 IM 问诊窗口内增加「总结病情」「建议追问」「起草回复」。结果供医生审阅,医生主动填入输入框后编辑并手动发送。 + +## 集成契约 + +- 复用 `stream_diagnosis_ai`:总结使用 `summary`,追问和回复使用 `custom`。不新增模型配置、不把凭据传到浏览器、不新增服务端路由。 +- 每次生成前,通过 `sync_im_chat_messages(scope="current", sync_token=...)` 完成当前账号对话归档;响应 `completed=true` 且没有错误后才能调用 AI。准备失败明确报错,不静默降级为旧聊天。服务器按授权诊单聚合临床资料与归档 IM,提示词限定本次医生账号的近期对话。 +- 三项提示词保持 500 字以内;不在提示词中挤入、截断完整聊天或未发送草稿。 +- AI 独立后台 worker,不占用通话、录音和消息发送的队列。 + +原生配置 `DoctorCallConfig.imAi`:`{version:1, enabled:boolean, sessionId:string, reason?:string}`。宿主生成 sessionId,每个新窗口独立。上层将 AI 权限布尔值贯穿 launcher;默认拒绝。 + +浏览器到原生: + +```json +{"source":"doctor-call","event":"im-ai-request","sessionId":"host-uuid","requestId":"uuid","contextKey":"frontend-context","diagnosisId":"501","appointmentId":101,"action":"summary"} +``` + +取消使用同一组身份字段及 `event="im-ai-cancel"`。只允许 `summary | followup | reply`。宿主核验可信文档、窗口未关闭、AI 权限、会话、诊单、挂号和请求格式;实际 repository 调用始终使用宿主绑定诊单。 + +原生通过 `window.doctorConsultation.imAiResult(payload)` 返回相同身份字段与: + +```text +status: loading | streaming | success | error | cancelled +text?: 累积正文(流式及最终) +message?: 简短进度或错误 +modelLabel?: 服务端模型标签 +warnings?: string[] +``` + +所有数据使用 JSON 序列化,桥接正文仍为原始文本。页面通过受限 Markdown 渲染器显示标题、重点、列表和表格;原始 HTML 被转义,链接和图片只保留文字,不执行内容或加载外部资源。客户端截止时间 180 秒,超时发送取消;原生聊天同步有独立有界预算,AI 沿用现有 105 秒传输预算。取消请求由独立线程发送,GUI 不等待网络。停止只是停止本次接收,不冒称上游工作已确认停止。 + +## 界面与状态 + +- 宽屏右侧约 330 px 辅助区;窄屏可收起抽屉,独立滚动,操作和关闭可达。沿用现有蓝色、圆角和轻边框。 +- AI loading 不阻塞 IM 输入、发送、加载更多和视频控制。 +- 只有完整成功结果允许填入;追问与回复可填入,病情总结默认只读。非空草稿明确追加,超过 3000 字拒绝追加而不截断原文。 +- 切换会话清空 AI 状态和草稿;迟到、重复、身份不匹配结果全部忽略。 +- 异步手动发送成功仅清空当时提交且没有继续修改的草稿。 +- 结果注明医生复核,展示服务端临床复核提示;不会自动发送、写病历或开处方。 + +## 验证要求 + +离线 fake repository 验证同步续拉、失败不生成、取消、终态、身份隔离、权限与关闭;Node 测试验证桥接状态/计时器、草稿追加和发送隔离;使用真实构建产物和合成消息验证宽屏与紧凑窗口。回归截图、录音收尾、通话权限与 IM 流程。验证不得访问真实患者、IM 或 AI 服务。 + +## 交付与验证结果(2026-10-29) + +- `app.py` 在实际打开窗口时读取当前账号的 `tcm.diagnosis/aiAssistant` 权限,经 launcher 传入原生窗口;未配置权限时默认关闭,不采用聊天载荷中的权限标记。 +- 三项功能已接入真实 Qt bridge 和现有流式服务;宽屏常驻侧栏,980 px 及以下窗口使用可收起抽屉。中文输入法选词时按 Enter 不发送,异步发送不会清除医生随后编辑的草稿。 +- 合并后 Python 回归 **364 项通过**:包括新增 AI 服务/仓库/窗口、权限入口、IM、视频契约、截图、小窗关闭及大预览等。运行使用独立 `artifacts/im-ai/final-integration-tmp`,未访问外部服务。 +- 前端 **45 项 Node 行为测试通过**,`vue-tsc` 与 Vite 构建通过;实际 dist 在 1120×760、980×640、540×356、440×300 下 **42 项界面检查通过**。离线夹具只使用合成消息和结果,外部请求尝试为 0。 +- Ruff 与 `git diff --check` 通过。首次交付构建入口:`index-CnqWQu6O.js`、`index-BwArpbVK.css`。 +- 截图、可复现夹具和详细报告存放在 `app/artifacts/im-ai/`。未验证真实账号的模型响应;未生成 Windows 安装包。源码运行需重启客户端,已安装版本需重新打包后安装。 + +停止接收后,原生端会独立请求取消;在旧请求实际退出前重试会提示稍后再试,避免重复模型请求。聊天同步失败时不使用旧归档静默生成,助手显示错误并允许重试。 + +## 结果排版与切换改进(2026-10-29) + +- 模型输出的 Markdown 标题、加粗、列表、引用、代码和简单表格转换为安全的结构化展示;重点以加粗和浅蓝底色标记,结构标题使用蓝色引导线。不依据医学关键词自行推断重点。未闭合的流式片段保持可读原文。 +- 三项操作在当前窗口会话内分别保留状态、正文、模型标签和复核提示。顶部按钮首次点击生成,之后只切换查看;底部“重新生成/重试”才会再发请求。生成中可以阅读其他已完成结果,后台更新不能覆盖当前阅读页。 +- 每项保留独立滚动位置,换患者、关闭或重开会话时清空。结果仅保存在内存中,不增加本地患者内容持久化。 +- 填入草稿前去除 Markdown 排版符号,保留原文、数值和列表含义,再执行 3000 字长度检查;仍不覆盖原稿、不自动发送。 +- 本次前端 **61 项行为测试通过**,包含安全渲染、草稿转换、缓存、显式重生成、后台流式隔离及现有截图/通话守卫;TypeScript 与 Vite 构建通过。 +- 真实 dist 配合生产 AI controller 源码和离线宿主替身,在四种窗口尺寸完成 **20 项可点击/布局检查**,以及切换不发请求、显式刷新、后台生成、独立阅读位置、原稿追加及注入防护断言。外部请求为 0。 +- 证据:`artifacts/im-ai/refinements-visual-checks.json`、`render_im_ai_refinements.py` 与 `im-ai-styled-cached-*.png`。未打包安装程序。 + +## 可调宽度、首次总结与指标强调(2026-10-29) + +- 聊天与助手之间增加可左右拖动的分隔线,宽屏保留至少 480 px 聊天区域;窄屏抽屉也可调整,最大宽度仍留出可操作的边缘。支持方向键、Home/End、Enter 或双击恢复默认,Escape 取消本次拖动。窗口变更、失焦与关闭释放指针捕获。宽屏和抽屉宽度分别记忆在当前窗口内。 +- 进入有权限的 IM 会话后,首次总结等待当前登录、聊天、Qt 通道及原生 `imAiReady(sessionId)` 确认;准备等待最多 30 秒。每个会话只自动尝试一次,不因重连、标签切换、展开面板或失败自动重试。医生提前手动操作会取消待启动的自动总结。关闭和换会话清理计时器及旧结果。 +- 普通文本中的血糖、血压、糖化血红蛋白、体重等指标名称及带单位的数值自动强调,支持范围、小数和血压组合。名称加深,数值加粗并显示浅蓝底色,不依赖模型输出 Markdown。原始数值、单位、否定和不确定表述保持不变;没有新增医学阈值判断或自动风险分级。 +- **97 项前端测试、318 项客户端回归通过**,TypeScript、Vite 和 Ruff 检查通过,`git diff --check` 无问题。当前构建:`index-C_tMrPfb.js`、`index-CMN1CXTr.css`。 +- 实际构建页面在 1634×1008、1120×760、980×640、540×356、440×300 下完成真实 Qt 鼠标拖动、键盘调整、取消、跨断点释放及指标样式检查,**15 项布局/点击检查通过**,自动选择与请求次数断言通过,外部请求为 0。 +- 证据:`artifacts/im-ai/render_im_ai_resizing.py`、`resizing-visual-checks.json`、`im-ai-metrics-resizable-*.png`。本轮未生成安装包;原生就绪握手需重启使用最新源码的客户端。 diff --git a/app/scripts/render_client_design.py b/app/scripts/render_client_design.py new file mode 100644 index 000000000..4414ce522 --- /dev/null +++ b/app/scripts/render_client_design.py @@ -0,0 +1,143 @@ +"""Render the real native client with synthetic data for UI design review.""" + +from __future__ import annotations + +import argparse +import html +import json +import os +from pathlib import Path + +os.environ.setdefault("QT_QPA_PLATFORM", "offscreen") +os.environ.setdefault("DOCTOR_MOTION", "off") + +from PySide6.QtCore import QSettings, QThreadPool +from PySide6.QtGui import QImage +from PySide6.QtTest import QTest +from PySide6.QtWidgets import QApplication + +from doctor_workstation.services import DemoDoctorRepository +from doctor_workstation.ui import ShellWindow, apply_theme +from doctor_workstation.ui.login import LoginWindow + +ROUTES = { + "appointments": "挂号列表", + "consultations": "问诊列表", + "patients": "我的患者", + "prescription_library": "我的处方库", + "prescriptions": "已开处方", + "reception": "接诊台", +} + + +def settle(app: QApplication) -> None: + for _ in range(4): + QThreadPool.globalInstance().waitForDone(3000) + app.processEvents() + QTest.qWait(75) + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--output", type=Path, default=Path("artifacts/client-design")) + args = parser.parse_args() + output = args.output.resolve() + output.mkdir(parents=True, exist_ok=True) + app = QApplication.instance() or QApplication([]) + apply_theme(app) + repo = DemoDoctorRepository() + records = [] + + def capture(window, name: str, title: str) -> None: + settle(app) + filename = f"{name}.png" + if not window.grab().save(str(output / filename)): + raise RuntimeError(f"Could not save {filename}") + records.append({ + "title": title, "file": filename, + "width": window.width(), "height": window.height(), + }) + + # Isolate preview settings from the user's saved account and credentials. + settings = QSettings(str(output / "preview-login.ini"), QSettings.Format.IniFormat) + settings.clear() + login = LoginWindow(repo, settings=settings) + login.show() + for width, height in ((1280, 800), (860, 640)): + login.resize(width, height) + capture(login, f"login-{width}", "登录工作站") + login.close() + + session = repo.login(repo.DEMO_ACCOUNT, repo.DEMO_PASSWORD) + shell = ShellWindow( + repo, {"session": session, "demo_mode": True}, permissions=session.permissions, + ) + shell.show() + try: + for width, height in ((1440, 900), (1024, 640)): + shell.resize(width, height) + for route, title in ROUTES.items(): + shell.navigate(route) + capture(shell, f"{route}-{width}", title) + finally: + settle(app) + shell.close() + + # Include independently rendered dialog/media fixtures when available. + supplementary = [ + ("patient_orders_1366x768.png", "患者业务订单"), + ("patient_progress_1366x768.png", "患者进度"), + ("clinical-after/appointment_drawer_1440x900.png", "预约编辑"), + ("clinical-after/diagnosis_edit_1440x900.png", "诊单编辑"), + ("clinical-after/diagnosis_edit_1024x640.png", "诊单编辑 · 紧凑窗口"), + ("clinical-after/diagnosis_index_1440x900.png", "诊单列表"), + ("assistant-1440.png", "AI 问诊"), + ("assistant-1080.png", "AI 问诊 · 紧凑窗口"), + ("../subwindow_exact/prescription_editor_860x900.png", "处方编辑"), + ("../subwindow_exact/prescription_ai_report_920x760.png", "处方报告"), + ("video-call-1120x760.png", "视频面诊"), + ("video-call-440x300.png", "视频面诊 · 小窗"), + ("video-chat-440x300.png", "视频聊天 · 小窗"), + ("video-preview-1120x760.png", "视频截图确认"), + ] + for filename, title in supplementary: + preview = QImage(str(output / filename)) + if not preview.isNull(): + records.append({ + "title": title, "file": filename, + "width": preview.width(), "height": preview.height(), + }) + + (output / "gallery.json").write_text( + json.dumps(records, ensure_ascii=False, indent=2), encoding="utf-8", + ) + cards = [] + for record in records: + filename = html.escape(record["file"]) + title = html.escape(record["title"]) + cards.append( + f'

{title} {record["width"]} × {record["height"]}' + f'

{title}' + '
' + ) + (output / "index.html").write_text( + '' + '' + '医生工作站 · 客户端设计验收

医生工作站 · 客户端设计验收

' + '

使用演示数据渲染的真实客户端。点击图片查看原始尺寸。

' + + "".join(cards) + + '
主窗口与紧凑窗口均按实际控件排版生成。
', + encoding="utf-8", + ) + print(output / "index.html") + + +if __name__ == "__main__": + main() diff --git a/app/src/doctor_workstation/app.py b/app/src/doctor_workstation/app.py index fdc81e084..af97365f5 100644 --- a/app/src/doctor_workstation/app.py +++ b/app/src/doctor_workstation/app.py @@ -41,6 +41,7 @@ from doctor_workstation.ui.widgets import ( friendly_error, gender_text, get_value, + has_permission, run_async, set_authentication_expired_handler, show_toast, @@ -939,6 +940,11 @@ class ApplicationController(QObject): open_im=open_im, patient_name=patient_name, patient_case=patient_case, + can_ai_assistant=has_permission( + getattr(self.shell_window, "permissions", None), + "tcm.diagnosis/aiAssistant", + default=False, + ), on_open_diagnosis=lambda current_id=diagnosis_id, current_key=call_key: ( self._open_video_diagnosis(current_id, call_key=current_key) ), diff --git a/app/src/doctor_workstation/services/mock_repository.py b/app/src/doctor_workstation/services/mock_repository.py index 023fd9a73..3c40de4ad 100644 --- a/app/src/doctor_workstation/services/mock_repository.py +++ b/app/src/doctor_workstation/services/mock_repository.py @@ -4,6 +4,7 @@ from __future__ import annotations import hashlib import json +import re import struct import zlib from collections.abc import Callable, Mapping, Sequence @@ -2846,11 +2847,22 @@ class DemoDoctorRepository: } ) - def sync_im_chat_messages(self, diagnosis_id: int) -> dict[str, Any]: - """Acknowledge the same asynchronous sync contract in demo mode.""" + def sync_im_chat_messages( + self, diagnosis_id: int, *, scope: str = "", sync_token: str = "" + ) -> dict[str, Any]: + """Complete synthetic archive sync while retaining the legacy receipt.""" self._find_consultation(diagnosis_id) - return {"queued": True, "diagnosis_id": diagnosis_id} + if scope not in {"", "current"}: + raise ValueError("IM sync scope must be empty or current") + if not isinstance(sync_token, str) or ( + sync_token and re.fullmatch(r"[a-f0-9]{48}", sync_token) is None + ): + raise ValueError("IM sync token is invalid") + return { + "queued": True, "diagnosis_id": diagnosis_id, + "completed": True, "phase": "completed", "errors": [], + } def list_diagnosis_appointment_logs(self, diagnosis_id: int) -> list[dict[str, Any]]: """Build demo audit rows from the diagnosis appointments.""" diff --git a/app/src/doctor_workstation/services/repository.py b/app/src/doctor_workstation/services/repository.py index aa3e01765..ec10c3109 100644 --- a/app/src/doctor_workstation/services/repository.py +++ b/app/src/doctor_workstation/services/repository.py @@ -692,8 +692,10 @@ class DoctorRepository(Protocol): ) -> dict[str, Any]: """Return diagnosis IM messages, defaulting to the fast archive-only path.""" - def sync_im_chat_messages(self, diagnosis_id: int) -> Any: - """Queue the server-side IM archive synchronisation job.""" + def sync_im_chat_messages( + self, diagnosis_id: int, *, scope: str = "", sync_token: str = "" + ) -> Any: + """Advance one server-side archive page; inspect completed before using it.""" def list_diagnosis_appointment_logs(self, diagnosis_id: int) -> list[dict[str, Any]]: """Return per-diagnosis registration / cancellation audit rows.""" @@ -2602,12 +2604,27 @@ class RemoteDoctorRepository: ) return dict(_require_mapping(payload, "tcm.diagnosis/getImChatMessages")) - def sync_im_chat_messages(self, diagnosis_id: int) -> Any: - """Queue the confirmed shutdown-function archive sync endpoint.""" + def sync_im_chat_messages( + self, diagnosis_id: int, *, scope: str = "", sync_token: str = "" + ) -> Any: + """Advance a bounded archive page, preserving legacy no-option callers.""" if diagnosis_id <= 0: raise ValueError("diagnosis_id must be positive") - return self.client.post("tcm.diagnosis/triggerImChatSync", {"diagnosis_id": diagnosis_id}) + if scope not in {"", "current"}: + raise ValueError("IM sync scope must be empty or current") + if not isinstance(sync_token, str) or ( + sync_token and re.fullmatch(r"[a-f0-9]{48}", sync_token) is None + ): + raise ValueError("IM sync token is invalid") + payload: dict[str, Any] = {"diagnosis_id": diagnosis_id} + if scope: + payload["scope"] = scope + if sync_token: + payload["sync_token"] = sync_token + return _client_request( + self.client, "post", "tcm.diagnosis/triggerImChatSync", payload, timeout=15.0 + ) def list_diagnosis_appointment_logs(self, diagnosis_id: int) -> list[dict[str, Any]]: """Return registration/cancellation logs from ``guahaoLogList``.""" diff --git a/app/src/doctor_workstation/ui/appointment_drawer.py b/app/src/doctor_workstation/ui/appointment_drawer.py index 19bcadfe1..aba2a6b9b 100644 --- a/app/src/doctor_workstation/ui/appointment_drawer.py +++ b/app/src/doctor_workstation/ui/appointment_drawer.py @@ -23,7 +23,6 @@ from PySide6.QtWidgets import ( QComboBox, QDialog, QFrame, - QGraphicsDropShadowEffect, QGraphicsOpacityEffect, QHBoxLayout, QLabel, @@ -43,6 +42,7 @@ from PySide6.QtWidgets import ( ) from ..core.appointment_modes import APPOINTMENT_MODES +from .design_system import clinical_stylesheet from .theme import main_window_target_rect from .widgets import ( display_text, @@ -84,8 +84,8 @@ QDialog#AppointmentDrawerOverlay QToolButton#AppointmentDrawerClose { min-height: 32px; max-height: 32px; padding: 0; - border: 0; - border-radius: 4px; + border: 1px solid transparent; + border-radius: $ds_radius_control; background-color: transparent; color: #606163; font-size: 22px; @@ -95,6 +95,10 @@ QDialog#AppointmentDrawerOverlay QToolButton#AppointmentDrawerClose { QDialog#AppointmentDrawerOverlay QToolButton#AppointmentDrawerClose:hover { color: #1A1C1F; background-color: #F0F0F0; +} +QDialog#AppointmentDrawerOverlay QToolButton#AppointmentDrawerClose:focus { + border-color: $ds_focus; + background-color: $ds_accent_soft; } QDialog#AppointmentDrawerOverlay QScrollArea#AppointmentDrawerBody, @@ -110,7 +114,7 @@ QDialog#AppointmentDrawerOverlay QWidget#AppointmentDrawerBodyContent { } QDialog#AppointmentDrawerOverlay QLabel[appointmentLabel="true"] { - color: #1A1C1F; + color: $ds_muted; font-size: 14px; font-weight: 500; } @@ -125,7 +129,7 @@ QDialog#AppointmentDrawerOverlay QPlainTextEdit { min-height: 30px; padding: 0 11px; border: 1px solid #EDEDEE; - border-radius: 9px; + border-radius: 10px; background-color: #FFFFFF; color: #1A1C1F; selection-background-color: #EEF1FA; @@ -145,7 +149,14 @@ QDialog#AppointmentDrawerOverlay QPlainTextEdit:hover { QDialog#AppointmentDrawerOverlay QComboBox:focus, QDialog#AppointmentDrawerOverlay QLineEdit:focus, QDialog#AppointmentDrawerOverlay QPlainTextEdit:focus { - border: 2px solid #8B9AD9; + border: 1px solid #8B9AD9; +} +QDialog#AppointmentDrawerOverlay QComboBox:disabled, +QDialog#AppointmentDrawerOverlay QLineEdit:disabled, +QDialog#AppointmentDrawerOverlay QPlainTextEdit:disabled { + color: $ds_disabled; + background-color: $ds_disabled_surface; + border-color: $ds_line; } QDialog#AppointmentDrawerOverlay QComboBox::drop-down { @@ -197,7 +208,7 @@ QDialog#AppointmentDrawerOverlay QPushButton[appointmentDate="true"] { max-height: 38px; padding: 0; border: 1px solid #EDEDEE; - border-radius: 8px; + border-radius: 10px; background-color: #FFFFFF; color: #1A1C1F; font-size: 14px; @@ -221,15 +232,15 @@ QDialog#AppointmentDrawerOverlay QPushButton[appointmentDate="true"]:checked { } QDialog#AppointmentDrawerOverlay QFrame#AppointmentSlotsPanel { - background-color: #F7F7F7; + background-color: $ds_surface_alt; border: 0; - border-radius: 8px; + border-radius: $ds_radius_panel; } QDialog#AppointmentDrawerOverlay QLabel#AppointmentSlotsTitle { color: #1A1C1F; font-size: 15px; - font-weight: 500; + font-weight: 600; } QDialog#AppointmentDrawerOverlay QPushButton#AppointmentRefreshSlots { @@ -247,13 +258,17 @@ QDialog#AppointmentDrawerOverlay QPushButton#AppointmentRefreshSlots { QDialog#AppointmentDrawerOverlay QPushButton#AppointmentRefreshSlots:hover { background-color: #EEF1FA; } +QDialog#AppointmentDrawerOverlay QPushButton#AppointmentRefreshSlots:focus { + background-color: $ds_accent_soft; + border: 1px solid $ds_focus; +} QDialog#AppointmentDrawerOverlay QPushButton[appointmentSlot="true"] { min-width: 110px; min-height: 70px; padding: 0 8px; border: 2px solid #EDEDEE; - border-radius: 8px; + border-radius: 10px; background-color: #FFFFFF; color: #1A1C1F; } @@ -330,25 +345,25 @@ QDialog#AppointmentDrawerOverlay QLabel#AppointmentEmptyText { QDialog#AppointmentDrawerOverlay QFrame#AppointmentAlert[kind="info"] { background-color: #EEF1FA; border: 1px solid #EDEDEE; - border-radius: 9px; + border-radius: 10px; } QDialog#AppointmentDrawerOverlay QFrame#AppointmentAlert[kind="warning"] { background-color: #FFF5E6; border: 1px solid #F6E3C4; - border-radius: 9px; + border-radius: 10px; } QDialog#AppointmentDrawerOverlay QFrame#AppointmentAlert[kind="danger"] { background-color: #FFF1F3; border: 1px solid #F7D7DC; - border-radius: 9px; + border-radius: 10px; } QDialog#AppointmentDrawerOverlay QFrame#AppointmentAlert[kind="success"] { background-color: #EAF9F3; border: 1px solid #D4F0E5; - border-radius: 9px; + border-radius: 10px; } QDialog#AppointmentDrawerOverlay QFrame#AppointmentAlert[kind="info"] QLabel { @@ -378,7 +393,7 @@ QDialog#AppointmentDrawerOverlay QFrame#AppointmentDrawerFooter QPushButton { max-height: 30px; padding: 0 15px; border: 1px solid #EDEDEE; - border-radius: 9px; + border-radius: 10px; background-color: #FFFFFF; color: #1A1C1F; font-size: 13px; @@ -408,9 +423,14 @@ QDialog#AppointmentDrawerOverlay QFrame#AppointmentDrawerFooter QPushButton[prim } QDialog#AppointmentDrawerOverlay QFrame#AppointmentDrawerFooter QPushButton:disabled { - color: #FFFFFF; - border-color: #EDEDEE; - background-color: #8E8F90; + color: $ds_disabled; + border-color: $ds_line; + background-color: $ds_disabled_surface; +} +QDialog#AppointmentDrawerOverlay QFrame#AppointmentDrawerFooter QPushButton[primary="true"]:pressed { + color: $ds_surface; + background-color: $ds_accent_pressed; + border-color: $ds_accent_pressed; } QDialog#AppointmentDrawerOverlay QFrame#AppointmentLoadingOverlay { @@ -487,6 +507,7 @@ _APPOINTMENT_DARK_REPLACEMENTS = ( ) # Light is the default application theme. Keep the replacement table available # for a future explicit dark-mode switch, but do not mutate the light source QSS. +APPOINTMENT_DRAWER_QSS = clinical_stylesheet(APPOINTMENT_DRAWER_QSS) def _as_int(value: Any, default: int = 0) -> int: @@ -733,35 +754,7 @@ class _EmptyIllustration(QWidget): painter.end() -class _HoverLiftButton(QPushButton): - """Button with a subtle two-pixel lift and blue-tinted shadow on hover.""" - - def __init__(self, text: str = "", parent: QWidget | None = None) -> None: - super().__init__(text, parent) - self._lifted = False - self._base_position = QPoint() - - def enterEvent(self, event: QEvent) -> None: # noqa: N802 - Qt API - if self.isEnabled() and not self._lifted: - self._base_position = self.pos() - self.move(self.x(), self.y() - 2) - shadow = QGraphicsDropShadowEffect(self) - shadow.setBlurRadius(12) - shadow.setOffset(0, 4) - shadow.setColor(QColor(26, 28, 31, 72)) - self.setGraphicsEffect(shadow) - self._lifted = True - super().enterEvent(event) - - def leaveEvent(self, event: QEvent) -> None: # noqa: N802 - Qt API - if self._lifted: - self.move(self._base_position) - self.setGraphicsEffect(None) - self._lifted = False - super().leaveEvent(event) - - -class _SlotCard(_HoverLiftButton): +class _SlotCard(QPushButton): """Two-line time card matching Element's independent time/status typography.""" def __init__(self, time_text: str, status_text: str) -> None: @@ -819,8 +812,8 @@ class AppointmentDrawer(QDialog): self._today_blocking = False self._channel_names: dict[str, str] = {} self._doctor_buttons: dict[int, QRadioButton] = {} - self._date_buttons: dict[str, _HoverLiftButton] = {} - self._slot_buttons: dict[str, _HoverLiftButton] = {} + self._date_buttons: dict[str, QPushButton] = {} + self._slot_buttons: dict[str, QPushButton] = {} self._slot_available: dict[str, bool] = {} self._slot_restore_selection = "" self._active_loading = "" @@ -1426,7 +1419,7 @@ class AppointmentDrawer(QDialog): continue label = f"{parsed.toString('MM月dd日')} ({week_days[parsed.dayOfWeek() % 7]})" self.date_combo.addItem(label, value) - button = _HoverLiftButton(label) + button = QPushButton(label) button.setProperty("appointmentDate", True) button.setCheckable(True) button.setFixedSize(130, 40) diff --git a/app/src/doctor_workstation/ui/appointments_style.py b/app/src/doctor_workstation/ui/appointments_style.py index 194fd7bdc..134f8e343 100644 --- a/app/src/doctor_workstation/ui/appointments_style.py +++ b/app/src/doctor_workstation/ui/appointments_style.py @@ -2,143 +2,155 @@ from string import Template +from .design_system import clinical_stylesheet from .reception_style import body_family, heading_family def appointments_stylesheet() -> str: - return Template(_QSS).substitute(body=body_family(), heading=heading_family()) + return clinical_stylesheet(Template(_QSS).safe_substitute(body=body_family(), heading=heading_family())) _QSS = """ -#AppointmentsPage { background: #F3F7FD; color: #273244; } +#AppointmentsPage { background: $ds_canvas; color: $ds_text; } #AppointmentsPage QLabel, #AppointmentsPage QPushButton, #AppointmentsPage QLineEdit, #AppointmentsPage QComboBox, #AppointmentsPage QTabBar, #AppointmentsPage QTableWidget { - font-family: "$body"; font-size: 14px; font-weight: 400; color: #273244; + font-family: "$body"; font-size: 14px; font-weight: 400; color: $ds_text; } #AppointmentsPage QWidget#PageHeader QLabel[role="pageTitle"] { - font-family: "$heading"; font-size: 20px; font-weight: 600; color: #202C3F; + font-family: "$heading"; font-size: 20px; font-weight: 600; color: $ds_heading; } #AppointmentsPage QWidget#PageHeader QLabel[role="muted"], #AppointmentsPage QWidget#PageHeader QLabel[role="breadcrumb"], #AppointmentsPage QWidget#PageHeader QLabel[role="breadcrumbSeparator"], #AppointmentsPage QWidget#PageHeader QLabel[role="breadcrumbCurrent"] { - color: #5D6B80; font-size: 13px; font-weight: 400; + color: $ds_muted; font-size: 13px; font-weight: 400; } #AppointmentsPage QFrame#AppointmentFilterPanel, #AppointmentsPage QFrame#AppointmentMainCard { - background: #FFFFFF; border: 1px solid #DBE5F2; border-radius: 8px; + background: $ds_surface; border: 1px solid $ds_line; border-radius: $ds_radius_panel; } #AppointmentsPage QPushButton { - min-height: 30px; padding: 0 12px; border: 1px solid #DBE5F2; - border-radius: 6px; background: #FFFFFF; + min-height: 30px; padding: 0 12px; border: 1px solid transparent; + border-radius: $ds_radius_control; background: $ds_surface_alt; } -#AppointmentsPage QPushButton:hover { color: #1555B6; background: #F2F7FF; border-color: #B6CDEE; } -#AppointmentsPage QPushButton:pressed { background: #DCEAFF; } -#AppointmentsPage QPushButton:focus { border-color: #75A5F0; } +#AppointmentsPage QPushButton:hover { color: $ds_accent; background: $ds_surface_alt; border-color: $ds_line_strong; } +#AppointmentsPage QPushButton:pressed { background: $ds_accent_soft; } +#AppointmentsPage QPushButton:focus { border-color: $ds_focus; } #AppointmentsPage QPushButton[variant="primary"] { - background: #1769E8; color: #FFFFFF; border-color: #1769E8; + background: $ds_accent; color: $ds_surface; border-color: $ds_accent; } -#AppointmentsPage QPushButton[variant="primary"]:hover { background: #155BCC; } -#AppointmentsPage QPushButton[variant="primary"]:pressed { background: #124EA9; } +#AppointmentsPage QPushButton[variant="primary"]:hover { background: $ds_accent_hover; } +#AppointmentsPage QPushButton[variant="primary"]:pressed { background: $ds_accent_pressed; } +#AppointmentsPage QPushButton[variant="primary"]:focus { border-color: $ds_focus; } #AppointmentsPage QPushButton[variant="danger"] { - color: #B84652; background: #FFFFFF; border-color: #EFC8CE; + color: $ds_danger; background: $ds_danger_soft; border-color: transparent; } -#AppointmentsPage QPushButton[variant="danger"]:hover { background: #FFF0F2; } +#AppointmentsPage QPushButton[variant="danger"]:hover { background: $ds_danger_soft; } +#AppointmentsPage QPushButton[variant="danger"]:pressed { border-color: $ds_danger; } #AppointmentsPage QPushButton[variant="ghost"] { background: transparent; border-color: transparent; } -#AppointmentsPage QPushButton:disabled { - color: #8A97A9; background: #F6F8FC; border-color: #E2E9F2; +#AppointmentsPage QPushButton[variant="ghost"]:hover { background: $ds_accent_soft; } +#AppointmentsPage QPushButton[variant="ghost"]:focus { border-color: $ds_focus; } +#AppointmentsPage QPushButton:disabled, #AppointmentsPage QPushButton[variant="primary"]:disabled, +#AppointmentsPage QPushButton[variant="danger"]:disabled { + color: $ds_disabled; background: $ds_disabled_surface; border-color: $ds_line; } #AppointmentsPage QLineEdit, #AppointmentsPage QComboBox { - min-height: 32px; padding: 0 10px; color: #273244; background: #FFFFFF; - border: 1px solid #DBE5F2; border-radius: 6px; selection-background-color: #DCEAFF; + min-height: 32px; padding: 0 10px; color: $ds_text; background: $ds_surface; + border: 1px solid $ds_line; border-radius: $ds_radius_control; selection-background-color: $ds_accent_soft; } -#AppointmentsPage QLineEdit:focus, #AppointmentsPage QComboBox:focus { border-color: #75A5F0; } +#AppointmentsPage QLineEdit:focus, #AppointmentsPage QComboBox:focus { border-color: $ds_focus; } #AppointmentsPage QLineEdit QToolButton { min-width: 0; min-height: 0; padding: 0; border: 0; background: transparent; } -#AppointmentsPage QLineEdit QToolButton:focus { background: #EAF2FF; } +#AppointmentsPage QLineEdit QToolButton:focus { background: $ds_accent_soft; } #AppointmentsPage QPushButton#AppointmentSearchButton { min-height: 39px; max-height: 39px; min-width: 52px; } #AppointmentsPage QLineEdit#AppointmentPatientSearch { min-height: 39px; max-height: 39px; } #AppointmentsPage QPushButton[appointmentStat="true"] { - min-height: 34px; max-height: 34px; padding: 0 10px; background: #F4F7FC; - border-color: transparent; color: #5D6B80; font-size: 13px; + min-height: 34px; max-height: 34px; padding: 0 10px; background: $ds_canvas; + border-color: transparent; color: $ds_muted; font-size: 13px; } -#AppointmentsPage QPushButton[appointmentStat="true"]:hover { color: #1555B6; background: #EAF2FF; } +#AppointmentsPage QPushButton[appointmentStat="true"]:hover { color: $ds_accent; background: $ds_accent_soft; } #AppointmentsPage QPushButton[appointmentStat="true"]:checked { - color: #FFFFFF; background: #1769E8; border-color: #1769E8; + color: $ds_accent; background: $ds_accent_soft; border-color: transparent; font-weight: 600; } #AppointmentsPage QPushButton[appointmentStatKind="warning"][hasPending="true"]:!checked { - color: #9C681F; background: #FFF6E7; border-color: #EEDCBF; + color: $ds_warning; background: $ds_warning_soft; border-color: $ds_warning_soft; } -#AppointmentsPage QLabel#FilterRowLabel { color: #5D6B80; font-size: 13px; } -#AppointmentsPage QLabel#FilterDivider { color: #DBE5F2; padding: 0 10px; } +#AppointmentsPage QLabel#FilterRowLabel { color: $ds_muted; font-size: 13px; } +#AppointmentsPage QLabel#FilterDivider { color: $ds_line; padding: 0 10px; } #AppointmentsPage QTabBar#AppointmentStatusTabs::tab { - min-width: 52px; min-height: 32px; padding: 0 12px; color: #5D6B80; + min-width: 52px; min-height: 32px; padding: 0 12px; color: $ds_muted; background: transparent; border: 0; border-bottom: 2px solid transparent; font-size: 13px; } -#AppointmentsPage QTabBar#AppointmentStatusTabs::tab:hover { color: #1555B6; background: #F7FAFE; } +#AppointmentsPage QTabBar#AppointmentStatusTabs::tab:hover { color: $ds_accent; background: $ds_surface_alt; } #AppointmentsPage QTabBar#AppointmentStatusTabs::tab:selected { - color: #1769E8; background: transparent; border-bottom-color: #1769E8; + color: $ds_accent; background: transparent; border-bottom-color: $ds_accent; } #AppointmentsPage QPushButton[filterChoice="true"] { - min-height: 30px; max-height: 30px; padding: 0 12px; color: #5D6B80; + min-height: 30px; max-height: 30px; padding: 0 12px; color: $ds_muted; background: transparent; border-color: transparent; font-size: 13px; } -#AppointmentsPage QPushButton[filterChoice="true"]:checked { color: #1555B6; background: #EAF2FF; } +#AppointmentsPage QPushButton[filterChoice="true"]:checked { color: $ds_accent; background: $ds_accent_soft; } +#AppointmentsPage QPushButton[filterChoice="true"]:focus, +#AppointmentsPage QPushButton[appointmentStat="true"]:focus { border-color: $ds_focus; } #AppointmentsPage QFrame#AppointmentToolbar { background: transparent; border: 0; } #AppointmentsPage QPushButton[compactAction="true"] { min-height: 36px; max-height: 36px; padding: 0 17px; font-size: 13px; } #AppointmentsPage QFrame#AppointmentToolbar QPushButton[variant="secondary"]:enabled { - color: #1769E8; border-color: #ADC8F0; + color: $ds_text; border-color: transparent; } +#AppointmentsPage QFrame#AppointmentToolbar QPushButton[variant="secondary"]:hover { color: $ds_accent; background: $ds_accent_soft; } +#AppointmentsPage QFrame#AppointmentToolbar QPushButton[variant="secondary"]:focus { border-color: $ds_focus; } #AppointmentsPage QTableWidget#AppointmentTable { - background: #FFFFFF; alternate-background-color: #FFFFFF; border: 0; border-radius: 0; - gridline-color: #E6EDF6; selection-background-color: #EAF2FF; selection-color: #273244; + background: $ds_surface; alternate-background-color: $ds_surface; border: 0; border-radius: 0; + gridline-color: $ds_line; selection-background-color: $ds_accent_soft; selection-color: $ds_text; } -#AppointmentsPage QTableWidget#AppointmentTable::item { padding: 0; border: 0; border-bottom: 1px solid #E6EDF6; } -#AppointmentsPage QTableWidget#AppointmentTable::item:selected { background: #EAF2FF; color: #273244; } +#AppointmentsPage QTableWidget#AppointmentTable::item { padding: 0; border: 0; border-bottom: 1px solid $ds_line; } +#AppointmentsPage QTableWidget#AppointmentTable::item:selected { background: $ds_accent_soft; color: $ds_text; } #AppointmentsPage QTableWidget#AppointmentTable QHeaderView::section { - min-height: 40px; padding: 0; background: #F5F8FD; color: #5D6B80; - border: 0; border-top: 1px solid #E1E9F4; border-bottom: 1px solid #E1E9F4; + min-height: 40px; padding: 0; background: $ds_surface_alt; color: $ds_muted; + border: 0; border-top: 1px solid $ds_line; border-bottom: 1px solid $ds_line; font-family: "$body"; font-size: 13px; font-weight: 400; } #AppointmentsPage QWidget[appointmentSelectionHost="true"] { background: transparent; border-left: 3px solid transparent; } -#AppointmentsPage QWidget[appointmentSelectionHost="true"][selected="true"] { border-left-color: #1769E8; } +#AppointmentsPage QWidget[appointmentSelectionHost="true"][selected="true"] { border-left-color: $ds_accent; } #AppointmentsPage QCheckBox[appointmentSelector="true"]::indicator { - width: 16px; height: 16px; background: #FFFFFF; border: 1px solid #C8D5E6; border-radius: 3px; + width: 16px; height: 16px; background: $ds_surface; border: 1px solid $ds_line_strong; border-radius: 3px; } -#AppointmentsPage QCheckBox[appointmentSelector="true"]::indicator:checked { background: #1769E8; border-color: #1769E8; } +#AppointmentsPage QCheckBox[appointmentSelector="true"]::indicator:checked { background: $ds_accent; border-color: $ds_accent; } #AppointmentsPage QWidget[appointmentInfoHost="true"], #AppointmentsPage QWidget[appointmentImHost="true"] { background: transparent; } #AppointmentsPage QLabel[tableAppointmentStatus="true"] { - min-height: 20px; max-height: 20px; padding: 0 6px; color: #1555B6; - background: #EAF2FF; border-radius: 4px; font-size: 13px; + min-height: 20px; max-height: 20px; padding: 0 6px; color: $ds_accent; + background: $ds_accent_soft; border-radius: $ds_radius_small; font-size: 13px; } -#AppointmentsPage QLabel[tableAppointmentStatusKind="warning"] { color: #9C681F; background: #FFF3DD; } -#AppointmentsPage QLabel[tableAppointmentStatusKind="muted"] { color: #66758A; background: #EEF2F7; } -#AppointmentsPage QLabel[tableAppointmentMeta="true"] { color: #5D6B80; font-size: 13px; } +#AppointmentsPage QLabel[tableAppointmentStatusKind="warning"] { color: $ds_warning; background: $ds_warning_soft; } +#AppointmentsPage QLabel[tableAppointmentStatusKind="muted"] { color: $ds_muted; background: $ds_disabled_surface; } +#AppointmentsPage QLabel[tableAppointmentMeta="true"] { color: $ds_muted; font-size: 13px; } #AppointmentsPage QPushButton[tableCancelAction="true"] { - min-height: 20px; max-height: 20px; padding: 0 5px; color: #B84652; - background: #FFF0F2; border: 0; border-radius: 4px; font-size: 13px; + min-height: 20px; max-height: 20px; padding: 0 5px; color: $ds_danger; + background: $ds_danger_soft; border: 0; border-radius: $ds_radius_small; font-size: 13px; } #AppointmentsPage QPushButton[appointmentImAction="true"] { min-width: 62px; min-height: 32px; max-height: 32px; padding: 0 10px; - color: #1555B6; background: #EAF2FF; border-color: #C9DCF7; font-size: 13px; + color: $ds_accent; background: $ds_accent_soft; border-color: transparent; font-size: 13px; } -#AppointmentsPage QPushButton[appointmentImAction="true"]:hover { color: #FFFFFF; background: #1769E8; } -#AppointmentsPage QPushButton[appointmentImAction="true"]:disabled { color: #8A97A9; background: #F3F6FB; border-color: #DFE7F2; } -#AppointmentsPage QWidget#Pager { background: #FFFFFF; border: 0; border-top: 1px solid #E1E9F4; } -#AppointmentsPage QWidget#Pager QLabel { color: #5D6B80; font-size: 13px; border: 0; } +#AppointmentsPage QPushButton[appointmentImAction="true"]:hover { color: $ds_accent_hover; border-color: $ds_line_strong; } +#AppointmentsPage QPushButton[appointmentImAction="true"]:focus { border-color: $ds_focus; } +#AppointmentsPage QPushButton[appointmentImAction="true"]:disabled { color: $ds_disabled; background: $ds_disabled_surface; border-color: $ds_line; } +#AppointmentsPage QWidget#Pager { background: $ds_surface; border: 0; border-top: 1px solid $ds_line; } +#AppointmentsPage QWidget#Pager QLabel { color: $ds_muted; font-size: 13px; border: 0; } #AppointmentsPage QWidget#Pager QPushButton { min-width: 30px; max-width: 30px; min-height: 32px; max-height: 32px; - padding: 0; border: 1px solid #DBE5F2; background: #FFFFFF; color: #5D6B80; font-size: 13px; + padding: 0; border: 1px solid $ds_line; background: $ds_surface; color: $ds_muted; font-size: 13px; } -#AppointmentsPage QWidget#Pager QPushButton[active="true"] { color: #FFFFFF; background: #1769E8; border-color: #1769E8; } -#AppointmentsPage QWidget#Pager QPushButton:disabled { color: #9AA6B7; background: #F7F9FC; } +#AppointmentsPage QWidget#Pager QPushButton[active="true"] { color: $ds_accent; background: $ds_accent_soft; border-color: transparent; font-weight: 600; } +#AppointmentsPage QWidget#Pager QPushButton:focus { border-color: $ds_focus; } +#AppointmentsPage QWidget#Pager QPushButton:disabled { color: $ds_disabled; background: $ds_surface_alt; } """ diff --git a/app/src/doctor_workstation/ui/chat_notifications.py b/app/src/doctor_workstation/ui/chat_notifications.py index c5f2526fa..a29f21717 100644 --- a/app/src/doctor_workstation/ui/chat_notifications.py +++ b/app/src/doctor_workstation/ui/chat_notifications.py @@ -24,6 +24,7 @@ from PySide6.QtWidgets import ( QWidget, ) +from .design_system import clinical_stylesheet from .widgets import display_text, first_value, run_async # 后台 ChatNotifyLogic 写入的三种 type。 @@ -260,7 +261,7 @@ class ChatNotificationCenter(QWidget): super().__init__(host) self.repository = repository self.setObjectName("ChatNotifyLayer") - self.setStyleSheet(CHAT_NOTIFICATION_QSS) + self.setStyleSheet(clinical_stylesheet(CHAT_NOTIFICATION_QSS)) self.setAttribute(Qt.WidgetAttribute.WA_TransparentForMouseEvents, False) self._cards: dict[str, _NotificationCard] = {} self._pending: list[ChatNotification] = [] diff --git a/app/src/doctor_workstation/ui/consultations_style.py b/app/src/doctor_workstation/ui/consultations_style.py index 92359094d..286713d09 100644 --- a/app/src/doctor_workstation/ui/consultations_style.py +++ b/app/src/doctor_workstation/ui/consultations_style.py @@ -2,59 +2,67 @@ from string import Template +from .design_system import clinical_stylesheet from .reception_style import body_family, heading_family def consultations_stylesheet() -> str: - return Template(_QSS).substitute(body=body_family(), heading=heading_family()) + return clinical_stylesheet(Template(_QSS).safe_substitute(body=body_family(), heading=heading_family())) _QSS = """ #DiagnosisIndex, #DiagnosisIndexContent, #DiagnosisPageScroll { - background: #F3F7FD; color: #273244; border: 0; + background: $ds_canvas; color: $ds_text; border: 0; } #DiagnosisIndex QLabel, #DiagnosisIndex QPushButton, #DiagnosisIndex QToolButton, #DiagnosisIndex QLineEdit, #DiagnosisIndex QComboBox, #DiagnosisIndex QDateEdit, #DiagnosisIndex QSpinBox, #DiagnosisIndex QTableView { - font-family: "$body"; font-size: 14px; font-weight: 400; color: #273244; + font-family: "$body"; font-size: 14px; font-weight: 400; color: $ds_text; } #DiagnosisIndex QWidget#PageHeader QLabel[role="pageTitle"] { - font-family: "$heading"; font-size: 20px; font-weight: 600; color: #202C3F; + font-family: "$heading"; font-size: 20px; font-weight: 600; color: $ds_heading; } #DiagnosisIndex QLabel[role="muted"], #DiagnosisIndex QLabel[role="breadcrumb"], #DiagnosisIndex QLabel[role="breadcrumbCurrent"], #DiagnosisIndex QLabel[role="breadcrumbSeparator"], #DiagnosisIndex QLabel[filterGroup="true"], #DiagnosisIndex QLabel[pagerMuted="true"] { - color: #5D6B80; font-size: 13px; + color: $ds_muted; font-size: 13px; } #DiagnosisIndex QFrame#DiagnosisFilterCard, #DiagnosisIndex QFrame#DiagnosisListCard { - background: #FFFFFF; border: 1px solid #DBE5F2; border-radius: 8px; + background: $ds_surface; border: 1px solid $ds_line; border-radius: $ds_radius_panel; } #DiagnosisIndex QFrame#DiagnosisStatusCard, #DiagnosisIndex QFrame#DiagnosisQuickFilters, #DiagnosisIndex QFrame#DiagnosisListToolbar { background: transparent; border: 0; } #DiagnosisIndex QFrame#DiagnosisAdvancedFilters { - background: transparent; border: 0; border-top: 1px solid #E6EDF6; border-radius: 0; + background: transparent; border: 0; border-top: 1px solid $ds_line; border-radius: 0; } #DiagnosisIndex QPushButton { - min-height: 34px; padding: 0 13px; border: 1px solid #DBE5F2; - border-radius: 6px; background: #FFFFFF; + min-height: 34px; padding: 0 13px; border: 1px solid transparent; + border-radius: $ds_radius_control; background: $ds_surface_alt; } -#DiagnosisIndex QPushButton:hover { color: #1555B6; background: #F2F7FF; border-color: #B6CDEE; } -#DiagnosisIndex QPushButton:pressed { background: #DCEAFF; } -#DiagnosisIndex QPushButton:focus { border-color: #75A5F0; } -#DiagnosisIndex QPushButton[variant="primary"] { color: #FFFFFF; background: #1769E8; border-color: #1769E8; } -#DiagnosisIndex QPushButton[variant="primary"]:hover { background: #155BCC; } -#DiagnosisIndex QPushButton[consultationTool="true"] { color: #1555B6; border-color: #C2D5EF; } -#DiagnosisIndex QPushButton[consultationDanger="true"] { color: #BE4B58; border-color: #EBCDD2; } -#DiagnosisIndex QPushButton:disabled, #DiagnosisIndex QPushButton[consultationDanger="true"]:disabled { - color: #8A97A9; background: #F6F8FC; border-color: #E2E9F2; +#DiagnosisIndex QPushButton:hover { color: $ds_accent; background: $ds_surface_alt; border-color: $ds_line_strong; } +#DiagnosisIndex QPushButton:pressed { background: $ds_accent_soft; } +#DiagnosisIndex QPushButton:focus { border-color: $ds_focus; } +#DiagnosisIndex QPushButton[variant="primary"] { color: $ds_surface; background: $ds_accent; border-color: $ds_accent; } +#DiagnosisIndex QPushButton[variant="primary"]:hover { background: $ds_accent_hover; } +#DiagnosisIndex QPushButton[variant="primary"]:pressed { background: $ds_accent_pressed; } +#DiagnosisIndex QPushButton[variant="primary"]:focus { border-color: $ds_focus; } +#DiagnosisIndex QPushButton[consultationTool="true"] { color: $ds_text; border-color: transparent; } +#DiagnosisIndex QPushButton[consultationTool="true"]:hover { color: $ds_accent; background: $ds_accent_soft; } +#DiagnosisIndex QPushButton[consultationDanger="true"] { color: $ds_danger; background: $ds_danger_soft; border-color: transparent; } +#DiagnosisIndex QPushButton[consultationDanger="true"]:hover { border-color: $ds_danger; } +#DiagnosisIndex QPushButton[consultationTool="true"]:focus, +#DiagnosisIndex QPushButton[consultationDanger="true"]:focus { border-color: $ds_focus; } +#DiagnosisIndex QPushButton:disabled, #DiagnosisIndex QPushButton[consultationDanger="true"]:disabled, +#DiagnosisIndex QPushButton[variant="primary"]:disabled, #DiagnosisIndex QPushButton[consultationTool="true"]:disabled { + color: $ds_disabled; background: $ds_disabled_surface; border-color: $ds_line; } #DiagnosisIndex QLineEdit, #DiagnosisIndex QComboBox, #DiagnosisIndex QDateEdit, #DiagnosisIndex QSpinBox { - min-height: 32px; padding: 0 10px; color: #273244; background: #FFFFFF; - border: 1px solid #DBE5F2; border-radius: 6px; selection-background-color: #DCEAFF; + min-height: 32px; padding: 0 10px; color: $ds_text; background: $ds_surface; + border: 1px solid $ds_line; border-radius: $ds_radius_control; selection-background-color: $ds_accent_soft; font-size: 13px; } #DiagnosisIndex QLineEdit:focus, #DiagnosisIndex QComboBox:focus, -#DiagnosisIndex QDateEdit:focus, #DiagnosisIndex QSpinBox:focus { border-color: #75A5F0; } +#DiagnosisIndex QDateEdit:focus, #DiagnosisIndex QSpinBox:focus { border-color: $ds_focus; } #DiagnosisIndex QLineEdit QToolButton { min-width: 0; min-height: 0; padding: 0; border: 0; background: transparent; } @@ -62,70 +70,77 @@ _QSS = """ width: 22px; border: 0; background: transparent; } #DiagnosisIndex QComboBox QAbstractItemView { - color: #273244; background: #FFFFFF; border: 1px solid #DBE5F2; - selection-background-color: #EAF2FF; selection-color: #1555B6; outline: 0; + color: $ds_text; background: $ds_surface; border: 1px solid $ds_line; + selection-background-color: $ds_accent_soft; selection-color: $ds_accent; outline: 0; } #DiagnosisIndex QWidget#DiagnosisStatusSearch QLineEdit, #DiagnosisIndex QWidget#DiagnosisStatusSearch QPushButton { min-height: 39px; max-height: 39px; } #DiagnosisIndex QToolButton { min-width: 0; min-height: 0; border: 0; padding: 0; background: transparent; } #DiagnosisIndex QToolButton[diagnosisChip="true"] { min-height: 32px; max-height: 32px; padding: 0 14px; border: 1px solid transparent; - border-radius: 5px; color: #5D6B80; background: transparent; font-size: 13px; + border-radius: $ds_radius_control; color: $ds_muted; background: transparent; font-size: 13px; } -#DiagnosisIndex QToolButton[diagnosisChip="true"]:hover { background: #F2F7FF; color: #1555B6; } -#DiagnosisIndex QToolButton[diagnosisChip="true"]:checked { background: #1769E8; color: #FFFFFF; } -#DiagnosisIndex QToolButton[dateChoice="true"] { padding: 0 17px; border-color: #E1E9F4; } -#DiagnosisIndex QToolButton[dateChoice="true"]:checked { border-color: #1769E8; } +#DiagnosisIndex QToolButton[diagnosisChip="true"]:hover { background: $ds_surface_alt; color: $ds_accent; } +#DiagnosisIndex QToolButton[diagnosisChip="true"]:checked { background: $ds_accent_soft; color: $ds_accent; font-weight: 600; } +#DiagnosisIndex QToolButton[dateChoice="true"] { padding: 0 17px; background: $ds_surface_alt; border-color: transparent; } +#DiagnosisIndex QToolButton[dateChoice="true"]:checked { background: $ds_accent_soft; border-color: transparent; } +#DiagnosisIndex QToolButton[diagnosisChip="true"]:focus { border-color: $ds_focus; } #DiagnosisIndex QToolButton[statusTab="true"] { min-height: 44px; max-height: 44px; padding: 0 20px; border: 0; border-bottom: 2px solid transparent; border-radius: 0; background: transparent; } #DiagnosisIndex QToolButton[statusTab="true"]:checked { - color: #1769E8; background: transparent; border-bottom-color: #1769E8; + color: $ds_accent; background: transparent; border-bottom-color: $ds_accent; } +#DiagnosisIndex QToolButton[statusTab="true"]:focus { background: $ds_accent_soft; } #DiagnosisIndex QToolButton#DiagnosisMoreFilter { - min-height: 32px; padding: 0 6px; color: #5D6B80; font-size: 13px; + min-height: 32px; padding: 0 6px; color: $ds_muted; font-size: 13px; } -#DiagnosisIndex QToolButton#DiagnosisMoreFilter:hover { color: #1769E8; background: #F2F7FF; } -#DiagnosisIndex QFrame#DiagnosisFilterDivider { min-width: 1px; max-width: 1px; min-height: 20px; background: #E1E9F4; border: 0; } +#DiagnosisIndex QToolButton#DiagnosisMoreFilter:hover { color: $ds_accent; background: $ds_surface_alt; } +#DiagnosisIndex QFrame#DiagnosisFilterDivider { min-width: 1px; max-width: 1px; min-height: 20px; background: $ds_line; border: 0; } #DiagnosisIndex QFrame#DiagnosisDateRange { - background: #FFFFFF; border: 1px solid #DBE5F2; border-radius: 6px; + background: $ds_surface; border: 1px solid $ds_line; border-radius: $ds_radius_control; } #DiagnosisIndex QDateEdit[diagnosisRangePart="true"] { min-height: 30px; padding: 0 4px; border: 0; } #DiagnosisIndex QTableView { - background: #FFFFFF; alternate-background-color: #FFFFFF; border: 0; border-radius: 0; - gridline-color: #E6EDF6; selection-background-color: #EAF2FF; selection-color: #273244; + background: $ds_surface; alternate-background-color: $ds_surface; border: 0; border-radius: 0; + gridline-color: $ds_line; selection-background-color: $ds_accent_soft; selection-color: $ds_text; } #DiagnosisIndex QTableView QHeaderView::section { - min-height: 41px; padding: 0; background: #F5F8FD; color: #5D6B80; - border: 0; border-bottom: 1px solid #E1E9F4; + min-height: 41px; padding: 0; background: $ds_surface_alt; color: $ds_muted; + border: 0; border-bottom: 1px solid $ds_line; font-family: "$body"; font-size: 13px; font-weight: 400; } #DiagnosisIndex QToolButton[rowLink], #DiagnosisIndex QToolButton[appointmentCancel="true"] { - color: #1769E8; min-height: 26px; padding: 0 4px; border: 0; background: transparent; font-size: 13px; + color: $ds_accent; min-height: 26px; padding: 0 4px; border: 1px solid transparent; + border-radius: $ds_radius_small; background: transparent; font-size: 13px; } -#DiagnosisIndex QToolButton[appointmentCancel="true"] { color: #BE4B58; } -#DiagnosisIndex QToolButton[rowLink]:hover { color: #1555B6; background: #DCEAFF; border-radius: 4px; } +#DiagnosisIndex QToolButton[appointmentCancel="true"] { color: $ds_danger; } +#DiagnosisIndex QToolButton[appointmentCancel="true"]:hover { background: $ds_danger_soft; } +#DiagnosisIndex QToolButton[rowLink]:hover { color: $ds_accent; background: $ds_accent_soft; border-radius: $ds_radius_small; } +#DiagnosisIndex QToolButton[rowLink]:focus, +#DiagnosisIndex QToolButton[appointmentCancel="true"]:focus { border-color: $ds_focus; } #DiagnosisIndex QToolButton[rowLink="muted"], #DiagnosisIndex QLabel[fixedMuted="true"] { - color: #5D6B80; font-size: 13px; + color: $ds_muted; font-size: 13px; } #DiagnosisIndex QToolButton#DiagnosisRowMore { padding-right: 18px; } #DiagnosisIndex QWidget#DiagnosisFixedCell { background: transparent; } -#DiagnosisIndex QLabel#DiagnosisTableEmpty { color: #5D6B80; background: #FFFFFF; } -#DiagnosisIndex QLabel#DiagnosisTableEmpty[stateKind="error"] { color: #BE4B58; } -#DiagnosisIndex QTableView#DiagnosisFixedTable { border-left: 1px solid #E1E9F4; } -#DiagnosisIndex QWidget#DiagnosisPager { background: #FFFFFF; border-top: 1px solid #E6EDF6; } +#DiagnosisIndex QLabel#DiagnosisTableEmpty { color: $ds_muted; background: $ds_surface; } +#DiagnosisIndex QLabel#DiagnosisTableEmpty[stateKind="error"] { color: $ds_danger; } +#DiagnosisIndex QTableView#DiagnosisFixedTable { border-left: 1px solid $ds_line; } +#DiagnosisIndex QWidget#DiagnosisPager { background: $ds_surface; border-top: 1px solid $ds_line; } #DiagnosisIndex QToolButton[pagerButton="true"] { min-width: 30px; max-width: 30px; min-height: 30px; max-height: 30px; - border: 1px solid #DBE5F2; border-radius: 5px; color: #5D6B80; background: #FFFFFF; + border: 1px solid $ds_line; border-radius: $ds_radius_control; color: $ds_muted; background: $ds_surface; } -#DiagnosisIndex QToolButton[pagerButton="true"][active="true"] { color: #FFFFFF; background: #1769E8; border-color: #1769E8; } -#DiagnosisIndex QToolButton[pagerButton="true"]:disabled { color: #A4B0C0; background: #F6F8FC; } +#DiagnosisIndex QToolButton[pagerButton="true"][active="true"] { color: $ds_accent; background: $ds_accent_soft; border-color: transparent; font-weight: 600; } +#DiagnosisIndex QToolButton[pagerButton="true"]:focus { border-color: $ds_focus; } +#DiagnosisIndex QToolButton[pagerButton="true"]:disabled { color: $ds_disabled; background: $ds_disabled_surface; } #DiagnosisIndex QComboBox#DiagnosisPageSize { min-width: 95px; min-height: 30px; } #DiagnosisIndex QSpinBox#DiagnosisPageJumper { min-height: 30px; padding: 0 8px; } -#DiagnosisIndex QScrollBar:vertical { background: #F4F7FC; width: 7px; margin: 0; } -#DiagnosisIndex QScrollBar:horizontal { background: #F4F7FC; height: 7px; margin: 0; } -#DiagnosisIndex QScrollBar::handle { background: #C8D5E6; border-radius: 3px; min-width: 24px; min-height: 24px; } +#DiagnosisIndex QScrollBar:vertical { background: $ds_canvas; width: 7px; margin: 0; } +#DiagnosisIndex QScrollBar:horizontal { background: $ds_canvas; height: 7px; margin: 0; } +#DiagnosisIndex QScrollBar::handle { background: $ds_line_strong; border-radius: 3px; min-width: 24px; min-height: 24px; } #DiagnosisIndex QScrollBar::add-line, #DiagnosisIndex QScrollBar::sub-line { width: 0; height: 0; } #DiagnosisIndex QScrollBar::add-page, #DiagnosisIndex QScrollBar::sub-page { background: transparent; } """ diff --git a/app/src/doctor_workstation/ui/design_system.py b/app/src/doctor_workstation/ui/design_system.py new file mode 100644 index 000000000..0319c8a9e --- /dev/null +++ b/app/src/doctor_workstation/ui/design_system.py @@ -0,0 +1,76 @@ +"""Clinical desktop design tokens, shared by native pages and dialog chrome. + +Keep data-series colours and video pixels outside this palette. Existing scoped +QSS can adopt the system without changing selectors, layout or permissions. +New rules should use the named ``$ds_*`` tokens rather than legacy colours. +""" + +from __future__ import annotations + +import re +from string import Template + +PALETTE = { + "canvas": "#F5F7FA", + "surface": "#FFFFFF", + "surface_alt": "#F7F9FC", + "sidebar": "#F0F3F8", + "line": "#E6EAF0", + "line_strong": "#D4DCE8", + "heading": "#223047", + "text": "#344258", + "muted": "#647287", + "disabled": "#8B96A6", + "disabled_surface": "#F0F2F5", + "accent": "#4267B2", + "accent_hover": "#355995", + "accent_pressed": "#2C4C82", + "accent_soft": "#EAF0FB", + "focus": "#6D8CCB", + "success": "#287B65", + "success_soft": "#EDF7F2", + "warning": "#96601D", + "warning_soft": "#FBF4E8", + "danger": "#B54A59", + "danger_soft": "#FCF0F2", +} + +RADII = {"small": 6, "control": 10, "panel": 16, "window": 20} +SPACING = {"small": 8, "control": 12, "group": 16, "section": 24} + +TOKENS = {f"ds_{name}": value for name, value in PALETTE.items()} +TOKENS.update({f"ds_radius_{name}": f"{value}px" for name, value in RADII.items()}) +TOKENS.update({f"ds_space_{name}": f"{value}px" for name, value in SPACING.items()}) + +# Explicit migration of the two existing native palettes. This adapter only +# touches six-digit colour literals; selectors and metrics stay page-owned. +_LEGACY_ROLES = { + "accent": ("1769E8", "4F63D9", "5761F4", "5267DF"), + "accent_hover": ("155BCC", "1555B6", "4156C4", "4356C4", "4055CA"), + "accent_pressed": ("124EA9", "354BB4"), + "accent_soft": ("EAF2FF", "EEF1FA", "EEF0FF", "F0F2FF", "DCEAFF", "EDF0FC"), + "focus": ("75A5F0", "8B9AD9"), + "canvas": ("F3F7FD", "F4F6FA", "F6F6F6"), + "surface_alt": ("F7F7F7", "F7FAFE", "F5F8FD", "F7F9FE", "F2F7FF"), + "sidebar": ("EDF4FF",), + "line": ("DBE5F2", "EDEDEE", "E5ECF6", "E6EDF6", "E7EDF7", "EDF0F5", "E7EBF2", "E6EAF5"), + "line_strong": ("E4E4E5", "C8D5E6", "C9DCF7", "ADC8F0", "B6CDEE"), + "heading": ("1A1C1F", "202C3F", "111F46"), + "text": ("273244", "263551", "24334A", "233149", "3F4E75"), + "muted": ("606163", "6A6B6D", "5D6B80", "7886AA", "708097"), + "disabled": ("8E8F90", "8A97A9", "9AA6B7"), + "disabled_surface": ("F2F2F2", "F0F0F0"), + "success_soft": ("EEF7F3", "EAF9F3"), + "warning": ("A9691D", "9C681F"), + "warning_soft": ("FCF5E9", "FFF5E6", "FFF6E7"), + "danger": ("BE4B58", "B84652"), + "danger_soft": ("FFF0F2", "FFF1F3"), +} +_LEGACY = {colour.lower(): PALETTE[role] for role, colours in _LEGACY_ROLES.items() for colour in colours} +_HEX = re.compile(r"#([0-9a-fA-F]{6})(?![0-9a-fA-F])") + + +def clinical_stylesheet(source: str) -> str: + """Resolve clinical tokens and migrate known legacy light-theme colours.""" + resolved = Template(source).safe_substitute(TOKENS) + return _HEX.sub(lambda match: _LEGACY.get(match[1].lower(), match[0]), resolved) diff --git a/app/src/doctor_workstation/ui/diagnosis_drawer.py b/app/src/doctor_workstation/ui/diagnosis_drawer.py index 231731f30..38dae4767 100644 --- a/app/src/doctor_workstation/ui/diagnosis_drawer.py +++ b/app/src/doctor_workstation/ui/diagnosis_drawer.py @@ -64,6 +64,7 @@ from PySide6.QtWidgets import ( ) from .chat_items import ChatItem, parse_chat_item +from .design_system import PALETTE, clinical_stylesheet from .diagnosis_editors import FlowLayout from .diagnosis_media import shared_image_manager from .diagnosis_terms import FIELD_DICTIONARIES, format_timestamp, shared_terms @@ -80,10 +81,7 @@ QFrame#DiagnosisDrawer { border-left: 1px solid #EDEDEE; } QFrame#DiagnosisDrawerHeader { - background-color: qlineargradient( - x1:0, y1:0, x2:0, y2:1, - stop:0 #FFFFFF, stop:1 #F7F7F7 - ); + background-color: #FFFFFF; border-bottom: 1px solid #EDEDEE; } QFrame#DiagnosisDrawerFooter { @@ -105,7 +103,7 @@ QLabel#DiagnosisDrawerModeBadge, QLabel#DiagnosisReadonlyStatus, QLabel[diagnosisTag="true"] { padding: 4px 9px; - border-radius: 9px; + border-radius: $ds_radius_small; font-size: 12px; font-weight: 500; } @@ -159,8 +157,8 @@ QDialog QPushButton:pressed { border-color: #354BB4; } QDialog QPushButton:disabled { - color: #E4E4E5; - background-color: #FFFFFF; + color: $ds_disabled; + background-color: $ds_disabled_surface; border-color: #EDEDEE; } QDialog QPushButton[variant="primary"] { @@ -176,9 +174,9 @@ QDialog QPushButton[variant="primary"]:focus { border-color: #4156C4; } QDialog QPushButton[variant="primary"]:disabled { - color: #FFFFFF; - background-color: #F0F0F0; - border-color: #F0F0F0; + color: $ds_disabled; + background-color: $ds_disabled_surface; + border-color: $ds_line; } QDialog QPushButton[variant="secondary"] { color: #4F63D9; @@ -267,9 +265,9 @@ QDialog#DiagnosisDialogRoot QPushButton#DiagnosisSaveButton:focus { border-color: #4156C4; } QDialog#DiagnosisDialogRoot QPushButton#DiagnosisSaveButton:disabled { - color: #FFFFFF; - background-color: #F0F0F0; - border-color: #F0F0F0; + color: $ds_disabled; + background-color: $ds_disabled_surface; + border-color: $ds_line; } QDialog#DiagnosisDialogRoot QPushButton#DiagnosisFooterCloseButton { color: #606163; @@ -383,10 +381,10 @@ QFrame#DiagnosisFormHost { QFrame[diagnosisSection="true"] { background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 12px; + border-radius: 16px; } QLabel[diagnosisFieldLabel="true"] { - color: #1A1C1F; + color: $ds_muted; font-size: 12px; font-weight: 500; } @@ -426,7 +424,7 @@ QDoubleSpinBox[diagnosisField="true"]:focus, QSpinBox[diagnosisField="true"]:focus, QTimeEdit[diagnosisField="true"]:focus { border: 1px solid #8B9AD9; - background-color: #F7F7F7; + background-color: $ds_surface; } QLineEdit[diagnosisField="true"][invalid="true"], QComboBox[diagnosisField="true"][invalid="true"], @@ -452,8 +450,8 @@ QLabel#DiagnosisSectionTitle { background-color: transparent; border: 0; padding: 0; - font-size: 13px; - font-weight: 500; + font-size: 14px; + font-weight: 600; letter-spacing: 0.02em; } QFrame#DiagnosisSectionAccent { @@ -470,9 +468,9 @@ QFrame#DiagnosisReadonlyPage { background-color: #F6F6F6; } QFrame#DiagnosisReadonlyHero { - background-color: #F7F7F7; - border: 1px solid #F0F0F0; - border-radius: 12px; + background-color: $ds_surface; + border: 1px solid $ds_line; + border-radius: $ds_radius_panel; } QLabel#DiagnosisReadonlyTitle { color: #1A1C1F; @@ -542,7 +540,7 @@ QFrame#DiagnosisReadonlyCaseCard, QFrame[diagnosisReadonlyCard="true"] { background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 14px; + border-radius: 16px; } QLabel#DiagnosisReadonlyCardTitle { color: #1A1C1F; @@ -771,7 +769,7 @@ QWidget[diagnosisChoiceHost="true"] QPushButton { color: #1A1C1F; background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 999px; + border-radius: 10px; font-size: 12px; } QWidget[diagnosisChoiceHost="true"] QPushButton:hover, @@ -1068,6 +1066,7 @@ _DIAGNOSIS_BLUE_REPLACEMENTS = ( ) for _source_color, _theme_color in _DIAGNOSIS_BLUE_REPLACEMENTS: DIAGNOSIS_QSS = DIAGNOSIS_QSS.replace(_source_color, _theme_color) +DIAGNOSIS_QSS = clinical_stylesheet(DIAGNOSIS_QSS) def _text(value: Any, default: str = "—") -> str: @@ -1147,12 +1146,19 @@ class DiagnosisSwitch(QAbstractButton): track = QRectF(1, 3, self.width() - 2, self.height() - 6) checked = self.isChecked() painter.setPen(Qt.PenStyle.NoPen) - painter.setBrush(QColor("#4F63D9" if checked else "#E4E4E5")) + painter.setBrush(QColor(PALETTE["accent"] if checked else PALETTE["line_strong"])) + if not self.isEnabled(): + painter.setOpacity(0.6) painter.drawRoundedRect(track, track.height() / 2, track.height() / 2) diameter = track.height() - 4 x = track.right() - diameter - 2 if checked else track.left() + 2 painter.setBrush(QColor("#FFFFFF")) painter.drawEllipse(QRectF(x, track.top() + 2, diameter, diameter)) + if self.hasFocus(): + painter.setOpacity(1) + painter.setPen(QPen(QColor(PALETTE["focus"]), 1)) + painter.setBrush(Qt.BrushStyle.NoBrush) + painter.drawRoundedRect(QRectF(self.rect()).adjusted(0.5, 0.5, -0.5, -0.5), 11, 11) painter.end() @@ -1190,13 +1196,19 @@ class SaveStateButton(QPushButton): painter = QPainter(self) painter.setRenderHint(QPainter.RenderHint.Antialiasing) enabled = self.isEnabled() + idle_color = PALETTE["accent_pressed"] if self.isDown() else PALETTE["accent"] color = { - "success": "#287B65", - "error": "#BE4B58", - }.get(self._state, "#4F63D9" if enabled else "#8E8F90") + "success": PALETTE["success"], + "error": PALETTE["danger"], + "loading": PALETTE["accent"], + }.get(self._state, idle_color if enabled else PALETTE["disabled_surface"]) painter.setPen(Qt.PenStyle.NoPen) painter.setBrush(QColor(color)) painter.drawRoundedRect(QRectF(self.rect()).adjusted(1, 1, -1, -1), 10, 10) + if self.hasFocus(): + painter.setPen(QPen(QColor(PALETTE["focus"]), 1)) + painter.setBrush(Qt.BrushStyle.NoBrush) + painter.drawRoundedRect(QRectF(self.rect()).adjusted(0.5, 0.5, -0.5, -0.5), 10, 10) label = { "loading": "正在保存", "success": "保存成功", @@ -1220,7 +1232,9 @@ class SaveStateButton(QPushButton): else: painter.drawLine(x + 3, center_y - 5, x + 12, center_y + 5) painter.drawLine(x + 12, center_y - 5, x + 3, center_y + 5) - painter.setPen(QColor("#FFFFFF")) + painter.setPen(QColor( + PALETTE["disabled"] if not enabled and self._state == "idle" else PALETTE["surface"] + )) painter.drawText( QRect(x + icon_width, 0, metrics.horizontalAdvance(label), self.height()), Qt.AlignmentFlag.AlignCenter, @@ -1815,10 +1829,10 @@ class MessageStrip(QFrame): self.glyph = QLabel("i") self.glyph.setFixedWidth(18) self.glyph.setAlignment(Qt.AlignmentFlag.AlignCenter) - self.glyph.setStyleSheet("font-weight:700; color:#4F63D9;") + self.glyph.setStyleSheet(clinical_stylesheet("font-weight:700; color:$ds_accent;")) self.label = QLabel() self.label.setWordWrap(True) - self.label.setStyleSheet("color:#1A1C1F; font-size:13px;") + self.label.setStyleSheet(clinical_stylesheet("color:$ds_text; font-size:13px;")) layout.addWidget(self.glyph) layout.addWidget(self.label, 1) self.action_button = QPushButton() @@ -1894,7 +1908,7 @@ class LoadingOverlay(QFrame): layout.setSpacing(8) self.glyph = _LoadingSpinner(self) label = QLabel(text) - label.setStyleSheet("color:#606163; font-size:13px;") + label.setStyleSheet(clinical_stylesheet("color:$ds_muted; font-size:13px;")) layout.addWidget(self.glyph) layout.addWidget(label) self.hide() @@ -1985,15 +1999,15 @@ class RecordTable(QTableWidget): Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter ) if column_index in danger_columns: - item.setForeground(QColor("#BE4B58")) + item.setForeground(QColor(PALETTE["danger"])) kind = semantic.get(column_index) if kind: palette = { - "success": ("#287B65", "#EAF9F3"), - "warning": ("#A9691D", "#FFF5E6"), - "danger": ("#BE4B58", "#FFF1F3"), - "info": ("#4F63D9", "#EEF1FA"), - "neutral": ("#6A6B6D", "#F7F7F7"), + "success": (PALETTE["success"], PALETTE["success_soft"]), + "warning": (PALETTE["warning"], PALETTE["warning_soft"]), + "danger": (PALETTE["danger"], PALETTE["danger_soft"]), + "info": (PALETTE["accent"], PALETTE["accent_soft"]), + "neutral": (PALETTE["muted"], PALETTE["surface_alt"]), } foreground, background = palette.get(kind, palette["neutral"]) item.setForeground(QColor(foreground)) @@ -2033,20 +2047,20 @@ class BloodTrendChart(QWidget): plot = self.rect().adjusted(48, 24, -22, -38) values = [value for value in (*self._fasting, *self._postprandial) if value is not None] if not values or plot.width() <= 0 or plot.height() <= 0: - painter.setPen(QColor("#606163")) + painter.setPen(QColor(PALETTE["muted"])) painter.drawText(self.rect(), Qt.AlignmentFlag.AlignCenter, "当前时间范围暂无血糖数据") painter.end() return upper = max(12.0, max(values) * 1.15) - painter.setPen(QPen(QColor("#EDEDEE"), 1)) + painter.setPen(QPen(QColor(PALETTE["line"]), 1)) for step in range(5): y = plot.bottom() - round(plot.height() * step / 4) painter.drawLine(plot.left(), y, plot.right(), y) - painter.setPen(QColor("#606163")) + painter.setPen(QColor(PALETTE["muted"])) painter.drawText( 4, y - 8, 40, 16, Qt.AlignmentFlag.AlignRight, f"{upper * step / 4:.0f}" ) - painter.setPen(QPen(QColor("#EDEDEE"), 1)) + painter.setPen(QPen(QColor(PALETTE["line"]), 1)) count = max(1, len(self._dates) - 1) def point(index: int, value: float) -> QPointF: @@ -2076,7 +2090,7 @@ class BloodTrendChart(QWidget): painter.setPen(QColor("#A9691D")) painter.drawText(plot.left() + 100, 4, 110, 18, Qt.AlignmentFlag.AlignLeft, "● 餐后血糖") if self._dates: - painter.setPen(QColor("#606163")) + painter.setPen(QColor(PALETTE["muted"])) painter.drawText( plot.left(), plot.bottom() + 8, @@ -2279,7 +2293,7 @@ class DailyRecordPanel(QFrame): self.todo_table.setMinimumHeight(180) todo_layout.addWidget(self.todo_table) self.todo_summary = QLabel("共 0 条") - self.todo_summary.setStyleSheet("color:#606163; font-size:13px;") + self.todo_summary.setStyleSheet(clinical_stylesheet("color:$ds_muted; font-size:13px;")) todo_layout.addWidget(self.todo_summary, 0, Qt.AlignmentFlag.AlignRight) root.addWidget(todo_card) self.clear() @@ -2437,8 +2451,8 @@ class DailyRecordPanel(QFrame): for row_index, (metric, label) in enumerate(self.METRICS): label_item = QTableWidgetItem(label) label_item.setFont(label_font) - label_item.setForeground(QColor("#606163")) - label_item.setBackground(QColor("#F7F7F7")) + label_item.setForeground(QColor(PALETTE["muted"])) + label_item.setBackground(QColor(PALETTE["surface_alt"])) self.matrix.setItem(row_index, 0, label_item) for date_index, date in enumerate(dates, 1): b = blood.get(date) @@ -2491,11 +2505,11 @@ class DailyRecordPanel(QFrame): item = QTableWidgetItem(value) item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) if high: - item.setForeground(QColor("#BE4B58")) - item.setBackground(QColor("#FFF1F3")) + item.setForeground(QColor(PALETTE["danger"])) + item.setBackground(QColor(PALETTE["danger_soft"])) elif value.endswith("· 自录"): - item.setForeground(QColor("#1A1C1F")) - item.setBackground(QColor("#F7F7F7")) + item.setForeground(QColor(PALETTE["text"])) + item.setBackground(QColor(PALETTE["surface_alt"])) edit_kind = "" edit_source: Any = None if metric in {"fasting", "postprandial", "other", "bp", "western", "insulin"}: @@ -3022,7 +3036,7 @@ class ChatPanel(QWidget): toolbar_layout.setContentsMargins(0, 0, 0, 0) toolbar_layout.setSpacing(8) archive = QLabel("仅展示服务端已归档消息(only_archived=1)") - archive.setStyleSheet("color:#606163;font-size:12px;") + archive.setStyleSheet(clinical_stylesheet("color:$ds_muted;font-size:12px;")) toolbar_layout.addWidget(archive) toolbar_layout.addStretch(1) self.sync_button = QPushButton("同步最新(后台异步)") @@ -3298,7 +3312,7 @@ class CaseGrid(QFrame): if group_index: divider = QFrame() divider.setFrameShape(QFrame.Shape.HLine) - divider.setStyleSheet("border:0; border-top:1px dashed #E4E4E5;") + divider.setStyleSheet(clinical_stylesheet("border:0; border-top:1px solid $ds_line;")) self.root.addWidget(divider) group_title = QLabel(f"● {group_name}") group_title.setProperty("diagnosisCaseGroup", True) @@ -3456,11 +3470,11 @@ def readonly_card(title: str, object_name: str, body: QWidget) -> QFrame: def set_tag_item(item: QTableWidgetItem, kind: str) -> None: palette = { - "success": ("#287B65", "#EAF9F3"), - "warning": ("#A9691D", "#FFF5E6"), - "danger": ("#BE4B58", "#FFF1F3"), - "info": ("#4F63D9", "#EEF1FA"), - "neutral": ("#6A6B6D", "#F7F7F7"), + "success": (PALETTE["success"], PALETTE["success_soft"]), + "warning": (PALETTE["warning"], PALETTE["warning_soft"]), + "danger": (PALETTE["danger"], PALETTE["danger_soft"]), + "info": (PALETTE["accent"], PALETTE["accent_soft"]), + "neutral": (PALETTE["muted"], PALETTE["surface_alt"]), } foreground, background = palette.get(kind, palette["neutral"]) item.setForeground(QColor(foreground)) diff --git a/app/src/doctor_workstation/ui/diagnosis_index_widgets.py b/app/src/doctor_workstation/ui/diagnosis_index_widgets.py index a2ecb96be..9a420b56d 100644 --- a/app/src/doctor_workstation/ui/diagnosis_index_widgets.py +++ b/app/src/doctor_workstation/ui/diagnosis_index_widgets.py @@ -67,21 +67,22 @@ from ..core.appointment_modes import ( can_appointment_video, ) from . import icons +from .design_system import PALETTE, clinical_stylesheet from .reception_style import TECH_BLUE, body_family, heading_family from .widgets import display_text, first_value, gender_text, get_value -PRIMARY = QColor("#4F63D9") -TEXT = QColor("#1A1C1F") -SECONDARY = QColor("#606163") -PLACEHOLDER = QColor("#8E8F90") +PRIMARY = QColor(PALETTE["accent"]) +TEXT = QColor(PALETTE["text"]) +SECONDARY = QColor(PALETTE["muted"]) +PLACEHOLDER = QColor(PALETTE["disabled"]) _INVALID_INDEX = QModelIndex() # The last two columns form the compact frozen pane. Video status and ending # time occupy separate lines; actions keep two inline links plus 更多, with # the remaining actions in its menu so clinical columns retain more space. _TABLE_COLUMN_WIDTHS = (48, 70, 60, 100, 175, 88, 120, 100, 72, 110, 96, 160) _BLUE_COLUMN_WIDTHS = (48, 70, 82, 102, 244, 90, 84, 90, 88, 122, 92, 158) -_BLUE_WARNING = QColor("#A9691D") -_BLUE_DANGER = QColor("#BE4B58") +_BLUE_WARNING = QColor(PALETTE["warning"]) +_BLUE_DANGER = QColor(PALETTE["danger"]) def _blue_font(pixels: int = 13, *, medium: bool = False) -> QFont: @@ -248,14 +249,14 @@ class _DiagnosisActionMenu(QMenu): return painter = QPainter(self) painter.setRenderHint(QPainter.RenderHint.Antialiasing, True) - painter.fillRect(rect, QColor("#FFFFFF")) + painter.fillRect(rect, QColor(PALETTE["surface"])) item_rect = rect painter.setPen(Qt.PenStyle.NoPen) - painter.setBrush(QColor("#F7F7F7") if self.activeAction() is action else QColor("#FFFFFF")) + painter.setBrush(QColor(PALETTE["surface_alt"]) if self.activeAction() is action else QColor(PALETTE["surface"])) painter.drawRoundedRect(item_rect, 3, 3) icon_rect = QRect(item_rect.left() + 8, item_rect.center().y() - 9, 18, 18) action.icon().paint(painter, icon_rect) - painter.setPen(QColor("#BE4B58" if action.isEnabled() else "#8E8F90")) + painter.setPen(QColor(PALETTE["danger"] if action.isEnabled() else PALETTE["disabled"])) painter.drawText( item_rect.adjusted(34, 0, -10, 0), Qt.AlignmentFlag.AlignVCenter | Qt.AlignmentFlag.AlignLeft, @@ -823,6 +824,8 @@ class DiagnosisTableModel(QAbstractTableModel): default="", ) return f"最近渠道:{channel}" if channel else "" + if column == 6: + return DiagnosisTableModel._display(row, column) if column == 7: return display_text(first_value(row, "assistant_name"), "") if column == 9: @@ -849,7 +852,7 @@ class DiagnosisHeader(QHeaderView): def paintSection(self, painter: QPainter, rect: QRect, logical_index: int) -> None: # noqa: N802 if self.tech_blue: painter.save() - painter.fillRect(rect, QColor("#F5F8FD")) + painter.fillRect(rect, QColor(PALETTE["surface_alt"])) painter.setPen(QPen(QColor(TECH_BLUE["line"]), 1)) painter.drawLine(rect.bottomLeft(), rect.bottomRight()) painter.setFont(_blue_font()) @@ -870,7 +873,7 @@ class DiagnosisHeader(QHeaderView): painter.save() painter.setPen(Qt.PenStyle.NoPen) primary = QColor(TECH_BLUE["accent"]) if self.tech_blue else PRIMARY - secondary = QColor(TECH_BLUE["muted"]) if self.tech_blue else QColor("#606163") + secondary = QColor(TECH_BLUE["muted"]) if self.tech_blue else QColor(PALETTE["muted"]) painter.setBrush(primary if direction == "asc" else secondary) painter.drawPolygon( QPolygon( @@ -953,7 +956,7 @@ class DiagnosisItemDelegate(QStyledItemDelegate): painter, option.rect, "已确认" if _confirmed(record) else "未确认", - QColor("#287B65") if _confirmed(record) else QColor("#A9691D"), + QColor(PALETTE["success"]) if _confirmed(record) else QColor(PALETTE["warning"]), ) elif index.column() == 6: self._paint_followup(painter, option.rect, record) @@ -1023,16 +1026,16 @@ class DiagnosisItemDelegate(QStyledItemDelegate): ) -> None: hovered = model.hover_row == row base = ( - QColor("#EEF1FA") + QColor(PALETTE["accent_soft"]) if selected - else QColor("#F7F7F7" if hovered else "#F7F7F7" if row % 2 else "#FFFFFF") + else QColor(PALETTE["surface_alt"] if hovered or row % 2 else PALETTE["surface"]) ) special = not _confirmed(record) or not _has_appointment(record) painter.fillRect(rect, base) if special and column == 0: - stripe = QColor("#A9691D") if not _confirmed(record) else QColor("#4F63D9") + stripe = QColor(PALETTE["warning"]) if not _confirmed(record) else QColor(PALETTE["accent"]) painter.fillRect(QRect(rect.left(), rect.top(), 3, rect.height()), stripe) - painter.setPen(QPen(QColor("#EDEDEE"), 1)) + painter.setPen(QPen(QColor(PALETTE["line"]), 1)) painter.drawLine(QLine(rect.bottomLeft(), rect.bottomRight())) @staticmethod @@ -1070,8 +1073,8 @@ class DiagnosisItemDelegate(QStyledItemDelegate): painter, QRect(left, content.center().y() - 10, 31, 20), "NEW", - QColor("#BE4B58"), - QColor("#FFFFFF"), + QColor(PALETTE["danger"]), + QColor(PALETTE["surface"]), 10, ) @@ -1081,17 +1084,17 @@ class DiagnosisItemDelegate(QStyledItemDelegate): self._draw_text(painter, content, "未挂号", PLACEHOLDER, 13) return rows = _appointments(record) - painter.setPen(QPen(QColor("#EDEDEE"), 1)) - painter.setBrush(QColor("#FFFFFF")) + painter.setPen(QPen(QColor(PALETTE["line"]), 1)) + painter.setBrush(QColor(PALETTE["surface"])) painter.drawRoundedRect(content, 6, 6) y = content.top() + 4 for position, appointment in enumerate(rows or [{}]): status = _as_int(first_value(appointment, "status", "appointment_status"), -1) label, fg, bg = { - 1: ("已预约", QColor("#4F63D9"), QColor("#EEF1FA")), - 3: ("已完成", QColor("#287B65"), QColor("#E8F6F1")), - 4: ("已过号", QColor("#A9691D"), QColor("#FFF4D8")), - }.get(status, ("未知", SECONDARY, QColor("#F7F7F7"))) + 1: ("已预约", QColor(PALETTE["accent"]), QColor(PALETTE["accent_soft"])), + 3: ("已完成", QColor(PALETTE["success"]), QColor(PALETTE["success_soft"])), + 4: ("已过号", QColor(PALETTE["warning"]), QColor(PALETTE["warning_soft"])), + }.get(status, ("未知", SECONDARY, QColor(PALETTE["surface_alt"]))) self._draw_tag(painter, QRect(content.left() + 6, y, 46, 20), label, bg, fg, 12) doctor = display_text(first_value(appointment, "doctor_name"), "-") time_text = display_text(first_value(appointment, "time_text", "appointment_time"), "-") @@ -1106,12 +1109,12 @@ class DiagnosisItemDelegate(QStyledItemDelegate): painter, QRect(content.left() + 6, y + 19, max(20, content.width() - 12), 17), time_text, - QColor("#A9691D") if status == 4 else SECONDARY, + QColor(PALETTE["warning"]) if status == 4 else SECONDARY, 13, ) y += 42 if position < len(rows) - 1: - painter.setPen(QPen(QColor("#EDEDEE"), 1, Qt.PenStyle.DashLine)) + painter.setPen(QPen(QColor(PALETTE["line"]), 1, Qt.PenStyle.DashLine)) painter.drawLine(content.left() + 6, y - 2, content.right() - 6, y - 2) channel = first_value( record, @@ -1153,7 +1156,7 @@ class DiagnosisItemDelegate(QStyledItemDelegate): painter, QRect(content.left(), content.top() + 38, 72, 18), "处方已作废", - QColor("#F7F7F7"), + QColor(PALETTE["surface_alt"]), SECONDARY, 11, outlined=True, @@ -1166,11 +1169,11 @@ class DiagnosisItemDelegate(QStyledItemDelegate): else: days = _as_int(value) color = ( - QColor("#287B65") + QColor(PALETTE["success"]) if days <= 2 - else QColor("#A9691D") + else QColor(PALETTE["warning"]) if days <= 6 - else QColor("#BE4B58") + else QColor(PALETTE["danger"]) ) text, bold = str(days), days > 6 self._draw_text( @@ -1320,6 +1323,8 @@ class _TechBlueDiagnosisDelegate(DiagnosisItemDelegate): painter, content, "已确认" if _confirmed(record) else "未确认", pixels=13, color="text" if _confirmed(record) else _BLUE_WARNING.name(), ) + elif column == 6: + self._followup(painter, content, display_text(index.data(), "—")) elif column == 8: prescribed = _as_bool(first_value(record, "has_prescription")) self._text(painter, content, "已开方" if prescribed else "未开方", @@ -1348,6 +1353,28 @@ class _TechBlueDiagnosisDelegate(DiagnosisItemDelegate): medium=column == 2) painter.restore() + @staticmethod + def _followup(painter: QPainter, rect: QRect, text: str) -> None: + """Break at the date/time boundary, never in the middle of a number. + + Keep the established row metrics. Long time ranges or doctor names + elide within their line; the model tooltip retains the complete text. + """ + painter.setFont(_blue_font(13)) + painter.setPen(QColor(TECH_BLUE["muted"])) + metrics = painter.fontMetrics() + lines = text.splitlines() + if lines and metrics.horizontalAdvance(lines[0]) > rect.width(): + lines[:1] = lines[0].split(maxsplit=1) + line_height = metrics.height() + top = rect.top() + max(0, (rect.height() - line_height * len(lines)) // 2) + for offset, line in enumerate(lines): + painter.drawText( + QRect(rect.left(), top + offset * line_height, rect.width(), line_height), + int(Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter | Qt.TextFlag.TextSingleLine), + metrics.elidedText(line, Qt.TextElideMode.ElideRight, rect.width()), + ) + def _appointments(self, painter: QPainter, rect: QRect, record: Any) -> None: content = rect.adjusted(8, 0, -8, 0) if not _has_appointment(record): @@ -1688,7 +1715,9 @@ class DiagnosisTableHost(QFrame): self.main.horizontalHeader().sectionResized.connect(self._columns_resized) self._fixed_render_signature: tuple[Any, ...] | None = None if tech_blue: - self.setStyleSheet(_TECH_BLUE_TABLE_QSS.replace("BODY_FAMILY", body_family())) + self.setStyleSheet(clinical_stylesheet( + _TECH_BLUE_TABLE_QSS.replace("BODY_FAMILY", body_family()) + )) def set_rows(self, rows: Iterable[Any]) -> None: previous_id = DiagnosisTableModel.record_id(self.main.current_data()) @@ -1904,6 +1933,7 @@ class DiagnosisTableHost(QFrame): .replace("#8E8F90", TECH_BLUE["muted"]) + f'QMenu {{ font-family: "{body_family()}"; font-weight: 400; }}' ) + menu.setStyleSheet(clinical_stylesheet(menu.styleSheet())) for label, action, _semantic in demoted_actions: _add_menu_action( menu, @@ -2630,19 +2660,19 @@ DIAGNOSIS_INDEX_QSS += """ #DiagnosisIndex QFrame#DiagnosisFilterCard, #DiagnosisIndex QFrame#DiagnosisListCard { border: 1px solid #EDEDEE; - border-radius: 13px; + border-radius: $ds_radius_panel; } #DiagnosisIndex QLineEdit, #DiagnosisIndex QComboBox, #DiagnosisIndex QDateEdit, #DiagnosisIndex QSpinBox, #DiagnosisIndex QPushButton { - border-radius: 8px; + border-radius: $ds_radius_control; } -#DiagnosisIndex QToolButton[diagnosisChip="true"] { border-radius: 8px; } +#DiagnosisIndex QToolButton[diagnosisChip="true"] { border-radius: $ds_radius_small; } #DiagnosisIndex QFrame#DiagnosisListToolbar { - border-top-left-radius: 13px; - border-top-right-radius: 13px; + border-top-left-radius: $ds_radius_panel; + border-top-right-radius: $ds_radius_panel; } #DiagnosisIndex QToolButton[diagnosisChip="true"]:checked[semantic="primary"], #DiagnosisIndex QToolButton[diagnosisChip="true"]:checked[semantic="info"], @@ -2650,7 +2680,27 @@ DIAGNOSIS_INDEX_QSS += """ #DiagnosisIndex QPushButton[variant="success"] { color: #FFFFFF; } +#DiagnosisIndex QLineEdit:focus, +#DiagnosisIndex QComboBox:focus, +#DiagnosisIndex QDateEdit:focus, +#DiagnosisIndex QSpinBox:focus, +#DiagnosisIndex QPushButton:focus { + border-color: $ds_focus; +} +#DiagnosisIndex QPushButton[variant="primary"]:pressed { + color: $ds_surface; + background-color: $ds_accent_pressed; + border-color: $ds_accent_pressed; +} +#DiagnosisIndex QPushButton:disabled, +#DiagnosisIndex QPushButton[variant="primary"]:disabled, +#DiagnosisIndex QPushButton[variant="success"]:disabled { + color: $ds_disabled; + background-color: $ds_disabled_surface; + border-color: $ds_line; +} """ +DIAGNOSIS_INDEX_QSS = clinical_stylesheet(DIAGNOSIS_INDEX_QSS) __all__ = [ diff --git a/app/src/doctor_workstation/ui/diagnosis_media.py b/app/src/doctor_workstation/ui/diagnosis_media.py index d072dd38a..ebbe39ddc 100644 --- a/app/src/doctor_workstation/ui/diagnosis_media.py +++ b/app/src/doctor_workstation/ui/diagnosis_media.py @@ -32,6 +32,8 @@ from PySide6.QtWidgets import ( QWidget, ) +from .design_system import clinical_stylesheet + try: from PySide6.QtMultimedia import QAudioOutput, QMediaPlayer from PySide6.QtMultimediaWidgets import QVideoWidget @@ -223,7 +225,7 @@ class InlineRecordingPlayer(QWidget): self.setMinimumHeight(158) self.setMaximumHeight(180) self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) - self.setStyleSheet(_INLINE_PLAYER_QSS) + self.setStyleSheet(clinical_stylesheet(_INLINE_PLAYER_QSS)) root = QVBoxLayout(self) root.setContentsMargins(1, 1, 1, 5) @@ -466,11 +468,11 @@ class RecordingPlaybackCell(QWidget): separator = QFrame() separator.setObjectName("DiagnosisRecordingAlternateSeparator") separator.setFrameShape(QFrame.Shape.HLine) - separator.setStyleSheet("color:#EDEDEE;") + separator.setStyleSheet(clinical_stylesheet("color:$ds_line;")) layout.addWidget(separator) label = QLabel("备用地址") label.setObjectName("DiagnosisRecordingAlternateLabel") - label.setStyleSheet("color:#606163; font-size:12px;") + label.setStyleSheet(clinical_stylesheet("color:$ds_muted; font-size:12px;")) layout.addWidget(label) links = QHBoxLayout() links.setContentsMargins(0, 0, 0, 0) @@ -490,7 +492,7 @@ class RecordingPlaybackCell(QWidget): layout.addLayout(links) self.link_status = QLabel("") self.link_status.setObjectName("DiagnosisRecordingLinkStatus") - self.link_status.setStyleSheet("color:#BE4B58; font-size:11px;") + self.link_status.setStyleSheet(clinical_stylesheet("color:$ds_danger; font-size:11px;")) self.link_status.setWordWrap(True) self.link_status.hide() layout.addWidget(self.link_status) @@ -807,7 +809,7 @@ class ImagePreviewDialog(QDialog): self.setObjectName("DiagnosisImagePreview") self.setWindowTitle(title) self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) - self.setStyleSheet(_IMAGE_PREVIEW_QSS) + self.setStyleSheet(clinical_stylesheet(_IMAGE_PREVIEW_QSS)) self.resize(880, 660) root = QVBoxLayout(self) diff --git a/app/src/doctor_workstation/ui/dialogs/ai_consult.py b/app/src/doctor_workstation/ui/dialogs/ai_consult.py index 9ad112149..3119a475d 100644 --- a/app/src/doctor_workstation/ui/dialogs/ai_consult.py +++ b/app/src/doctor_workstation/ui/dialogs/ai_consult.py @@ -62,6 +62,7 @@ from shiboken6 import isValid from .. import icons from ..chat_items import parse_chat_item as _parse_chat_item +from ..design_system import clinical_stylesheet from ..diagnosis_drawer import CaseGrid, _RemoteImageButton from ..diagnosis_index_widgets import FlowWidget from ..diagnosis_media import ( @@ -94,6 +95,9 @@ from ..widgets import ( show_toast, ) from .ai_consult_charts import GlucoseChartData +from .ai_consult_drug_names import TCM as DRUG_TCM +from .ai_consult_drug_names import WESTERN as DRUG_WESTERN +from .ai_consult_drug_names import summarize_drugs from .ai_consult_metric_state import ( ABNORMAL_COLOR, NORMAL_COLOR, @@ -101,7 +105,6 @@ from .ai_consult_metric_state import ( combined_metric_state, risk_color, ) -from .ai_consult_drug_names import TCM as DRUG_TCM, WESTERN as DRUG_WESTERN, summarize_drugs from .ai_consult_metric_text import MetricTextState, metric_text_context, metric_text_html from .ai_consult_report_visuals import ( ReportVisual, @@ -114,10 +117,10 @@ from .prescription_ai import ( diagnosis_ai_task, ) -AI_CONSULT_QSS = """ +AI_CONSULT_QSS = clinical_stylesheet(""" QDialog#AiConsultDialog { - color: #1A1C1F; - background-color: #F7F7F7; font-size: 14px; + color: $ds_text; + background-color: $ds_canvas; font-size: 14px; } QDialog#AiConsultDialog QScrollArea, QDialog#AiConsultDialog QScrollArea > QWidget, @@ -149,7 +152,7 @@ QDialog#AiConsultDialog QScrollBar::sub-page:vertical { background-color: transparent; } QDialog#AiConsultDialog QFrame#AiConsultShell { - background-color: #F7F7F7; + background-color: $ds_canvas; border: 0; } QDialog#AiConsultDialog QLabel#AiConsultCrumb { @@ -171,7 +174,7 @@ QDialog#AiConsultDialog QPushButton#AiConsultBack { color: #1A1C1F; background-color: #F0F0F0; border: 0; - border-radius: 8px; + border-radius: $ds_radius_control; font-weight: 500; } QDialog#AiConsultDialog QPushButton#AiConsultBack:hover { background-color: #EEF1FA; } @@ -183,7 +186,7 @@ QDialog#AiConsultDialog QFrame#AiConsultHero { QDialog#AiConsultDialog QLabel#AiConsultAvatar { color: #FFFFFF; background-color: #4F63D9; - border-radius: 22px; + border-radius: $ds_radius_control; font-size: 16px; font-weight: 600; } @@ -201,7 +204,7 @@ QDialog#AiConsultDialog QLabel#AiConsultMeta { QDialog#AiConsultDialog QLabel#AiConsultChip { color: #6A6B6D; background-color: #F7F7F7; - border-radius: 8px; + border-radius: $ds_radius_small; padding: 4px 8px; font-size: 13px; } @@ -240,7 +243,7 @@ QDialog#AiConsultDialog QPushButton#AiConsultChatFilter { color: #4F63D9; background-color: #FFFFFF; border: 1px solid #E1E5F4; - border-radius: 8px; + border-radius: $ds_radius_control; font-size: 13px; } QDialog#AiConsultDialog QPushButton#AiConsultChatFilter:hover { @@ -275,7 +278,7 @@ QDialog#AiConsultDialog QLabel#AiConsultRole { max-width: 30px; min-height: 30px; max-height: 30px; - border-radius: 15px; + border-radius: $ds_radius_small; color: #FFFFFF; font-size: 13px; font-weight: 500; @@ -331,7 +334,7 @@ QDialog#AiConsultDialog QLabel#AiConsultClinicalMeta { QDialog#AiConsultDialog QLabel#AiConsultClinicalBadge { color: #4F63D9; background-color: #EEF1FA; - border-radius: 7px; + border-radius: $ds_radius_small; padding: 4px 8px; font-size: 13px; font-weight: 500; @@ -346,10 +349,10 @@ QDialog#AiConsultDialog QLabel#AiConsultClinicalSectionTitle { color: #1A1C1F; background-color: transparent; font-size: 14px; - font-weight: 500; + font-weight: 600; } QDialog#AiConsultDialog QLabel#AiConsultClinicalSummaryBody { - color: #1A1C1F; + color: $ds_text; background-color: transparent; font-size: 14px; font-weight: 400; @@ -411,7 +414,7 @@ QDialog#AiConsultDialog QLabel#AiConsultHypothesisTag { QDialog#AiConsultDialog QLabel#AiConsultClinicalBody, QDialog#AiConsultDialog QLabel#AiConsultWorkflowBody, QDialog#AiConsultDialog QLabel#AiConsultRiskBody { - color: #1A1C1F; + color: $ds_text; background-color: transparent; font-size: 14px; font-weight: 400; @@ -456,23 +459,23 @@ QDialog#AiConsultDialog QLabel#AiConsultRiskTitle { font-weight: 600; } QDialog#AiConsultDialog QLabel#AiConsultRiskBody { - color: #1A1C1F; font-size: 14px; + color: $ds_text; font-size: 14px; } QDialog#AiConsultDialog QLabel#AiConsultRiskTitle { color: #BE4B58; } QDialog#AiConsultDialog QLabel#AiConsultRiskBody { - color: #1A1C1F; font-size: 14px; + color: $ds_text; font-size: 14px; } /* 结构化报告:正文按阅读节奏排版,不再每句话套一个方框。 */ QDialog#AiConsultDialog QFrame#AiConsultReportIntro { - background-color: #F7F7F7; + background-color: $ds_accent_soft; border: 1px solid #EDEDEE; border-left: 3px solid #4F63D9; - border-radius: 9px; + border-radius: $ds_radius_control; } QDialog#AiConsultDialog QLabel#AiConsultReportIntroBody { - color: #1A1C1F; + color: $ds_text; background-color: transparent; font-size: 14px; font-weight: 400; @@ -497,7 +500,7 @@ QDialog#AiConsultDialog QLabel#AiConsultReportSectionTitle { color: #1A1C1F; background-color: transparent; font-size: 15px; - font-weight: 500; + font-weight: 600; } QDialog#AiConsultDialog QFrame#AiConsultReportRule { background-color: #EDEDEE; @@ -518,7 +521,7 @@ QDialog#AiConsultDialog QLabel#AiConsultReportBullet { font-weight: 500; } QDialog#AiConsultDialog QLabel#AiConsultReportBody { - color: #1A1C1F; + color: $ds_text; background-color: transparent; font-size: 14px; font-weight: 400; @@ -541,18 +544,18 @@ QDialog#AiConsultDialog QLabel#AiConsultClinicalDisclaimer { font-weight: 400; } QDialog#AiConsultDialog QFrame#AiConsultReportProvenance { - background-color: #F7F8FC; - border: 1px solid #E4E8F2; - border-radius: 9px; + background-color: $ds_surface_alt; + border: 1px solid $ds_line; + border-radius: $ds_radius_control; } QDialog#AiConsultDialog QLabel#AiConsultReportProvenanceTitle { - color: #27336B; + color: $ds_heading; background-color: transparent; font-size: 12px; font-weight: 600; } QDialog#AiConsultDialog QLabel#AiConsultReportProvenanceLine { - color: #555B68; + color: $ds_muted; background-color: transparent; font-size: 12px; } @@ -647,7 +650,7 @@ QDialog#AiConsultDialog QLabel#AiConsultSection { font-weight: 500; } QDialog#AiConsultDialog QLabel#AiConsultBody { - color: #1A1C1F; + color: $ds_text; background-color: transparent; font-size: 14px; line-height: 1.6; @@ -681,7 +684,7 @@ QDialog#AiConsultDialog QLabel#AiConsultInsightPlaceholder { QDialog#AiConsultDialog QLabel#AiConsultTag[level="high"] { color: #BE4B58; background-color: #FFF1F3; - border-radius: 8px; + border-radius: $ds_radius_small; padding: 2px 8px; font-size: 13px; font-weight: 600; @@ -689,7 +692,7 @@ QDialog#AiConsultDialog QLabel#AiConsultTag[level="high"] { QDialog#AiConsultDialog QLabel#AiConsultTag[level="medium"] { color: #A9691D; background-color: #FFF5E6; - border-radius: 8px; + border-radius: $ds_radius_small; padding: 2px 8px; font-size: 13px; font-weight: 500; @@ -697,7 +700,7 @@ QDialog#AiConsultDialog QLabel#AiConsultTag[level="medium"] { QDialog#AiConsultDialog QLabel#AiConsultTag[level="low"] { color: #287B65; background-color: #EAF9F3; - border-radius: 8px; + border-radius: $ds_radius_small; padding: 2px 8px; font-size: 13px; font-weight: 500; @@ -705,7 +708,7 @@ QDialog#AiConsultDialog QLabel#AiConsultTag[level="low"] { QDialog#AiConsultDialog QLabel#AiConsultTag[level="warn"] { color: #BE4B58; background-color: #FFF1F3; - border-radius: 8px; + border-radius: $ds_radius_small; padding: 2px 8px; font-size: 13px; font-weight: 600; @@ -713,7 +716,7 @@ QDialog#AiConsultDialog QLabel#AiConsultTag[level="warn"] { QDialog#AiConsultDialog QLabel#AiConsultTag[level="unknown"] { color: #6A6B6D; background-color: #F0F0F0; - border-radius: 8px; + border-radius: $ds_radius_small; padding: 2px 8px; font-size: 13px; } @@ -739,7 +742,7 @@ QDialog#AiConsultDialog QLineEdit#AiConsultInput { color: #1A1C1F; background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 12px; + border-radius: $ds_radius_control; font-size: 14px; } QDialog#AiConsultDialog QLineEdit#AiConsultInput:focus { @@ -763,7 +766,7 @@ QDialog#AiConsultDialog QPushButton#AiConsultIconButton { max-height: 36px; padding: 0; border: 0; - border-radius: 18px; + border-radius: $ds_radius_control; background-color: #F7F7F7; } QDialog#AiConsultDialog QPushButton#AiConsultIconButton:hover { background-color: #EEF1FA; } @@ -774,7 +777,7 @@ QDialog#AiConsultDialog QPushButton#AiConsultSend { max-height: 40px; padding: 0; border: 0; - border-radius: 20px; + border-radius: $ds_radius_control; background-color: #4F63D9; } QDialog#AiConsultDialog QPushButton#AiConsultSend:hover { background-color: #4156C4; } @@ -783,7 +786,7 @@ QDialog#AiConsultDialog QLabel#AiConsultSideTitle { color: #1A1C1F; background-color: transparent; font-size: 16px; - font-weight: 500; + font-weight: 600; } QDialog#AiConsultDialog QLabel#AiConsultSideSubtitle { color: #6A6B6D; @@ -871,7 +874,7 @@ QDialog#AiConsultDialog QPushButton#AiConsultSideClose { max-height: 28px; padding: 0; border: 0; - border-radius: 8px; + border-radius: $ds_radius_control; color: #606163; background-color: transparent; font-size: 16px; @@ -917,10 +920,10 @@ QDialog#AiConsultDialog QLabel#AiConsultRecordTitle { color: #1A1C1F; background-color: transparent; font-size: 13px; - font-weight: 500; + font-weight: 600; } QDialog#AiConsultDialog QLabel#AiConsultRecordBody { - color: #1A1C1F; + color: $ds_text; background-color: transparent; font-size: 14px; } @@ -951,7 +954,7 @@ QDialog#AiConsultDialog QPushButton#AiConsultMediaOpen { color: #4F63D9; background-color: #EEF1FA; border: 0; - border-radius: 8px; + border-radius: $ds_radius_control; font-weight: 500; } QDialog#AiConsultDialog QPushButton#AiConsultRecordRetry:hover, @@ -1000,10 +1003,11 @@ QDialog#AiConsultDialog QLabel#AiConsultDataLabel { font-size: 13px; } QDialog#AiConsultDialog QLabel#AiConsultDataValue { - color: #1A1C1F; + color: $ds_text; font-size: 13px; } -""" +QDialog#AiConsultDialog QPushButton:focus { border-color: $ds_focus; } +""") QUICK_PROMPTS: tuple[tuple[str, str], ...] = ( ("总结当前病情", "请根据当前病历总结患者病情、证候与风险。"), @@ -1053,8 +1057,8 @@ _DOCTOR_DOCUMENT_CSS = ( # 模型回复几乎都是“分节标题 + 两层要点”的长文。早期样式里标题只比正文大 1px、 # 段落与列表项的间距也几乎相同,整段读起来就是一堵字墙。这里把层级、行距和分节 # 留白拉开:标题明显更大更重,顶层小节之间留出整行空白,嵌套要点单独收紧缩进。 -_AI_DOCUMENT_CSS = ( - "body { color:#1A1C1F; font-size:14px; line-height:200%; } " +_AI_DOCUMENT_CSS = clinical_stylesheet( + "body { color:$ds_text; font-size:14px; line-height:200%; } " "h1,h2 { color:#1A1C1F; font-size:17px; margin:22px 0 10px; line-height:160%; } " "h3,h4 { color:#1A1C1F; font-size:15px; margin:18px 0 8px; line-height:160%; } " "p { margin:10px 0; line-height:200%; } " @@ -2219,15 +2223,12 @@ def _escape_html(value: str) -> str: ) -class _FlowRow(QWidget): +class _FlowRow(FlowWidget): + """Keep patient metadata readable when the details pane is narrow.""" + def __init__(self, parent: QWidget | None = None) -> None: - super().__init__(parent) - self._layout = QHBoxLayout(self) - self._layout.setContentsMargins(0, 0, 0, 0) - self._layout.setSpacing(8) - self._layout.setAlignment( - Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter - ) + super().__init__(parent, horizontal_spacing=8, vertical_spacing=6) + self._layout = self.flow def add(self, widget: QWidget) -> None: self._layout.addWidget(widget) @@ -2810,7 +2811,7 @@ class _DrugSummaryStrip(QFrame): layout.addLayout(row) @staticmethod - def for_text(text: str, parent: QWidget | None = None) -> "_DrugSummaryStrip | None": + def for_text(text: str, parent: QWidget | None = None) -> _DrugSummaryStrip | None: summary = summarize_drugs(text) return _DrugSummaryStrip(summary, parent) if any(summary.values()) else None @@ -3454,11 +3455,11 @@ class _ChatBubble(QWidget): avatar.setAlignment(Qt.AlignmentFlag.AlignCenter) _style_surface(avatar) if role == "doctor": - avatar.setStyleSheet("background-color:#4F63D9; color:#FFFFFF; border-radius:15px;") + avatar.setStyleSheet(clinical_stylesheet("background-color:#4F63D9; color:#FFFFFF; border-radius:6px;")) elif role == "ai": - avatar.setStyleSheet("background-color:#EEF1FA; color:#4F63D9; border-radius:15px;") + avatar.setStyleSheet(clinical_stylesheet("background-color:#EEF1FA; color:#4F63D9; border-radius:6px;")) else: - avatar.setStyleSheet("background-color:#6A6B6D; color:#FFFFFF; border-radius:15px;") + avatar.setStyleSheet(clinical_stylesheet("background-color:#6A6B6D; color:#FFFFFF; border-radius:6px;")) bubble = QFrame() _style_surface(bubble) if role == "doctor": @@ -3629,10 +3630,10 @@ class _ChatBubble(QWidget): toggle.setCursor(Qt.CursorShape.PointingHandCursor) toggle.setAccessibleName("展开资料提交回执") toggle.setStyleSheet( - "QPushButton {color:#65718A;font-size:12px;text-align:left;" + clinical_stylesheet("QPushButton {color:$ds_muted;font-size:12px;text-align:left;" "background:transparent;border:0;padding:4px 0;}" "QPushButton:hover {color:#4F63D9;}" - "QPushButton:focus {border-bottom:1px solid #4F63D9;}" + "QPushButton:focus {border-bottom:1px solid #4F63D9;}") ) layout.addWidget(toggle) label = QLabel(receipt) @@ -3643,7 +3644,7 @@ class _ChatBubble(QWidget): Qt.TextInteractionFlag.TextSelectableByMouse | Qt.TextInteractionFlag.TextSelectableByKeyboard ) - label.setStyleSheet("color:#65718A;font-size:12px;") + label.setStyleSheet(clinical_stylesheet("color:$ds_muted;font-size:12px;")) label.hide() layout.addWidget(label) self._inner.insertWidget(0, receipt) @@ -3688,7 +3689,7 @@ class _ChatBubble(QWidget): label.setTextFormat(Qt.TextFormat.PlainText) label.setWordWrap(True) label.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse) - label.setStyleSheet("color:#BE4B58;background:#FEF3F2;border-radius:6px;padding:8px;") + label.setStyleSheet(clinical_stylesheet("color:#BE4B58;background:#FEF3F2;border-radius:6px;padding:8px;")) self._inner.insertWidget(self._inner.indexOf(self.body), label) self._stream_failure_label = label label.setText(f"本次回复未完成\n{text}") @@ -4949,8 +4950,9 @@ class AiConsultDialog(QDialog): button.setObjectName("AiConsultChipButton") button.setCursor(Qt.CursorShape.PointingHandCursor) button.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) + task_key = QUICK_PROMPT_TASKS.get(label, "") button.clicked.connect( - lambda _checked=False, text=prompt, task=QUICK_PROMPT_TASKS.get(label, ""): + lambda _checked=False, text=prompt, task=task_key: self._ask(text, replace_active=True, task=task) ) chips.addWidget(button, 1) diff --git a/app/src/doctor_workstation/ui/dialogs/app_update.py b/app/src/doctor_workstation/ui/dialogs/app_update.py index 485032d64..4d2fd6a67 100644 --- a/app/src/doctor_workstation/ui/dialogs/app_update.py +++ b/app/src/doctor_workstation/ui/dialogs/app_update.py @@ -43,6 +43,7 @@ from doctor_workstation.services.app_update import ( validate_installer_download_policy, validate_windows_installer, ) +from doctor_workstation.ui.design_system import clinical_stylesheet from doctor_workstation.ui.widgets import friendly_error, show_toast LOGGER = logging.getLogger(__name__) @@ -129,11 +130,11 @@ class AppUpdateDialog(QDialog): self.badge = QLabel("必须更新后才能继续使用" if offer.force else "发现新版本") self.badge.setObjectName("UpdateBadge") - self.badge.setStyleSheet( + self.badge.setStyleSheet(clinical_stylesheet( "color:#A9691D;background:#FFF5E6;border-radius:8px;padding:4px 10px;font-weight:600;" if offer.force else "color:#4F63D9;background:#EEF1FA;border-radius:8px;padding:4px 10px;font-weight:600;" - ) + )) root.addWidget(self.badge, 0, Qt.AlignmentFlag.AlignLeft) self.headline = QLabel(title or "医生工作站有新版本") @@ -146,7 +147,7 @@ class AppUpdateDialog(QDialog): latest = offer.latest_version or "新版本" self.version_label = QLabel(f"当前版本 {current} → 最新版本 {latest}") self.version_label.setObjectName("UpdateVersionLabel") - self.version_label.setStyleSheet("color:#606163;") + self.version_label.setStyleSheet(clinical_stylesheet("color:$ds_muted;")) root.addWidget(self.version_label) self.notes = QTextEdit() @@ -160,7 +161,7 @@ class AppUpdateDialog(QDialog): self.status_label = QLabel("") self.status_label.setObjectName("UpdateStatus") self.status_label.setWordWrap(True) - self.status_label.setStyleSheet("color:#1A1C1F;") + self.status_label.setStyleSheet(clinical_stylesheet("color:$ds_heading;")) self.status_label.hide() root.addWidget(self.status_label) @@ -175,7 +176,7 @@ class AppUpdateDialog(QDialog): self.progress_text = QLabel("") self.progress_text.setObjectName("UpdateProgressText") - self.progress_text.setStyleSheet("color:#606163;font-size:12px;") + self.progress_text.setStyleSheet(clinical_stylesheet("color:$ds_muted;font-size:12px;")) self.progress_text.hide() root.addWidget(self.progress_text) @@ -225,7 +226,7 @@ class AppUpdateDialog(QDialog): def show_download_progress(self, received: int, total: int) -> None: self.progress.show() self.progress_text.show() - self.status_label.setStyleSheet("color:#1A1C1F;") + self.status_label.setStyleSheet(clinical_stylesheet("color:$ds_heading;")) self.status_label.setText("正在下载安装包…") self.status_label.show() if total > 0: @@ -237,7 +238,7 @@ class AppUpdateDialog(QDialog): self.progress_text.setText(_format_bytes(received)) def show_status(self, message: str, *, determinate: bool = False) -> None: - self.status_label.setStyleSheet("color:#1A1C1F;") + self.status_label.setStyleSheet(clinical_stylesheet("color:$ds_heading;")) self.status_label.setText(message) self.status_label.show() self.progress.show() @@ -251,7 +252,7 @@ class AppUpdateDialog(QDialog): def show_error(self, message: str) -> None: self._busy = False self.status_label.setText(message) - self.status_label.setStyleSheet("color:#BE4B58;") + self.status_label.setStyleSheet(clinical_stylesheet("color:$ds_danger;")) self.status_label.show() self.progress.hide() self.progress_text.hide() diff --git a/app/src/doctor_workstation/ui/dialogs/diagnosis.py b/app/src/doctor_workstation/ui/dialogs/diagnosis.py index d5e3f50b9..98b6413d6 100644 --- a/app/src/doctor_workstation/ui/dialogs/diagnosis.py +++ b/app/src/doctor_workstation/ui/dialogs/diagnosis.py @@ -48,6 +48,7 @@ from PySide6.QtWidgets import ( ) from ...core.appointment_modes import appointment_type_description, appointment_type_value +from ..design_system import clinical_stylesheet from ..diagnosis_drawer import ( DIAGNOSIS_QSS, CaseGrid, @@ -97,6 +98,7 @@ from .issued_prescription_ai import can_open_issued_ai, present_issued_prescript from .local_audio_queue import LocalAudioQueueDialog from .prescription_ai import can_open_diagnosis_ai_report, present_diagnosis_ai_report + class _UploadProgressRelay(QObject): """把后台线程中的分片上传进度转回界面线程(信号跨线程自动排队)。""" @@ -1541,16 +1543,16 @@ class DiagnosisDialog(QDialog): """上传本地回放时的进度条:按分片实时更新,医生能看到上传在进行、进行到哪。""" frame = QFrame() frame.setObjectName("DiagnosisVideoUploadProgress") - frame.setStyleSheet( + frame.setStyleSheet(clinical_stylesheet( "QFrame#DiagnosisVideoUploadProgress { background-color: #EEF1FA;" - " border: 1px solid #C9D1F3; border-radius: 8px; }" - "QFrame#DiagnosisVideoUploadProgress QLabel { color: #3347B8; background: transparent;" + " border: 1px solid $ds_line_strong; border-radius: $ds_radius_control; }" + "QFrame#DiagnosisVideoUploadProgress QLabel { color: $ds_accent_hover; background: transparent;" " font-size: 13px; font-weight: 500; }" "QFrame#DiagnosisVideoUploadProgress QProgressBar { background-color: #FFFFFF;" " border: 0; border-radius: 4px; min-height: 8px; max-height: 8px; }" "QFrame#DiagnosisVideoUploadProgress QProgressBar::chunk { background-color: #4F63D9;" " border-radius: 4px; }" - ) + )) row = QVBoxLayout(frame) row.setContentsMargins(12, 8, 12, 10) row.setSpacing(6) diff --git a/app/src/doctor_workstation/ui/dialogs/issued_prescription_ai_theme.py b/app/src/doctor_workstation/ui/dialogs/issued_prescription_ai_theme.py index f003977b1..bbdb46f1e 100644 --- a/app/src/doctor_workstation/ui/dialogs/issued_prescription_ai_theme.py +++ b/app/src/doctor_workstation/ui/dialogs/issued_prescription_ai_theme.py @@ -21,6 +21,8 @@ from typing import Any from PySide6.QtGui import QFont +from ..design_system import PALETTE + DARK: dict[str, str] = { # ground and cards "canvas": "#080D18", @@ -62,23 +64,23 @@ DARK: dict[str, str] = { } LIGHT: dict[str, str] = { - "canvas": "#F1F5FC", - "canvas_soft": "#E7EEFA", - "surface": "#FFFFFF", - "surface_2": "#F5F8FE", - "raised": "#E8EFFA", - "line": "#D5E1F2", - "line_soft": "#E3EBF8", - "heading": "#0A182E", - "text": "#2A3C56", - "muted": "#54697F", - "faint": "#7A8DA3", - "selected_text": "#0A182E", - "accent": "#1A5FD0", - "accent_text": "#124DAE", - "accent_pressed": "#0E3F90", - "selection": "#E8EFFA", - "selection_line": "#AEC7EE", + "canvas": PALETTE["canvas"], + "canvas_soft": PALETTE["surface_alt"], + "surface": PALETTE["surface"], + "surface_2": PALETTE["surface_alt"], + "raised": PALETTE["sidebar"], + "line": PALETTE["line_strong"], + "line_soft": PALETTE["line"], + "heading": PALETTE["heading"], + "text": PALETTE["text"], + "muted": PALETTE["muted"], + "faint": PALETTE["disabled"], + "selected_text": PALETTE["heading"], + "accent": PALETTE["accent"], + "accent_text": PALETTE["accent_hover"], + "accent_pressed": PALETTE["accent_pressed"], + "selection": PALETTE["accent_soft"], + "selection_line": PALETTE["focus"], "qwen": "#0C89AC", "qwen_text": "#086C88", "qwen_dim": "#E2F5FA", diff --git a/app/src/doctor_workstation/ui/dialogs/local_audio_queue.py b/app/src/doctor_workstation/ui/dialogs/local_audio_queue.py index 4af364d26..0f21c06ee 100644 --- a/app/src/doctor_workstation/ui/dialogs/local_audio_queue.py +++ b/app/src/doctor_workstation/ui/dialogs/local_audio_queue.py @@ -29,6 +29,7 @@ from ...services.local_audio_queue import ( LocalAudioUploadManager, get_local_audio_upload_manager, ) +from ..design_system import clinical_stylesheet from ..widgets import run_async _STATUS_LABELS = { @@ -174,7 +175,7 @@ class LocalAudioQueueDialog(QDialog): self.setModal(True) self.setMinimumSize(760, 480) self.resize(1160, 620) - self.setStyleSheet(_LOCAL_AUDIO_QSS) + self.setStyleSheet(clinical_stylesheet(_LOCAL_AUDIO_QSS)) self._build_ui() self.poll_timer = QTimer(self) diff --git a/app/src/doctor_workstation/ui/dialogs/prescription.py b/app/src/doctor_workstation/ui/dialogs/prescription.py index 77b5fdad2..bd69d795a 100644 --- a/app/src/doctor_workstation/ui/dialogs/prescription.py +++ b/app/src/doctor_workstation/ui/dialogs/prescription.py @@ -28,8 +28,8 @@ from PySide6.QtCore import ( QDate, QEvent, QIODevice, - QModelIndex, QMarginsF, + QModelIndex, QObject, QPoint, QRectF, @@ -98,6 +98,7 @@ from PySide6.QtWidgets import ( ) from .. import icons +from ..design_system import clinical_stylesheet from ..diagnosis_terms import shared_terms from ..infinite_list import InfiniteList from ..theme import main_window_target_rect @@ -116,9 +117,9 @@ from ..widgets import ( ) from .diagnosis import DiagnosisDialog as _StructuredDiagnosisDialog -PRESCRIPTION_DRAWER_QSS = r""" +PRESCRIPTION_DRAWER_QSS = clinical_stylesheet(r""" QFrame#PrescriptionDrawerSurface { - color: #1A1C1F; + color: $ds_text; background-color: #FFFFFF; border-left: 1px solid #EDEDEE; font-size: 14px; @@ -145,7 +146,7 @@ QLabel#PrescriptionLockTag { color: #BE4B58; background-color: #FEF0F0; border: 1px solid #FDE2E2; - border-radius: 4px; + border-radius: $ds_radius_small; padding: 2px 8px; font-size: 13px; } @@ -175,7 +176,7 @@ QLabel#PrescriptionDrawerMode { color: #4F63D9; background-color: #EEF1FA; border: 1px solid #EDEDEE; - border-radius: 5px; + border-radius: $ds_radius_small; padding: 4px 9px; font-size: 13px; font-weight: 500; @@ -189,7 +190,7 @@ QPushButton#PrescriptionDrawerClose { color: #606163; background-color: transparent; border: 0; - border-radius: 7px; + border-radius: $ds_radius_control; font-size: 22px; font-weight: 400; } @@ -208,12 +209,12 @@ QWidget#PrescriptionDrawerContent { QFrame#PrescriptionFormSection { background-color: #F7F7F7; border: 1px solid #EDEDEE; - border-radius: 10px; + border-radius: $ds_radius_panel; } QLabel#PrescriptionSectionTitle { color: #1A1C1F; font-size: 15px; - font-weight: 500; + font-weight: 600; } QLabel#PrescriptionSectionHint { color: #6A6B6D; @@ -242,7 +243,7 @@ QLabel#PrescriptionUsageAux { QFrame#PrescriptionRpToolbar { background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 10px; + border-radius: $ds_radius_panel; } QFrame#PrescriptionRpMarker { background-color: #4F63D9; @@ -262,12 +263,12 @@ QLabel#PrescriptionRpLock { color: #BE4B58; background-color: #FEF3F2; border: 1px solid #FECDCA; - border-radius: 5px; + border-radius: $ds_radius_small; padding: 5px 8px; font-size: 13px; } QLabel#PrescriptionFormulaTag { - border-radius: 4px; + border-radius: $ds_radius_small; padding: 3px 8px; font-size: 13px; font-weight: 500; @@ -328,7 +329,7 @@ QFrame#PrescriptionDrawerSurface QDoubleSpinBox { color: #1A1C1F; background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 7px; + border-radius: $ds_radius_control; padding: 0 11px; selection-background-color: #C9D1F3; selection-color: #1A1C1F; font-size: 14px; @@ -338,7 +339,7 @@ QFrame#PrescriptionDrawerSurface QComboBox { color: #1A1C1F; background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 7px; + border-radius: $ds_radius_control; padding-left: 11px; padding-right: 28px; selection-background-color: #C9D1F3; @@ -379,7 +380,7 @@ QFrame#PrescriptionDatePicker { min-height: 32px; background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 7px; + border-radius: $ds_radius_control; } QFrame#PrescriptionDatePicker:hover { border-color: #8B9AD9; @@ -446,7 +447,7 @@ QFrame#PrescriptionDrawerSurface QPushButton { color: #1A1C1F; background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 7px; + border-radius: $ds_radius_control; font-weight: 500; } QFrame#PrescriptionDrawerSurface QPushButton:hover { @@ -468,7 +469,7 @@ QFrame#PrescriptionDrawerSurface QPushButton#PrescriptionDrawerClose { color: #606163; background-color: transparent; border: 0; - border-radius: 7px; + border-radius: $ds_radius_control; font-size: 22px; font-weight: 400; } @@ -496,23 +497,23 @@ QFrame#PrescriptionDrawerSurface QPushButton[variant="primary"]:hover { border-color: #4156C4; } QFrame#PrescriptionDrawerSurface QPushButton[variant="success"] { - color: #FFFFFF; - background-color: #287B65; - border-color: #287B65; + color: $ds_accent; + background-color: $ds_accent_soft; + border-color: $ds_line; } QFrame#PrescriptionDrawerSurface QPushButton[variant="success"]:hover { - background-color: #287B65; - border-color: #287B65; + background-color: $ds_accent_soft; + border-color: $ds_focus; } QFrame#PrescriptionDrawerSurface QPushButton[variant="warning"] { - color: #A9691D; + color: $ds_accent; background-color: #FFFFFF; - border-color: #A9691D; + border-color: $ds_accent; } QFrame#PrescriptionDrawerSurface QPushButton[variant="warning"]:hover { - color: #FFFFFF; - background-color: #A9691D; - border-color: #A9691D; + color: $ds_accent_hover; + background-color: $ds_accent_soft; + border-color: $ds_focus; } QFrame#PrescriptionDrawerSurface QPushButton[variant="secondary"] { color: #4F63D9; @@ -615,7 +616,8 @@ QFrame#PrescriptionDrawerSurface QFrame#MessageBanner[kind="danger"] { QFrame#PrescriptionDrawerSurface QFrame#MessageBanner[kind="danger"] QLabel { color: #BE4B58; } -""" +QFrame#PrescriptionDrawerSurface QPushButton:focus { border: 1px solid $ds_focus; } +""") _CHEVRON_PATH: Path | None = None @@ -647,7 +649,7 @@ def _prescription_drawer_qss() -> str: def _prescription_calendar_qss() -> str: - return """ + return clinical_stylesheet(""" QCalendarWidget { background-color: #FFFFFF; border: 1px solid #EDEDEE; @@ -672,13 +674,13 @@ QCalendarWidget QAbstractItemView:enabled { selection-color: #1A1C1F; outline: 0; } -""" +""") -PRESCRIPTION_DIALOG_QSS = """ +PRESCRIPTION_DIALOG_QSS = clinical_stylesheet(""" QDialog#PrescriptionDialogSurface { color: #1A1C1F; - background-color: #F7F7F7; + background-color: $ds_canvas; font-size: 14px; } QDialog#PrescriptionDialogSurface QLabel { @@ -740,7 +742,7 @@ QDialog#PrescriptionDialogSurface QTextBrowser { color: #1A1C1F; background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 7px; + border-radius: $ds_radius_control; selection-background-color: #EEF1FA; selection-color: #1A1C1F; font-size: 14px; } @@ -768,7 +770,7 @@ QDialog#PrescriptionDialogSurface QPushButton { color: #1A1C1F; background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 7px; + border-radius: $ds_radius_control; font-weight: 500; } QDialog#PrescriptionDialogSurface QPushButton:hover { @@ -798,7 +800,7 @@ QDialog#PrescriptionDialogSurface QPushButton:disabled { QDialog#PrescriptionDialogSurface QTabWidget::pane { background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 9px; + border-radius: $ds_radius_panel; top: -1px; } QDialog#PrescriptionDialogSurface QTabBar::tab { @@ -852,7 +854,8 @@ QDialog#PrescriptionDialogSurface QScrollBar::add-line:vertical, QDialog#PrescriptionDialogSurface QScrollBar::sub-line:vertical { height: 0; } -""" +QDialog#PrescriptionDialogSurface QPushButton:focus { border: 1px solid $ds_focus; } +""") def _apply_prescription_dialog_style(dialog: QDialog) -> None: @@ -1531,9 +1534,9 @@ class RemoteMedicineComboBox(QComboBox): popup = self._completer.popup() popup.setItemDelegate(_MedicineSuggestionDelegate(popup)) popup.setStyleSheet( - "QListView { background-color: #FFFFFF; border: 1px solid #E4E7ED; border-radius: 6px;" + clinical_stylesheet("QListView { background-color: #FFFFFF; border: 1px solid #E4E7ED; border-radius: 6px;" " padding: 4px 0; font-size: 14px; outline: 0; }" - "QListView::item:selected, QListView::item:hover { background-color: #F5F7FA; }" + "QListView::item:selected, QListView::item:hover { background-color: #F5F7FA; }") ) self.lineEdit().setCompleter(self._completer) self.lineEdit().installEventFilter(self) @@ -5292,8 +5295,8 @@ class PrescriptionDetailDialog(QDialog): self.preview.setObjectName("PrescriptionPaperPreview") self.preview.setOpenExternalLinks(False) self.preview.setStyleSheet( - "QTextBrowser#PrescriptionPaperPreview {" - "background-color:#F7F7F7; border:1px solid #E4E4E5; padding:0;}" + clinical_stylesheet("QTextBrowser#PrescriptionPaperPreview {" + "background-color:#F7F7F7; border:1px solid #E4E4E5; padding:0;}") ) self.preview.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.preview.setDocument(self.document) @@ -5301,8 +5304,8 @@ class PrescriptionDetailDialog(QDialog): self.user_preview.setObjectName("PrescriptionUserPaperPreview") self.user_preview.setOpenExternalLinks(False) self.user_preview.setStyleSheet( - "QTextBrowser#PrescriptionUserPaperPreview {" - "background-color:#F7F7F7; border:1px solid #E4E4E5; padding:0;}" + clinical_stylesheet("QTextBrowser#PrescriptionUserPaperPreview {" + "background-color:#F7F7F7; border:1px solid #E4E4E5; padding:0;}") ) self.user_preview.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.user_preview.setDocument(self.user_document) @@ -5320,8 +5323,8 @@ class PrescriptionDetailDialog(QDialog): self.case_preview.setObjectName("CaseRecordPaperPreview") self.case_preview.setOpenExternalLinks(False) self.case_preview.setStyleSheet( - "QTextBrowser#CaseRecordPaperPreview {" - "background-color:#F7F7F7; border:1px solid #E4E4E5; padding:0;}" + clinical_stylesheet("QTextBrowser#CaseRecordPaperPreview {" + "background-color:#F7F7F7; border:1px solid #E4E4E5; padding:0;}") ) self.case_preview.setDocument(self.case_document) case_index = self.tabs.addTab(self.case_preview, "详细病历") diff --git a/app/src/doctor_workstation/ui/dialogs/prescription_ai.py b/app/src/doctor_workstation/ui/dialogs/prescription_ai.py index 16201b000..db3d98638 100644 --- a/app/src/doctor_workstation/ui/dialogs/prescription_ai.py +++ b/app/src/doctor_workstation/ui/dialogs/prescription_ai.py @@ -26,6 +26,7 @@ from PySide6.QtWidgets import ( QWidget, ) +from ..design_system import clinical_stylesheet from ..report_provenance import report_provenance_lines from ..theme import apply_reading_rhythm from ..widgets import ( @@ -169,10 +170,10 @@ def diagnosis_ai_task(prompt: str) -> str: return "custom" -PRESCRIPTION_AI_QSS = """ +PRESCRIPTION_AI_QSS = clinical_stylesheet(""" QDialog#PrescriptionAiDialog { - color: #1A1C1F; - background-color: #F7F7F7; + color: $ds_text; + background-color: $ds_canvas; font-size: 13px; } @@ -182,7 +183,7 @@ QDialog#PrescriptionAiDialog QPushButton { color: #1A1C1F; background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 7px; + border-radius: $ds_radius_control; font-weight: 500; } QDialog#PrescriptionAiDialog QPushButton:hover { @@ -224,7 +225,7 @@ QLabel#PrescriptionAiSubtitle { QFrame#PrescriptionAiSnapshot { background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 10px; + border-radius: $ds_radius_panel; } QLabel#PrescriptionAiSnapshotLabel { color: #1A1C1F; @@ -232,20 +233,20 @@ QLabel#PrescriptionAiSnapshotLabel { font-weight: 600; } QLabel#PrescriptionAiSnapshotBody { - color: #1A1C1F; - font-size: 13px; + color: $ds_text; + font-size: 14px; line-height: 1.65; } QFrame#PrescriptionAiSummary { - background-color: #F0F0F0; + background-color: $ds_accent_soft; border: 0; border-left: 3px solid #4F63D9; - border-radius: 0 9px 9px 0; + border-radius: $ds_radius_control; } QFrame#PrescriptionAiCaution { background-color: #FFF9EE; border: 1px solid #F3DFB5; - border-radius: 9px; + border-radius: $ds_radius_control; } QLabel#PrescriptionAiSectionTitle { color: #1A1C1F; @@ -253,17 +254,17 @@ QLabel#PrescriptionAiSectionTitle { font-weight: 600; } QLabel#PrescriptionAiBody { - color: #1A1C1F; - font-size: 13px; + color: $ds_text; + font-size: 14px; line-height: 1.75; } QTextBrowser#PrescriptionAiAnswer { - color: #1A1C1F; + color: $ds_text; background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 10px; - padding: 12px 14px; - selection-color: #1A1C1F; + border-radius: $ds_radius_panel; + padding: 16px 18px; + selection-color: $ds_text; selection-background-color: #EEF1FA; } QLabel#PrescriptionAiMuted { @@ -279,7 +280,7 @@ QFrame#PrescriptionAiMeta { QDialog#PrescriptionAiDialog QTabWidget::pane { background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 10px; + border-radius: $ds_radius_panel; top: -1px; } QDialog#PrescriptionAiDialog QTabBar::tab { @@ -309,7 +310,7 @@ QDialog#PrescriptionAiDialog QTextEdit { color: #1A1C1F; background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 8px; + border-radius: $ds_radius_control; padding: 10px; selection-background-color: #EEF1FA; } @@ -330,10 +331,12 @@ QDialog#PrescriptionAiDialog QScrollBar::add-line:vertical, QDialog#PrescriptionAiDialog QScrollBar::sub-line:vertical { height: 0; } -""" +QDialog#PrescriptionAiDialog QPushButton:focus { border: 1px solid $ds_focus; } +QDialog#PrescriptionAiDialog QPushButton:disabled { color: $ds_disabled; background-color: $ds_disabled_surface; border-color: $ds_line; } +""") -_AI_ANSWER_DOCUMENT_CSS = ( - "body { color:#1A1C1F; font-size:14px; line-height:1.72; } " +_AI_ANSWER_DOCUMENT_CSS = clinical_stylesheet( + "body { color:$ds_text; font-size:14px; line-height:1.72; } " "h1 { color:#1A1C1F; font-size:20px; margin:14px 0 8px; line-height:1.4; } " "h2 { color:#1A1C1F; font-size:17px; margin:14px 0 7px; line-height:1.42; } " "h3,h4 { color:#1A1C1F; font-size:15px; margin:12px 0 6px; line-height:1.45; } " @@ -801,7 +804,7 @@ class PrescriptionAiReportDialog(QDialog): self.report_scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.host = QWidget() self.host_layout = QVBoxLayout(self.host) - self.host_layout.setContentsMargins(4, 4, 12, 8) + self.host_layout.setContentsMargins(18, 14, 20, 16) self.host_layout.setSpacing(12) self.report_scroll.setWidget(self.host) self.tabs.widget(0).layout().addWidget(self.report_scroll) @@ -1455,7 +1458,7 @@ class PrescriptionAiReportDialog(QDialog): label.setTextFormat(Qt.TextFormat.PlainText) label.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse) label.setWordWrap(True) - label.setStyleSheet("color: #555B68; font-size: 12px; padding: 10px 14px; background: #F7F8FC; border: 1px solid #E4E8F2; border-radius: 8px;") + label.setStyleSheet(clinical_stylesheet("color: $ds_muted; font-size: 12px; padding: 10px 14px; background: $ds_surface_alt; border: 1px solid $ds_line; border-radius: $ds_radius_control;")) self.host_layout.addWidget(label) def reject(self) -> None: diff --git a/app/src/doctor_workstation/ui/filter_disclosure.py b/app/src/doctor_workstation/ui/filter_disclosure.py index 0346c76ae..753fc4486 100644 --- a/app/src/doctor_workstation/ui/filter_disclosure.py +++ b/app/src/doctor_workstation/ui/filter_disclosure.py @@ -8,6 +8,7 @@ from PySide6.QtCore import QObject, QSize, Qt, Signal from PySide6.QtWidgets import QApplication, QPushButton, QWidget from . import icons +from .design_system import PALETTE, clinical_stylesheet class FilterDisclosure(QObject): @@ -35,17 +36,17 @@ class FilterDisclosure(QObject): self.button.setCursor(Qt.CursorShape.PointingHandCursor) self.button.setFixedHeight(32) self.button.setIconSize(QSize(14, 14)) - self.button.setStyleSheet(""" + self.button.setStyleSheet(clinical_stylesheet(""" QPushButton#FilterDisclosureButton { color: #1769E8; background: #FFFFFF; border: 1px solid #DBE5F2; - border-radius: 6px; padding: 0 11px; min-height: 30px; max-height: 30px; + border-radius: $ds_radius_control; padding: 0 11px; min-height: 30px; max-height: 30px; min-width: 92px; font-size: 13px; font-weight: 400; } - QPushButton#FilterDisclosureButton:hover { background: #F3F7FD; border-color: #ADC8F2; } - QPushButton#FilterDisclosureButton:checked { background: #EAF2FF; border-color: #ADC8F2; } - QPushButton#FilterDisclosureButton:focus { border-color: #1769E8; } - QPushButton#FilterDisclosureButton:disabled { color: #8B97A8; border-color: #E3E9F1; } - """) + QPushButton#FilterDisclosureButton:hover { background: $ds_canvas; border-color: $ds_line_strong; } + QPushButton#FilterDisclosureButton:checked { background: $ds_accent_soft; border-color: $ds_line_strong; } + QPushButton#FilterDisclosureButton:focus { border-color: $ds_focus; } + QPushButton#FilterDisclosureButton:disabled { color: $ds_disabled; border-color: $ds_line; } + """)) self.button.toggled.connect(self.set_expanded) self._apply() @@ -78,4 +79,4 @@ class FilterDisclosure(QObject): self.button.setAccessibleName(label) self.button.setAccessibleDescription("显示或收起检索条件和统计信息;收起保留当前筛选条件") self.button.setToolTip("收起保留当前筛选条件" if self._expanded else "展开检索条件和统计信息,当前筛选条件保持不变") - self.button.setIcon(icons.icon("chevron_up" if self._expanded else "chevron_down", "#1769E8", 14)) + self.button.setIcon(icons.icon("chevron_up" if self._expanded else "chevron_down", PALETTE["accent"], 14)) diff --git a/app/src/doctor_workstation/ui/infinite_list.py b/app/src/doctor_workstation/ui/infinite_list.py index 2b6082e36..19f9297e2 100644 --- a/app/src/doctor_workstation/ui/infinite_list.py +++ b/app/src/doctor_workstation/ui/infinite_list.py @@ -16,6 +16,7 @@ from PySide6.QtWidgets import ( QWidget, ) +from .design_system import clinical_stylesheet from .widgets import first_value, get_value, page_items, page_total, run_async @@ -54,16 +55,16 @@ class InfiniteList(QWidget): layout = QHBoxLayout(self) layout.setContentsMargins(12, 0, 12, 0) self.summary_label = QLabel("", self) - self.summary_label.setStyleSheet( + self.summary_label.setStyleSheet(clinical_stylesheet( "color: #5D6B80; font-size: 12px; background: transparent;" - ) + )) layout.addWidget(self.summary_label) layout.addStretch(1) self.retry_button = QPushButton("加载失败,点击重试", self) self.retry_button.setFlat(True) - self.retry_button.setStyleSheet( + self.retry_button.setStyleSheet(clinical_stylesheet( "color: #1769E8; font-size: 12px; padding: 0 4px; border: none; background: transparent; min-height: 20px; max-height: 20px; min-width: 0;" - ) + )) self.retry_button.hide() self.retry_button.clicked.connect(self.retry) layout.addWidget(self.retry_button) diff --git a/app/src/doctor_workstation/ui/login.py b/app/src/doctor_workstation/ui/login.py index 24aa407cc..691cc9000 100644 --- a/app/src/doctor_workstation/ui/login.py +++ b/app/src/doctor_workstation/ui/login.py @@ -5,26 +5,21 @@ from __future__ import annotations from contextlib import suppress from typing import Any -from PySide6.QtCore import QPoint, QPointF, QRectF, QSettings, Qt, QTimer, Signal +from PySide6.QtCore import QEvent, QPoint, QPointF, QRectF, QSettings, Qt, QTimer, Signal from PySide6.QtGui import ( - QBrush, QColor, QFont, QIcon, - QLinearGradient, QPainter, QPainterPath, QPen, QPixmap, - QPolygonF, - QRadialGradient, QResizeEvent, ) from PySide6.QtWidgets import ( QApplication, QCheckBox, QFrame, - QGraphicsDropShadowEffect, QHBoxLayout, QLabel, QLayout, @@ -45,6 +40,7 @@ from doctor_workstation import __version__ from doctor_workstation.resources import app_icon_path, brand_lockup_path from . import icons +from .design_system import PALETTE, clinical_stylesheet from .widgets import BusyOverlay, MessageBanner, friendly_error, invoke, run_async @@ -127,7 +123,7 @@ def _round_pen(color: QColor | str, width: float) -> QPen: class _BrandPanel(QWidget): - """The quiet medical illustration and copy from the supplied login artwork.""" + """A flat, readable introduction to the clinician's daily workflow.""" def __init__(self, parent: QWidget | None = None) -> None: super().__init__(parent) @@ -137,228 +133,76 @@ class _BrandPanel(QWidget): self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) self._brand_lockup = QPixmap(str(brand_lockup_path())) - @staticmethod - def _draw_cube(painter: QPainter, center: QPointF, size: float, kind: str) -> None: - x, y = center.x(), center.y() - top = QPolygonF( - [ - QPointF(x, y - size * 0.58), - QPointF(x + size * 0.48, y - size * 0.34), - QPointF(x, y - size * 0.10), - QPointF(x - size * 0.48, y - size * 0.34), - ] - ) - left = QPolygonF( - [ - QPointF(x - size * 0.48, y - size * 0.34), - QPointF(x, y - size * 0.10), - QPointF(x, y + size * 0.48), - QPointF(x - size * 0.48, y + size * 0.24), - ] - ) - right = QPolygonF( - [ - QPointF(x, y - size * 0.10), - QPointF(x + size * 0.48, y - size * 0.34), - QPointF(x + size * 0.48, y + size * 0.24), - QPointF(x, y + size * 0.48), - ] - ) - painter.setPen(QPen(QColor(185, 196, 247, 205), 1.2)) - painter.setBrush(QColor(235, 239, 255, 218)) - painter.drawPolygon(top) - painter.setBrush(QColor(210, 218, 255, 205)) - painter.drawPolygon(left) - painter.setBrush(QColor(224, 230, 255, 220)) - painter.drawPolygon(right) - painter.setPen(_round_pen(QColor(137, 154, 248, 135), 2.2)) - if kind == "plus": - painter.drawLine( - QPointF(x - size * 0.12, y + size * 0.05), - QPointF(x + size * 0.15, y - size * 0.02), - ) - painter.drawLine( - QPointF(x + size * 0.02, y - size * 0.13), - QPointF(x + size * 0.02, y + size * 0.17), - ) - else: - shield = QPainterPath(QPointF(x, y - size * 0.16)) - shield.lineTo(x + size * 0.15, y - size * 0.08) - shield.lineTo(x + size * 0.10, y + size * 0.17) - shield.lineTo(x, y + size * 0.26) - shield.lineTo(x - size * 0.10, y + size * 0.17) - shield.lineTo(x - size * 0.15, y - size * 0.08) - shield.closeSubpath() - painter.drawPath(shield) - - def _draw_illustration( - self, painter: QPainter, width: float, height: float - ) -> None: - ox = max(250.0, width - 500.0) - oy = max(365.0, height - 500.0) - - glow = QRadialGradient(QPointF(width - 170, oy + 230), 280) - glow.setColorAt(0.0, QColor(102, 120, 255, 62)) - glow.setColorAt(1.0, QColor(102, 120, 255, 0)) - painter.setPen(Qt.PenStyle.NoPen) - painter.setBrush(glow) - painter.drawEllipse(QPointF(width - 170, oy + 230), 280, 280) - - painter.setPen(QPen(QColor(166, 180, 241, 78), 1)) - for offset in (0, 72, 144): - painter.drawLine( - QPointF(ox - 80, oy + 280 + offset), - QPointF(width + 20, oy + 170 + offset), - ) - painter.drawLine(QPointF(ox + 10, oy + 400), QPointF(ox + 10, oy + 80)) - painter.drawLine(QPointF(ox + 170, oy + 430), QPointF(ox + 170, oy + 35)) - - base = QRectF(ox + 80, oy + 365, 430, 88) - base_gradient = QLinearGradient(base.topLeft(), base.bottomRight()) - base_gradient.setColorAt(0.0, QColor(246, 248, 255, 228)) - base_gradient.setColorAt(1.0, QColor(186, 199, 255, 184)) - painter.setBrush(base_gradient) - painter.setPen(QPen(QColor(166, 181, 248, 158), 1)) - painter.drawEllipse(base) - painter.setBrush(QColor(249, 250, 255, 225)) - painter.drawEllipse(QRectF(base.x() + 42, base.y() - 12, base.width() - 84, 70)) - - painter.save() - painter.translate(35, 40) - screen = QPolygonF( - [ - QPointF(ox + 130, oy + 60), - QPointF(ox + 435, oy + 100), - QPointF(ox + 435, oy + 365), - QPointF(ox + 130, oy + 310), - ] - ) - painter.setBrush(QColor(218, 225, 255, 205)) - painter.setPen(QPen(QColor(145, 163, 242, 170), 1.3)) - painter.drawPolygon(screen) - inner = QPolygonF( - [ - QPointF(ox + 141, oy + 80), - QPointF(ox + 425, oy + 117), - QPointF(ox + 425, oy + 345), - QPointF(ox + 141, oy + 295), - ] - ) - painter.setBrush(QColor(255, 255, 255, 225)) - painter.drawPolygon(inner) - - painter.setPen(Qt.PenStyle.NoPen) - painter.setBrush(QColor(174, 189, 252, 180)) - painter.drawRoundedRect(QRectF(ox + 148, oy + 89, 270, 15), 7, 7) - for dot_x in (156, 173, 190): - painter.setBrush(QColor(255, 255, 255, 200)) - painter.drawEllipse(QPointF(ox + dot_x, oy + 96.5), 3.5, 3.5) - - cards = ( - QRectF(ox + 150, oy + 135, 82, 80), - QRectF(ox + 241, oy + 142, 72, 73), - QRectF(ox + 322, oy + 151, 95, 72), - QRectF(ox + 151, oy + 232, 264, 50), - QRectF(ox + 151, oy + 291, 264, 42), - ) - painter.setPen(QPen(QColor(188, 199, 246, 160), 1)) - painter.setBrush(QColor(249, 250, 255, 228)) - for card in cards: - painter.drawRoundedRect(card, 7, 7) - painter.setPen(_round_pen(QColor(117, 137, 236, 165), 4)) - for idx, bar_height in enumerate((20, 36, 51)): - x = ox + 164 + idx * 17 - painter.drawLine(QPointF(x, oy + 200), QPointF(x, oy + 200 - bar_height)) - painter.setBrush(QColor(112, 132, 235, 160)) - painter.setPen(Qt.PenStyle.NoPen) - painter.drawEllipse(QPointF(ox + 277, oy + 167), 10, 10) - painter.drawRoundedRect(QRectF(ox + 259, oy + 180, 36, 20), 10, 10) - painter.setPen(_round_pen(QColor(137, 153, 235, 150), 5)) - for y, length in ((170, 54), (186, 42), (249, 89), (307, 72)): - painter.drawLine( - QPointF(ox + 340, oy + y), QPointF(ox + 340 + length, oy + y + 5) - ) - - self._draw_cube(painter, QPointF(ox + 352, oy - 25), 76, "plus") - self._draw_cube(painter, QPointF(ox - 8, oy + 210), 76, "shield") - painter.restore() - def paintEvent(self, event: Any) -> None: # noqa: N802 - Qt API del event painter = QPainter(self) painter.setRenderHint(QPainter.RenderHint.Antialiasing) - painter.setRenderHint(QPainter.RenderHint.TextAntialiasing) - bounds = QRectF(self.rect()).adjusted(0.5, 0.5, -0.5, -0.5) - background = QLinearGradient(bounds.topLeft(), bounds.bottomRight()) - background.setColorAt(0.0, QColor("#FFFFFF")) - background.setColorAt(0.7, QColor("#FFFFFF")) - background.setColorAt(1.0, QColor("#F7F7F7")) - painter.setBrush(background) - painter.setPen(QPen(QColor("#EDEDEE"), 1)) - painter.drawRoundedRect(bounds, 24, 24) - - width, height = float(self.width()), float(self.height()) - self._draw_illustration(painter, width, height) - - left = 64.0 if width >= 620 else 38.0 - if not self._brand_lockup.isNull(): - logo_width = 180.0 - logo_height = logo_width * ( - self._brand_lockup.height() / self._brand_lockup.width() - ) - painter.setRenderHint(QPainter.RenderHint.SmoothPixmapTransform) - painter.drawPixmap( - QRectF(left, 24, logo_width, logo_height), - self._brand_lockup, - QRectF(self._brand_lockup.rect()), - ) - - tag_rect = QRectF(left, 238, 119, 40) + bounds = QRectF(self.rect()).adjusted(1, 1, -1, -1) painter.setPen(Qt.PenStyle.NoPen) - painter.setBrush(QColor("#EEF1FA")) - painter.drawRoundedRect(tag_rect, 11, 11) - painter.setFont(_font(17, QFont.Weight.Medium)) - painter.setPen(QColor("#4F63D9")) - painter.drawText(tag_rect, Qt.AlignmentFlag.AlignCenter, "医生工作站") + painter.setBrush(QColor(PALETTE["sidebar"])) + painter.drawRoundedRect(bounds, 20, 20) + left = 36.0 + width = max(240.0, self.width() - 72.0) + if not self._brand_lockup.isNull(): + brand = self._brand_lockup.scaled( + 226, 58, Qt.AspectRatioMode.KeepAspectRatio, + Qt.TransformationMode.SmoothTransformation, + ) + painter.drawPixmap(QPointF(left, 36), brand) + else: + painter.setFont(_font(22, QFont.Weight.DemiBold)) + painter.setPen(QColor(PALETTE["heading"])) + painter.drawText(QPointF(left, 70), "甄养堂 · 医生工作站") - copy_left = left + 4 - painter.setFont(_font(48, QFont.Weight.Medium)) - painter.setPen(QColor("#1A1C1F")) - painter.drawText(QPointF(copy_left, 354), "把诊间工作,") - painter.drawText(QPointF(copy_left, 424), "留在一个") - prefix_width = painter.fontMetrics().horizontalAdvance("留在一个") - highlight = QLinearGradient( - copy_left + prefix_width, - 0, - copy_left + prefix_width + 264, - 0, - ) - highlight.setColorAt(0.0, QColor("#4F63D9")) - highlight.setColorAt(1.0, QColor("#4F63D9")) - painter.setPen(QPen(QBrush(highlight), 1)) - painter.drawText(QPointF(copy_left + prefix_width, 424), "安静的界面里") - suffix_x = ( - copy_left - + prefix_width - + painter.fontMetrics().horizontalAdvance("安静的界面里") - ) - painter.setPen(QColor("#1A1C1F")) - painter.drawText(QPointF(suffix_x, 424), "。") + heading_y = max(158.0, min(218.0, self.height() * .27)) + painter.setPen(QColor(PALETTE["muted"])) + painter.setFont(_font(13, QFont.Weight.Medium)) + painter.drawText(QPointF(left, heading_y - 36), "医 生 工 作 台") + painter.setPen(QColor(PALETTE["heading"])) + painter.setFont(_font(30, QFont.Weight.DemiBold)) + painter.drawText(QPointF(left, heading_y), "让诊疗有序,") + painter.drawText(QPointF(left, heading_y + 44), "让沟通更专注。") + painter.setFont(_font(14)) + painter.setPen(QColor(PALETTE["muted"])) + painter.drawText(QPointF(left, heading_y + 82), "从接诊、病历到处方,在一个工作台完成。") - body_left = left + 6 - painter.setFont(_font(20)) - painter.setPen(QColor("#606163")) - painter.drawText( - QPointF(body_left, 492), "接诊、问诊、患者与处方信息统一呈现," - ) - painter.drawText(QPointF(body_left, 525), "帮助医生专注于每一次沟通。") + row_y = heading_y + 122 + for index, (title, detail) in enumerate(( + ("今日接诊", "快速找到待接诊患者与预约安排"), + ("诊疗记录", "病历、随访与面诊资料集中查看"), + ("处方协作", "开方与审核流程清晰衔接"), + ), start=1): + row = QRectF(left, row_y, width, 66) + painter.setPen(Qt.PenStyle.NoPen) + painter.setBrush(QColor(PALETTE["surface"])) + painter.drawRoundedRect(row, 12, 12) + painter.setFont(_font(13, QFont.Weight.DemiBold)) + painter.setPen(QColor(PALETTE["accent"])) + painter.drawText(QRectF(left + 16, row_y, 28, 66), Qt.AlignmentFlag.AlignCenter, f"0{index}") + painter.setFont(_font(15, QFont.Weight.Medium)) + painter.setPen(QColor(PALETTE["heading"])) + painter.drawText(QPointF(left + 58, row_y + 27), title) + painter.setFont(_font(12)) + painter.setPen(QColor(PALETTE["muted"])) + painter.drawText(QPointF(left + 58, row_y + 47), detail) + row_y += 78 + if self.height() > row_y + 50: + painter.setFont(_font(12)) + painter.setPen(QColor(PALETTE["muted"])) + painter.drawText(QPointF(left, self.height() - 28), "仅供获授权的医疗人员使用") + painter.end() - painter.setFont(_font(16)) - painter.setPen(QColor("#6A6B6D")) - painter.drawText( - QPointF(body_left, height - 85), "本工作站仅供获授权的医疗人员使用" - ) - painter.drawText(QPointF(body_left, height - 59), "请勿在公共设备保存账号信息") + +class _PasswordField(QFrame): + """Keep the grouped password control visibly focused for keyboard users.""" + + def eventFilter(self, watched: Any, event: QEvent) -> bool: # noqa: N802 + if event.type() in (QEvent.Type.FocusIn, QEvent.Type.FocusOut): + self.setProperty("focused", event.type() == QEvent.Type.FocusIn) + self.style().unpolish(self) + self.style().polish(self) + self.update() + return super().eventFilter(watched, event) class _RevealButton(QToolButton): @@ -392,8 +236,8 @@ class _ServerButton(QPushButton): painter = QPainter(self) painter.setRenderHint(QPainter.RenderHint.Antialiasing) rect = QRectF(self.rect()).adjusted(0.75, 0.75, -0.75, -0.75) - painter.setBrush(QColor("#FFFFFF") if self.underMouse() else QColor("#FFFFFF")) - painter.setPen(QPen(QColor("#E4E4E5"), 1.5)) + painter.setBrush(QColor(PALETTE["accent_soft"] if self.underMouse() else PALETTE["surface"])) + painter.setPen(QPen(QColor(PALETTE["focus"] if self.hasFocus() else PALETTE["line_strong"]), 1)) painter.drawRoundedRect(rect, 12, 12) color = QColor("#1A1C1F" if self.isEnabled() else "#8E8F90") painter.setPen(_round_pen("#6A6B6D", 1.8)) @@ -536,7 +380,7 @@ class LoginWindow(QMainWindow): border: 1px solid #E4E4E5; border-radius: 12px; } - QFrame#PasswordField:focus-within { border-color: #8B9AD9; } + QFrame#PasswordField[focused="true"] { border-color: #8B9AD9; } QFrame#LoginCard QCheckBox { color: #606163; spacing: 13px; @@ -606,6 +450,9 @@ class LoginWindow(QMainWindow): self.login_root.addWidget(self.brand_panel, 60) self.login_root.addWidget(self._build_login_area(), 40) self._restore_settings() + for widget in (canvas, *canvas.findChildren(QWidget)): + if widget.styleSheet(): + widget.setStyleSheet(clinical_stylesheet(widget.styleSheet())) def resizeEvent(self, event: QResizeEvent) -> None: # noqa: N802 - Qt API """Preserve the reference composition while remaining usable on small screens.""" @@ -625,18 +472,15 @@ class LoginWindow(QMainWindow): # Keep the form fully visible when the 60/40 desktop split would # otherwise crop its fixed-width card. Small windows focus on login. self.brand_panel.setVisible(width >= 1120) + compact_height = event.size().height() < 720 + self.card.setMinimumHeight(580 if compact_height else 620) self.login_area_layout.setContentsMargins( - 0, min(104, max(24, (event.size().height() - 694) // 2)), 0, 12 + 0, 12 if compact_height else min(104, max(24, (event.size().height() - 694) // 2)), 0, 12 ) super().resizeEvent(event) def _build_brand_panel(self) -> QWidget: panel = _BrandPanel() - shadow = QGraphicsDropShadowEffect(panel) - shadow.setBlurRadius(32) - shadow.setOffset(0, 10) - shadow.setColor(QColor(67, 82, 154, 18)) - panel.setGraphicsEffect(shadow) return panel def _build_login_area(self) -> QWidget: @@ -660,11 +504,6 @@ class LoginWindow(QMainWindow): self.card.setFixedWidth(480) self.card.setMinimumHeight(620) self.card.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - card_shadow = QGraphicsDropShadowEffect(self.card) - card_shadow.setBlurRadius(38) - card_shadow.setOffset(0, 16) - card_shadow.setColor(QColor(59, 77, 139, 24)) - self.card.setGraphicsEffect(card_shadow) card_layout = QVBoxLayout(self.card) card_layout.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) card_layout.setContentsMargins(47, 42, 47, 26) @@ -673,13 +512,13 @@ class LoginWindow(QMainWindow): title = QLabel("欢迎回来") title.setObjectName("LoginTitle") - title.setStyleSheet("color:#1A1C1F; font-size:30px; font-weight:500;") + title.setStyleSheet("color:#1A1C1F; font-size:26px; font-weight:600;") title.setContentsMargins(1, -3, 0, 3) title.setFixedHeight(46) card_layout.addWidget(title) subtitle = QLabel("使用医生账号登录工作站") subtitle.setProperty("role", "muted") - subtitle.setStyleSheet("color:#606163; font-size:18px;") + subtitle.setStyleSheet("color:#606163; font-size:15px;") subtitle.setContentsMargins(1, 8, 0, 0) subtitle.setFixedHeight(27) card_layout.addWidget(subtitle) @@ -710,7 +549,7 @@ class LoginWindow(QMainWindow): password_label.setFixedHeight(24) card_layout.addWidget(password_label) card_layout.addSpacing(11) - password_field = QFrame() + password_field = _PasswordField() password_field.setObjectName("PasswordField") password_field.setFixedHeight(54) password_row = QHBoxLayout(password_field) @@ -721,6 +560,7 @@ class LoginWindow(QMainWindow): self.password_edit.setEchoMode(QLineEdit.EchoMode.Password) self.password_edit.setPlaceholderText("请输入密码") self.password_edit.setAccessibleName("登录密码") + self.password_edit.installEventFilter(password_field) self.password_edit.setTextMargins(0, -2, 0, 2) self.password_edit.returnPressed.connect(self.submit) password_row.addWidget(self.password_edit, 1) @@ -730,6 +570,7 @@ class LoginWindow(QMainWindow): self.reveal_button.setCheckable(True) self.reveal_button.setFixedSize(87, 52) self.reveal_button.setToolTip("显示或隐藏密码") + self.reveal_button.installEventFilter(password_field) self.reveal_button.toggled.connect(self._toggle_password) password_row.addWidget(self.reveal_button) card_layout.addWidget(password_field) @@ -758,11 +599,6 @@ class LoginWindow(QMainWindow): self.login_button = QPushButton("登录工作站") self.login_button.setProperty("variant", "primary") self.login_button.setFixedHeight(58) - login_shadow = QGraphicsDropShadowEffect(self.login_button) - login_shadow.setBlurRadius(20) - login_shadow.setOffset(0, 7) - login_shadow.setColor(QColor(82, 101, 246, 45)) - self.login_button.setGraphicsEffect(login_shadow) self.login_button.clicked.connect(self.submit) card_layout.addWidget(self.login_button) self.debug_settings_section = QWidget() diff --git a/app/src/doctor_workstation/ui/motion.py b/app/src/doctor_workstation/ui/motion.py index 6236d8b14..9a4e41ce6 100644 --- a/app/src/doctor_workstation/ui/motion.py +++ b/app/src/doctor_workstation/ui/motion.py @@ -37,8 +37,10 @@ from PySide6.QtCore import ( QTimer, ) from PySide6.QtWidgets import ( + QAbstractItemView, QAbstractScrollArea, QGraphicsOpacityEffect, + QPlainTextEdit, QStackedWidget, QWidget, ) @@ -75,15 +77,35 @@ def reduced_motion() -> bool: return os.getenv("QT_QPA_PLATFORM", "").strip().lower() == "offscreen" -def _own(target: QWidget, key: str, animation: QPropertyAnimation) -> QPropertyAnimation: - """Park an animation on its target so Python does not collect it early.""" +def _stop(target: QObject, key: str) -> None: + """Retire a replaced animation without firing its completion callback.""" - running: dict[str, QPropertyAnimation] = getattr(target, "_doctor_motion", None) or {} - previous = running.get(key) + running = getattr(target, "_doctor_motion", {}) + previous = running.pop(key, None) if previous is not None: previous.stop() + previous.setParent(None) + previous.deleteLater() + + +def _own(target: QObject, key: str, animation: QPropertyAnimation) -> QPropertyAnimation: + """Park an animation on its target so Python does not collect it early.""" + + _stop(target, key) + running: dict[str, QPropertyAnimation] = getattr(target, "_doctor_motion", {}) running[key] = animation target._doctor_motion = running + + def release() -> None: + if running.get(key) is animation: + running.pop(key) + # A callback can hold the last Python reference to the owner. Detach + # first so releasing that callback during deferred deletion cannot + # recursively delete this animation through its former parent. + animation.setParent(None) + animation.deleteLater() + + animation.finished.connect(release) return animation @@ -107,7 +129,10 @@ def animate( from inside its own ``finished`` emission. """ + animation_owner = owner if owner is not None else target + animation_key = key or prop.decode() if reduced_motion(): + _stop(animation_owner, animation_key) target.setProperty(prop.decode() if isinstance(prop, bytes) else prop, end) if on_finished is not None: on_finished() @@ -117,18 +142,24 @@ def animate( animation.setEasingCurve(easing) animation.setStartValue(start) animation.setEndValue(end) + _own(animation_owner, animation_key, animation) if on_finished is not None: animation.finished.connect(on_finished) - _own(owner if owner is not None else target, key or prop.decode(), animation) animation.start(QAbstractAnimation.DeletionPolicy.KeepWhenStopped) return animation -def _opacity_effect(widget: QWidget) -> QGraphicsOpacityEffect: +def _opacity_effect(widget: QWidget) -> QGraphicsOpacityEffect | None: effect = widget.graphicsEffect() - if not isinstance(effect, QGraphicsOpacityEffect): + # Do not replace a caller's shadow or opacity effect: Qt deletes it when + # another effect is attached. Only effects created here belong to a fade. + if effect is not None and effect is not getattr(widget, "_doctor_opacity_effect", None): + return None + if effect is None: effect = QGraphicsOpacityEffect(widget) + effect.setOpacity(1.0) widget.setGraphicsEffect(effect) + widget._doctor_opacity_effect = effect effect.setEnabled(True) return effect @@ -146,9 +177,17 @@ def _drop_effect(widget: QWidget) -> None: signal that is still being delivered. """ + effect = getattr(widget, "_doctor_opacity_effect", None) + revision = getattr(widget, "_doctor_fade_revision", 0) + def detach() -> None: try: - if isinstance(widget.graphicsEffect(), QGraphicsOpacityEffect): + if ( + effect is not None + and widget.graphicsEffect() is effect + and getattr(widget, "_doctor_fade_revision", 0) == revision + ): + widget._doctor_opacity_effect = None widget.setGraphicsEffect(None) except RuntimeError: # the widget went away while the fade was running pass @@ -156,6 +195,13 @@ def _drop_effect(widget: QWidget) -> None: QTimer.singleShot(0, detach) +def _restart_fade(widget: QWidget) -> None: + _stop(widget, "fade") + # A completed fade may still have deferred cleanup waiting in the queue. + # It must not remove an effect now being used by a subsequent fade. + widget._doctor_fade_revision = getattr(widget, "_doctor_fade_revision", 0) + 1 + + def fade_in( widget: QWidget, *, @@ -165,10 +211,20 @@ def fade_in( ) -> None: """Fade a widget up to full opacity, showing it first if needed.""" + existing = widget.graphicsEffect() + if existing is not None and existing is getattr(widget, "_doctor_opacity_effect", None): + start = float(existing.opacity()) + _restart_fade(widget) if reduced_motion(): + if existing is not None and existing is getattr(widget, "_doctor_opacity_effect", None): + existing.setOpacity(1.0) + _drop_effect(widget) widget.show() return effect = _opacity_effect(widget) + if effect is None: + widget.show() + return effect.setOpacity(start) widget.show() animate( @@ -193,9 +249,11 @@ def fade_out( ) -> None: """Fade a widget down, optionally hiding it when the fade completes.""" + _restart_fade(widget) if reduced_motion(): if hide: widget.hide() + _drop_effect(widget) if on_finished is not None: on_finished() return @@ -208,6 +266,9 @@ def fade_out( if on_finished is not None: on_finished() + if effect is None: + done() + return animate( effect, b"opacity", @@ -229,13 +290,17 @@ def enter(widget: QWidget, *, duration: int = BASE, rise: int = RISE) -> None: the user has to wait out. """ + previous = getattr(widget, "_doctor_motion", {}).get("enter") + origin = previous.endValue() if previous is not None else widget.pos() if reduced_motion(): - widget.show() + _stop(widget, "enter") + widget.move(origin) + fade_in(widget, duration=duration) return fade_in(widget, duration=duration) if rise: - origin = widget.pos() - widget.move(origin + QPoint(0, rise)) + if previous is None: + widget.move(origin + QPoint(0, rise)) animate( widget, b"pos", @@ -260,7 +325,7 @@ def switch_stack(stack: QStackedWidget, index: int, *, rise: int = RISE) -> None return stack.setCurrentIndex(index) page = stack.currentWidget() - if page is None or reduced_motion(): + if page is None: return enter(page, rise=rise) @@ -274,50 +339,121 @@ SCROLL_STEP = 120 SCROLL_MS = 190 +class _ScrollAnimation(QPropertyAnimation): + """Identify animation writes so direct scrollbar changes can interrupt us.""" + + writing = False + + def updateCurrentValue(self, value: Any) -> None: # noqa: N802 - Qt API + self.writing = True + try: + super().updateCurrentValue(value) + finally: + self.writing = False + + class _SmoothScroller(QObject): """Animate a scroll area's wheel movement instead of jumping to it.""" + _INTERRUPT_EVENTS = frozenset( + { + QEvent.Type.KeyPress, + QEvent.Type.MouseButtonPress, + QEvent.Type.TouchBegin, + QEvent.Type.Hide, + } + ) + def __init__(self, area: QAbstractScrollArea, *, orientation: Qt.Orientation) -> None: super().__init__(area) + self._area = area + self._orientation = orientation self._bar = ( area.verticalScrollBar() if orientation is Qt.Orientation.Vertical else area.horizontalScrollBar() ) self._target = self._bar.value() - self._animation = QPropertyAnimation(self._bar, b"value", self) + self._animation = _ScrollAnimation(self._bar, b"value", self) self._animation.setEasingCurve(EASE_ENTER) self._animation.setDuration(SCROLL_MS) - # Keyboard, programmatic and drag movements must not be fought over: when - # nothing is animating, the wheel target follows wherever the bar went. self._bar.valueChanged.connect(self._sync_target) + self._bar.sliderPressed.connect(self._cancel) + self._bar.actionTriggered.connect(self._cancel) + self._bar.rangeChanged.connect(self._cancel) + self._bar.installEventFilter(self) + area.installEventFilter(self) area.viewport().installEventFilter(self) + def _cancel(self, *_: Any) -> None: + self._animation.stop() + self._target = self._bar.value() + def _sync_target(self, value: int) -> None: - if self._animation.state() != QAbstractAnimation.State.Running: + if not self._animation.writing: + self._animation.stop() self._target = value + def _uses_pixels(self) -> bool: + if isinstance(self._area, QAbstractItemView): + mode = ( + self._area.verticalScrollMode() + if self._orientation == Qt.Orientation.Vertical + else self._area.horizontalScrollMode() + ) + return mode == QAbstractItemView.ScrollMode.ScrollPerPixel + # QPlainTextEdit's vertical scrollbar counts text blocks, not pixels. + return not ( + isinstance(self._area, QPlainTextEdit) and self._orientation == Qt.Orientation.Vertical + ) + def eventFilter(self, watched: QObject, event: QEvent) -> bool: # noqa: N802 - Qt API - del watched - if event.type() is not QEvent.Type.Wheel or reduced_motion(): + event_type = event.type() + if event_type in self._INTERRUPT_EVENTS: + self._cancel() return False - delta = event.angleDelta().y() or event.angleDelta().x() - if not delta or event.modifiers() & Qt.KeyboardModifier.ControlModifier: + if event_type != QEvent.Type.Wheel: return False + horizontal = self._orientation == Qt.Orientation.Horizontal + shifted = bool(event.modifiers() & Qt.KeyboardModifier.ShiftModifier) + delta = event.angleDelta().x() if horizontal else event.angleDelta().y() + if horizontal and shifted and not delta: + delta = event.angleDelta().y() + if ( + watched is not self._area.viewport() + or reduced_motion() + or not self._uses_pixels() + or not event.pixelDelta().isNull() + or event.phase() != Qt.ScrollPhase.NoScrollPhase + or event.modifiers() + & (Qt.KeyboardModifier.ControlModifier | Qt.KeyboardModifier.AltModifier) + or (shifted and not horizontal) + or not delta + ): + # Trackpads already provide continuous motion and native momentum. + # Mixing another easing curve into it adds lag and fights gestures. + self._cancel() + return False + lower, upper = self._bar.minimum(), self._bar.maximum() # Re-clamp first: the range can shrink underneath a running animation # when the content behind it reloads, which would otherwise leave the # pending target past the end of the new content. self._target = max(lower, min(upper, self._target)) - target = self._target - round(delta / 120.0 * SCROLL_STEP) + current = self._bar.value() + step = -round(delta / 120.0 * SCROLL_STEP) + # Reverse immediately from the visible position, not the end of a + # backlog of wheel notches still travelling in the opposite direction. + origin = current if (self._target - current) * step < 0 else self._target + target = origin + step target = max(lower, min(upper, target)) # At either end, hand the wheel back so an enclosing scroll area still # gets it - swallowing it there is what makes nested panes feel stuck. if target == self._target: - return False + return target != current self._target = target self._animation.stop() - self._animation.setStartValue(self._bar.value()) + self._animation.setStartValue(current) self._animation.setEndValue(target) self._animation.start() return True @@ -328,7 +464,7 @@ def install_smooth_scroll( *, orientation: Qt.Orientation = Qt.Orientation.Vertical, ) -> None: - """Give a scroll area eased wheel scrolling.""" + """Ease discrete wheels on pixel-based areas; preserve native gestures.""" if getattr(area, "_doctor_smooth_scroll", None) is not None: return diff --git a/app/src/doctor_workstation/ui/pages/patients.py b/app/src/doctor_workstation/ui/pages/patients.py index a83e2893f..d56f34338 100644 --- a/app/src/doctor_workstation/ui/pages/patients.py +++ b/app/src/doctor_workstation/ui/pages/patients.py @@ -50,6 +50,7 @@ from ...core.appointment_modes import ( ) from .. import icons from ..appointment_drawer import AppointmentDrawer +from ..design_system import PALETTE, clinical_stylesheet from ..dialogs import DiagnosisDialog, present_ai_consult, present_order_detail from ..dialogs.ai_consult import can_open_ai_consult from ..dialogs.prescription import PrescriptionOrderListDialog @@ -110,97 +111,97 @@ FULFILLMENT_TEXT = { } _SEMANTIC_COLORS = { - "primary": "#4F63D9", - "success": "#287B65", - "warning": "#A9691D", - "danger": "#BE4B58", - "info": "#4F63D9", - "muted": "#606163", + "primary": PALETTE["accent"], + "success": PALETTE["success"], + "warning": PALETTE["warning"], + "danger": PALETTE["danger"], + "info": PALETTE["accent"], + "muted": PALETTE["muted"], } -PATIENTS_LIGHT_QSS = """ +PATIENTS_LIGHT_QSS = clinical_stylesheet(""" #PatientsPage QWidget#PageHeader QLabel[role="pageTitle"] { - color: #1A1C1F; + color: $ds_heading; font-size: 20px; font-weight: 600; } #PatientsPage QWidget#PageHeader QLabel[role="muted"] { - color: #606163; + color: $ds_muted; font-size: 13px; } #PatientsPage QPushButton[patientSearchAction="true"] { min-height: 32px; max-height: 32px; - color: #FFFFFF; - background-color: #4F63D9; - border: 1px solid #4F63D9; + color: $ds_surface; + background-color: $ds_accent; + border: 1px solid $ds_accent; border-radius: 7px; font-weight: 500; } #PatientsPage QPushButton[patientSearchAction="true"]:hover { - background-color: #4156C4; - border-color: #4156C4; + background-color: $ds_accent_hover; + border-color: $ds_accent_hover; } #PatientsPage QFrame[patientListFilter="true"] { min-height: 88px; max-height: 88px; - background-color: #FFFFFF; - border: 1px solid #EDEDEE; + background-color: $ds_surface; + border: 1px solid $ds_line; border-radius: 12px; } #PatientsPage QFrame[patientListFilter="true"] QLineEdit, #PatientsPage QFrame[patientListFilter="true"] QDateEdit { min-height: 32px; max-height: 32px; - background-color: #FFFFFF; - border: 1px solid #EDEDEE; + background-color: $ds_surface; + border: 1px solid $ds_line; border-radius: 7px; font-size: 14px; } #PatientsPage QFrame[patientListFilter="true"] QPushButton { min-height: 32px; max-height: 32px; } #PatientsPage QFrame[patientListFilter="true"] QDateEdit:disabled { - color: #8E8F90; background-color: #F7F7F7; + color: $ds_disabled; background-color: $ds_surface_alt; } #PatientsPage QPushButton[patientStatusChip="true"] { min-height: 32px; max-height: 32px; padding: 0 10px; - color: #606163; - background-color: #F7F7F7; + color: $ds_muted; + background-color: $ds_surface_alt; border: 1px solid transparent; border-radius: 5px; } #PatientsPage QPushButton[patientStatusChip="true"]:hover { - color: #4F63D9; - background-color: #EEF1FA; + color: $ds_accent; + background-color: $ds_accent_soft; } #PatientsPage QPushButton[patientStatusChip="true"]:checked { - color: #4F63D9; - background-color: #EEF1FA; - border: 1px solid #8B9AD9; + color: $ds_accent; + background-color: $ds_accent_soft; + border: 1px solid $ds_focus; } #PatientsPage QPushButton[patientQuickDate="true"] { min-height: 32px; max-height: 32px; padding: 0 9px; - color: #1A1C1F; + color: $ds_heading; background-color: transparent; border: 1px solid transparent; border-radius: 7px; } #PatientsPage QPushButton[patientQuickDate="true"]:hover { - color: #4F63D9; - background-color: #EEF1FA; + color: $ds_accent; + background-color: $ds_accent_soft; } #PatientsPage QPushButton[patientQuickDate="true"]:checked { - color: #4F63D9; - background-color: #EEF1FA; - border-color: #8B9AD9; + color: $ds_accent; + background-color: $ds_accent_soft; + border-color: $ds_focus; } #PatientsPage QTabWidget#PatientWorkspaceTabs::pane { border: 0; - border-top: 1px solid #EDEDEE; + border-top: 1px solid $ds_line; background-color: transparent; } #PatientsPage QTabWidget#PatientWorkspaceTabs QTabBar::tab { @@ -208,124 +209,124 @@ PATIENTS_LIGHT_QSS = """ min-height: 34px; padding: 0 6px; margin-right: 8px; - color: #606163; + color: $ds_muted; background: transparent; border: 0; border-bottom: 2px solid transparent; font-weight: 400; } #PatientsPage QTabWidget#PatientWorkspaceTabs QTabBar::tab:selected { - color: #4F63D9; - border-bottom-color: #4F63D9; + color: $ds_accent; + border-bottom-color: $ds_accent; font-weight: 500; } #PatientsPage QPushButton[summaryCard="true"] { min-height: 42px; max-height: 42px; padding: 0 11px; - color: #1A1C1F; - background-color: #F7F7F7; - border: 1px solid #EDEDEE; + color: $ds_heading; + background-color: $ds_surface_alt; + border: 1px solid $ds_line; border-radius: 9px; text-align: left; font-weight: 500; } #PatientsPage QPushButton[summaryCard="true"]:hover { - color: #4F63D9; - background-color: #EEF1FA; - border-color: #8B9AD9; + color: $ds_accent; + background-color: $ds_accent_soft; + border-color: $ds_focus; } #PatientsPage QPushButton[rowAction="true"] { min-height: 26px; max-height: 26px; padding: 0 7px; - color: #4F63D9; - background-color: #FFFFFF; - border: 1px solid #EDEDEE; + color: $ds_accent; + background-color: $ds_surface; + border: 1px solid $ds_line; border-radius: 6px; font-size: 13px; font-weight: 400; } #PatientsPage QPushButton[rowAction="true"]:hover { - background-color: #EEF1FA; - border-color: #8B9AD9; + background-color: $ds_accent_soft; + border-color: $ds_focus; } #PatientsPage QPushButton[rowAction="true"][variant="danger"] { - color: #BE4B58; - background-color: #FFF7F8; - border-color: #F4C4CC; + color: $ds_danger; + background-color: $ds_danger_soft; + border-color: $ds_danger_soft; } #PatientsPage QTableWidget#PatientTable QHeaderView::section { min-height: 34px; - background-color: #F7F7F7; font-size: 13px; + background-color: $ds_surface_alt; font-size: 13px; } #PatientsPage QTableWidget#PatientTable::item { padding: 5px 7px; } #PatientsPage QTableWidget#PatientTable { - gridline-color: #EDEDEE; - selection-background-color: #EEF1FA; - selection-color: #1A1C1F; font-size: 14px; + gridline-color: $ds_line; + selection-background-color: $ds_accent_soft; + selection-color: $ds_heading; font-size: 14px; } #PatientsPage QCheckBox[patientSelector="true"]::indicator { width: 13px; height: 13px; - background-color: #FFFFFF; - border: 1px solid #EDEDEE; + background-color: $ds_surface; + border: 1px solid $ds_line; border-radius: 2px; } #PatientsPage QCheckBox[patientSelector="true"]::indicator:checked { - background-color: #4F63D9; - border-color: #4F63D9; + background-color: $ds_accent; + border-color: $ds_accent; } #PatientsPage QPushButton[variant="ghost"]:checked { - color: #4F63D9; - background-color: #EEF1FA; - border: 1px solid #4F63D9; + color: $ds_accent; + background-color: $ds_accent_soft; + border: 1px solid $ds_accent; } -#PatientsPage QPushButton[variant="ghost"]:checked:hover { background-color: #EEF1FA; } +#PatientsPage QPushButton[variant="ghost"]:checked:hover { background-color: $ds_accent_soft; } #PatientsPage QPushButton[statusKind="info"]:checked { - color: #4F63D9; - border-color: #4F63D9; + color: $ds_accent; + border-color: $ds_accent; } #PatientsPage QPushButton[statusKind="warning"]:checked { - color: #A9691D; - border-color: #A9691D; + color: $ds_warning; + border-color: $ds_warning; } #PatientsPage QPushButton[statusKind="success"]:checked { - color: #287B65; - border-color: #287B65; + color: $ds_success; + border-color: $ds_success; } #PatientsPage QPushButton[statusKind="danger"]:checked { - color: #BE4B58; - border-color: #BE4B58; + color: $ds_danger; + border-color: $ds_danger; } -#PatientsPage QLabel[metricKind="primary"] { color: #4F63D9; } -#PatientsPage QLabel[metricKind="info"] { color: #4F63D9; } -#PatientsPage QLabel[metricKind="success"] { color: #287B65; } -#PatientsPage QLabel[metricKind="warning"] { color: #A9691D; } -#PatientsPage QLabel[metricKind="danger"] { color: #BE4B58; } +#PatientsPage QLabel[metricKind="primary"] { color: $ds_accent; } +#PatientsPage QLabel[metricKind="info"] { color: $ds_accent; } +#PatientsPage QLabel[metricKind="success"] { color: $ds_success; } +#PatientsPage QLabel[metricKind="warning"] { color: $ds_warning; } +#PatientsPage QLabel[metricKind="danger"] { color: $ds_danger; } #PatientsPage QTabWidget#PatientWorkspaceTabs::pane { background-color: transparent; border: 0; top: -1px; } #PatientsPage QTabWidget#PatientWorkspaceTabs QTabBar::tab { - color: #606163; + color: $ds_muted; background-color: transparent; border: 0; border-bottom: 2px solid transparent; font-weight: 400; } #PatientsPage QTabWidget#PatientWorkspaceTabs QTabBar::tab:hover { - color: #4F63D9; - background-color: #EEF1FA; + color: $ds_accent; + background-color: $ds_accent_soft; } #PatientsPage QTabWidget#PatientWorkspaceTabs QTabBar::tab:selected { - color: #4F63D9; + color: $ds_accent; background-color: transparent; - border-bottom-color: #4F63D9; + border-bottom-color: $ds_accent; font-weight: 500; } -""" +""") def _style_table_cell(table: SortableTable, row: int, column: int, kind: str) -> None: @@ -1282,7 +1283,7 @@ class _PatientDateEdit(QDateEdit): def paintEvent(self, event: Any) -> None: super().paintEvent(event) painter = QPainter(self) - glyph = icons.pixmap("calendar", "#5D6B80" if self.isEnabled() else "#8A97A9", 15) + glyph = icons.pixmap("calendar", PALETTE["muted"] if self.isEnabled() else PALETTE["disabled"], 15) painter.drawPixmap(QRectF(self.width() - 24, (self.height() - 15) / 2, 15, 15), glyph, QRectF(glyph.rect())) painter.end() @@ -1300,18 +1301,18 @@ class _PatientSummaryButton(QPushButton): label, _, count = self.text().partition("\n") left = max(18, (self.width() - 204) // 2) icon_rect = QRectF(left, (self.height() - 36) / 2, 36, 36) - glyph = icons.pixmap("calendar", "#1769E8", 36) + glyph = icons.pixmap("calendar", PALETTE["accent"], 36) painter.drawPixmap(icon_rect, glyph, QRectF(glyph.rect())) font = QFont(body_family()) font.setPixelSize(13) painter.setFont(font) - painter.setPen(QColor("#5D6B80")) + painter.setPen(QColor(PALETTE["muted"])) text_rect = self.rect().adjusted(left + 46, 10, -12, -32) painter.drawText(text_rect, Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter, painter.fontMetrics().elidedText(label, Qt.TextElideMode.ElideRight, text_rect.width())) font.setPixelSize(16) painter.setFont(font) - painter.setPen(QColor("#273244")) + painter.setPen(QColor(PALETTE["text"])) painter.drawText(self.rect().adjusted(left + 46, 31, -12, -9), Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter, count) painter.end() @@ -1324,11 +1325,11 @@ class _PatientInfoDelegate(QStyledItemDelegate): painter.save() selected = bool(option.state & QStyle.StateFlag.State_Selected) hovered = bool(option.state & QStyle.StateFlag.State_MouseOver) - painter.fillRect(option.rect, QColor("#EAF2FF" if selected else "#F6F9FE" if hovered else "#FFFFFF")) - painter.setPen(QColor("#E6EDF6")) + painter.fillRect(option.rect, QColor(PALETTE["accent_soft"] if selected else PALETTE["surface_alt"] if hovered else PALETTE["surface"])) + painter.setPen(QColor(PALETTE["line"])) painter.drawLine(option.rect.bottomLeft(), option.rect.bottomRight()) if selected and index.column() == 0: - painter.fillRect(option.rect.adjusted(0, 0, -option.rect.width() + 3, 0), QColor("#1769E8")) + painter.fillRect(option.rect.adjusted(0, 0, -option.rect.width() + 3, 0), QColor(PALETTE["accent"])) if index.column() in (0, 9): painter.restore() return @@ -1337,9 +1338,9 @@ class _PatientInfoDelegate(QStyledItemDelegate): font = QFont(body_family()) font.setPixelSize(14) painter.setFont(font) - painter.setPen(QColor("#273244")) + painter.setPen(QColor(PALETTE["text"])) - def draw(text: str, target: Any, color: str = "#273244", centered: bool = False) -> None: + def draw(text: str, target: Any, color: str = PALETTE["text"], centered: bool = False) -> None: painter.setPen(QColor(color)) text = painter.fontMetrics().elidedText(text, Qt.TextElideMode.ElideRight, target.width()) alignment = Qt.AlignmentFlag.AlignVCenter | (Qt.AlignmentFlag.AlignHCenter if centered else Qt.AlignmentFlag.AlignLeft) @@ -1359,17 +1360,17 @@ class _PatientInfoDelegate(QStyledItemDelegate): doctor = display_text(first_value(row, "appointment_doctor_name"), "") status, _kind = _patient_status(row) if not doctor: - draw(status, rect, "#5D6B80") + draw(status, rect, PALETTE["muted"]) else: draw(doctor, top) font.setPixelSize(13) painter.setFont(font) - color, fill = ("#A9691D", "#FFF7EA") if status == "已过号" else ("#1769E8", "#F0F6FF") + color, fill = (PALETTE["warning"], PALETTE["warning_soft"]) if status == "已过号" else (PALETTE["accent"], PALETTE["accent_soft"]) if status == "已取消": - color, fill = "#5D6B80", "#F5F7FA" + color, fill = PALETTE["muted"], PALETTE["canvas"] badge = QRectF(bottom.x(), bottom.y() + 1, min(bottom.width(), painter.fontMetrics().horizontalAdvance(status) + 10), 20) painter.setRenderHint(QPainter.RenderHint.Antialiasing) - painter.setPen(QColor("#E7CDA8" if status == "已过号" else "#C7DAF7")) + painter.setPen(QColor(PALETTE["warning_soft"] if status == "已过号" else PALETTE["line_strong"])) painter.setBrush(QColor(fill)) painter.drawRoundedRect(badge, 3, 3) draw(status, badge.toRect(), color, True) @@ -1385,7 +1386,7 @@ class _PatientInfoDelegate(QStyledItemDelegate): draw(value, rect) else: text = str(index.data(Qt.ItemDataRole.DisplayRole) or "") - draw(text, rect, "#A9691D" if index.column() == 6 and text == "待确认" else "#273244", index.column() == 5) + draw(text, rect, PALETTE["warning"] if index.column() == 6 and text == "待确认" else PALETTE["text"], index.column() == 5) painter.restore() @@ -1493,7 +1494,7 @@ class PatientListWorkspace(QWidget): self.keyword_edit.setMaximumWidth(360) self.keyword_edit.setPlaceholderText("患者姓名 / 手机号 / 助理 / 医生") self.keyword_edit.setClearButtonEnabled(True) - self.keyword_edit.addAction(icons.icon("search", "#5D6B80", 16), QLineEdit.ActionPosition.LeadingPosition) + self.keyword_edit.addAction(icons.icon("search", PALETTE["muted"], 16), QLineEdit.ActionPosition.LeadingPosition) self.keyword_edit.returnPressed.connect(self.search) search_row.addWidget(self.keyword_edit, 1) self.status_label = QLabel("患者状态:") @@ -1846,7 +1847,7 @@ class PatientListWorkspace(QWidget): ) host = RowActions(row_actions, self.table) if host.more_button is not None: - host.more_button.setIcon(icons.icon("chevron_down", "#5D6B80", 12)) + host.more_button.setIcon(icons.icon("chevron_down", PALETTE["muted"], 12)) host.more_button.setIconSize(QSize(12, 12)) host.more_button.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon) host.more_button.setLayoutDirection(Qt.LayoutDirection.RightToLeft) @@ -2079,7 +2080,7 @@ class _OrderComboBox(QComboBox): def paintEvent(self, event: Any) -> None: super().paintEvent(event) painter = QPainter(self) - glyph = icons.pixmap("chevron_down", "#5D6B80", 14) + glyph = icons.pixmap("chevron_down", PALETTE["muted"], 14) painter.drawPixmap(QRectF(self.width() - 24, (self.height() - 14) / 2, 14, 14), glyph, QRectF(glyph.rect())) painter.end() @@ -2088,7 +2089,7 @@ class _OrderActionButton(QToolButton): def paintEvent(self, event: Any) -> None: super().paintEvent(event) painter = QPainter(self) - glyph = icons.pixmap("chevron_down", "#5D6B80" if self.isEnabled() else "#97A4B6", 14) + glyph = icons.pixmap("chevron_down", PALETTE["muted"] if self.isEnabled() else PALETTE["disabled"], 14) painter.drawPixmap(QRectF(self.width() - 23, (self.height() - 14) / 2, 14, 14), glyph, QRectF(glyph.rect())) painter.end() @@ -2107,18 +2108,18 @@ class _OrderInfoDelegate(QStyledItemDelegate): painter.setClipRect(option.rect) selected = bool(option.state & QStyle.StateFlag.State_Selected) hovered = bool(option.state & QStyle.StateFlag.State_MouseOver) - painter.fillRect(option.rect, QColor("#F5F8FF" if selected else "#F8FAFE" if hovered else "#FFFFFF")) - painter.setPen(QColor("#E6EDF6")) + painter.fillRect(option.rect, QColor(PALETTE["accent_soft"] if selected else PALETTE["surface_alt"] if hovered else PALETTE["surface"])) + painter.setPen(QColor(PALETTE["line"])) painter.drawLine(option.rect.bottomLeft(), option.rect.bottomRight()) if selected and index.column() == 0: - painter.fillRect(option.rect.adjusted(0, 0, -option.rect.width() + 3, 0), QColor("#1769E8")) + painter.fillRect(option.rect.adjusted(0, 0, -option.rect.width() + 3, 0), QColor(PALETTE["accent"])) rect = option.rect.adjusted(16, 0, -12, -1) font = QFont(body_family()) font.setPixelSize(14) painter.setFont(font) text = str(index.data(Qt.ItemDataRole.DisplayRole) or "—") - def draw(value: str, target: Any, color: str = "#273244", right: bool = False) -> None: + def draw(value: str, target: Any, color: str = PALETTE["text"], right: bool = False) -> None: painter.setPen(QColor(color)) value = painter.fontMetrics().elidedText(value, Qt.TextElideMode.ElideRight, target.width()) painter.drawText(target, Qt.AlignmentFlag.AlignVCenter | (Qt.AlignmentFlag.AlignRight if right else Qt.AlignmentFlag.AlignLeft), value) @@ -2138,7 +2139,7 @@ class _OrderInfoDelegate(QStyledItemDelegate): font.setWeight(QFont.Weight.Normal) font.setPixelSize(13) painter.setFont(font) - draw(secondary, bottom, "#5D6B80") + draw(secondary, bottom, PALETTE["muted"]) else: draw(text, rect) elif column in (9, 11): @@ -2147,7 +2148,7 @@ class _OrderInfoDelegate(QStyledItemDelegate): draw(primary, top) font.setPixelSize(13) painter.setFont(font) - draw(("(" if column == 9 else "") + secondary, bottom, "#5D6B80") + draw(("(" if column == 9 else "") + secondary, bottom, PALETTE["muted"]) else: draw(text, rect) elif column in (4, 5, 6): @@ -2158,10 +2159,10 @@ class _OrderInfoDelegate(QStyledItemDelegate): else: kind = "blue" if raw in {3, 5, 6, 7, 8, 11} else "danger" if raw in {4, 9, 10} else "warning" if raw in {1, 2, 12} else "neutral" foreground, background, border = { - "blue": ("#1769E8", "#F2F7FF", "#CEE0FA"), - "warning": ("#AD640C", "#FFFAF2", "#F2DABD"), - "danger": ("#BE4657", "#FFF5F6", "#F0D0D7"), - "neutral": ("#5D6B80", "#F6F8FC", "#E2E9F2"), + "blue": (PALETTE["accent"], PALETTE["accent_soft"], PALETTE["line_strong"]), + "warning": (PALETTE["warning"], PALETTE["warning_soft"], PALETTE["warning_soft"]), + "danger": (PALETTE["danger"], PALETTE["danger_soft"], PALETTE["danger_soft"]), + "neutral": (PALETTE["muted"], PALETTE["disabled_surface"], PALETTE["line"]), }[kind] font.setPixelSize(13) painter.setFont(font) @@ -2275,7 +2276,7 @@ class PatientOrdersWorkspace(QWidget): self.keyword_edit.setMinimumWidth(240) self.keyword_edit.setPlaceholderText("订单号 / 患者 / 手机号 / 处方ID / 诊单ID") self.keyword_edit.setClearButtonEnabled(True) - self.keyword_edit.addAction(icons.icon("search", "#5D6B80", 16), QLineEdit.ActionPosition.LeadingPosition) + self.keyword_edit.addAction(icons.icon("search", PALETTE["muted"], 16), QLineEdit.ActionPosition.LeadingPosition) self.keyword_edit.returnPressed.connect(self.search) self.filter_top_row.addWidget(self.keyword_edit, 1) self.audit_host = QWidget() @@ -2747,11 +2748,11 @@ class _ProgressInfoDelegate(QStyledItemDelegate): painter.setClipRect(option.rect) selected = bool(option.state & QStyle.StateFlag.State_Selected) hovered = bool(option.state & QStyle.StateFlag.State_MouseOver) - painter.fillRect(option.rect, QColor("#F2F7FF" if selected else "#F8FAFE" if hovered else "#FFFFFF")) - painter.setPen(QColor("#E6EDF6")) + painter.fillRect(option.rect, QColor(PALETTE["accent_soft"] if selected else PALETTE["surface_alt"] if hovered else PALETTE["surface"])) + painter.setPen(QColor(PALETTE["line"])) painter.drawLine(option.rect.bottomLeft(), option.rect.bottomRight()) if selected and index.column() == 0: - painter.fillRect(option.rect.adjusted(0, 0, -option.rect.width() + 3, 0), QColor("#1769E8")) + painter.fillRect(option.rect.adjusted(0, 0, -option.rect.width() + 3, 0), QColor(PALETTE["accent"])) rect = option.rect.adjusted(16, 0, -16, -1) font = QFont(body_family()) font.setPixelSize(14) @@ -2762,20 +2763,20 @@ class _ProgressInfoDelegate(QStyledItemDelegate): painter.setFont(font) raw_text = index.data(Qt.ItemDataRole.DisplayRole) text = "" if raw_text is None else str(raw_text) - color = "#273244" + color = PALETTE["text"] if not self.schedule and index.column() == 5 and text and text != "—": row = index.data(Qt.ItemDataRole.UserRole) status = str(first_value(row, "queue_status", default="") or "").lower() color = { - "consulting": "#1769E8", "next": "#1555B6", - "waiting": "#AD640C", "missed": "#BE4657", - }.get(status, "#5D6B80") + "consulting": PALETTE["accent"], "next": PALETTE["accent_hover"], + "waiting": PALETTE["warning"], "missed": PALETTE["danger"], + }.get(status, PALETTE["muted"]) painter.setPen(QColor(color)) alignment = Qt.AlignmentFlag.AlignVCenter alignment |= Qt.AlignmentFlag.AlignHCenter if self.schedule and 1 <= index.column() <= 5 else Qt.AlignmentFlag.AlignLeft painter.drawText(rect, alignment, painter.fontMetrics().elidedText(text, Qt.TextElideMode.ElideRight, rect.width())) if option.state & QStyle.StateFlag.State_HasFocus: - painter.setPen(QColor("#75A5F0")) + painter.setPen(QColor(PALETTE["focus"])) painter.setBrush(Qt.BrushStyle.NoBrush) painter.drawRect(option.rect.adjusted(1, 1, -2, -2)) painter.restore() @@ -2875,7 +2876,7 @@ class PatientProgressWorkspace(QWidget): row = QHBoxLayout(frame) row.setContentsMargins(0, 0, 0, 0) row.setSpacing(0) - divider = QFrame() + divider = QFrame(frame) divider.setObjectName("ProgressMetricDivider") divider.setFixedSize(1, 60) divider.setVisible(key != "total") diff --git a/app/src/doctor_workstation/ui/pages/prescription_library.py b/app/src/doctor_workstation/ui/pages/prescription_library.py index e555800ab..3a6480cdb 100644 --- a/app/src/doctor_workstation/ui/pages/prescription_library.py +++ b/app/src/doctor_workstation/ui/pages/prescription_library.py @@ -24,6 +24,7 @@ from PySide6.QtWidgets import ( ) from .. import motion +from ..design_system import PALETTE from ..dialogs.prescription import PrescriptionTemplateDialog from ..dialogs.prescription_ai import PrescriptionAiReportDialog, can_open_ai_explain from ..filter_disclosure import FilterDisclosure @@ -119,7 +120,7 @@ def _metric_card(title: str, kind: str = "accent", glyph: str = "layers") -> Met icon.setProperty("metricIcon", True) icon.setAlignment(Qt.AlignmentFlag.AlignCenter) icon.setFixedSize(32, 32) - color = "#1769E8" if kind == "accent" else "#60789F" + color = PALETTE["accent"] if kind == "accent" else PALETTE["muted"] icon.setPixmap(_painted_icon(glyph, color, 25).pixmap(25, 25)) card.layout().addWidget(icon) return card @@ -543,7 +544,7 @@ class PrescriptionLibraryPage(QWidget): name_item = self.table.item(row_index, 1) if name_item is not None: - name_item.setForeground(QColor("#1A1C1F")) + name_item.setForeground(QColor(PALETTE["heading"])) font = name_item.font() font.setWeight(QFont.Weight.Medium) name_item.setFont(font) diff --git a/app/src/doctor_workstation/ui/pages/prescriptions.py b/app/src/doctor_workstation/ui/pages/prescriptions.py index 4bf9ba9dd..5a0a65f83 100644 --- a/app/src/doctor_workstation/ui/pages/prescriptions.py +++ b/app/src/doctor_workstation/ui/pages/prescriptions.py @@ -50,6 +50,7 @@ from PySide6.QtWidgets import ( ) from .. import icons, motion +from ..design_system import PALETTE, clinical_stylesheet from ..dialogs.issued_prescription_ai import ( PrescriptionAiStatisticsDialog, agreement_safe_batch, @@ -229,11 +230,11 @@ _ROLE_AVATAR = Qt.ItemDataRole.UserRole + 11 _ROLE_LEAD_ICON = Qt.ItemDataRole.UserRole + 12 _TAG_PALETTE = { - "accent": ("#4F63D9", "#EEF1FA"), - "success": ("#287B65", "#E7F8F1"), - "warning": ("#A9691D", "#FFF5DF"), - "danger": ("#BE4B58", "#FFF0F2"), - "neutral": ("#606163", "#F7F7F7"), + "accent": (PALETTE["accent"], PALETTE["accent_soft"]), + "success": (PALETTE["success"], PALETTE["success_soft"]), + "warning": (PALETTE["warning"], PALETTE["warning_soft"]), + "danger": (PALETTE["danger"], PALETTE["danger_soft"]), + "neutral": (PALETTE["muted"], PALETTE["surface_alt"]), } @@ -293,7 +294,7 @@ class _RowDecorationDelegate(QStyledItemDelegate): glyph, QRectF(glyph.rect()), ) - painter.setPen(QColor("#1A1C1F")) + painter.setPen(QColor(PALETTE["heading"])) painter.setFont(style_option.font) text_rect = rect.adjusted(28, 0, -8, 0) painter.drawText( @@ -306,17 +307,17 @@ class _RowDecorationDelegate(QStyledItemDelegate): else: initial = str(avatar)[:1] or "医" circle = QRectF(rect.left() + 8, rect.center().y() - 10, 20, 20) - painter.setPen(QPen(QColor("#EDEDEE"), 1.0)) - painter.setBrush(QColor("#F7F7F7")) + painter.setPen(QPen(QColor(PALETTE["line"]), 1.0)) + painter.setBrush(QColor(PALETTE["surface_alt"])) painter.drawEllipse(circle.adjusted(0.5, 0.5, -0.5, -0.5)) initial_font = QFont(style_option.font) initial_font.setPixelSize(10) initial_font.setWeight(QFont.Weight.Medium) painter.setFont(initial_font) - painter.setPen(QColor("#6A6B6D")) + painter.setPen(QColor(PALETTE["muted"])) painter.drawText(circle, Qt.AlignmentFlag.AlignCenter, initial) painter.setFont(style_option.font) - painter.setPen(QColor("#1A1C1F")) + painter.setPen(QColor(PALETTE["heading"])) name_rect = rect.adjusted(35, 0, -8, 0) painter.drawText( name_rect, @@ -509,11 +510,11 @@ class _PrescriptionNumberDelegate(QStyledItemDelegate): text_option.setWrapMode(QTextOption.WrapMode.WrapAtWordBoundaryOrAnywhere) document.setDefaultTextOption(text_option) paragraphs = [ - f'

{escape(number)}

', - f'

ID: {escape(record_id)}

', + f'

{escape(number)}

', + f'

ID: {escape(record_id)}

', ] paragraphs.extend( - '

' + f'

' + escape(warning) + "

" for warning in _order_warnings(row) @@ -603,14 +604,14 @@ class _DoctorOptionDelegate(QStyledItemDelegate): rect = option.rect.adjusted(2, 1, -2, -1) hovered = bool(option.state & QStyle.StateFlag.State_MouseOver) painter.setPen(Qt.PenStyle.NoPen) - painter.setBrush(QColor("#EAF2FF" if checked else "#F3F7FD" if hovered else "#FFFFFF")) + painter.setBrush(QColor(PALETTE["accent_soft"] if checked else PALETTE["canvas"] if hovered else PALETTE["surface"])) painter.drawRoundedRect(rect, 5, 5) box = QRectF(rect.left() + 10, rect.center().y() - 8, 16, 16) - painter.setPen(QPen(QColor("#1769E8" if checked else "#B8C7DA"), 1)) - painter.setBrush(QColor("#1769E8" if checked else "#FFFFFF")) + painter.setPen(QPen(QColor(PALETTE["accent"] if checked else PALETTE["line_strong"]), 1)) + painter.setBrush(QColor(PALETTE["accent"] if checked else PALETTE["surface"])) painter.drawRoundedRect(box, 3, 3) if checked: - pen = QPen(QColor("#FFFFFF"), 2) + pen = QPen(QColor(PALETTE["surface"]), 2) pen.setCapStyle(Qt.PenCapStyle.RoundCap) painter.setPen(pen) x, y = int(box.x()), int(box.y()) @@ -619,16 +620,16 @@ class _DoctorOptionDelegate(QStyledItemDelegate): font = QFont(body_family()) font.setPixelSize(13) painter.setFont(font) - painter.setPen(QColor("#273244")) + painter.setPen(QColor(PALETTE["text"])) text_rect = rect.adjusted(38, 0, -54, 0) label = painter.fontMetrics().elidedText(str(index.data() or ""), Qt.TextElideMode.ElideRight, text_rect.width()) painter.drawText(text_rect, Qt.AlignmentFlag.AlignVCenter, label) if checked: - painter.setPen(QColor("#1769E8")) + painter.setPen(QColor(PALETTE["accent"])) painter.drawText(rect.adjusted(0, 0, -12, 0), Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignVCenter, "已选") if option.state & QStyle.StateFlag.State_HasFocus: painter.setBrush(Qt.BrushStyle.NoBrush) - painter.setPen(QPen(QColor("#ADC8F2"), 1)) + painter.setPen(QPen(QColor(PALETTE["line_strong"]), 1)) painter.drawRoundedRect(rect, 5, 5) painter.restore() @@ -674,18 +675,18 @@ class _DoctorSelectionDialog(QDialog): self.setObjectName("DoctorSelectionDialog") self.setWindowTitle("选择医生") self.resize(420, 500) - self.setStyleSheet(""" - QDialog#DoctorSelectionDialog { background: #FFFFFF; color: #273244; } - QListWidget#DoctorOptionsList { background: #FFFFFF; border: 1px solid #DBE5F2; border-radius: 6px; padding: 3px; } - QLabel#DoctorSelectionCount { color: #1769E8; font-size: 13px; } - QDialog#DoctorSelectionDialog QLineEdit { border: 1px solid #DBE5F2; border-radius: 6px; } - QDialog#DoctorSelectionDialog QLineEdit:focus { border-color: #1769E8; } - QDialog#DoctorSelectionDialog QPushButton { background: #FFFFFF; color: #273244; border: 1px solid #DBE5F2; border-radius: 6px; } - QDialog#DoctorSelectionDialog QPushButton:hover { background: #F3F7FD; border-color: #ADC8F2; } - QDialog#DoctorSelectionDialog QPushButton:disabled { color: #8A97A9; } - QDialog#DoctorSelectionDialog QPushButton#ConfirmDoctorSelection { background: #1769E8; color: #FFFFFF; border-color: #1769E8; } - QDialog#DoctorSelectionDialog QPushButton#ConfirmDoctorSelection:hover { background: #125DCE; border-color: #125DCE; } - """) + self.setStyleSheet(clinical_stylesheet(""" + QDialog#DoctorSelectionDialog { background: $ds_surface; color: $ds_text; } + QListWidget#DoctorOptionsList { background: $ds_surface; border: 1px solid $ds_line; border-radius: 6px; padding: 3px; } + QLabel#DoctorSelectionCount { color: $ds_accent; font-size: 13px; } + QDialog#DoctorSelectionDialog QLineEdit { border: 1px solid $ds_line; border-radius: 6px; } + QDialog#DoctorSelectionDialog QLineEdit:focus { border-color: $ds_accent; } + QDialog#DoctorSelectionDialog QPushButton { background: $ds_surface; color: $ds_text; border: 1px solid $ds_line; border-radius: 6px; } + QDialog#DoctorSelectionDialog QPushButton:hover { background: $ds_canvas; border-color: $ds_line_strong; } + QDialog#DoctorSelectionDialog QPushButton:disabled { color: $ds_disabled; } + QDialog#DoctorSelectionDialog QPushButton#ConfirmDoctorSelection { background: $ds_accent; color: $ds_surface; border-color: $ds_accent; } + QDialog#DoctorSelectionDialog QPushButton#ConfirmDoctorSelection:hover { background: $ds_accent_hover; border-color: $ds_accent_hover; } + """)) layout = QVBoxLayout(self) layout.setContentsMargins(16, 16, 16, 16) layout.setSpacing(10) @@ -793,9 +794,9 @@ class DoctorMultiSelect(QWidget): self.button.setText("、".join(names[:2]) + (f" 等{len(names)}人" if len(names) > 2 else "")) -def _blue_prescription_icon(kind: str, color: str = "#1769E8", size: int = 15) -> QIcon: +def _blue_prescription_icon(kind: str, color: str = PALETTE["accent"], size: int = 15) -> QIcon: result = QIcon(icons.icon(kind, color, size)) - result.addPixmap(icons.pixmap(kind, "#A4ADBA", size), QIcon.Mode.Disabled) + result.addPixmap(icons.pixmap(kind, PALETTE["disabled"], size), QIcon.Mode.Disabled) return result @@ -803,7 +804,7 @@ class _PrescriptionCombo(QComboBox): def paintEvent(self, event: Any) -> None: super().paintEvent(event) painter = QPainter(self) - glyph = icons.pixmap("chevron_down", "#5D6B80", 14) + glyph = icons.pixmap("chevron_down", PALETTE["muted"], 14) painter.drawPixmap(QRectF(self.width() - 25, (self.height() - 14) / 2, 14, 14), glyph, QRectF(glyph.rect())) painter.end() @@ -812,7 +813,7 @@ class _PrescriptionDateTime(QDateTimeEdit): def paintEvent(self, event: Any) -> None: super().paintEvent(event) painter = QPainter(self) - glyph = icons.pixmap("calendar", "#5D6B80" if self.isEnabled() else "#8A97A9", 14) + glyph = icons.pixmap("calendar", PALETTE["muted"] if self.isEnabled() else PALETTE["disabled"], 14) painter.drawPixmap(QRectF(self.width() - 25, (self.height() - 14) / 2, 14, 14), glyph, QRectF(glyph.rect())) painter.end() @@ -825,7 +826,7 @@ class _PrescriptionDoctorButton(QPushButton): option.text = self.fontMetrics().elidedText(self.text(), Qt.TextElideMode.ElideRight, max(1, self.width() - 48)) painter = QPainter(self) self.style().drawControl(QStyle.ControlElement.CE_PushButton, option, painter, self) - glyph = icons.pixmap("chevron_down", "#5D6B80", 14) + glyph = icons.pixmap("chevron_down", PALETTE["muted"], 14) painter.drawPixmap(QRectF(self.width() - 25, (self.height() - 14) / 2, 14, 14), glyph, QRectF(glyph.rect())) painter.end() @@ -837,13 +838,13 @@ class _PrescriptionDoctorButton(QPushButton): def _prescription_cell_background(painter: QPainter, option: Any, index: QModelIndex) -> None: selected = bool(option.state & QStyle.StateFlag.State_Selected) hovered = bool(option.state & QStyle.StateFlag.State_MouseOver) - painter.fillRect(option.rect, QColor("#F2F7FF" if selected else "#F8FAFE" if hovered else "#FFFFFF")) - painter.setPen(QColor("#E6EDF6")) + painter.fillRect(option.rect, QColor(PALETTE["accent_soft"] if selected else PALETTE["surface_alt"] if hovered else PALETTE["surface"])) + painter.setPen(QColor(PALETTE["line"])) painter.drawLine(option.rect.bottomLeft(), option.rect.bottomRight()) if selected and index.column() == 0: - painter.fillRect(option.rect.adjusted(0, 0, -option.rect.width() + 3, 0), QColor("#1769E8")) + painter.fillRect(option.rect.adjusted(0, 0, -option.rect.width() + 3, 0), QColor(PALETTE["accent"])) if option.state & QStyle.StateFlag.State_HasFocus: - painter.setPen(QColor("#75A5F0")) + painter.setPen(QColor(PALETTE["focus"])) painter.setBrush(Qt.BrushStyle.NoBrush) painter.drawRect(option.rect.adjusted(1, 1, -2, -2)) @@ -875,7 +876,7 @@ class _PrescriptionInfoDelegate(QStyledItemDelegate): font = QFont(body_family()) font.setPixelSize(14) painter.setFont(font) - painter.setPen(QColor("#273244")) + painter.setPen(QColor(PALETTE["text"])) text = str(index.data(Qt.ItemDataRole.DisplayRole) or "") column = index.column() if column == 0: @@ -888,9 +889,9 @@ class _PrescriptionInfoDelegate(QStyledItemDelegate): elif column in (3, 6): kind = index.data(_ROLE_TAG_KIND) foreground, background = { - "accent": ("#1769E8", "#EDF4FF"), "success": ("#1769E8", "#EDF4FF"), - "warning": ("#AD640C", "#FFF5E5"), "danger": ("#BE4657", "#FFF0F2"), - }.get(kind, ("#5D6B80", "#F5F8FD")) + "accent": (PALETTE["accent"], PALETTE["accent_soft"]), "success": (PALETTE["accent"], PALETTE["accent_soft"]), + "warning": (PALETTE["warning"], PALETTE["warning_soft"]), "danger": (PALETTE["danger"], PALETTE["danger_soft"]), + }.get(kind, (PALETTE["muted"], PALETTE["surface_alt"])) font.setPixelSize(13) painter.setFont(font) label = painter.fontMetrics().elidedText(text, Qt.TextElideMode.ElideRight, max(1, rect.width() - 12)) @@ -918,7 +919,7 @@ class _PrescriptionInfoDelegate(QStyledItemDelegate): font = QFont(body_family()) font.setPixelSize(13) painter.setFont(font) - painter.setPen(QColor("#5D6B80")) + painter.setPen(QColor(PALETTE["muted"])) second_rect = first_rect.translated(0, 26) painter.drawText(second_rect, Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter, painter.fontMetrics().elidedText(secondary, Qt.TextElideMode.ElideRight, rect.width())) else: @@ -942,11 +943,11 @@ class _PrescriptionNumberBlueDelegate(_PrescriptionNumberDelegate): text_option.setWrapMode(QTextOption.WrapMode.WrapAtWordBoundaryOrAnywhere) document.setDefaultTextOption(text_option) paragraphs = [ - f'

{escape(number)}

', - f'

ID: {escape(record_id)}

', + f'

{escape(number)}

', + f'

ID: {escape(record_id)}

', ] paragraphs.extend( - '

' + escape(warning) + "

" + f'

' + escape(warning) + "

" for warning in _order_warnings(row) ) document.setHtml("".join(paragraphs)) @@ -976,7 +977,7 @@ class _PrescriptionBlueTable(SortableTable): for button in widget.findChildren(QPushButton): kind = {"查看处方": "eye", "编辑处方": "pencil", "删除处方": "trash"}.get(button.accessibleName()) if kind: - button.setIcon(_blue_prescription_icon(kind, "#BE4657" if kind == "trash" else "#1769E8")) + button.setIcon(_blue_prescription_icon(kind, PALETTE["danger"] if kind == "trash" else PALETTE["accent"])) class PrescriptionsPage(QWidget): @@ -1060,7 +1061,7 @@ class PrescriptionsPage(QWidget): self.add_button.setObjectName("PrescriptionAddButton") self.add_button.setMinimumWidth(122) self.add_button.setProperty("variant", "primary") - self.add_button.setIcon(_blue_prescription_icon("plus", "#FFFFFF")) + self.add_button.setIcon(_blue_prescription_icon("plus", PALETTE["surface"])) self.add_button.setIconSize(QSize(15, 15)) self.add_button.setCursor(Qt.CursorShape.PointingHandCursor) self.add_button.setVisible(has_permission(permissions, "cf.prescription/add")) @@ -1079,7 +1080,7 @@ class PrescriptionsPage(QWidget): self.table_card = table_card root.addWidget(table_card, 1) for button, kind in ((self.view_button, "eye"), (self.edit_button, "pencil"), (self.delete_button, "trash")): - button.setIcon(_blue_prescription_icon(kind, "#BE4657" if kind == "trash" else "#1769E8")) + button.setIcon(_blue_prescription_icon(kind, PALETTE["danger"] if kind == "trash" else PALETTE["accent"])) self._load_doctor_options() def _build_filters(self) -> QWidget: @@ -1226,7 +1227,7 @@ class PrescriptionsPage(QWidget): refresh = QPushButton("刷新") refresh.setProperty("variant", "ghost") refresh.setCursor(Qt.CursorShape.PointingHandCursor) - refresh.setIcon(_blue_prescription_icon("refresh", "#5D6B80")) + refresh.setIcon(_blue_prescription_icon("refresh", PALETTE["muted"])) refresh.setIconSize(QSize(15, 15)) refresh.clicked.connect(self.refresh) toolbar.addWidget(refresh) @@ -1287,7 +1288,7 @@ class PrescriptionsPage(QWidget): self.table.setItemDelegate(_PrescriptionInfoDelegate(self.table)) self.table.setItemDelegateForColumn(1, _PrescriptionNumberBlueDelegate(self.table)) self.table.horizontalHeader().sectionResized.connect(self._number_column_resized) - self.table.horizontalHeaderItem(0).setIcon(_blue_prescription_icon("checkbox", "#8A97A9", 14)) + self.table.horizontalHeaderItem(0).setIcon(_blue_prescription_icon("checkbox", PALETTE["disabled"], 14)) self.table.horizontalHeaderItem(0).setTextAlignment(Qt.AlignmentFlag.AlignCenter) self.table.itemSelectionChanged.connect(self._selection_changed) self.table.itemDoubleClicked.connect(lambda _item: self._view_selected()) @@ -1537,7 +1538,7 @@ class PrescriptionsPage(QWidget): sn_item = self.table.item(row_index, 1) if sn_item is not None: - sn_item.setForeground(QColor("#1A1C1F")) + sn_item.setForeground(QColor(PALETTE["heading"])) font = sn_item.font() font.setWeight(QFont.Weight.Normal) sn_item.setFont(font) diff --git a/app/src/doctor_workstation/ui/pages/reception.py b/app/src/doctor_workstation/ui/pages/reception.py index cb13eaae5..ea58bc6c2 100644 --- a/app/src/doctor_workstation/ui/pages/reception.py +++ b/app/src/doctor_workstation/ui/pages/reception.py @@ -75,6 +75,7 @@ from PySide6.QtWidgets import ( from ...core.appointment_modes import appointment_type_description, appointment_type_value from .. import icons +from ..design_system import PALETTE, clinical_stylesheet from ..diagnosis_drawer import DailyRecordPanel from ..diagnosis_editors import FlowLayout from ..dialogs import DiagnosisDialog @@ -2020,7 +2021,7 @@ def _painted_reception_tab_icon(kind: str, size: int = 16) -> QIcon: outline (bubble / chart page / capsule / clipboard / calendar-clock). """ - return icons.icon(kind, "#5D6B80", size) + return icons.icon(kind, PALETTE["muted"], size) def _painted_reception_action_icon(kind: str, color: str, size: int = 14) -> QIcon: @@ -2882,7 +2883,7 @@ class _ReceptionSparkIcon(QWidget): del event painter = QPainter(self) painter.setRenderHint(QPainter.RenderHint.Antialiasing) - glyph = icons.pixmap("ai", "#1769E8", 18) + glyph = icons.pixmap("ai", PALETTE["accent"], 18) painter.drawPixmap(QRectF(0, 0, 18, 18), glyph, QRectF(glyph.rect())) painter.end() @@ -2896,9 +2897,9 @@ class _ReceptionAiSectionIcon(QWidget): #: Section tone -> (plate, glyph tint, shared glyph name). _TONES = { - "diagnosis": ("#EAF2FF", "#1769E8", "report"), - "risk": ("#EAF2FF", "#1769E8", "alert"), - "treatment": ("#EAF2FF", "#1769E8", "meds"), + "diagnosis": (PALETTE["accent_soft"], PALETTE["accent"], "report"), + "risk": (PALETTE["accent_soft"], PALETTE["accent"], "alert"), + "treatment": (PALETTE["accent_soft"], PALETTE["accent"], "meds"), } def __init__(self, tone: str, parent: QWidget | None = None) -> None: @@ -2949,9 +2950,9 @@ class _ReceptionAssistantIcon(QWidget): painter = QPainter(self) painter.setRenderHint(QPainter.RenderHint.Antialiasing) painter.setPen(Qt.PenStyle.NoPen) - painter.setBrush(QColor("#1769E8")) + painter.setBrush(QColor(PALETTE["accent"])) painter.drawRoundedRect(QRectF(1, 1, 22, 22), 4, 4) - painter.setPen(QColor("#FFFFFF")) + painter.setPen(QColor(PALETTE["surface"])) font = painter.font() font.setPixelSize(11) font.setBold(True) @@ -2975,7 +2976,7 @@ class _ReceptionSendButton(QPushButton): painter.setRenderHint(QPainter.RenderHint.Antialiasing) painter.setPen( QPen( - QColor("#FFFFFF"), + QColor(PALETTE["surface"]), 1.8, Qt.PenStyle.SolidLine, Qt.PenCapStyle.RoundCap, @@ -3053,7 +3054,7 @@ class _ReceptionDateButton(QPushButton): super().paintEvent(event) painter = QPainter(self) painter.setRenderHint(QPainter.RenderHint.Antialiasing) - color = QColor("#5D6B80") + color = QColor(PALETTE["muted"]) painter.setPen( QPen( color, @@ -3087,7 +3088,7 @@ class _ReceptionAiExpandButton(QPushButton): del event painter = QPainter(self) painter.setRenderHint(QPainter.RenderHint.Antialiasing) - color = QColor("#1769E8" if self.isEnabled() else "#8E8F90") + color = QColor(PALETTE["accent"] if self.isEnabled() else PALETTE["disabled"]) painter.setPen( QPen( color, @@ -3120,7 +3121,7 @@ class _ReceptionAiModelCombo(QComboBox): super().paintEvent(event) painter = QPainter(self) painter.setRenderHint(QPainter.RenderHint.Antialiasing) - color = QColor("#273244" if self.isEnabled() else "#8E8F90") + color = QColor(PALETTE["text"] if self.isEnabled() else PALETTE["disabled"]) painter.setPen( QPen( color, @@ -3162,7 +3163,7 @@ class _ReceptionAiAnalysisDialog(QDialog): self.resize(920, 760) self.setMinimumSize(720, 560) self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) - self.setStyleSheet(RECEPTION_AI_DIALOG_QSS) + self.setStyleSheet(clinical_stylesheet(RECEPTION_AI_DIALOG_QSS)) root = QVBoxLayout(self) root.setContentsMargins(18, 18, 18, 18) @@ -3365,7 +3366,11 @@ class _ReceptionAiAnalysisDialog(QDialog): source_label.setTextFormat(Qt.TextFormat.PlainText) source_label.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse) source_label.setWordWrap(True) - source_label.setStyleSheet("color: #555B68; font-size: 12px; padding: 10px 14px; background: #F7F8FC; border: 1px solid #E4E8F2; border-radius: 8px;") + source_label.setStyleSheet(clinical_stylesheet( + "color: $ds_muted; font-size: 12px; padding: 10px 14px; " + "background: $ds_surface_alt; border: 1px solid $ds_line; " + "border-radius: $ds_radius_control;" + )) body_layout.addWidget(source_label) self.source_label = source_label body_layout.addStretch(1) @@ -3614,9 +3619,9 @@ class _VitalMetricIcon(QWidget): painter = QPainter(self) painter.setRenderHint(QPainter.RenderHint.Antialiasing) painter.setPen(Qt.PenStyle.NoPen) - painter.setBrush(QColor("#EAF2FF")) + painter.setBrush(QColor(PALETTE["accent_soft"])) painter.drawRoundedRect(QRectF(0, 0, 22, 22), 6, 6) - glyph = icons.pixmap(self._GLYPHS.get(self._kind, "pulse"), "#1769E8", 15) + glyph = icons.pixmap(self._GLYPHS.get(self._kind, "pulse"), PALETTE["accent"], 15) painter.drawPixmap(QRectF(3.5, 3.5, 15, 15), glyph, QRectF(glyph.rect())) painter.end() @@ -3636,7 +3641,7 @@ class _LifestyleIcon(QWidget): del event painter = QPainter(self) painter.setRenderHint(QPainter.RenderHint.Antialiasing) - glyph = icons.pixmap(self._GLYPHS.get(self._kind, "exercise"), "#5D6B80", 16) + glyph = icons.pixmap(self._GLYPHS.get(self._kind, "exercise"), PALETTE["muted"], 16) painter.drawPixmap(QRectF(0, 0, 16, 16), glyph, QRectF(glyph.rect())) painter.end() @@ -3672,7 +3677,7 @@ class _GenderMark(QWidget): return painter = QPainter(self) painter.setRenderHint(QPainter.RenderHint.Antialiasing) - pen = QPen(QColor("#5D6B80"), 1.35) + pen = QPen(QColor(PALETTE["muted"]), 1.35) pen.setCapStyle(Qt.PenCapStyle.RoundCap) pen.setJoinStyle(Qt.PenJoinStyle.RoundJoin) painter.setPen(pen) @@ -3737,7 +3742,7 @@ class _ReceptionQueueSpinner(QWidget): del event painter = QPainter(self) painter.setRenderHint(QPainter.RenderHint.Antialiasing) - pen = QPen(QColor("#1769E8"), 2.2) + pen = QPen(QColor(PALETTE["accent"]), 2.2) pen.setCapStyle(Qt.PenCapStyle.RoundCap) painter.setPen(pen) painter.drawArc(QRectF(2, 2, 14, 14), self._angle * 16, 250 * 16) @@ -3873,15 +3878,15 @@ class QueueRow(QWidget): painter.setRenderHint(QPainter.RenderHint.Antialiasing) rect = QRectF(self.rect()).adjusted(0.5, 0.5, -0.5, -0.5) if self._selected: - painter.setBrush(QColor("#EAF2FF")) - painter.setPen(QPen(QColor("#E5ECF6"), 1)) + painter.setBrush(QColor(PALETTE["accent_soft"])) + painter.setPen(QPen(QColor(PALETTE["line"]), 1)) else: - painter.setBrush(QColor("#FFFFFF")) - painter.setPen(QPen(QColor("#E5ECF6"), 1)) - painter.drawRoundedRect(rect, 6, 6) + painter.setBrush(QColor(PALETTE["surface"])) + painter.setPen(QPen(QColor(PALETTE["line"]), 1)) + painter.drawRoundedRect(rect, 10, 10) if self._selected: painter.setPen(Qt.PenStyle.NoPen) - painter.setBrush(QColor("#1769E8")) + painter.setBrush(QColor(PALETTE["accent"])) painter.drawRoundedRect(QRectF(1.2, 1, 3.2, self.height() - 2), 1.6, 1.6) @@ -4074,7 +4079,7 @@ class ReceptionDailyRecordsPanel(DailyRecordPanel): font = item.font() font.setWeight(QFont.Weight.DemiBold if high else QFont.Weight.Normal) item.setFont(font) - item.setForeground(QBrush(QColor("#BE4B58" if high else "#273244"))) + item.setForeground(QBrush(QColor(PALETTE["danger"] if high else PALETTE["text"]))) item.setBackground( QBrush( QColor( @@ -4103,9 +4108,11 @@ class ReceptionPage(QWidget): super().__init__(parent) self.setObjectName("ReceptionPage") self.setStyleSheet( - (RECEPTION_QSS + RECEPTION_WORKSPACE_QSS).replace("$body_family", body_family()) - .replace("$heading_family", heading_family()) - .replace("$number_family", number_family()) + clinical_stylesheet( + (RECEPTION_QSS + RECEPTION_WORKSPACE_QSS).replace("$body_family", body_family()) + .replace("$heading_family", heading_family()) + .replace("$number_family", number_family()) + ) ) self.repository = repository self.permissions = permissions @@ -4262,7 +4269,7 @@ class ReceptionPage(QWidget): header_layout.addWidget(title) header_layout.addStretch(1) self.refresh_button = QPushButton("", header) - self.refresh_button.setIcon(icons.icon("refresh", "#5D6B80", 18)) + self.refresh_button.setIcon(icons.icon("refresh", PALETTE["muted"], 18)) self.refresh_button.setObjectName("ReceptionRefreshButton") self.refresh_button.setFixedSize(34, 32) self.refresh_button.setAccessibleName("刷新接诊台") @@ -4454,7 +4461,7 @@ class ReceptionPage(QWidget): self.video_button.clicked.connect(self._request_video) actions.addWidget(self.video_button) self.more_button = QPushButton(hero) - self.more_button.setIcon(icons.icon("more", "#5D6B80", 16)) + self.more_button.setIcon(icons.icon("more", PALETTE["muted"], 16)) self.more_button.setIconSize(QSize(16, 16)) self.more_button.setToolTip("更多操作") self.more_button.setAccessibleName("更多操作") @@ -5286,7 +5293,9 @@ class ReceptionPage(QWidget): self.ai_source_label.setTextFormat(Qt.TextFormat.PlainText) self.ai_source_label.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse) self.ai_source_label.setWordWrap(True) - self.ai_source_label.setStyleSheet("color: #5B6474; font-size: 11px;") + self.ai_source_label.setStyleSheet(clinical_stylesheet( + "color: $ds_muted; font-size: 12px;" + )) analysis_layout.addWidget(self.ai_source_label) self.ai_detail_actions_host = QWidget(analysis_card) diff --git a/app/src/doctor_workstation/ui/patient_orders_style.py b/app/src/doctor_workstation/ui/patient_orders_style.py index 925e55d43..89d11ce25 100644 --- a/app/src/doctor_workstation/ui/patient_orders_style.py +++ b/app/src/doctor_workstation/ui/patient_orders_style.py @@ -1,119 +1,126 @@ -"""Scoped surfaces for the approved patient order-management workspace.""" - -from string import Template - -from .reception_style import body_family - - -def patient_orders_stylesheet() -> str: - return Template(_ORDERS).substitute(body=body_family()) - - -_ORDERS = """ -#PatientOrdersWorkspace { background: transparent; color: #273244; } -#OrderWorkspaceContent, #OrderWorkspaceScroll { background: transparent; border: 0; } -#PatientOrdersWorkspace QLabel, #PatientOrdersWorkspace QPushButton, -#PatientOrdersWorkspace QToolButton, #PatientOrdersWorkspace QLineEdit, -#PatientOrdersWorkspace QComboBox, #PatientOrdersWorkspace QDateEdit, -#PatientOrdersWorkspace QCheckBox, #PatientOrdersWorkspace QTableWidget { - font-family: "$body"; font-size: 14px; font-weight: 400; color: #273244; -} -#PatientOrdersWorkspace QLabel[role="muted"] { font-size: 13px; color: #5D6B80; } -#PatientOrdersWorkspace QFrame#OrderFilterCard, -#PatientOrdersWorkspace QFrame#OrderSummaryStrip, -#PatientOrdersWorkspace QFrame#OrderTableCard { - background: #FFFFFF; border: 1px solid #DBE5F2; border-radius: 8px; -} -#PatientOrdersWorkspace QPushButton, #PatientOrdersWorkspace QToolButton { - min-height: 38px; max-height: 38px; padding: 0 16px; border: 1px solid #DBE5F2; - border-radius: 5px; background: #FFFFFF; color: #273244; -} -#PatientOrdersWorkspace QPushButton:hover, #PatientOrdersWorkspace QToolButton:hover { - background: #F2F7FF; border-color: #B6CDEE; color: #1555B6; -} -#PatientOrdersWorkspace QPushButton:pressed, #PatientOrdersWorkspace QToolButton:pressed { background: #DCEAFF; } -#PatientOrdersWorkspace QPushButton:focus, #PatientOrdersWorkspace QToolButton:focus { border-color: #75A5F0; } -#PatientOrdersWorkspace QPushButton#OrderSearchButton, -#PatientOrdersWorkspace QPushButton#OrderDetailButton { - color: #FFFFFF; background: #1769E8; border-color: #1769E8; -} -#PatientOrdersWorkspace QPushButton#OrderSearchButton:hover, -#PatientOrdersWorkspace QPushButton#OrderDetailButton:hover { background: #155BCC; border-color: #155BCC; } -#PatientOrdersWorkspace QPushButton:disabled, #PatientOrdersWorkspace QToolButton:disabled { - color: #97A4B6; background: #F6F8FC; border-color: #E2E9F2; -} -#PatientOrdersWorkspace QLineEdit, #PatientOrdersWorkspace QComboBox, -#PatientOrdersWorkspace QDateEdit { - min-height: 38px; max-height: 38px; padding: 0 10px; font-size: 13px; - background: #FFFFFF; border: 1px solid #DBE5F2; border-radius: 5px; - selection-background-color: #DCEAFF; selection-color: #273244; -} -#PatientOrdersWorkspace QLineEdit:focus, #PatientOrdersWorkspace QComboBox:focus, -#PatientOrdersWorkspace QDateEdit:focus { border-color: #75A5F0; } -#PatientOrdersWorkspace QLineEdit QToolButton { - min-height: 0; max-height: 24px; min-width: 0; border: 0; padding: 0; background: transparent; -} -#PatientOrdersWorkspace QComboBox { padding-right: 30px; } -#PatientOrdersWorkspace QComboBox::drop-down { border: 0; width: 28px; background: transparent; } -#PatientOrdersWorkspace QComboBox::down-arrow { image: none; width: 0; height: 0; } -#PatientOrdersWorkspace QComboBox QAbstractItemView { - font-family: "$body"; font-size: 13px; color: #273244; background: #FFFFFF; - border: 1px solid #DBE5F2; outline: 0; selection-background-color: #EAF2FF; selection-color: #1555B6; -} -#PatientOrdersWorkspace QComboBox QAbstractItemView::item { min-height: 30px; padding: 3px 10px; } -#PatientOrdersWorkspace QDateEdit { padding-right: 26px; } -#PatientOrdersWorkspace QDateEdit::drop-down { border: 0; width: 24px; background: transparent; } -#PatientOrdersWorkspace QDateEdit::down-arrow { image: none; width: 0; height: 0; } -#PatientOrdersWorkspace QDateEdit:disabled { color: #8A97A9; background: #F6F8FC; border-color: #E2E9F2; } -#PatientOrdersWorkspace QCalendarWidget { - font-family: "$body"; font-size: 13px; background: #FFFFFF; color: #273244; -} -#PatientOrdersWorkspace QCalendarWidget QWidget#qt_calendar_navigationbar { background: #F5F8FD; } -#PatientOrdersWorkspace QCalendarWidget QToolButton { - min-height: 28px; max-height: 28px; padding: 0 8px; border: 0; background: transparent; - font-family: "$body"; font-size: 13px; color: #273244; -} -#PatientOrdersWorkspace QCalendarWidget QToolButton:hover { background: #EAF2FF; } -#PatientOrdersWorkspace QCalendarWidget QAbstractItemView { - font-family: "$body"; font-size: 13px; background: #FFFFFF; alternate-background-color: #FFFFFF; - color: #273244; selection-background-color: #1769E8; selection-color: #FFFFFF; outline: 0; -} -#PatientOrdersWorkspace QCheckBox { spacing: 9px; font-size: 13px; } -#PatientOrdersWorkspace QCheckBox::indicator { - width: 15px; height: 15px; border: 1px solid #C5D5EB; border-radius: 3px; background: #FFFFFF; -} -#PatientOrdersWorkspace QCheckBox::indicator:checked { background: #1769E8; border-color: #1769E8; } -#PatientOrdersWorkspace QCheckBox::indicator:hover { border-color: #75A5F0; } -#PatientOrdersWorkspace QCheckBox:focus { color: #1555B6; } -#PatientOrdersWorkspace QFrame#OrderMetricCell { background: transparent; border: 0; } -#PatientOrdersWorkspace QFrame#OrderMetricDivider { border: 0; background: #DBE5F2; } -#PatientOrdersWorkspace QLabel[orderMetricCaption="true"] { color: #5D6B80; font-size: 13px; } -#PatientOrdersWorkspace QLabel[orderMetricValue="true"] { color: #273244; font-size: 18px; font-weight: 500; } -#PatientOrdersWorkspace QLabel#OrderAmountMetric { color: #1769E8; } -#PatientOrdersWorkspace QLabel[role="sectionTitle"] { font-size: 14px; font-weight: 600; } -#PatientOrdersWorkspace QTableWidget#OrderTable { - border: 1px solid #E6EDF6; border-radius: 0; background: #FFFFFF; alternate-background-color: #FFFFFF; - selection-background-color: #F5F8FF; selection-color: #273244; gridline-color: #E6EDF6; -} -#PatientOrdersWorkspace QTableWidget#OrderTable::item { padding: 0; border: 0; } -#PatientOrdersWorkspace QTableWidget#OrderTable QHeaderView::section { - min-height: 44px; padding: 0 16px; background: #F8FAFD; color: #5D6B80; - border: 0; border-bottom: 1px solid #E1E9F4; - font-family: "$body"; font-size: 13px; font-weight: 400; -} -#PatientOrdersWorkspace QWidget#OrderActionBar { background: #FFFFFF; } -#PatientOrdersWorkspace QToolButton#OrderActionButton { padding-right: 28px; } -#PatientOrdersWorkspace QToolButton#OrderActionButton::menu-indicator { image: none; width: 0; height: 0; } -#PatientOrdersWorkspace QWidget#InfiniteList { background: #FFFFFF; border-top: 1px solid #E6EDF6; } -#PatientOrdersWorkspace QMenu, QMenu#OrderActionMenu { - font-family: "$body"; font-size: 13px; color: #273244; background: #FFFFFF; - border: 1px solid #DBE5F2; padding: 5px; -} -#PatientOrdersWorkspace QMenu::item, QMenu#OrderActionMenu::item { padding: 8px 24px; } -#PatientOrdersWorkspace QMenu::item:selected, QMenu#OrderActionMenu::item:selected { color: #1555B6; background: #EAF2FF; } -#PatientOrdersWorkspace QScrollBar:vertical { background: #F4F7FC; width: 7px; margin: 0; } -#PatientOrdersWorkspace QScrollBar:horizontal { background: #F4F7FC; height: 7px; margin: 0; } -#PatientOrdersWorkspace QScrollBar::handle { background: #C8D5E6; border-radius: 3px; min-width: 24px; min-height: 24px; } -#PatientOrdersWorkspace QScrollBar::add-line, #PatientOrdersWorkspace QScrollBar::sub-line { width: 0; height: 0; } -#PatientOrdersWorkspace QScrollBar::add-page, #PatientOrdersWorkspace QScrollBar::sub-page { background: transparent; } -""" +"""Scoped surfaces for the approved patient order-management workspace.""" + +from string import Template + +from .design_system import clinical_stylesheet +from .reception_style import body_family + + +def patient_orders_stylesheet() -> str: + return clinical_stylesheet(Template(_ORDERS).safe_substitute(body=body_family())) + + +_ORDERS = """ +#PatientOrdersWorkspace { background: transparent; color: $ds_text; } +#OrderWorkspaceContent, #OrderWorkspaceScroll { background: transparent; border: 0; } +#PatientOrdersWorkspace QLabel, #PatientOrdersWorkspace QPushButton, +#PatientOrdersWorkspace QToolButton, #PatientOrdersWorkspace QLineEdit, +#PatientOrdersWorkspace QComboBox, #PatientOrdersWorkspace QDateEdit, +#PatientOrdersWorkspace QCheckBox, #PatientOrdersWorkspace QTableWidget { + font-family: "$body"; font-size: 14px; font-weight: 400; color: $ds_text; +} +#PatientOrdersWorkspace QLabel[role="muted"] { font-size: 13px; color: $ds_muted; } +#PatientOrdersWorkspace QFrame#OrderFilterCard, +#PatientOrdersWorkspace QFrame#OrderTableCard { + background: $ds_surface; border: 1px solid $ds_line; border-radius: $ds_radius_panel; +} +#PatientOrdersWorkspace QFrame#OrderSummaryStrip { background: transparent; border: 0; } +#PatientOrdersWorkspace QPushButton, #PatientOrdersWorkspace QToolButton { + min-height: 38px; max-height: 38px; padding: 0 16px; border: 1px solid transparent; + border-radius: $ds_radius_control; background: $ds_surface_alt; color: $ds_text; +} +#PatientOrdersWorkspace QPushButton:hover, #PatientOrdersWorkspace QToolButton:hover { + background: $ds_surface_alt; border-color: $ds_line_strong; color: $ds_accent; +} +#PatientOrdersWorkspace QPushButton:pressed, #PatientOrdersWorkspace QToolButton:pressed { background: $ds_accent_soft; } +#PatientOrdersWorkspace QPushButton:focus, #PatientOrdersWorkspace QToolButton:focus { border-color: $ds_focus; } +#PatientOrdersWorkspace QPushButton#OrderSearchButton, +#PatientOrdersWorkspace QPushButton#OrderDetailButton { + color: $ds_surface; background: $ds_accent; border-color: $ds_accent; +} +#PatientOrdersWorkspace QPushButton#OrderSearchButton:hover, +#PatientOrdersWorkspace QPushButton#OrderDetailButton:hover { background: $ds_accent_hover; border-color: $ds_accent_hover; } +#PatientOrdersWorkspace QPushButton#OrderSearchButton:pressed, +#PatientOrdersWorkspace QPushButton#OrderDetailButton:pressed { background: $ds_accent_pressed; border-color: $ds_accent_pressed; } +#PatientOrdersWorkspace QPushButton#OrderSearchButton:focus, +#PatientOrdersWorkspace QPushButton#OrderDetailButton:focus { border-color: $ds_focus; } +#PatientOrdersWorkspace QPushButton:disabled, #PatientOrdersWorkspace QToolButton:disabled, +#PatientOrdersWorkspace QPushButton#OrderSearchButton:disabled, +#PatientOrdersWorkspace QPushButton#OrderDetailButton:disabled { + color: $ds_disabled; background: $ds_disabled_surface; border-color: $ds_line; +} +#PatientOrdersWorkspace QLineEdit, #PatientOrdersWorkspace QComboBox, +#PatientOrdersWorkspace QDateEdit { + min-height: 38px; max-height: 38px; padding: 0 10px; font-size: 13px; + background: $ds_surface; border: 1px solid $ds_line; border-radius: $ds_radius_control; + selection-background-color: $ds_accent_soft; selection-color: $ds_text; +} +#PatientOrdersWorkspace QLineEdit:focus, #PatientOrdersWorkspace QComboBox:focus, +#PatientOrdersWorkspace QDateEdit:focus { border-color: $ds_focus; } +#PatientOrdersWorkspace QLineEdit QToolButton { + min-height: 0; max-height: 24px; min-width: 0; border: 0; padding: 0; background: transparent; +} +#PatientOrdersWorkspace QComboBox { padding-right: 30px; } +#PatientOrdersWorkspace QComboBox::drop-down { border: 0; width: 28px; background: transparent; } +#PatientOrdersWorkspace QComboBox::down-arrow { image: none; width: 0; height: 0; } +#PatientOrdersWorkspace QComboBox QAbstractItemView { + font-family: "$body"; font-size: 13px; color: $ds_text; background: $ds_surface; + border: 1px solid $ds_line; outline: 0; selection-background-color: $ds_accent_soft; selection-color: $ds_accent; +} +#PatientOrdersWorkspace QComboBox QAbstractItemView::item { min-height: 30px; padding: 3px 10px; } +#PatientOrdersWorkspace QDateEdit { padding-right: 26px; } +#PatientOrdersWorkspace QDateEdit::drop-down { border: 0; width: 24px; background: transparent; } +#PatientOrdersWorkspace QDateEdit::down-arrow { image: none; width: 0; height: 0; } +#PatientOrdersWorkspace QDateEdit:disabled { color: $ds_disabled; background: $ds_disabled_surface; border-color: $ds_line; } +#PatientOrdersWorkspace QCalendarWidget { + font-family: "$body"; font-size: 13px; background: $ds_surface; color: $ds_text; +} +#PatientOrdersWorkspace QCalendarWidget QWidget#qt_calendar_navigationbar { background: $ds_surface_alt; } +#PatientOrdersWorkspace QCalendarWidget QToolButton { + min-height: 28px; max-height: 28px; padding: 0 8px; border: 0; background: transparent; + font-family: "$body"; font-size: 13px; color: $ds_text; +} +#PatientOrdersWorkspace QCalendarWidget QToolButton:hover { background: $ds_accent_soft; } +#PatientOrdersWorkspace QCalendarWidget QAbstractItemView { + font-family: "$body"; font-size: 13px; background: $ds_surface; alternate-background-color: $ds_surface; + color: $ds_text; selection-background-color: $ds_accent; selection-color: $ds_surface; outline: 0; +} +#PatientOrdersWorkspace QCheckBox { spacing: 9px; font-size: 13px; } +#PatientOrdersWorkspace QCheckBox::indicator { + width: 15px; height: 15px; border: 1px solid $ds_line_strong; border-radius: 3px; background: $ds_surface; +} +#PatientOrdersWorkspace QCheckBox::indicator:checked { background: $ds_accent; border-color: $ds_accent; } +#PatientOrdersWorkspace QCheckBox::indicator:hover { border-color: $ds_focus; } +#PatientOrdersWorkspace QCheckBox:focus { color: $ds_accent; } +#PatientOrdersWorkspace QFrame#OrderMetricCell { background: transparent; border: 0; } +#PatientOrdersWorkspace QFrame#OrderMetricDivider { border: 0; background: $ds_line; } +#PatientOrdersWorkspace QLabel[orderMetricCaption="true"] { color: $ds_muted; font-size: 13px; } +#PatientOrdersWorkspace QLabel[orderMetricValue="true"] { color: $ds_text; font-size: 18px; font-weight: 500; } +#PatientOrdersWorkspace QLabel#OrderAmountMetric { color: $ds_accent; } +#PatientOrdersWorkspace QLabel[role="sectionTitle"] { font-size: 14px; font-weight: 600; } +#PatientOrdersWorkspace QTableWidget#OrderTable { + border: 0; border-radius: 0; background: $ds_surface; alternate-background-color: $ds_surface; + selection-background-color: $ds_accent_soft; selection-color: $ds_text; gridline-color: $ds_line; +} +#PatientOrdersWorkspace QTableWidget#OrderTable::item { padding: 0; border: 0; } +#PatientOrdersWorkspace QTableWidget#OrderTable QHeaderView::section { + min-height: 44px; padding: 0 16px; background: $ds_surface_alt; color: $ds_muted; + border: 0; border-bottom: 1px solid $ds_line; + font-family: "$body"; font-size: 13px; font-weight: 400; +} +#PatientOrdersWorkspace QWidget#OrderActionBar { background: $ds_surface; } +#PatientOrdersWorkspace QToolButton#OrderActionButton { padding-right: 28px; } +#PatientOrdersWorkspace QToolButton#OrderActionButton::menu-indicator { image: none; width: 0; height: 0; } +#PatientOrdersWorkspace QWidget#InfiniteList { background: $ds_surface; border-top: 1px solid $ds_line; } +#PatientOrdersWorkspace QMenu, QMenu#OrderActionMenu { + font-family: "$body"; font-size: 13px; color: $ds_text; background: $ds_surface; + border: 1px solid $ds_line; padding: 5px; +} +#PatientOrdersWorkspace QMenu::item, QMenu#OrderActionMenu::item { padding: 8px 24px; } +#PatientOrdersWorkspace QMenu::item:selected, QMenu#OrderActionMenu::item:selected { color: $ds_accent; background: $ds_accent_soft; } +#PatientOrdersWorkspace QScrollBar:vertical { background: $ds_canvas; width: 7px; margin: 0; } +#PatientOrdersWorkspace QScrollBar:horizontal { background: $ds_canvas; height: 7px; margin: 0; } +#PatientOrdersWorkspace QScrollBar::handle { background: $ds_line_strong; border-radius: 3px; min-width: 24px; min-height: 24px; } +#PatientOrdersWorkspace QScrollBar::add-line, #PatientOrdersWorkspace QScrollBar::sub-line { width: 0; height: 0; } +#PatientOrdersWorkspace QScrollBar::add-page, #PatientOrdersWorkspace QScrollBar::sub-page { background: transparent; } +""" diff --git a/app/src/doctor_workstation/ui/patient_progress_style.py b/app/src/doctor_workstation/ui/patient_progress_style.py index b9ba83397..906f34f9d 100644 --- a/app/src/doctor_workstation/ui/patient_progress_style.py +++ b/app/src/doctor_workstation/ui/patient_progress_style.py @@ -1,54 +1,55 @@ -"""Local typography and surfaces for the approved consultation-progress page.""" - -from string import Template - -from .reception_style import body_family - - -def patient_progress_stylesheet() -> str: - return Template(_PROGRESS).substitute(body=body_family()) - - -_PROGRESS = """ -#PatientProgressWorkspace { background: transparent; color: #273244; } -#ProgressWorkspaceContent, #ProgressWorkspaceScroll { background: transparent; border: 0; } -#PatientProgressWorkspace QLabel, #PatientProgressWorkspace QPushButton, -#PatientProgressWorkspace QTableWidget { - font-family: "$body"; font-size: 14px; font-weight: 400; color: #273244; -} -#PatientProgressWorkspace QLabel[role="muted"] { font-size: 13px; color: #5D6B80; } -#PatientProgressWorkspace QLabel[role="sectionTitle"] { font-size: 14px; font-weight: 600; } -#PatientProgressWorkspace QLabel#EmptyStateGlyph { - font-size: 24px; color: #1769E8; background: #F2F7FF; - border: 1px solid #DBE5F2; border-radius: 22px; -} -#PatientProgressWorkspace QFrame#ProgressOverviewCard, -#PatientProgressWorkspace QFrame#ProgressScheduleCard, -#PatientProgressWorkspace QFrame#ProgressQueueCard { - background: #FFFFFF; border: 1px solid #DBE5F2; border-radius: 8px; -} -#PatientProgressWorkspace QFrame#ProgressMetricCell { background: transparent; border: 0; } -#PatientProgressWorkspace QFrame#ProgressMetricDivider { background: #DBE5F2; border: 0; } -#PatientProgressWorkspace QLabel[progressMetricValue="true"] { font-size: 18px; font-weight: 500; color: #273244; } -#PatientProgressWorkspace QLabel#ProgressTotalMetric { color: #1769E8; } -#PatientProgressWorkspace QSplitter#ProgressSplitter { background: transparent; } -#PatientProgressWorkspace QSplitter#ProgressSplitter::handle { background: transparent; } -#PatientProgressWorkspace QSplitter#ProgressSplitter::handle:hover { background: #EAF2FF; } -#PatientProgressWorkspace QTableWidget#ProgressScheduleTable, -#PatientProgressWorkspace QTableWidget#ProgressQueueTable { - border: 0; border-radius: 0; background: #FFFFFF; alternate-background-color: #FFFFFF; - selection-background-color: #F2F7FF; selection-color: #273244; gridline-color: #E6EDF6; -} -#PatientProgressWorkspace QTableWidget::item { border: 0; padding: 0; } -#PatientProgressWorkspace QHeaderView::section { - min-height: 0; padding: 0 16px; background: #F5F8FD; color: #5D6B80; - border: 0; border-bottom: 1px solid #E1E9F4; - font-family: "$body"; font-size: 13px; font-weight: 400; -} -#PatientProgressWorkspace QWidget#InfiniteList { background: #FFFFFF; border-top: 1px solid #E6EDF6; } -#PatientProgressWorkspace QScrollBar:vertical { background: #F4F7FC; width: 7px; margin: 0; } -#PatientProgressWorkspace QScrollBar:horizontal { background: #F4F7FC; height: 7px; margin: 0; } -#PatientProgressWorkspace QScrollBar::handle { background: #C8D5E6; border-radius: 3px; min-width: 24px; min-height: 24px; } -#PatientProgressWorkspace QScrollBar::add-line, #PatientProgressWorkspace QScrollBar::sub-line { width: 0; height: 0; } -#PatientProgressWorkspace QScrollBar::add-page, #PatientProgressWorkspace QScrollBar::sub-page { background: transparent; } -""" +"""Local typography and surfaces for the approved consultation-progress page.""" + +from string import Template + +from .design_system import clinical_stylesheet +from .reception_style import body_family + + +def patient_progress_stylesheet() -> str: + return clinical_stylesheet(Template(_PROGRESS).safe_substitute(body=body_family())) + + +_PROGRESS = """ +#PatientProgressWorkspace { background: transparent; color: $ds_text; } +#ProgressWorkspaceContent, #ProgressWorkspaceScroll { background: transparent; border: 0; } +#PatientProgressWorkspace QLabel, #PatientProgressWorkspace QPushButton, +#PatientProgressWorkspace QTableWidget { + font-family: "$body"; font-size: 14px; font-weight: 400; color: $ds_text; +} +#PatientProgressWorkspace QLabel[role="muted"] { font-size: 13px; color: $ds_muted; } +#PatientProgressWorkspace QLabel[role="sectionTitle"] { font-size: 14px; font-weight: 600; } +#PatientProgressWorkspace QLabel#EmptyStateGlyph { + font-size: 24px; color: $ds_accent; background: $ds_surface_alt; + border: 1px solid $ds_line; border-radius: $ds_radius_panel; +} +#PatientProgressWorkspace QFrame#ProgressScheduleCard, +#PatientProgressWorkspace QFrame#ProgressQueueCard { + background: $ds_surface; border: 1px solid $ds_line; border-radius: $ds_radius_panel; +} +#PatientProgressWorkspace QFrame#ProgressOverviewCard { background: transparent; border: 0; } +#PatientProgressWorkspace QFrame#ProgressMetricCell { background: transparent; border: 0; } +#PatientProgressWorkspace QFrame#ProgressMetricDivider { background: $ds_line; border: 0; } +#PatientProgressWorkspace QLabel[progressMetricValue="true"] { font-size: 18px; font-weight: 500; color: $ds_text; } +#PatientProgressWorkspace QLabel#ProgressTotalMetric { color: $ds_accent; } +#PatientProgressWorkspace QSplitter#ProgressSplitter { background: transparent; } +#PatientProgressWorkspace QSplitter#ProgressSplitter::handle { background: transparent; } +#PatientProgressWorkspace QSplitter#ProgressSplitter::handle:hover { background: $ds_accent_soft; } +#PatientProgressWorkspace QTableWidget#ProgressScheduleTable, +#PatientProgressWorkspace QTableWidget#ProgressQueueTable { + border: 0; border-radius: 0; background: $ds_surface; alternate-background-color: $ds_surface; + selection-background-color: $ds_accent_soft; selection-color: $ds_text; gridline-color: $ds_line; +} +#PatientProgressWorkspace QTableWidget::item { border: 0; padding: 0; } +#PatientProgressWorkspace QHeaderView::section { + min-height: 0; padding: 0 16px; background: $ds_surface_alt; color: $ds_muted; + border: 0; border-bottom: 1px solid $ds_line; + font-family: "$body"; font-size: 13px; font-weight: 400; +} +#PatientProgressWorkspace QWidget#InfiniteList { background: $ds_surface; border-top: 1px solid $ds_line; } +#PatientProgressWorkspace QScrollBar:vertical { background: $ds_canvas; width: 7px; margin: 0; } +#PatientProgressWorkspace QScrollBar:horizontal { background: $ds_canvas; height: 7px; margin: 0; } +#PatientProgressWorkspace QScrollBar::handle { background: $ds_line_strong; border-radius: 3px; min-width: 24px; min-height: 24px; } +#PatientProgressWorkspace QScrollBar::add-line, #PatientProgressWorkspace QScrollBar::sub-line { width: 0; height: 0; } +#PatientProgressWorkspace QScrollBar::add-page, #PatientProgressWorkspace QScrollBar::sub-page { background: transparent; } +""" diff --git a/app/src/doctor_workstation/ui/patients_style.py b/app/src/doctor_workstation/ui/patients_style.py index 8273fb598..545c4e680 100644 --- a/app/src/doctor_workstation/ui/patients_style.py +++ b/app/src/doctor_workstation/ui/patients_style.py @@ -1,141 +1,154 @@ -"""Scoped technology-blue surfaces for the approved patient-list workspace.""" - -from string import Template - -from .reception_style import body_family, heading_family - - -def patients_chrome_stylesheet() -> str: - return Template(_CHROME).substitute(body=body_family(), heading=heading_family()) - - -def patient_list_stylesheet() -> str: - return Template(_LIST).substitute(body=body_family()) - - -_CHROME = """ -#PatientsPage { background: #F3F7FD; } -#PatientsPage QWidget#PageHeader QLabel { - font-family: "$body"; font-size: 13px; font-weight: 400; color: #5D6B80; -} -#PatientsPage QWidget#PageHeader QLabel[role="pageTitle"] { - font-family: "$heading"; font-size: 20px; font-weight: 600; color: #202C3F; -} -#PatientsPage QPushButton#PatientRefreshButton { - font-family: "$body"; font-size: 14px; font-weight: 400; color: #273244; - min-height: 38px; max-height: 38px; padding: 0 20px; - border: 1px solid #DBE5F2; border-radius: 5px; background: #FFFFFF; -} -#PatientsPage QPushButton#PatientRefreshButton:hover { background: #F2F7FF; border-color: #B6CDEE; } -#PatientsPage QTabWidget#PatientWorkspaceTabs::pane { border: 0; background: transparent; top: 0; } -#PatientsPage QTabWidget#PatientWorkspaceTabs > QTabBar::tab { - font-family: "$body"; font-size: 14px; font-weight: 400; color: #273244; - min-width: 84px; min-height: 42px; padding: 0 10px; margin-right: 22px; - border: 0; border-bottom: 2px solid transparent; border-radius: 0; background: transparent; -} -#PatientsPage QTabWidget#PatientWorkspaceTabs > QTabBar::tab:selected { - color: #1769E8; border-bottom-color: #1769E8; background: transparent; -} -#PatientsPage QTabWidget#PatientWorkspaceTabs > QTabBar::tab:hover { color: #1769E8; background: #EAF2FF; } -""" - -_LIST = """ -#PatientListWorkspace { background: transparent; color: #273244; } -#PatientWorkspaceContent, #PatientWorkspaceScroll { background: transparent; border: 0; } -#PatientListWorkspace QLabel, #PatientListWorkspace QPushButton, -#PatientListWorkspace QToolButton, #PatientListWorkspace QDateEdit, -#PatientListWorkspace QTableWidget, #PatientSearchToolbar QLineEdit, -#PatientSearchToolbar QPushButton { - font-family: "$body"; font-size: 14px; font-weight: 400; color: #273244; -} -#PatientListWorkspace QLabel[role="muted"], #PatientListWorkspace QLabel[filterLabel="true"] { - color: #5D6B80; font-size: 13px; -} -#PatientListWorkspace QFrame#PatientFilterCard, -#PatientListWorkspace QFrame#PatientSummaryStrip, -#PatientListWorkspace QFrame#PatientListCard { - background: #FFFFFF; border: 1px solid #DBE5F2; border-radius: 8px; -} -#PatientListWorkspace QPushButton, #PatientSearchToolbar QPushButton { - min-height: 38px; max-height: 38px; padding: 0 16px; - border: 1px solid #DBE5F2; border-radius: 5px; background: #FFFFFF; -} -#PatientListWorkspace QPushButton:hover, #PatientSearchToolbar QPushButton:hover { - color: #1555B6; background: #F2F7FF; border-color: #B6CDEE; -} -#PatientListWorkspace QPushButton:pressed, #PatientSearchToolbar QPushButton:pressed { background: #DCEAFF; } -#PatientListWorkspace QPushButton:focus, #PatientSearchToolbar QPushButton:focus { border-color: #75A5F0; } -#PatientSearchToolbar QPushButton#PatientSearchButton { - min-height: 38px; max-height: 38px; color: #FFFFFF; background: #1769E8; border-color: #1769E8; -} -#PatientSearchToolbar QPushButton#PatientSearchButton:hover { background: #155BCC; } -#PatientSearchToolbar QLineEdit { - min-height: 38px; max-height: 38px; padding: 0 8px; background: #FFFFFF; - border: 1px solid #DBE5F2; border-radius: 5px; selection-background-color: #DCEAFF; -} -#PatientSearchToolbar QLineEdit:focus { border-color: #75A5F0; } -#PatientSearchToolbar QLineEdit QToolButton { border: 0; padding: 0; background: transparent; } -#PatientListWorkspace QPushButton[patientStatusChip="true"] { - min-height: 44px; max-height: 44px; padding: 0 16px; font-size: 13px; - color: #273244; border: 0; border-bottom: 2px solid transparent; border-radius: 0; background: transparent; -} -#PatientListWorkspace QPushButton[patientStatusChip="true"]:checked { - color: #1769E8; border-bottom-color: #1769E8; background: transparent; -} -#PatientListWorkspace QPushButton[patientStatusChip="true"]:hover { color: #1769E8; background: #F2F7FF; } -#PatientListWorkspace QPushButton[patientQuickDate="true"] { padding: 0 12px; font-size: 13px; } -#PatientListWorkspace QPushButton[patientQuickDate="true"]:checked, -#PatientListWorkspace QPushButton#PatientCustomDateButton:checked { - color: #FFFFFF; background: #1769E8; border: 1px solid #1769E8; -} -#PatientListWorkspace QDateEdit { - min-height: 38px; max-height: 38px; padding: 0 8px; font-size: 13px; - background: #FFFFFF; border: 1px solid #DBE5F2; border-radius: 5px; - selection-background-color: #DCEAFF; -} -#PatientListWorkspace QDateEdit:focus { border-color: #75A5F0; } -#PatientListWorkspace QDateEdit:disabled { - color: #8A97A9; background: #F6F8FC; border-color: #E2E9F2; -} -#PatientListWorkspace QDateEdit::drop-down { border: 0; width: 20px; background: transparent; } -#PatientListWorkspace QDateEdit::down-arrow { image: none; width: 0; height: 0; } -#PatientListWorkspace QPushButton[summaryCard="true"] { - min-height: 64px; max-height: 64px; padding: 0; background: transparent; border: 0; border-radius: 5px; -} -#PatientListWorkspace QPushButton[summaryCard="true"]:hover { background: #F2F7FF; } -#PatientListWorkspace QFrame#PatientSummaryDivider { border: 0; background: #E1E9F4; } -#PatientListWorkspace QWidget#PatientListHeading { background: transparent; } -#PatientListWorkspace QLabel[role="sectionTitle"] { font-size: 14px; font-weight: 600; color: #273244; } -#PatientListWorkspace QTableWidget#PatientTable { - background: #FFFFFF; alternate-background-color: #FFFFFF; border: 0; border-radius: 0; - selection-background-color: #EAF2FF; selection-color: #273244; gridline-color: #E6EDF6; -} -#PatientListWorkspace QTableWidget#PatientTable::item { padding: 0; border: 0; } -#PatientListWorkspace QTableWidget#PatientTable QHeaderView::section { - min-height: 41px; padding: 0 10px; background: #F5F8FD; color: #5D6B80; - border: 0; border-top: 1px solid #E6EDF6; border-bottom: 1px solid #E1E9F4; - font-family: "$body"; font-size: 13px; font-weight: 400; -} -#PatientListWorkspace QWidget#RowActions, #PatientListWorkspace QWidget#PatientSelectorHost { background: transparent; } -#PatientListWorkspace QPushButton[rowAction="true"], -#PatientListWorkspace QToolButton#RowActionsMore { - min-height: 28px; max-height: 28px; padding: 0 5px; border: 0; - border-radius: 4px; background: transparent; color: #1769E8; font-size: 13px; -} -#PatientListWorkspace QToolButton#RowActionsMore { color: #273244; padding-right: 16px; } -#PatientListWorkspace QPushButton[rowAction="true"]:hover, -#PatientListWorkspace QToolButton#RowActionsMore:hover { background: #DCEAFF; } -#PatientListWorkspace QMenu { background: #FFFFFF; color: #273244; border: 1px solid #DBE5F2; padding: 4px; } -#PatientListWorkspace QMenu::item { padding: 7px 22px; font-size: 13px; } -#PatientListWorkspace QMenu::item:selected { background: #EAF2FF; color: #1555B6; } -#PatientListWorkspace QCheckBox[patientSelector="true"]::indicator { - width: 13px; height: 13px; background: #FFFFFF; border: 1px solid #CBDAED; border-radius: 3px; -} -#PatientListWorkspace QCheckBox[patientSelector="true"]::indicator:checked { background: #1769E8; border-color: #1769E8; } -#PatientListWorkspace QWidget#InfiniteList { background: #FFFFFF; border-top: 1px solid #E6EDF6; } -#PatientListWorkspace QScrollBar:vertical { background: #F4F7FC; width: 7px; margin: 0; } -#PatientListWorkspace QScrollBar:horizontal { background: #F4F7FC; height: 7px; margin: 0; } -#PatientListWorkspace QScrollBar::handle { background: #C8D5E6; border-radius: 3px; min-width: 24px; min-height: 24px; } -#PatientListWorkspace QScrollBar::add-line, #PatientListWorkspace QScrollBar::sub-line { width: 0; height: 0; } -#PatientListWorkspace QScrollBar::add-page, #PatientListWorkspace QScrollBar::sub-page { background: transparent; } -""" +"""Quiet clinical surfaces for the patient-list workspace.""" + +from string import Template + +from .design_system import clinical_stylesheet +from .reception_style import body_family, heading_family + + +def patients_chrome_stylesheet() -> str: + return clinical_stylesheet(Template(_CHROME).safe_substitute(body=body_family(), heading=heading_family())) + + +def patient_list_stylesheet() -> str: + return clinical_stylesheet(Template(_LIST).safe_substitute(body=body_family())) + + +_CHROME = """ +#PatientsPage { background: $ds_canvas; } +#PatientsPage QWidget#PageHeader QLabel { + font-family: "$body"; font-size: 13px; font-weight: 400; color: $ds_muted; +} +#PatientsPage QWidget#PageHeader QLabel[role="pageTitle"] { + font-family: "$heading"; font-size: 20px; font-weight: 600; color: $ds_heading; +} +#PatientsPage QPushButton#PatientRefreshButton { + font-family: "$body"; font-size: 14px; font-weight: 400; color: $ds_text; + min-height: 38px; max-height: 38px; padding: 0 20px; + border: 1px solid transparent; border-radius: $ds_radius_control; background: $ds_surface_alt; +} +#PatientsPage QPushButton#PatientRefreshButton:hover { background: $ds_surface_alt; border-color: $ds_line_strong; } +#PatientsPage QPushButton#PatientRefreshButton:pressed { background: $ds_accent_soft; } +#PatientsPage QPushButton#PatientRefreshButton:focus { border-color: $ds_focus; } +#PatientsPage QPushButton#PatientRefreshButton:disabled { color: $ds_disabled; background: $ds_disabled_surface; } +#PatientsPage QTabWidget#PatientWorkspaceTabs::pane { border: 0; background: transparent; top: 0; } +#PatientsPage QTabWidget#PatientWorkspaceTabs > QTabBar::tab { + font-family: "$body"; font-size: 14px; font-weight: 400; color: $ds_text; + min-width: 84px; min-height: 42px; padding: 0 10px; margin-right: 22px; + border: 0; border-bottom: 2px solid transparent; border-radius: 0; background: transparent; +} +#PatientsPage QTabWidget#PatientWorkspaceTabs > QTabBar::tab:selected { + color: $ds_accent; border-bottom-color: $ds_accent; background: transparent; +} +#PatientsPage QTabWidget#PatientWorkspaceTabs > QTabBar::tab:hover { color: $ds_accent; background: $ds_accent_soft; } +""" + +_LIST = """ +#PatientListWorkspace { background: transparent; color: $ds_text; } +#PatientWorkspaceContent, #PatientWorkspaceScroll { background: transparent; border: 0; } +#PatientListWorkspace QLabel, #PatientListWorkspace QPushButton, +#PatientListWorkspace QToolButton, #PatientListWorkspace QDateEdit, +#PatientListWorkspace QTableWidget, #PatientSearchToolbar QLineEdit, +#PatientSearchToolbar QPushButton { + font-family: "$body"; font-size: 14px; font-weight: 400; color: $ds_text; +} +#PatientListWorkspace QLabel[role="muted"], #PatientListWorkspace QLabel[filterLabel="true"] { + color: $ds_muted; font-size: 13px; +} +#PatientListWorkspace QFrame#PatientFilterCard, +#PatientListWorkspace QFrame#PatientListCard { + background: $ds_surface; border: 1px solid $ds_line; border-radius: $ds_radius_panel; +} +#PatientListWorkspace QFrame#PatientSummaryStrip { background: transparent; border: 0; } +#PatientListWorkspace QPushButton, #PatientSearchToolbar QPushButton { + min-height: 38px; max-height: 38px; padding: 0 16px; + border: 1px solid transparent; border-radius: $ds_radius_control; background: $ds_surface_alt; +} +#PatientListWorkspace QPushButton:hover, #PatientSearchToolbar QPushButton:hover { + color: $ds_accent; background: $ds_surface_alt; border-color: $ds_line_strong; +} +#PatientListWorkspace QPushButton:pressed, #PatientSearchToolbar QPushButton:pressed { background: $ds_accent_soft; } +#PatientListWorkspace QPushButton:focus, #PatientSearchToolbar QPushButton:focus { border-color: $ds_focus; } +#PatientSearchToolbar QPushButton#PatientSearchButton { + min-height: 38px; max-height: 38px; color: $ds_surface; background: $ds_accent; border-color: $ds_accent; +} +#PatientSearchToolbar QPushButton#PatientSearchButton:hover { background: $ds_accent_hover; } +#PatientSearchToolbar QPushButton#PatientSearchButton:pressed { background: $ds_accent_pressed; } +#PatientSearchToolbar QPushButton#PatientSearchButton:focus { border-color: $ds_focus; } +#PatientSearchToolbar QLineEdit { + min-height: 38px; max-height: 38px; padding: 0 8px; background: $ds_surface; + border: 1px solid $ds_line; border-radius: $ds_radius_control; selection-background-color: $ds_accent_soft; +} +#PatientSearchToolbar QLineEdit:focus { border-color: $ds_focus; } +#PatientSearchToolbar QLineEdit QToolButton { border: 0; padding: 0; background: transparent; } +#PatientListWorkspace QPushButton[patientStatusChip="true"] { + min-height: 44px; max-height: 44px; padding: 0 16px; font-size: 13px; + color: $ds_text; border: 0; border-bottom: 2px solid transparent; border-radius: 0; background: transparent; +} +#PatientListWorkspace QPushButton[patientStatusChip="true"]:checked { + color: $ds_accent; border-bottom-color: $ds_accent; background: transparent; +} +#PatientListWorkspace QPushButton[patientStatusChip="true"]:hover { color: $ds_accent; background: $ds_surface_alt; } +#PatientListWorkspace QPushButton[patientStatusChip="true"]:focus { background: $ds_accent_soft; } +#PatientListWorkspace QPushButton[patientQuickDate="true"] { padding: 0 12px; font-size: 13px; } +#PatientListWorkspace QPushButton[patientQuickDate="true"]:checked, +#PatientListWorkspace QPushButton#PatientCustomDateButton:checked { + color: $ds_accent; background: $ds_accent_soft; border: 1px solid transparent; font-weight: 600; +} +#PatientListWorkspace QPushButton[patientQuickDate="true"]:focus, +#PatientListWorkspace QPushButton#PatientCustomDateButton:focus { border-color: $ds_focus; } +#PatientListWorkspace QDateEdit { + min-height: 38px; max-height: 38px; padding: 0 8px; font-size: 13px; + background: $ds_surface; border: 1px solid $ds_line; border-radius: $ds_radius_control; + selection-background-color: $ds_accent_soft; +} +#PatientListWorkspace QDateEdit:focus { border-color: $ds_focus; } +#PatientListWorkspace QDateEdit:disabled { + color: $ds_disabled; background: $ds_disabled_surface; border-color: $ds_line; +} +#PatientListWorkspace QDateEdit::drop-down { border: 0; width: 20px; background: transparent; } +#PatientListWorkspace QDateEdit::down-arrow { image: none; width: 0; height: 0; } +#PatientListWorkspace QPushButton[summaryCard="true"] { + min-height: 64px; max-height: 64px; padding: 0; background: transparent; + border: 1px solid transparent; border-radius: $ds_radius_control; +} +#PatientListWorkspace QPushButton[summaryCard="true"]:hover { background: $ds_surface_alt; } +#PatientListWorkspace QPushButton[summaryCard="true"]:focus { border-color: $ds_focus; } +#PatientListWorkspace QFrame#PatientSummaryDivider { border: 0; background: $ds_line; } +#PatientListWorkspace QWidget#PatientListHeading { background: transparent; } +#PatientListWorkspace QLabel[role="sectionTitle"] { font-size: 14px; font-weight: 600; color: $ds_text; } +#PatientListWorkspace QTableWidget#PatientTable { + background: $ds_surface; alternate-background-color: $ds_surface; border: 0; border-radius: 0; + selection-background-color: $ds_accent_soft; selection-color: $ds_text; gridline-color: $ds_line; +} +#PatientListWorkspace QTableWidget#PatientTable::item { padding: 0; border: 0; } +#PatientListWorkspace QTableWidget#PatientTable QHeaderView::section { + min-height: 41px; padding: 0 10px; background: $ds_surface_alt; color: $ds_muted; + border: 0; border-top: 1px solid $ds_line; border-bottom: 1px solid $ds_line; + font-family: "$body"; font-size: 13px; font-weight: 400; +} +#PatientListWorkspace QWidget#RowActions, #PatientListWorkspace QWidget#PatientSelectorHost { background: transparent; } +#PatientListWorkspace QPushButton[rowAction="true"], +#PatientListWorkspace QToolButton#RowActionsMore { + min-height: 28px; max-height: 28px; padding: 0 5px; border: 1px solid transparent; + border-radius: $ds_radius_small; background: transparent; color: $ds_accent; font-size: 13px; +} +#PatientListWorkspace QToolButton#RowActionsMore { color: $ds_text; padding-right: 16px; } +#PatientListWorkspace QPushButton[rowAction="true"]:hover, +#PatientListWorkspace QToolButton#RowActionsMore:hover { background: $ds_accent_soft; } +#PatientListWorkspace QPushButton[rowAction="true"]:focus, +#PatientListWorkspace QToolButton#RowActionsMore:focus { border-color: $ds_focus; } +#PatientListWorkspace QMenu { background: $ds_surface; color: $ds_text; border: 1px solid $ds_line; padding: 4px; } +#PatientListWorkspace QMenu::item { padding: 7px 22px; font-size: 13px; } +#PatientListWorkspace QMenu::item:selected { background: $ds_accent_soft; color: $ds_accent; } +#PatientListWorkspace QCheckBox[patientSelector="true"]::indicator { + width: 13px; height: 13px; background: $ds_surface; border: 1px solid $ds_line_strong; border-radius: 3px; +} +#PatientListWorkspace QCheckBox[patientSelector="true"]::indicator:checked { background: $ds_accent; border-color: $ds_accent; } +#PatientListWorkspace QWidget#InfiniteList { background: $ds_surface; border-top: 1px solid $ds_line; } +#PatientListWorkspace QScrollBar:vertical { background: $ds_canvas; width: 7px; margin: 0; } +#PatientListWorkspace QScrollBar:horizontal { background: $ds_canvas; height: 7px; margin: 0; } +#PatientListWorkspace QScrollBar::handle { background: $ds_line_strong; border-radius: 3px; min-width: 24px; min-height: 24px; } +#PatientListWorkspace QScrollBar::add-line, #PatientListWorkspace QScrollBar::sub-line { width: 0; height: 0; } +#PatientListWorkspace QScrollBar::add-page, #PatientListWorkspace QScrollBar::sub-page { background: transparent; } +""" diff --git a/app/src/doctor_workstation/ui/prescription_library_style.py b/app/src/doctor_workstation/ui/prescription_library_style.py index 33255224b..3d018330e 100644 --- a/app/src/doctor_workstation/ui/prescription_library_style.py +++ b/app/src/doctor_workstation/ui/prescription_library_style.py @@ -1,410 +1,419 @@ -"""Local technology-blue rendering for the approved prescription library.""" - -from __future__ import annotations - -from collections.abc import Iterable, Sequence -from string import Template -from typing import Any - -from PySide6.QtCore import QEvent, QModelIndex, QRectF, QSize, Qt, QTimer -from PySide6.QtGui import QColor, QFont, QFontMetrics, QIcon, QPainter -from PySide6.QtWidgets import ( - QComboBox, - QPushButton, - QStyle, - QStyledItemDelegate, - QToolTip, - QWidget, -) - -from .reception_style import body_family, heading_family -from .widgets import SortableTable, TableColumn, first_value - - -def library_stylesheet() -> str: - return Template(_LIBRARY).substitute(body=body_family(), heading=heading_family()) - - -def _library_icon(kind: str, color: str = "#1769E8", size: int = 15) -> QIcon: - # Defer the page helper lookup so importing this module alone does not - # recurse through pages.__init__ and the library page's own style import. - from .pages.prescriptions import _painted_icon - - result = QIcon() - for mode, tint in ( - (QIcon.Mode.Normal, color), - (QIcon.Mode.Active, color), - (QIcon.Mode.Selected, color), - (QIcon.Mode.Disabled, "#A4ADBA"), - ): - pixmap = _painted_icon(kind, tint, size).pixmap(QSize(size, size)) - for state in (QIcon.State.Off, QIcon.State.On): - result.addPixmap(pixmap, mode, state) - return result - - -class LibraryComboBox(QComboBox): - """Keep native combo interaction while painting the local caret.""" - - def paintEvent(self, event: Any) -> None: # noqa: N802 - Qt virtual - super().paintEvent(event) - painter = QPainter(self) - try: - rect = QRectF(self.width() - 25, (self.height() - 14) / 2, 14, 14) - mode = QIcon.Mode.Normal if self.isEnabled() else QIcon.Mode.Disabled - _library_icon("chevron_down", "#5D6B80", 14).paint(painter, rect.toRect(), mode=mode) - finally: - painter.end() - - -class LibraryTable(SortableTable): - """Fit readable columns while preserving actions and selected template IDs.""" - - _FLEX_COLUMNS = ((1, 2), (4, 5), (5, 2)) - - def __init__(self, columns: Sequence[TableColumn], parent: QWidget | None = None) -> None: - super().__init__(columns, parent) - self.horizontalHeader().setStretchLastSection(False) - self._minimum_widths = tuple(column.width for column in self.columns) - self._manual_widths: dict[int, int] = {} - self._fitting_columns = False - self._fit_timer = QTimer(self) - self._fit_timer.setSingleShot(True) - self._fit_timer.timeout.connect(self._fit_columns) - self.horizontalHeader().sectionResized.connect(self._column_resized) - self.viewport().installEventFilter(self) - - def eventFilter(self, watched: Any, event: QEvent) -> bool: # noqa: N802 - if watched is self.viewport() and event.type() in {QEvent.Type.Resize, QEvent.Type.Show}: - self._schedule_column_fit() - return super().eventFilter(watched, event) - - def _schedule_column_fit(self) -> None: - if not self._fit_timer.isActive(): - self._fit_timer.start(0) - - def _column_resized(self, column: int, _old_size: int, size: int) -> None: - if self._fitting_columns: - return - self._manual_widths[column] = max(self._minimum_widths[column], size) - self._schedule_column_fit() - - def _fit_columns(self) -> None: - widths = [self._manual_widths.get(column, minimum) - for column, minimum in enumerate(self._minimum_widths)] - extra = max(0, self.viewport().width() - sum(widths)) - flexible = [(column, weight) for column, weight in self._FLEX_COLUMNS - if column not in self._manual_widths] - # If every text column was manually sized, keep those preferences as - # minimums and let the herb preview absorb any remaining wide-screen space. - flexible = flexible or [(4, 1)] - total_weight = sum(weight for _column, weight in flexible) - for column, weight in flexible: - widths[column] += extra * weight // total_weight - widths[flexible[0][0]] += max(0, self.viewport().width() - sum(widths)) - if widths == [self.columnWidth(column) for column in range(self.columnCount())]: - return - self._fitting_columns = True - try: - for column, width in enumerate(widths): - self.setColumnWidth(column, width) - finally: - self._fitting_columns = False - - def set_rows(self, rows: Iterable[Any]) -> None: - selected_id = first_value(self.current_data(), "id", "template_id", default=None) - super().set_rows(rows) - # The shared table restores an unsorted row index after enabling sort. - # Locate the same source object in the finished visual order instead. - if selected_id is not None: - for row_index in range(self.rowCount()): - item = self.item(row_index, 0) - row = item.data(Qt.ItemDataRole.UserRole) if item is not None else None - row_id = first_value(row, "id", "template_id", default=None) - if row_id is not None and str(row_id) == str(selected_id): - self.selectRow(row_index) - return - self.clearSelection() - self.setCurrentCell(-1, -1) - - def setCellWidget(self, row: int, column: int, widget: QWidget | None) -> None: # noqa: N802 - super().setCellWidget(row, column, widget) - if widget is None or column != 9: - return - widget.setObjectName("PrescriptionLibraryTableCellHost") - widget.setAutoFillBackground(False) - glyphs = { - "查看处方模板": "eye", - "AI 解释": "spark", - "编辑处方模板": "pencil", - "删除处方模板": "trash", - } - for button in widget.findChildren(QPushButton): - if not button.property("rowAction"): - continue - glyph = glyphs.get(button.accessibleName()) or glyphs.get(button.toolTip()) - if glyph is not None: - color = "#BE4657" if button.property("danger") else "#1769E8" - button.setIcon(_library_icon(glyph, color, button.iconSize().width())) - - -def _library_font(size: int = 14, *, medium: bool = False) -> QFont: - font = QFont(heading_family() if medium else body_family()) - font.setPixelSize(size) - font.setWeight(QFont.Weight.Medium if medium else QFont.Weight.Normal) - return font - - -def _elide(text: str, metrics: QFontMetrics, width: int) -> str: - return metrics.elidedText(text, Qt.TextElideMode.ElideRight, max(1, width)) - - -def _herb_lines(text: str, metrics: QFontMetrics, width: int) -> list[str]: - """Wrap between complete herb entries; elide only the displayed lines.""" - entries = text.split("、") - first = entries[0] - next_index = 1 - while next_index < min(2, len(entries)): - candidate = first + "、" + entries[next_index] - if metrics.horizontalAdvance(candidate) > width: - break - first = candidate - next_index += 1 - lines = [_elide(first, metrics, width)] - if next_index < len(entries): - lines.append(_elide("、".join(entries[next_index:]), metrics, width)) - return lines - - -def _name_lines(text: str, metrics: QFontMetrics, width: int) -> list[str]: - if metrics.horizontalAdvance(text) <= width: - return [text] - split = 1 - while split < len(text) and metrics.horizontalAdvance(text[: split + 1]) <= width: - split += 1 - return [_elide(text[:split], metrics, width), _elide(text[split:], metrics, width)] - - -class LibraryItemDelegate(QStyledItemDelegate): - """Paint the ten existing columns without changing display or source roles.""" - - def sizeHint(self, option: Any, index: QModelIndex) -> QSize: # noqa: N802 - size = super().sizeHint(option, index) - size.setHeight(78) - return size - - def helpEvent(self, event: Any, view: Any, option: Any, index: QModelIndex) -> bool: # noqa: N802 - if event is not None and index.isValid() and index.column() != 9: - text = index.data(Qt.ItemDataRole.ToolTipRole) or index.data(Qt.ItemDataRole.DisplayRole) - if text: - QToolTip.showText(event.globalPos(), str(text), view) - return True - return super().helpEvent(event, view, option, index) - - @staticmethod - def _paint_lines( - painter: QPainter, - rect: QRectF, - lines: list[str], - *, - secondary_muted: bool = False, - ) -> None: - line_height = 26 - top = rect.center().y() - len(lines) * line_height / 2 - for line_index, line in enumerate(lines): - if secondary_muted and line_index: - painter.setFont(_library_font(13)) - painter.setPen(QColor("#5D6B80")) - line_rect = QRectF(rect.left(), top + line_index * line_height, rect.width(), line_height) - painter.drawText(line_rect, Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter, line) - - def paint(self, painter: QPainter, option: Any, index: QModelIndex) -> None: - painter.save() - try: - painter.setClipRect(option.rect) - selected = bool(option.state & QStyle.StateFlag.State_Selected) - hovered = bool(option.state & QStyle.StateFlag.State_MouseOver) - background = "#F2F7FF" if selected else "#F8FAFE" if hovered else "#FFFFFF" - painter.fillRect(option.rect, QColor(background)) - painter.setPen(QColor("#E6EDF6")) - painter.drawLine(option.rect.bottomLeft(), option.rect.bottomRight()) - if selected and index.column() == 0: - stripe = QRectF(option.rect.left(), option.rect.top(), 3, option.rect.height() - 1) - painter.fillRect(stripe, QColor("#1769E8")) - if option.state & QStyle.StateFlag.State_HasFocus: - painter.setPen(QColor("#75A5F0")) - painter.setBrush(Qt.BrushStyle.NoBrush) - painter.drawRect(option.rect.adjusted(1, 1, -2, -2)) - - column = index.column() - if column == 9: - return - rect = QRectF(option.rect.adjusted(12, 0, -12, -1)) - if rect.width() <= 0: - return - value = index.data(Qt.ItemDataRole.DisplayRole) - text = "" if value is None else str(value) - font = _library_font(medium=column == 1) - painter.setFont(font) - painter.setPen(QColor("#273244")) - metrics = QFontMetrics(font) - width = int(rect.width()) - - if column == 2: - painter.setFont(_library_font(13)) - metrics = painter.fontMetrics() - label = _elide(text, metrics, width - 12) - pill_width = min(rect.width(), metrics.horizontalAdvance(label) + 14) - pill = QRectF(rect.center().x() - pill_width / 2, rect.center().y() - 12, pill_width, 24) - painter.setRenderHint(QPainter.RenderHint.Antialiasing, True) - painter.setPen(Qt.PenStyle.NoPen) - painter.setBrush(QColor("#EAF2FF")) - painter.drawRoundedRect(pill, 4, 4) - painter.setPen(QColor("#1769E8")) - painter.drawText(pill, Qt.AlignmentFlag.AlignCenter, label) - elif column == 6: - glyph = "users" if text == "所有人可见" else "lock" - icon_rect = QRectF(rect.left(), rect.center().y() - 7, 14, 14) - _library_icon(glyph, "#5D6B80", 14).paint(painter, icon_rect.toRect()) - label_rect = rect.adjusted(22, 0, 0, 0) - painter.drawText( - label_rect, - Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter, - _elide(text, metrics, int(label_rect.width())), - ) - elif column == 4: - self._paint_lines(painter, rect, _herb_lines(text, metrics, width)) - elif column == 8: - parts = text.splitlines() if "\n" in text else text.rsplit(" ", 1) - lines = [_elide(parts[0], metrics, width)] - if len(parts) > 1: - lines.append(_elide(" ".join(parts[1:]), QFontMetrics(_library_font(13)), width)) - self._paint_lines(painter, rect, lines, secondary_muted=True) - elif column == 1: - self._paint_lines(painter, rect, _name_lines(text, metrics, width)) - else: - alignment = Qt.AlignmentFlag.AlignCenter if column in (0, 3, 5) else ( - Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter - ) - painter.drawText(rect, alignment, _elide(text, metrics, width)) - finally: - painter.restore() - - -_LIBRARY = """ -#PrescriptionLibraryPage { background: #F3F7FD; color: #273244; } -#PrescriptionLibraryPage QWidget#PrescriptionLibraryContent, -#PrescriptionLibraryPage QScrollArea#PrescriptionLibraryScroll, -#PrescriptionLibraryPage QScrollArea#PrescriptionLibraryToolbarScroll { - background: transparent; border: 0; -} -#PrescriptionLibraryPage QLabel, #PrescriptionLibraryPage QPushButton, -#PrescriptionLibraryPage QLineEdit, #PrescriptionLibraryPage QComboBox, -#PrescriptionLibraryPage QTableWidget { - font-family: "$body"; font-size: 14px; font-weight: 400; color: #273244; -} -#PrescriptionLibraryPage QLabel[role="pageTitle"] { - font-family: "$heading"; font-size: 20px; font-weight: 600; color: #202C3F; -} -#PrescriptionLibraryPage QLabel[role="muted"] { color: #5D6B80; font-size: 13px; } -#PrescriptionLibraryPage QFrame#MetricCard, -#PrescriptionLibraryPage QFrame#PrescriptionLibraryFilterBar, -#PrescriptionLibraryPage QFrame#PrescriptionLibraryTableCard { - background: #FFFFFF; border: 1px solid #DBE5F2; border-radius: 8px; -} -#PrescriptionLibraryPage QFrame#MetricCard QLabel[role="metricTitle"] { - font-family: "$body"; color: #5D6B80; font-size: 13px; font-weight: 400; -} -#PrescriptionLibraryPage QFrame#MetricCard QLabel[role="metricValue"] { - font-family: "$heading"; color: #273244; font-size: 18px; font-weight: 600; -} -#PrescriptionLibraryPage QFrame#MetricCard QLabel[metricIcon="true"] { - border: 0; border-radius: 0; background: transparent; -} -#PrescriptionLibraryPage QPushButton { - min-height: 38px; max-height: 38px; padding: 0 16px; border-radius: 5px; - border: 1px solid #DBE5F2; background: #FFFFFF; color: #273244; -} -#PrescriptionLibraryPage QPushButton:hover { background: #F2F7FF; border-color: #B6CDEE; color: #1555B6; } -#PrescriptionLibraryPage QPushButton:pressed { background: #DCEAFF; } -#PrescriptionLibraryPage QPushButton:focus { border-color: #75A5F0; } -#PrescriptionLibraryPage QPushButton#PrescriptionLibraryAddButton, -#PrescriptionLibraryPage QPushButton#PrescriptionLibraryQueryButton { - background: #1769E8; border-color: #1769E8; color: #FFFFFF; -} -#PrescriptionLibraryPage QPushButton#PrescriptionLibraryAddButton:hover, -#PrescriptionLibraryPage QPushButton#PrescriptionLibraryQueryButton:hover { - background: #155BCC; border-color: #155BCC; -} -#PrescriptionLibraryPage QPushButton#PrescriptionLibraryAddButton:pressed, -#PrescriptionLibraryPage QPushButton#PrescriptionLibraryQueryButton:pressed { - background: #124EA9; border-color: #124EA9; -} -#PrescriptionLibraryPage QPushButton[variant="danger"] { color: #BE4657; border-color: #E9D8DE; } -#PrescriptionLibraryPage QPushButton:disabled, -#PrescriptionLibraryPage QPushButton[variant="danger"]:disabled { - color: #97A4B6; background: #F6F8FC; border-color: #E2E9F2; -} -#PrescriptionLibraryPage QLineEdit, #PrescriptionLibraryPage QComboBox { - min-height: 38px; max-height: 38px; padding: 0 12px; border: 1px solid #DBE5F2; - border-radius: 5px; background: #FFFFFF; color: #273244; - selection-background-color: #DCEAFF; selection-color: #273244; -} -#PrescriptionLibraryPage QLineEdit:focus, #PrescriptionLibraryPage QComboBox:focus { border-color: #75A5F0; } -#PrescriptionLibraryPage QLineEdit QToolButton { border: 0; background: transparent; padding: 0; } -#PrescriptionLibraryPage QComboBox { padding-right: 30px; font-size: 13px; } -#PrescriptionLibraryPage QComboBox::drop-down { width: 28px; border: 0; background: transparent; } -#PrescriptionLibraryPage QComboBox::down-arrow { image: none; width: 0; height: 0; } -#PrescriptionLibraryPage QComboBox:disabled { color: #97A4B6; background: #F6F8FC; } -#PrescriptionLibraryPage QComboBox QAbstractItemView { - font-family: "$body"; font-size: 13px; color: #273244; background: #FFFFFF; - border: 1px solid #DBE5F2; outline: 0; selection-background-color: #EAF2FF; selection-color: #1555B6; -} -#PrescriptionLibraryPage QComboBox QAbstractItemView::item { min-height: 30px; padding: 3px 10px; } -#PrescriptionLibraryPage QFrame#PrescriptionLibraryToolbar { background: transparent; border: 0; } -#PrescriptionLibraryPage QFrame#PrescriptionLibraryToolbar QPushButton { padding: 0 12px; font-size: 13px; } -#PrescriptionLibraryPage QFrame#PrescriptionLibraryToolbar QPushButton[toolbarTab="true"] { - min-width: 80px; min-height: 40px; max-height: 40px; padding: 0 10px; margin-right: 8px; - background: transparent; border: 0; border-bottom: 2px solid transparent; - border-radius: 0; color: #273244; font-size: 14px; -} -#PrescriptionLibraryPage QFrame#PrescriptionLibraryToolbar QPushButton[toolbarTab="true"]:checked { - color: #1769E8; border-bottom-color: #1769E8; -} -#PrescriptionLibraryPage QFrame#PrescriptionLibraryToolbar QPushButton[toolbarTab="true"]:hover { - color: #1555B6; background: #F2F7FF; -} -#PrescriptionLibraryPage QTableWidget { - border: 0; background: #FFFFFF; alternate-background-color: #FFFFFF; - selection-background-color: #F2F7FF; selection-color: #273244; gridline-color: #E6EDF6; -} -#PrescriptionLibraryPage QTableWidget::item { padding: 0; border: 0; } -#PrescriptionLibraryPage QHeaderView::section { - min-height: 0; padding: 0 12px; background: #F5F8FD; color: #5D6B80; - border: 0; border-bottom: 1px solid #DBE5F2; - font-family: "$body"; font-size: 13px; font-weight: 400; -} -#PrescriptionLibraryPage QWidget#PrescriptionLibraryTableCellHost { background: transparent; border: 0; } -#PrescriptionLibraryPage QPushButton[rowAction="true"] { - min-width: 28px; max-width: 28px; min-height: 28px; max-height: 28px; - padding: 0; border: 1px solid transparent; border-radius: 4px; background: transparent; -} -#PrescriptionLibraryPage QPushButton[rowAction="true"]:hover { background: #EAF2FF; border-color: #B6CDEE; } -#PrescriptionLibraryPage QPushButton[rowAction="true"]:focus { border-color: #75A5F0; } -#PrescriptionLibraryPage QPushButton[rowAction="true"][danger="true"]:hover { background: #FFF0F2; border-color: #EAC8D0; } -#PrescriptionLibraryPage QPushButton[rowAction="true"]:disabled { background: transparent; border-color: transparent; color: #A4ADBA; } -#PrescriptionLibraryPage QWidget#InfiniteList { background: #FFFFFF; border-top: 1px solid #E6EDF6; } -#PrescriptionLibraryPage QLabel#EmptyStateGlyph { - font-size: 24px; color: #1769E8; background: #F2F7FF; - border: 1px solid #DBE5F2; border-radius: 22px; -} -#PrescriptionLibraryPage QWidget#EmptyState QLabel[role="muted"] { min-width: 300px; } -#PrescriptionLibraryPage QScrollBar:vertical { background: #F4F7FC; width: 7px; margin: 0; } -#PrescriptionLibraryPage QScrollBar:horizontal { background: #F4F7FC; height: 7px; margin: 0; } -#PrescriptionLibraryPage QScrollBar::handle { background: #C8D5E6; border-radius: 3px; min-width: 24px; min-height: 24px; } -#PrescriptionLibraryPage QScrollBar::add-line, #PrescriptionLibraryPage QScrollBar::sub-line { width: 0; height: 0; } -#PrescriptionLibraryPage QScrollBar::add-page, #PrescriptionLibraryPage QScrollBar::sub-page { background: transparent; } -""" - - -__all__ = ["library_stylesheet", "LibraryComboBox", "LibraryTable", "LibraryItemDelegate"] +"""Shared clinical tokens for the prescription library and its native delegates.""" + +from __future__ import annotations + +from collections.abc import Iterable, Sequence +from string import Template +from typing import Any + +from PySide6.QtCore import QEvent, QModelIndex, QRectF, QSize, Qt, QTimer +from PySide6.QtGui import QColor, QFont, QFontMetrics, QIcon, QPainter +from PySide6.QtWidgets import ( + QComboBox, + QPushButton, + QStyle, + QStyledItemDelegate, + QToolTip, + QWidget, +) + +from .design_system import PALETTE, RADII, clinical_stylesheet +from .reception_style import body_family, heading_family +from .widgets import SortableTable, TableColumn, first_value + + +def library_stylesheet() -> str: + return clinical_stylesheet(Template(_LIBRARY).safe_substitute(body=body_family(), heading=heading_family())) + + +def _library_icon(kind: str, color: str = PALETTE["accent"], size: int = 15) -> QIcon: + # Defer the page helper lookup so importing this module alone does not + # recurse through pages.__init__ and the library page's own style import. + from .pages.prescriptions import _painted_icon + + result = QIcon() + for mode, tint in ( + (QIcon.Mode.Normal, color), + (QIcon.Mode.Active, color), + (QIcon.Mode.Selected, color), + (QIcon.Mode.Disabled, PALETTE["disabled"]), + ): + pixmap = _painted_icon(kind, tint, size).pixmap(QSize(size, size)) + for state in (QIcon.State.Off, QIcon.State.On): + result.addPixmap(pixmap, mode, state) + return result + + +class LibraryComboBox(QComboBox): + """Keep native combo interaction while painting the local caret.""" + + def paintEvent(self, event: Any) -> None: # noqa: N802 - Qt virtual + super().paintEvent(event) + painter = QPainter(self) + try: + rect = QRectF(self.width() - 25, (self.height() - 14) / 2, 14, 14) + mode = QIcon.Mode.Normal if self.isEnabled() else QIcon.Mode.Disabled + _library_icon("chevron_down", PALETTE["muted"], 14).paint(painter, rect.toRect(), mode=mode) + finally: + painter.end() + + +class LibraryTable(SortableTable): + """Fit readable columns while preserving actions and selected template IDs.""" + + _FLEX_COLUMNS = ((1, 2), (4, 5), (5, 2)) + + def __init__(self, columns: Sequence[TableColumn], parent: QWidget | None = None) -> None: + super().__init__(columns, parent) + self.horizontalHeader().setStretchLastSection(False) + self._minimum_widths = tuple(column.width for column in self.columns) + self._manual_widths: dict[int, int] = {} + self._fitting_columns = False + self._fit_timer = QTimer(self) + self._fit_timer.setSingleShot(True) + self._fit_timer.timeout.connect(self._fit_columns) + self.horizontalHeader().sectionResized.connect(self._column_resized) + self.viewport().installEventFilter(self) + + def eventFilter(self, watched: Any, event: QEvent) -> bool: # noqa: N802 + if watched is self.viewport() and event.type() in {QEvent.Type.Resize, QEvent.Type.Show}: + self._schedule_column_fit() + return super().eventFilter(watched, event) + + def _schedule_column_fit(self) -> None: + if not self._fit_timer.isActive(): + self._fit_timer.start(0) + + def _column_resized(self, column: int, _old_size: int, size: int) -> None: + if self._fitting_columns: + return + self._manual_widths[column] = max(self._minimum_widths[column], size) + self._schedule_column_fit() + + def _fit_columns(self) -> None: + widths = [self._manual_widths.get(column, minimum) + for column, minimum in enumerate(self._minimum_widths)] + extra = max(0, self.viewport().width() - sum(widths)) + flexible = [(column, weight) for column, weight in self._FLEX_COLUMNS + if column not in self._manual_widths] + # If every text column was manually sized, keep those preferences as + # minimums and let the herb preview absorb any remaining wide-screen space. + flexible = flexible or [(4, 1)] + total_weight = sum(weight for _column, weight in flexible) + for column, weight in flexible: + widths[column] += extra * weight // total_weight + widths[flexible[0][0]] += max(0, self.viewport().width() - sum(widths)) + if widths == [self.columnWidth(column) for column in range(self.columnCount())]: + return + self._fitting_columns = True + try: + for column, width in enumerate(widths): + self.setColumnWidth(column, width) + finally: + self._fitting_columns = False + + def set_rows(self, rows: Iterable[Any]) -> None: + selected_id = first_value(self.current_data(), "id", "template_id", default=None) + super().set_rows(rows) + # The shared table restores an unsorted row index after enabling sort. + # Locate the same source object in the finished visual order instead. + if selected_id is not None: + for row_index in range(self.rowCount()): + item = self.item(row_index, 0) + row = item.data(Qt.ItemDataRole.UserRole) if item is not None else None + row_id = first_value(row, "id", "template_id", default=None) + if row_id is not None and str(row_id) == str(selected_id): + self.selectRow(row_index) + return + self.clearSelection() + self.setCurrentCell(-1, -1) + + def setCellWidget(self, row: int, column: int, widget: QWidget | None) -> None: # noqa: N802 + super().setCellWidget(row, column, widget) + if widget is None or column != 9: + return + widget.setObjectName("PrescriptionLibraryTableCellHost") + widget.setAutoFillBackground(False) + glyphs = { + "查看处方模板": "eye", + "AI 解释": "spark", + "编辑处方模板": "pencil", + "删除处方模板": "trash", + } + for button in widget.findChildren(QPushButton): + if not button.property("rowAction"): + continue + glyph = glyphs.get(button.accessibleName()) or glyphs.get(button.toolTip()) + if glyph is not None: + color = PALETTE["danger"] if button.property("danger") else PALETTE["accent"] + button.setIcon(_library_icon(glyph, color, button.iconSize().width())) + + +def _library_font(size: int = 14, *, medium: bool = False) -> QFont: + font = QFont(heading_family() if medium else body_family()) + font.setPixelSize(size) + font.setWeight(QFont.Weight.Medium if medium else QFont.Weight.Normal) + return font + + +def _elide(text: str, metrics: QFontMetrics, width: int) -> str: + return metrics.elidedText(text, Qt.TextElideMode.ElideRight, max(1, width)) + + +def _herb_lines(text: str, metrics: QFontMetrics, width: int) -> list[str]: + """Wrap between complete herb entries; elide only the displayed lines.""" + entries = text.split("、") + first = entries[0] + next_index = 1 + while next_index < min(2, len(entries)): + candidate = first + "、" + entries[next_index] + if metrics.horizontalAdvance(candidate) > width: + break + first = candidate + next_index += 1 + lines = [_elide(first, metrics, width)] + if next_index < len(entries): + lines.append(_elide("、".join(entries[next_index:]), metrics, width)) + return lines + + +def _name_lines(text: str, metrics: QFontMetrics, width: int) -> list[str]: + if metrics.horizontalAdvance(text) <= width: + return [text] + split = 1 + while split < len(text) and metrics.horizontalAdvance(text[: split + 1]) <= width: + split += 1 + return [_elide(text[:split], metrics, width), _elide(text[split:], metrics, width)] + + +class LibraryItemDelegate(QStyledItemDelegate): + """Paint the ten existing columns without changing display or source roles.""" + + def sizeHint(self, option: Any, index: QModelIndex) -> QSize: # noqa: N802 + size = super().sizeHint(option, index) + size.setHeight(78) + return size + + def helpEvent(self, event: Any, view: Any, option: Any, index: QModelIndex) -> bool: # noqa: N802 + if event is not None and index.isValid() and index.column() != 9: + text = index.data(Qt.ItemDataRole.ToolTipRole) or index.data(Qt.ItemDataRole.DisplayRole) + if text: + QToolTip.showText(event.globalPos(), str(text), view) + return True + return super().helpEvent(event, view, option, index) + + @staticmethod + def _paint_lines( + painter: QPainter, + rect: QRectF, + lines: list[str], + *, + secondary_muted: bool = False, + ) -> None: + line_height = 26 + top = rect.center().y() - len(lines) * line_height / 2 + for line_index, line in enumerate(lines): + if secondary_muted and line_index: + painter.setFont(_library_font(13)) + painter.setPen(QColor(PALETTE["muted"])) + line_rect = QRectF(rect.left(), top + line_index * line_height, rect.width(), line_height) + painter.drawText(line_rect, Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter, line) + + def paint(self, painter: QPainter, option: Any, index: QModelIndex) -> None: + painter.save() + try: + painter.setClipRect(option.rect) + selected = bool(option.state & QStyle.StateFlag.State_Selected) + hovered = bool(option.state & QStyle.StateFlag.State_MouseOver) + background = PALETTE["accent_soft"] if selected else PALETTE["surface_alt"] if hovered else PALETTE["surface"] + painter.fillRect(option.rect, QColor(background)) + painter.setPen(QColor(PALETTE["line"])) + painter.drawLine(option.rect.bottomLeft(), option.rect.bottomRight()) + if selected and index.column() == 0: + stripe = QRectF(option.rect.left(), option.rect.top(), 3, option.rect.height() - 1) + painter.fillRect(stripe, QColor(PALETTE["accent"])) + if option.state & QStyle.StateFlag.State_HasFocus: + painter.setPen(QColor(PALETTE["focus"])) + painter.setBrush(Qt.BrushStyle.NoBrush) + painter.drawRect(option.rect.adjusted(1, 1, -2, -2)) + + column = index.column() + if column == 9: + return + rect = QRectF(option.rect.adjusted(12, 0, -12, -1)) + if rect.width() <= 0: + return + value = index.data(Qt.ItemDataRole.DisplayRole) + text = "" if value is None else str(value) + font = _library_font(medium=column == 1) + painter.setFont(font) + painter.setPen(QColor(PALETTE["text"])) + metrics = QFontMetrics(font) + width = int(rect.width()) + + if column == 2: + painter.setFont(_library_font(13)) + metrics = painter.fontMetrics() + label = _elide(text, metrics, width - 12) + pill_width = min(rect.width(), metrics.horizontalAdvance(label) + 14) + pill = QRectF(rect.center().x() - pill_width / 2, rect.center().y() - 12, pill_width, 24) + painter.setRenderHint(QPainter.RenderHint.Antialiasing, True) + painter.setPen(Qt.PenStyle.NoPen) + painter.setBrush(QColor(PALETTE["accent_soft"])) + painter.drawRoundedRect(pill, RADII["small"], RADII["small"]) + painter.setPen(QColor(PALETTE["accent"])) + painter.drawText(pill, Qt.AlignmentFlag.AlignCenter, label) + elif column == 6: + glyph = "users" if text == "所有人可见" else "lock" + icon_rect = QRectF(rect.left(), rect.center().y() - 7, 14, 14) + _library_icon(glyph, PALETTE["muted"], 14).paint(painter, icon_rect.toRect()) + label_rect = rect.adjusted(22, 0, 0, 0) + painter.drawText( + label_rect, + Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter, + _elide(text, metrics, int(label_rect.width())), + ) + elif column == 4: + self._paint_lines(painter, rect, _herb_lines(text, metrics, width)) + elif column == 8: + parts = text.splitlines() if "\n" in text else text.rsplit(" ", 1) + lines = [_elide(parts[0], metrics, width)] + if len(parts) > 1: + lines.append(_elide(" ".join(parts[1:]), QFontMetrics(_library_font(13)), width)) + self._paint_lines(painter, rect, lines, secondary_muted=True) + elif column == 1: + self._paint_lines(painter, rect, _name_lines(text, metrics, width)) + else: + alignment = Qt.AlignmentFlag.AlignCenter if column in (0, 3, 5) else ( + Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter + ) + painter.drawText(rect, alignment, _elide(text, metrics, width)) + finally: + painter.restore() + + +_LIBRARY = """ +#PrescriptionLibraryPage { background: $ds_canvas; color: $ds_text; } +#PrescriptionLibraryPage QWidget#PrescriptionLibraryContent, +#PrescriptionLibraryPage QScrollArea#PrescriptionLibraryScroll, +#PrescriptionLibraryPage QScrollArea#PrescriptionLibraryToolbarScroll { + background: transparent; border: 0; +} +#PrescriptionLibraryPage QLabel, #PrescriptionLibraryPage QPushButton, +#PrescriptionLibraryPage QLineEdit, #PrescriptionLibraryPage QComboBox, +#PrescriptionLibraryPage QTableWidget { + font-family: "$body"; font-size: 14px; font-weight: 400; color: $ds_text; +} +#PrescriptionLibraryPage QLabel[role="pageTitle"] { + font-family: "$heading"; font-size: 20px; font-weight: 600; color: $ds_heading; +} +#PrescriptionLibraryPage QLabel[role="muted"] { color: $ds_muted; font-size: 13px; } +#PrescriptionLibraryPage QFrame#PrescriptionLibraryFilterBar, +#PrescriptionLibraryPage QFrame#PrescriptionLibraryTableCard { + background: $ds_surface; border: 1px solid $ds_line; border-radius: $ds_radius_panel; +} +#PrescriptionLibraryPage QFrame#MetricCard { background: $ds_surface; border: 0; border-radius: $ds_radius_panel; } +#PrescriptionLibraryPage QFrame#MetricCard QLabel[role="metricTitle"] { + font-family: "$body"; color: $ds_muted; font-size: 13px; font-weight: 400; +} +#PrescriptionLibraryPage QFrame#MetricCard QLabel[role="metricValue"] { + font-family: "$heading"; color: $ds_text; font-size: 18px; font-weight: 600; +} +#PrescriptionLibraryPage QFrame#MetricCard QLabel[metricIcon="true"] { + border: 0; border-radius: 0; background: transparent; +} +#PrescriptionLibraryPage QPushButton { + min-height: 38px; max-height: 38px; padding: 0 16px; border-radius: $ds_radius_control; + border: 1px solid transparent; background: $ds_surface_alt; color: $ds_text; +} +#PrescriptionLibraryPage QPushButton:hover { background: $ds_surface_alt; border-color: $ds_line_strong; color: $ds_accent; } +#PrescriptionLibraryPage QPushButton:pressed { background: $ds_accent_soft; } +#PrescriptionLibraryPage QPushButton:focus { border-color: $ds_focus; } +#PrescriptionLibraryPage QPushButton#PrescriptionLibraryAddButton, +#PrescriptionLibraryPage QPushButton#PrescriptionLibraryQueryButton { + background: $ds_accent; border-color: $ds_accent; color: $ds_surface; +} +#PrescriptionLibraryPage QPushButton#PrescriptionLibraryAddButton:hover, +#PrescriptionLibraryPage QPushButton#PrescriptionLibraryQueryButton:hover { + background: $ds_accent_hover; border-color: $ds_accent_hover; +} +#PrescriptionLibraryPage QPushButton#PrescriptionLibraryAddButton:pressed, +#PrescriptionLibraryPage QPushButton#PrescriptionLibraryQueryButton:pressed { + background: $ds_accent_pressed; border-color: $ds_accent_pressed; +} +#PrescriptionLibraryPage QPushButton#PrescriptionLibraryAddButton:focus, +#PrescriptionLibraryPage QPushButton#PrescriptionLibraryQueryButton:focus { border-color: $ds_focus; } +#PrescriptionLibraryPage QPushButton[variant="danger"] { color: $ds_danger; background: $ds_danger_soft; border-color: transparent; } +#PrescriptionLibraryPage QPushButton[variant="danger"]:hover { border-color: $ds_danger; } +#PrescriptionLibraryPage QPushButton[variant="danger"]:focus { border-color: $ds_focus; } +#PrescriptionLibraryPage QPushButton:disabled, +#PrescriptionLibraryPage QPushButton[variant="danger"]:disabled, +#PrescriptionLibraryPage QPushButton#PrescriptionLibraryAddButton:disabled, +#PrescriptionLibraryPage QPushButton#PrescriptionLibraryQueryButton:disabled { + color: $ds_disabled; background: $ds_disabled_surface; border-color: $ds_line; +} +#PrescriptionLibraryPage QLineEdit, #PrescriptionLibraryPage QComboBox { + min-height: 38px; max-height: 38px; padding: 0 12px; border: 1px solid $ds_line; + border-radius: $ds_radius_control; background: $ds_surface; color: $ds_text; + selection-background-color: $ds_accent_soft; selection-color: $ds_text; +} +#PrescriptionLibraryPage QLineEdit:focus, #PrescriptionLibraryPage QComboBox:focus { border-color: $ds_focus; } +#PrescriptionLibraryPage QLineEdit QToolButton { border: 0; background: transparent; padding: 0; } +#PrescriptionLibraryPage QComboBox { padding-right: 30px; font-size: 13px; } +#PrescriptionLibraryPage QComboBox::drop-down { width: 28px; border: 0; background: transparent; } +#PrescriptionLibraryPage QComboBox::down-arrow { image: none; width: 0; height: 0; } +#PrescriptionLibraryPage QComboBox:disabled { color: $ds_disabled; background: $ds_disabled_surface; } +#PrescriptionLibraryPage QComboBox QAbstractItemView { + font-family: "$body"; font-size: 13px; color: $ds_text; background: $ds_surface; + border: 1px solid $ds_line; outline: 0; selection-background-color: $ds_accent_soft; selection-color: $ds_accent; +} +#PrescriptionLibraryPage QComboBox QAbstractItemView::item { min-height: 30px; padding: 3px 10px; } +#PrescriptionLibraryPage QFrame#PrescriptionLibraryToolbar { background: transparent; border: 0; } +#PrescriptionLibraryPage QFrame#PrescriptionLibraryToolbar QPushButton { padding: 0 12px; font-size: 13px; } +#PrescriptionLibraryPage QFrame#PrescriptionLibraryToolbar QPushButton[toolbarTab="true"] { + min-width: 80px; min-height: 40px; max-height: 40px; padding: 0 10px; margin-right: 8px; + background: transparent; border: 0; border-bottom: 2px solid transparent; + border-radius: 0; color: $ds_text; font-size: 14px; +} +#PrescriptionLibraryPage QFrame#PrescriptionLibraryToolbar QPushButton[toolbarTab="true"]:checked { + color: $ds_accent; border-bottom-color: $ds_accent; +} +#PrescriptionLibraryPage QFrame#PrescriptionLibraryToolbar QPushButton[toolbarTab="true"]:hover { + color: $ds_accent; background: $ds_surface_alt; +} +#PrescriptionLibraryPage QFrame#PrescriptionLibraryToolbar QPushButton[toolbarTab="true"]:focus { background: $ds_accent_soft; } +#PrescriptionLibraryPage QTableWidget { + border: 0; background: $ds_surface; alternate-background-color: $ds_surface; + selection-background-color: $ds_accent_soft; selection-color: $ds_text; gridline-color: $ds_line; +} +#PrescriptionLibraryPage QTableWidget::item { padding: 0; border: 0; } +#PrescriptionLibraryPage QHeaderView::section { + min-height: 0; padding: 0 12px; background: $ds_surface_alt; color: $ds_muted; + border: 0; border-bottom: 1px solid $ds_line; + font-family: "$body"; font-size: 13px; font-weight: 400; +} +#PrescriptionLibraryPage QWidget#PrescriptionLibraryTableCellHost { background: transparent; border: 0; } +#PrescriptionLibraryPage QPushButton[rowAction="true"] { + min-width: 28px; max-width: 28px; min-height: 28px; max-height: 28px; + padding: 0; border: 1px solid transparent; border-radius: $ds_radius_small; background: transparent; +} +#PrescriptionLibraryPage QPushButton[rowAction="true"]:hover { background: $ds_accent_soft; border-color: $ds_line_strong; } +#PrescriptionLibraryPage QPushButton[rowAction="true"]:focus { border-color: $ds_focus; } +#PrescriptionLibraryPage QPushButton[rowAction="true"][danger="true"]:hover { background: $ds_danger_soft; border-color: $ds_danger_soft; } +#PrescriptionLibraryPage QPushButton[rowAction="true"][danger="true"]:focus { border-color: $ds_focus; } +#PrescriptionLibraryPage QPushButton[rowAction="true"]:disabled { background: transparent; border-color: transparent; color: $ds_disabled; } +#PrescriptionLibraryPage QWidget#InfiniteList { background: $ds_surface; border-top: 1px solid $ds_line; } +#PrescriptionLibraryPage QLabel#EmptyStateGlyph { + font-size: 24px; color: $ds_accent; background: $ds_surface_alt; + border: 1px solid $ds_line; border-radius: $ds_radius_panel; +} +#PrescriptionLibraryPage QWidget#EmptyState QLabel[role="muted"] { min-width: 300px; } +#PrescriptionLibraryPage QScrollBar:vertical { background: $ds_canvas; width: 7px; margin: 0; } +#PrescriptionLibraryPage QScrollBar:horizontal { background: $ds_canvas; height: 7px; margin: 0; } +#PrescriptionLibraryPage QScrollBar::handle { background: $ds_line_strong; border-radius: 3px; min-width: 24px; min-height: 24px; } +#PrescriptionLibraryPage QScrollBar::add-line, #PrescriptionLibraryPage QScrollBar::sub-line { width: 0; height: 0; } +#PrescriptionLibraryPage QScrollBar::add-page, #PrescriptionLibraryPage QScrollBar::sub-page { background: transparent; } +""" + + +__all__ = ["library_stylesheet", "LibraryComboBox", "LibraryTable", "LibraryItemDelegate"] diff --git a/app/src/doctor_workstation/ui/prescriptions_style.py b/app/src/doctor_workstation/ui/prescriptions_style.py index bf1554418..9d452dfcf 100644 --- a/app/src/doctor_workstation/ui/prescriptions_style.py +++ b/app/src/doctor_workstation/ui/prescriptions_style.py @@ -1,107 +1,115 @@ -"""Scoped surfaces and real fonts for the approved issued-prescription page.""" - -from string import Template - -from .reception_style import body_family, heading_family - - -def prescriptions_stylesheet() -> str: - return Template(_PRESCRIPTIONS).substitute(body=body_family(), heading=heading_family()) - - -_PRESCRIPTIONS = """ -#PrescriptionsPage { background: #F3F7FD; color: #273244; } -#PrescriptionWorkspaceContent, #PrescriptionWorkspaceScroll { background: transparent; border: 0; } -#PrescriptionsPage QLabel, #PrescriptionsPage QPushButton, #PrescriptionsPage QLineEdit, -#PrescriptionsPage QComboBox, #PrescriptionsPage QDateTimeEdit, #PrescriptionsPage QTableWidget { - font-family: "$body"; font-size: 14px; font-weight: 400; color: #273244; -} -#PrescriptionsPage QLabel[role="pageTitle"] { - font-family: "$heading"; font-size: 20px; font-weight: 600; color: #202C3F; -} -#PrescriptionsPage QLabel[role="sectionTitle"] { - font-family: "$heading"; font-size: 14px; font-weight: 600; -} -#PrescriptionsPage QLabel[role="muted"], #PrescriptionsPage QLabel#PrescriptionCountBadge { - color: #5D6B80; font-size: 13px; background: transparent; border: 0; padding: 0; -} -#PrescriptionsPage QFrame#PrescriptionFilterBar, #PrescriptionsPage QFrame#PrescriptionTableCard { - background: #FFFFFF; border: 1px solid #DBE5F2; border-radius: 8px; -} -#PrescriptionsPage QFrame#PrescriptionToolbar { background: transparent; border: 0; } -#PrescriptionsPage QPushButton { - min-height: 38px; max-height: 38px; padding: 0 16px; border-radius: 5px; - border: 1px solid #DBE5F2; background: #FFFFFF; color: #273244; -} -#PrescriptionsPage QPushButton:hover { background: #F2F7FF; border-color: #B6CDEE; color: #1555B6; } -#PrescriptionsPage QPushButton:pressed { background: #DCEAFF; } -#PrescriptionsPage QPushButton:focus { border-color: #75A5F0; } -#PrescriptionsPage QPushButton#PrescriptionAddButton, #PrescriptionsPage QPushButton#PrescriptionQueryButton { - background: #1769E8; color: #FFFFFF; border-color: #1769E8; -} -#PrescriptionsPage QPushButton#PrescriptionAddButton:hover, #PrescriptionsPage QPushButton#PrescriptionQueryButton:hover { - background: #155BCC; border-color: #155BCC; -} -#PrescriptionsPage QPushButton#PrescriptionAddButton:pressed, #PrescriptionsPage QPushButton#PrescriptionQueryButton:pressed { - background: #124EA9; border-color: #124EA9; -} -#PrescriptionsPage QPushButton[variant="danger"] { color: #BE4657; background: #FFFFFF; border-color: #E9D8DE; } -#PrescriptionsPage QPushButton:disabled, #PrescriptionsPage QPushButton[variant="danger"]:disabled { - color: #97A4B6; background: #F6F8FC; border-color: #E2E9F2; -} -#PrescriptionsPage QLineEdit, #PrescriptionsPage QComboBox, #PrescriptionsPage QDateTimeEdit { - min-height: 38px; max-height: 38px; padding: 0 12px; border: 1px solid #DBE5F2; - border-radius: 5px; background: #FFFFFF; color: #273244; - selection-background-color: #DCEAFF; selection-color: #273244; -} -#PrescriptionsPage QLineEdit:focus, #PrescriptionsPage QComboBox:focus, #PrescriptionsPage QDateTimeEdit:focus { border-color: #75A5F0; } -#PrescriptionsPage QLineEdit QToolButton { min-width: 0; min-height: 0; border: 0; background: transparent; padding: 0; } -#PrescriptionsPage QComboBox, #PrescriptionsPage QDateTimeEdit { padding-right: 30px; font-size: 13px; } -#PrescriptionsPage QComboBox::drop-down, #PrescriptionsPage QDateTimeEdit::drop-down { width: 28px; border: 0; background: transparent; } -#PrescriptionsPage QComboBox::down-arrow, #PrescriptionsPage QDateTimeEdit::down-arrow { image: none; width: 0; height: 0; } -#PrescriptionsPage QDateTimeEdit:disabled { color: #8A97A9; background: #F6F8FC; border-color: #E2E9F2; } -#PrescriptionsPage QPushButton#PrescriptionDoctorButton { text-align: left; padding-right: 30px; font-size: 13px; } -#PrescriptionsPage QComboBox QAbstractItemView { - font-family: "$body"; font-size: 13px; color: #273244; background: #FFFFFF; - border: 1px solid #DBE5F2; outline: 0; selection-background-color: #EAF2FF; selection-color: #1555B6; -} -#PrescriptionsPage QComboBox QAbstractItemView::item { min-height: 30px; padding: 3px 10px; } -#PrescriptionsPage QCalendarWidget { font-family: "$body"; font-size: 13px; background: #FFFFFF; color: #273244; } -#PrescriptionsPage QCalendarWidget QWidget#qt_calendar_navigationbar { background: #F5F8FD; } -#PrescriptionsPage QCalendarWidget QToolButton { min-height: 28px; border: 0; padding: 0 8px; color: #273244; background: transparent; } -#PrescriptionsPage QCalendarWidget QAbstractItemView { color: #273244; background: #FFFFFF; selection-background-color: #1769E8; selection-color: #FFFFFF; outline: 0; } -#PrescriptionsPage QFrame#PrescriptionToolbar QPushButton { padding: 0 12px; font-size: 13px; } -#PrescriptionsPage QTableWidget#PrescriptionTable { - border: 0; background: #FFFFFF; alternate-background-color: #FFFFFF; - selection-background-color: #F2F7FF; selection-color: #273244; gridline-color: #E6EDF6; -} -#PrescriptionsPage QTableWidget#PrescriptionTable::item { border: 0; padding: 0; } -#PrescriptionsPage QHeaderView::section { - min-height: 0; padding: 0 12px; background: #F5F8FD; color: #5D6B80; - border: 0; border-bottom: 1px solid #DBE5F2; - font-family: "$body"; font-size: 13px; font-weight: 400; -} -#PrescriptionsPage QWidget#PrescriptionTableCellHost { border: 0; background: transparent; } -#PrescriptionsPage QPushButton[rowAction="true"] { - min-width: 28px; max-width: 28px; min-height: 28px; max-height: 28px; - padding: 0; border: 1px solid transparent; border-radius: 4px; background: transparent; -} -#PrescriptionsPage QPushButton[rowAction="true"][labeled="true"] { - min-width: 64px; max-width: 64px; color: #1769E8; font-size: 13px; padding: 0; -} -#PrescriptionsPage QPushButton[rowAction="true"]:hover { background: #EAF2FF; border-color: #B6CDEE; } -#PrescriptionsPage QPushButton[rowAction="true"]:focus { border-color: #75A5F0; } -#PrescriptionsPage QPushButton[rowAction="true"][danger="true"]:hover { background: #FFF0F2; border-color: #EAC8D0; } -#PrescriptionsPage QPushButton[rowAction="true"]:disabled, -#PrescriptionsPage QPushButton[rowAction="true"][labeled="true"]:disabled { - background: transparent; border-color: transparent; color: #A4ADBA; -} -#PrescriptionsPage QWidget#InfiniteList { background: #FFFFFF; border-top: 1px solid #E6EDF6; } -#PrescriptionsPage QLabel#EmptyStateGlyph { font-size: 24px; color: #1769E8; background: #F2F7FF; border: 1px solid #DBE5F2; border-radius: 22px; } -#PrescriptionsPage QWidget#EmptyState QLabel[role="muted"] { min-width: 300px; } -#PrescriptionsPage QScrollBar:vertical { background: #F4F7FC; width: 7px; margin: 0; } -#PrescriptionsPage QScrollBar:horizontal { background: #F4F7FC; height: 7px; margin: 0; } -#PrescriptionsPage QScrollBar::handle { background: #C8D5E6; border-radius: 3px; min-width: 24px; min-height: 24px; } -#PrescriptionsPage QScrollBar::add-line, #PrescriptionsPage QScrollBar::sub-line { width: 0; height: 0; } -#PrescriptionsPage QScrollBar::add-page, #PrescriptionsPage QScrollBar::sub-page { background: transparent; } -""" +"""Scoped surfaces and real fonts for the approved issued-prescription page.""" + +from string import Template + +from .design_system import clinical_stylesheet +from .reception_style import body_family, heading_family + + +def prescriptions_stylesheet() -> str: + return clinical_stylesheet(Template(_PRESCRIPTIONS).safe_substitute(body=body_family(), heading=heading_family())) + + +_PRESCRIPTIONS = """ +#PrescriptionsPage { background: $ds_canvas; color: $ds_text; } +#PrescriptionWorkspaceContent, #PrescriptionWorkspaceScroll { background: transparent; border: 0; } +#PrescriptionsPage QLabel, #PrescriptionsPage QPushButton, #PrescriptionsPage QLineEdit, +#PrescriptionsPage QComboBox, #PrescriptionsPage QDateTimeEdit, #PrescriptionsPage QTableWidget { + font-family: "$body"; font-size: 14px; font-weight: 400; color: $ds_text; +} +#PrescriptionsPage QLabel[role="pageTitle"] { + font-family: "$heading"; font-size: 20px; font-weight: 600; color: $ds_heading; +} +#PrescriptionsPage QLabel[role="sectionTitle"] { + font-family: "$heading"; font-size: 14px; font-weight: 600; +} +#PrescriptionsPage QLabel[role="muted"], #PrescriptionsPage QLabel#PrescriptionCountBadge { + color: $ds_muted; font-size: 13px; background: transparent; border: 0; padding: 0; +} +#PrescriptionsPage QFrame#PrescriptionFilterBar, #PrescriptionsPage QFrame#PrescriptionTableCard { + background: $ds_surface; border: 1px solid $ds_line; border-radius: $ds_radius_panel; +} +#PrescriptionsPage QFrame#PrescriptionToolbar { background: transparent; border: 0; } +#PrescriptionsPage QPushButton { + min-height: 38px; max-height: 38px; padding: 0 16px; border-radius: $ds_radius_control; + border: 1px solid transparent; background: $ds_surface_alt; color: $ds_text; +} +#PrescriptionsPage QPushButton:hover { background: $ds_surface_alt; border-color: $ds_line_strong; color: $ds_accent; } +#PrescriptionsPage QPushButton:pressed { background: $ds_accent_soft; } +#PrescriptionsPage QPushButton:focus { border-color: $ds_focus; } +#PrescriptionsPage QPushButton#PrescriptionAddButton, #PrescriptionsPage QPushButton#PrescriptionQueryButton { + background: $ds_accent; color: $ds_surface; border-color: $ds_accent; +} +#PrescriptionsPage QPushButton#PrescriptionAddButton:hover, #PrescriptionsPage QPushButton#PrescriptionQueryButton:hover { + background: $ds_accent_hover; border-color: $ds_accent_hover; +} +#PrescriptionsPage QPushButton#PrescriptionAddButton:pressed, #PrescriptionsPage QPushButton#PrescriptionQueryButton:pressed { + background: $ds_accent_pressed; border-color: $ds_accent_pressed; +} +#PrescriptionsPage QPushButton#PrescriptionAddButton:focus, +#PrescriptionsPage QPushButton#PrescriptionQueryButton:focus { border-color: $ds_focus; } +#PrescriptionsPage QPushButton[variant="danger"] { color: $ds_danger; background: $ds_danger_soft; border-color: transparent; } +#PrescriptionsPage QPushButton[variant="danger"]:hover { border-color: $ds_danger; } +#PrescriptionsPage QPushButton[variant="danger"]:focus { border-color: $ds_focus; } +#PrescriptionsPage QPushButton:disabled, #PrescriptionsPage QPushButton[variant="danger"]:disabled, +#PrescriptionsPage QPushButton#PrescriptionAddButton:disabled, +#PrescriptionsPage QPushButton#PrescriptionQueryButton:disabled { + color: $ds_disabled; background: $ds_disabled_surface; border-color: $ds_line; +} +#PrescriptionsPage QLineEdit, #PrescriptionsPage QComboBox, #PrescriptionsPage QDateTimeEdit { + min-height: 38px; max-height: 38px; padding: 0 12px; border: 1px solid $ds_line; + border-radius: $ds_radius_control; background: $ds_surface; color: $ds_text; + selection-background-color: $ds_accent_soft; selection-color: $ds_text; +} +#PrescriptionsPage QLineEdit:focus, #PrescriptionsPage QComboBox:focus, #PrescriptionsPage QDateTimeEdit:focus { border-color: $ds_focus; } +#PrescriptionsPage QLineEdit QToolButton { min-width: 0; min-height: 0; border: 0; background: transparent; padding: 0; } +#PrescriptionsPage QComboBox, #PrescriptionsPage QDateTimeEdit { padding-right: 30px; font-size: 13px; } +#PrescriptionsPage QComboBox::drop-down, #PrescriptionsPage QDateTimeEdit::drop-down { width: 28px; border: 0; background: transparent; } +#PrescriptionsPage QComboBox::down-arrow, #PrescriptionsPage QDateTimeEdit::down-arrow { image: none; width: 0; height: 0; } +#PrescriptionsPage QDateTimeEdit:disabled { color: $ds_disabled; background: $ds_disabled_surface; border-color: $ds_line; } +#PrescriptionsPage QPushButton#PrescriptionDoctorButton { text-align: left; padding-right: 30px; font-size: 13px; } +#PrescriptionsPage QComboBox QAbstractItemView { + font-family: "$body"; font-size: 13px; color: $ds_text; background: $ds_surface; + border: 1px solid $ds_line; outline: 0; selection-background-color: $ds_accent_soft; selection-color: $ds_accent; +} +#PrescriptionsPage QComboBox QAbstractItemView::item { min-height: 30px; padding: 3px 10px; } +#PrescriptionsPage QCalendarWidget { font-family: "$body"; font-size: 13px; background: $ds_surface; color: $ds_text; } +#PrescriptionsPage QCalendarWidget QWidget#qt_calendar_navigationbar { background: $ds_surface_alt; } +#PrescriptionsPage QCalendarWidget QToolButton { min-height: 28px; border: 0; padding: 0 8px; color: $ds_text; background: transparent; } +#PrescriptionsPage QCalendarWidget QAbstractItemView { color: $ds_text; background: $ds_surface; selection-background-color: $ds_accent; selection-color: $ds_surface; outline: 0; } +#PrescriptionsPage QFrame#PrescriptionToolbar QPushButton { padding: 0 12px; font-size: 13px; } +#PrescriptionsPage QTableWidget#PrescriptionTable { + border: 0; background: $ds_surface; alternate-background-color: $ds_surface; + selection-background-color: $ds_accent_soft; selection-color: $ds_text; gridline-color: $ds_line; +} +#PrescriptionsPage QTableWidget#PrescriptionTable::item { border: 0; padding: 0; } +#PrescriptionsPage QHeaderView::section { + min-height: 0; padding: 0 12px; background: $ds_surface_alt; color: $ds_muted; + border: 0; border-bottom: 1px solid $ds_line; + font-family: "$body"; font-size: 13px; font-weight: 400; +} +#PrescriptionsPage QWidget#PrescriptionTableCellHost { border: 0; background: transparent; } +#PrescriptionsPage QPushButton[rowAction="true"] { + min-width: 28px; max-width: 28px; min-height: 28px; max-height: 28px; + padding: 0; border: 1px solid transparent; border-radius: $ds_radius_small; background: transparent; +} +#PrescriptionsPage QPushButton[rowAction="true"][labeled="true"] { + min-width: 64px; max-width: 64px; color: $ds_accent; font-size: 13px; padding: 0; +} +#PrescriptionsPage QPushButton[rowAction="true"]:hover { background: $ds_accent_soft; border-color: $ds_line_strong; } +#PrescriptionsPage QPushButton[rowAction="true"]:focus { border-color: $ds_focus; } +#PrescriptionsPage QPushButton[rowAction="true"][danger="true"]:hover { background: $ds_danger_soft; border-color: $ds_danger_soft; } +#PrescriptionsPage QPushButton[rowAction="true"][danger="true"]:focus { border-color: $ds_focus; } +#PrescriptionsPage QPushButton[rowAction="true"]:disabled, +#PrescriptionsPage QPushButton[rowAction="true"][labeled="true"]:disabled { + background: transparent; border-color: transparent; color: $ds_disabled; +} +#PrescriptionsPage QWidget#InfiniteList { background: $ds_surface; border-top: 1px solid $ds_line; } +#PrescriptionsPage QLabel#EmptyStateGlyph { font-size: 24px; color: $ds_accent; background: $ds_surface_alt; border: 1px solid $ds_line; border-radius: $ds_radius_panel; } +#PrescriptionsPage QWidget#EmptyState QLabel[role="muted"] { min-width: 300px; } +#PrescriptionsPage QScrollBar:vertical { background: $ds_canvas; width: 7px; margin: 0; } +#PrescriptionsPage QScrollBar:horizontal { background: $ds_canvas; height: 7px; margin: 0; } +#PrescriptionsPage QScrollBar::handle { background: $ds_line_strong; border-radius: 3px; min-width: 24px; min-height: 24px; } +#PrescriptionsPage QScrollBar::add-line, #PrescriptionsPage QScrollBar::sub-line { width: 0; height: 0; } +#PrescriptionsPage QScrollBar::add-page, #PrescriptionsPage QScrollBar::sub-page { background: transparent; } +""" diff --git a/app/src/doctor_workstation/ui/reception_style.py b/app/src/doctor_workstation/ui/reception_style.py index 23524d058..c19e1b737 100644 --- a/app/src/doctor_workstation/ui/reception_style.py +++ b/app/src/doctor_workstation/ui/reception_style.py @@ -4,23 +4,24 @@ from __future__ import annotations from PySide6.QtWidgets import QApplication +from .design_system import PALETTE from .theme import _register_preferred_cjk_fonts TECH_BLUE = { - "accent": "#1769E8", - "accent_hover": "#155BCC", - "accent_pressed": "#124EA9", - "selection": "#EAF2FF", - "selected_text": "#1555B6", - "canvas": "#F3F7FD", - "sidebar": "#EDF4FF", - "surface": "#FFFFFF", - "raised": "#F7FAFE", - "line": "#DBE5F2", - "text": "#273244", - "heading": "#202C3F", - "muted": "#5D6B80", - "focus": "#75A5F0", + "accent": PALETTE["accent"], + "accent_hover": PALETTE["accent_hover"], + "accent_pressed": PALETTE["accent_pressed"], + "selection": PALETTE["accent_soft"], + "selected_text": PALETTE["accent_hover"], + "canvas": PALETTE["canvas"], + "sidebar": PALETTE["sidebar"], + "surface": PALETTE["surface"], + "raised": PALETTE["surface_alt"], + "line": PALETTE["line"], + "text": PALETTE["text"], + "heading": PALETTE["heading"], + "muted": PALETTE["muted"], + "focus": PALETTE["focus"], } diff --git a/app/src/doctor_workstation/ui/reception_workspace.py b/app/src/doctor_workstation/ui/reception_workspace.py index 0cb853d7f..6357fd1d3 100644 --- a/app/src/doctor_workstation/ui/reception_workspace.py +++ b/app/src/doctor_workstation/ui/reception_workspace.py @@ -170,8 +170,8 @@ QWidget#ReceptionPage QStackedWidget#ReceptionNarrowWorkspace { } QWidget#ReceptionPage QFrame#ReceptionQueuePanel { background-color: #FFFFFF; - border: 1px solid #E5ECF6; - border-radius: 8px; + border: 1px solid #EDF0F5; + border-radius: 16px; } QWidget#ReceptionPage QLabel#ReceptionQueueTitle { font-size: 18px; @@ -200,8 +200,8 @@ QWidget#ReceptionPage QFrame#ReceptionHero, QWidget#ReceptionPage QFrame#ReceptionClinicalCard { min-height: 0; background-color: #FFFFFF; - border: 1px solid #E5ECF6; - border-radius: 8px; + border: 1px solid #EDF0F5; + border-radius: 16px; } QWidget#ReceptionPage QLabel#ReceptionPatientName { font-size: 20px; @@ -223,8 +223,8 @@ QWidget#ReceptionPage QTabBar#ReceptionWorkspaceTabs { background-color: #FFFFFF; border: 0; border-bottom: 1px solid #E5ECF6; - border-top-left-radius: 8px; - border-top-right-radius: 8px; + border-top-left-radius: 16px; + border-top-right-radius: 16px; } QWidget#ReceptionPage QTabBar#ReceptionDetailTabs::tab, QWidget#ReceptionPage QTabBar#ReceptionWorkspaceTabs::tab { @@ -295,8 +295,8 @@ QWidget#ReceptionPage QFrame#ReceptionPatientSummaryCard, QWidget#ReceptionPage QFrame#ReceptionVitalsCard, QWidget#ReceptionPage QFrame#ReceptionLabsCard { background-color: #FFFFFF; - border: 1px solid #E5ECF6; - border-radius: 8px; + border: 1px solid #EDF0F5; + border-radius: 16px; } QWidget#ReceptionPage QLabel#ReceptionPatientSummaryValue { color: #24334A; @@ -367,8 +367,8 @@ QWidget#ReceptionPage QLabel[receptionMetricState="true"][alert="true"][warning= QWidget#ReceptionPage QFrame#ReceptionAiAnalysisCard, QWidget#ReceptionPage QFrame#ReceptionAiAssistantCard { background-color: #FFFFFF; - border: 1px solid #DCE5F0; - border-radius: 8px; + border: 1px solid $ds_line; + border-radius: $ds_radius_panel; } QWidget#ReceptionPage QLabel#ReceptionAiTitle, QWidget#ReceptionPage QPushButton#ReceptionAiTitle { @@ -405,4 +405,37 @@ QWidget#ReceptionPage QScrollArea#ReceptionInsightsScroll QScrollBar::add-line:v QWidget#ReceptionPage QScrollArea#ReceptionInsightsScroll QScrollBar::sub-line:vertical { height: 0; } +QWidget#ReceptionPage QLineEdit#ReceptionQueueSearch, +QWidget#ReceptionPage QPushButton#ReceptionDateButton, +QWidget#ReceptionPage QPushButton#ReceptionQueueFilterToggle, +QWidget#ReceptionPage QPushButton#ReceptionVideoButton, +QWidget#ReceptionPage QPushButton#ReceptionNotifyButton, +QWidget#ReceptionPage QPushButton#ReceptionHistoryButton, +QWidget#ReceptionPage QPushButton#ReceptionImButton, +QWidget#ReceptionPage QPushButton#ReceptionMoreButton, +QWidget#ReceptionPage QPushButton#ReceptionCompleteButton, +QWidget#ReceptionPage QPushButton[receptionAiPrompt="true"] { + border-radius: $ds_radius_control; +} +QWidget#ReceptionPage QPushButton:focus, +QWidget#ReceptionPage QLineEdit:focus, +QWidget#ReceptionPage QComboBox:focus, +QWidget#ReceptionPage QTextEdit:focus { + border-color: $ds_focus; +} +QWidget#ReceptionPage QPushButton#ReceptionVideoButton:pressed { + color: $ds_surface; + background-color: $ds_accent_pressed; + border-color: $ds_accent_pressed; +} +QWidget#ReceptionPage QLabel[receptionMetricState="true"] { + border-radius: $ds_radius_small; +} +QWidget#ReceptionPage QFrame#ReceptionLabCell, +QWidget#ReceptionPage QWidget#ReceptionCaseField { + border-bottom-color: $ds_line; +} +QWidget#ReceptionPage QLabel#ReceptionPatientSummaryValue[missing="true"] { + color: $ds_muted; +} """ diff --git a/app/src/doctor_workstation/ui/shell.py b/app/src/doctor_workstation/ui/shell.py index 5abad6e8a..628f6573e 100644 --- a/app/src/doctor_workstation/ui/shell.py +++ b/app/src/doctor_workstation/ui/shell.py @@ -59,6 +59,7 @@ from .chat_notifications import ( ChatNotification, ChatNotificationCenter, ) +from .design_system import PALETTE, clinical_stylesheet from .dialogs.ai_consult import can_open_ai_consult from .dialogs.ai_consult_picker import select_and_present_ai_consult from .dialogs.diagnosis import DiagnosisDialog @@ -72,7 +73,7 @@ from .pages import ( ReceptionPage, ) from .reception_style import TECH_BLUE, body_family, heading_family, number_family -from .theme import COLORS, TYPE, crisp_pixmap +from .theme import COLORS, METRICS, TYPE, crisp_pixmap from .widgets import ( EmptyState, StatusBadge, @@ -93,8 +94,8 @@ _SHELL_DESIGN_SIZE = QSize(1710, 920) _SHELL_MINIMUM_SIZE = QSize(1024, 640) _RECEPTION_SIDEBAR_WIDTH = 208 _RECEPTION_TOPBAR_HEIGHT = 76 -_RECEPTION_SIDEBAR_COLOR = "#F3F7FD" -_RECEPTION_CHROME_LINE = "#E7EDF7" +_RECEPTION_SIDEBAR_COLOR = PALETTE["sidebar"] +_RECEPTION_CHROME_LINE = PALETTE["line"] # Approved pages share one chrome state, so navigation among them keeps it intact. _TECH_BLUE_PAGES = frozenset({"appointments", "consultations", "patients", "prescriptions", "prescription_library", "reception"}) @@ -1005,7 +1006,7 @@ class ShellWindow(QMainWindow): chrome_widgets.extend(self.topbar.findChildren(_PaintedIconButton)) chrome_widgets.append(self.tabs_menu_button) self._legacy_chrome_styles = { - widget: widget.styleSheet() for widget in chrome_widgets + widget: clinical_stylesheet(widget.styleSheet()) for widget in chrome_widgets } self._register_pages() self.search_shortcut = QShortcut(QKeySequence("Ctrl+K"), self) @@ -1268,7 +1269,7 @@ class ShellWindow(QMainWindow): color: #606163; background-color: #FFFFFF; border: 1px solid #EDEDEE; - border-radius: 999px; + border-radius: 10px; padding: 4px 10px; font-size: 13px; font-weight: 500; @@ -1693,7 +1694,7 @@ class ShellWindow(QMainWindow): font-family: "{body_family()}"; font-weight: 400; min-height: 44px; max-height: 44px; border: 0; border-left: 5px solid transparent; - border-radius: 6px; + border-radius: {METRICS["r_md"]}; padding: 0 16px; font-size: {TYPE['fs_body']}; color: {TECH_BLUE['text']}; }} @@ -1711,7 +1712,7 @@ class ShellWindow(QMainWindow): }} QPushButton#ShellNavButton[collapsed="true"] {{ padding: 0; }} QFrame#ShellAssistantCard {{ - background-color: {TECH_BLUE['surface']}; border-radius: 8px; + background-color: {TECH_BLUE['surface']}; border-radius: {METRICS["r_lg"]}; border: 1px solid {_RECEPTION_CHROME_LINE}; }} QLabel#ShellAssistantName {{ @@ -1723,7 +1724,7 @@ class ShellWindow(QMainWindow): QPushButton#ShellAssistantButton, QPushButton#ShellSettingsButton {{ font-family: "{body_family()}"; font-weight: 400; font-size: {TYPE['fs_body']}; }} - QPushButton#ShellAssistantButton {{ border-radius: 6px; }} + QPushButton#ShellAssistantButton {{ border-radius: {METRICS["r_md"]}; }} QPushButton#ShellSettingsButton {{ min-height: 50px; max-height: 50px; text-align: left; padding: 0 32px; @@ -1738,7 +1739,7 @@ class ShellWindow(QMainWindow): border-radius: 0; border-bottom: 1px solid {_RECEPTION_CHROME_LINE}; }} - QFrame#ShellGlobalSearch {{ border: 1px solid {_RECEPTION_CHROME_LINE}; border-radius: 5px; }} + QFrame#ShellGlobalSearch {{ background-color: {PALETTE["surface_alt"]}; border: 1px solid transparent; border-radius: {METRICS["r_md"]}; }} QFrame#ShellUserSeparator {{ background: {_RECEPTION_CHROME_LINE}; border: 0; }} QLabel#ShellShortcutHint {{ font-family: "{number_family()}"; font-size: {TYPE['fs_small']}; @@ -1767,7 +1768,7 @@ class ShellWindow(QMainWindow): if isinstance(widget, _PaintedIconButton): side = 50 if widget in (self.refresh_button, self.notification_button, self.settings_button) else 34 stylesheet += f"QToolButton#ShellPaintedIconButton {{ min-width: {side - 2}px; max-width: {side - 2}px; min-height: {side - 2}px; max-height: {side - 2}px; }}" - widget.setStyleSheet(stylesheet) + widget.setStyleSheet(clinical_stylesheet(stylesheet)) self._set_reception_geometry(active) for widget in ( diff --git a/app/src/doctor_workstation/ui/theme.py b/app/src/doctor_workstation/ui/theme.py index c8b4e9d41..e62654238 100644 --- a/app/src/doctor_workstation/ui/theme.py +++ b/app/src/doctor_workstation/ui/theme.py @@ -41,46 +41,46 @@ from doctor_workstation.resources import resource_path # ``motion`` deliberately imports nothing from this module, so this stays a # one-way dependency: tokens here, animation there. from . import motion +from .design_system import PALETTE, RADII, SPACING, clinical_stylesheet -# Neutral reading colors follow the installed Codex light chrome defaults. +# Shared reading colors keep native pages and dialog chrome consistent. # Brand accents are independent of reading ink; use opaque text for stable contrast. # The legacy teal/ink aliases remain for existing callers. COLORS = { - "canvas": "#F4F6FA", - "canvas_mid": "#FFFFFF", - "canvas_glow": "#EEF1FA", - "surface": "#FFFFFF", - "surface_alt": "#F7F7F7", - "raised": "#F7F7F7", - "glass": "#FFFFFF", - "glass_alt": "#F7F7F7", - "line": "#EDEDEE", - "line_soft": "#E4E4E5", - "text": "#1A1C1F", - "text_soft": "#606163", - "muted": "#6A6B6D", - "disabled_surface": "#F2F2F2", - "disabled_text": "#8E8F90", - "indigo": "#4F63D9", - "indigo_hover": "#4156C4", - "indigo_pressed": "#354BB4", - "indigo_pale": "#EEF1FA", - "focus": "#8B9AD9", - "selection": "#EEF1FA", - "success": "#287B65", - "success_pale": "#EEF7F3", - "warning": "#A9691D", - "warning_pale": "#FCF5E9", - "danger": "#BE4B58", - "danger_pale": "#FCF0F2", - "info": "#4F63D9", - "info_pale": "#EEF1FA", - # Backward-compatible names used by older UI code and integrations. - "ink": "#1A1C1F", - "ink_soft": "#606163", - "teal": "#4F63D9", - "teal_dark": "#354BB4", - "teal_pale": "#EEF1FA", + "canvas": PALETTE["canvas"], + "canvas_mid": PALETTE["surface"], + "canvas_glow": PALETTE["accent_soft"], + "surface": PALETTE["surface"], + "surface_alt": PALETTE["surface_alt"], + "raised": PALETTE["surface_alt"], + "glass": PALETTE["surface"], + "glass_alt": PALETTE["surface_alt"], + "line": PALETTE["line"], + "line_soft": PALETTE["line_strong"], + "text": PALETTE["heading"], + "text_soft": PALETTE["text"], + "muted": PALETTE["muted"], + "disabled_surface": PALETTE["disabled_surface"], + "disabled_text": PALETTE["disabled"], + "indigo": PALETTE["accent"], + "indigo_hover": PALETTE["accent_hover"], + "indigo_pressed": PALETTE["accent_pressed"], + "indigo_pale": PALETTE["accent_soft"], + "focus": PALETTE["focus"], + "selection": PALETTE["accent_soft"], + "success": PALETTE["success"], + "success_pale": PALETTE["success_soft"], + "warning": PALETTE["warning"], + "warning_pale": PALETTE["warning_soft"], + "danger": PALETTE["danger"], + "danger_pale": PALETTE["danger_soft"], + "info": PALETTE["accent"], + "info_pale": PALETTE["accent_soft"], + "ink": PALETTE["heading"], + "ink_soft": PALETTE["text"], + "teal": PALETTE["accent"], + "teal_dark": PALETTE["accent_pressed"], + "teal_pale": PALETTE["accent_soft"], } @@ -122,11 +122,11 @@ METRICS = { # ``outer - gap``. Where the gap is bigger than the outer radius the inner # element is far enough from the corner that its own radius is free. "r_xs": "4px", # chips, badges, tiny status pills - "r_sm": "6px", # inline row actions, tags - "r_md": "8px", # buttons, inputs, combo boxes - "r_lg": "12px", # cards, filter bars, panels - "r_xl": "16px", # the shell surfaces the cards sit on - "pad_control": "12px", # horizontal padding inside default controls + "r_sm": f"{RADII['small']}px", # inline row actions, tags + "r_md": f"{RADII['control']}px", # buttons, inputs, combo boxes + "r_lg": f"{RADII['panel']}px", # cards, filter bars, panels + "r_xl": f"{RADII['window']}px", # the shell surfaces the cards sit on + "pad_control": f"{SPACING['control']}px", # horizontal padding inside default controls "pad_compact": "9px", } @@ -176,7 +176,7 @@ QDialog[businessDialog="true"] QFrame#DialogSurface, QDialog[businessDialog="true"] QFrame[dialogSurface="true"] { background-color: $surface; border: 1px solid $line; - border-radius: 14px; + border-radius: $r_lg; } QDialog[businessDialog="true"] QFrame#DialogHeader, QDialog[businessDialog="true"] QFrame[dialogRole="header"] { @@ -275,18 +275,18 @@ QFrame#Card, QFrame#Panel, QFrame#FilterBar, QFrame#DetailPanel, QFrame[glass="true"] { background-color: $glass; border: 1px solid $line; - border-radius: 12px; + border-radius: $r_lg; } QFrame#FilterBar { background-color: $surface; } QFrame#SubtleCard { background-color: $glass_alt; border: 1px solid $line; - border-radius: 12px; + border-radius: $r_lg; } QFrame#MetricCard { background-color: $surface; border: 1px solid $line; - border-radius: 11px; + border-radius: $r_md; } QFrame#MetricCard:hover { border-color: $line_soft; background-color: $surface_alt; } QFrame#MetricCard QLabel[role="metricTitle"] { color: $muted; font-size: $fs_caption; } @@ -297,7 +297,7 @@ QFrame#ReceptionAiCard { min-height: 132px; background-color: #FFFFFF; border: 1px solid $line_soft; - border-radius: 13px; + border-radius: $r_lg; } QLabel#ReceptionAiTitle { color: $indigo_pressed; @@ -313,7 +313,7 @@ QLabel#MetricGlyph { color: $indigo; background-color: $indigo_pale; border: 1px solid $line_soft; - border-radius: 11px; + border-radius: $r_md; font-size: $fs_section; font-weight: $fw_heading; } @@ -329,7 +329,7 @@ QGroupBox { margin-top: 12px; padding-top: 12px; border: 1px solid $line; - border-radius: 12px; + border-radius: $r_lg; background-color: $glass; font-weight: $fw_control; } @@ -351,7 +351,7 @@ QPushButton { } QPushButton:hover { background-color: $raised; - border-color: $indigo_hover; + border-color: $line_soft; } QPushButton:pressed { background-color: $indigo_pale; @@ -401,7 +401,7 @@ QPushButton[variant="primary"]:disabled { QPushButton[variant="secondary"] { color: $indigo_hover; background-color: $indigo_pale; - border-color: $line_soft; + border-color: $indigo_pale; } QPushButton[variant="secondary"]:hover { color: $indigo_pressed; @@ -462,7 +462,7 @@ QToolButton#RowActionsMore::menu-indicator { width: 0; height: 0; image: none; } QFrame#NoteAttachmentTile { background-color: $surface; border: 1px solid $line; - border-radius: 10px; + border-radius: $r_md; } QPushButton#NoteAttachmentPreview { min-height: 132px; @@ -470,7 +470,7 @@ QPushButton#NoteAttachmentPreview { color: $muted; background-color: $surface_alt; border: 1px solid $line; - border-radius: 8px; + border-radius: $r_md; font-weight: $fw_control; } QPushButton#NoteAttachmentPreview:hover { @@ -558,7 +558,7 @@ QPushButton[variant="chip"] { color: $text_soft; background-color: $surface_alt; border-color: $line; - border-radius: 8px; + border-radius: $r_md; } QPushButton[variant="chip"]:hover { color: $text; @@ -653,7 +653,7 @@ QComboBox QAbstractItemView { background-color: $raised; alternate-background-color: $surface_alt; border: 1px solid $line; - border-radius: 10px; + border-radius: $r_md; padding: 5px; outline: 0; selection-background-color: $indigo_pressed; @@ -692,7 +692,7 @@ QAbstractItemView, QTableWidget, QTableView, QListWidget, QListView, QTreeWidget background-color: $surface; alternate-background-color: $surface_alt; border: 0; - border-radius: 12px; + border-radius: $r_lg; gridline-color: $line; selection-background-color: $selection; selection-color: $text; @@ -729,17 +729,17 @@ QListWidget::item:selected, QListView::item:selected, QTreeWidget::item:selected, QTreeView::item:selected { background-color: $indigo_pale; color: $indigo_pressed; - border-radius: 8px; + border-radius: $r_md; } QListWidget::item:hover, QListView::item:hover, QTreeWidget::item:hover, QTreeView::item:hover { background-color: $surface_alt; - border-radius: 8px; + border-radius: $r_md; } QTabWidget::pane { border: 1px solid $line; - border-radius: 12px; + border-radius: $r_lg; background-color: $glass; } QTabBar::tab { @@ -749,7 +749,7 @@ QTabBar::tab { color: $muted; background-color: transparent; border: 1px solid transparent; - border-radius: 9px; + border-radius: $r_md; font-weight: $fw_control; } QTabBar::tab:hover { color: $text; background-color: $surface_alt; } @@ -792,7 +792,7 @@ QMenu { color: $text; background-color: $raised; border: 1px solid $line_soft; - border-radius: 10px; + border-radius: $r_md; padding: 6px; } QMenu::item { @@ -815,7 +815,7 @@ QCalendarWidget { color: $text; background-color: $surface; border: 1px solid $line; - border-radius: 12px; + border-radius: $r_lg; } QCalendarWidget QWidget#qt_calendar_navigationbar { background-color: $raised; @@ -914,7 +914,7 @@ QWidget#Pager QLabel#PagerActive { color: #FFFFFF; background-color: $indigo; border: 1px solid $indigo; - border-radius: 8px; + border-radius: $r_md; font-size: $fs_caption; font-weight: $fw_control; } @@ -937,7 +937,7 @@ QLabel#EmptyStateGlyph { QFrame#MessageBanner { border: 1px solid $line; - border-radius: 10px; + border-radius: $r_md; color: $text_soft; } QFrame#MessageBanner QLabel { background-color: transparent; } @@ -955,7 +955,7 @@ QLabel#Toast { color: $text; background-color: $raised; border: 1px solid $line_soft; - border-radius: 11px; + border-radius: $r_md; padding: 11px 16px; font-weight: $fw_control; } @@ -995,13 +995,9 @@ QLabel#UserAvatar { font-weight: $fw_heading; } QWidget#LoginBrandPanel { - background-color: qlineargradient( - x1: 0, y1: 0, x2: 1, y2: 1, - stop: 0 $surface, - stop: 1 $canvas_glow - ); + background-color: $surface_alt; border: 1px solid $line_soft; - border-radius: 22px; + border-radius: $r_lg; } QFrame#LoginCard { background-color: $glass; @@ -1043,6 +1039,7 @@ QToolTip { } """ ).substitute(_QSS_TOKENS) +GLOBAL_QSS = clinical_stylesheet(GLOBAL_QSS) #: Per-block reading rhythm, in device pixels. ``(top, bottom, line%)``. diff --git a/app/src/doctor_workstation/ui/widgets.py b/app/src/doctor_workstation/ui/widgets.py index 60efcbfca..2c0b43167 100644 --- a/app/src/doctor_workstation/ui/widgets.py +++ b/app/src/doctor_workstation/ui/widgets.py @@ -44,6 +44,7 @@ from doctor_workstation.core.errors import ( ) from . import icons, motion +from .design_system import PALETTE AuthenticationExpiredHandler = Callable[[AuthenticationExpiredError], bool] _AUTHENTICATION_EXPIRED_HANDLER: AuthenticationExpiredHandler | None = None @@ -798,7 +799,7 @@ class _BusyTrack(QWidget): chunk_width = max(36, int(rect.width() * 0.32)) span = rect.width() + chunk_width x = int(self._phase * span) - chunk_width - painter.setBrush(QColor("#4F63D9")) + painter.setBrush(QColor(PALETTE["accent"])) painter.drawRoundedRect(x, 0, chunk_width, rect.height(), 3, 3) diff --git a/app/src/doctor_workstation/video/im_ai.py b/app/src/doctor_workstation/video/im_ai.py new file mode 100644 index 000000000..a184cb34a --- /dev/null +++ b/app/src/doctor_workstation/video/im_ai.py @@ -0,0 +1,387 @@ +"""Bounded, Qt-independent AI requests for one authenticated IM window. + +Only server-archived clinical context is submitted. This module never sends IM +messages and never shares the ordered call/recording lifecycle worker. +""" + +from __future__ import annotations + +import re +from collections import deque +from collections.abc import Callable, Mapping +from dataclasses import dataclass, field +from threading import BoundedSemaphore, Event, RLock, Thread +from time import monotonic +from typing import Any +from uuid import UUID, uuid4 + +MAX_RESULT_CHARS = 65_536 +MAX_SYNC_STEPS = 24 +SYNC_TIMEOUT_SECONDS = 45.0 +_WORKER_SLOTS = BoundedSemaphore(4) +_CANCEL_SLOTS = BoundedSemaphore(4) +_ACTIONS = frozenset({"summary", "followup", "reply"}) + + +def _integer(value: Any, *, minimum: int) -> int | None: + if isinstance(value, bool) or not isinstance(value, (int, str)): + return None + if isinstance(value, str) and re.fullmatch(r"0|[1-9][0-9]{0,18}", value) is None: + return None + number = int(value) + return number if minimum <= number < 2**63 else None + + +def _request_uuid(value: Any) -> bool: + if not isinstance(value, str) or len(value) != 36: + return False + try: + return str(UUID(value)) == value.lower() + except (ValueError, AttributeError): + return False + + +def task_prompt(action: str, doctor_account: str) -> tuple[str, str]: + """Keep instructions separate from clinical source text and under API limits.""" + + if action not in _ACTIONS or not re.fullmatch(r"doctor_[1-9][0-9]{0,18}", doctor_account): + raise ValueError("AI 操作或当前医生账号无效") + shared = ( + f"这是 IM 问诊辅助,本次医生 IM 账号为 {doctor_account}。" + "优先依据该医生与本患者最近已归档对话,结合服务端授权病历;" + "其他医生及历史记录仅作背景,不能当成本次已确认事实。" + "若未找到本次对话请明确说明,不猜测最新诉求。" + "区分已知、明确否认与未知,保留日期及不确定性;" + "不补问脉象,不编造事实、不自动确诊、不新增或更改药物剂量。" + ) + instructions = { + "summary": "请用简短条目总结本次病情、病程、现用治疗与待核实事项,供医生交接复核。", + "followup": ( + "请建议最多5条优先追问,直接给出可向患者询问的自然短句," + "每条可附简短目的;避免重复已回答的问题,不做通用问卷。" + ), + "reply": ( + "请起草一段医生可审阅后发给患者的简短自然回复,围绕该对话最近的患者问题。" + "不冒称已检查、已预约或已开处方,不承诺疗效,不让患者自行停换药。" + "只给回复草稿,不写分析过程;任何缺失资料通过必要的问题核实。" + ), + } + prompt = shared + instructions[action] + "此内容须由医生复核,不能自动发送。" + if len(prompt) > 500: + raise ValueError("AI 提示词超过接口长度限制") + return ("summary" if action == "summary" else "custom"), prompt + + +def _warnings(value: Any) -> list[str]: + if not isinstance(value, (list, tuple)): + return [] + warnings = [] + for row in value[:20]: + if isinstance(row, str): + text = row + elif isinstance(row, Mapping): + text = row.get("message") or row.get("label") + if not text and row.get("code"): + text = ( + "请复核回答中的脉象判断;本流程不采集脉象。" + if row["code"] == "PULSE_EXCLUDED_FROM_ASSESSMENT" + else "请对照原始记录复核,回答中的事实、否认或未知状态可能不一致。" + ) + else: + continue + if isinstance(text, str) and text.strip(): + rendered = text.strip()[:400] + if rendered not in warnings: + warnings.append(rendered) + return warnings + + +class _RequestError(Exception): + """A deliberately safe, user-facing failure message.""" + + +@dataclass +class _Job: + identity: dict[str, Any] + action: str + cancelled: Event = field(default_factory=Event) + completed: bool = False + succeeded: bool = False + stream_started: bool = False + cancel_sent: bool = False + + +class ImAiController: + """One live request, a coalesced mailbox, and bounded daemon workers. + + Qt polls ``take_result`` every 60 ms. Worker threads only mutate plain data; + they never touch a QObject. A cancelled worker must retire before a retry + starts, so rapid clicks cannot create an unbounded collection of requests. + """ + + def __init__( + self, + repository: Any, + *, + diagnosis_id: Any, + appointment_id: Any, + doctor_account: str, + enabled: bool = False, + clock: Callable[[], float] = monotonic, + max_sync_steps: int = MAX_SYNC_STEPS, + sync_timeout: float = SYNC_TIMEOUT_SECONDS, + ) -> None: + self.repository = repository + self.diagnosis_id = _integer(diagnosis_id, minimum=1) + self.appointment_id = _integer(appointment_id, minimum=0) + self.doctor_account = str(doctor_account) + self.enabled = ( + enabled is True + and repository is not None + and self.diagnosis_id is not None + and self.appointment_id is not None + and re.fullmatch(r"doctor_[1-9][0-9]{0,18}", self.doctor_account) is not None + ) + self.session_id = str(uuid4()) + self._clock = clock + self._max_sync_steps = max(1, min(MAX_SYNC_STEPS, max_sync_steps)) + self._sync_timeout = max(0.01, min(SYNC_TIMEOUT_SECONDS, sync_timeout)) + self._lock = RLock() + self._closed = False + self._current: _Job | None = None + self._running: _Job | None = None + self._worker: Thread | None = None + self._mailbox: dict[str, Any] | None = None + self._seen: deque[str] = deque(maxlen=256) + + @property + def config(self) -> dict[str, Any]: + return { + "version": 1, + "enabled": self.enabled and not self._closed, + "sessionId": self.session_id, + **({} if self.enabled else {"reason": "当前账号或问诊暂不能使用 AI 辅助。"}), + } + + def _valid_identity(self, message: Mapping[str, Any]) -> bool: + return ( + self.enabled + and not self._closed + and message.get("source") == "doctor-call" + and message.get("sessionId") == self.session_id + and _request_uuid(message.get("requestId")) + and isinstance(message.get("contextKey"), str) + and 0 < len(message["contextKey"]) <= 128 + and _integer(message.get("diagnosisId"), minimum=1) == self.diagnosis_id + and _integer(message.get("appointmentId"), minimum=0) == self.appointment_id + and isinstance(message.get("action"), str) + and message["action"] in _ACTIONS + ) + + def handle(self, message: Mapping[str, Any]) -> bool: + with self._lock: + if not self._valid_identity(message): + return False + event = message.get("event") + identity = {key: message[key] for key in ( + "sessionId", "requestId", "contextKey", "diagnosisId", "appointmentId", "action" + )} + if event == "im-ai-cancel": + if self._current is None or self._current.identity != identity: + return False + self._cancel(self._current) + return True + if event != "im-ai-request" or message["requestId"] in self._seen: + return False + self._seen.append(message["requestId"]) + job = _Job(identity, message["action"]) + if self._running is not None: + self._cancel(self._running) + self._current = job + self._publish(job, "error", message="上次请求正在结束,请稍后重试。", terminal=True) + return True + self._current = job + if not _WORKER_SLOTS.acquire(blocking=False): + self._publish(job, "error", message="AI 正在处理其他请求,请稍后重试。", terminal=True) + return True + self._running = job + self._publish(job, "loading", message="正在同步当前聊天记录…") + self._worker = Thread(target=self._run, args=(job,), name="im-ai", daemon=True) + try: + self._worker.start() + except RuntimeError: + self._running = None + _WORKER_SLOTS.release() + self._publish(job, "error", message="AI 请求暂时无法启动,请稍后重试。", terminal=True) + return True + + def _publish(self, job: _Job, status: str, *, terminal: bool = False, **fields: Any) -> None: + with self._lock: + if self._closed or self._current is not job or job.cancelled.is_set() or job.completed: + return + if terminal: + job.completed = True + job.succeeded = status == "success" + self._mailbox = {**job.identity, "status": status, **fields} + + def take_result(self) -> dict[str, Any] | None: + with self._lock: + result, self._mailbox = self._mailbox, None + return None if self._closed else result + + def _sync(self, job: _Job) -> bool: + deadline = self._clock() + self._sync_timeout + token = "" + for _ in range(self._max_sync_steps): + if job.cancelled.is_set(): + return False + if self._clock() >= deadline: + raise _RequestError("聊天同步超时,尚未生成,请稍后重试。") + result = self.repository.sync_im_chat_messages( + self.diagnosis_id, scope="current", sync_token=token + ) + if job.cancelled.is_set(): + return False + if self._clock() >= deadline: + raise _RequestError("聊天同步超时,尚未生成,请稍后重试。") + if not isinstance(result, Mapping) or result.get("errors"): + raise _RequestError("当前聊天记录未能完整同步,尚未生成,请稍后重试。") + if result.get("completed") is True: + return True + token = result.get("sync_token", "") + if not isinstance(token, str) or re.fullmatch(r"[a-f0-9]{48}", token) is None: + raise _RequestError("聊天同步进度无效,请更新客户端或稍后重试。") + raise _RequestError("聊天记录仍在同步,尚未生成,请稍后重试。") + + def _run(self, job: _Job) -> None: + try: + if not self._sync(job): + return + task, prompt = task_prompt(job.action, self.doctor_account) + with self._lock: + if job.cancelled.is_set() or self._closed: + return + job.stream_started = True + self._publish(job, "loading", message="聊天已同步,正在整理病历资料…") + if job.cancelled.is_set(): + return + text = "" + events = self.repository.stream_diagnosis_ai( + self.diagnosis_id, prompt, task=task, + request_id=job.identity["requestId"], cancelled=job.cancelled.is_set, + ) + try: + for event in events: + if job.cancelled.is_set(): + return + if not isinstance(event, Mapping): + continue + kind = event.get("event") + if kind == "delta": + delta = event.get("text", "") + if not isinstance(delta, str) or len(text) + len(delta) > MAX_RESULT_CHARS: + raise _RequestError("AI 内容超过显示上限,已停止接收,请缩小问题后重试。") + text += delta + self._publish(job, "streaming", text=text, message="正在生成,内容尚未完成。") + elif kind in {"start", "progress"}: + message = str(event.get("message") or "正在整理资料并生成…")[:240] + self._publish(job, "streaming" if text else "loading", text=text, message=message) + elif kind == "done": + result_id = event.get("diagnosis_id") + if result_id is not None and _integer(result_id, minimum=1) != self.diagnosis_id: + raise _RequestError("AI 返回的问诊上下文不匹配,结果未采用。") + answer = event.get("answer", event.get("content", text)) + if not isinstance(answer, str) or not answer.strip(): + raise _RequestError("AI 未返回完整内容,请重试。") + if len(answer) > MAX_RESULT_CHARS: + raise _RequestError("AI 内容超过显示上限,结果未采用,请缩小问题后重试。") + self._publish( + job, "success", terminal=True, text=answer, + message="已生成,请由医生复核后使用。", + modelLabel=str(event.get("model_label") or "")[:100], + warnings=_warnings(event.get("clinical_review_warnings")), + ) + return + elif kind == "error": + raise _RequestError("AI 请求未完成,请检查权限或稍后重试。") + if not job.cancelled.is_set(): + raise _RequestError("AI 连接提前结束,内容未完成,请重试。") + finally: + close = getattr(events, "close", None) + if callable(close): + close() + except Exception as error: + message = str(error) if isinstance(error, _RequestError) else ( + "AI 请求失败,请检查权限或稍后重试。" if job.stream_started + else "当前聊天同步失败,尚未生成,请检查权限或稍后重试。" + ) + self._publish(job, "error", message=message, terminal=True) + if job.stream_started and not job.cancelled.is_set() and not job.succeeded: + self._request_cancel(job) + finally: + with self._lock: + if self._running is job: + self._running = None + _WORKER_SLOTS.release() + + def _cancel(self, job: _Job) -> None: + if job.completed or job.cancelled.is_set(): + return + job.cancelled.set() + if self._current is job and not self._closed: + self._mailbox = { + **job.identity, "status": "cancelled", + "message": ("已停止本次接收,上游是否结束尚未确认。" if job.stream_started + else "已取消,尚未向 AI 提交请求。"), + } + if job.stream_started: + self._request_cancel(job) + + def _request_cancel(self, job: _Job) -> None: + with self._lock: + if job.cancel_sent: + return + job.cancel_sent = True + if not _CANCEL_SLOTS.acquire(blocking=False): + return + + def send() -> None: + try: + result = self.repository.cancel_diagnosis_ai(self.diagnosis_id, job.identity["requestId"]) + if not isinstance(result, Mapping): + return + message = "已发送取消请求,上游是否结束尚未确认。" + terminal = result.get("upstream_terminal_status") + if result.get("upstream_terminal_confirmed") is True and terminal in {"stopped", "succeeded", "failed"}: + message = "本次接收已停止,上游工作流已结束。" + elif result.get("upstream_stop_confirmed") is True: + message = "上游已接受停止请求,是否结束尚未确认。" + with self._lock: + if not self._closed and self._current is job and job.cancelled.is_set(): + self._mailbox = {**job.identity, "status": "cancelled", "message": message} + except Exception: + pass # Keep the visible unconfirmed cancellation; never expose transport details. + finally: + _CANCEL_SLOTS.release() + + try: + Thread(target=send, name="im-ai-cancel", daemon=True).start() + except RuntimeError: + _CANCEL_SLOTS.release() + + def close(self) -> None: + with self._lock: + if self._closed: + return + self._closed = True + self._mailbox = None + if self._running is not None: + self._cancel(self._running) + + def wait(self, timeout: float = 1.0) -> bool: + """Bounded diagnostic/test helper; never called by the Qt GUI.""" + + worker = self._worker + if worker is not None: + worker.join(max(0.0, min(timeout, 5.0))) + return worker is None or not worker.is_alive() diff --git a/app/src/doctor_workstation/video/launcher.py b/app/src/doctor_workstation/video/launcher.py index f4efccbe9..45051df94 100644 --- a/app/src/doctor_workstation/video/launcher.py +++ b/app/src/doctor_workstation/video/launcher.py @@ -413,6 +413,7 @@ class VideoCallLauncher: patient_name: str = "患者", patient_case: Mapping[str, Any] | None = None, on_open_diagnosis: Callable[[], None] | None = None, + can_ai_assistant: bool = False, ) -> Any: request = self.prepare( ticket, @@ -432,6 +433,7 @@ class VideoCallLauncher: patient_name=patient_name, patient_case=patient_case, on_open_diagnosis=on_open_diagnosis, + can_ai_assistant=can_ai_assistant is True, ) @@ -450,6 +452,7 @@ def launch_video_call( patient_name: str = "患者", patient_case: Mapping[str, Any] | None = None, on_open_diagnosis: Callable[[], None] | None = None, + can_ai_assistant: bool = False, ) -> Any: """Normalize a ticket and open a call with the requested backend.""" @@ -468,4 +471,5 @@ def launch_video_call( patient_name=patient_name, patient_case=patient_case, on_open_diagnosis=on_open_diagnosis, + can_ai_assistant=can_ai_assistant is True, ) diff --git a/app/src/doctor_workstation/video/window.py b/app/src/doctor_workstation/video/window.py index 1129e7447..aab06b288 100644 --- a/app/src/doctor_workstation/video/window.py +++ b/app/src/doctor_workstation/video/window.py @@ -28,6 +28,7 @@ from ..services.local_audio_queue import ( LocalAudioUploadManager, get_local_audio_upload_manager, ) +from .im_ai import ImAiController from .launcher import ( VideoCallRequest, VideoTicketError, @@ -320,6 +321,8 @@ if WEBENGINE_AVAILABLE: # pragma: no cover - GUI behavior needs an integration patient_name: str = "患者", patient_case: Mapping[str, Any] | None = None, on_open_diagnosis: Callable[[], None] | None = None, + can_ai_assistant: bool = False, + repository: Any = None, ) -> None: super().__init__() self.request = request @@ -349,6 +352,18 @@ if WEBENGINE_AVAILABLE: # pragma: no cover - GUI behavior needs an integration self._call_cycle_closed = False self._start_requested = False self._shutdown_requested = False + self._im_ai = ImAiController( + repository, + diagnosis_id=request.diagnosis_id, + appointment_id=request.appointment_id, + doctor_account=request.user_id, + enabled=can_ai_assistant is True and self.open_im, + ) + self._im_ai_timer = QTimer(self) + self._im_ai_timer.setInterval(60) + self._im_ai_timer.timeout.connect(self._flush_im_ai) + if self._im_ai.enabled: + self._im_ai_timer.start() self._screenshot_preview_size = ScreenshotPreviewSize() self._local_audio_capture: _LocalAudioCapture | None = None self._local_audio_store: LocalAudioQueueStore | None = None @@ -483,6 +498,7 @@ if WEBENGINE_AVAILABLE: # pragma: no cover - GUI behavior needs an integration "patientName": self.patient_name, "patientCase": self.patient_case, "mode": "chat" if self.open_im else "video", + "imAi": self._im_ai.config, } config_json = json.dumps(config, ensure_ascii=True, separators=(",", ":")) script = f""" @@ -524,11 +540,23 @@ if WEBENGINE_AVAILABLE: # pragma: no cover - GUI behavior needs an integration self._injected = result is not False if not self._injected: self._request_companion_shutdown("bridge-api-missing") + return + if not self._im_ai_context_is_trusted(): + return + # open() may finish IM login before runJavaScript returns. Only + # acknowledge readiness after the native request gate is open. + session_id = json.dumps(self._im_ai.session_id, ensure_ascii=True) + self._page.runJavaScript( + f"window.doctorConsultation?.imAiReady?.({session_id});" + ) def _handle_bridge_message(self, message: Mapping[str, Any]) -> None: if self._closing: return event = str(message.get("event", "")) + if event in {"im-ai-request", "im-ai-cancel"}: + self._handle_im_ai_message(message) + return if event == "screenshot-preview": visible = message.get("visible") if isinstance(visible, bool): @@ -622,6 +650,35 @@ if WEBENGINE_AVAILABLE: # pragma: no cover - GUI behavior needs an integration if not self.open_im or self._shutdown_requested: self._close_from_companion("companion-error") + def _im_ai_context_is_trusted(self) -> bool: + return ( + not self._closing + and not self._released + and not self._shutdown_requested + and self._injected + and self._policy.allows_main_document(self._page.url().toString()) + ) + + def _handle_im_ai_message(self, message: Mapping[str, Any]) -> None: + if self._im_ai_context_is_trusted(): + self._im_ai.handle(message) + + def _flush_im_ai(self) -> None: + if not self._im_ai_context_is_trusted(): + return + result = self._im_ai.take_result() + if result is not None: + payload = json.dumps(result, ensure_ascii=True, separators=(",", ":")) + self._page.runJavaScript(f"window.doctorConsultation?.imAiResult?.({payload});") + + def _close_im_ai(self) -> None: + controller = getattr(self, "_im_ai", None) + if controller is not None: + controller.close() + timer = getattr(self, "_im_ai_timer", None) + if timer is not None: + timer.stop() + def _open_diagnosis_safely(self) -> None: if self._closing or self._on_open_diagnosis is None: return @@ -1197,6 +1254,7 @@ if WEBENGINE_AVAILABLE: # pragma: no cover - GUI behavior needs an integration def _request_companion_shutdown(self, reason: str) -> None: """Let MediaRecorder finish and upload before WebEngine is destroyed.""" + _EmbeddedVideoWindow._close_im_ai(self) self._close_reason = reason if self._closing or self._released: return @@ -1241,6 +1299,7 @@ if WEBENGINE_AVAILABLE: # pragma: no cover - GUI behavior needs an integration def _begin_shutdown(self) -> None: if self._closing: return + _EmbeddedVideoWindow._close_im_ai(self) self._on_compact_close = None self._closing = True self._media_active = False @@ -1342,6 +1401,7 @@ class VideoCallWindow: patient_name: str = "患者", patient_case: Mapping[str, Any] | None = None, on_open_diagnosis: Callable[[], None] | None = None, + can_ai_assistant: bool = False, ) -> None: del browser_opener # Reserved for a future authenticated handoff implementation. try: @@ -1360,6 +1420,7 @@ class VideoCallWindow: self.open_im = bool(open_im) self.patient_name = str(patient_name or "患者").strip() or "患者" self.patient_case = dict(patient_case or {}) + self.can_ai_assistant = can_ai_assistant is True self.on_open_diagnosis = on_open_diagnosis self.logger = logger or _LOGGER self.location = resolve_companion_location( @@ -1391,6 +1452,8 @@ class VideoCallWindow: patient_name=self.patient_name, patient_case=self.patient_case, on_open_diagnosis=self.on_open_diagnosis, + can_ai_assistant=self.can_ai_assistant, + repository=self.repository, ) except Exception: self.lifecycle.end("window-open-failed") @@ -1436,6 +1499,7 @@ def open_video_call( patient_name: str = "患者", patient_case: Mapping[str, Any] | None = None, on_open_diagnosis: Callable[[], None] | None = None, + can_ai_assistant: bool = False, ) -> VideoCallWindow: """Create and immediately open a trusted embedded video window.""" @@ -1452,6 +1516,7 @@ def open_video_call( patient_name=patient_name, patient_case=patient_case, on_open_diagnosis=on_open_diagnosis, + can_ai_assistant=can_ai_assistant, ).open() diff --git a/app/tests/test_ai_consult_ui.py b/app/tests/test_ai_consult_ui.py index d68fc681c..1c886d97f 100644 --- a/app/tests/test_ai_consult_ui.py +++ b/app/tests/test_ai_consult_ui.py @@ -26,6 +26,7 @@ from PySide6.QtWidgets import ( from doctor_workstation.core import PermissionSet from doctor_workstation.services import ApiClient, DemoDoctorRepository, RemoteDoctorRepository +from doctor_workstation.ui.design_system import PALETTE from doctor_workstation.ui.dialogs import ai_consult as ai_consult_module from doctor_workstation.ui.dialogs.ai_consult import ( AiConsultDialog, @@ -2306,14 +2307,14 @@ def test_risk_block_uses_the_red_alert_palette() -> None: assert "#FEF3F2" in risk_card assert "#F1B35C" not in risk_card # 旧的橙色描边 marker = qss.split("QLabel#AiConsultRiskMarker {", 1)[1].split("}", 1)[0] - assert "#BE4B58" in marker + assert PALETTE["danger"] in marker def test_clinical_bodies_are_no_longer_rendered_at_eleven_pixels() -> None: qss = ai_consult_module.AI_CONSULT_QSS body = qss.rsplit("QLabel#AiConsultRiskBody {", 1)[1].split("}", 1)[0] - assert "color: #1a1c1f" in body.lower() + assert f'color: {PALETTE["text"]}' in body assert "font-size: 14px" in body block = qss.split("QLabel#AiConsultClinicalBody,", 1)[1].split("}", 1)[0] assert "font-size: 14px" in block diff --git a/app/tests/test_appointment_drawer_visual.py b/app/tests/test_appointment_drawer_visual.py index c34129ae7..fe057392a 100644 --- a/app/tests/test_appointment_drawer_visual.py +++ b/app/tests/test_appointment_drawer_visual.py @@ -10,6 +10,7 @@ from PySide6.QtCore import QDate, QSize, Qt from PySide6.QtWidgets import QApplication, QStyle, QStyleOptionButton, QWidget from doctor_workstation.ui.appointment_drawer import APPOINTMENT_DRAWER_QSS, AppointmentDrawer +from doctor_workstation.ui.design_system import PALETTE @pytest.fixture(scope="module") @@ -565,8 +566,39 @@ def test_keyboard_focus_has_a_visible_state( assert focus_target.hasFocus() assert application.focusWidget() is focus_target assert 'QPushButton[appointmentDate="true"]:focus' in APPOINTMENT_DRAWER_QSS - assert "border-color: #8B9AD9;" in APPOINTMENT_DRAWER_QSS + assert f"border-color: {PALETTE['focus']};" in APPOINTMENT_DRAWER_QSS drawer.close() host.close() application.processEvents() + + +@pytest.mark.parametrize("button_kind", ["date", "slot"]) +def test_appointment_hover_keeps_hit_target_stable_after_relayout( + application: QApplication, button_kind: str, +) -> None: + """Hovering must not move a time choice or restore a stale layout position.""" + from PySide6.QtCore import QEvent, QPoint, QPointF + from PySide6.QtGui import QEnterEvent + + host, drawer = _show_drawer( + application, (1440, 900), repository=_VisualRepository(), autoload=True, + ) + tomorrow = QDate.currentDate().addDays(1).toString("yyyy-MM-dd") + button = drawer.date_buttons[tomorrow] if button_kind == "date" else drawer.slot_buttons["09:30-10:00"] + original = button.geometry() + try: + for _ in range(3): + application.sendEvent(button, QEnterEvent(QPointF(10, 10), QPointF(30, 34), QPointF(30, 34))) + assert button.geometry() == original + assert button.graphicsEffect() is None + relocated = original.topLeft() + QPoint(12, 16) + button.move(relocated) # A resize/reflow while the pointer stays inside. + application.sendEvent(button, QEvent(QEvent.Type.Leave)) + assert button.pos() == relocated + button.setGeometry(original) + button.click() + assert button.isChecked() + finally: + drawer.close() + host.close() diff --git a/app/tests/test_diagnosis_drawer_visual.py b/app/tests/test_diagnosis_drawer_visual.py index 470facfa2..8d8693307 100644 --- a/app/tests/test_diagnosis_drawer_visual.py +++ b/app/tests/test_diagnosis_drawer_visual.py @@ -22,6 +22,7 @@ from PySide6.QtWidgets import ( ) from doctor_workstation.core import PermissionSet +from doctor_workstation.ui.design_system import PALETTE from doctor_workstation.ui.diagnosis_drawer import ( DiagnosisChoiceButtons, DiagnosisComboBox, @@ -1012,14 +1013,14 @@ def test_choice_chips_keep_visible_checked_style_when_readonly( application.processEvents() # Sample the pad (not glyph center) so white text does not hide the fill. enabled_color = selected.grab().toImage().pixelColor(6, selected.height() // 2) - assert enabled_color.name().lower() == "#eef1fa" + assert enabled_color.name().lower() == PALETTE["accent_soft"].lower() diet.setReadOnly(True) application.processEvents() disabled_color = selected.grab().toImage().pixelColor(6, selected.height() // 2) assert selected.isChecked() assert selected.isEnabled() assert diet.isReadOnly() - assert disabled_color.name().lower() == "#eef1fa" + assert disabled_color.name().lower() == PALETTE["accent_soft"].lower() dialog.close() application.processEvents() @@ -1039,7 +1040,7 @@ def test_view_only_drawer_shows_selected_choice_chips( selected = next(button for button in diet._buttons if button.isChecked()) application.processEvents() color = selected.grab().toImage().pixelColor(6, selected.height() // 2) - assert color.name().lower() == "#eef1fa" + assert color.name().lower() == PALETTE["accent_soft"].lower() assert diet.isReadOnly() assert not dialog.save_button.isVisibleTo(dialog) dialog.close() diff --git a/app/tests/test_diagnosis_index_visual.py b/app/tests/test_diagnosis_index_visual.py index 450def724..75050d297 100644 --- a/app/tests/test_diagnosis_index_visual.py +++ b/app/tests/test_diagnosis_index_visual.py @@ -23,6 +23,7 @@ from PySide6.QtWidgets import ( ) from doctor_workstation.core import PermissionSet +from doctor_workstation.ui.design_system import PALETTE from doctor_workstation.ui.diagnosis_index_widgets import ( DIAGNOSIS_INDEX_QSS, DiagnosisItemDelegate, @@ -424,8 +425,8 @@ def test_empty_loading_and_compact_footer_keep_the_table_shell( @pytest.mark.parametrize( ("record", "stripe", "channel"), [ - (_row(701, DiagnosisViewRecord=[{"is_confirmed": 0}]), "#a9691d", "warning"), - (_row(702, has_appointment=0, appointments=[]), "#4f63d9", "info"), + (_row(701, DiagnosisViewRecord=[{"is_confirmed": 0}]), PALETTE["warning"].lower(), "warning"), + (_row(702, has_appointment=0, appointments=[]), PALETTE["accent"].lower(), "info"), ], ) def test_semantic_hover_preserves_three_pixel_stripe_on_neutral_background( @@ -452,9 +453,9 @@ def test_semantic_hover_preserves_three_pixel_stripe_on_neutral_background( assert image.pixelColor(0, 20).name() == stripe assert image.pixelColor(1, 20).name() == stripe assert image.pixelColor(2, 20).name() == stripe - assert image.pixelColor(3, 20).name() == "#f7f7f7", f"{channel} stripe widened" - assert image.pixelColor(6, 20).name() == "#f7f7f7" - assert image.pixelColor(40, 20).name() == "#f7f7f7" + assert image.pixelColor(3, 20).name() == PALETTE["surface_alt"].lower(), f"{channel} stripe widened" + assert image.pixelColor(6, 20).name() == PALETTE["surface_alt"].lower() + assert image.pixelColor(40, 20).name() == PALETTE["surface_alt"].lower() def test_page_hides_fixed_shadow_and_preserves_admin_token_contract( diff --git a/app/tests/test_diagnosis_table_blue.py b/app/tests/test_diagnosis_table_blue.py index fd129b46e..f26add35a 100644 --- a/app/tests/test_diagnosis_table_blue.py +++ b/app/tests/test_diagnosis_table_blue.py @@ -9,10 +9,17 @@ from pathlib import Path os.environ.setdefault("QT_QPA_PLATFORM", "offscreen") import pytest -from PySide6.QtCore import QPoint, Qt -from PySide6.QtGui import QFont +from PySide6.QtCore import QPoint, QRect, Qt +from PySide6.QtGui import QFont, QImage, QPainter from PySide6.QtTest import QTest -from PySide6.QtWidgets import QApplication, QLabel, QToolButton, QVBoxLayout, QWidget +from PySide6.QtWidgets import ( + QApplication, + QLabel, + QStyleOptionViewItem, + QToolButton, + QVBoxLayout, + QWidget, +) from doctor_workstation.ui.diagnosis_index_widgets import ( DiagnosisTableHost, @@ -115,6 +122,79 @@ def test_blue_metrics_are_opt_in_and_expand_for_complete_content(application: QA legacy.close() +@pytest.mark.parametrize( + "size,column_width,row_height", + [((1024, 640), 84, 75), ((1440, 900), 126, 72)], +) +def test_followup_paint_keeps_time_whole_and_preserves_density( + application: QApplication, size: tuple[int, int], column_width: int, row_height: int, +) -> None: + class RecordingPainter(QPainter): + def __init__(self, image: QImage) -> None: + super().__init__(image) + self.lines: list[tuple[QRect, int, str]] = [] + + def drawText(self, rect: QRect, flags: int, text: str) -> None: # noqa: N802 + self.lines.append((QRect(rect), flags, text)) + super().drawText(rect, flags, text) + + row = { + "id": 501, "has_prescription": 1, + "followup_time_text": "2026-08-17 09:00", "followup_doctor_name": "陈医生", + } + original = copy.deepcopy(row) + host = DiagnosisTableHost(tech_blue=True) + host.resize(*size) + host.set_rows([row]) + host.show() + _settle(application) + try: + assert host.main.columnWidth(6) == column_width + assert host.main.rowHeight(0) == row_height + assert host.fixed.rowHeight(0) == row_height + index = host.model.index(0, 6) + full_text = "2026-08-17 09:00\n陈医生" + assert index.data() == full_text + assert index.data(Qt.ItemDataRole.ToolTipRole) == full_text + option = QStyleOptionViewItem() + option.rect = QRect(0, 0, column_width, row_height) + image = QImage(column_width, row_height, QImage.Format.Format_ARGB32) + painter = RecordingPainter(image) + host.main.itemDelegate().paint(painter, option, index) + painter.end() + expected = ["2026-08-17", "09:00", "陈医生"] if size[0] == 1024 else [ + "2026-08-17 09:00", "陈医生", + ] + assert [line[2] for line in painter.lines] == expected + content = option.rect.adjusted(8, 8, -8, -8) + for rect, flags, _text in painter.lines: + assert content.contains(rect) + assert flags & Qt.TextFlag.TextSingleLine + assert not flags & Qt.TextFlag.TextWrapAnywhere + assert row == original + finally: + host.close() + _settle(application) + + +def test_followup_long_metadata_has_complete_tooltip(application: QApplication) -> None: + host = DiagnosisTableHost(tech_blue=True) + row = { + "id": 502, "has_prescription": 1, + "followup_time_text": "2026-08-17 09:00-09:30", + "followup_doctor_name": "陈医生(内分泌科专家门诊)", "followup_rx_voided": True, + } + original = copy.deepcopy(row) + host.set_rows([row]) + index = host.model.index(0, 6) + assert index.data(Qt.ItemDataRole.ToolTipRole) == ( + "2026-08-17 09:00-09:30\n陈医生(内分泌科专家门诊)\n处方已作废" + ) + assert index.data() == index.data(Qt.ItemDataRole.ToolTipRole) + assert row == original + host.close() + + @pytest.mark.parametrize("tech_blue", [False, True]) def test_geometry_has_no_minimum_height_feedback_and_tracks_both_scroll_axes( application: QApplication, tech_blue: bool, diff --git a/app/tests/test_doctor_selection.py b/app/tests/test_doctor_selection.py index c0729c7d4..342609447 100644 --- a/app/tests/test_doctor_selection.py +++ b/app/tests/test_doctor_selection.py @@ -8,6 +8,7 @@ from PySide6.QtCore import QPoint, Qt, QTimer from PySide6.QtTest import QTest from PySide6.QtWidgets import QApplication +from doctor_workstation.ui.design_system import PALETTE from doctor_workstation.ui.pages.prescriptions import DoctorMultiSelect, _DoctorSelectionDialog from doctor_workstation.ui.theme import apply_theme @@ -74,7 +75,7 @@ def test_checked_row_blue_and_unchecked_white(dialog, application): rect = dialog.listing.visualItemRect(item_for(dialog, doctor_id)) colors.append(image.pixelColor(int((rect.right() - 70) * scale), int(rect.center().y() * scale)).name()) - assert colors == ["#eaf2ff", "#ffffff"] + assert colors == [PALETTE["accent_soft"].lower(), PALETTE["surface"].lower()] def test_accept_commits_cancel_preserves_and_reopen_restores(application): diff --git a/app/tests/test_im_ai_repository.py b/app/tests/test_im_ai_repository.py new file mode 100644 index 000000000..91e38d722 --- /dev/null +++ b/app/tests/test_im_ai_repository.py @@ -0,0 +1,42 @@ +"""Current-peer archive paging preserves old callers and request identities.""" + +import pytest + +from doctor_workstation.services.mock_repository import DemoDoctorRepository +from doctor_workstation.services.repository import RemoteDoctorRepository + + +class Client: + def __init__(self): + self.calls = [] + + def post(self, endpoint, payload, *, timeout=None): + self.calls.append((endpoint, payload, timeout)) + return {"completed": False, "sync_token": "a" * 48, "errors": []} + + +def test_sync_optional_parameters_and_timeout_preserve_exact_legacy_payload(): + client = Client() + repository = RemoteDoctorRepository(client) + repository.sync_im_chat_messages(501) + result = repository.sync_im_chat_messages(501, scope="current", sync_token="a" * 48) + assert client.calls == [ + ("tcm.diagnosis/triggerImChatSync", {"diagnosis_id": 501}, 15.0), + ("tcm.diagnosis/triggerImChatSync", + {"diagnosis_id": 501, "scope": "current", "sync_token": "a" * 48}, 15.0), + ] + assert result["completed"] is False + + +@pytest.mark.parametrize("kwargs", [{"scope": "other"}, {"sync_token": "bad"}, {"sync_token": None}]) +def test_sync_rejects_invalid_options_without_network(kwargs): + client = Client() + with pytest.raises(ValueError): + RemoteDoctorRepository(client).sync_im_chat_messages(501, **kwargs) + assert not client.calls + + +def test_mock_sync_supports_paging_contract_and_legacy_receipt(): + repository = DemoDoctorRepository() + assert repository.sync_im_chat_messages(501)["queued"] is True + assert repository.sync_im_chat_messages(501, scope="current")["completed"] is True diff --git a/app/tests/test_im_ai_service.py b/app/tests/test_im_ai_service.py new file mode 100644 index 000000000..99606401b --- /dev/null +++ b/app/tests/test_im_ai_service.py @@ -0,0 +1,270 @@ +"""Offline tests for native IM AI authorization, synchronization and races.""" + +from __future__ import annotations + +from collections import deque +from threading import BoundedSemaphore, Event +from uuid import uuid4 + +import pytest + +from doctor_workstation.video import im_ai + + +class Repository: + def __init__(self, pages=None, events=None): + self.pages = deque(pages or [{"completed": True, "errors": []}]) + self.events = events or [{"event": "done", "diagnosis_id": 501, "answer": "合成回复"}] + self.sync_calls = [] + self.stream_calls = [] + self.cancel_calls = [] + self.cancel_called = Event() + + def sync_im_chat_messages(self, diagnosis_id, **kwargs): + self.sync_calls.append((diagnosis_id, kwargs)) + return self.pages.popleft() + + def stream_diagnosis_ai(self, diagnosis_id, prompt, **kwargs): + self.stream_calls.append((diagnosis_id, prompt, kwargs)) + yield from self.events + + def cancel_diagnosis_ai(self, diagnosis_id, request_id): + self.cancel_calls.append((diagnosis_id, request_id)) + self.cancel_called.set() + return {"cancel_requested": True} + + +def controller(repository=None, **kwargs): + return im_ai.ImAiController( + repository or Repository(), diagnosis_id=501, appointment_id=101, + doctor_account="doctor_7", enabled=True, **kwargs, + ) + + +def request(service, **changes): + return { + "source": "doctor-call", "event": "im-ai-request", "sessionId": service.session_id, + "requestId": str(uuid4()), "contextKey": "view-1", "diagnosisId": "501", + "appointmentId": 101, "action": "summary", **changes, + } + + +@pytest.mark.parametrize("action,task", [("summary", "summary"), ("followup", "custom"), ("reply", "custom")]) +def test_current_peer_sync_completes_before_ai_and_keeps_identity(action, task): + token = "a" * 48 + repository = Repository(pages=[ + {"completed": False, "phase": "checking_accounts", "sync_token": token, "errors": []}, + {"completed": False, "phase": "syncing", "sync_token": token, "errors": []}, + {"completed": True, "errors": []}, + ], events=[ + {"event": "start"}, {"event": "delta", "text": "合成"}, + {"event": "done", "diagnosis_id": 501, "answer": "合成完整回复", "model_label": "模型", + "clinical_review_warnings": [{"code": "PULSE_EXCLUDED_FROM_ASSESSMENT", "source_id": "report"}]}, + ]) + service = controller(repository) + message = request(service, action=action) + assert service.handle(message) + assert service.wait() + result = service.take_result() + assert result["status"] == "success" + assert result["text"] == "合成完整回复" + assert result["requestId"] == message["requestId"] + assert result["modelLabel"] == "模型" + assert "不采集脉象" in result["warnings"][0] + assert len(repository.sync_calls) == 3 + assert repository.sync_calls[0] == (501, {"scope": "current", "sync_token": ""}) + assert repository.sync_calls[1][1]["sync_token"] == token + assert len(repository.stream_calls) == 1 + diagnosis_id, prompt, options = repository.stream_calls[0] + assert diagnosis_id == 501 and options["task"] == task + assert options["request_id"] == message["requestId"] + assert "doctor_7" in prompt and len(prompt) <= 500 + assert "不补问脉象" in prompt and "不自动确诊" in prompt + assert not repository.cancel_calls + assert service.take_result() is None + assert not service.handle(message) # A replay cannot submit another billable request. + + +@pytest.mark.parametrize("changes", [ + {"sessionId": "other"}, {"diagnosisId": "502"}, {"diagnosisId": True}, + {"diagnosisId": "0501"}, {"appointmentId": 102}, {"requestId": "invalid"}, + {"contextKey": ""}, {"contextKey": "x" * 129}, {"action": "prescription"}, + {"action": {}}, {"source": "another-page"}, {"event": "send-message"}, +]) +def test_invalid_identity_or_action_cannot_read_patient_context(changes): + repository = Repository() + service = controller(repository) + assert not service.handle(request(service, **changes)) + assert not repository.sync_calls and not repository.stream_calls + + +def test_permission_default_denied_and_each_host_has_unique_session(): + repository = Repository() + disabled = im_ai.ImAiController( + repository, diagnosis_id=501, appointment_id=101, doctor_account="doctor_7" + ) + assert disabled.config["enabled"] is False + assert not disabled.handle(request(disabled)) + assert controller().session_id != controller().session_id + + +@pytest.mark.parametrize("page", [ + {"queued": True}, {"completed": "true"}, {"completed": True, "errors": ["private detail"]}, + {"completed": False, "sync_token": "bad"}, None, +]) +def test_incomplete_or_failed_sync_never_generates(page): + repository = Repository(pages=[page]) + service = controller(repository) + assert service.handle(request(service)) + assert service.wait() + result = service.take_result() + assert result["status"] == "error" + assert "private detail" not in str(result) + assert not repository.stream_calls and not repository.cancel_calls + + +def test_sync_step_and_time_budget_are_bounded(): + page = {"completed": False, "sync_token": "b" * 48, "errors": []} + repository = Repository(pages=[page] * 10) + service = controller(repository, max_sync_steps=2) + service.handle(request(service)) + assert service.wait() + assert len(repository.sync_calls) == 2 + assert service.take_result()["status"] == "error" + assert not repository.stream_calls + + times = iter([0, 0, 46]) + repository = Repository() + service = controller(repository, clock=lambda: next(times)) + service.handle(request(service)) + assert service.wait() + assert "超时" in service.take_result()["message"] + assert not repository.stream_calls + + +def test_cancel_during_sync_stops_before_model_submission(): + entered, release = Event(), Event() + + class SlowSync(Repository): + def sync_im_chat_messages(self, diagnosis_id, **kwargs): + entered.set() + assert release.wait(2) + return super().sync_im_chat_messages(diagnosis_id, **kwargs) + + repository = SlowSync() + service = controller(repository) + message = request(service) + service.handle(message) + try: + assert entered.wait(1) + assert service.handle({**message, "event": "im-ai-cancel"}) + assert "尚未向 AI" in service.take_result()["message"] + finally: + release.set() + assert service.wait() + assert not repository.stream_calls and not repository.cancel_calls + assert service.take_result() is None + + +def test_cancel_is_independent_and_late_response_cannot_overwrite_next_request(): + entered, release, cancel_release = Event(), Event(), Event() + + class SlowStream(Repository): + def stream_diagnosis_ai(self, *args, **kwargs): + self.stream_calls.append((args, kwargs)) + yield {"event": "delta", "text": "尚未完成"} + entered.set() + assert release.wait(2) + yield {"event": "done", "answer": "迟到的旧结果"} + + def cancel_diagnosis_ai(self, *args): + result = super().cancel_diagnosis_ai(*args) + assert cancel_release.wait(2) + return result + + repository = SlowStream() + service = controller(repository) + first = request(service) + service.handle(first) + try: + assert entered.wait(1) + assert service.take_result()["text"] == "尚未完成" + service.handle({**first, "event": "im-ai-cancel"}) + assert repository.cancel_called.wait(1) # Independent HTTP starts while stream is blocked. + assert service.take_result()["status"] == "cancelled" + second = request(service, contextKey="view-2") + assert service.handle(second) + result = service.take_result() + assert result["requestId"] == second["requestId"] and result["status"] == "error" + assert len(repository.stream_calls) == 1 + finally: + release.set() + cancel_release.set() + assert service.wait() + assert service.take_result() is None + + +def test_close_invalidates_mailbox_and_cancels_without_waiting(): + entered, release = Event(), Event() + + class SlowStream(Repository): + def stream_diagnosis_ai(self, *args, **kwargs): + entered.set() + assert release.wait(2) + yield {"event": "done", "answer": "旧患者回复"} + + repository = SlowStream() + service = controller(repository) + message = request(service) + service.handle(message) + try: + assert entered.wait(1) + service.close() + assert repository.cancel_called.wait(1) + assert service.take_result() is None + assert not service.handle(request(service)) + finally: + release.set() + assert service.wait() + assert service.take_result() is None + + +@pytest.mark.parametrize("events", [ + [{"event": "delta", "text": "不完整"}], + [{"event": "done", "answer": ""}], + [{"event": "done", "diagnosis_id": 502, "answer": "其他患者"}], + [{"event": "delta", "text": "x" * (im_ai.MAX_RESULT_CHARS + 1)}], + [{"event": "done", "answer": "x" * (im_ai.MAX_RESULT_CHARS + 1)}], +]) +def test_incomplete_mismatched_and_oversized_results_are_not_usable(events): + repository = Repository(events=events) + service = controller(repository) + service.handle(request(service)) + assert service.wait() + assert service.take_result()["status"] == "error" + assert repository.cancel_called.wait(1) + assert len(repository.stream_calls) == 1 # No transport/validation retry. + + +def test_thousands_of_deltas_are_coalesced_into_one_mailbox_result(): + events = [{"event": "delta", "text": "字"}] * 4000 + [{"event": "done"}] + service = controller(Repository(events=events)) + service.handle(request(service)) + assert service.wait() + result = service.take_result() + assert result["status"] == "success" and result["text"] == "字" * 4000 + assert service.take_result() is None + + +def test_capacity_rejection_does_not_spawn_or_sync(monkeypatch): + slots = BoundedSemaphore(1) + slots.acquire() + monkeypatch.setattr(im_ai, "_WORKER_SLOTS", slots) + repository = Repository() + service = controller(repository) + try: + service.handle(request(service)) + assert service.take_result()["status"] == "error" + assert not repository.sync_calls + finally: + slots.release() diff --git a/app/tests/test_im_ai_window.py b/app/tests/test_im_ai_window.py new file mode 100644 index 000000000..c0107bc3d --- /dev/null +++ b/app/tests/test_im_ai_window.py @@ -0,0 +1,157 @@ +"""Exercise bridge trust and JSON delivery without starting WebEngine or HTTP.""" + +from __future__ import annotations + +import json +import os +import subprocess +import sys +from pathlib import Path +from types import SimpleNamespace +from unittest.mock import Mock + +import pytest + +from doctor_workstation.video import window +from doctor_workstation.video.security import TrustedDocumentPolicy + +pytestmark = pytest.mark.skipif(not window.WEBENGINE_AVAILABLE, reason="optional QtWebEngine") +TRUSTED = "https://video.example.test/im/index.html" + + +def host(**changes): + item = SimpleNamespace( + _closing=False, _released=False, _shutdown_requested=False, _injected=True, + _policy=TrustedDocumentPolicy.from_url(TRUSTED, is_local=False), + _page=Mock(), _im_ai=Mock(), _im_ai_timer=Mock(), + ) + item._page.url.return_value.toString.return_value = TRUSTED + item._im_ai_context_is_trusted = lambda: window._EmbeddedVideoWindow._im_ai_context_is_trusted(item) + for key, value in changes.items(): + setattr(item, key, value) + return item + + +@pytest.mark.parametrize("changes", [ + {"_closing": True}, {"_released": True}, {"_shutdown_requested": True}, {"_injected": False}, +]) +def test_inactive_or_closing_page_cannot_submit_or_receive_ai(changes): + item = host(**changes) + window._EmbeddedVideoWindow._handle_im_ai_message(item, {"event": "im-ai-request"}) + window._EmbeddedVideoWindow._flush_im_ai(item) + item._im_ai.handle.assert_not_called() + item._im_ai.take_result.assert_not_called() + item._page.runJavaScript.assert_not_called() + + +@pytest.mark.parametrize("url", ["about:blank", "https://evil.example.test/im/index.html", TRUSTED + "?other=1"]) +def test_document_navigation_cannot_reuse_authenticated_ai_bridge(url): + item = host() + item._page.url.return_value.toString.return_value = url + window._EmbeddedVideoWindow._handle_im_ai_message(item, {"event": "im-ai-request"}) + window._EmbeddedVideoWindow._flush_im_ai(item) + item._im_ai.handle.assert_not_called() + item._page.runJavaScript.assert_not_called() + + +def test_trusted_bridge_routes_only_to_identity_checked_controller(): + item = host() + message = {"source": "doctor-call", "event": "im-ai-request", "diagnosisId": 501} + window._EmbeddedVideoWindow._handle_im_ai_message(item, message) + item._im_ai.handle.assert_called_once_with(message) + + +def test_result_content_is_json_encoded_and_no_javascript_is_executed(): + item = host() + payload = {"status": "success", "text": '\");window.bad=true;//\n\u2028', "warnings": ["合成提示"]} + item._im_ai.take_result.return_value = payload + window._EmbeddedVideoWindow._flush_im_ai(item) + script = item._page.runJavaScript.call_args.args[0] + prefix, suffix = "window.doctorConsultation?.imAiResult?.(", ");" + assert script.startswith(prefix) and script.endswith(suffix) + assert json.loads(script[len(prefix):-len(suffix)]) == payload + assert "\\u2028" in script + + +def test_host_acknowledges_initial_summary_only_after_request_gate_opens(): + item = host(_injected=False) + item._im_ai.session_id = 'synthetic-session-\\"\u2028' + + def verify_gate(script): + assert item._im_ai_context_is_trusted() is True + prefix, suffix = "window.doctorConsultation?.imAiReady?.(", ");" + assert script.startswith(prefix) and script.endswith(suffix) + assert json.loads(script[len(prefix):-len(suffix)]) == item._im_ai.session_id + + item._page.runJavaScript.side_effect = verify_gate + window._EmbeddedVideoWindow._after_injection(item, True) + item._page.runJavaScript.assert_called_once() + + +@pytest.mark.parametrize("changes", [ + {"_closing": True}, {"_released": True}, {"_shutdown_requested": True}, +]) +def test_late_injection_cannot_acknowledge_a_closed_ai_context(changes): + item = host(_injected=False, **changes) + window._EmbeddedVideoWindow._after_injection(item, True) + item._page.runJavaScript.assert_not_called() + + +def test_navigation_cannot_receive_ai_readiness_acknowledgement(): + item = host(_injected=False) + item._page.url.return_value.toString.return_value = "https://evil.example.test/im/index.html" + window._EmbeddedVideoWindow._after_injection(item, True) + item._page.runJavaScript.assert_not_called() + + +def test_failed_injection_closes_without_ai_readiness_acknowledgement(): + item = host(_injected=False, _request_companion_shutdown=Mock()) + window._EmbeddedVideoWindow._after_injection(item, False) + item._request_companion_shutdown.assert_called_once_with("bridge-api-missing") + item._page.runJavaScript.assert_not_called() + + +def test_shutdown_cancels_ai_before_waiting_for_media_or_destroying_page(): + item = host( + _start_requested=True, _call_cycle_closed=False, _companion_ended=False, + _shutdown_timer=Mock(), close=Mock(), + ) + window._EmbeddedVideoWindow._request_companion_shutdown(item, "window-closed") + item._im_ai.close.assert_called_once() + item._im_ai_timer.stop.assert_called_once() + assert item._shutdown_requested is True + item.close.assert_not_called() # Recording shutdown still gets its existing grace period. + item._shutdown_timer.start.assert_called_once_with(190_000) + + +def test_qt_notify_rejects_oversized_or_wrong_source_payloads(): + callback = Mock() + bridge = window._QtVideoBridge(callback, Mock()) + bridge.notify("x" * 16_385) + bridge.notify(json.dumps({"source": "evil", "event": "im-ai-request"})) + bridge.notify("[]") + callback.assert_not_called() + message = {"source": "doctor-call", "event": "im-ai-cancel"} + bridge.notify(json.dumps(message)) + callback.assert_called_once_with(message) + + +def test_video_module_remains_importable_without_optional_qt(): + source = Path(__file__).resolve().parents[1] / "src" + script = """ +import builtins +original_import = builtins.__import__ +def without_qt(name, *args, **kwargs): + if name == 'PySide6' or name.startswith('PySide6.'): + raise ImportError('synthetic core-only installation') + return original_import(name, *args, **kwargs) +builtins.__import__ = without_qt +from doctor_workstation.video.window import WEBENGINE_AVAILABLE, VideoCallWindow +from doctor_workstation.video.im_ai import ImAiController +assert WEBENGINE_AVAILABLE is False +""" + result = subprocess.run( + [sys.executable, "-c", script], env={**os.environ, "PYTHONPATH": str(source)}, + capture_output=True, text=True, timeout=10, check=False, + ) + assert result.returncode == 0, result.stderr diff --git a/app/tests/test_motion.py b/app/tests/test_motion.py index aba2864ec..94f994f39 100644 --- a/app/tests/test_motion.py +++ b/app/tests/test_motion.py @@ -12,17 +12,16 @@ from __future__ import annotations import os os.environ.setdefault("QT_QPA_PLATFORM", "offscreen") -# The module disables itself under the offscreen platform so widget grabs in the -# other suites capture settled frames; these tests are about the animation, so -# they opt back in. -os.environ["DOCTOR_MOTION"] = "on" - import pytest -from PySide6.QtCore import QEvent, QPoint, QPointF, Qt -from PySide6.QtGui import QWheelEvent +from PySide6.QtCore import QAbstractAnimation, QEvent, QPoint, QPointF, QPropertyAnimation, Qt +from PySide6.QtGui import QKeyEvent, QWheelEvent from PySide6.QtWidgets import ( + QAbstractItemView, QApplication, + QGraphicsDropShadowEffect, QLabel, + QListWidget, + QPlainTextEdit, QScrollArea, QStackedWidget, QVBoxLayout, @@ -32,6 +31,13 @@ from PySide6.QtWidgets import ( from doctor_workstation.ui import motion +@pytest.fixture(autouse=True) +def enable_motion(monkeypatch: pytest.MonkeyPatch) -> None: + # Opt in per test so collecting this module does not animate other suites' + # screenshots or leak motion settings across the shared QApplication. + monkeypatch.setenv("DOCTOR_MOTION", "on") + + @pytest.fixture(scope="module") def application() -> QApplication: return QApplication.instance() or QApplication([]) @@ -122,15 +128,22 @@ def _scroll_area(application: QApplication) -> QScrollArea: return area -def _wheel(delta: int) -> QWheelEvent: +def _wheel( + delta: int, + *, + horizontal: int = 0, + pixels: int = 0, + modifiers: Qt.KeyboardModifier = Qt.KeyboardModifier.NoModifier, + phase: Qt.ScrollPhase = Qt.ScrollPhase.NoScrollPhase, +) -> QWheelEvent: return QWheelEvent( QPointF(50, 50), QPointF(50, 50), - QPoint(0, 0), - QPoint(0, delta), + QPoint(0, pixels), + QPoint(horizontal, delta), Qt.MouseButton.NoButton, - Qt.KeyboardModifier.NoModifier, - Qt.ScrollPhase.NoScrollPhase, + modifiers, + phase, False, ) @@ -226,3 +239,273 @@ def test_reading_surfaces_get_smooth_scrolling_from_the_theme( assert getattr(area, "_doctor_smooth_scroll", None) is not None area.close() + + +def test_repeated_fade_continues_from_current_opacity(application: QApplication) -> None: + widget = QWidget() + motion.fade_in(widget) + first = widget._doctor_motion["fade"] + first.setCurrentTime(motion.BASE // 2) + opacity = widget.graphicsEffect().opacity() + + motion.fade_in(widget) + + assert widget.graphicsEffect().opacity() == pytest.approx(opacity) + assert widget._doctor_motion["fade"].startValue() == pytest.approx(opacity) + assert first.state() == QAbstractAnimation.State.Stopped + widget.close() + + +def test_fade_out_starts_at_full_opacity(application: QApplication) -> None: + widget = QWidget() + widget.show() + + motion.fade_out(widget) + + assert widget.graphicsEffect().opacity() == pytest.approx(1.0) + widget.close() + + +def test_reversing_fade_does_not_run_cancelled_hide_callback(application: QApplication) -> None: + widget = QWidget() + widget.show() + completed = [] + motion.fade_out(widget, on_finished=lambda: completed.append(True)) + outgoing = widget._doctor_motion["fade"] + outgoing.setCurrentTime(motion.FAST // 2) + opacity = widget.graphicsEffect().opacity() + + motion.fade_in(widget) + incoming = widget._doctor_motion["fade"] + + assert incoming.startValue() == pytest.approx(opacity) + incoming.setCurrentTime(incoming.duration()) + application.processEvents() + assert widget.isVisible() + assert not completed + assert widget.graphicsEffect() is None + widget.close() + + +def test_previous_fade_cleanup_does_not_delete_reentrant_fade(application: QApplication) -> None: + widget = QWidget() + widget.show() + motion.fade_out(widget, on_finished=lambda: motion.fade_in(widget)) + outgoing = widget._doctor_motion["fade"] + + outgoing.setCurrentTime(outgoing.duration()) + incoming = widget._doctor_motion["fade"] + effect = widget.graphicsEffect() + application.processEvents() + + assert widget.graphicsEffect() is effect + assert incoming.state() == QAbstractAnimation.State.Running + incoming.setCurrentTime(incoming.duration()) + application.processEvents() + assert widget.graphicsEffect() is None + assert widget.isVisible() + widget.close() + + +def test_replaced_and_completed_animations_are_released(application: QApplication) -> None: + widget = QWidget() + destroyed = [] + for _ in range(10): + motion.fade_in(widget) + widget._doctor_motion["fade"].destroyed.connect(lambda: destroyed.append(True)) + fade = widget._doctor_motion["fade"] + fade.setCurrentTime(fade.duration()) + application.processEvents() + application.sendPostedEvents(None, QEvent.Type.DeferredDelete) + + assert not widget._doctor_motion + assert not widget.findChildren(QPropertyAnimation) + assert len(destroyed) == 10 + widget.close() + + +def test_fades_preserve_existing_graphics_effects(application: QApplication) -> None: + widget = QWidget() + shadow = QGraphicsDropShadowEffect(widget) + widget.setGraphicsEffect(shadow) + + motion.fade_in(widget) + assert widget.graphicsEffect() is shadow + motion.fade_out(widget) + application.processEvents() + + assert widget.graphicsEffect() is shadow + assert widget.isHidden() + widget.close() + + +def test_repeated_enter_does_not_accumulate_position_offset(application: QApplication) -> None: + host = QWidget() + widget = QWidget(host) + origin = QPoint(10, 20) + widget.move(origin) + motion.enter(widget) + widget._doctor_motion["enter"].setCurrentTime(motion.BASE // 3) + position = widget.pos() + + motion.enter(widget) + + assert widget.pos() == position + arrival = widget._doctor_motion["enter"] + assert arrival.endValue() == origin + arrival.setCurrentTime(arrival.duration()) + assert widget.pos() == origin + host.close() + + +def test_disabling_motion_settles_an_active_entry( + application: QApplication, monkeypatch: pytest.MonkeyPatch +) -> None: + host = QWidget() + widget = QWidget(host) + origin = QPoint(10, 20) + widget.move(origin) + motion.enter(widget) + monkeypatch.setenv("DOCTOR_MOTION", "off") + + motion.enter(widget) + application.processEvents() + + assert widget.pos() == origin + assert widget.graphicsEffect() is None + assert not widget._doctor_motion + host.close() + + +def test_wheel_reversal_discards_pending_travel(application: QApplication) -> None: + area = _scroll_area(application) + motion.install_smooth_scroll(area) + scroller = area._doctor_smooth_scroll + bar = area.verticalScrollBar() + bar.setValue(500) + for _ in range(4): + scroller.eventFilter(area.viewport(), _wheel(-120)) + scroller._animation.setCurrentTime(30) + position = bar.value() + + scroller.eventFilter(area.viewport(), _wheel(120)) + + assert scroller._animation.startValue() == position + assert scroller._animation.endValue() == position - motion.SCROLL_STEP + scroller._animation.setCurrentTime(60) + assert bar.value() < position + area.close() + + +@pytest.mark.parametrize("interaction", ["set_value", "keyboard", "slider_press", "range_change"]) +def test_direct_scroll_interaction_cancels_pending_wheel( + application: QApplication, interaction: str +) -> None: + area = _scroll_area(application) + motion.install_smooth_scroll(area) + scroller = area._doctor_smooth_scroll + bar = area.verticalScrollBar() + scroller.eventFilter(area.viewport(), _wheel(-120)) + scroller._animation.setCurrentTime(30) + + if interaction == "set_value": + bar.setValue(500) + elif interaction == "keyboard": + application.sendEvent( + area, + QKeyEvent(QEvent.Type.KeyPress, Qt.Key.Key_Down, Qt.KeyboardModifier.NoModifier), + ) + elif interaction == "slider_press": + bar.setSliderDown(True) + else: + bar.setRange(0, 50) + + assert scroller._animation.state() == QAbstractAnimation.State.Stopped + assert scroller._target == bar.value() + if interaction == "set_value": + scroller.eventFilter(area.viewport(), _wheel(-120)) + assert scroller._animation.endValue() == 500 + motion.SCROLL_STEP + area.close() + + +@pytest.mark.parametrize( + "wheel_options", + [ + {"pixels": -8}, + {"phase": Qt.ScrollPhase.ScrollUpdate}, + {"phase": Qt.ScrollPhase.ScrollMomentum}, + {"modifiers": Qt.KeyboardModifier.ControlModifier}, + {"modifiers": Qt.KeyboardModifier.ShiftModifier}, + {"horizontal": -120}, + ], +) +def test_native_gestures_cancel_pending_wheel( + application: QApplication, wheel_options: dict +) -> None: + area = _scroll_area(application) + motion.install_smooth_scroll(area) + scroller = area._doctor_smooth_scroll + scroller.eventFilter(area.viewport(), _wheel(-120)) + scroller._animation.setCurrentTime(30) + delta = 0 if "horizontal" in wheel_options else -120 + + assert not scroller.eventFilter(area.viewport(), _wheel(delta, **wheel_options)) + assert scroller._animation.state() == QAbstractAnimation.State.Stopped + assert scroller._target == area.verticalScrollBar().value() + area.close() + + +@pytest.mark.parametrize("kind", ["items", "text_blocks"]) +def test_non_pixel_scrollbars_keep_native_wheel_steps(application: QApplication, kind: str) -> None: + if kind == "items": + area = QListWidget() + area.addItems([f"row {index}" for index in range(300)]) + area.setVerticalScrollMode(QAbstractItemView.ScrollMode.ScrollPerItem) + else: + area = QPlainTextEdit("\n".join(f"line {index}" for index in range(300))) + area.resize(300, 200) + area.show() + application.processEvents() + motion.install_smooth_scroll(area) + + assert not area._doctor_smooth_scroll.eventFilter(area.viewport(), _wheel(-120)) + application.sendEvent(area.viewport(), _wheel(-120)) + assert 0 < area.verticalScrollBar().value() < motion.SCROLL_STEP + area.close() + + +def test_pending_scroll_reaches_edge_before_handing_wheel_back(application: QApplication) -> None: + area = _scroll_area(application) + motion.install_smooth_scroll(area) + scroller = area._doctor_smooth_scroll + bar = area.verticalScrollBar() + bar.setValue(bar.maximum() - 20) + + assert scroller.eventFilter(area.viewport(), _wheel(-120)) + assert scroller.eventFilter(area.viewport(), _wheel(-120)) + scroller._animation.setCurrentTime(scroller._animation.duration()) + assert not scroller.eventFilter(area.viewport(), _wheel(-120)) + area.close() + + +def test_horizontal_scroller_honors_horizontal_and_shift_wheel(application: QApplication) -> None: + area = QScrollArea() + content = QWidget() + content.resize(2000, 1000) + area.setWidget(content) + area.resize(300, 200) + motion.install_smooth_scroll(area, orientation=Qt.Orientation.Horizontal) + area.show() + application.processEvents() + scroller = area._doctor_smooth_scroll + + assert not scroller.eventFilter(area.viewport(), _wheel(-120)) + assert scroller.eventFilter(area.viewport(), _wheel(0, horizontal=-120)) + scroller._animation.setCurrentTime(scroller._animation.duration()) + assert area.horizontalScrollBar().value() == motion.SCROLL_STEP + assert area.verticalScrollBar().value() == 0 + assert scroller.eventFilter( + area.viewport(), _wheel(-120, modifiers=Qt.KeyboardModifier.ShiftModifier) + ) + assert scroller._animation.endValue() == motion.SCROLL_STEP * 2 + area.close() diff --git a/app/tests/test_prescriptions_tech_blue.py b/app/tests/test_prescriptions_tech_blue.py index 8a4613f86..3c529ec04 100644 --- a/app/tests/test_prescriptions_tech_blue.py +++ b/app/tests/test_prescriptions_tech_blue.py @@ -16,6 +16,7 @@ from PySide6.QtWidgets import QAbstractItemView, QApplication, QPushButton from doctor_workstation.core import PermissionSet from doctor_workstation.services import DemoDoctorRepository from doctor_workstation.ui import icons +from doctor_workstation.ui.design_system import PALETTE from doctor_workstation.ui.pages import prescriptions as prescriptions_module from doctor_workstation.ui.shell import ShellWindow from doctor_workstation.ui.theme import apply_theme @@ -222,7 +223,7 @@ def test_sorted_native_row_view_button_targets_visible_record( def test_blue_icon_disabled_variant_does_not_modify_shared_icon_cache(application) -> None: - kind, color, size = "pencil", "#1769E8", 19 + kind, color, size = "pencil", PALETTE["accent"], 19 shared = icons.icon(kind, color, size) original_key = shared.cacheKey() original_normal = shared.pixmap(size, size, QIcon.Mode.Normal).toImage() @@ -230,13 +231,19 @@ def test_blue_icon_disabled_variant_does_not_modify_shared_icon_cache(applicatio blue = prescriptions_module._blue_prescription_icon(kind, color, size) + assert blue is not shared assert icons.icon(kind, color, size) is shared assert shared.cacheKey() == original_key assert shared.pixmap(size, size, QIcon.Mode.Normal).toImage() == original_normal assert shared.pixmap(size, size, QIcon.Mode.Disabled).toImage() == original_disabled assert blue.pixmap(size, size, QIcon.Mode.Normal).toImage() == original_normal - assert blue.pixmap(size, size, QIcon.Mode.Disabled).toImage() == icons.pixmap(kind, "#A4ADBA", size).toImage() - assert blue.pixmap(size, size, QIcon.Mode.Disabled).toImage() != original_disabled + assert blue.pixmap(size, size, QIcon.Mode.Disabled).toImage() == icons.pixmap(kind, PALETTE["disabled"], size).toImage() + assert blue.pixmap(size, size, QIcon.Mode.Disabled).toImage() == original_disabled + # Both surfaces share the disabled colour; changing the returned icon still + # must not mutate the cached icon used by another page. + blue.addPixmap(icons.pixmap(kind, PALETTE["danger"], size), QIcon.Mode.Disabled) + assert shared.cacheKey() == original_key + assert shared.pixmap(size, size, QIcon.Mode.Disabled).toImage() == original_disabled def test_long_doctor_button_paints_compactly_without_truncating_real_value(shell_factory, application) -> None: diff --git a/app/tests/test_reception_blue_design.py b/app/tests/test_reception_blue_design.py index fdc7c696e..801f669be 100644 --- a/app/tests/test_reception_blue_design.py +++ b/app/tests/test_reception_blue_design.py @@ -6,6 +6,7 @@ from PySide6.QtGui import QPalette from PySide6.QtWidgets import QApplication, QFrame, QLabel, QPushButton from doctor_workstation.core import PermissionSet +from doctor_workstation.ui.design_system import PALETTE from doctor_workstation.ui.pages import reception as reception_module from doctor_workstation.ui.pages.reception import ReceptionPage from doctor_workstation.ui.theme import apply_theme @@ -43,12 +44,12 @@ def page(application, monkeypatch): def test_primary_action_and_reading_ink_use_separate_colors(page, application): page.video_button.setEnabled(True) settle(application) - assert page.video_button.palette().color(QPalette.ColorRole.Button).name() == "#1769e8" - assert page.video_button.palette().color(QPalette.ColorRole.ButtonText).name() == "#ffffff" - assert page.case_labels["present"].palette().color(QPalette.ColorRole.WindowText).name() == "#273244" + assert page.video_button.palette().color(QPalette.ColorRole.Button).name() == PALETTE["accent"].lower() + assert page.video_button.palette().color(QPalette.ColorRole.ButtonText).name() == PALETTE["surface"].lower() + assert page.case_labels["present"].palette().color(QPalette.ColorRole.WindowText).name() == PALETTE["text"].lower() page.video_button.setEnabled(False) settle(application) - assert page.video_button.palette().color(QPalette.ColorRole.ButtonText).name() == "#8e8f90" + assert page.video_button.palette().color(QPalette.ColorRole.ButtonText).name() == PALETTE["disabled"].lower() def test_typography_preserves_regular_body_and_distinct_values(page): diff --git a/app/tests/test_text_call_policy.py b/app/tests/test_text_call_policy.py index 88ccb9671..5bfa572d8 100644 --- a/app/tests/test_text_call_policy.py +++ b/app/tests/test_text_call_policy.py @@ -164,6 +164,59 @@ def test_diagnosis_callback_previews_exact_appointment_session(chat_controller): assert len(case.previews) == 1 # A closed session cannot borrow another appointment's video. +@pytest.mark.parametrize("permissions, expected", [ + (None, False), + ([], False), + (["tcm.diagnosis/read"], False), + (["tcm.diagnosis.aiAssistant"], False), + (["tcm.diagnosis/aiAssistant"], True), + (["tcm.diagnosis/*"], True), + (["*"], True), +]) +def test_im_ai_capability_comes_from_current_shell_permissions(chat_controller, permissions, expected): + case = chat_controller + case.controller.shell_window.permissions = permissions + case.controller._request_video({ + "patient_id": 8, "diagnosis_id": 123, "appointment_id": 456, + "mode": "im", "can_ai_assistant": True, + }) + case.complete(0) + assert case.launched[0][1]["can_ai_assistant"] is expected + + +def test_im_ai_permission_is_evaluated_after_ticket_load(chat_controller): + case = chat_controller + case.controller.shell_window.permissions = ["tcm.diagnosis/aiAssistant"] + case.request(456) + case.controller.shell_window.permissions = [] + case.complete(0) + assert case.launched[0][1]["can_ai_assistant"] is False + + +@pytest.mark.parametrize("capability, expected", [(True, True), (False, False), (None, False), (1, False), ("true", False)]) +def test_video_launcher_forwards_only_explicit_ai_capability(monkeypatch, capability, expected): + from doctor_workstation.video import window as window_module + from doctor_workstation.video.launcher import launch_video_call + + launches = [] + sentinel = object() + + def capture(request, **kwargs): + launches.append((request, kwargs)) + return sentinel + + monkeypatch.setattr(window_module, "open_video_call", capture) + result = launch_video_call( + ticket(), repository=object(), open_im=True, can_ai_assistant=capability, + ) + assert result is sentinel + request, options = launches[0] + assert request.diagnosis_id == 123 + assert request.patient_id == 8 + assert request.appointment_id == 456 + assert options["can_ai_assistant"] is expected + + @pytest.mark.parametrize("second_diagnosis", [123, 124]) @pytest.mark.parametrize("completion_order", [(0, 1), (1, 0)]) def test_latest_im_selection_retires_pending_callbacks(chat_controller, second_diagnosis, completion_order): diff --git a/app/tests/test_ui_contract.py b/app/tests/test_ui_contract.py index 7bc78229b..648072cb1 100644 --- a/app/tests/test_ui_contract.py +++ b/app/tests/test_ui_contract.py @@ -295,6 +295,48 @@ def test_real_demo_login_reaches_success_without_widget_adapter( application.processEvents() +def test_login_password_group_keeps_focus_when_reveal_is_keyboard_focused(tmp_path: Any) -> None: + application = QApplication.instance() or QApplication([]) + apply_theme(application) + window = LoginWindow( + object(), settings=QSettings(str(tmp_path / "focus.ini"), QSettings.Format.IniFormat), + ) + window.show() + application.processEvents() + group = window.password_edit.parentWidget() + geometry = group.geometry() + try: + for control in (window.password_edit, window.reveal_button): + control.setFocus() + application.processEvents() + assert group.property("focused") is True + assert group.geometry() == geometry + window.login_button.setFocus() + application.processEvents() + assert group.property("focused") is False + assert group.geometry() == geometry + finally: + window.close() + + +def test_compact_login_keeps_the_whole_form_visible(tmp_path: Any) -> None: + application = QApplication.instance() or QApplication([]) + apply_theme(application) + window = LoginWindow( + object(), settings=QSettings(str(tmp_path / "compact.ini"), QSettings.Format.IniFormat), + ) + window.resize(860, 640) + window.show() + application.processEvents() + try: + assert not window.brand_panel.isVisible() + assert window.login_scroll.verticalScrollBar().maximum() == 0 + assert window.card.height() >= window.card.minimumSizeHint().height() + assert window.login_button.isVisibleTo(window) + finally: + window.close() + + def test_remembered_password_survives_a_new_login_window(tmp_path: Any) -> None: application = QApplication.instance() or QApplication([]) settings_path = tmp_path / "remember-password.ini" diff --git a/app/tests/test_ui_detail_refinements.py b/app/tests/test_ui_detail_refinements.py index acac857b1..c19fb5681 100644 --- a/app/tests/test_ui_detail_refinements.py +++ b/app/tests/test_ui_detail_refinements.py @@ -38,6 +38,8 @@ def page(application, monkeypatch): def test_reception_prompts_remain_readable_in_a_narrow_workspace(page, application): + # The responsive workspace exposes insights in its second tab. + page.workbench.mode_tabs.setCurrentIndex(1) settle(application) for button in page.ai_prompt_buttons: assert button.width() >= button.minimumSizeHint().width() @@ -48,6 +50,8 @@ def test_reception_prompts_remain_readable_in_a_narrow_workspace(page, applicati def test_hidden_tall_consultation_does_not_expand_daily_records(page, application): + # Force real overflow: a short case is allowed to fill the viewport. + page.case_labels["present"].setText("Long clinical history\n" * 80) page.detail_tabs.setCurrentIndex(0) settle(application) consultation_height = page.clinical_pages.height() diff --git a/app/video_companion/dist/assets/index-CMN1CXTr.css b/app/video_companion/dist/assets/index-CMN1CXTr.css new file mode 100644 index 000000000..38989167b --- /dev/null +++ b/app/video_companion/dist/assets/index-CMN1CXTr.css @@ -0,0 +1 @@ +:root{--accent: #4267b2;--accent-hover: #355995;--accent-soft: #eaf0fb;--surface: #fff;--surface-soft: #f5f7fa;--border: #e6eaf0;--text: #344258;--muted: #647287;--heading: #223047;--surface-alt: #f7f9fc;--border-strong: #d4dce8;--success: #287b65;--success-soft: #edf7f2;--danger: #b54a59;--danger-soft: #fcf0f2;--radius-small: 6px;--radius-panel: 16px;--radius-control: 10px;--motion-ease: cubic-bezier(.2, .7, .2, 1);font-family:Microsoft YaHei UI,PingFang SC,Noto Sans CJK SC,system-ui,sans-serif;color:var(--text);background:var(--surface-soft);font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}html,body,#app{width:100%;height:100%;margin:0;overflow:hidden}button,textarea,input{font:inherit}button{cursor:pointer;transition:background-color .14s var(--motion-ease),border-color .14s var(--motion-ease),color .14s var(--motion-ease),transform .12s var(--motion-ease)}button:enabled:active{transform:translateY(1px)}button:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}button:disabled{cursor:not-allowed;opacity:.55}.consultation-shell{width:100%;height:100%;min-width:0;min-height:0;background:var(--surface-soft)}.consultation-shell--video-only{min-height:0}.consultation-shell--with-ai{display:grid;grid-template-columns:minmax(0,1fr) var(--im-ai-panel-width, 330px);column-gap:8px}.im-ai-resizer{position:absolute;z-index:1;top:0;bottom:0;left:-8px;width:8px;min-height:0;cursor:col-resize;touch-action:none;background:var(--surface-soft);outline:none}.im-ai-resizer:before{position:absolute;inset:0 3px;border-radius:2px;background:var(--border);content:""}.im-ai-resizer>span{position:absolute;top:calc(50% - 20px);left:2px;width:4px;height:40px;border-radius:3px;background:var(--border-strong)}.im-ai-resizer:hover:before,.im-ai-resizer:focus-visible:before,.consultation-shell--resizing .im-ai-resizer:before{background:var(--accent)}.im-ai-resizer:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.consultation-shell--resizing,.consultation-shell--resizing *{cursor:col-resize!important;user-select:none!important}.chat-panel{display:grid;grid-template-rows:minmax(74px,auto) minmax(0,1fr) auto;width:100%;height:100%;min-width:0;min-height:0;background:var(--surface-soft)}.chat-header{display:flex;align-items:center;gap:14px;padding:12px 20px;border-bottom:1px solid var(--border);background:var(--surface)}.patient-avatar{display:grid;place-items:center;width:44px;height:44px;border-radius:var(--radius-control);color:#fff;background:var(--accent);font-size:18px;font-weight:700}.chat-heading{min-width:0;flex:1}.chat-heading h1{margin:0;color:var(--heading);font-size:18px;line-height:1.4}.chat-heading p{display:flex;align-items:center;gap:7px;margin:3px 0 0;color:var(--muted);font-size:12px}.connection-dot{width:7px;height:7px;border-radius:50%;background:#a3adbd}.connection-dot--online{background:var(--success)}.primary-action,.send-button,.capture-button{border:1px solid var(--accent);border-radius:var(--radius-control);color:#fff;background:var(--accent);font-weight:600}.secondary-action{padding:9px 13px;border:1px solid var(--border-strong);border-radius:var(--radius-control);color:var(--text);background:#fff;font-weight:600}.secondary-action:enabled:hover{border-color:var(--accent);color:var(--accent-hover);background:var(--accent-soft)}.primary-action{display:flex;gap:8px;align-items:center;padding:10px 16px}.primary-action:enabled:hover,.send-button:enabled:hover,.capture-button:enabled:hover{background:var(--accent-hover)}.message-list{overflow-y:auto;padding:18px max(24px,calc((100% - 920px)/2));background:var(--surface-soft)}.load-more{display:block;margin:0 auto 18px;padding:6px 12px;border:1px solid var(--border);border-radius:var(--radius-control);color:var(--muted);background:#fff;font-size:12px}.empty-chat{display:grid;justify-items:center;margin-top:min(16vh,110px);color:var(--muted);text-align:center}.empty-chat__icon{display:grid;place-items:center;width:62px;height:62px;margin-bottom:12px;border:1px solid var(--border);border-radius:var(--radius-panel);color:var(--accent);background:#fff;font-weight:800}.empty-chat h2{margin:0;color:var(--heading);font-size:17px}.empty-chat p{margin:7px 0;font-size:13px}.message-row{display:flex;flex-direction:column;align-items:flex-start;margin:12px 0}.message-row--mine{align-items:flex-end}.message-row--call-status{align-items:center;margin:16px 0}.call-status-event{display:inline-flex;align-items:center;gap:8px;min-height:32px;padding:0 12px;border:1px solid var(--border);border-radius:var(--radius-control);color:var(--muted);background:var(--surface);font-size:12px}.call-status-event__icon{display:grid;place-items:center;width:20px;height:20px;border-radius:10px;color:var(--accent);background:var(--accent-soft);font-size:11px}.call-status-event strong{color:var(--heading);font-weight:700}.call-status-event time{color:var(--muted);font-variant-numeric:tabular-nums}.call-status-event--connected{border-color:#bdebdc;background:var(--success-soft)}.call-status-event--connected .call-status-event__icon{color:var(--success);background:#dff7ee}.call-status-event--failed{border-color:#f3c8cf;background:var(--danger-soft)}.call-status-event--failed .call-status-event__icon{color:var(--danger);background:#ffe6e9}.message-meta{margin:0 8px 5px;color:var(--muted);font-size:11px}.message-bubble{max-width:min(72%,620px);padding:10px 13px;border:1px solid var(--border);border-radius:10px var(--radius-panel) var(--radius-panel) var(--radius-panel);background:#fff;line-height:1.6;word-break:break-word}.message-row--mine .message-bubble{border-color:var(--accent);border-radius:var(--radius-panel) 10px var(--radius-panel) var(--radius-panel);color:#fff;background:var(--accent)}.message-bubble p{margin:0;white-space:pre-wrap}.message-image,.message-video{display:block;max-width:min(360px,100%);max-height:280px;border-radius:var(--radius-control)}.message-file{display:flex;align-items:center;gap:8px;color:inherit;text-decoration:none}.message-bubble audio{max-width:min(320px,100%)}.composer{padding:10px 18px 14px;border-top:1px solid var(--border);background:#fff}.composer-toolbar{display:flex;align-items:center;justify-content:space-between;min-height:30px;color:var(--muted);font-size:11px}.composer-toolbar button{padding:5px 9px;border:0;border-radius:10px;color:var(--accent);background:var(--accent-soft);font-size:12px}.composer-tools{display:flex;align-items:center;gap:8px;min-width:0}.composer-toolbar .im-ai-toggle{display:none}.composer-row{display:grid;grid-template-columns:minmax(0,1fr) 86px;gap:12px}.composer textarea{width:100%;min-height:68px;max-height:150px;padding:10px 12px;resize:vertical;border:1px solid var(--border-strong);border-radius:var(--radius-control);outline:none;transition:border-color .14s var(--motion-ease),background-color .14s var(--motion-ease);color:var(--text);background:var(--surface-alt);line-height:1.5}.composer textarea:focus{border-color:var(--accent);outline:2px solid var(--accent-soft);outline-offset:1px;background:var(--surface)}.send-button{align-self:end;height:40px}.inline-notice{margin-bottom:7px;color:var(--success);font-size:12px}.inline-notice--error{color:var(--danger)}.im-ai-panel{position:relative;display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;min-width:0;min-height:0;height:100%;overflow:visible;border-left:1px solid var(--border);background:var(--surface);color:var(--text)}.im-ai-header{display:flex;align-items:center;gap:10px;min-height:74px;padding:14px 18px}.im-ai-mark{display:grid;place-items:center;flex-shrink:0;width:32px;height:32px;border:1px solid var(--border-strong);border-radius:var(--radius-control);color:var(--accent);background:var(--surface-alt);font-size:12px;font-weight:700;letter-spacing:.02em}.im-ai-header>div{flex:1;min-width:0}.im-ai-header h2{margin:0;color:var(--heading);font-size:15px;line-height:1.5;font-weight:600}.im-ai-header p{margin:2px 0 0;color:var(--muted);font-size:11px}.im-ai-close{display:none;width:32px;height:32px;flex-shrink:0;border:0;border-radius:var(--radius-small);background:var(--surface-soft);color:var(--muted);font-size:23px;line-height:1}.im-ai-close:hover{background:var(--accent-soft);color:var(--accent)}.im-ai-tools{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px;padding:0 14px 14px;border-bottom:1px solid var(--border)}.im-ai-tools button{min-height:36px;padding:7px 4px;border:1px solid var(--border);border-radius:var(--radius-small);background:var(--surface);color:var(--muted);font-size:12px;white-space:nowrap}.im-ai-tools button:enabled:hover,.im-ai-tools .im-ai-tool--selected{border-color:var(--border-strong);background:var(--accent-soft);color:var(--accent-hover)}.im-ai-tools .im-ai-tool--selected{font-weight:600}.im-ai-tool__saved{margin-left:3px;color:var(--success);font-weight:700}.im-ai-body{min-height:0;overflow-y:auto;padding:18px;overscroll-behavior:contain}.im-ai-body:focus-visible{outline:2px solid var(--accent-soft);outline-offset:-2px}.im-ai-empty{padding:16px 0}.im-ai-empty__line{display:block;width:28px;height:3px;margin-bottom:18px;border-radius:2px;background:var(--border-strong)}.im-ai-empty strong{color:var(--heading);font-size:14px;font-weight:600;line-height:1.6}.im-ai-empty p{margin:10px 0;color:var(--muted);font-size:13px;line-height:1.85}.im-ai-empty .im-ai-source{margin-top:26px;padding-top:14px;border-top:1px solid var(--border);font-size:11px}.im-ai-result-heading{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:6px;margin-bottom:10px}.im-ai-result-heading h3{margin:0;color:var(--heading);font-size:14px;font-weight:600}.im-ai-result-heading span{max-width:100%;color:var(--muted);font-size:10px;overflow-wrap:anywhere}.im-ai-status{margin:0 0 14px;color:var(--muted);font-size:12px;line-height:1.7;overflow-wrap:anywhere}.im-ai-status--error{padding:10px 12px;border-radius:var(--radius-small);color:var(--danger);background:var(--danger-soft)}.im-ai-text{margin:0;overflow-wrap:anywhere;font-size:14px;line-height:1.85}.im-ai-text :is(h1,h2,h3,h4,h5,h6){margin:20px 0 10px;padding-left:9px;border-left:3px solid var(--accent);color:var(--heading);font-size:14px;font-weight:700;line-height:1.65}.im-ai-text>:first-child{margin-top:0}.im-ai-text>:last-child{margin-bottom:0}.im-ai-text p{margin:0 0 12px}.im-ai-text strong{padding:1px 2px;border-radius:3px;background:var(--accent-soft);color:var(--heading);font-weight:700;-webkit-box-decoration-break:clone;box-decoration-break:clone}.im-ai-text .im-ai-metric-label{color:var(--accent-hover);font-weight:600}.im-ai-text .im-ai-metric-value{padding:1px 4px;border-radius:4px;background:#e8effb;color:#234c93;font-weight:700;font-variant-numeric:tabular-nums;-webkit-box-decoration-break:clone;box-decoration-break:clone}.im-ai-text :is(ul,ol){margin:10px 0 16px;padding-left:22px}.im-ai-text li{padding-left:2px;margin:7px 0}.im-ai-text li::marker{color:var(--accent);font-weight:600}.im-ai-text li>p{margin-bottom:6px}.im-ai-text li :is(ul,ol){margin-block:5px}.im-ai-text blockquote{margin:14px 0;padding:9px 12px;border-left:3px solid var(--border-strong);background:var(--surface-soft);color:var(--muted)}.im-ai-text blockquote>:last-child{margin-bottom:0}.im-ai-text code{padding:2px 4px;border-radius:4px;background:var(--surface-soft);color:var(--text);font-size:12px}.im-ai-text pre{margin:14px 0;padding:10px;border-radius:var(--radius-small);background:var(--surface-soft);white-space:pre-wrap;overflow-wrap:anywhere}.im-ai-text pre code{padding:0;background:none}.im-ai-text hr{margin:18px 0;border:0;border-top:1px solid var(--border)}.im-ai-text table{width:100%;margin:14px 0;border-collapse:collapse;table-layout:fixed;font-size:12px}.im-ai-text :is(th,td){padding:7px;border:1px solid var(--border);vertical-align:top;text-align:left}.im-ai-text th{background:var(--surface-soft);color:var(--heading);font-weight:600}.im-ai-loading{display:grid;gap:12px;margin:24px 0}.im-ai-loading span{height:8px;border-radius:4px;background:var(--surface-soft)}.im-ai-loading span:nth-child(2){width:86%}.im-ai-loading span:nth-child(3){width:62%}.im-ai-warnings{margin:18px 0 0;padding:12px 12px 12px 26px;border-radius:var(--radius-small);background:var(--surface-soft);color:var(--muted);font-size:11px;line-height:1.8;overflow-wrap:anywhere}.im-ai-warnings li+li{margin-top:6px}.im-ai-footer{border-top:1px solid var(--border);padding:12px 16px;background:var(--surface-alt)}.im-ai-footer p{margin:8px 0 0;color:var(--muted);font-size:11px;line-height:1.65}.im-ai-result-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.im-ai-result-actions:empty{display:none}.im-ai-result-actions button{min-height:34px;padding:7px 12px;border:1px solid var(--border-strong);border-radius:var(--radius-control);background:var(--surface);color:var(--text);font-size:12px}.im-ai-result-actions button:enabled:hover{border-color:var(--accent);color:var(--accent-hover)}.im-ai-result-actions .im-ai-apply{margin-left:auto;border-color:var(--accent);background:var(--accent);color:#fff;font-weight:600}.im-ai-result-actions .im-ai-apply:enabled:hover{background:var(--accent-hover);color:#fff}.video-layer{position:relative;display:grid;grid-template-columns:minmax(0,1fr);width:100%;height:100%;min-height:420px;overflow:hidden;color:#f7f8fa;background:#101720}.video-layer--with-rail{grid-template-columns:minmax(0,1fr) clamp(330px,31vw,380px)}.video-layer--overlay{position:fixed;z-index:1000;inset:0}.video-stage{position:relative;min-width:0;min-height:0;overflow:hidden;background:#101720}.call-kit,.video-layer :is(.TUICallKit-desktop,.TUICallKit-mobile,#tuicallkit-id){width:100%!important;height:100%!important;max-width:none!important;max-height:none!important}.status-card{position:absolute;inset:50% auto auto 50%;display:grid;grid-template-columns:12px minmax(0,1fr);gap:18px;width:min(520px,calc(100% - 48px));padding:30px 32px;transform:translate(-50%,-50%);border:1px solid var(--border);border-radius:var(--radius-panel);color:var(--text);background:var(--surface)}.eyebrow{margin:0 0 10px;color:var(--muted);font-size:12px;font-weight:600;letter-spacing:.02em}.status-card h2{margin:0;font-size:clamp(22px,2.4vw,28px);font-weight:600;line-height:1.25}.status-hint{margin:14px 0 0;color:var(--muted);font-size:14px}.status-dot{width:10px;height:10px;margin-top:5px;border-radius:50%;background:#77818c}.status-dot--starting,.status-dot--live{background:var(--success)}.status-dot--error{background:var(--danger)}.live-status{position:absolute;z-index:20;top:18px;left:50%;display:flex;align-items:center;gap:10px;padding:9px 14px;transform:translate(-50%);border:1px solid var(--border);border-radius:var(--radius-control);color:var(--text);background:var(--surface);font-size:13px}.live-status .status-dot{width:7px;height:7px;margin:0;box-shadow:none}.consultation-rail{position:relative;z-index:55;display:grid;grid-template-rows:auto minmax(0,1.08fr) minmax(0,.92fr);min-width:0;min-height:0;overflow:hidden;border-left:1px solid var(--border);color:var(--text);background:var(--surface-soft)}.consultation-rail__header{display:grid;grid-template-columns:42px minmax(0,1fr) auto;gap:11px;align-items:center;min-height:74px;padding:13px 16px;border-bottom:1px solid var(--border);background:#fff}.consultation-rail__avatar{display:grid;place-items:center;width:42px;height:42px;border-radius:var(--radius-control);color:#fff;background:var(--accent);font-size:17px;font-weight:700}.consultation-rail__identity{display:grid;gap:3px;min-width:0}.consultation-rail__identity strong{overflow:hidden;color:var(--text);font-size:16px;line-height:1.3;text-overflow:ellipsis;white-space:nowrap}.consultation-rail__identity span{overflow:hidden;color:var(--muted);font-size:11px;text-overflow:ellipsis;white-space:nowrap}.diagnosis-chip{padding:5px 7px;border-radius:var(--radius-small);color:var(--accent);background:var(--accent-soft);font-size:11px;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}.consultation-rail__actions{display:grid;flex:0 0 auto;justify-items:end;gap:5px}.open-diagnosis-button{display:inline-flex;align-items:center;gap:4px;min-height:28px;padding:5px 8px;border:1px solid var(--border-strong);border-radius:10px;color:var(--accent);background:#fff;font-size:11px;font-weight:700;white-space:nowrap}.open-diagnosis-button:enabled:hover{border-color:var(--accent);background:var(--accent-soft)}.case-panel,.transcript-panel{display:grid;grid-template-rows:auto minmax(0,1fr);min-height:0;overflow:hidden}.case-panel{border-bottom:1px solid var(--border)}.rail-section-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:48px;padding:10px 16px;border-bottom:1px solid var(--border);background:var(--surface)}.rail-section-heading>div{display:flex;align-items:center;gap:8px}.rail-section-heading h2{margin:0;color:var(--heading);font-size:14px;font-weight:700;letter-spacing:-.01em}.rail-section-heading>span{overflow:hidden;max-width:154px;color:var(--muted);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.rail-section-heading__index{color:var(--accent);font-family:Cascadia Mono,SFMono-Regular,Consolas,monospace;font-size:10px;font-weight:700}.case-panel__content,.live-captions{min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-color:#b9c3d5 transparent;scrollbar-width:thin}.case-panel__content{padding:5px 16px 14px}.case-field-list{display:grid}.case-field{display:grid;grid-template-columns:72px minmax(0,1fr);gap:10px;padding:10px 0;border-bottom:1px solid var(--border)}.case-field:last-child{border-bottom:0}.case-field>span{padding-top:2px;color:var(--muted);font-size:11px;font-weight:600}.case-field p{margin:0;color:var(--text);font-size:12px;line-height:1.55;overflow-wrap:anywhere;white-space:pre-wrap}.case-field--risk>span{color:var(--danger)}.case-field--risk p{color:var(--danger);font-weight:600}.live-captions{display:grid;align-content:start;gap:9px;padding:12px 14px 18px;background:var(--surface-soft)}.caption-entry{padding:10px 11px;border-left:2px solid var(--accent);border-radius:var(--radius-control);background:#fff}.caption-entry--partial{border-left-color:#9ca6b7;opacity:.78}.caption-entry header{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:5px}.caption-entry strong{color:var(--accent);font-size:11px}.caption-entry time{color:var(--muted);font-size:10px;font-variant-numeric:tabular-nums}.caption-entry p{margin:0;color:var(--text);font-size:13px;line-height:1.58;overflow-wrap:anywhere;white-space:pre-wrap}.transcript-state{position:relative;padding-left:12px}.transcript-state:before{position:absolute;top:50%;left:0;width:6px;height:6px;transform:translateY(-50%);border-radius:50%;background:#a5adbb;content:""}.transcript-state--active{color:var(--success)!important}.transcript-state--active:before{background:var(--success)}.rail-empty{display:grid;gap:5px;align-content:center;min-height:112px;padding:18px;color:var(--muted);text-align:center}.rail-empty strong{color:var(--text);font-size:12px}.rail-empty span{font-size:11px;line-height:1.55}.rail-empty--case{min-height:100%}.video-actions{position:absolute;z-index:40;right:22px;bottom:24px;display:flex;gap:10px}.video-actions button{padding:10px 15px;border-radius:var(--radius-control);font-weight:600}.recording-status{display:inline-flex;align-items:center;gap:8px;padding:10px 15px;border:1px solid var(--border);border-radius:var(--radius-control);color:var(--muted);background:var(--surface);font-size:13px;font-weight:600}.recording-status--active,.recording-status--error{border-color:#edccd3;color:var(--danger);background:var(--danger-soft)}.recording-indicator{width:9px;height:9px;border-radius:50%;background:var(--danger)}.hangup-button{border:1px solid var(--danger);color:#fff;background:var(--danger)}.hangup-button:enabled:hover{border-color:#a64454;background:#a64454}.video-notice{position:absolute;z-index:40;left:22px;bottom:26px;max-width:calc(100% - 420px);padding:9px 12px;border:1px solid #cae5dc;border-radius:var(--radius-control);color:var(--success);background:var(--success-soft);font-size:13px}.video-notice--error{border-color:#edccd3;color:var(--danger);background:var(--danger-soft)}.screenshot-dialog-backdrop{position:absolute;z-index:120;inset:0;display:grid;place-items:center;padding:24px;background:#101720a3}.screenshot-dialog{display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;gap:14px;width:min(920px,100%);height:min(840px,calc(100vh - 48px));max-height:calc(100vh - 48px);padding:20px;overflow:hidden;border:1px solid var(--border);border-radius:var(--radius-panel);color:var(--text);background:#fff;animation:screenshot-enter .16s var(--motion-ease)}.screenshot-dialog>header,.screenshot-dialog>footer{display:flex;align-items:center;justify-content:space-between;gap:16px}.screenshot-dialog h2{margin:2px 0 0;color:var(--heading);font-size:20px;line-height:1.35}.screenshot-dialog .eyebrow{margin:0;color:var(--accent)}.screenshot-dialog>header>button{width:36px;height:36px;border:0;border-radius:var(--radius-control);color:var(--muted);background:var(--surface-alt);font-size:24px}.screenshot-preview-frame{display:grid;place-items:center;min-height:0;overflow:hidden;border-radius:12px;background:#0b0f16}.screenshot-preview-frame img{display:block;width:100%;height:100%;min-height:0;max-width:100%;max-height:100%;object-fit:contain}.screenshot-dialog__hint{margin:0;color:var(--muted);font-size:13px}.screenshot-dialog>footer{justify-content:flex-end}.screenshot-dialog>footer button{min-width:112px;padding:10px 18px;border-radius:var(--radius-control);font-weight:700}.screenshot-cancel{border:1px solid var(--border);color:var(--text);background:#fff}.screenshot-confirm{border:1px solid var(--accent);color:#fff;background:var(--accent)}.screenshot-confirm:enabled:hover{background:var(--accent-hover)}@media (max-width: 980px){.consultation-shell--with-ai{grid-template-columns:minmax(0,1fr)}.composer-toolbar .im-ai-toggle{display:inline-flex;align-items:center;gap:3px}.im-ai-backdrop{position:fixed;z-index:800;inset:0;background:#22304733}.im-ai-panel{display:none;position:fixed;z-index:801;inset:0 0 0 auto;width:var(--im-ai-panel-width, min(360px, 100%))}.im-ai-resizer--drawer{left:-4px;background:transparent}.im-ai-panel--open{display:grid}.im-ai-close{display:block}.video-layer--with-rail{grid-template-columns:minmax(0,1fr) 310px}.video-actions{right:12px;bottom:14px;left:12px;flex-wrap:wrap;justify-content:flex-end}.recording-status{flex-basis:100%;width:fit-content;margin-left:auto;font-size:11px}.consultation-rail__header{padding-inline:12px}.diagnosis-chip{display:none}.case-panel__content,.rail-section-heading{padding-inline:12px}}@media (max-width: 700px){.chat-header{gap:10px;padding:10px 14px}.chat-heading h1{font-size:16px}.chat-heading p{font-size:11px}.primary-action{padding:9px 12px;font-size:12px}.secondary-action{padding:9px 10px;font-size:12px}.message-list{padding:14px}.message-bubble{max-width:88%}.composer{padding:8px 14px 12px}.composer-row{grid-template-columns:minmax(0,1fr) 68px;gap:10px}.video-layer,.video-stage{min-height:280px}.video-layer--with-rail{grid-template-columns:minmax(0,1fr)}.consultation-rail{display:none}.video-actions{right:10px;bottom:10px;left:auto;gap:6px}.recording-status{display:none}.video-actions button{padding:8px 11px;border-radius:10px;font-size:11px}.live-status{top:10px;padding:7px 10px;font-size:11px}.video-notice{left:10px;bottom:52px;max-width:calc(100% - 20px)}.screenshot-dialog-backdrop{padding:12px}.screenshot-dialog{height:calc(100vh - 24px);max-height:calc(100vh - 24px);padding:12px;gap:10px}.screenshot-dialog h2{font-size:16px}.screenshot-dialog>header>button{flex-shrink:0}}.load-more:enabled:hover,.screenshot-cancel:enabled:hover{border-color:var(--border-strong);background:var(--surface-soft)}.composer-toolbar button:enabled:hover{background:var(--accent-soft)}.screenshot-dialog>header>button:enabled:hover{color:var(--text);background:var(--border)}.message-file:hover{text-decoration:underline;text-underline-offset:3px}@keyframes screenshot-enter{0%{opacity:.8;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 480px){.patient-avatar{width:38px;height:38px;flex-shrink:0}.composer-toolbar>span{display:none}.screenshot-dialog__hint{font-size:11px}}@media (max-height: 480px){.im-ai-header{min-height:54px;padding:8px 14px}.im-ai-header p{display:none}.im-ai-tools{padding-bottom:8px}.im-ai-body{padding:12px 14px}.im-ai-empty{padding:0}.im-ai-empty__line{display:none}.im-ai-footer{padding:8px 14px}.im-ai-footer p{margin-top:5px;font-size:10px}.chat-panel{grid-template-rows:minmax(64px,auto) minmax(0,1fr) auto}.composer textarea{min-height:56px;height:56px;max-height:84px}}@media (prefers-reduced-motion: reduce){button,.composer textarea{transition:none}button:enabled:active{transform:none}.screenshot-dialog{animation:none}} diff --git a/app/video_companion/dist/assets/index-B4Apl_Sl.js b/app/video_companion/dist/assets/index-C_tMrPfb.js similarity index 58% rename from app/video_companion/dist/assets/index-B4Apl_Sl.js rename to app/video_companion/dist/assets/index-C_tMrPfb.js index cea6dbe22..3404d6492 100644 --- a/app/video_companion/dist/assets/index-B4Apl_Sl.js +++ b/app/video_companion/dist/assets/index-C_tMrPfb.js @@ -1,4 +1,4 @@ -(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const I of document.querySelectorAll('link[rel="modulepreload"]'))l(I);new MutationObserver(I=>{for(const h of I)if(h.type==="childList")for(const f of h.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&l(f)}).observe(document,{childList:!0,subtree:!0});function r(I){const h={};return I.integrity&&(h.integrity=I.integrity),I.referrerPolicy&&(h.referrerPolicy=I.referrerPolicy),I.crossOrigin==="use-credentials"?h.credentials="include":I.crossOrigin==="anonymous"?h.credentials="omit":h.credentials="same-origin",h}function l(I){if(I.ep)return;I.ep=!0;const h=r(I);fetch(I.href,h)}})();var mg=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function yW(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function kU(t){if(t.__esModule)return t;var i=t.default;if(typeof i=="function"){var r=function l(){return this instanceof l?Reflect.construct(i,arguments,this.constructor):i.apply(this,arguments)};r.prototype=i.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(t).forEach(function(l){var I=Object.getOwnPropertyDescriptor(t,l);Object.defineProperty(r,l,I.get?I:{enumerable:!0,get:function(){return t[l]}})}),r}var z1={exports:{}},HoA=z1.exports,r8;function qoA(){return r8||(r8=1,function(t,i){(function(r,l){t.exports=l()})(HoA,function(){const r=s=>s===void 0,l=s=>typeof s=="string",I=s=>{var n;return(n=Object.prototype.toString.call(s).match(/^\[object (.*)\]$/))===null||n===void 0?void 0:n[1].toLowerCase()},h=s=>typeof Array.isArray=="function"?Array.isArray(s):I(s)==="array",f=s=>s!==null&&typeof s=="object",w=s=>h(s)||f(s),_=s=>{if(typeof s!="string")return!1;const n=s[0];return!/[^a-zA-Z0-9]/.test(n)},G=s=>{if(typeof s!="object"||s===null)return!1;const n=Object.getPrototypeOf(s);if(n===null)return!0;let g=n;for(;Object.getPrototypeOf(g)!==null;)g=Object.getPrototypeOf(g);return n===g};function U(s=99999999){return Math.round(Math.random()*s)}const j=(s,n,g,u)=>{if(!w(s)||!w(n))return 0;let E=0;const m=Object.keys(n);let D;for(let M=0,T=m.length;M"u"&&typeof uni.requireNativePlugin=="function",io=Et&&typeof wx.miniapp=="object",Eo=typeof uni<"u",Vs=yt&&typeof tt.enterChat=="function",ki=Et||qe||yt||Oe||gt||To||Fi,ns=typeof window>"u"&&!ki&&typeof mg<"u"&&mg.NativeScriptGlobals!==void 0,jo=typeof mg<"u"&&(mg.nativeModuleProxy!==void 0||mg.ReactNative!==void 0),Ao=typeof wx<"u"&&typeof wx.getAccountInfoSync=="function"&&!!wx.getAccountInfoSync().plugin,Zt=typeof uni<"u"?!ki:typeof window<"u"&&!ki&&!jo,oo=qe?qq:yt?tt:Oe?swan:gt?my:Et?wx:To?uni:Fi?jd:{},bi=Zt&&window&&window.navigator&&window.navigator.userAgent||"",vs=/(micromessenger|webbrowser)/i.test(bi),HA=function(){let s="WEB";return vs?s="WEB":qe?s="QQ_MP":yt?s="TT_MP":Oe?s="BAIDU_MP":gt?s="ALI_MP":Et?s=io?"DONUT_NATIVE_APP":"WX_MP":To?s="UNI_NATIVE_APP":ns?s="NS_NATIVE_APP":jo&&(s="RN_NATIVE_APP"),sA[s]}(),ce=/iPad/i.test(bi),Ve=/iPhone/i.test(bi)&&!ce,Ot=/iPod/i.test(bi),nt=Ve||ce||Ot,It=function(){const s=bi.match(/OS (\d+)_/i);return s&&s[1]?s[1]:null}(),ei=/Android/i.test(bi),ti=function(){const s=bi.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);if(!s)return null;const n=s[1]&&parseFloat(s[1]),g=s[2]&&parseFloat(s[2]);return n&&g?parseFloat(`${s[1]}.${s[2]}`):n||null}(),be=/Firefox/i.test(bi),Ze=/Edge/i.test(bi),wt=!Ze&&/Chrome/i.test(bi),Nt=/MSIE/.test(bi)||bi.indexOf("Trident")>-1&&bi.indexOf("rv:11.0")>-1,Oi=function(){const s=/MSIE\s(\d+)\.\d/.exec(bi);let n=s&&parseFloat(s[1]);return!n&&/Trident\/7.0/i.test(bi)&&/rv:11.0/.test(bi)&&(n=11),n}(),po=/Safari/i.test(bi)&&!wt&&!ei&&!Ze,No=/Windows/i.test(bi),so=/MAC OS X/i.test(bi),Go=Zt&&typeof Worker<"u"&&!Nt,An=ei||nt,rn=function(){if(typeof window>"u"||window.navigator===void 0)return!1;const{standalone:s}=window.navigator;return!(!nt||s||po)}();function Es(){let s="unknown";if(so&&(s="mac"),No&&(s="windows"),nt&&(s="ios"),ei&&(s="android"),ki)try{const{platform:n}=oo.getSystemInfoSync();n!==void 0&&(s=n)}catch(n){console.error(n)}return s}const an=typeof process<"u"&&process.versions!==void 0&&process.versions.node!==void 0&&typeof window>"u";function Do(s,n){var g={};for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&n.indexOf(u)<0&&(g[u]=s[u]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function"){var E=0;for(u=Object.getOwnPropertySymbols(s);E{oo.request({url:g,data:u,method:n,timeout:E,header:{"content-type":zr},success:M=>m(M.data),fail:()=>D(new Error(`{"message":"Network error","code":${Jn}}`))})}):an?void 0:new Promise((m,D)=>{const M=new XMLHttpRequest,T=setTimeout(()=>{M.abort(),D(new Error(`{"message":"Request timeout","code":${Qr}}`))},E);M.onreadystatechange=function(){if(M.readyState===4)if(clearTimeout(T),M.status===200||M.status===304)try{m(M.responseText?JSON.parse(M.responseText):null)}catch{m(M.responseText)}else D(new Error(`{"message":"Network error","code":${Jn}}`))},M.open(n,g,!0),M.setRequestHeader("Content-type",zr),M.send(u||null)})})}function Rs(s){if(s==null)return!0;if(typeof s=="boolean")return!1;if(typeof s=="number")return s===0;if(typeof s=="string"||typeof s=="function"||Array.isArray(s))return s.length===0;if(s instanceof Error)return s.message==="";if(G(s)){for(const n in s)if(Object.prototype.hasOwnProperty.call(s,n))return!1;return!0}return(Object.prototype.toString.call(s)==="[object Map]"||Object.prototype.toString.call(s)==="[object Set]"||Object.prototype.toString.call(s)==="[object File]")&&s.size===0}function or(s,n){if(s===null||typeof s!="object")return s;const g=n||new WeakMap;if(g.has(s))return g.get(s);if(s instanceof Date)return new Date(s.getTime());if(s instanceof RegExp)return new RegExp(s.source,s.flags);if(s instanceof Map){const m=new Map;return g.set(s,m),s.forEach((D,M)=>{m.set(or(M,g),or(D,g))}),m}if(s instanceof Set){const m=new Set;return g.set(s,m),s.forEach(D=>{m.add(or(D,g))}),m}if(Array.isArray(s)){const m=[];return g.set(s,m),s.forEach(D=>{m.push(or(D,g))}),m}const u=Object.getPrototypeOf(s),E=Object.create(u);return g.set(s,E),[...Object.getOwnPropertyNames(s),...Object.getOwnPropertySymbols(s)].forEach(m=>{if(m==="__ob__"||m==="__v_skip"||m==="__v_isRef"||m==="__v_isReadonly")return;const D=Object.getOwnPropertyDescriptor(s,m);D&&(D.get||D.set?Object.defineProperty(E,m,D):E[m]=or(s[m],g))}),E}function en(s,n,g){const u=new WeakSet,E=(m,D)=>{if(n&&(D=n(m,D)),D===void 0)return"undefined";if(D===null)return null;if(Number.isNaN(D))return"NaN";if(D===1/0)return"Infinity";if(D===-1/0)return"-Infinity";if(typeof D=="function")return`[Function: ${D.name||"anonymous"}]`;if(typeof D=="symbol")return D.toString();if(typeof D=="bigint")return`${D.toString()}n`;if(typeof D=="object"&&D!==null){if(u.has(D))return"[Circular]";u.add(D)}return D instanceof Date?D.toISOString():D instanceof Error?{name:D.name,message:D.message}:D instanceof Map?{dataType:"Map",value:Array.from(D.entries())}:D instanceof Set?{dataType:"Set",value:Array.from(D.values())}:D};try{return JSON.stringify(s,E,g)}catch(m){return console.error("Failed to stringify:",m),""}}function wn(){let s,n;return{promise:new Promise((g,u)=>{s=g,n=u}),resolve:s,reject:n}}var qt,yg=Object.freeze({__proto__:null,ANDROID_VERSION:ti,IE_VERSION:Oi,IN_ALIPAY_MINI_APP:gt,IN_BAIDU_MINI_APP:Oe,IN_BROWSER:Zt,IN_DONUT_NATIVE_APP:io,IN_FEISHU_MINI_APP:Vs,IN_JD_MINI_APP:Fi,IN_MINI_APP:ki,IN_NODE:an,IN_NS_NATIVE_APP:ns,IN_QQ_MINI_APP:qe,IN_RN_APP:jo,IN_TT_MINI_APP:yt,IN_TT_MINI_GAME:Me,IN_UNI_APP:Eo,IN_UNI_NATIVE_APP:To,IN_WX_MINI_APP:Et,IN_WX_MINI_APP_DESK:jt,IN_WX_MINI_GAME:re,IN_WX_MINI_PLUGIN:Ao,IOS_VERSION:It,IS_ANDROID:ei,IS_CHROME:wt,IS_EDGE:Ze,IS_FIREFOX:be,IS_IE:Nt,IS_IOS:nt,IS_IPAD:ce,IS_IPHONE:Ve,IS_IPOD:Ot,IS_MAC:so,IS_SAFARI:po,IS_WECHAT:vs,IS_WIN:No,IS_WORKER_AVAILABLE:Go,MINI_APP_NAMESPACE:oo,USER_AGENT:bi,base16EncodeBinaryString:lA,deepCopyWithMethods:or,deepMerge:j,generatePromise:wn,getPlatformType:Es,getType:I,httpRequest:Pi,isArray:h,isArrayOrObject:w,isEmpty:Rs,isH5:An,isIOSWebView:rn,isNumber:s=>s!==null&&(typeof s=="number"&&!Number.isNaN(s-0)||typeof s=="object"&&s.constructor===Number),isObject:f,isPlainObject:G,isString:l,isUndefined:r,isUniIOSApp:function(){return To&&uni.getDeviceInfo().platform.toLocaleLowerCase()==="ios"},isValidRequestKey:_,platform:HA,randomInt:U,randomString:function(){const s="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";let n="";for(let g=32;g>0;--g)n+=s[Math.floor(62*Math.random())];return n},safeStringify:en});class On{constructor(){this.listeners={}}on(n,g,u){this.listeners[n]||(this.listeners[n]=[]),this.listeners[n].push({fn:g,context:u})}off(n,g,u){var E;g&&(this.listeners[n]=(E=this.listeners[n])===null||E===void 0?void 0:E.filter(m=>{const D=m.fn===g,M=!u||m.context===u;return!(D&&M)}))}emit(n,...g){const u=this.listeners[n];u&&u.forEach(E=>{const{fn:m,context:D}=E;try{m.apply(D,g)}catch(M){console.warn(`Error in event handler for ${n} error: ${en(M)}`)}})}once(n,g,u){const E=(...m)=>{g.apply(u,m),this.off(n,E)};this.on(n,E)}}(function(s){s.BUSINESS_COMMAND="business_command",s.C2C_REALTIME_MESSAGE="c2c_realtime_message",s.C2C_MESSAGE_MODIFIED="c2c_message_modified",s.C2C_REVOKED_MESSAGE="c2c_message_revoked",s.GROUP_REALTIME_MESSAGE="group_realtime_message",s.GROUP_MESSAGE_MODIFIED="group_message_modified",s.GROUP_MESSAGE_REVOKED="group_message_revoked",s.C2C_MESSAGE_READ_RECEIPT="c2c_message_read_receipt",s.MESSAGE_REACTION_UPDATED="message_reaction_updated",s.MESSAGE_REACTION_UPDATED_SYNC="message_reaction_updated_sync",s.GROUP_AT_TIPS="group_at_tips",s.USER_STATUS_UPDATE="user_status_update",s.FRIEND_LIST_MODIFIED="friend_list_modified",s.PROFILE_MODIFIED="profile_modified",s.CONV_MODIFIED="conversation_modified",s.GROUP_TIPS_NOTIFICATION="group_tips_notification",s.GROUP_MESSAGE_READ_RECEIPT="group_message_read_receipt",s.GROUP_MESSAGE_READ_SYNC="group_message_read_sync",s.GROUP_SYSTEM_NOTIFICATION="group_system_notification",s.C2C_MESSAGE_PEER_READ="c2c_message_peer_read",s.C2C_MESSAGE_READ_SYNC="c2c_message_read_sync",s.C2C_REMIND_TYPE_SYNC="c2c_remind_type_sync",s.FOLLOW_LIST_UPDATED="follow_list_updated",s.MESSAGE_EXTENSIONS_UPDATED="message_extensions_updated",s.ALL_MESSAGE_READ="all_message_read",s.CONVERSATION_MARK_UPDATED="conversation_mark_updated",s.CONVERSATION_GROUP_ADD="conversation_group_add",s.CONVERSATION_GROUP_DELETED="conversation_group_deleted",s.CONVERSATION_GROUP_UPDATED="conversation_group_updated",s.ALL_RECEIVE_MESSAGE_OPTION="all_receive_message_option",s.TOPIC_AT_TIPS="topic_at_tips",s.TOPIC_TIPS_NOTIFICATION="topic_tips_notification",s.TOPIC_SYSTEM_NOTIFICATION="topic_system_notification",s.TOPIC_MESSAGE_READ_SYNC="topic_message_read_sync",s.TOPIC_LATEST_MESSAGE="topic_latest_message",s.GROUP_MESSAGE_PINNED="group_message_pinned"})(qt||(qt={}));const Gn=[16,17];function Js(s){var n;const g=[];return(n=s?.GroupTips)===null||n===void 0||n.forEach(u=>{var E;u.GroupInfo.MillionGroupFlag===2?g.push(qt.TOPIC_TIPS_NOTIFICATION):Gn.includes((E=u?.MsgBody)===null||E===void 0?void 0:E.OpType)?g.push(qt.GROUP_MESSAGE_PINNED):g.push(qt.GROUP_TIPS_NOTIFICATION)}),g}const pr=[{conditions:[{type:"event",value:100}],subType:qt.BUSINESS_COMMAND},{conditions:[{type:"event",value:24}],subType:qt.ALL_RECEIVE_MESSAGE_OPTION},{conditions:[{type:"event",value:26}],subType:qt.TOPIC_LATEST_MESSAGE},{conditions:[{type:"hasKey",value:"C2cMsgArray"}],subType:qt.C2C_REALTIME_MESSAGE},{conditions:[{type:"hasKey",value:"C2cMsgModNotifys"}],subType:qt.C2C_MESSAGE_MODIFIED},{conditions:[{type:"hasKey",value:"ProfileDataMod"}],subType:qt.PROFILE_MODIFIED},{conditions:[{type:"hasKey",value:"UserStatusList"}],subType:qt.USER_STATUS_UPDATE},{conditions:[{type:"hasKey",value:"FriendListMod"}],subType:qt.FRIEND_LIST_MODIFIED},{conditions:[{type:"hasKey",value:"GroupMsgArray"}],subType:qt.GROUP_REALTIME_MESSAGE},{conditions:[{type:"hasKey",value:"GroupMsgModNotifys"}],subType:qt.GROUP_MESSAGE_MODIFIED},{conditions:[{type:"hasKey",value:"C2cNotifyMsgArray"}],subTypeParser:function(s){var n;const g=[];return(n=s?.C2cNotifyMsgArray)===null||n===void 0||n.forEach(u=>{u.WithdrawC2cMsgNotify&&g.push(qt.C2C_REVOKED_MESSAGE),u.C2cReadedReceipt&&g.push(qt.C2C_MESSAGE_PEER_READ),u.ReadC2cMsgNotify&&g.push(qt.C2C_MESSAGE_READ_SYNC),u.MuteNotificationsSync&&g.push(qt.C2C_REMIND_TYPE_SYNC)}),g}},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:4}],subTypeParser:Js},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:5}],subTypeParser:function(s){var n;const g=[];return(n=s?.GroupTips)===null||n===void 0||n.forEach(u=>{Array.isArray(u.MsgBody.GroupWithdrawInfoArray)?g.push(qt.GROUP_MESSAGE_REVOKED):Array.isArray(u.MsgBody.GroupMsgReceiptList)?g.push(qt.GROUP_MESSAGE_READ_RECEIPT):Array.isArray(u.MsgBody.GroupReadInfoArray)?u.MsgBody.GroupReadInfoArray[0].TopicId?g.push(qt.TOPIC_MESSAGE_READ_SYNC):g.push(qt.GROUP_MESSAGE_READ_SYNC):u.GroupInfo.MillionGroupFlag===2?g.push(qt.TOPIC_SYSTEM_NOTIFICATION):g.push(qt.GROUP_SYSTEM_NOTIFICATION)}),g}},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:6}],subTypeParser:Js},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:12}],subTypeParser:function(s){var n;const g=[];return(n=s?.GroupTips)===null||n===void 0||n.forEach(u=>{const{GroupAtTips:{TopicId:E}}=u;E?g.push(qt.TOPIC_AT_TIPS):g.push(qt.GROUP_AT_TIPS)}),g}},{conditions:[{type:"hasKey",value:"RecentContactMod"}],subTypeParser:function(s){var n;const g=[];return(n=s?.RecentContactMod)===null||n===void 0||n.forEach(u=>{switch(u.PushType){case je.CONV_MARK_UPDATED:g.push(qt.CONVERSATION_MARK_UPDATED);break;case je.CONV_GROUP_ADDED:g.push(qt.CONVERSATION_GROUP_ADD);break;case je.CONV_GROUP_DELETED:g.push(qt.CONVERSATION_GROUP_DELETED);break;case je.CONV_GROUP_UPDATED:g.push(qt.CONVERSATION_GROUP_UPDATED);break;default:g.push(qt.CONV_MODIFIED)}}),g}},{conditions:[{type:"hasKey",value:"MsgReactionNotifyList"}],subType:qt.MESSAGE_REACTION_UPDATED},{conditions:[{type:"hasKey",value:"MsgReactionNotify"}],subType:qt.MESSAGE_REACTION_UPDATED_SYNC},{conditions:[{type:"hasKey",value:"C2cMsgInfo"}],subType:qt.C2C_MESSAGE_READ_RECEIPT},{conditions:[{type:"hasKey",value:"FollowChangeList"}],subType:qt.FOLLOW_LIST_UPDATED},{conditions:[{type:"hasKey",value:"MsgExtensionNotify"}],subType:qt.MESSAGE_EXTENSIONS_UPDATED},{conditions:[{type:"hasKey",value:"C2CReadAllMsg"}],subType:qt.ALL_MESSAGE_READ}];var Pn;function mr(s){var n;const g=Array.isArray((n=s?.body)===null||n===void 0?void 0:n.EventArray)?s.body.EventArray:[],u=[];return g.forEach(E=>{E.Flag=s.body.Flag;const m=pr.find(M=>M.conditions.every(T=>{switch(T.type){case"event":return E.Event===T.value;case"hasKey":return Object.prototype.hasOwnProperty.call(E,T.value);default:return!1}}));if(!m)return null;let D=[];typeof m.subTypeParser=="function"?D=m.subTypeParser(E):m.subType&&(D=m.subType),Array.isArray(D)?D.forEach(M=>{u.push({type:`${Pn.SERVER_PUSH_MESSAGE}:${M}`,data:E})}):u.push({type:`${Pn.SERVER_PUSH_MESSAGE}:${D}`,data:E})}),u}(function(s){s.SERVER_PUSH_MESSAGE="im_open_push.msg_push",s.SERVER_PUSH_MESSAGE_MULTIPLE="im_open_push.multi_msg_push_ws",s.ERROR="error"})(Pn||(Pn={}));const mo={[Pn.SERVER_PUSH_MESSAGE]:mr,[Pn.SERVER_PUSH_MESSAGE_MULTIPLE]:mr,[Pn.ERROR]:function(s){const{errorCode:n}=s;return[{type:`error:${n}`,data:s}]}},gn=new class{constructor(){this._outerEventEmitter=null,this._innerEventEmitter=null,this._filteredCallbackMap=new Map,this._outerEventEmitter=new On,this._innerEventEmitter=new On,this.InnerEventSubType=qt}subscribeInnerEvent(s,n,g,u,E){var m;let D,M,T,P;["string","number"].includes(typeof n)?(T=`${s}:${n}`,P=g,M=u,D=E):(T=s,P=n,M=g,D=typeof u=="function"?u:void 0),D?this._subscribeWithFilter(T,P,M,D):(m=this._innerEventEmitter)===null||m===void 0||m.on(T,P,M)}emitInnerEvent(s,n){var g,u;if((g=this._innerEventEmitter)===null||g===void 0||g.emit(s,n),Object.keys(mo).includes(s)){const E=(u=mo[s])===null||u===void 0?void 0:u.call(mo,n);E?.forEach(m=>{var D;m&&((D=this._innerEventEmitter)===null||D===void 0||D.emit(m.type,m.data))})}}subscribeOuterEvent(s,n,g){var u;(u=this._outerEventEmitter)===null||u===void 0||u.on(s,n,g)}unSubscribeOuterEvent(s,n,g){var u;(u=this._outerEventEmitter)===null||u===void 0||u.off(s,n,g)}unSubscribeInnerEvent(s,n,g,u){if(["string","number"].includes(typeof n)){const E=g,m=`${s}:${n}`;this._unsubscribeEvent(m,E,u)}else{const E=n;this._unsubscribeEvent(s,E,g)}}emitOuterEvent(s,n){var g;(g=this._outerEventEmitter)===null||g===void 0||g.emit(s,n)}getOuterEventEmitter(){return this._outerEventEmitter}rest(){this._outerEventEmitter=null,this._innerEventEmitter=null}_subscribeWithFilter(s,n,g,u){var E;const m=D=>{u.call(g,D)&&n.call(g,D)};this._filteredCallbackMap.has(s)||this._filteredCallbackMap.set(s,[]),this._filteredCallbackMap.get(s).push({originalCallback:n,filteredCallback:m,filter:u,context:g}),(E=this._innerEventEmitter)===null||E===void 0||E.on(s,m,g)}_unsubscribeEvent(s,n,g){var u,E;const m=this._filteredCallbackMap.get(s);if(m){const D=m.findIndex(M=>M.originalCallback===n&&M.context===g);if(D!==-1){const{filteredCallback:M}=m[D];return(u=this._innerEventEmitter)===null||u===void 0||u.off(s,M,g),m.splice(D,1),void(m.length===0&&this._filteredCallbackMap.delete(s))}}(E=this._innerEventEmitter)===null||E===void 0||E.off(s,n,g)}};class Sl{constructor(){this._socket=null}connectSocket(n){return this._socket=new WebSocket(n),this._socket}send(n){var g,u;try{(g=this._socket)===null||g===void 0||g.send(n)}catch(E){(u=this._onSendFail)===null||u===void 0||u.call(this,E)}}bindSocketHandlers(n){const{onOpen:g,onMessage:u,onClose:E,onError:m,onSendFail:D}=n;this._socket&&(this._socket.binaryType="arraybuffer",this._socket.onopen=g,this._socket.onmessage=u,this._socket.onclose=E,this._socket.onerror=m,this._onSendFail=D)}unbindSocketHandlers(){this._socket&&(this._socket.onopen=null,this._socket.onmessage=null,this._socket.onclose=null,this._socket.onerror=null)}disconnect(){this._socket&&(this._socket.close(),this._socket=null)}}class cn{constructor(n){this._onError=n.onError}connectSocket(n){const g=this;return this._socket=oo.connectSocket({url:n,header:{"content-type":"application/json"},complete:()=>{},fail:u=>g._onError(u)}),this._socket}send(n){var g;(g=this._socket)===null||g===void 0||g.send({data:n,fail:this._onSendFail})}bindSocketHandlers(n){const{onOpen:g,onMessage:u,onClose:E,onError:m,onSendFail:D}=n;this._socket&&(this._socket.onClose(E),this._socket.onOpen(g),this._socket.onMessage(u),this._socket.onError(m),this._onSendFail=D)}unbindSocketHandlers(){this._socket&&(this._socket.onClose(()=>{}),this._socket.onOpen(()=>{}),this._socket.onMessage(()=>{}),this._socket.onError(()=>{}))}disconnect(){this._socket&&(this._socket.close(),this._socket=null)}}const fr="CONNECT",Ls="SEND",Jc="DISCONNECT",ms="OPEN",as="MESSAGE",Ru="CLOSE",Wa="ERROR",Cs="SEND_FAIL";class sg{constructor(){this._worker=null,this._blobUrl=null}connectSocket(n){const g=new Blob([` +(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const I of document.querySelectorAll('link[rel="modulepreload"]'))c(I);new MutationObserver(I=>{for(const C of I)if(C.type==="childList")for(const f of C.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&c(f)}).observe(document,{childList:!0,subtree:!0});function n(I){const C={};return I.integrity&&(C.integrity=I.integrity),I.referrerPolicy&&(C.referrerPolicy=I.referrerPolicy),I.crossOrigin==="use-credentials"?C.credentials="include":I.crossOrigin==="anonymous"?C.credentials="omit":C.credentials="same-origin",C}function c(I){if(I.ep)return;I.ep=!0;const C=n(I);fetch(I.href,C)}})();var mg=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function HW(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function HU(t){if(t.__esModule)return t;var i=t.default;if(typeof i=="function"){var n=function c(){return this instanceof c?Reflect.construct(i,arguments,this.constructor):i.apply(this,arguments)};n.prototype=i.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(t).forEach(function(c){var I=Object.getOwnPropertyDescriptor(t,c);Object.defineProperty(n,c,I.get?I:{enumerable:!0,get:function(){return t[c]}})}),n}var aY={exports:{}},psA=aY.exports,_8;function msA(){return _8||(_8=1,function(t,i){(function(n,c){t.exports=c()})(psA,function(){const n=s=>s===void 0,c=s=>typeof s=="string",I=s=>{var r;return(r=Object.prototype.toString.call(s).match(/^\[object (.*)\]$/))===null||r===void 0?void 0:r[1].toLowerCase()},C=s=>typeof Array.isArray=="function"?Array.isArray(s):I(s)==="array",f=s=>s!==null&&typeof s=="object",w=s=>C(s)||f(s),_=s=>{if(typeof s!="string")return!1;const r=s[0];return!/[^a-zA-Z0-9]/.test(r)},N=s=>{if(typeof s!="object"||s===null)return!1;const r=Object.getPrototypeOf(s);if(r===null)return!0;let g=r;for(;Object.getPrototypeOf(g)!==null;)g=Object.getPrototypeOf(g);return r===g};function L(s=99999999){return Math.round(Math.random()*s)}const q=(s,r,g,u)=>{if(!w(s)||!w(r))return 0;let E=0;const m=Object.keys(r);let D;for(let M=0,T=m.length;M"u"&&typeof uni.requireNativePlugin=="function",to=ct&&typeof wx.miniapp=="object",so=typeof uni<"u",ks=Dt&&typeof tt.enterChat=="function",Gi=ct||Ve||Dt||Pt||oi||Co||Ni,As=typeof window>"u"&&!Gi&&typeof mg<"u"&&mg.NativeScriptGlobals!==void 0,Lo=typeof mg<"u"&&(mg.nativeModuleProxy!==void 0||mg.ReactNative!==void 0),$i=typeof wx<"u"&&typeof wx.getAccountInfoSync=="function"&&!!wx.getAccountInfoSync().plugin,zt=typeof uni<"u"?!Gi:typeof window<"u"&&!Gi&&!Lo,Ao=Ve?qq:Dt?tt:Pt?swan:oi?my:ct?wx:Co?uni:Ni?jd:{},Ri=zt&&window&&window.navigator&&window.navigator.userAgent||"",Es=/(micromessenger|webbrowser)/i.test(Ri),VA=function(){let s="WEB";return Es?s="WEB":Ve?s="QQ_MP":Dt?s="TT_MP":Pt?s="BAIDU_MP":oi?s="ALI_MP":ct?s=to?"DONUT_NATIVE_APP":"WX_MP":Co?s="UNI_NATIVE_APP":As?s="NS_NATIVE_APP":Lo&&(s="RN_NATIVE_APP"),tA[s]}(),Ee=/iPad/i.test(Ri),Je=/iPhone/i.test(Ri)&&!Ee,Ut=/iPod/i.test(Ri),ot=Je||Ee||Ut,ut=function(){const s=Ri.match(/OS (\d+)_/i);return s&&s[1]?s[1]:null}(),$t=/Android/i.test(Ri),Zt=function(){const s=Ri.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);if(!s)return null;const r=s[1]&&parseFloat(s[1]),g=s[2]&&parseFloat(s[2]);return r&&g?parseFloat(`${s[1]}.${s[2]}`):r||null}(),Ge=/Firefox/i.test(Ri),Xe=/Edge/i.test(Ri),se=!Xe&&/Chrome/i.test(Ri),ve=/MSIE/.test(Ri)||Ri.indexOf("Trident")>-1&&Ri.indexOf("rv:11.0")>-1,pt=function(){const s=/MSIE\s(\d+)\.\d/.exec(Ri);let r=s&&parseFloat(s[1]);return!r&&/Trident\/7.0/i.test(Ri)&&/rv:11.0/.test(Ri)&&(r=11),r}(),mo=/Safari/i.test(Ri)&&!se&&!$t&&!Xe,No=/Windows/i.test(Ri),no=/MAC OS X/i.test(Ri),Go=zt&&typeof Worker<"u"&&!ve,An=$t||ot,rn=function(){if(typeof window>"u"||window.navigator===void 0)return!1;const{standalone:s}=window.navigator;return!(!ot||s||mo)}();function ds(){let s="unknown";if(no&&(s="mac"),No&&(s="windows"),ot&&(s="ios"),$t&&(s="android"),Gi)try{const{platform:r}=Ao.getSystemInfoSync();r!==void 0&&(s=r)}catch(r){console.error(r)}return s}const an=typeof process<"u"&&process.versions!==void 0&&process.versions.node!==void 0&&typeof window>"u";function So(s,r){var g={};for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&r.indexOf(u)<0&&(g[u]=s[u]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function"){var E=0;for(u=Object.getOwnPropertySymbols(s);E{Ao.request({url:g,data:u,method:r,timeout:E,header:{"content-type":Zr},success:M=>m(M.data),fail:()=>D(new Error(`{"message":"Network error","code":${qn}}`))})}):an?void 0:new Promise((m,D)=>{const M=new XMLHttpRequest,T=setTimeout(()=>{M.abort(),D(new Error(`{"message":"Request timeout","code":${mr}}`))},E);M.onreadystatechange=function(){if(M.readyState===4)if(clearTimeout(T),M.status===200||M.status===304)try{m(M.responseText?JSON.parse(M.responseText):null)}catch{m(M.responseText)}else D(new Error(`{"message":"Network error","code":${qn}}`))},M.open(r,g,!0),M.setRequestHeader("Content-type",Zr),M.send(u||null)})})}function Rs(s){if(s==null)return!0;if(typeof s=="boolean")return!1;if(typeof s=="number")return s===0;if(typeof s=="string"||typeof s=="function"||Array.isArray(s))return s.length===0;if(s instanceof Error)return s.message==="";if(N(s)){for(const r in s)if(Object.prototype.hasOwnProperty.call(s,r))return!1;return!0}return(Object.prototype.toString.call(s)==="[object Map]"||Object.prototype.toString.call(s)==="[object Set]"||Object.prototype.toString.call(s)==="[object File]")&&s.size===0}function rr(s,r){if(s===null||typeof s!="object")return s;const g=r||new WeakMap;if(g.has(s))return g.get(s);if(s instanceof Date)return new Date(s.getTime());if(s instanceof RegExp)return new RegExp(s.source,s.flags);if(s instanceof Map){const m=new Map;return g.set(s,m),s.forEach((D,M)=>{m.set(rr(M,g),rr(D,g))}),m}if(s instanceof Set){const m=new Set;return g.set(s,m),s.forEach(D=>{m.add(rr(D,g))}),m}if(Array.isArray(s)){const m=[];return g.set(s,m),s.forEach(D=>{m.push(rr(D,g))}),m}const u=Object.getPrototypeOf(s),E=Object.create(u);return g.set(s,E),[...Object.getOwnPropertyNames(s),...Object.getOwnPropertySymbols(s)].forEach(m=>{if(m==="__ob__"||m==="__v_skip"||m==="__v_isRef"||m==="__v_isReadonly")return;const D=Object.getOwnPropertyDescriptor(s,m);D&&(D.get||D.set?Object.defineProperty(E,m,D):E[m]=rr(s[m],g))}),E}function en(s,r,g){const u=new WeakSet,E=(m,D)=>{if(r&&(D=r(m,D)),D===void 0)return"undefined";if(D===null)return null;if(Number.isNaN(D))return"NaN";if(D===1/0)return"Infinity";if(D===-1/0)return"-Infinity";if(typeof D=="function")return`[Function: ${D.name||"anonymous"}]`;if(typeof D=="symbol")return D.toString();if(typeof D=="bigint")return`${D.toString()}n`;if(typeof D=="object"&&D!==null){if(u.has(D))return"[Circular]";u.add(D)}return D instanceof Date?D.toISOString():D instanceof Error?{name:D.name,message:D.message}:D instanceof Map?{dataType:"Map",value:Array.from(D.entries())}:D instanceof Set?{dataType:"Set",value:Array.from(D.values())}:D};try{return JSON.stringify(s,E,g)}catch(m){return console.error("Failed to stringify:",m),""}}function wn(){let s,r;return{promise:new Promise((g,u)=>{s=g,r=u}),resolve:s,reject:r}}var jt,yg=Object.freeze({__proto__:null,ANDROID_VERSION:Zt,IE_VERSION:pt,IN_ALIPAY_MINI_APP:oi,IN_BAIDU_MINI_APP:Pt,IN_BROWSER:zt,IN_DONUT_NATIVE_APP:to,IN_FEISHU_MINI_APP:ks,IN_JD_MINI_APP:Ni,IN_MINI_APP:Gi,IN_NODE:an,IN_NS_NATIVE_APP:As,IN_QQ_MINI_APP:Ve,IN_RN_APP:Lo,IN_TT_MINI_APP:Dt,IN_TT_MINI_GAME:ti,IN_UNI_APP:so,IN_UNI_NATIVE_APP:Co,IN_WX_MINI_APP:ct,IN_WX_MINI_APP_DESK:wt,IN_WX_MINI_GAME:ce,IN_WX_MINI_PLUGIN:$i,IOS_VERSION:ut,IS_ANDROID:$t,IS_CHROME:se,IS_EDGE:Xe,IS_FIREFOX:Ge,IS_IE:ve,IS_IOS:ot,IS_IPAD:Ee,IS_IPHONE:Je,IS_IPOD:Ut,IS_MAC:no,IS_SAFARI:mo,IS_WECHAT:Es,IS_WIN:No,IS_WORKER_AVAILABLE:Go,MINI_APP_NAMESPACE:Ao,USER_AGENT:Ri,base16EncodeBinaryString:lA,deepCopyWithMethods:rr,deepMerge:q,generatePromise:wn,getPlatformType:ds,getType:I,httpRequest:Yi,isArray:C,isArrayOrObject:w,isEmpty:Rs,isH5:An,isIOSWebView:rn,isNumber:s=>s!==null&&(typeof s=="number"&&!Number.isNaN(s-0)||typeof s=="object"&&s.constructor===Number),isObject:f,isPlainObject:N,isString:c,isUndefined:n,isUniIOSApp:function(){return Co&&uni.getDeviceInfo().platform.toLocaleLowerCase()==="ios"},isValidRequestKey:_,platform:VA,randomInt:L,randomString:function(){const s="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";let r="";for(let g=32;g>0;--g)r+=s[Math.floor(62*Math.random())];return r},safeStringify:en});class Pn{constructor(){this.listeners={}}on(r,g,u){this.listeners[r]||(this.listeners[r]=[]),this.listeners[r].push({fn:g,context:u})}off(r,g,u){var E;g&&(this.listeners[r]=(E=this.listeners[r])===null||E===void 0?void 0:E.filter(m=>{const D=m.fn===g,M=!u||m.context===u;return!(D&&M)}))}emit(r,...g){const u=this.listeners[r];u&&u.forEach(E=>{const{fn:m,context:D}=E;try{m.apply(D,g)}catch(M){console.warn(`Error in event handler for ${r} error: ${en(M)}`)}})}once(r,g,u){const E=(...m)=>{g.apply(u,m),this.off(r,E)};this.on(r,E)}}(function(s){s.BUSINESS_COMMAND="business_command",s.C2C_REALTIME_MESSAGE="c2c_realtime_message",s.C2C_MESSAGE_MODIFIED="c2c_message_modified",s.C2C_REVOKED_MESSAGE="c2c_message_revoked",s.GROUP_REALTIME_MESSAGE="group_realtime_message",s.GROUP_MESSAGE_MODIFIED="group_message_modified",s.GROUP_MESSAGE_REVOKED="group_message_revoked",s.C2C_MESSAGE_READ_RECEIPT="c2c_message_read_receipt",s.MESSAGE_REACTION_UPDATED="message_reaction_updated",s.MESSAGE_REACTION_UPDATED_SYNC="message_reaction_updated_sync",s.GROUP_AT_TIPS="group_at_tips",s.USER_STATUS_UPDATE="user_status_update",s.FRIEND_LIST_MODIFIED="friend_list_modified",s.PROFILE_MODIFIED="profile_modified",s.CONV_MODIFIED="conversation_modified",s.GROUP_TIPS_NOTIFICATION="group_tips_notification",s.GROUP_MESSAGE_READ_RECEIPT="group_message_read_receipt",s.GROUP_MESSAGE_READ_SYNC="group_message_read_sync",s.GROUP_SYSTEM_NOTIFICATION="group_system_notification",s.C2C_MESSAGE_PEER_READ="c2c_message_peer_read",s.C2C_MESSAGE_READ_SYNC="c2c_message_read_sync",s.C2C_REMIND_TYPE_SYNC="c2c_remind_type_sync",s.FOLLOW_LIST_UPDATED="follow_list_updated",s.MESSAGE_EXTENSIONS_UPDATED="message_extensions_updated",s.ALL_MESSAGE_READ="all_message_read",s.CONVERSATION_MARK_UPDATED="conversation_mark_updated",s.CONVERSATION_GROUP_ADD="conversation_group_add",s.CONVERSATION_GROUP_DELETED="conversation_group_deleted",s.CONVERSATION_GROUP_UPDATED="conversation_group_updated",s.ALL_RECEIVE_MESSAGE_OPTION="all_receive_message_option",s.TOPIC_AT_TIPS="topic_at_tips",s.TOPIC_TIPS_NOTIFICATION="topic_tips_notification",s.TOPIC_SYSTEM_NOTIFICATION="topic_system_notification",s.TOPIC_MESSAGE_READ_SYNC="topic_message_read_sync",s.TOPIC_LATEST_MESSAGE="topic_latest_message",s.GROUP_MESSAGE_PINNED="group_message_pinned"})(jt||(jt={}));const bn=[16,17];function Js(s){var r;const g=[];return(r=s?.GroupTips)===null||r===void 0||r.forEach(u=>{var E;u.GroupInfo.MillionGroupFlag===2?g.push(jt.TOPIC_TIPS_NOTIFICATION):bn.includes((E=u?.MsgBody)===null||E===void 0?void 0:E.OpType)?g.push(jt.GROUP_MESSAGE_PINNED):g.push(jt.GROUP_TIPS_NOTIFICATION)}),g}const fr=[{conditions:[{type:"event",value:100}],subType:jt.BUSINESS_COMMAND},{conditions:[{type:"event",value:24}],subType:jt.ALL_RECEIVE_MESSAGE_OPTION},{conditions:[{type:"event",value:26}],subType:jt.TOPIC_LATEST_MESSAGE},{conditions:[{type:"hasKey",value:"C2cMsgArray"}],subType:jt.C2C_REALTIME_MESSAGE},{conditions:[{type:"hasKey",value:"C2cMsgModNotifys"}],subType:jt.C2C_MESSAGE_MODIFIED},{conditions:[{type:"hasKey",value:"ProfileDataMod"}],subType:jt.PROFILE_MODIFIED},{conditions:[{type:"hasKey",value:"UserStatusList"}],subType:jt.USER_STATUS_UPDATE},{conditions:[{type:"hasKey",value:"FriendListMod"}],subType:jt.FRIEND_LIST_MODIFIED},{conditions:[{type:"hasKey",value:"GroupMsgArray"}],subType:jt.GROUP_REALTIME_MESSAGE},{conditions:[{type:"hasKey",value:"GroupMsgModNotifys"}],subType:jt.GROUP_MESSAGE_MODIFIED},{conditions:[{type:"hasKey",value:"C2cNotifyMsgArray"}],subTypeParser:function(s){var r;const g=[];return(r=s?.C2cNotifyMsgArray)===null||r===void 0||r.forEach(u=>{u.WithdrawC2cMsgNotify&&g.push(jt.C2C_REVOKED_MESSAGE),u.C2cReadedReceipt&&g.push(jt.C2C_MESSAGE_PEER_READ),u.ReadC2cMsgNotify&&g.push(jt.C2C_MESSAGE_READ_SYNC),u.MuteNotificationsSync&&g.push(jt.C2C_REMIND_TYPE_SYNC)}),g}},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:4}],subTypeParser:Js},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:5}],subTypeParser:function(s){var r;const g=[];return(r=s?.GroupTips)===null||r===void 0||r.forEach(u=>{Array.isArray(u.MsgBody.GroupWithdrawInfoArray)?g.push(jt.GROUP_MESSAGE_REVOKED):Array.isArray(u.MsgBody.GroupMsgReceiptList)?g.push(jt.GROUP_MESSAGE_READ_RECEIPT):Array.isArray(u.MsgBody.GroupReadInfoArray)?u.MsgBody.GroupReadInfoArray[0].TopicId?g.push(jt.TOPIC_MESSAGE_READ_SYNC):g.push(jt.GROUP_MESSAGE_READ_SYNC):u.GroupInfo.MillionGroupFlag===2?g.push(jt.TOPIC_SYSTEM_NOTIFICATION):g.push(jt.GROUP_SYSTEM_NOTIFICATION)}),g}},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:6}],subTypeParser:Js},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:12}],subTypeParser:function(s){var r;const g=[];return(r=s?.GroupTips)===null||r===void 0||r.forEach(u=>{const{GroupAtTips:{TopicId:E}}=u;E?g.push(jt.TOPIC_AT_TIPS):g.push(jt.GROUP_AT_TIPS)}),g}},{conditions:[{type:"hasKey",value:"RecentContactMod"}],subTypeParser:function(s){var r;const g=[];return(r=s?.RecentContactMod)===null||r===void 0||r.forEach(u=>{switch(u.PushType){case We.CONV_MARK_UPDATED:g.push(jt.CONVERSATION_MARK_UPDATED);break;case We.CONV_GROUP_ADDED:g.push(jt.CONVERSATION_GROUP_ADD);break;case We.CONV_GROUP_DELETED:g.push(jt.CONVERSATION_GROUP_DELETED);break;case We.CONV_GROUP_UPDATED:g.push(jt.CONVERSATION_GROUP_UPDATED);break;default:g.push(jt.CONV_MODIFIED)}}),g}},{conditions:[{type:"hasKey",value:"MsgReactionNotifyList"}],subType:jt.MESSAGE_REACTION_UPDATED},{conditions:[{type:"hasKey",value:"MsgReactionNotify"}],subType:jt.MESSAGE_REACTION_UPDATED_SYNC},{conditions:[{type:"hasKey",value:"C2cMsgInfo"}],subType:jt.C2C_MESSAGE_READ_RECEIPT},{conditions:[{type:"hasKey",value:"FollowChangeList"}],subType:jt.FOLLOW_LIST_UPDATED},{conditions:[{type:"hasKey",value:"MsgExtensionNotify"}],subType:jt.MESSAGE_EXTENSIONS_UPDATED},{conditions:[{type:"hasKey",value:"C2CReadAllMsg"}],subType:jt.ALL_MESSAGE_READ}];var xn;function yr(s){var r;const g=Array.isArray((r=s?.body)===null||r===void 0?void 0:r.EventArray)?s.body.EventArray:[],u=[];return g.forEach(E=>{E.Flag=s.body.Flag;const m=fr.find(M=>M.conditions.every(T=>{switch(T.type){case"event":return E.Event===T.value;case"hasKey":return Object.prototype.hasOwnProperty.call(E,T.value);default:return!1}}));if(!m)return null;let D=[];typeof m.subTypeParser=="function"?D=m.subTypeParser(E):m.subType&&(D=m.subType),Array.isArray(D)?D.forEach(M=>{u.push({type:`${xn.SERVER_PUSH_MESSAGE}:${M}`,data:E})}):u.push({type:`${xn.SERVER_PUSH_MESSAGE}:${D}`,data:E})}),u}(function(s){s.SERVER_PUSH_MESSAGE="im_open_push.msg_push",s.SERVER_PUSH_MESSAGE_MULTIPLE="im_open_push.multi_msg_push_ws",s.ERROR="error"})(xn||(xn={}));const fo={[xn.SERVER_PUSH_MESSAGE]:yr,[xn.SERVER_PUSH_MESSAGE_MULTIPLE]:yr,[xn.ERROR]:function(s){const{errorCode:r}=s;return[{type:`error:${r}`,data:s}]}},gn=new class{constructor(){this._outerEventEmitter=null,this._innerEventEmitter=null,this._filteredCallbackMap=new Map,this._outerEventEmitter=new Pn,this._innerEventEmitter=new Pn,this.InnerEventSubType=jt}subscribeInnerEvent(s,r,g,u,E){var m;let D,M,T,P;["string","number"].includes(typeof r)?(T=`${s}:${r}`,P=g,M=u,D=E):(T=s,P=r,M=g,D=typeof u=="function"?u:void 0),D?this._subscribeWithFilter(T,P,M,D):(m=this._innerEventEmitter)===null||m===void 0||m.on(T,P,M)}emitInnerEvent(s,r){var g,u;if((g=this._innerEventEmitter)===null||g===void 0||g.emit(s,r),Object.keys(fo).includes(s)){const E=(u=fo[s])===null||u===void 0?void 0:u.call(fo,r);E?.forEach(m=>{var D;m&&((D=this._innerEventEmitter)===null||D===void 0||D.emit(m.type,m.data))})}}subscribeOuterEvent(s,r,g){var u;(u=this._outerEventEmitter)===null||u===void 0||u.on(s,r,g)}unSubscribeOuterEvent(s,r,g){var u;(u=this._outerEventEmitter)===null||u===void 0||u.off(s,r,g)}unSubscribeInnerEvent(s,r,g,u){if(["string","number"].includes(typeof r)){const E=g,m=`${s}:${r}`;this._unsubscribeEvent(m,E,u)}else{const E=r;this._unsubscribeEvent(s,E,g)}}emitOuterEvent(s,r){var g;(g=this._outerEventEmitter)===null||g===void 0||g.emit(s,r)}getOuterEventEmitter(){return this._outerEventEmitter}rest(){this._outerEventEmitter=null,this._innerEventEmitter=null}_subscribeWithFilter(s,r,g,u){var E;const m=D=>{u.call(g,D)&&r.call(g,D)};this._filteredCallbackMap.has(s)||this._filteredCallbackMap.set(s,[]),this._filteredCallbackMap.get(s).push({originalCallback:r,filteredCallback:m,filter:u,context:g}),(E=this._innerEventEmitter)===null||E===void 0||E.on(s,m,g)}_unsubscribeEvent(s,r,g){var u,E;const m=this._filteredCallbackMap.get(s);if(m){const D=m.findIndex(M=>M.originalCallback===r&&M.context===g);if(D!==-1){const{filteredCallback:M}=m[D];return(u=this._innerEventEmitter)===null||u===void 0||u.off(s,M,g),m.splice(D,1),void(m.length===0&&this._filteredCallbackMap.delete(s))}}(E=this._innerEventEmitter)===null||E===void 0||E.off(s,r,g)}};class Ml{constructor(){this._socket=null}connectSocket(r){return this._socket=new WebSocket(r),this._socket}send(r){var g,u;try{(g=this._socket)===null||g===void 0||g.send(r)}catch(E){(u=this._onSendFail)===null||u===void 0||u.call(this,E)}}bindSocketHandlers(r){const{onOpen:g,onMessage:u,onClose:E,onError:m,onSendFail:D}=r;this._socket&&(this._socket.binaryType="arraybuffer",this._socket.onopen=g,this._socket.onmessage=u,this._socket.onclose=E,this._socket.onerror=m,this._onSendFail=D)}unbindSocketHandlers(){this._socket&&(this._socket.onopen=null,this._socket.onmessage=null,this._socket.onclose=null,this._socket.onerror=null)}disconnect(){this._socket&&(this._socket.close(),this._socket=null)}}class cn{constructor(r){this._onError=r.onError}connectSocket(r){const g=this;return this._socket=Ao.connectSocket({url:r,header:{"content-type":"application/json"},complete:()=>{},fail:u=>g._onError(u)}),this._socket}send(r){var g;(g=this._socket)===null||g===void 0||g.send({data:r,fail:this._onSendFail})}bindSocketHandlers(r){const{onOpen:g,onMessage:u,onClose:E,onError:m,onSendFail:D}=r;this._socket&&(this._socket.onClose(E),this._socket.onOpen(g),this._socket.onMessage(u),this._socket.onError(m),this._onSendFail=D)}unbindSocketHandlers(){this._socket&&(this._socket.onClose(()=>{}),this._socket.onOpen(()=>{}),this._socket.onMessage(()=>{}),this._socket.onError(()=>{}))}disconnect(){this._socket&&(this._socket.close(),this._socket=null)}}const Dr="CONNECT",Us="SEND",Jc="DISCONNECT",fs="OPEN",as="MESSAGE",wu="CLOSE",Wa="ERROR",hs="SEND_FAIL";class sg{constructor(){this._worker=null,this._blobUrl=null}connectSocket(r){const g=new Blob([` let _socket = null; self.onmessage = (event) => { @@ -95,26 +95,26 @@ _socket = null; } } -`],{type:"application/javascript"});this._worker=new Worker(URL.createObjectURL(g)),this._worker.postMessage({type:fr,url:n})}send(n){var g,u;try{(g=this._worker)===null||g===void 0||g.postMessage({type:Ls,data:n})}catch(E){(u=this._onSendFail)===null||u===void 0||u.call(this,E)}}bindSocketHandlers(n){const{onOpen:g,onMessage:u,onClose:E,onError:m,onSendFail:D}=n;if(this._worker){const M={[ms]:g,[as]:u,[Ru]:E,[Wa]:m,[Cs]:D};this._onSendFail=D,this._worker.onmessage=T=>{var P;const{type:W}=T?.data||{};typeof M[W]=="function"&&((P=M[W])===null||P===void 0||P.call(M,T?.data))}}}unbindSocketHandlers(){this._worker&&(this._worker.onmessage=null)}disconnect(){this._worker&&(this._worker.postMessage({type:Jc}),this._worker.terminate(),this._worker=null),this._blobUrl&&(URL.revokeObjectURL(this._blobUrl),this._blobUrl=null)}}class HI{}var As,$i=new class{constructor(){this._store=new Map}get(s){return this._store.get(s)}getStorage(s){return ki?gt?my.getStorageSync({key:s}).data:oo.getStorageSync(s):this._canUseLocalStorage()?localStorage.getItem(s):{}}set(s,n){const g=this._store.get(s)||{};n instanceof Map?this._store.set(s,n):this._store.set(s,Object.assign(Object.assign({},g),n))}setStorage(s,n){ki?gt?my.setStorageSync({key:s,data:JSON.stringify(n)}):oo.setStorageSync(s,JSON.stringify(n)):this._canUseLocalStorage()&&localStorage.setItem(s,JSON.stringify(n))}clear(s){typeof s=="string"?this._store.set(s,{}):this._store.clear()}clearLocalStorage(s){this._canUseLocalStorage()&&(typeof s=="string"?localStorage.setItem(s,""):localStorage.clear())}reset(){this.clear()}_canUseLocalStorage(){return typeof window<"u"&&navigator&&navigator.cookieEnabled&&localStorage}};class pc{connectSocket(n){return this._socket=oo.connectSocket({url:n,header:{"content-type":"application/json"},multiple:!0,complete:()=>{}}),this._socket}send(n){var g;(g=this._socket)===null||g===void 0||g.send({data:n,fail:this._onSendFail})}bindSocketHandlers(n){const{onOpen:g,onMessage:u,onClose:E,onError:m,onSendFail:D}=n;this._socket&&(this._socket.onClose(E),this._socket.onOpen(g),this._socket.onMessage(M=>u(M?.data)),this._socket.onError(()=>m),this._onSendFail=D)}unbindSocketHandlers(){this._socket&&(this._socket.onClose(()=>{}),this._socket.onOpen(()=>{}),this._socket.onMessage(()=>{}),this._socket.onError(()=>{}))}disconnect(){this._socket&&(this._socket.close(),this._socket=null)}}(function(s){s[s.CONNECTED=0]="CONNECTED",s[s.CONNECTING=1]="CONNECTING",s[s.DISCONNECTED=2]="DISCONNECTED"})(As||(As={}));class ng{constructor(n){this._url="",this._readyState=As.DISCONNECTED,this._url=n,this._id=U(),this._emitter=new On,gt?this._socket=new pc:Et||To||yt||qe||Fi||Oe?this._socket=new cn({onError:this._onError.bind(this)}):an?this._socket=new HI:this._canUseWebWorker()?this._socket=new sg:this._socket=new Sl,this.connect()}connect(){this.doOpen(),this._bindSocketHandlers()}doOpen(){[As.CONNECTED,As.CONNECTING].includes(this._readyState)||(this._readyState=As.CONNECTING,this._ws=this._socket.connectSocket(this._url))}send(n){this._readyState!==As.CONNECTED?this.reconnect():this._socket.send(n)}reconnect(){[As.CONNECTED,As.CONNECTING].includes(this._readyState)||(this.disconnect(),this.doOpen())}getId(){return this._id}on(n,g,u){this._emitter.on(n,g,u)}off(n,g,u){this._emitter.off(n,g,u)}isConnected(){return this._readyState===As.CONNECTED}disconnect(){this._readyState=As.DISCONNECTED,this._unbindSocketHandlers(),this._socket.disconnect()}_onOpen(n){this._readyState===As.CONNECTING&&(this._readyState=As.CONNECTED,this._emitter.emit("connect",{socketId:this._id,event:n}))}_onMessage(n){this._emitter.emit("message",n)}_onClose(n){this._readyState=As.DISCONNECTED,this._emitter.emit("close",{socketId:this._id,event:n})}_onError(n){this._readyState=As.DISCONNECTED,this._emitter.emit("error",{socketId:this._id,error:n})}_onSendFail(n){this._readyState=As.DISCONNECTED,this._emitter.emit("sendFail",{socketId:this._id,error:n})}_bindSocketHandlers(){this._socket.bindSocketHandlers({onOpen:this._onOpen.bind(this),onMessage:this._onMessage.bind(this),onClose:this._onClose.bind(this),onError:this._onError.bind(this),onSendFail:this._onSendFail.bind(this)})}_unbindSocketHandlers(){this._socket.unbindSocketHandlers()}_canUseWebWorker(){const n=$i.get("cloudConfig")||{};return(r(n.isWorkerEnabled)||n.isWorkerEnabled==="1")&&Go}}const Dg={[ut.SINGAPORE]:[[2e7,3e7],[172e7,173e7]],[ut.KOREA]:[[3e7,4e7],[173e7,174e7]],[ut.GERMANY]:[[4e7,5e7],[174e7,175e7]],[ut.IND]:[[5e7,6e7],[175e7,176e7]],[ut.JPN]:[[6e7,7e7],[176e7,177e7]],[ut.USA]:[[7e7,8e7],[177e7,178e7]],[ut.INDONESIA]:[[8e7,9e7],[178e7,179e7]],[ut.KSA]:[[9e7,1e8],[179e7,18e8]]};function ua(s){var n;if(!((n=$i.get("instance"))===null||n===void 0)&&n.oversea)return ut.OVERSEA;for(const g of Object.keys(Dg))for(const[u,E]of Dg[g])if(s>=u&&s`${iA}=${W[iA]}`).join("&"));var W;return g?`${s}/binfo?${P}&compress=gzip`:`${s}/info?${P}`}function Hs(s){const n=$i.get("instance"),{sdkAppId:g,testEnv:u,proxyServer:E}=n,m=ua(g);if(u)return Hn(ft.TEST[m].DEFAULT,{isBinary:s});if(!Rs(E))return Hn(E,{isBinary:s});const D=ft.PRODUCTION[m],M=Zt&&D.ANYCAST,T=Zt,P=!!D.BACKUP_CN;return Hn({[bo.INITIAL]:()=>(_o=bo.DEFAULT,D.DEFAULT),[bo.DEFAULT]:()=>(_o=bo.IPV6,D.IPV6),[bo.IPV6]:()=>(_o=bo.BACKUP,D.BACKUP),[bo.BACKUP]:()=>T?(_o=bo.BACKUP_WEB_ONLY,function(W){const iA=Math.floor(10001*Math.random())+1e4;return W.replace("*",String(iA))}(D.BACKUP_WEB_ONLY)):P?(_o=bo.BACKUP_CN,D.BACKUP_CN):M?(_o=bo.ANYCAST,D.ANYCAST):D.DEFAULT,[bo.BACKUP_WEB_ONLY]:()=>P?(_o=bo.BACKUP_CN,D.BACKUP_CN):M?(_o=bo.ANYCAST,D.ANYCAST):D.DEFAULT,[bo.BACKUP_CN]:()=>(_o=M?bo.ANYCAST:bo.DEFAULT,D[_o]),[bo.ANYCAST]:()=>(_o=bo.DEFAULT,D.ANYCAST="",D.DEFAULT)}[_o](),{isBinary:s})}var Sg=new class{constructor(){this._timeOffsetWithServer=0}getServerTimeMs(){return Date.now()+this._timeOffsetWithServer}getServerTimeSeconds(){return Math.floor(this.getServerTimeMs()/1e3)}getTimeOffsetWithServer(){return this._timeOffsetWithServer}calculateTimeOffsetWithServer(s,n){const g=Date.now(),u=g-s;this._timeOffsetWithServer=n+u-g}};const mc=16;var fn=new class{constructor(){this._tasks=[],this._timer=null,this._taskMap=new Map}_addTaskToScheduler(s){const{id:n}=s;this.removeTask(n),this._tasks.push(s),this._taskMap.set(n,s),this._sort(),this._scheduleNextTask()}_createTask(s){const{id:n,callback:g,context:u,isOnce:E=!1,intervalMs:m=mc}=s,D=Math.max(m,mc);return{id:n,nextExecuteTime:Date.now()+D,intervalMs:m,callback:g,context:u,isOnce:E}}addTask(s){const n=this._createTask(s);this._addTaskToScheduler(n)}addOnceTask(s){const n=this._createTask(Object.assign(Object.assign({},s),{isOnce:!0}));this._addTaskToScheduler(n)}removeTask(s){const n=this._tasks.findIndex(g=>g.id===s);n>-1&&(this._tasks.splice(n,1),this._taskMap.delete(s),this._scheduleNextTask())}updateTaskInterval(s,n){const g=this._taskMap.get(s);g&&(g.intervalMs=n,g.nextExecuteTime=Date.now()+n,this._sort(),this._scheduleNextTask())}clearAllTasks(){this._tasks=[],this._taskMap.clear(),this._timer&&(clearTimeout(this._timer),this._timer=null)}dispose(){this.clearAllTasks()}_sort(){this._tasks.sort((s,n)=>s.nextExecuteTime-n.nextExecuteTime)}_scheduleNextTask(){this._timer&&(clearTimeout(this._timer),this._timer=null);const s=this._tasks[0];if(s){const n=Math.max(0,s.nextExecuteTime-Date.now());this._timer=setTimeout(()=>this._execute(),n)}}_execute(){const s=Date.now();for(;this._tasks.length&&this._tasks[0].nextExecuteTime<=s;){const n=this._tasks[0];try{n.context?n.callback.call(n.context):n.callback(),n.isOnce?this.removeTask(n.id):(n.nextExecuteTime=s+n.intervalMs,this._sort())}catch(g){console.warn(`Task ${n.id} execution failed:`,g),n.isOnce&&this.removeTask(n.id)}}this._scheduleNextTask()}};function Ga(s){const n=[];for(let g=0;g=55296&&u<=56319){const E=s.charCodeAt(++g)-56320+(u-55296<<10)+65536;n.push(240|E>>18,128|E>>12&63,128|E>>6&63,128|63&E)}else u<=127?n.push(u):u<=2047?n.push(192|u>>6,128|63&u):n.push(224|u>>12,128|u>>6&63,128|63&u)}return new Uint8Array(n)}function In(s){const n=Array.isArray(s)?[]:Object.create(null);for(const g in s)Object.prototype.hasOwnProperty.call(s,g)&&_(g)&&s[g]!=null&&(s[g]===null||typeof s[g]!="object"?n[g]=s[g]:n[g]=In(s[g]));return n}function fs(s,n){if(mA.includes(s))return 0;const g=Ga(JSON.stringify(n));let u=4294967295;const{length:E}=g;for(let m=0;m>>=1:u=u>>>1^3988292384}return(4294967295^u)>>>0}function Ea(s){const{servcmd:n,data:g}=s,u=function(m){const D=$i.get("login")||{},M=$i.get("instance")||{};return{servcmd:m,ver:"v4",platform:HA,websdkappid:537048168,websdkversion:"1.7.3",a2:D.a2Key||void 0,tinyid:D.tinyID||void 0,status_instid:D.statusInstanceId||0,sdkappid:M.sdkAppId,contenttype:"json",reqtime:Math.floor(Date.now()/1e3),identifier:D.a2Key?void 0:D.userId,usersig:D.a2Key?void 0:D.userSig,sdkability:478343027,sdkability_ext:lA(""),cappid:M.applicationID||0,tjgID:"",seq:Sa(),cs:0}}(n),E=In(g);return u.cs=fs(n,E),{head:u,body:E}}function yn(s){const{servcmd:n,data:g}=s,u=function(m){const D=$i.get("login")||{},M=$i.get("instance")||{};return{servcmd:m,ver:"v4",platform:HA,websdkappid:537048168,websdkversion:"1.7.3",sdkappid:M.sdkAppId,contenttype:"",reqtime:Math.floor(Date.now()/1e3),identifier:"",usersig:"",status_instid:D.statusInstanceId||0,sdkability:478343027,sdkability_ext:lA(""),cappid:M.applicationID||0,seq:Sa(),cs:0}}(n),E=In(g);return u.cs=fs(n,E),{head:u,body:E}}let ba=U();function Sa(){return ba=ba<2415919103?ba+1:U(),ba}function $(){var s;const n=$i.get("login")||{},g=$i.get("instance")||{};return{sdk_type:30,sdk_app_id:g.sdkAppId,sdk_version:"1.6.18",tiny_id:Number(n.tinyID),user_id:n.userId||((s=$i.get("webPush"))===null||s===void 0?void 0:s.userId),platform:HA,instance_id:g.instanceId,trace_id:new Date().getTime()}}var K,vA=Object.freeze({__proto__:null,calcBodyCRC:fs,filterProtocolDataInvalidFields:In,generateCosSpecifiedData:function(s){const{servcmd:n,data:g}=s,u=function(m){const D=$i.get("login")||{},M=$i.get("instance")||{};return{servcmd:m,ver:"v4",platform:HA,websdkappid:537048168,websdkversion:"1.7.3",sdkappid:M.sdkAppId,contenttype:"json",reqtime:Math.floor(Date.now()/1e3),identifier:D.userId,usersig:D.userSig,status_instid:D.statusInstanceId||0,sdkability:478343027,sdkability_ext:lA(""),cappid:M.applicationID||0,seq:Sa(),cs:0}}(n),E=In(g);return u.cs=fs(n,E),{head:u,body:E}},generateProtocolData:Ea,generateSSOLogProtocolData:yn,generateSequence:Sa,getCommonHead:$,getHostSite:ua,taskScheduler:fn,timeManager:Sg});(function(s){s[s.info=4]="info",s[s.warning=5]="warning",s[s.error=6]="error"})(K||(K={}));const qA={method:"extension",networkType:"network_type",eventType:"event_type",code:"error_code",message:"error_message",moreMessage:"more_message",duplicate:"duplicate",costTime:"cost_time",level:"level",uiPlatform:"ui_platform",timestamp:"timestamp"};class Ae{constructor(n){this.level=K.info,this._canSendLog=!0,this._logCreatedAt=Sg.getServerTimeMs(),this.timestamp=0,this.networkType=8,this.code=0,this.moreMessage="",this.method="",this.message="",this.costTime=0,this.duplicate=!1,this.eventType=0,this.uiPlatform=this._getUiPlatform(),this._sdkEdition=this._getSDKEdition();const{method:g,eventType:u=0,message:E="",costTime:m=0,error:D,uiPlatform:M,moreMessage:T="",code:P=0,startTime:W=0}=n||{};this.eventType=u,this.method=g,this.message=E,this.costTime=m,this.moreMessage=`${T} startTime:${W}`,this.code=P,D&&this.setError(D),Rs(M)||(this.uiPlatform=M)}setMoreMessage(n){this.moreMessage=`${this.moreMessage} ${n}`}updateLogCreatedAtByTimeOffset(){this._logCreatedAt+=Sg.getTimeOffsetWithServer()}end(n=!1){this._canSendLog&&(this._canSendLog=!1,this.timestamp=Sg.getServerTimeMs(),this._ssoLogModule.pushToLogQueue(this._convertSSOLogDataKeyToServe()),n&&this._ssoLogModule.uploadSSOLogData())}setError(n){var g;return n instanceof Error?this._canSendLog?(!((g=$i.get("netWorkMonitor"))===null||g===void 0)&&g.isNetworkOnline&&(n.errorCode&&(this.code=n.errorCode),n.errorMessage&&this.setMoreMessage(n.errorMessage)),this.level=K.error,this):this:(console.warn("SSOLogData.setError value not instanceof Error, please check!"),this)}setLogInfo(n){return Object.keys(n).forEach(g=>{Object.keys(qA).includes(g)&&(this[g]=n[g])}),this}setSSOLogModule(n){this._ssoLogModule=n}_convertSSOLogDataKeyToServe(){const n={};return Object.keys(this).forEach(g=>{const u=g;qA[u]&&(n[qA[u]]=this[u])}),n}_getUiPlatform(){var n;const g=(n=$i.get("instance"))===null||n===void 0?void 0:n.scene;if(typeof g=="string"){const u=Number(g);return isNaN(u)?void 0:u}}_getSDKEdition(){var n;return(n=$i.get("instance"))===null||n===void 0?void 0:n.sdkEdition}}var me;(function(s){s.RECONNECTED="reconnected",s.CLOUD_CONFIG_UPDATE="cloud_config_update",s.SOCKET_DISCONNECTED="socket_disconnected"})(me||(me={}));var Pe=me;const Fe=20,rt=6e4,Ct=[4,5,6],Rt="report-logger";var Yt=new class{constructor(){this._sdkAppIdBlackList=[],this._tinyIdWhiteList=[],this._reportLevel=[4,5,6],this._minThreshold=Fe,this._maxThreshold=100,this._waitingTime=rt,this._lastReportAt=Date.now(),this._ssoLogMap=new Map,this._logLevel=IA.DEBUG,this._throttleConfig={global:{throttleTime:xe,maxCount:Qe},single:{throttleTime:ue,maxCount:Ce}},this._globalThrottle={count:0,startTime:Date.now()},this._singleThrottleMap=new Map,gn.subscribeInnerEvent(Pe.CLOUD_CONFIG_UPDATE,this._handleCloudConfigUpdate,this),fn.addTask({id:Rt,intervalMs:1e3,callback:this._checkAndReportIfDue,context:this}),this._logQueue=[],this._savePlatFormInfo()}_handleCloudConfigUpdate(s){const{evt_rpt_threshold:n=Fe,evt_rpt_waiting:g=rt,evt_rpt_level:u=Ct,evt_rpt_sdkappid_bl:E="",evt_rpt_tinyid_wl:m="",evt_rpt_global_throttle_time:D=xe,evt_rpt_global_throttle_count:M=Qe,evt_rpt_single_throttle_time:T=ue,evt_rpt_single_throttle_count:P=Ce}=s||{};this._sdkAppIdBlackList=E.split(",").map(W=>Number(W)),this._waitingTime=Number(g),this._minThreshold=n,this._reportLevel=u,this._tinyIdWhiteList=m.split(","),this._throttleConfig={global:{throttleTime:D,maxCount:M},single:{throttleTime:T,maxCount:P}}}createSSOLogData(s){const n=new Ae(s);return n.setSSOLogModule(this),this._ssoLogMap.set(s.method,n),n}getSSOLogData(s){return this._ssoLogMap.get(s)||{}}pushToLogQueue(s){s&&(this._logQueue.push(s),this._shouldUploadImmediately()&&this.uploadSSOLogData())}setLogLevel(s){[IA.DEBUG,IA.ERROR,IA.INFO,IA.NONE,IA.WARN].includes(s)&&(this._logLevel=s)}debug(s,n="",g){this._log(IA.DEBUG,s,n,g)}info(s,n="",g){this._log(IA.INFO,s,n,g)}warn(s,n="",g){this._log(IA.WARN,s,n,g)}error(s,n="",g){this._log(IA.ERROR,s,n,g)}_shouldUploadImmediately(){return this._logQueue.length>=this._minThreshold}_isReportDue(){return Date.now()>=this._lastReportAt+this._waitingTime}_checkAndReportIfDue(){this._isReportDue()&&this._logQueue.length>0&&this.uploadSSOLogData()}uploadSSOLogData(){return pA(this,void 0,void 0,function*(){if(this._logQueue.length===0)return;const s=this._logQueue.slice();this._logQueue=[];try{const n=this._filterLogs(s);if(n.length===0)return void(this._lastReportAt=Date.now());const g={Header:$(),Event:n};Rs(g.Header.user_id)||(yield function(u){const E="imopenstat.tim_web_report_v2",m=yn({servcmd:E,data:u}),D=`${m.head.seq}${E}`;return ye.sendPacket(m,{requestId:D})}(g))}catch(n){this._requeueFailedLogs(s),this.debug("uploadSSOLogData",en(n))}finally{this._lastReportAt=Date.now()}})}_requeueFailedLogs(s){this._logQueue=s.concat(this._logQueue);const n=this._logQueue.length-200;n>0&&(this._logQueue.splice(0,n),this.debug("uploadSSOLogData",`log queue overflow, dropped ${n} oldest logs`))}_savePlatFormInfo(){var s,n;if(Et){const g=(n=(s=wx.getAccountInfoSync)===null||s===void 0?void 0:s.call(wx))===null||n===void 0?void 0:n.miniProgram;if(g){const{appId:u,envVersion:E}=g;$i.set("instance",{appId:u,envVersion:E})}}else Zt&&$i.set("instance",{href:window.location.href})}_filterLogs(s){const{tinyID:n}=$i.get("login")||{},{sdkAppId:g}=$i.get("instance")||{};return this._sdkAppIdBlackList.includes(g)&&!this._tinyIdWhiteList.includes(n)?[]:s.filter(u=>this._reportLevel.includes(u.level))}_checkThrottle(s){return!!this._checkGlobalThrottle()||this._checkSingleThrottle(s)}_checkGlobalThrottle(){const s=Date.now();if(s-this._globalThrottle.startTime>=this._throttleConfig.global.throttleTime)this._globalThrottle.count=1,this._globalThrottle.startTime=s;else if(this._globalThrottle.count++,this._globalThrottle.count>this._throttleConfig.global.maxCount)return!0;return!1}_checkSingleThrottle(s){const n=Date.now(),g=this._singleThrottleMap.get(s);return g?n-g.startTime>=this._throttleConfig.single.throttleTime?(g.count=1,g.startTime=n,!1):g.count>=this._throttleConfig.single.maxCount||(g.count++,!1):(this._singleThrottleMap.set(s,{count:1,startTime:n}),!1)}_shouldLog(s){return s>=this._logLevel&&this._logLevel!==IA.NONE}_shouldReport(s){return this._reportLevel.includes(WA[s])}_formatLog(s,n,g,u){const E=new Date,m=`${E.getHours()}:${E.getMinutes()}:${E.getSeconds()}:${E.getMilliseconds()}`,D=`<${IA[s]}>`;return Nt||ki?[`${cA} [${m}] ${D} [${n}] ${g}`]:["%c%s%c%s","background:#0abf5b; padding:1px; border-radius:3px; color: #fff",cA,"",`[${m}] ${D} [${n}] ${g} params: ${en(u)}`]}_log(s,n,g,u){if(this._shouldLog(s)){const E=this._formatLog(s,n,g,u);TA[s].apply(console,E)}if(this._shouldReport(s)){const E=this._getThrottleKey(n,g,u);this._checkThrottle(E)||this.createSSOLogData(Object.assign(Object.assign({message:g},u),{method:n})).end()}}_getThrottleKey(s,n,g){const u=`${s}${n}${en(Object.assign(Object.assign({},g),{costTime:""}))}`,E=Ga(JSON.stringify(u));let m=4294967295;const{length:D}=E;for(let M=0;M>>=1:m=m>>>1^3988292384}return`${(4294967295^m)>>>0}`}reset(){console.log("SSO_LOG_MODULE.reset"),fn.removeTask(Rt),gn.unSubscribeInnerEvent(Pe.CLOUD_CONFIG_UPDATE,this._handleCloudConfigUpdate,this),this._lastReportAt=0,this.uploadSSOLogData(),this._sdkAppIdBlackList=[],this._tinyIdWhiteList=[],this._minThreshold=Fe,this._maxThreshold=100,this._waitingTime=rt,this._logQueue=[],this._logLevel=IA.DEBUG,this._globalThrottle={count:0,startTime:Date.now()},this._singleThrottleMap.clear()}};const Ii=15e3,ct="Channel",xt="channel_schedule_task",Ji="channel_reconnect_task",Ki="connected",qs="connecting",Mi="disconnected",zo=1e3,Mg="network_status_change",sr="activity_status_change",yr="send_fail",xn="reconnect_failed",Ml="socket_error",Ks="socket_close";function aI(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}function Wg(s){return Wg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(n){return typeof n}:function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Wg(s)}function fc(s){throw new Error('Could not dynamically require "'+s+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var wu,Ma={exports:{}},vl=(wu||(wu=1,function(s){s.exports=function n(g,u,E){function m(T,P){if(!u[T]){if(!g[T]){if(!P&&fc)return fc(T);if(D)return D(T,!0);var W=new Error("Cannot find module '"+T+"'");throw W.code="MODULE_NOT_FOUND",W}var iA=u[T]={exports:{}};g[T][0].call(iA.exports,function(EA){return m(g[T][1][EA]||EA)},iA,iA.exports,n,g,u,E)}return u[T].exports}for(var D=fc,M=0;M>>6:(EA<65536?iA[xA++]=224|EA>>>12:(iA[xA++]=240|EA>>>18,iA[xA++]=128|EA>>>12&63),iA[xA++]=128|EA>>>6&63),iA[xA++]=128|63&EA);return iA},u.buf2binstring=function(W){return P(W,W.length)},u.binstring2buf=function(W){for(var iA=new E.Buf8(W.length),EA=0,RA=iA.length;EA>10&1023,SA[RA++]=56320|1023&kA)}return P(SA,RA)},u.utf8border=function(W,iA){var EA;for((iA=iA||W.length)>W.length&&(iA=W.length),EA=iA-1;0<=EA&&(192&W[EA])==128;)EA--;return EA<0||EA===0?iA:EA+M[W[EA]]>iA?EA:iA}},{"./common":1}],3:[function(n,g,u){g.exports=function(E,m,D,M){for(var T=65535&E,P=E>>>16&65535,W=0;D!==0;){for(D-=W=2e3>>1:m>>>1;D[M]=m}return D}();g.exports=function(m,D,M,T){var P=E,W=T+M;m^=-1;for(var iA=T;iA>>8^P[255&(m^D[iA])];return-1^m}},{}],6:[function(n,g,u){g.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],7:[function(n,g,u){g.exports=function(E,m){var D,M,T,P,W,iA,EA,RA,kA,xA,LA,SA,OA,JA,ae,se,_i,Ti,Ft,Ni,cs,Se,mt,UA,ri;D=E.state,M=E.next_in,UA=E.input,T=M+(E.avail_in-5),P=E.next_out,ri=E.output,W=P-(m-E.avail_out),iA=P+(E.avail_out-257),EA=D.dmax,RA=D.wsize,kA=D.whave,xA=D.wnext,LA=D.window,SA=D.hold,OA=D.bits,JA=D.lencode,ae=D.distcode,se=(1<>>=Ft=Ti>>>24,OA-=Ft,(Ft=Ti>>>16&255)==0)ri[P++]=65535&Ti;else{if(!(16&Ft)){if(!(64&Ft)){Ti=JA[(65535&Ti)+(SA&(1<>>=Ft,OA-=Ft),OA<15&&(SA+=UA[M++]<>>=Ft=Ti>>>24,OA-=Ft,!(16&(Ft=Ti>>>16&255))){if(!(64&Ft)){Ti=ae[(65535&Ti)+(SA&(1<>>=Ft,OA-=Ft,(Ft=P-W)>3,SA&=(1<<(OA-=Ni<<3))-1,E.next_in=M,E.next_out=P,E.avail_in=M>>24&255)+(Se>>>8&65280)+((65280&Se)<<8)+((255&Se)<<24)}function SA(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new E.Buf16(320),this.work=new E.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function OA(Se){var mt;return Se&&Se.state?(mt=Se.state,Se.total_in=Se.total_out=mt.total=0,Se.msg="",mt.wrap&&(Se.adler=1&mt.wrap),mt.mode=RA,mt.last=0,mt.havedict=0,mt.dmax=32768,mt.head=null,mt.hold=0,mt.bits=0,mt.lencode=mt.lendyn=new E.Buf32(kA),mt.distcode=mt.distdyn=new E.Buf32(xA),mt.sane=1,mt.back=-1,iA):EA}function JA(Se){var mt;return Se&&Se.state?((mt=Se.state).wsize=0,mt.whave=0,mt.wnext=0,OA(Se)):EA}function ae(Se,mt){var UA,ri;return Se&&Se.state?(ri=Se.state,mt<0?(UA=0,mt=-mt):(UA=1+(mt>>4),mt<48&&(mt&=15)),mt&&(mt<8||15=Gi.wsize?(E.arraySet(Gi.window,mt,UA-Gi.wsize,Gi.wsize,0),Gi.wnext=0,Gi.whave=Gi.wsize):(ri<(_s=Gi.wsize-Gi.wnext)&&(_s=ri),E.arraySet(Gi.window,mt,UA-ri,_s,Gi.wnext),(ri-=_s)?(E.arraySet(Gi.window,mt,UA-ri,ri,0),Gi.wnext=ri,Gi.whave=Gi.wsize):(Gi.wnext+=_s,Gi.wnext===Gi.wsize&&(Gi.wnext=0),Gi.whave>>8&255,UA.check=D(UA.check,dg,2,0),bt=Gt=0,UA.mode=2;break}if(UA.flags=0,UA.head&&(UA.head.done=!1),!(1&UA.wrap)||(((255&Gt)<<8)+(Gt>>8))%31){Se.msg="incorrect header check",UA.mode=30;break}if((15&Gt)!=8){Se.msg="unknown compression method",UA.mode=30;break}if(bt-=4,Va=8+(15&(Gt>>>=4)),UA.wbits===0)UA.wbits=Va;else if(Va>UA.wbits){Se.msg="invalid window size",UA.mode=30;break}UA.dmax=1<>8&1),512&UA.flags&&(dg[0]=255&Gt,dg[1]=Gt>>>8&255,UA.check=D(UA.check,dg,2,0)),bt=Gt=0,UA.mode=3;case 3:for(;bt<32;){if(xi===0)break A;xi--,Gt+=ri[Gi++]<>>8&255,dg[2]=Gt>>>16&255,dg[3]=Gt>>>24&255,UA.check=D(UA.check,dg,4,0)),bt=Gt=0,UA.mode=4;case 4:for(;bt<16;){if(xi===0)break A;xi--,Gt+=ri[Gi++]<>8),512&UA.flags&&(dg[0]=255&Gt,dg[1]=Gt>>>8&255,UA.check=D(UA.check,dg,2,0)),bt=Gt=0,UA.mode=5;case 5:if(1024&UA.flags){for(;bt<16;){if(xi===0)break A;xi--,Gt+=ri[Gi++]<>>8&255,UA.check=D(UA.check,dg,2,0)),bt=Gt=0}else UA.head&&(UA.head.extra=null);UA.mode=6;case 6:if(1024&UA.flags&&(xi<(Bo=UA.length)&&(Bo=xi),Bo&&(UA.head&&(Va=UA.head.extra_len-UA.length,UA.head.extra||(UA.head.extra=new Array(UA.head.extra_len)),E.arraySet(UA.head.extra,ri,Gi,Bo,Va)),512&UA.flags&&(UA.check=D(UA.check,ri,Bo,Gi)),xi-=Bo,Gi+=Bo,UA.length-=Bo),UA.length))break A;UA.length=0,UA.mode=7;case 7:if(2048&UA.flags){if(xi===0)break A;for(Bo=0;Va=ri[Gi+Bo++],UA.head&&Va&&UA.length<65536&&(UA.head.name+=String.fromCharCode(Va)),Va&&Bo>9&1,UA.head.done=!0),Se.adler=UA.check=0,UA.mode=12;break;case 10:for(;bt<32;){if(xi===0)break A;xi--,Gt+=ri[Gi++]<>>=7&bt,bt-=7&bt,UA.mode=27;break}for(;bt<3;){if(xi===0)break A;xi--,Gt+=ri[Gi++]<>>=1)){case 0:UA.mode=14;break;case 1:if(Ni(UA),UA.mode=20,mt!==6)break;Gt>>>=2,bt-=2;break A;case 2:UA.mode=17;break;case 3:Se.msg="invalid block type",UA.mode=30}Gt>>>=2,bt-=2;break;case 14:for(Gt>>>=7&bt,bt-=7&bt;bt<32;){if(xi===0)break A;xi--,Gt+=ri[Gi++]<>>16^65535)){Se.msg="invalid stored block lengths",UA.mode=30;break}if(UA.length=65535&Gt,bt=Gt=0,UA.mode=15,mt===6)break A;case 15:UA.mode=16;case 16:if(Bo=UA.length){if(xi>>=5,bt-=5,UA.ndist=1+(31&Gt),Gt>>>=5,bt-=5,UA.ncode=4+(15&Gt),Gt>>>=4,bt-=4,286>>=3,bt-=3}for(;UA.have<19;)UA.lens[rS[UA.have++]]=0;if(UA.lencode=UA.lendyn,UA.lenbits=7,_I={bits:UA.lenbits},Yl=T(0,UA.lens,0,19,UA.lencode,0,UA.work,_I),UA.lenbits=_I.bits,Yl){Se.msg="invalid code lengths set",UA.mode=30;break}UA.have=0,UA.mode=19;case 19:for(;UA.have>>16&255,wI=65535&Yg,!((Tr=Yg>>>24)<=bt);){if(xi===0)break A;xi--,Gt+=ri[Gi++]<>>=Tr,bt-=Tr,UA.lens[UA.have++]=wI;else{if(wI===16){for(iE=Tr+2;bt>>=Tr,bt-=Tr,UA.have===0){Se.msg="invalid bit length repeat",UA.mode=30;break}Va=UA.lens[UA.have-1],Bo=3+(3&Gt),Gt>>>=2,bt-=2}else if(wI===17){for(iE=Tr+3;bt>>=Tr)),Gt>>>=3,bt-=3}else{for(iE=Tr+7;bt>>=Tr)),Gt>>>=7,bt-=7}if(UA.have+Bo>UA.nlen+UA.ndist){Se.msg="invalid bit length repeat",UA.mode=30;break}for(;Bo--;)UA.lens[UA.have++]=Va}}if(UA.mode===30)break;if(UA.lens[256]===0){Se.msg="invalid code -- missing end-of-block",UA.mode=30;break}if(UA.lenbits=9,_I={bits:UA.lenbits},Yl=T(P,UA.lens,0,UA.nlen,UA.lencode,0,UA.work,_I),UA.lenbits=_I.bits,Yl){Se.msg="invalid literal/lengths set",UA.mode=30;break}if(UA.distbits=6,UA.distcode=UA.distdyn,_I={bits:UA.distbits},Yl=T(W,UA.lens,UA.nlen,UA.ndist,UA.distcode,0,UA.work,_I),UA.distbits=_I.bits,Yl){Se.msg="invalid distances set",UA.mode=30;break}if(UA.mode=20,mt===6)break A;case 20:UA.mode=21;case 21:if(6<=xi&&258<=gr){Se.next_out=Or,Se.avail_out=gr,Se.next_in=Gi,Se.avail_in=xi,UA.hold=Gt,UA.bits=bt,M(Se,ln),Or=Se.next_out,_s=Se.output,gr=Se.avail_out,Gi=Se.next_in,ri=Se.input,xi=Se.avail_in,Gt=UA.hold,bt=UA.bits,UA.mode===12&&(UA.back=-1);break}for(UA.back=0;xg=(Yg=UA.lencode[Gt&(1<>>16&255,wI=65535&Yg,!((Tr=Yg>>>24)<=bt);){if(xi===0)break A;xi--,Gt+=ri[Gi++]<>ac)])>>>16&255,wI=65535&Yg,!(ac+(Tr=Yg>>>24)<=bt);){if(xi===0)break A;xi--,Gt+=ri[Gi++]<>>=ac,bt-=ac,UA.back+=ac}if(Gt>>>=Tr,bt-=Tr,UA.back+=Tr,UA.length=wI,xg===0){UA.mode=26;break}if(32&xg){UA.back=-1,UA.mode=12;break}if(64&xg){Se.msg="invalid literal/length code",UA.mode=30;break}UA.extra=15&xg,UA.mode=22;case 22:if(UA.extra){for(iE=UA.extra;bt>>=UA.extra,bt-=UA.extra,UA.back+=UA.extra}UA.was=UA.length,UA.mode=23;case 23:for(;xg=(Yg=UA.distcode[Gt&(1<>>16&255,wI=65535&Yg,!((Tr=Yg>>>24)<=bt);){if(xi===0)break A;xi--,Gt+=ri[Gi++]<>ac)])>>>16&255,wI=65535&Yg,!(ac+(Tr=Yg>>>24)<=bt);){if(xi===0)break A;xi--,Gt+=ri[Gi++]<>>=ac,bt-=ac,UA.back+=ac}if(Gt>>>=Tr,bt-=Tr,UA.back+=Tr,64&xg){Se.msg="invalid distance code",UA.mode=30;break}UA.offset=wI,UA.extra=15&xg,UA.mode=24;case 24:if(UA.extra){for(iE=UA.extra;bt>>=UA.extra,bt-=UA.extra,UA.back+=UA.extra}if(UA.offset>UA.dmax){Se.msg="invalid distance too far back",UA.mode=30;break}UA.mode=25;case 25:if(gr===0)break A;if(Bo=ln-gr,UA.offset>Bo){if((Bo=UA.offset-Bo)>UA.whave&&UA.sane){Se.msg="invalid distance too far back",UA.mode=30;break}Bo>UA.wnext?(Bo-=UA.wnext,Il=UA.wsize-Bo):Il=UA.wnext-Bo,Bo>UA.length&&(Bo=UA.length),_C=UA.window}else _C=_s,Il=Or-UA.offset,Bo=UA.length;for(gr_i?(Ft=Il[_C+xA[mt]],Ni=bt[tE+xA[mt]]):(Ft=96,Ni=0),SA=1<>Or)+(OA-=SA)]=Ti<<24|Ft<<16|Ni,OA!==0;);for(SA=1<>=1;if(SA!==0?(Gt&=SA-1,Gt+=SA):Gt=0,mt++,--ln[Se]==0){if(Se===ri)break;Se=W[iA+xA[mt]]}if(_s{const M=new Uint8Array(D).slice(4);let T;try{T=vl.inflate(M,{to:"string"})}catch(P){console.error("inflate error",P)}return T})(s.data):function(D){const M=new Uint8Array(D);let T="",P=0;const{length:W}=M;for(;P0)for(let kA=0;kA{var u;const{uplinkData:E,canResend:m,resolve:D,reject:M,timeout:T}=n;if(m){this._pendingRequests.set(g,{resolve:D,reject:M,timestamp:Date.now(),uplinkData:E,timeout:T,canResend:m});const P=this._isBinarySupported?Ga(E).buffer:E;(u=this._socketAdapter)===null||u===void 0||u.send(P)}else this._pendingRequests.delete(g)})}_onConnect(s){const{socketId:n,event:g={}}=s||{};this._connectionId=n,this._connectionEstablishedTime=Date.now();const u=Date.now()-this._connectionStartTime,E=`${ct}.onConnect cost:${u} ms. socketID:${n} res:${JSON.stringify(g)}`;if(this._ssoLog({method:"onConnect",message:E}),this._checkPendingRequestsAndResend(),this._sendHeartbeatIfReady(),this._isReconnecting){const m=`${ct}.reconnect success`;this._ssoLog({method:"reconnectSuccess",message:m}),gn.emitInnerEvent(Pe.RECONNECTED),this._isReconnecting=!1}this._resetReconnectDelay(),this._handleConnectStateChange({state:Ki,shouldEmitEvent:!0,shouldAttemptReconnect:!1})}_sendAck(s){const n=Ea({servcmd:"openim.ws_msg_push_ack",data:{SessionData:s}});this.sendPacket(n)}_executeScheduledTaskIfReady(){return pA(this,void 0,void 0,function*(){this._clearTimeoutRequest(),this._sendHeartbeatIfReady()})}_canSendHeartbeat(){var s;return((s=this._socketAdapter)===null||s===void 0?void 0:s.isConnected())&&Date.now()>=this._nextHeartbeatAt&&!this._isHeartbeatInProgress}_sendHeartbeat(){return pA(this,void 0,void 0,function*(){var s;const n=Ea({servcmd:"heartbeat.alive",data:{}});try{const g=`${n.head.seq}${n.head.servcmd}`;yield this.sendPacket(n,{requestId:g,timeout:3e3})}catch(g){const u=(s=$i.get("netWorkMonitor"))===null||s===void 0?void 0:s.isNetworkOnline,E=`${ct}.sendHeartbeat failed. isNetWorkOnline:${u} error: ${en(g)}`;this._ssoLog({method:"sendHeartbeatError",message:E}),this._handleConnectStateChange({state:Mi,shouldEmitEvent:!0,shouldAttemptReconnect:!0})}})}_sendHeartbeatIfReady(){return pA(this,void 0,void 0,function*(){this._canSendHeartbeat()&&(this._isHeartbeatInProgress=!0,yield this._sendHeartbeat(),this._isHeartbeatInProgress=!1)})}_updateHeartbeatTime(){this._nextHeartbeatAt=To?Date.now()+5e3:Date.now()+1e4}_handleNetworkStatusChange(s){const n=`${ct}.networkStatusChange ${JSON.stringify(s)}`;this._ssoLog({method:"networkStatusChange",message:n});const{isNetworkOnline:g,networkType:u}=s;g&&u!=="none"?this._handleConnectStateChange({state:Ki,shouldEmitEvent:!1,shouldAttemptReconnect:!0,reason:Mg}):this._handleConnectStateChange({state:Mi,shouldEmitEvent:!1,shouldAttemptReconnect:!0,reason:Mg})}isPrivateNetWork(){const s=$i.get("instance")||{};return s.proxyServer&&!s.fileDownloadProxy}_handleConnectStateChange(s){const{state:n,shouldAttemptReconnect:g,shouldEmitEvent:u,reason:E}=s,m=`${ct}._handleConnectStateChange currentConnectState: ${this._currentConnectState} shouldAttemptReconnect: ${g} shouldEmitEvent: ${u} reason: ${E}`;this._currentConnectState!==n&&(this._ssoLog({method:"handleConnectStateChange",message:m}),u&&(Yt.info("_handleConnectStateChange",` from ${this._currentConnectState} to ${n}`),gn.emitOuterEvent("netStateChange",{name:"netStateChange",data:{state:n}}),this._currentConnectState=n,n===Mi&&gn.emitInnerEvent(Pe.SOCKET_DISCONNECTED)),g&&(this._resetReconnectDelay(),fn.addTask({id:Ji,intervalMs:this._intendedDelay,callback:this._scheduleReconnectWithBackoff,context:this})))}_handleActivityStatusChange(s){var n,g;const u=(g=(n=this._socketAdapter)===null||n===void 0?void 0:n._ws)===null||g===void 0?void 0:g.readyState,E=`${ct}.activityStatusChange ${JSON.stringify(s)} readyState: ${u}`;Yt.debug("activityStatusChange",E),u===3&&this._handleConnectStateChange({state:Mi,shouldEmitEvent:!0,shouldAttemptReconnect:!0,reason:sr})}_resetReconnectDelay(){var s;Yt.debug(`${ct}._resetReconnectDelay`),fn.removeTask(Ji);const n=(s=$i.get("activityMonitor"))===null||s===void 0?void 0:s.isActive;this._intendedDelay=n?zo:1e3}_scheduleReconnectWithBackoff(){var s;const n=(s=$i.get("activityMonitor"))===null||s===void 0?void 0:s.isActive;this._intendedDelay=n?Math.min(5e3,Math.max(zo,1.5*this._intendedDelay)):Math.min(3e5,Math.max(1e3,1.5*this._intendedDelay));const g=new Date().toTimeString().slice(0,8),u=`${ct}.scheduleReconnectWithBackoff timeStr: ${g} intendedDelay: ${this._intendedDelay}`;Yt.debug(u),this.reconnect(),fn.updateTaskInterval(Ji,this._intendedDelay)}_ssoLog(s){const{method:n,message:g}=s;Yt.info(n,g)}_diagnose(){this.isPrivateNetWork()||(this._lastDiagnoseAt=Date.now(),function(s){pA(this,void 0,void 0,function*(){const n=s.split("/")[2];if(!n.startsWith("ws"))return;const g=`https://${n}/v3/netcheck/getconninfo?${s.slice(s.indexOf("info?")+5)}&reqtime=${Date.now()}`;try{yield Pi({method:"GET",url:g,data:{}})}catch(u){Yt.warn("diagnoseBySSO",`diagnoseBySSO failed. error:${u.message}`)}})}(this._url),function(s){pA(this,void 0,void 0,function*(){const n=`https://boce-cdn.my-imcloud.com/v3/netcheck/getconninfo?${s.slice(s.indexOf("info?")+5)}&reqtime=${Date.now()}`;try{yield Pi({method:"GET",url:n,data:{}})}catch(g){Yt.warn(`diagnoseByCDN', 'diagnoseByCDN failed. error:${g.message}`)}})}(this._url),this._beforeSendInterceptors=[])}_clearTimeoutRequest(){for(const[s,n]of this._pendingRequests.entries()){const{reject:g,timestamp:u,timeout:E}=n;Date.now()-u>=E&&(this._pendingRequests.delete(s),Date.now()-this._lastDiagnoseAt>=3e4&&this._diagnose(),g({errorCode:Qr,errorInfo:"NETWORK_TIMEOUT",data:{requestId:s}}))}}_updateIsBinarySupported(){var s;if(!((s=$i.get("instance"))===null||s===void 0)&&s.devMode)return void(this._isBinarySupported=!1);const n=Es();if((gt||Et&&n==="windows"||Vs)&&(this._isBinarySupported=!1),To){const{uniRuntimeVersion:g=""}=oo.getSystemInfoSync();(function(u){const E=u.split(".").map(Number),[m=0,D=0,M=0]=E;return m>2||!(m<2)&&(D>2||!(D<2)&&M>=6)})(g)||(this._isBinarySupported=!1)}}_isCompressedData(s){const n=new Uint8Array(s);return n[0]===67&&n[1]===79&&n[2]===77&&n[3]===80}};const fe={init:function(s){$i.set("instance",s),ye.init()},destroy:function(){ye.dispose(),$i.clear(),fn.dispose()},notificationCenter:gn,channel:ye,store:$i,ssoLog:Yt,utils:yg,common:vA,constants:Mt},vg=s=>typeof s=="function";function rg(s,n,g){const u=g||[];if(!s||!n)return!1;const E=Object.keys(s).filter(D=>!u.includes(D)),m=Object.keys(n).filter(D=>!u.includes(D));return E.length===m.length&&E.every(D=>!!n.hasOwnProperty(D)&&(typeof s[D]=="object"&&s[D]!==null?rg(s[D],n[D],g):s[D]===n[D]))}var Rg;(function(s){s.SDK_READY="sdkStateReady",s.SDK_NOT_READY="sdkStateNotReady",s.SDK_DESTROY="sdkDestroy",s.MESSAGE_RECEIVED="onMessageReceived",s.ROOM_CUSTOM_DATA_RECEIVED="onRoomCustomDataReceived",s.MESSAGE_MODIFIED="onMessageModified",s.MESSAGE_REVOKED="onMessageRevoked",s.MESSAGE_READ_BY_PEER="onMessageReadByPeer",s.MESSAGE_READ_RECEIPT_RECEIVED="onMessageReadReceiptReceived",s.MESSAGE_EXTENSIONS_UPDATED="onMessageExtensionsUpdated",s.MESSAGE_EXTENSIONS_DELETED="onMessageExtensionsDeleted",s.MESSAGE_REACTIONS_UPDATED="onMessageReactionsUpdated",s.CONVERSATION_LIST_UPDATED="onConversationListUpdated",s.TOTAL_UNREAD_MESSAGE_COUNT_UPDATED="onTotalUnreadMessageCountUpdated",s.CONVERSATION_GROUP_LIST_UPDATED="onConversationGroupListUpdated",s.CONVERSATION_IN_GROUP_UPDATED="onConversationInGroupUpdated",s.GROUP_LIST_UPDATED="onGroupListUpdated",s.GROUP_ATTRIBUTES_UPDATED="groupAttributesUpdated",s.GROUP_COUNTER_UPDATED="onGroupCounterUpdated",s.TOPIC_CREATED="onTopicCreated",s.TOPIC_DELETED="onTopicDeleted",s.TOPIC_UPDATED="onTopicUpdated",s.PROFILE_UPDATED="onProfileUpdated",s.USER_STATUS_UPDATED="onUserStatusUpdated",s.BLACKLIST_UPDATED="blacklistUpdated",s.FRIEND_LIST_UPDATED="onFriendListUpdated",s.FRIEND_GROUP_LIST_UPDATED="onFriendGroupListUpdated",s.FRIEND_APPLICATION_LIST_UPDATED="onFriendApplicationListUpdated",s.MY_FOLLOWERS_LIST_UPDATED="onMyFollowersListUpdated",s.MY_FOLLOWING_LIST_UPDATED="onMyFollowingListUpdated",s.MUTUAL_FOLLOWERS_LIST_UPDATED="onMutualFollowersListUpdated",s.KICKED_OUT="kickedOut",s.ERROR="error",s.NET_STATE_CHANGE="netStateChange",s.ALL_RECEIVE_MESSAGE_OPT_UPDATED="onAllReceiveMessageOptUpdated",s.SERVER_CONFIG_UPDATED="onServerConfigUpdated",s.PINNED_GROUP_MESSAGE_UPDATED="onPinnedGroupMessageUpdated",s.WEB_PUSH_MESSAGE_RECEIVED="onWebPushMessageReceived",s.GROUP_ONLINE_MEMBER_COUNT_CHANGED="onGroupOnlineMemberCountChanged",s.RICH_STATUS_CHANGED="onRichStatusChanged"})(Rg||(Rg={}));var Dn,Dr=Rg;(function(s){s.LOGOUT="logout",s.DESTROY="destroy",s.CLOUD_CONFIG_UPDATE="cloud_config_update",s.PROFILE_UPDATE="profile_updated",s.ERROR="error",s.RECONNECTED="reconnected",s.FORCE_OFFLINE="im_open_status.stat_forceoffline",s.COMMERCIAL_CONFIG_PUSH="im_sdk_config_mgr.push_imsdk_purchase_bitsv2",s.OVERLOAD_PUSH="OverLoadPush.notify2",s.NEW_MESSAGE="new_message",s.MESSAGE_PUSH="im_open_push.msg_push",s.MESSAGE_DELETED="message_deleted",s.MESSAGE_REVOKED="message_revoked",s.MESSAGE_MODIFIED="message_modified",s.SOCKET_DISCONNECTED="socket_disconnected",s.CONVERSATION_UPDATED="conversation_updated",s.TOPIC_MESSAGE_DELETED="topic_message_deleted",s.TOPIC_MESSAGE_REVOKED="topic_message_revoked",s.TOPIC_MESSAGE_MODIFIED="topic_message_modified",s.TOPIC_NEW_MESSAGE="topic_new_message",s.QUALITY_STAT="quality_stat",s.SYNC_CONVERSATION_LIST="sync_conversation_list",s.HISTORY_MESSAGE_FETCHED="history_message_fetched"})(Dn||(Dn={}));var ui,no=Dn;(function(s){s.NEW_INVITATION_RECEIVED="newInvitationReceived",s.INVITEE_ACCEPTED="ts_invitee_accepted",s.INVITEE_REJECTED="ts_invitee_rejected",s.INVITATION_CANCELLED="ts_invitation_cancelled",s.INVITATION_TIMEOUT="ts_invitation_timeout",s.INVITATION_MODIFIED="ts_invitation_modified"})(ui||(ui={}));var qc=ui;const zg=Object.assign({},{KICKED_OUT_MULT_ACCOUNT:"multipleAccount",KICKED_OUT_MULT_DEVICE:"multipleDevice",KICKED_OUT_USERSIG_EXPIRED:"userSigExpired",KICKED_OUT_REST_API:"REST_API_Kick"}),wg={MSG_TEXT:"TIMTextElem",MSG_IMAGE:"TIMImageElem",MSG_AUDIO:"TIMSoundElem",MSG_FILE:"TIMFileElem",MSG_FACE:"TIMFaceElem",MSG_VIDEO:"TIMVideoFileElem",MSG_LOCATION:"TIMLocationElem",MSG_GRP_TIP:"TIMGroupTipElem",MSG_GRP_SYS_NOTICE:"TIMGroupSystemNoticeElem",MSG_CUSTOM:"TIMCustomElem",MSG_MERGER:"TIMRelayElem",MSG_STREAM:"TIMStreamElem"};var Yr;(function(s){s.UNSENT="unSend",s.SUCCESS="success",s.FAIL="fail"})(Yr||(Yr={}));const yc={modify:no.MESSAGE_MODIFIED,delete:no.MESSAGE_DELETED,revoke:no.MESSAGE_REVOKED};var Kc;(function(s){s[s.FORWARD=0]="FORWARD",s[s.BACKWARD=1]="BACKWARD"})(Kc||(Kc={}));const ag=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},wg),{MSG_PRIORITY_HIGH:"High",MSG_PRIORITY_NORMAL:"Normal",MSG_PRIORITY_LOW:"Low",MSG_PRIORITY_LOWEST:"Lowest"}),{RECEIVE_WITH_OFFLINE_PUSH_EXCEPT_AT:"AcceptNotNotifyExceptAt",NOT_RECEIVE_OFFLINE_PUSH_EXCEPT_AT:"AcceptNotNotifyExceptAt",NOT_RECEIVE_MSG_EXCEPT_AT:"NotReceiveMsgExceptAt",MSG_AT_ALL:"__kImSDK_MesssageAtALL__"}),{MSG_REMIND_ACPT_AND_NOTE:"AcceptAndNotify",MSG_REMIND_ACPT_NOT_NOTE:"AcceptNotNotify",MSG_REMIND_DISCARD:"Discard"}),{MessageStatus:Yr,Direction:Kc}),_u={[yc.modify]:no.TOPIC_MESSAGE_MODIFIED,[yc.delete]:no.TOPIC_MESSAGE_DELETED,[yc.revoke]:no.TOPIC_MESSAGE_REVOKED},SE={GENDER_UNKNOWN:"Gender_Type_Unknown",GENDER_FEMALE:"Gender_Type_Female",GENDER_MALE:"Gender_Type_Male",USER_STATUS_UNKNOWN:0,USER_STATUS_ONLINE:1,USER_STATUS_OFFLINE:2,USER_STATUS_UNLOGINED:3,USER_NOT_FOUND:"@TLS#NOT_FOUND"},_g=Object.assign({},SE),ka={CONV_C2C:"C2C",CONV_GROUP:"GROUP",CONV_TOPIC:"TOPIC",CONV_SYSTEM:"@TIM#SYSTEM"},Dc=Object.assign(Object.assign(Object.assign(Object.assign({},ka),{CONV_AT_ME:1,CONV_AT_ALL:2,CONV_AT_ALL_AT_ME:3}),{CONV_MARK_TYPE_STAR:1,CONV_MARK_TYPE_UNREAD:2,CONV_MARK_TYPE_FOLD:4,CONV_MARK_TYPE_HIDE:8}),{READ_ALL_C2C_MSG:"readAllC2CMessage",READ_ALL_GROUP_MSG:"readAllGroupMessage",READ_ALL_MSG:"readAllMessage"}),ME=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},{SNS_TYPE_NO_RELATION:"CheckResult_Type_NoRelation",SNS_TYPE_A_WITH_B:"CheckResult_Type_AWithB",SNS_TYPE_B_WITH_A:"CheckResult_Type_BWithA",SNS_TYPE_BOTH_WAY:"CheckResult_Type_BothWay"}),{ALLOW_TYPE_ALLOW_ANY:"AllowType_Type_AllowAny",ALLOW_TYPE_NEED_CONFIRM:"AllowType_Type_NeedConfirm",ALLOW_TYPE_DENY_ANY:"AllowType_Type_DenyAny"}),{SNS_ADD_TYPE_SINGLE:"Add_Type_Single",SNS_ADD_TYPE_BOTH:"Add_Type_Both"}),{SNS_DELETE_TYPE_SINGLE:"Delete_Type_Single",SNS_DELETE_TYPE_BOTH:"Delete_Type_Both"}),{SNS_APPLICATION_TYPE_BOTH:"Pendency_Type_Both",SNS_APPLICATION_SENT_TO_ME:"Pendency_Type_ComeIn",SNS_APPLICATION_SENT_BY_ME:"Pendency_Type_SendOut",SNS_APPLICATION_AGREE:"Response_Action_Agree",SNS_APPLICATION_AGREE_AND_ADD:"Response_Action_AgreeAndAdd"}),{SNS_CHECK_TYPE_BOTH:"CheckResult_Type_Both",SNS_CHECK_TYPE_SINGLE:"CheckResult_Type_Single"}),{FORBID_TYPE_NONE:"AdminForbid_Type_None",FORBID_TYPE_SEND_OUT:"AdminForbid_Type_SendOut"}),La={GRP_WORK:"Private",GRP_PUBLIC:"Public",GRP_MEETING:"ChatRoom",GRP_AVCHATROOM:"AVChatRoom",GRP_COMMUNITY:"Community",GRP_ROOM:"Room",GRP_LIVE:"Live"},sa={COMMUNITY:"@TGS#_",TOPIC:"@TOPIC#_"},Tg={JOINED:1,QUITTED:2,KICKED:3,ADMIN_SET:4,ADMIN_CANCELED:5,GROUP_PROFILE_UPDATED:6,GROUP_MEMBER_PROFILE_UPDATED:7,TOPIC_PROFILE_UPDATED:8},gI=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},La),{GRP_MBR_ROLE_OWNER:"Owner",GRP_MBR_ROLE_ADMIN:"Admin",GRP_MBR_ROLE_MEMBER:"Member",GRP_MBR_ROLE_CUSTOM:"Custom"}),{GRP_TIP_MBR_JOIN:1,GRP_TIP_MBR_QUIT:2,GRP_TIP_MBR_KICKED_OUT:3,GRP_TIP_MBR_SET_ADMIN:4,GRP_TIP_MBR_CANCELED_ADMIN:5,GRP_TIP_GRP_PROFILE_UPDATED:6,GRP_TIP_MBR_PROFILE_UPDATED:7,GRP_TIP_BAN_AVCHATROOM_MEMBER:10,GRP_TIP_UNBAN_AVCHATROOM_MEMBER:11}),{JOIN_OPTIONS_FREE_ACCESS:"FreeAccess",JOIN_OPTIONS_NEED_PERMISSION:"NeedPermission",JOIN_OPTIONS_DISABLE_APPLY:"DisableApply",JOIN_STATUS_SUCCESS:"JoinedSuccess",JOIN_STATUS_ALREADY_IN_GROUP:"AlreadyInGroup",JOIN_STATUS_WAIT_APPROVAL:"WaitAdminApproval"}),{INVITE_OPTIONS_DISABLE_INVITE:"DisableInvite",INVITE_OPTIONS_NEED_PERMISSION:"NeedPermission",INVITE_OPTIONS_FREE_ACCESS:"FreeAccess"}),{GRP_PROFILE_OWNER_ID:"ownerID",GRP_PROFILE_CREATE_TIME:"createTime",GRP_PROFILE_LAST_INFO_TIME:"lastInfoTime",GRP_PROFILE_MEMBER_NUM:"memberNum",GRP_PROFILE_MAX_MEMBER_NUM:"maxMemberNum",GRP_PROFILE_JOIN_OPTION:"joinOption",GRP_PROFILE_INVITE_OPTION:"inviteOption",GRP_PROFILE_INTRODUCTION:"introduction",GRP_PROFILE_NOTIFICATION:"notification",GRP_PROFILE_MUTE_ALL_MBRS:"muteAllMembers"}),{GROUP_ID_PREFIX:sa,GROUP_TIPS_OPERATION_TYPE:Tg}),hs={IOS_OFFLINE_PUSH_NO_SOUND:"push.no_sound",IOS_OFFLINE_PUSH_DEFAULT_SOUND:"default"},Lo=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},zg),ag),_g),Dc),ME),gI),hs),{NET_STATE_CONNECTING:"connecting",NET_STATE_DISCONNECTED:"disconnected",NET_STATE_CONNECTED:"connected"}),da={NO_SDKAPPID:2e3,NO_TINYID:2022,NO_A2KEY:2023,USER_NOT_LOGGED_IN:2024,REPEAT_LOGIN:2025,MSG_SEND_FAIL:2100,MSG_SEND_FAIL_NOT_IN_AV:2101,MSG_SEND_GRP_WITH_TOPIC_FAIL:2115,MSG_INSTANCE_REQUIRED:2105,MSG_INVALID_CONV_TYPE:2106,MSG_REVOKE_FAIL:2110,MSG_DELETE_FAIL:2111,MSG_UNREAD_ALL_FAIL:2112,READ_RECEIPT_MSG_LIST_EMPTY:2114,CANNOT_DELETE_GRP_SYSTEM_NOTICE:2116,NOT_MY_FRIEND:2700,NETWORK_ERROR:2800,NETWORK_TIMEOUT:2801,NO_NETWORK:2805,UNCAUGHT_ERROR:2903,INVALID_OPERATION:2905,SDK_IS_NOT_READY:2999,LOGGING_IN:3e3,LOGIN_FAILED:3001,KICKED_OUT_MULT_DEVICE:3002,KICKED_OUT_MULT_ACCOUNT:3003,KICKED_OUT_USERSIG_EXPIRED:3004,LOGGED_OUT:3005,KICKED_OUT_REST_API:3006,NO_USE:3122,OPTIONS_IS_EMPTY:3153,MSG_A2KEY_EXPIRED:20002,ACCOUNT_A2KEY_EXPIRED:70001,HELLO_ANSWER_KICKED_OUT:1002,OPEN_SERVICE_OVERLOAD_ERROR:60022},nr={BASIC:"1",STANDARD:"2",PROFESSIONAL:"3",NODE:"4"},Vt={SYNC_SERVER_INFO_AFTER_RE_ONLINE:"sync-server-info-after-re-online",SYNC_SERVER_INFO_AFTER_LOGIN:"sync-server-info-after-login",RECEIVE_C2C_NEW_MESSAGE:"receive-c2c-new-message",RECEIVE_GROUP_NEW_MESSAGE:"receive-group-new-message",RECEIVE_GROUP_TIPS_NOTIFICATION:"receive-group-tips-notification"},Kt={USER_STATUS_UPDATE:"user-status-update",CONVERSATION_RECOVER:"conversation-recover",HISTORY_MESSAGE_RECOVER:"history-message-recover",BLACKLIST_RECOVER:"blacklist-recover",FRIEND_RECOVER:"friend-recover",GROUP_ATTRIBUTE_CACHE_CLEAR:"group-attribute-cache-clear",UNREAD_MESSAGE_RECOVER:"unread-message-recover",HANDLE_NEW_MESSAGE:"handle-new-message",HANDLE_CONVERSATION_PROFILE_UPDATED:"handle-conversation-profile-updated",COMMERCIAL_CONFIG_UPDATE:"commercial-config-update",UNREAD_MESSAGE_SYNC:"unread-message-sync",FRIEND_AND_BLACKLIST_SYNC:"friend-and-blacklist-sync",SIGNALING_MESSAGE_RECOVER:"signaling-message-recover",GROUP_LIST_SYNC:"group-list-sync",CONVERSATION_LIST_SYNC:"conversation-list-sync",USER_PROFILE_SYNC:"user-profile-sync",CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED:"conversation-update-after-unread-sync-finished",CONVERSATION_UPDATE_AFTER_GROUP_LIST_SYNC_FINISHED:"conversation-update-after-group-list-sync-finished",HANDLE_C2C_NEW_MESSAGE:"handle-c2c-new-message",HANDLE_GROUP_NEW_MESSAGE:"handle-group-new-message",CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE:"create-or-update-conversation-by-receive-new-message",HANDLE_GROUP_TIPS_FROM_SYNC_UNREAD:"handle-group-tips-from-sync-unread",HANDLE_C2C_REVOKED_MESSAGE_FROM_SYNC_UNREAD:"handle-c2c-revoked-message-from-sync-unread",GROUP_REVOKED_NOTICE_RECOVER:"group-revoked-notice-recover",CLOUD_CONFIG_SYNC:"cloud-config-sync",UPDATE_GROUP_NEXT_SEQUENCE:"update-group-next-sequence",EMIT_C2C_MESSAGE_EVENT:"emit-c2c-message-event",EMIT_GROUP_MESSAGE_EVENT:"emit-group-message-event",CONVERSATION_GROUP_LIST_SYNC:"conversation-group-list-sync",CONVERSATION_GROUP_UPDATE:"conversation-group-update",UPDATE_TOPIC_AFTER_UNREAD_SYNC_FINISHED:"update-topic-after-unread-sync-finished",UPDATE_TOPIC_BY_RECEIVE_NEW_MESSAGE:"update-topic-by-received-new-message",TOPIC_REQUEST_INFO_RESET:"topic-request-info-reset",QUALITY_REPORT:"quality-report",GROUP_TIPS_RECOVER:"group-tips-recover",HANDLE_GROUP_TIPS_NOTIFICATION:"handle-group-tips-notification",C2C_HISTORY_MESSAGE_RECOVER:"c2c-history-message-recover",FRIEND_APPLICATION_LIST_RECOVER:"friend-application-list-recover",EMIT_GROUP_TIPS_EVENT:"emit-group-tips-event",STREAM_MESSAGE_RECOVER:"stream-message-recover"},Ng={[Vt.SYNC_SERVER_INFO_AFTER_RE_ONLINE]:[{stepId:Kt.USER_STATUS_UPDATE},{stepId:Kt.GROUP_ATTRIBUTE_CACHE_CLEAR},{stepId:Kt.UNREAD_MESSAGE_SYNC,dependency:Kt.C2C_HISTORY_MESSAGE_RECOVER},{stepId:Kt.CONVERSATION_RECOVER},{stepId:Kt.HISTORY_MESSAGE_RECOVER,dependency:Kt.CONVERSATION_RECOVER},{stepId:Kt.BLACKLIST_RECOVER},{stepId:Kt.FRIEND_RECOVER},{stepId:Kt.FRIEND_APPLICATION_LIST_RECOVER},{stepId:Kt.GROUP_REVOKED_NOTICE_RECOVER,dependency:Kt.HISTORY_MESSAGE_RECOVER},{stepId:Kt.GROUP_TIPS_RECOVER,dependency:Kt.HISTORY_MESSAGE_RECOVER},{stepId:Kt.TOPIC_REQUEST_INFO_RESET},{stepId:Kt.HANDLE_C2C_REVOKED_MESSAGE_FROM_SYNC_UNREAD,dependency:Kt.UNREAD_MESSAGE_SYNC},{stepId:Kt.HANDLE_GROUP_TIPS_FROM_SYNC_UNREAD,dependency:Kt.UNREAD_MESSAGE_SYNC},{stepId:Kt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,dependency:[Kt.UNREAD_MESSAGE_SYNC,Kt.CONVERSATION_RECOVER]},{stepId:Kt.EMIT_C2C_MESSAGE_EVENT,dependency:[Kt.UNREAD_MESSAGE_SYNC,Kt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED],skipIfDependencyMissing:!1},{stepId:Kt.C2C_HISTORY_MESSAGE_RECOVER,dependency:Kt.CONVERSATION_RECOVER},{stepId:Kt.STREAM_MESSAGE_RECOVER}],[Vt.SYNC_SERVER_INFO_AFTER_LOGIN]:[{stepId:Kt.COMMERCIAL_CONFIG_UPDATE},{stepId:Kt.CLOUD_CONFIG_SYNC},{stepId:Kt.USER_PROFILE_SYNC},{stepId:Kt.UNREAD_MESSAGE_SYNC},{stepId:Kt.FRIEND_AND_BLACKLIST_SYNC},{stepId:Kt.GROUP_LIST_SYNC},{stepId:Kt.CONVERSATION_LIST_SYNC},{stepId:Kt.SIGNALING_MESSAGE_RECOVER,dependency:Kt.UNREAD_MESSAGE_SYNC},{stepId:Kt.UPDATE_TOPIC_AFTER_UNREAD_SYNC_FINISHED,dependency:[Kt.UNREAD_MESSAGE_SYNC]},{stepId:Kt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,dependency:[Kt.UNREAD_MESSAGE_SYNC,Kt.CONVERSATION_LIST_SYNC]},{stepId:Kt.CONVERSATION_UPDATE_AFTER_GROUP_LIST_SYNC_FINISHED,dependency:[Kt.GROUP_LIST_SYNC,Kt.CONVERSATION_LIST_SYNC]},{stepId:Kt.CONVERSATION_GROUP_LIST_SYNC},{stepId:Kt.CONVERSATION_GROUP_UPDATE,dependency:[Kt.CONVERSATION_LIST_SYNC,Kt.CONVERSATION_GROUP_LIST_SYNC]},{stepId:Kt.QUALITY_REPORT}],[Vt.RECEIVE_C2C_NEW_MESSAGE]:[{stepId:Kt.HANDLE_C2C_NEW_MESSAGE},{stepId:Kt.UNREAD_MESSAGE_SYNC},{stepId:Kt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,dependency:Kt.HANDLE_C2C_NEW_MESSAGE},{stepId:Kt.EMIT_C2C_MESSAGE_EVENT,dependency:[Kt.HANDLE_C2C_NEW_MESSAGE,Kt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE],skipIfDependencyMissing:!1},{stepId:Kt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,dependency:[Kt.UNREAD_MESSAGE_SYNC]}],[Vt.RECEIVE_GROUP_NEW_MESSAGE]:[{stepId:Kt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Kt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,dependency:Kt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Kt.UPDATE_GROUP_NEXT_SEQUENCE,dependency:Kt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Kt.UPDATE_TOPIC_BY_RECEIVE_NEW_MESSAGE,dependency:Kt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Kt.EMIT_GROUP_MESSAGE_EVENT,dependency:[Kt.HANDLE_GROUP_NEW_MESSAGE,Kt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE],skipIfDependencyMissing:!1}],[Vt.RECEIVE_GROUP_TIPS_NOTIFICATION]:[{stepId:Kt.HANDLE_GROUP_TIPS_NOTIFICATION},{stepId:Kt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,dependency:Kt.HANDLE_GROUP_TIPS_NOTIFICATION},{stepId:Kt.EMIT_GROUP_TIPS_EVENT,dependency:[Kt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,Kt.HANDLE_GROUP_TIPS_NOTIFICATION],skipIfDependencyMissing:!1}]},cI={MESSAGE_SEND_SUCCESS_RATE:"messageSendSuccessRate"},rr={TOTAL_COUNT:"sendMessageTotalCount",SUCCESS_COUNT:"sendMessageSuccessCount",FAILED_COUNT:"sendMessageFailedCount",SEND_COST:"sendMessageCost"},qI=["login","getMyProfile","getUserProfile","updateMyProfile","setSelfStatus","getUserStatus","subscribeUserStatus","unsubscribeUserStatus","modifyMessage","deleteGroupMember","dismissGroup","getGroupMemberList","getGroupOnlineMemberCount","joinGroup","markGroupMemberList","quitGroup","searchCloudMessages","searchCloudGroups","searchCloudGroupMembers","searchCloudUsers","getMyFollowingList","getMyFollowersList","getMutualFollowersList","followUser","unfollowUser","getUserFollowInfo","checkFollowType","getFriendProfile","addFriend","deleteFriend","updateFriend","checkFriend","setFriendApplicationRead","createFriendGroup","deleteFriendGroup","addToFriendGroup","removeFromFriendGroup","renameFriendGroup","changeGroupOwner","createGroup","dismissGroup","getGroupList","getGroupOnlineMemberCount","getGroupProfile","searchGroupByID","updateGroupProfile","handleGroupApplication","deleteGroupAttributes","getGroupAttributes","initGroupAttributes","setGroupAttributes","addGroupMember","deleteGroupMember","getGroupMemberList","getGroupMemberProfile","setGroupMemberMuteTime","setGroupMemberNameCard","setGroupMemberRole","deleteMessage","revokeMessage","setMessageExtensions","getMessageExtensions","deleteMessageExtensions","getMessageList","addMessageReaction","removeMessageReaction","clearHistoryMessage","sendMessageReadReceipt","getMessageReadReceiptList","getGroupMessageReadMemberList","createMergerMessage","invite","accept","cancel","reject","modifyInvitation","deleteConversation","pinConversation","setMessageRead","setAllMessageRead","getConversationList","getTotalUnreadMessageCount","renameConversationGroup","deleteConversationGroup","markConversation","setConversationCustomData","deleteConversationsFromGroup","addConversationsToGroup","createConversationGroup"];var za=Object.freeze({__proto__:null,ERROR_CODE:da,InnerEvent:no,NEED_LOG_API:qI,OuterConstant:Lo,OuterEvent:Dr,PUSH:hs,QUALITY_METRICS:cI,SDK_EDITION:nr,SDK_INFO:{VERSION:"1.7.3",APPID:537048168},SEND_MESSAGE_STAT:rr,SignalingEvent:qc,WEB_PUSH_ACCOUNT_TYPE:1,WORKFLOW_DEFINITIONS:Ng,WORKFLOW_NAME:Vt,WORKFLOW_STEP:Kt}),na,un,Sn;(function(s){s[s.USER_INITIATED=0]="USER_INITIATED",s[s.KICKED_OUT=1]="KICKED_OUT"})(na||(na={})),function(s){s[s.multipleAccount=1]="multipleAccount",s[s.multipleDevice=2]="multipleDevice",s[s.restApi=3]="restApi"}(un||(un={})),function(s){s[s.multipleDevice=3002]="multipleDevice",s[s.multipleAccount=3003]="multipleAccount",s[s.usersigExpired=70001]="usersigExpired",s[s.restApi=20002]="restApi"}(Sn||(Sn={}));const Tu={[un.multipleAccount]:"multipleAccount",[un.multipleDevice]:"multipleDevice",[un.restApi]:"REST_API_Kick",[Sn.multipleAccount]:"multipleAccount",[Sn.multipleDevice]:"multipleDevice",[Sn.restApi]:"REST_API_Kick",[Sn.usersigExpired]:"userSigExpired"},Gg="login_online_presence_task",{ERROR:Ua,DESTROY:jc,FORCE_OFFLINE:KI}=no,{KICKED_OUT_MULT_ACCOUNT:vE,KICKED_OUT_MULT_DEVICE:lI,KICKED_OUT_REST_API:Nu,ACCOUNT_A2KEY_EXPIRED:Rl,MSG_A2KEY_EXPIRED:Sc}=da;class Gu{init(){const{notificationCenter:n}=fe;n.subscribeInnerEvent(KI,this._handleForceOfflineFromServerPush,this),n.subscribeInnerEvent(Ua,Sc,this._handleForceOfflineFromResponse,this,this._isChatLoginEvent),n.subscribeInnerEvent(Ua,Rl,this._handleForceOfflineFromResponse,this,this._isChatLoginEvent),n.subscribeInnerEvent(Ua,vE,this._handleForceOfflineFromResponse,this),n.subscribeInnerEvent(Ua,lI,this._handleForceOfflineFromResponse,this),n.subscribeInnerEvent(Ua,Nu,this._handleForceOfflineFromResponse,this),n.subscribeInnerEvent(jc,this._dispose,this)}_handleForceOfflineFromServerPush(n){var g;if(((g=fe.store.get("login"))===null||g===void 0?void 0:g.isLoggedIn)===!0){const{EventArray:u=[]}=n?.body||{};this._extractKickedOutMessages(u).forEach(E=>{const{KickoutMsgNotify:{KickType:m,NewInstInfo:D,Instid:M}}=E;this._isCurrentInstanceKickedOut(M)&&this._processKickedOutReasonInfo({kickedOutReasonCode:m,newInstanceInfo:D})})}}_extractKickedOutMessages(n){return n.reduce((g,u)=>[...g,...u.C2cNotifyMsgArray||[]],[]).filter(g=>{var u;return this._isKickedOut((u=g?.KickoutMsgNotify)===null||u===void 0?void 0:u.KickType)})}_handleForceOfflineFromResponse(n){const{errorCode:g}=n;this._processKickedOutReasonInfo({kickedOutReasonCode:g})}_processKickedOutReasonInfo(n){return pA(this,void 0,void 0,function*(){const{kickedOutReasonCode:g}=n,{ssoLog:u,utils:{safeStringify:E}}=fe;try{this._logKickedOutEvent(n),this._shouldLogoutAfterKickedOut(g)?yield fe.login.loginAction.logout(na.KICKED_OUT):fe.login.loginAction.handleLogoutCompleted()}catch(m){u.debug("_processKickedOutReasonInfo",` fail ${E(m)}`)}finally{fe.notificationCenter.emitOuterEvent(Dr.KICKED_OUT,{data:{type:Tu[g]},name:Dr.KICKED_OUT})}})}_logKickedOutEvent(n){const{kickedOutReasonCode:g,newInstanceInfo:u={}}=n,E=`type:${Tu[g]} newInstanceInfo: ${JSON.stringify(u)}`;fe.ssoLog.warn("kickedOut",E)}_isKickedOut(n){return[un.multipleAccount,un.multipleDevice,un.restApi].includes(n)}_isChatLoginEvent(n){const{requestHead:g}=n||{};return g?.idtype!==1}_shouldLogoutAfterKickedOut(n){return![Sn.usersigExpired,un.restApi].includes(n)}_isCurrentInstanceKickedOut(n){const{isLoggedIn:g,statusInstanceId:u}=fe.store.get("login")||{};return g===!0&&n===u}_dispose(){const{notificationCenter:n}=fe;n.unSubscribeInnerEvent(KI,this._handleForceOfflineFromServerPush,this),n.unSubscribeInnerEvent(Ua,Rl,this._handleForceOfflineFromResponse,this),n.unSubscribeInnerEvent(Ua,Sc,this._handleForceOfflineFromResponse,this),n.unSubscribeInnerEvent(Ua,vE,this._handleForceOfflineFromResponse,this),n.unSubscribeInnerEvent(Ua,lI,this._handleForceOfflineFromResponse,this),n.unSubscribeInnerEvent(Ua,Nu,this._handleForceOfflineFromResponse,this),n.unSubscribeInnerEvent(jc,this._dispose,this)}}function bu(s){return pA(this,void 0,void 0,function*(){const n="im_open_status.wslogin",g=fe.common.generateProtocolData({servcmd:n,data:{State:"Online",is_web_uniapp:0,InstType:0,CustomInfo:s}}),u=`${g.head.seq}${n}`,E=yield fe.channel.sendPacket(g,{timeout:9e4,requestId:u});if(E){const{HelloInterval:m,InstId:D,TinyId:M,TimeStamp:T,CustomStatus:P,PurchaseBits:W,A2Key:iA,RichMsgAuthKey:EA,ErrorCode:RA,ErrorInfo:kA,ActionStatus:xA}=E;return{helloInterval:m,instanceID:D,tinyID:M,timeStamp:T,customStatus:P,purchaseBits:W,a2Key:iA,authKey:EA,errorCode:RA,errorInfo:kA,actionStatus:xA}}})}function wl(){const{store:s}=fe;return ua(s.get("instance").sdkAppId)!==ut.CHINA}function rs(s){var n;try{const g=$i.getStorage("errorMessage");if(!s||!g)return"";const u=((n=JSON.parse(g))===null||n===void 0?void 0:n.errorMessage)||{},{code:E,replacement1:m="",replacement2:D=""}=s;if(!E)return"";const M=wl()?`${E}_en`:`${E}_cn`;let T=u[u[M]?M:E]||"";return T&&(m&&(T=T.replace("$replacement1",m)),D&&(T=T.replace("$replacement2",D))),T}catch(g){return console.warn("Error parsing stored error messages:",g),""}}class gs extends Error{constructor(n={}){n.code=n.code||n.errorCode;let{functionName:g="Unknown",code:u,message:E="",data:m="",moreMessage:D="",errorMessage:M=""}=n;M=(u?rs(n):"")||M||E;let T=u?`${g} failed. error: {"message": ${M}, "code": ${u}}`:`${g} failed. error: {"message": ${M}}`;T=`${T} ${D}`,super(),this.code=u,this.errorCode=u,this.errorMessage=M,this.message=T,this.data=m}}function ud(s,n){var g;if(s&&((g=fe.store.get("login"))===null||g===void 0?void 0:g.isLoggedIn)!==!0)throw new gs({code:da.USER_NOT_LOGGED_IN,functionName:n})}function II(s,n,g){if(Array.isArray(s))for(let u=0;u{return P===(W=u,Object.prototype.toString.call(W).match(/^\[object (.*)\]$/)[1].toLowerCase());var W})){for(let W=0;W{const{interceptor:E,context:m}=u;E.apply(m,[g])})}(s)}function Mc(s,n){RE.push({interceptor:s,context:n})}function Wc(s){const{params:n,auth:g}=s;n&&typeof n=="object"&&Object.assign(_l,n),g&&typeof g=="object"&&Object.assign(Ed,g)}function tn(s){return fe.store.get("commercialConfig").get(s)}class ws{constructor(){this._handlers=new Map,this._activeWorkflows=new Map,this._stepStartTimes=new Map,this._logHandlers={start:(n,g)=>{const u=Date.now();g?(this._stepStartTimes.set(`${n}-${g}`,u),fe.ssoLog.debug("_executeWorkflowStep",`[Workflow ${n}] Step ${g} started at ${new Date(u).toISOString()}`)):(this._workflowStartTimes.set(n,u),fe.ssoLog.debug("_executeWorkflowStep",`[Workflow ${n}] started at ${new Date(u).toISOString()}`))},success:(n,g)=>{const u=Date.now();if(g){const E=this._stepStartTimes.get(`${n}-${g}`),m=E?u-E:0;this._stepStartTimes.delete(`${n}-${g}`),fe.ssoLog.debug("_executeWorkflowStep",`[Workflow ${n}] Step ${g} completed successfully at ${new Date(u).toISOString()} (${m}ms)`)}else{const E=this._workflowStartTimes.get(n),m=E?u-E:0;this._workflowStartTimes.delete(n),fe.ssoLog.debug("_executeWorkflowStep",`[Workflow ${n}] completed successfully at ${new Date(u).toISOString()} (${m}ms)`)}},error:(n,g,u)=>{const{ssoLog:E,utils:{safeStringify:m}}=fe,D=Date.now();if(g){const M=this._stepStartTimes.get(`${n}-${g}`),T=M?D-M:0;this._stepStartTimes.delete(`${n}-${g}`),E.error("_executeWorkflowStep",`[Workflow ${n}] Step ${g} failed at ${new Date(D).toISOString()} (${T}ms) ${m(u)}`,{error:u})}else{const M=this._workflowStartTimes.get(n),T=M?D-M:0;this._workflowStartTimes.delete(n),E.error("_executeWorkflowStep",`[Workflow ${n}] failed at ${new Date(D).toISOString()} (${T}ms) ${m(u)}`,{error:u})}}}}static getInstance(){return ws._instance||(ws._instance=new ws),ws._instance}static setInstance(n){ws._instance=n}init(){this._initializeWorkflows()}registerWorkflowStep(n,g,u,E){if(!this._handlers.has(n))return void fe.ssoLog.debug("registerWorkflowStep",`Workflow '${n}' not defined in core`);if(!Ng[n].find(D=>D.stepId===g))return void fe.ssoLog.debug("registerWorkflowStep",`Step '${g}' not defined in workflow '${n}'`);const m=this._handlers.get(n);m.has(g)||m.set(g,E?u.bind(E):u)}executeWorkflow(n,g){return pA(this,void 0,void 0,function*(){if(!this._validateWorkflow(n))return;fe.ssoLog.debug("executeWorkflow",`[Workflow ${n}] Started execution at ${new Date().toISOString()}`);const u=Ng[n],E={},m={cancelled:!1};this._activeWorkflows.set(n,{cancelToken:m});try{const D=new Map;u.forEach(T=>{D.set(T.stepId,T)});const M={workflowName:n,pendingSteps:new Set(u.map(T=>T.stepId)),completedSteps:new Set,runningSteps:new Set,stepMap:D,stepResults:E,data:g,cancelToken:m};yield new Promise((T,P)=>{const W=()=>{if(m.cancelled)return void T();this._getExecutableSteps({pendingSteps:M.pendingSteps,completedSteps:M.completedSteps,stepMap:M.stepMap,workflowName:n}).filter(iA=>!M.runningSteps.has(iA)).forEach(iA=>{M.completedSteps.has(iA)||M.runningSteps.has(iA)||this._executeWorkflowStep(iA,M,{onComplete:()=>{if(M.pendingSteps.size===0)return void T();this._getExecutableSteps({pendingSteps:M.pendingSteps,completedSteps:M.completedSteps,stepMap:M.stepMap,workflowName:n}).filter(EA=>!M.runningSteps.has(EA)).length===0&&M.runningSteps.size===0&&(fe.ssoLog.debug("executeWorkflow",`Workflow ${n} completed with some steps skipped due to dependency failures`),T())},onError:P,onStepComplete:W})})};W()}),fe.ssoLog.debug("executeWorkflow",`[Workflow ${n}] Completed execution at ${new Date().toISOString()}`)}catch(D){fe.ssoLog.error("executeWorkflow",`[Workflow ${n}] Failed execution at ${new Date().toISOString()}`,{error:D})}finally{this._activeWorkflows.delete(n)}})}_executeWorkflowStep(n,g,u){return pA(this,void 0,void 0,function*(){const{workflowName:E,runningSteps:m,stepMap:D,stepResults:M,data:T}=g;m.add(n),this._logWorkflowExecution(E,n,"start");try{const P=D.get(n);let W=null;P?.dependency&&(l(P.dependency)?W=M[P.dependency]:Array.isArray(P.dependency)&&(W={},P.dependency.forEach(EA=>{W[EA]=M[EA]})));const iA=this._handlers.get(E).get(n);if(iA){const EA=yield Promise.resolve(iA({data:T,result:W}));M[n]=EA,this._logWorkflowExecution(E,n,"success")}g.completedSteps.add(n)}catch(P){const W=`[Workflow].${E}.${n}`,{errorCode:iA,errorInfo:EA=`${W} failed`}=P||{},RA=new gs({functionName:W,code:iA,message:EA});fe.ssoLog.error(W,EA,{error:RA}),this._logWorkflowExecution(E,n,"error",P),u.onError(P)}finally{m.delete(n),g.pendingSteps.delete(n),u.onStepComplete(),u.onComplete()}})}reset(){this._cancelAllWorkflows()}destroy(){this.reset(),this._handlers.clear()}_initializeWorkflows(){Object.keys(Ng).forEach(n=>{this._handlers.has(n)||this._handlers.set(n,new Map)})}_cancelWorkFlow(n){const g=this._activeWorkflows.get(n);if(!g)return;const{cancelToken:u}=g;u.cancelled=!0,this._activeWorkflows.delete(n)}_cancelAllWorkflows(){Object.keys(Ng).forEach(n=>{this._cancelWorkFlow(n)})}_validateWorkflow(n){return Ng[n]?!!this._handlers.get(n):!1}_getExecutableSteps(n){const{pendingSteps:g,completedSteps:u,stepMap:E,workflowName:m}=n;return Array.from(g).filter(D=>{const M=E.get(D)||{},{dependency:T,skipIfDependencyMissing:P=!0}=M;if(!T)return!0;if(l(T))return this._isStepRegistered({workflowName:m,stepId:T})?u.has(T):!P;if(h(T)){if(T.filter(W=>!this._isStepRegistered({workflowName:m,stepId:W})).length>0&&P)return!1;for(const W of T)if(!u.has(W))return!1;return!0}return!1})}_isStepRegistered(n){var g;const{workflowName:u,stepId:E}=n;return(g=this._handlers.get(u))===null||g===void 0?void 0:g.has(E)}_logWorkflowExecution(n,g,u,E){this._logHandlers[u](n,g)}}const Ca=new Map,Xr=({type:s,groupID:n})=>s===Lo.GRP_COMMUNITY||`${n}`.startsWith(sa.COMMUNITY)&&!`${n}`.includes(sa.TOPIC),zc=(s="")=>{const n=s.startsWith("GROUP")?s.replace("GROUP",""):s;return n.startsWith(sa.COMMUNITY)&&`${n}`.includes(sa.TOPIC)},dd="openim",Zg="million_group_open_http_svc";function gg(s){return pA(this,void 0,void 0,function*(){const{servcmd:n,data:g}=function(m){const{data:D}=m;return wE(D)||Xg(D)}(s)?function(m){let{servcmd:D,data:M}=m;return Xg(M)?function(T){const{servcmd:P,data:W}=T;let{GroupId:iA=""}=W;const EA=iA;return[iA]=EA.split(sa.TOPIC),{servcmd:qn(P),data:Object.assign(Object.assign({},W),{GroupId:iA,TopicId:EA})}}(m):(wE(M)&&(D=qn(D)),{servcmd:D,data:M})}(s):s,u=fe.common.generateProtocolData({servcmd:n,data:g}),E=`${u.head.seq}${n}`;return fe.channel.sendPacket(u,{requestId:E,timeout:s.timeout})})}function wE(s){const{Type:n,GroupId:g,GroupIdList:u=[]}=s,E=g||u[0]||"";return Xr({type:n,groupID:E})}function Xg(s){const{GroupId:n=""}=s;return zc(n)}function qn(s){if(s.includes(dd))return s;const n=s.split(".")[1];return`${Zg}.${n}`}function Ar(){var s;return(s=fe.store.get("login"))===null||s===void 0?void 0:s.userId}const Fa=s=>h(s)||f(s),Cd=(s,n,g,u)=>{if(!Fa(s)||!Fa(n))return 0;let E=0;const m=Object.keys(n);let D;for(let M=0,T=m.length;M{if(r(n))return"";if(s===Lo.MSG_TEXT)return n.text||"";const g=jI[s];return g?ku(g):""},Xc=[{cmd:"ws_get_user_status",interval:5,count:20},{cmd:"ws_status_subscribe",interval:5,count:20},{cmd:"ws_status_unsubscribe",interval:5,count:20},{cmd:"get_group_self_member_info",interval:5,count:20},{cmd:"modify_group_base_info",interval:1,count:8},{cmd:"get_pendency",interval:1,count:15},{cmd:"set_group_attr",interval:5,count:10},{cmd:"modify_group_attr",interval:5,count:10},{cmd:"delete_group_attr",interval:5,count:10},{cmd:"clear_group_attr",interval:5,count:10},{cmd:"get_group_attr",interval:5,count:20},{cmd:"update_group_counter",interval:5,count:20},{cmd:"get_group_counter",interval:5,count:20},{cmd:"get_topic",interval:1,count:10},{cmd:"read_all_unread_msg",interval:1,count:1},{cmd:"query",interval:5,count:20}],WI="im_sdk_config_mgr.fetch_config",EI="im_sdk_config_mgr.push_configv2",$c="cloud-config",Al=2996,va=new class{init(s){this.core=s}};function bg(s){return pA(this,void 0,void 0,function*(){const{sdkAppId:n}=va.core.store.get("instance")||{},g=va.core.helper.generateProtocolData({servcmd:WI,data:{uint32_sdkappid:n,uint64_version:s}}),u=`${g.head.seq}${WI}`;return va.core.channel.sendPacket(g,{requestId:u})})}var ys=new class{constructor(){this._core=null,this._expirationTime=0,this._version=0,this._isFetching=!1,this._cmdFrequencyLimitMap=new Map,this._methodCallFrequencyMap=new Map}install(s){this._core=s;const{notificationCenter:n,InnerEvent:g,helper:u,constants:{WORKFLOW_NAME:E,WORKFLOW_STEP:m},channel:D}=s;n.subscribeInnerEvent(EI,this._handlePushedConfig,this),u.registerWorkflowStep(E.SYNC_SERVER_INFO_AFTER_LOGIN,m.CLOUD_CONFIG_SYNC,this._handleLoginSuccess,this),n.subscribeInnerEvent(g.LOGOUT,this._reset,this),n.subscribeInnerEvent(g.DESTROY,this._dispose,this),u.registerExperimentalAPI("getServerConfig",this),this._updateCmdFreqLimitMap(Xc),D.registerBeforeSendInterceptor(this.checkMethodCallOverLimit,this)}getServerConfig(s){return pA(this,void 0,void 0,function*(){var n;const g={code:0,data:""};return s&&(g.data=((n=this._core.store.get("cloudConfig"))===null||n===void 0?void 0:n[s])||""),g})}checkMethodCallOverLimit(s){if(!this._cmdFrequencyLimitMap.has(s))return;if(!this._methodCallFrequencyMap.has(s))return void this._methodCallFrequencyMap.set(s,{startTime:Date.now(),methodCallCounter:1});const{count:n,interval:g}=this._cmdFrequencyLimitMap.get(s);let{startTime:u,methodCallCounter:E}=this._methodCallFrequencyMap.get(s);if(Date.now()-u>1e3*g)this._methodCallFrequencyMap.set(s,{startTime:Date.now(),methodCallCounter:1});else if(E+=1,this._methodCallFrequencyMap.set(s,{startTime:u,methodCallCounter:E}),E>n)throw new this._core.helper.ChatError({code:Al,replacement1:s})}_handlePushedConfig(s){return pA(this,void 0,void 0,function*(){const{ssoLog:n,utils:{safeStringify:g}}=this._core;n.info("_handlePushedConfig",g(s)),yield this._updateCloudConfig(s)})}_handleLoginSuccess(){return pA(this,void 0,void 0,function*(){const{ssoLog:s,utils:{safeStringify:n}}=this._core;try{if(this._canFetch()){const g=yield bg(this._version);s.info("_fetchCloudConfigIfLogin",n(g)),yield this._updateCloudConfig(g)}this._core.helper.taskScheduler.addTask({id:$c,intervalMs:1e3,callback:this._fetchCloudConfigIfReady,context:this})}catch(g){s.debug("_fetchCloudConfigIfLogin",n(g))}})}_fetchCloudConfigIfReady(){return pA(this,void 0,void 0,function*(){const{ssoLog:s,utils:{safeStringify:n}}=this._core;if(this._canFetch())try{const g=yield bg(this._version);s.info("_fetchCloudConfigIfReady",n(g)),yield this._updateCloudConfig(g)}catch(g){s.error("_fetchCloudConfigIfReady",n(g))}})}_updateCloudConfig(s){return pA(this,void 0,void 0,function*(){const n=this._parseCloudConfig(s);n&&(this._core.store.set("cloudConfig",n),yield this._parseCmdFreqLimit(),this._core.notificationCenter.emitInnerEvent(this._core.InnerEvent.CLOUD_CONFIG_UPDATE,n),this._core.notificationCenter.emitOuterEvent(this._core.OuterEvent.SERVER_CONFIG_UPDATED,{name:this._core.OuterEvent.SERVER_CONFIG_UPDATED,data:{config:n}}))})}_canFetch(){const{isLoggedIn:s}=this._core.store.get("login")||{};return s&&!this._isFetching&&Date.now()>=this._expirationTime}_parseCloudConfig(s){const{int32_error_code:n,str_error_message:g,str_json_config:u,uint32_expired_time:E,uint32_sdkappid:m,uint64_version:D}=s;let M=null;if(n===0){if(this._version!==D)try{M=JSON.parse(u),this._version=D}catch{}this._expirationTime=Date.now()+1e3*E}else this._expirationTime=n===void 0?Date.now()+36e5:Date.now()+12e4;return M}_parseCmdFreqLimit(){return pA(this,void 0,void 0,function*(){var s;let n=(s=yield this.getServerConfig("cmd_frequency_limit"))===null||s===void 0?void 0:s.data;const{isEmpty:g}=this._core.utils;if(!g(n))try{n=JSON.parse(n),this._updateCmdFreqLimitMap(n)}catch(u){console.warn(u)}})}_updateCmdFreqLimitMap(s){s.forEach(n=>{this._cmdFrequencyLimitMap.set(n.cmd,{interval:n.interval,count:n.count})})}_reset(){this._core.helper.taskScheduler.removeTask($c),this._core.store.clear("cloudConfig"),this._updateCmdFreqLimitMap(Xc),this._methodCallFrequencyMap.clear(),this._expirationTime=0,this._version=0,this._isFetching=!1}_dispose(){const{notificationCenter:s,InnerEvent:n}=this._core;s.unSubscribeInnerEvent(EI,this._handlePushedConfig,this),s.unSubscribeInnerEvent(n.LOGOUT,this._reset,this),s.unSubscribeInnerEvent(n.DESTROY,this._dispose,this),this._reset()}};class Kn{constructor(n=0,g=0){this.high=n,this.low=g}equal(n){return n!==null&&this.low===n.low&&this.high===n.high}toString(){const n=Number(this.high).toString(16);let g=Number(this.low).toString(16);if(g.length<8){let u=8-g.length;for(;u;)g=`0${g}`,u--}return n+g}}const vc={SEARCH_GRP_SNS:new Kn(0,Math.pow(2,1)).toString(),AV_HISTORY_MSG:new Kn(0,Math.pow(2,2)).toString(),GRP_COMMUNITY:new Kn(0,Math.pow(2,3)).toString(),MSG_TO_SPECIFIED_GRP_MBR:new Kn(0,Math.pow(2,4)).toString(),AV_MBR_LIST:new Kn(0,Math.pow(2,6)).toString(),USER_STATUS:new Kn(0,Math.pow(2,7)).toString(),CONV_MARK:new Kn(0,Math.pow(2,9)).toString(),CONV_GROUP:new Kn(0,Math.pow(2,10)).toString(),AV_BAN_MBR:new Kn(0,Math.pow(2,11)).toString(),MSG_EXT:new Kn(0,Math.pow(2,13)).toString(),GRP_COUNTER:new Kn(0,Math.pow(2,15)).toString(),PLUGIN_TRANSLATE:new Kn(Math.pow(2,6)).toString(),PLUGIN_VOICE_TO_TEXT:new Kn(Math.pow(2,7)).toString(),PLUGIN_CS:new Kn(Math.pow(2,8)).toString(),PLUGIN_PUSH:new Kn(Math.pow(2,9)).toString(),PLUGIN_BOT:new Kn(Math.pow(2,10)).toString(),MSG_REACTION:new Kn(Math.pow(2,16)).toString(),FOLLOW:new Kn(Math.pow(2,20)).toString()},zI="CommercialConfig",ZI="commercial-config";var _E=new class{constructor(){this._core=null,this._expirationTime=0,this._isFetching=!1,this._featureMap=new Map,this._methodKeyMap=new Map,this._purchaseBits="0"}install(s){this._core=s;const{helper:n,notificationCenter:g,constants:{WORKFLOW_NAME:u,WORKFLOW_STEP:E,InnerEvent:m}}=s;g.subscribeInnerEvent(m.COMMERCIAL_CONFIG_PUSH,this._handlePushedConfig,this),g.subscribeInnerEvent(m.LOGOUT,this._handleLogout,this),g.subscribeInnerEvent(m.DESTROY,this._dispose,this),n.registerWorkflowStep(u.SYNC_SERVER_INFO_AFTER_LOGIN,E.COMMERCIAL_CONFIG_UPDATE,this._syncCommercialConfig,this),s.helper.registerExperimentalAPI("isCommercialAbilityEnabled",this),s.helper.registerExperimentalAPI("queryCommercialAbility",this)}isCommercialAbilityEnabled(s){return pA(this,void 0,void 0,function*(){const n=parseInt(s,10).toString(2),{length:g}=n;let u,E=!0;for(let m=g-1,D=0;m>=0;m--,D++)if(n.charAt(m)==="1"&&(u=D<32?new Kn(0,2**D).toString():new Kn(2**(D-32),0).toString(),!this._featureMap.get(u))){E=!1;break}return this._core.ssoLog.debug("isFeatureEnabled",`${zI}.isFeatureEnabled decimalNumber:${s} key:${u} ret:${E}`),{code:0,data:{enabled:E}}})}queryCommercialAbility(){return this._purchaseBits}_fetchAndParseCommercialConfig(){return pA(this,void 0,void 0,function*(){var s;const{ssoLog:n,utils:{safeStringify:g},common:{buildAndSendPacket:u}}=this._core;try{this._isFetching=!0;const E=yield u({servcmd:"im_sdk_config_mgr.fetch_imsdk_purchase_bitsv2",data:{uint32_sdkappid:(s=this._core.store.get("instance"))===null||s===void 0?void 0:s.sdkAppId}});E&&(this._parseCommercialConfig(E),this._core.store.set("commercialConfig",this._methodKeyMap))}catch(E){n.error("_fetchAndParseCommercialConfig",g(E))}finally{this._isFetching=!1}})}_syncCommercialConfig(s){return pA(this,void 0,void 0,function*(){const{purchaseBits:n}=s?.data||{};n&&(this._parsePurchaseBits(n),this._core.store.set("commercialConfig",this._methodKeyMap)),this._canFetch()&&(yield this._fetchAndParseCommercialConfig()),this._core.helper.taskScheduler.addTask({id:ZI,intervalMs:1e3,callback:this._fetchCommercialConfigIfReady,context:this})})}_canFetch(){var s;const n=(s=this._core.store.get("login"))===null||s===void 0?void 0:s.isLoggedIn,g=Date.now()>=this._expirationTime;return n&&!this._isFetching&&g}_handlePushedConfig(s){s?.body&&(this._parseCommercialConfig(s.body),this._core.store.set("commercialConfig",this._methodKeyMap))}_fetchCommercialConfigIfReady(){return pA(this,void 0,void 0,function*(){this._canFetch()&&(yield this._fetchAndParseCommercialConfig())})}_parseCommercialConfig(s){const{ssoLog:n}=this._core;if(typeof s!="object")return;const{int32_error_code:g,str_error_message:u,str_purchase_bits:E,uint32_expired_time:m}=s;g===0?(this._parsePurchaseBits(E),this._expirationTime=Date.now()+1e3*m):g===void 0?(n.warn("_parseCommercialConfig",`${zI}._parseCommercialConfig failed. Invalid message format:`,s),this._expirationTime=Date.now()+36e5):(n.warn("_parseCommercialConfig",`${zI}._parseCommercialConfig errorCode:${g} errorMessage:${u}`),this._expirationTime=Date.now()+12e4)}_isValidPurchaseBits(s){return s&&typeof s=="string"&&s.length>=1&&s.length<=64&&/[01]{1,64}/.test(s)}_parsePurchaseBits(s){const{ssoLog:n,utils:{safeStringify:g}}=this._core;if(this._isValidPurchaseBits(s)){this._purchaseBits=s,this._featureMap.clear(),this._methodKeyMap.clear();let u=null;for(let E=s.length-1,m=0;E>=0;E--,m++)if(u=m<32?new Kn(0,2**m).toString():new Kn(2**(m-32),0).toString(),s[E]==="1"){this._featureMap.set(u,!0);const D=this._getKeyByValue(vc,u);D&&this._methodKeyMap.set(D,!0)}else{this._featureMap.set(u,!1);const D=this._getKeyByValue(vc,u);D&&this._methodKeyMap.set(D,!1)}}else n.warn("_parsePurchaseBits",`${zI}.parsePurchaseBits invalid purchases:${g(s)}`)}_getKeyByValue(s,n){const g=Object.entries(s).find(([u,E])=>E===n);return g?g[0]:void 0}_handleLogout(){this._reset()}_dispose(){this._reset(),this._core.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.COMMERCIAL_CONFIG_PUSH,this._handlePushedConfig,this),this._core.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.LOGOUT,this._reset,this),this._core.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.DESTROY,this._dispose,this)}_reset(){this._core.helper.taskScheduler.removeTask(ZI),this._core.store.set("commercialConfig",{}),this._expirationTime=0,this._isFetching=!1,this._featureMap.clear(),this._purchaseBits="0"}},rh=new class{constructor(){this._core=null,this._serverOverloadInfoMap=new Map}install(s){this._core=s;const{notificationCenter:n,InnerEvent:g,channel:u}=this._core;n.subscribeInnerEvent(g.OVERLOAD_PUSH,this._handleOverLoadPush,this),n.subscribeInnerEvent(g.LOGOUT,this._reset,this),n.subscribeInnerEvent(g.DESTROY,this._dispose,this),u.registerBeforeSendInterceptor(this.checkServerOverload,this)}checkServerOverload(s){if(!this._serverOverloadInfoMap.has(s))return;const{overloadStartTimestamp:n,delaySeconds:g}=this._serverOverloadInfoMap.get(s);if(Date.now()-n<=1e3*g)throw new this._core.helper.ChatError({functionName:s,message:"service is busy, please try again later"});this._serverOverloadInfoMap.delete(s)}_handleOverLoadPush(s){const{OverLoadServCmd:n,DelaySecs:g}=s;this._serverOverloadInfoMap.set(n,{overloadStartTimestamp:Date.now(),delaySeconds:g})}_reset(){this._serverOverloadInfoMap.clear()}_dispose(){this._reset();const{notificationCenter:s,InnerEvent:n}=this._core;s.unSubscribeInnerEvent(n.OVERLOAD_PUSH,this._handleOverLoadPush,this),s.unSubscribeInnerEvent(n.LOGOUT,this._reset,this),s.unSubscribeInnerEvent(n.DESTROY,this._dispose,this)}},IC=new class{constructor(){this.name="ConfigCenter"}install(s){va.init(s),ys.install(s),_E.install(s),rh.install(s)}},ah=new class{constructor(){this.name="ErrorMessage",this._core=null}install(s){return pA(this,void 0,void 0,function*(){if(this._core=s,this._canFetch()){const n=yield this._fetchErrorMessage();if(!n)return;const g=this._parseResponse(n);this._saveErrorMessage(g)}})}_canFetch(){const s=this._core.store.getStorage("errorMessage");return!s||this._isExpired(s)}_saveErrorMessage(s){this._core.store.setStorage("errorMessage",{errorMessage:s,errorMessageSavedTime:new Date().getTime()})}_fetchErrorMessage(){return pA(this,void 0,void 0,function*(){try{return yield this._core.helper.httpRequest({method:"GET",url:"https://web.sdk.qcloud.com/im/download/error-message/v3/0.0.6/tim-error-message.txt"})}catch(s){console.error(s)}})}_isExpired(s){if(!s)return!0;const{errorMessageSavedTime:n}=s;return n&&new Date().getTime()-n>=6048e5}_parseResponse(s){if(typeof s=="string"){const n=s.split(`; -`),g={},u=new RegExp(/'/g);for(let E=0;E{var JA,ae,se;const _i=function(Ti,Ft){const{From_Account:Ni,From_AccountHeadurl:cs,From_AccountNick:Se,IsNeedReadReceipt:mt,MsgBody:UA,MsgClientTime:ri,MsgRandom:_s,MsgSeq:Gi,MsgTimeStamp:Or,SendMsgControl:xi,SupportMessageExtension:gr,To_Account:Gt,TinyId:bt,MsgCheckResult:tE,CloudCustomData:ln,IsPeerRead:Bo,MsgFlagBits:Il,MsgVersion:_C,EventArray:Tr}=Ti;return{from:Ni,avatar:cs,nick:Se,needReadReceipt:mt===1,readReceiptSentByPeer:Bo,clientTime:ri,messageFlagBits:Il,random:_s,sequence:Gi,time:Or,messageControlInfo:xi,isSupportExtension:gr,to:Gt,tinyID:bt,checkResult:tE,cloudCustomData:ln,messageVersion:_C,eventArray:Tr,elements:Ft.message.messageHelper.parseServerPushMessageElement(UA)}}(OA,xA);if(!((se=(ae=(JA=OA?.EventArray)===null||JA===void 0?void 0:JA[0])===null||ae===void 0?void 0:ae.hasOwnProperty)===null||se===void 0)&&se.call(ae,"C2cNotifyMsgArray"))SA.push(...function(Ti){var Ft;const Ni=[];return(Ft=Ti.EventArray)===null||Ft===void 0||Ft.forEach(cs=>{var Se,mt;const{C2cNotifyMsgArray:UA}=cs,ri=(mt=(Se=UA?.[0])===null||Se===void 0?void 0:Se.WithdrawC2cMsgNotify)===null||mt===void 0?void 0:mt.C2cWithdrawInfoArray;Array.isArray(ri)&&Ni.push(...ri)}),Ni}(OA));else{const Ti=xA.message.messageFactory.createMessage(Object.assign(Object.assign({},_i),{conversationType:"C2C",flow:"in"})),{elements:Ft}=_i;Ti.setElement(Ft),LA.push(Ti)}}),{unreadMessageList:LA,revokedMessageList:SA}}(T.MsgList,n);return{syncFlag:T?.SyncFlag,unreadMessageList:EA,revokedMessageList:RA,unreadCountList:P,overflowUnreadCountList:W,cookie:T?.Cookie,groupTipList:iA}}catch(T){console.warn(T)}})}var kg,ro;(function(s){s[s.START_SYNC=0]="START_SYNC",s[s.SYNCING=1]="SYNCING",s[s.SYNC_COMPLETE=2]="SYNC_COMPLETE"})(kg||(kg={})),function(s){s[s.LOGIN_SUCCESS=0]="LOGIN_SUCCESS",s[s.NEW_MESSAGE_RECEIVED=1]="NEW_MESSAGE_RECEIVED"}(ro||(ro={}));var uC=new class{constructor(){this.name="UnreadMessageSynchronizer",this._unreadDBMessageMap=new Map,this._cookie="",this._localConversationIDListBeforeDisconnect=[]}install(s){this._core=s;const{constants:n}=s;s.helper.registerWorkflowStep(n.WORKFLOW_NAME.SYNC_SERVER_INFO_AFTER_RE_ONLINE,n.WORKFLOW_STEP.UNREAD_MESSAGE_SYNC,this._syncUnreadDBMessageAfterReOnline,this),s.helper.registerWorkflowStep(n.WORKFLOW_NAME.RECEIVE_C2C_NEW_MESSAGE,n.WORKFLOW_STEP.UNREAD_MESSAGE_SYNC,this._syncUnreadDBMessageAfterNewMessageReceived,this),s.helper.registerWorkflowStep(n.WORKFLOW_NAME.SYNC_SERVER_INFO_AFTER_LOGIN,n.WORKFLOW_STEP.UNREAD_MESSAGE_SYNC,this._syncUnreadDBMessageAfterLogin,this),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.SOCKET_DISCONNECTED,this._handleDisconnect,this),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.LOGOUT,this._reset,this),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this._dispose,this)}_syncUnreadMessage(s){return pA(this,void 0,void 0,function*(){const{isAfterReOnline:n=!1,isAfterNewMessageReceived:g=!1,isAfterLogin:u=!1}=s||{};let E=kg.START_SYNC;const m=[],D=[],M=[],T=[];for(;this._canContinueSync({cookie:this._cookie,syncFlag:E});){const P=yield this._fetchUnreadDBMessage({cookie:this._cookie,syncFlag:E,syncTriggerEvent:g?ro.NEW_MESSAGE_RECEIVED:ro.LOGIN_SUCCESS});if(!P)break;const{unreadMessageList:W=[],revokedMessageList:iA=[],overflowUnreadCountList:EA,unreadCountList:RA,groupTipList:kA}=P;if(this._cookie=P?.cookie||"",E=P?.syncFlag,this._parseAndSaveUnreadMessageList(W),M.push(...iA),this._updateConversationUnreadOptions({unreadCountList:RA,overflowUnreadCountList:EA,conversationUpdateFieldList:m}),Array.isArray(kA)&&D.push(...kA),n){const{messages:xA}=this._handleNewMessageList(W);T.push(...xA)}}return n?{conversationUpdateFieldList:m,revokedMessageList:M,unreadMessageMap:this._unreadDBMessageMap,groupTipList:D,messages:T,isUnreadC2CMessage:!0}:{conversationUpdateFieldList:m,isInstantMessage:!u,isUnreadC2CMessage:!0,revokedMessageList:M,unreadMessageMap:this._unreadDBMessageMap,groupTipList:D}})}_syncUnreadDBMessageAfterLogin(){return pA(this,void 0,void 0,function*(){return this._cookie="",this._syncUnreadMessage({isAfterLogin:!0})})}_syncUnreadDBMessageAfterNewMessageReceived(s){return pA(this,void 0,void 0,function*(){if(s.data.Flag===1)return this._syncUnreadMessage({isAfterNewMessageReceived:!0})})}_updateConversationUnreadOptions(s){const{unreadCountList:n,overflowUnreadCountList:g,conversationUpdateFieldList:u}=s,{constants:{OuterConstant:{CONV_C2C:E,CONV_SYSTEM:m}}}=this._core;n?.forEach(D=>{const{From_Account:M,UnreadCount:T}=D;if(M!==m){const P=u.find(({conversationID:W})=>W===`${E}${M}`);P?P.unreadCount=T:u.push({conversationID:`${E}${M}`,unreadCount:T,type:E})}}),g?.forEach(D=>{const{From_Account:M,LastMsgTime:T}=D;M!==m&&(u.find(({conversationID:P})=>P===`${E}${M}`)||u.push({conversationID:`${E}${M}`,type:E,lastMsgTime:T}))})}_syncUnreadDBMessageAfterReOnline(){return pA(this,void 0,void 0,function*(){return this._syncUnreadMessage({isAfterReOnline:!0})})}_updateMessageProfile(s){var n;const{messageDataHandler:g}=this._core.message||{},u=(n=this._core.store.get("login"))===null||n===void 0?void 0:n.userId,{from:E,nick:m,avatar:D,conversationID:M=""}=s;if(E!==u){const T=g.getLatestMsgSentByPeer(M);if(T){const{nick:P,avatar:W}=T;m&&D?m===P&&D===W||g.updateNickAndAvatarOfSentMessage({conversationID:M,latestNick:m,latestAvatar:D,isSentByMe:!1}):(s.nick=P,s.avatar=W)}}else{const T=g.getLatestMsgSentByMe(M);!T||m===T.nick&&D===T.avatar||g.updateNickAndAvatarOfSentMessage({conversationID:M,latestNick:m,latestAvatar:D,isSentByMe:!0})}}_handleNewMessageList(s){const{messageDataHandler:n}=this._core.message||{},g=new Map,u=[];return s.forEach(E=>{this._updateMessageProfile(E);let m=E.isModified===1;if(n.isMessageSentByCurrentInstance(E)?E.isModified=m:m=!1,E.isOnlineMessage())E._onlineOnlyFlag=!0,n.isMessageSentByCurrentInstance(E)||u.push(E);else if(this._shouldStoreUnreadMessage(E)){if(n.storeConversationMessage(E)){const{conversationID:D,conversationType:M,conversationSubType:T,flow:P,_isExcludedFromUnreadCount:W,_isExcludedFromLastMessage:iA}=E,EA=iA?"":E;g.has(D)?(g.get(D).lastMessage=EA,P==="in"&&(W||g.get(D).unreadCount++)):g.set(D,{conversationID:D,type:M,subType:T,unreadCount:W||P!=="in"?0:1,lastMessage:EA})}n.isMessageSentByCurrentInstance(E)&&!m||u.push(E)}}),{messages:u,conversationOptions:g}}_shouldStoreUnreadMessage(s){var n;const{conversationID:g}=s,{message:u,appStore:E,utils:{isEmpty:m}}=this._core||{},D=Array.from(((n=E.conversationStore.getConversationMap())===null||n===void 0?void 0:n.keys())||[]),M=this._getLocalLastMessageTime(g);return!u.messageDataHandler.isInMessageList(s)&&D.includes(g)&&this._localConversationIDListBeforeDisconnect.includes(g)&&!m(M)}_fetchUnreadDBMessage(s){return pA(this,void 0,void 0,function*(){const{ssoLog:n,utils:{safeStringify:g}}=this._core;try{n.debug("_fetchUnreadDBMessage",`unread-message-synchronizer._fetchUnreadDBMessage options:${g(s)}`);const E=yield el(s,this._core);if(!E)return null;const{syncFlag:m,unreadMessageList:D,revokedMessageList:M,cookie:T,unreadCountList:P,overflowUnreadCountList:W,groupTipList:iA}=E;return this._parseAndSaveUnreadMessageList(D),{syncFlag:m,cookie:T,unreadMessageList:D,revokedMessageList:M,unreadCountList:P,overflowUnreadCountList:W,groupTipList:iA}}catch(u){console.log(u)}})}_canContinueSync({cookie:s,syncFlag:n}){var g;return n===kg.START_SYNC||n===kg.SYNCING&&!(!((g=this._core)===null||g===void 0)&&g.helper.isEmpty(s))}_parseAndSaveUnreadMessageList(s){s.forEach(n=>{const{ID:g}=n;this._unreadDBMessageMap.set(g,n)})}_handleDisconnect(){var s;const{appStore:n}=this._core;this._localConversationIDListBeforeDisconnect=Array.from(((s=n.conversationStore.getConversationMap())===null||s===void 0?void 0:s.keys())||[])}_getLocalLastMessageTime(s){const{message:n}=this._core,g=n.messageDataHandler.getLocalMessageList(s),u=g[g.length-1];return u?.time}_reset(){this._cookie="",this._unreadDBMessageMap.clear()}_dispose(){var s,n;(s=this._core)===null||s===void 0||s.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.LOGOUT,this._reset,this),(n=this._core)===null||n===void 0||n.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.DESTROY,this._dispose,this),this._reset()}},TE=new class{init(s){var n;this._core=s,this._visibilityChangeHandler=this._handleVisibilityChange.bind(this),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this._dispose,this),document?.addEventListener("visibilitychange",this._visibilityChangeHandler),(n=this._core)===null||n===void 0||n.store.set("activityMonitor",{isActive:!0})}_handleVisibilityChange(){var s,n;const g=document?.visibilityState==="visible";(s=this._core)===null||s===void 0||s.store.set("activityMonitor",{isActive:g}),(n=this._core)===null||n===void 0||n.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:g})}_reset(){var s;(s=this._core)===null||s===void 0||s.store.clear("activityMonitor")}_dispose(){document?.removeEventListener("visibilitychange",this._visibilityChangeHandler);const{notificationCenter:s,InnerEvent:n}=this._core;s.unSubscribeInnerEvent(n.DESTROY,this._dispose,this),this._reset()}},NE=new class{init(s){var n;this._core=s,this._bindAppActivityEvent(),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this._dispose,this),(n=this._core)===null||n===void 0||n.store.set("activityMonitor",{isActive:!0})}_bindAppActivityEvent(){var s,n,g,u,E;const{MINI_APP_NAMESPACE:m,IN_TT_MINI_GAME:D,IN_WX_MINI_GAME:M}=((s=this._core)===null||s===void 0?void 0:s.utils)||{};D||M?((n=m?.onShow)===null||n===void 0||n.call(m,()=>{var T,P;(T=this._core)===null||T===void 0||T.store.set("activityMonitor",{isActive:!0}),(P=this._core)===null||P===void 0||P.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!0})}),(g=m?.onHide)===null||g===void 0||g.call(m,()=>{var T,P;(T=this._core)===null||T===void 0||T.store.set("activityMonitor",{isActive:!1}),(P=this._core)===null||P===void 0||P.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!1})})):((u=m?.onAppShow)===null||u===void 0||u.call(m,()=>{var T,P;(T=this._core)===null||T===void 0||T.store.set("activityMonitor",{isActive:!0}),(P=this._core)===null||P===void 0||P.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!0})}),(E=m?.onAppHide)===null||E===void 0||E.call(m,()=>{var T,P;(T=this._core)===null||T===void 0||T.store.set("activityMonitor",{isActive:!1}),(P=this._core)===null||P===void 0||P.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!1})}))}_reset(){var s;(s=this._core)===null||s===void 0||s.store.clear("activityMonitor")}_dispose(){const{notificationCenter:s,InnerEvent:n}=this._core;s.unSubscribeInnerEvent(n.DESTROY,this._dispose,this),this._reset()}},hd=new class{init(s){const{IN_MINI_APP:n,IN_WX_MINI_PLUGIN:g}=s.helper;g||(n?NE.init(s):TE.init(s))}};const GE="none",tl="online";var dI=new class{init(s){this._core=s,this._activateNetworkMonitoring(),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this._dispose,this)}_activateNetworkMonitoring(){return pA(this,void 0,void 0,function*(){navigator.onLine?this._onOnline():this._onOffline(),this._onOnlineCallback=this._onOnline.bind(this),this._onOfflineCallback=this._onOffline.bind(this),window.addEventListener("online",this._onOnlineCallback),window.addEventListener("offline",this._onOfflineCallback)})}_deactivateNetworkMonitoring(){this._onOnlineCallback!==null&&(window.removeEventListener("online",this._onOnlineCallback),this._onOnlineCallback=null),this._onOfflineCallback!==null&&(window.removeEventListener("offline",this._onOfflineCallback),this._onOfflineCallback=null)}_onNetworkStatusChange(s){var n,g;const{isConnected:u,networkType:E}=s;(n=this._core)===null||n===void 0||n.store.set("netWorkMonitor",{isNetworkOnline:u,networkType:E}),(g=this._core)===null||g===void 0||g.notificationCenter.emitInnerEvent("networkStatusChange",{isNetworkOnline:u,networkType:E})}_onOnline(){this._onNetworkStatusChange({isConnected:!0,networkType:tl})}_onOffline(){this._onNetworkStatusChange({isConnected:!1,networkType:GE})}_reset(){var s;this._deactivateNetworkMonitoring(),(s=this._core)===null||s===void 0||s.store.clear("netWorkMonitor")}_dispose(){var s,n;(s=this._core)===null||s===void 0||s.notificationCenter.unSubscribeInnerEvent((n=this._core)===null||n===void 0?void 0:n.InnerEvent.DESTROY,this._dispose,this),this._reset()}},Lu=new class{init(s){this._core=s,this._activateNetworkMonitoring(),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this._dispose,this)}_activateNetworkMonitoring(){return pA(this,void 0,void 0,function*(){try{const{utils:{MINI_APP_NAMESPACE:s}}=this._core;this._mpNetworkStatusCallback=this._onNetworkStatusChange.bind(this),s.onNetworkStatusChange(this._onNetworkStatusChange.bind(this))}catch(s){console.error(s)}})}_deactivateNetworkMonitoring(){if(this._mpNetworkStatusCallback!==null){const{utils:{MINI_APP_NAMESPACE:s}}=this._core;s.offNetworkStatusChange&&s.offNetworkStatusChange(this._mpNetworkStatusCallback),this._mpNetworkStatusCallback=null}}_onNetworkStatusChange(s){var n,g;const{isConnected:u,networkType:E}=s;(n=this._core)===null||n===void 0||n.store.set("netWorkMonitor",{isNetworkOnline:u,networkType:E}),(g=this._core)===null||g===void 0||g.notificationCenter.emitInnerEvent("networkStatusChange",{isNetworkOnline:u,networkType:E})}_reset(){var s;this._deactivateNetworkMonitoring(),(s=this._core)===null||s===void 0||s.store.clear("netWorkMonitor")}_dispose(){var s,n;(s=this._core)===null||s===void 0||s.notificationCenter.unSubscribeInnerEvent((n=this._core)===null||n===void 0?void 0:n.InnerEvent.DESTROY,this._dispose,this),this._reset()}},Uu=new class{init(s){const{IN_MINI_APP:n}=s.utils;n?Lu.init(s):dI.init(s)}},EC=new class{constructor(){this.name="SystemStateMonitor"}install(s){hd.init(s),Uu.init(s)}};const wr=new Set(["tui_room_svr.*","callkit_records_svr.*","room_engine_srv.*","room_engine_http_srv.*","room_engine_mic.*","live_engine_srv.*","live_engine_http_srv.*","live_engine_pk.*","trtc_ai_service.*","call_engine_srv.*"]),cg="tui_room_svr.*";var Rc=new class{constructor(){this.name="BusinessCommandTransfer",this._transferredCommands=wr}install(s){this._core=s;const{notificationCenter:n,InnerEvent:g,helper:u}=s;n.subscribeInnerEvent(g.CLOUD_CONFIG_UPDATE,this._onCloudConfigUpdate,this),n.subscribeInnerEvent(g.LOGOUT,this._reset,this),n.subscribeInnerEvent(g.DESTROY,this._dispose,this),n.subscribeInnerEvent("im_open_push.msg_push",n.InnerEventSubType.BUSINESS_COMMAND,this._onServerPushBusinessCommand,this),u.registerExperimentalAPI("sendTRTCCustomData",this,"transferBusinessCommand"),u.registerExperimentalAPI("sendRoomCustomData",this,"transferBusinessCommand")}transferBusinessCommand(s){return pA(this,void 0,void 0,function*(){const n="transferBusinessCommand";try{const{serviceCommand:g=cg}=s||{};if(!this._isValidTransferredCommand(g))throw new this._core.helper.ChatError({code:2995,functionName:n});return{code:0,data:(yield function(E,m){return pA(this,void 0,void 0,function*(){const{helper:D,channel:M}=m,{serviceCommand:T=cg,data:P}=E||{};let W={};try{W=typeof P=="string"?JSON.parse(P):P}catch(RA){console.warn(RA)}const iA=D.generateProtocolData({servcmd:T,data:W}),EA=`${iA.head.seq}${T}`;return M.sendPacket(iA,{requestId:EA,shouldRejectOnError:!1})})}(s,this._core))||{}}}catch(g){throw console.warn(g),new this._core.helper.ChatError({code:g?.errorCode,message:g?.errorInfo,data:{},functionName:n})}})}_onCloudConfigUpdate(s={}){try{if(typeof s.rtc_cmd!="string")return;const n=JSON.parse(s.rtc_cmd);Array.isArray(n)&&(this._transferredCommands=new Set([...this._transferredCommands,...n]))}catch(n){console.log(n)}}_isValidTransferredCommand(s=""){const n=`${s?.split(".")[0]}.*`;return this._transferredCommands.has(n)}_onServerPushBusinessCommand(s){const{OuterEvent:n,notificationCenter:g}=this._core,{MsgContent:u}=s||{},{ROOM_CUSTOM_DATA_RECEIVED:E}=n;g.emitOuterEvent(E,{name:E,data:u})}_reset(){this._transferredCommands=wr}_dispose(){const{notificationCenter:s,InnerEvent:n}=this._core;this._reset(),s.unSubscribeInnerEvent(n.CLOUD_CONFIG_UPDATE,this._onCloudConfigUpdate,this),s.unSubscribeInnerEvent(n.LOGOUT,this._reset,this),s.unSubscribeInnerEvent(n.DESTROY,this._dispose,this),s.unSubscribeInnerEvent("im_open_push.msg_push",s.InnerEventSubType.BUSINESS_COMMAND,this._onServerPushBusinessCommand,this)}};const Fu=1,Tl=2,Bd=3,$r=4,CI=5,_n="TIMCustomElem",dC="C2C",il="GROUP",Qd="invite",hI="accept",Oa="cancel",CC="reject",Pa="modifyInvitation",ur="signaling",pd=8010,Ou="signaling-timeout";function Er(s){return s.filter(n=>{if(n.type===_n){const{cloudCustomData:g="",payload:{data:u=""}={}}=n,E=g.match(/"type":"tsignaling"/),m=u.match(/inviteID/),D=u.match(/actionType/);return E||m&&D}return!1})}function wc(s){const{data:n}=s.payload;try{return JSON.parse(n)}catch(g){return console.error(g),null}}function ol(s,n){return s.toString(16).padStart(n,"0")}function Lg(s){if(s<0||s>53)throw new Error("Number of digits must be between 0 and 53");if(s<=30)return Math.floor(Math.random()*(1<0;const M=this._core.common.getCurrentUserID();return D.includes(M)}return!0}updateSignaling(s){const n=`${ur}.updateSignaling`,{inviteID:g,inviter:u,inviteeList:E,groupID:m}=s;if(console.log(`${n} inviteID:${g} inviter:${u} groupID:${m}`),m&&this.hasSignaling(g)){const D=E[0],{inviteeList:M}=this._onlineSignalingMap.get(g);M.includes(D)&&(M.splice(M.indexOf(D),1),console.log(`${n} remove ${D}. localInviteeList.length:${M.length}`)),M.length===0&&this.removeSignaling(g)}else this.removeSignaling(g)}setSignalingListenStatus(s){this._isSignalingListening=s}getSignalingListenStatus(){return this._isSignalingListening}_dispose(){var s,n;this._reset(),(s=this._core)===null||s===void 0||s.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.DESTROY,this._dispose,this),(n=this._core)===null||n===void 0||n.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.LOGOUT,this._reset,this),this._isSignalingListening=!1}_reset(){this._onlineSignalingMap.clear()}},$g=new class{init(s){this._core=s}createInviteSignaling(s){const n=this._generateInviteID(),g=this._createInviteSignalingData(Object.assign(Object.assign({},s),{inviteID:n})),{groupID:u,inviteeList:E}=g,m=u||E[0];return{signaling:this._createSignaling(g,m),signalingData:g,signalingExtensionOptions:this._createSignalingExtensionOptions(s)}}createAcceptSignaling(s){const n=this._createAcceptSignalingData(s),{groupID:g,inviter:u}=n,E=g||u;return{signaling:this._createSignaling(n,E),signalingData:n,signalingExtensionOptions:this._createSignalingExtensionOptions(s)}}createCancelSignaling(s){const n=this._createCancelSignalingData(s),{groupID:g,inviteeList:u}=n,E=g||u[0];return{signaling:this._createSignaling(n,E),signalingData:n,signalingExtensionOptions:this._createSignalingExtensionOptions(s)}}createRejectSignaling(s){const n=this._createRejectSignalingData(s),{groupID:g,inviter:u}=n,E=g||u;return{signaling:this._createSignaling(n,E),signalingData:n,signalingExtensionOptions:this._createSignalingExtensionOptions(s)}}createTimeoutSignaling(s){const{isInviter:n=!1}=s,g=this._createTimeoutSignalingData(s),{groupID:u,inviteeList:E,inviter:m}=g,D=u||(n?E[0]:m);return{signaling:this._createSignaling(g,D),signalingData:g,signalingExtensionOptions:this._createSignalingExtensionOptions(g)}}_createSignalingExtensionOptions(s){var n,g;const{data:u="",onlineUserOnly:E,inviteID:m="",offlinePushInfo:D,actionType:M}=s,T=((g=(n=Oo.getSignaling(m))===null||n===void 0?void 0:n.signaling)===null||g===void 0?void 0:g._onlineOnlyFlag)||!1;return{onlineUserOnly:E||T,offlinePushInfo:D,messageControlInfo:this._createMessageControlInfo(u,M)}}_createMessageControlInfo(s,n){const g=n===CI&&!!s.match(/excludeTimeoutSignalingFromHistoryMessage/),u=!!s.match(/excludeFromHistoryMessage/)||!!s.match(/excludeOriginalSignalingFromHistoryMessage/);return{excludedFromContentModeration:!0,excludedFromUnreadCount:g||u,excludedFromLastMessage:g||u}}_createInviteSignalingData(s){const n=`${ur}._createInviteSignalingData`,{userID:g,timeout:u=0,groupID:E="",inviteeList:m=[]}=s,D=this._core.common.getCurrentUserID(),M=Object.assign(Object.assign({},this._generateBaseSignalData(s)),{actionType:Fu,inviter:D,inviteeList:E?m:[g],timeout:u});return console.log(`${n} signalingData:`,M),M}_createAcceptSignalingData(s){const n=`${ur}._createAcceptSignalingData`,{inviteID:g}=s,u=this._core.common.getCurrentUserID(),{inviter:E,groupID:m}=Oo.getSignaling(g),D=Object.assign(Object.assign({},this._generateBaseSignalData(s)),{actionType:Bd,groupID:m,inviter:E,inviteeList:[u]});return console.log(`${n} signalingData:`,D),D}_createCancelSignalingData(s){const n=`${ur}._createCancelSignalingData`,{inviteID:g}=s,u=this._core.common.getCurrentUserID(),{inviteeList:E,groupID:m}=Oo.getSignaling(g),D=Object.assign(Object.assign({},this._generateBaseSignalData(s)),{actionType:Tl,groupID:m,inviter:u,inviteeList:E});return console.log(`${n} signalingData:`,D),D}_createRejectSignalingData(s){const n=`${ur}._createRejectSignalingData`,{inviteID:g}=s,u=this._core.common.getCurrentUserID(),{inviter:E,groupID:m}=Oo.getSignaling(g),D=Object.assign(Object.assign({},this._generateBaseSignalData(s)),{actionType:$r,groupID:m,inviter:E,inviteeList:[u]});return console.log(`${n} signalingData:`,D),D}_createTimeoutSignalingData(s){const n=`${ur}._createTimeoutSignalingData`,{isInviter:g=!1,inviteID:u}=s,{inviteeList:E,inviter:m}=Oo.getSignaling(u),D=this._core.common.getCurrentUserID(),M=Object.assign(Object.assign({},this._generateBaseSignalData(s)),{actionType:CI,inviter:m,inviteeList:g?E:[D]});return console.log(`${n} signalingData:`,M),M}_createSignaling(s,n){var g,u,E;const{groupID:m=""}=s,D={to:n,conversationType:m?il:dC,priority:"High",payload:{data:JSON.stringify(s)}};return(E=(u=(g=this._core)===null||g===void 0?void 0:g.message)===null||u===void 0?void 0:u.messageFactory)===null||E===void 0?void 0:E.createCustomMessage(D)}_generateInviteID(){return[ol(Lg(32),8),ol(Lg(16),4),ol(16384|Lg(12),4),ol(32768|Lg(14),4),ol(Lg(48),12)].join("-")}_generateBaseSignalData(s){const{data:n="",inviteID:g="",groupID:u=""}=s;return{businessID:1,timeout:0,data:n,inviteID:g,groupID:u}}},Za=new class{constructor(){this._isProcessingSignaling=!1}init(s){this._core=s,s.helper.registerApi({apiName:"invite",context:this}),s.helper.registerApi({apiName:"accept",context:this}),s.helper.registerApi({apiName:"cancel",context:this}),s.helper.registerApi({apiName:"reject",context:this}),s.helper.registerApi({apiName:"modifyInvitation",context:this}),s.helper.registerApi({apiName:"getSignalingInfo",context:this}),s.helper.registerApi({apiName:"addSignalingListener",context:this}),s.helper.registerApi({apiName:"removeSignalingListener",context:this}),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this._dispose,this),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.LOGOUT,this._reset,this)}invite(s){return pA(this,void 0,void 0,function*(){var n;try{this._validateBeforeInvite(s);const{signaling:g,signalingData:u,signalingExtensionOptions:E}=$g.createInviteSignaling(s),m=yield this._sendSignaling(g,E);if(m?.code===0){const{inviteID:D,timeout:M}=u;return Oo.saveSignaling(D,Object.assign(Object.assign({},u),{signaling:g})),M>0&&((n=this._core)===null||n===void 0||n.helper.taskScheduler.addOnceTask({id:`${Ou}-${D}`,intervalMs:1e3*(M+5),callback:this.handleInvitationExpiryTimer.bind(this,D)})),Object.assign(Object.assign({},m),{inviteID:D})}return m}catch(g){throw g}})}accept(s){return pA(this,void 0,void 0,function*(){try{const{inviteID:n}=s;this._validateBeforeAccept(n),this._isProcessingSignaling=!0;const{signaling:g,signalingData:u,signalingExtensionOptions:E}=$g.createAcceptSignaling(s),m=yield this._sendSignaling(g,E);return m?.code===0?(Oo.updateSignaling(u),Object.assign(Object.assign({},m),{inviteID:n})):m}catch(n){throw n}finally{this._isProcessingSignaling=!1}})}cancel(s){return pA(this,void 0,void 0,function*(){try{const{inviteID:n}=s;this._validateBeforeCancel(n),this._isProcessingSignaling=!0;const{signaling:g,signalingExtensionOptions:u}=$g.createCancelSignaling(s),E=yield this._sendSignaling(g,u);return E?.code===0?(Oo.removeSignaling(n),Object.assign(Object.assign({},E),{inviteID:n})):E}catch(n){throw n}finally{this._isProcessingSignaling=!1}})}reject(s){return pA(this,void 0,void 0,function*(){try{const{inviteID:n}=s;this._validateBeforeReject(n),this._isProcessingSignaling=!0;const{signaling:g,signalingExtensionOptions:u}=$g.createRejectSignaling(s),E=yield this._sendSignaling(g,u);return E?.code===0?(Oo.removeSignaling(n),Object.assign(Object.assign({},E),{inviteID:n})):E}catch(n){throw n}finally{this._isProcessingSignaling=!1}})}modifyInvitation(s){return pA(this,void 0,void 0,function*(){var n,g;const{inviteID:u,data:E}=s;let m="";try{this._validateBeforeModifyInvitation(u);const D=Oo.getSignaling(u),{signaling:M}=D,T=Do(D,["signaling"]);m=M.payload.data,T.data=E,M.payload.data=JSON.stringify(T);const P=yield(g=(n=this._core)===null||n===void 0?void 0:n.message.messageAction)===null||g===void 0?void 0:g.modifyMessage(M);return Oo.hasSignaling(u)&&Oo.saveSignaling(u,Object.assign(Object.assign({},T),{signaling:M})),P}catch(D){if(m){const{signaling:M}=Oo.getSignaling(u);M.payload.data=m}throw D}})}getSignalingInfo(s){const{ssoLog:n,utils:{safeStringify:g}}=this._core;if(Er([s]).length===0)return;const u=wc(s),E={businessID:u.businessID||1,inviteID:u.inviteID,groupID:u.groupID||"",inviter:u.inviter||"",inviteeList:u.inviteeList||[],data:u.data||"",actionType:u.actionType||Fu,timeout:u.timeout||0};return n.debug(`${ur} getSignalingInfo ${g(E)}`),E}addSignalingListener(s,n,g){var u,E;s===((u=this._core)===null||u===void 0?void 0:u.SignalingEvent.NEW_INVITATION_RECEIVED)&&Oo.setSignalingListenStatus(!0),(E=this._core)===null||E===void 0||E.notificationCenter.subscribeOuterEvent(s,n,g)}removeSignalingListener(s,n,g){var u,E;s===((u=this._core)===null||u===void 0?void 0:u.SignalingEvent.NEW_INVITATION_RECEIVED)&&Oo.setSignalingListenStatus(!1),(E=this._core)===null||E===void 0||E.notificationCenter.unSubscribeOuterEvent(s,n,g)}handleInvitationExpiryTimer(s){const n=Oo.getOnlineSignalingMap(),g=this._core.common.getCurrentUserID();if(!n.has(s))return;const u=n.get(s).inviter===g;this._sendTimeoutNotice({inviteID:s,isInviter:u})}_sendSignaling(s,n){return pA(this,void 0,void 0,function*(){var g,u,E;return(E=(u=(g=this._core)===null||g===void 0?void 0:g.message)===null||u===void 0?void 0:u.messageSender)===null||E===void 0?void 0:E.sendMessage(s,n)})}_sendTimeoutNotice(s){return pA(this,void 0,void 0,function*(){var n,g,u;this._core.ssoLog.debug("_sendTimeoutNotice",`${ur}._sendTimeoutNotice params:${JSON.stringify(s)}`);const{isInviter:E,inviteID:m}=s,{signaling:D,signalingData:M,signalingExtensionOptions:T}=$g.createTimeoutSignaling(s),P=yield this._sendSignaling(D,T);if(P?.code===0){const{data:W,groupID:iA,inviteeList:EA,inviter:RA}=M;(n=this._core)===null||n===void 0||n.notificationCenter.emitOuterEvent((g=this._core)===null||g===void 0?void 0:g.SignalingEvent.INVITATION_TIMEOUT,{name:(u=this._core)===null||u===void 0?void 0:u.SignalingEvent.INVITATION_TIMEOUT,data:{data:W,groupID:iA,inviteID:m,inviteeList:EA,inviter:RA,isSelfTimeout:!0,message:D}}),E?Oo.removeSignaling(m):Oo.updateSignaling(M)}})}_validateInviteId(s,n){if(!Oo.hasSignaling(n))throw new this._core.helper.ChatError({functionName:s,code:pd})}_validateProcessStatus(s){if(this._isProcessingSignaling)throw new this._core.helper.ChatError({functionName:s,message:"processing other signaling operations"})}_validateBeforeInvite(s){const n=Qd,{userID:g}=s,u=this._core.common.getCurrentUserID();if(g===u)throw new this._core.helper.ChatError({functionName:n,message:`cannot invite yourself, currentUserId:${u}, inviteeId:${g}`})}_validateBeforeAccept(s){const n=hI;this._validateInviteId(n,s),this._validateProcessStatus(n);const g=this._core.common.getCurrentUserID(),{inviteeList:u}=Oo.getSignaling(s);if(!u.includes(g)){const E=`userID:${g} not in inviteeList. inviteID:${s}`;throw new this._core.helper.ChatError({functionName:n,message:E})}}_validateBeforeCancel(s){const n=Oa;this._validateInviteId(n,s),this._validateProcessStatus(n);const g=this._core.common.getCurrentUserID(),{inviter:u}=Oo.getSignaling(s);if(u!==g){const E=`unmatched inviter:${u} and my userID:${g}`;throw new this._core.helper.ChatError({functionName:n,message:E})}}_validateBeforeReject(s){const n=CC;this._validateInviteId(n,s),this._validateProcessStatus(n);const g=this._core.common.getCurrentUserID(),{inviteeList:u}=Oo.getSignaling(s);if(!u.includes(g)){const E=`userID:${g} not in inviteeList. inviteID:${s}`;throw new this._core.helper.ChatError({functionName:n,message:E})}}_validateBeforeModifyInvitation(s){const n=Pa;this._validateInviteId(n,s)}_dispose(){var s,n;this._reset(),(s=this._core)===null||s===void 0||s.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.DESTROY,this._dispose,this),(n=this._core)===null||n===void 0||n.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.LOGOUT,this._reset,this)}_reset(){this._isProcessingSignaling=!1}},Nl=new class{constructor(){this._actionProcessor=new Map([[Fu,this._onNewInvitationReceived.bind(this)],[$r,this._onInviteeRejected.bind(this)],[Bd,this._onInviteeAccepted.bind(this)],[Tl,this._onInvitationCancelled.bind(this)],[CI,this._onInvitationTimeout.bind(this)]])}init(s){this._core=s,s.notificationCenter.subscribeOuterEvent(s.OuterEvent.MESSAGE_RECEIVED,this._handleMessageReceived,this),s.notificationCenter.subscribeOuterEvent(s.OuterEvent.MESSAGE_MODIFIED,this._handleMessageModified,this),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this._dispose,this)}handleActionSignaling(s){s.forEach(n=>{const g=wc(n);if(g){const u=this._actionProcessor.get(g.actionType);u?.(g,n)}})}_handleMessageReceived(s){if(!Oo.getSignalingListenStatus())return;const n=Er(s.data);n.length!==0&&this.handleActionSignaling(n)}_handleMessageModified(s){if(!Oo.getSignalingListenStatus())return;const n=Er(s.data);n.length>0&&n.forEach(g=>{const u=wc(g);u&&this._onInvitationModified(u,g)})}_onNewInvitationReceived(s,n){var g,u;const E=`${ur}._onNewInvitationReceived`,{inviteID:m,inviteeList:D,groupID:M}=s,T=this._core.common.getCurrentUserID();if(this._core.ssoLog.debug("_onNewInvitationReceived",`${E} signalingData:${JSON.stringify(s)}}`),M&&!D.includes(T))return;let{timeout:P}=s;const W=Date.now()/1e3-n.time;P>0&&W>0&&P>W&&(P-=W);const iA=Oo.getSignaling(m);iA!==s&&(iA||Oo.saveSignaling(m,Object.assign(Object.assign({},s),{signaling:n})),P>0&&((g=this._core)===null||g===void 0||g.helper.taskScheduler.addOnceTask({id:`${Ou}-${m}`,intervalMs:1e3*P,callback:Za.handleInvitationExpiryTimer.bind(Za,m)})),this._emitEvent({name:(u=this._core)===null||u===void 0?void 0:u.SignalingEvent.NEW_INVITATION_RECEIVED,data:Object.assign(Object.assign({},this._generateBaseEmitData(s)),{inviteeList:D})}))}_onInviteeRejected(s){var n;const g=`${ur}._onInviteeRejected`,{inviteID:u,inviter:E,groupID:m,inviteeList:D}=s,M=Oo.hasSignaling(u);this._core.ssoLog.debug("_onInviteeRejected",`${g} inviteID:${u} hasInviteID:${M} inviter:${E} groupID:${m}`),M&&(Oo.updateSignaling(s),this._emitEvent({name:(n=this._core)===null||n===void 0?void 0:n.SignalingEvent.INVITEE_REJECTED,data:Object.assign(Object.assign({},this._generateBaseEmitData(s)),{invitee:D[0]})}))}_onInviteeAccepted(s){var n;const g=`${ur}._onInviteeAccepted`,{inviteID:u,inviter:E,groupID:m,inviteeList:D}=s,M=Oo.hasSignaling(u);this._core.ssoLog.debug("_onInviteeAccepted",`${g} inviteID:${u} hasInviteID:${M} inviter:${E} groupID:${m}`),M&&(Oo.updateSignaling(s),this._emitEvent({name:(n=this._core)===null||n===void 0?void 0:n.SignalingEvent.INVITEE_ACCEPTED,data:Object.assign(Object.assign({},this._generateBaseEmitData(s)),{invitee:D[0]})}))}_onInvitationCancelled(s){var n;const g=`${ur}._onInvitationCancelled`,{inviteID:u,inviter:E,groupID:m}=s,D=Oo.hasSignaling(u);this._core.ssoLog.debug("_onInvitationCancelled",`${g} inviteID:${u} hasInviteID:${D} inviter:${E} groupID:${m}`),D&&(Oo.removeSignaling(u),this._emitEvent({name:(n=this._core)===null||n===void 0?void 0:n.SignalingEvent.INVITATION_CANCELLED,data:this._generateBaseEmitData(s)}))}_onInvitationTimeout(s){var n;const g=`${ur}._onInvitationTimeout`,{inviteID:u,inviteeList:E}=s,m=Oo.hasSignaling(u);this._core.ssoLog.debug("_onInvitationTimeout",`${g} inviteID:${u} hasInviteID:${m} data:${s.data}`),m&&(Oo.updateSignaling(s),this._emitEvent({name:(n=this._core)===null||n===void 0?void 0:n.SignalingEvent.INVITATION_TIMEOUT,data:Object.assign(Object.assign({},this._generateBaseEmitData(s)),{inviteeList:E,isSelfTimeout:!1})}))}_onInvitationModified(s,n){var g;const u=`${ur}._onInvitationModified`,{inviteID:E,data:m}=s,D=Oo.hasSignaling(E);this._core.ssoLog.debug("_onInvitationModified",`${u} inviteID:${E} data:${m}`),D&&(Oo.saveSignaling(E,Object.assign(Object.assign({},s),{signaling:n})),this._emitEvent({name:(g=this._core)===null||g===void 0?void 0:g.SignalingEvent.INVITATION_MODIFIED,data:{inviteID:E,data:m}}))}_emitEvent(s){var n;(n=this._core)===null||n===void 0||n.notificationCenter.emitOuterEvent(s.name,s)}_generateBaseEmitData(s){const{inviteID:n,inviter:g,groupID:u,data:E}=s;return{inviteID:n,inviter:g,groupID:u,data:E||""}}_dispose(){var s,n,g;(s=this._core)===null||s===void 0||s.notificationCenter.unSubscribeOuterEvent(this._core.OuterEvent.MESSAGE_RECEIVED,this._handleMessageReceived,this),(n=this._core)===null||n===void 0||n.notificationCenter.unSubscribeOuterEvent(this._core.OuterEvent.MESSAGE_MODIFIED,this._handleMessageModified,this),(g=this._core)===null||g===void 0||g.notificationCenter.unSubscribeOuterEvent(this._core.InnerEvent.DESTROY,this._dispose,this)}},Aa=new class{constructor(){this._offlineSignalingMap=new Map}init(s){this._core=s;const{notificationCenter:n,helper:g,constants:{InnerEvent:u,WORKFLOW_STEP:E,WORKFLOW_NAME:m}}=s;n.subscribeInnerEvent(u.DESTROY,this._dispose,this),n.subscribeInnerEvent(u.LOGOUT,this._reset,this),g.registerWorkflowStep(m.SYNC_SERVER_INFO_AFTER_LOGIN,E.SIGNALING_MESSAGE_RECOVER,this._handleC2COfflineMessage,this)}_handleC2COfflineMessage(s){const{result:{unreadMessageMap:n}={}}=s||{};if(!(n?.size!==0&&Oo.getSignalingListenStatus()))return;const g=Er([...n.values()]);if(g.length!==0&&(g.forEach(u=>{this._handleC2CActionType(u)}),this._offlineSignalingMap.size>0)){const u=this._sortOfflineSignalingByTime();Nl.handleActionSignaling(u)}}_handleC2CActionType(s){const n=wc(s);if(!n)return;const{actionType:g}=n;g===Fu?this._saveValidOfflineInvite(n,s):this._removeOfflineInvite(n)}_saveValidOfflineInvite(s,n){const{inviteID:g,inviteeList:u=[],timeout:E=0}=s,m=this._core.common.getCurrentUserID();if(!u.includes(m))return;const D=Date.now()/1e3-n.time;E>0&&D>E&&E!==0||this._offlineSignalingMap.set(g,Object.assign(Object.assign({},s),{signalingList:[n]}))}_removeOfflineInvite(s){const{inviteID:n=""}=s;this._offlineSignalingMap.has(n)&&this._offlineSignalingMap.delete(n)}_sortOfflineSignalingByTime(){let s=[];return this._offlineSignalingMap.forEach(n=>{s=[...s,...n.signalingList]}),s.sort((n,g)=>n.time-g.time)}_dispose(){var s,n;this._reset(),(s=this._core)===null||s===void 0||s.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.LOGOUT,this._reset,this),(n=this._core)===null||n===void 0||n.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.DESTROY,this._dispose,this)}_reset(){this._offlineSignalingMap.clear()}};const gh={invite:{userID:{required:!0,rules:["string"],allowEmpty:!1},data:{required:!1,rules:["string"],allowEmpty:!0},timeout:{required:!1,rules:["number"],allowEmpty:!1},onlineUserOnly:{required:!1,rules:["boolean"],allowEmpty:!1},offlinePushInfo:{required:!1,rules:["object"],allowEmpty:!1}},cancel:{inviteID:{required:!0,rules:["string"],allowEmpty:!1},data:{required:!1,rules:["string"],allowEmpty:!0}},accept:{inviteID:{required:!0,rules:["string"],allowEmpty:!1},data:{required:!1,rules:["string"],allowEmpty:!0}},reject:{inviteID:{required:!0,rules:["string"],allowEmpty:!1},data:{required:!1,rules:["string"],allowEmpty:!0}},modifyInvitation:{inviteID:{required:!0,rules:["string"],allowEmpty:!1},data:{required:!1,rules:["string"],allowEmpty:!0}}},js={invite:!0,cancel:!0,accept:!0,reject:!0,modifyInvitation:!0};var XI=new class{constructor(){this.name="Signaling"}install(s){Za.init(s),Nl.init(s),$g.init(s),Oo.init(s),Aa.init(s),s.helper.registerValidateConfig({auth:js,params:gh})}};const Us=new class{init(s){this.core=s}};function _c(s){let n;const{message:g}=Us.core,{conversationID:u,messageID:E}=s;return n=g.messageDataHandler.getLocalMessageList(u).find(m=>m.ID===E),!n&&(n=g.messageDataHandler.getSparseMessageList(u).find(m=>m.ID===E)),n}function Ac(s){return s.map(n=>{const{from:g,to:u,cloudCustomData:E,avatar:m,nick:D,ID:M,clientSequence:T,clientTime:P,messageRandom:W,messageSequence:iA,time:EA}=n;return{ClientSeq:T,CloudCustomData:E,From_Account:g,From_AccountHeadurl:m,From_AccountNick:D,Id:M,MsgBody:JSON.parse(JSON.stringify(n.transformElementsToServerFormat())),MsgClientTime:P,MsgRandom:W,Random:W,MsgSeq:iA,MsgTimeStamp:EA,ReceiverId:u,SenderId:g,To_Account:u}})}function dr(s){var n;const{From_Account:g,From_AccountHeadurl:u,From_AccountNick:E,GroupId:m,MsgClientTime:D,ClientSeq:M,To_Account:T,MsgTimeStamp:P,TinyId:W,MsgRandom:iA,MsgSeq:EA}=s;return{from:g,avatar:u,nick:E,clientTime:D,time:P,tinyID:W,random:iA,sequence:EA,to:T,groupID:m,clientSequence:M,_elements:(n=s.MsgBody)===null||n===void 0?void 0:n.map(RA=>{const{MsgType:kA}=RA;return Us.core.message.messageFactory.getElementClass(kA).parseServerPushElement(RA)})}}var Vr,Xa;(function(s){s.MSG_TEXT="TIMTextElem",s.MSG_CUSTOM="TIMCustomElem",s.MSG_LOCATION="TIMLocationElem",s.MSG_FACE="TIMFaceElem",s.MSG_STREAM="TIMStreamElem"})(Vr||(Vr={})),function(s){s[s.FORWARD=0]="FORWARD",s[s.BACKWARD=1]="BACKWARD"}(Xa||(Xa={}));const bE="MSG_REACTION",hC="MSG_EXT",ch=0,ao=1,Tc={ZH_CN:"zh (cmn-Hans-CN)",EN_US:"en-US",YUE_HK:"yue-Hant-HK",JA_JP:"ja-JP",ZH_PY:"zh-PY"},Gl="16k_zh",BC="16k_en",QC="16k_yue",bl="16k_ja",$I="16k_zh-PY",BI={[Tc.ZH_CN]:Gl,[Tc.EN_US]:BC,[Tc.YUE_HK]:QC,[Tc.JA_JP]:bl,[Tc.ZH_PY]:$I},QI=/\.(wav|pcm|ogg-opus|speex|silk|mp3|m4a|aac|amr)/,kE={READ:0,UNREAD:1},kl=1,Ll=2,Ug=3;var ec;(function(s){s.IN="in",s.OUT="out"})(ec||(ec={}));const md=16,LE=17;var Nc;(function(s){s[s.DATA=0]="DATA",s[s.REVOKED=1]="REVOKED"})(Nc||(Nc={}));var Au;(function(s){s[s.NORMAL=0]="NORMAL",s[s.TIMEOUT=1]="TIMEOUT"})(Au||(Au={}));const lo="StreamMsg.PushStreamHttp";var UE=new class{constructor(){this._reactionsMap=new Map}init(s){this._core=s;const{helper:n,notificationCenter:g,InnerEvent:{MESSAGE_PUSH:u},InnerEventSubType:{MESSAGE_REACTION_UPDATED:E,MESSAGE_REACTION_UPDATED_SYNC:m}}=s;n.registerApi({apiName:"addMessageReaction",context:this}),n.registerApi({apiName:"removeMessageReaction",context:this}),n.registerApi({apiName:"getMessageReactions",context:this}),n.registerApi({apiName:"getAllUserListOfMessageReaction",context:this}),g.subscribeInnerEvent(u,E,this._handleReactionUpdated,this),g.subscribeInnerEvent(u,m,this._handleReactionSync,this)}addMessageReaction(s,n){return pA(this,void 0,void 0,function*(){const{OuterConstant:g,ssoLog:u,helper:E}=this._core;this._validateMessageReactionBusinessCapability();const{conversationID:m,ID:D,conversationType:M,from:T,to:P,clientSequence:W,random:iA,time:EA,sequence:RA}=s,kA=`conversationID:${m} messageID:${D} reactionID:${n}`;try{return this._recordMessageReactedByMe(D,n),M===g.CONV_C2C?yield function(xA,LA){return pA(this,void 0,void 0,function*(){var SA;const{from:OA,to:JA,clientSequence:ae,random:se,time:_i,reactionID:Ti}=xA,Ft={From_Account:OA,To_Account:JA,MsgKey:`${ae}_${se}_${_i}`,Reaction:Ti,Add_Account:[(SA=LA.store.get("login"))===null||SA===void 0?void 0:SA.userId]};return Us.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.reaction_add",data:Ft})})}({from:T,to:P,clientSequence:W,random:iA,time:EA,reactionID:n},this._core):M===g.CONV_GROUP&&(yield function(xA,LA){return pA(this,void 0,void 0,function*(){var SA;const{to:OA,reactionID:JA,sequence:ae}=xA,se={GroupId:OA,MsgSeq:ae,Reaction:JA,Add_Account:[(SA=LA.store.get("login"))===null||SA===void 0?void 0:SA.userId]};return Us.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.group_reaction_add",data:se})})}({to:P,reactionID:n,sequence:RA},this._core)),{code:0,successLog:{message:kA}}}catch(xA){this._removeMyReactionRecord(D,n);const{errorCode:LA}=xA||{};throw new E.ChatError({functionName:"addMessageReaction",code:LA,moreMessage:kA})}})}removeMessageReaction(s,n){return pA(this,void 0,void 0,function*(){const{OuterConstant:g,helper:u}=this._core;this._validateMessageReactionBusinessCapability();const{conversationID:E,ID:m,conversationType:D,from:M,to:T,clientSequence:P,random:W,time:iA,sequence:EA}=s,RA=`conversationID:${E} messageID:${m} reactionID:${n}`;try{return this._removeMyReactionRecord(m,n),D===g.CONV_C2C?yield function(kA,xA){return pA(this,void 0,void 0,function*(){var LA;const{from:SA,to:OA,clientSequence:JA,random:ae,time:se,reactionID:_i}=kA,Ti={From_Account:SA,To_Account:OA,MsgKey:`${JA}_${ae}_${se}`,Reaction:_i,Del_Account:[(LA=xA.store.get("login"))===null||LA===void 0?void 0:LA.userId]};return Us.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.reaction_del",data:Ti})})}({from:M,to:T,clientSequence:P,random:W,time:iA,reactionID:n},this._core):D===g.CONV_GROUP&&(yield function(kA,xA){return pA(this,void 0,void 0,function*(){var LA;const{to:SA,reactionID:OA,sequence:JA}=kA,ae={GroupId:SA,MsgSeq:JA,Reaction:OA,Del_Account:[(LA=xA.store.get("login"))===null||LA===void 0?void 0:LA.userId]};return Us.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.group_reaction_del",data:ae},xA)})}({to:T,reactionID:n,sequence:EA},this._core)),{code:0,successLog:{message:RA}}}catch(kA){const{errorCode:xA}=kA||{};throw new u.ChatError({functionName:"removeMessageReaction",code:xA,moreMessage:RA})}})}getAllUserListOfMessageReaction(s){return pA(this,void 0,void 0,function*(){this._validateMessageReactionBusinessCapability();const{message:n,reactionID:g,nextSeq:u=0}=s,E=s.count>100?100:s.count,{conversationID:m}=n,{ssoLog:D,helper:M,constants:T}=this._core;try{let P=null;if(P=m.startsWith(T.OuterConstant.CONV_C2C)?yield function(W){return pA(this,void 0,void 0,function*(){const{message:iA,nextSeq:EA,reactionID:RA,count:kA}=W,{from:xA,to:LA,clientSequence:SA,random:OA,time:JA}=iA,ae={Reaction:RA,NextSeq:EA,Count:kA,From_Account:xA,To_Account:LA,MsgKey:`${SA}_${OA}_${JA}`};return Us.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.reaction_iterate",data:ae})})}({message:n,reactionID:g,nextSeq:u,count:E}):yield function(W){return pA(this,void 0,void 0,function*(){const{message:iA,nextSeq:EA,reactionID:RA,count:kA}=W,{sequence:xA,to:LA}=iA,SA={Reaction:RA,NextSeq:EA,GroupId:LA,Count:kA,MsgSeq:xA};return Us.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.group_reaction_iterate",data:SA})})}({message:n,reactionID:g,nextSeq:u,count:E}),P){const{Reaction_Account:W,NextSeq:iA}=P,EA=yield this._getUserProfileList(W);return{code:0,data:{nextSeq:iA,isCompleted:u===0,userList:EA}}}}catch(P){const{errorCode:W}=P||{};throw new M.ChatError({functionName:"getAllUserListOfMessageReaction",code:W})}})}getMessageReactions(s){return pA(this,void 0,void 0,function*(){const{constants:n}=this._core;this._validateMessageReactionBusinessCapability();const{messageList:g,maxUserCountPerReaction:u=10}=s,E=g[0];let m=null;const D=new Map,{from:M,to:T,conversationType:P}=E,W=this._generateMessageKeyList(g,D);P===n.OuterConstant.CONV_C2C?m=yield function(kA){return pA(this,void 0,void 0,function*(){const{from:xA,to:LA,messageKeyList:SA,maxUserCountPerReaction:OA}=kA,JA={From_Account:xA,To_Account:LA,MsgKeyList:SA,Count:OA};return Us.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.reaction_multi_stat",data:JA})})}({from:M,to:T,messageKeyList:W,maxUserCountPerReaction:u}):P===n.OuterConstant.CONV_GROUP&&(m=yield function(kA){return pA(this,void 0,void 0,function*(){const{groupId:xA,messageSequenceList:LA,maxUserCountPerReaction:SA}=kA,OA={GroupId:xA,MsgSeqList:LA,Count:SA};return Us.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.group_reaction_multi_stat",data:OA})})}({groupId:T,messageSequenceList:W,maxUserCountPerReaction:u}));const{Results:iA=[]}=m||{},EA=this._extractUserIDsFromReactionResults(iA),RA=yield this._getUserProfileMap(EA);return{code:0,data:{resultList:iA.map(kA=>{const{ReactionList:xA,MsgSeq:LA,MsgKey:SA}=kA;return{messageID:this._generateMessageID({messageSequence:LA,messageKey:SA,messageIDMap:D}),reactionList:xA.map(OA=>{const{Reaction:JA,Count:ae,Reaction_Account:se,ReactedByMe:_i}=OA;return{reactionID:JA,totalUserCount:ae,partialUserList:this._generatePartialUserInfo({userIDList:se,userProfileMap:RA}),reactedByMyself:_i===1}})}})}}})}dispose(){this._reactionsMap.clear()}_extractUserIDsFromReactionResults(s){const n=[];return s?.forEach(g=>{const{ReactionList:u=[]}=g;u.forEach(E=>{E.Reaction_Account&&n.push(...E.Reaction_Account)})}),n}_getUserProfileList(s){return pA(this,void 0,void 0,function*(){var n;try{const g=yield(n=this._core.user.userProfile)===null||n===void 0?void 0:n.getUserProfile({userIDList:s});return g?g.data:[]}catch{return[]}})}_getUserProfileMap(s){return pA(this,void 0,void 0,function*(){const n=new Map;return(yield this._getUserProfileList(s)).forEach(g=>{const{nick:u,avatar:E,userID:m}=g;n.set(m,{nick:u,avatar:E,userID:m})}),n})}_recordMessageReactedByMe(s,n){const g=`${s}-${n}`;this._reactionsMap.has(g)?this._reactionsMap.get(g).reactedByMe=!0:this._reactionsMap.set(g,{reactedByMe:!0})}_removeMyReactionRecord(s,n){const g=`${s}-${n}`;this._reactionsMap.has(g)&&(this._reactionsMap.get(g).reactedByMe=!1)}_recordMessageReactionInfo(s){const{messageID:n,reactionID:g,reactionInfo:u}=s,E=`${n}-${g}`,m=this._reactionsMap.get(E)||{};this._reactionsMap.set(E,Object.assign(Object.assign({},m),u))}_validateMessageReactionBusinessCapability(){const{helper:s,constants:n}=this._core;if(!s.checkBusinessCapabilityBits(bE))throw new s.ChatError({functionName:"addMessageReaction",code:n.ERROR_CODE.NO_USE,replacement1:"addMessageReaction"})}_handleReactionUpdated(s){const{MsgReactionNotifyList:n}=s,{notificationCenter:g,constants:u}=this._core;n.forEach(E=>pA(this,void 0,void 0,function*(){const{C2CMsgInfo:m,GroupMsgInfo:D,MsgReactionSummary:M}=E,{TinyId:T,MsgClientTime:P,MsgRandom:W}=Object.assign(Object.assign({},m),D),iA=`${T}-${P}-${W}`,EA=this._extractUserIDsFromReactionResults([{ReactionList:M}]),RA=yield this._getUserProfileMap(EA),kA=M.map(xA=>{var LA;const{Reaction:SA,Reaction_Account:OA}=xA,JA=this._generatePartialUserInfo({userIDList:OA,userProfileMap:RA}),ae=OA?xA.Count:0,se=((LA=this._reactionsMap.get(`${iA}-${SA}`))===null||LA===void 0?void 0:LA.reactedByMe)||!1;return this._recordMessageReactionInfo({messageID:iA,reactionID:SA,reactionInfo:{reactionID:SA,totalUserCount:ae,partialUserList:JA}}),{reactionID:SA,totalUserCount:ae,partialUserList:JA,reactedByMyself:se}});g.emitOuterEvent(u.OuterEvent.MESSAGE_REACTIONS_UPDATED,{name:u.OuterEvent.MESSAGE_REACTIONS_UPDATED,data:{messageID:iA,reactionList:kA}})}))}_handleReactionSync(s){var n;const{notificationCenter:g,constants:u}=this._core,{C2CMsgInfo:E={},GroupMsgInfo:m={},Reaction:D,OperateType:M}=s.MsgReactionNotify,{TinyId:T="",MsgClientTime:P=0,MsgRandom:W=0}=Object.assign(Object.assign({},E),m),iA=`${T}-${P}-${W}`,EA=`${iA}-${D}`;if(M===1?this._recordMessageReactedByMe(iA,D):this._removeMyReactionRecord(iA,D),(n=this._reactionsMap.get(EA))===null||n===void 0?void 0:n.reactionID){const RA=this._reactionsMap.get(EA);RA.reactedByMyself=M===1,g.emitOuterEvent(u.OuterEvent.MESSAGE_REACTIONS_UPDATED,{name:u.OuterEvent.MESSAGE_REACTIONS_UPDATED,data:{messageID:iA,reactionList:[RA]}})}}_generatePartialUserInfo({userIDList:s,userProfileMap:n}){const g=[];return s?.forEach(u=>{n.has(u)&&g.push(n.get(u))}),g}_generateMessageID(s){const{messageSequence:n,messageKey:g,messageIDMap:u}=s;return g?u.get(g):u.get(n)}_generateMessageKeyList(s,n){const{constants:g}=this._core,u=s[0],{conversationType:E}=u;let m=[];return E===g.OuterConstant.CONV_C2C?m=s.map(D=>{const{clientSequence:M,random:T,time:P,ID:W}=D,iA=`${M}_${T}_${P}`;return n.set(iA,W),iA}):E===g.OuterConstant.CONV_GROUP&&(m=s.map(D=>{const{ID:M,sequence:T}=D;return n.set(T,M),T})),m}},$a=new class{init(s){this._core=s;const{helper:n,InnerEvent:{MESSAGE_PUSH:g},InnerEventSubType:{C2C_MESSAGE_READ_RECEIPT:u,GROUP_MESSAGE_READ_RECEIPT:E},notificationCenter:m}=s;n.registerApi({apiName:"sendMessageReadReceipt",context:this}),n.registerApi({apiName:"getMessageReadReceiptList",context:this}),n.registerApi({apiName:"getGroupMessageReadMemberList",context:this}),m.subscribeInnerEvent(g,u,this._handleC2CMessageReadReceipt,this),m.subscribeInnerEvent(g,E,this._handleGroupMessageReadReceipt,this)}sendMessageReadReceipt(s){return pA(this,void 0,void 0,function*(){var n;const{common:g,constants:u}=this._core,E=this._filterValidMessageSendByOther(s);if(E.length===0)throw new g.ChatError({code:u.ERROR_CODE.READ_RECEIPT_MSG_LIST_EMPTY});try{const{conversationType:m}=E[0];return m===u.OuterConstant.CONV_C2C?yield function(D){return pA(this,void 0,void 0,function*(){const{common:M,constants:T}=Us.core,P=D[0].conversationID.replace(T.OuterConstant.CONV_C2C,""),W=D.map(EA=>{const{from:RA,to:kA,sequence:xA,random:LA,time:SA,clientTime:OA}=EA;return{From_Account:RA,To_Account:kA,MsgSeq:xA,MsgRandom:LA,MsgTime:SA,MsgClientTime:OA}}),iA={Peer_Account:P,C2CMsgInfo:W};return M.buildAndSendPacket({servcmd:"openim.c2c_msg_read_receipt",data:iA})})}(E):yield function(D){return pA(this,void 0,void 0,function*(){const{common:M,constants:T}=Us.core,P={GroupId:D[0].conversationID.replace(T.OuterConstant.CONV_GROUP,""),MsgSeqList:D.map(W=>({MsgSeq:W.sequence}))};return M.buildAndSendPacket({servcmd:"group_open_http_svc.group_msg_receipt",data:P})})}(E),{code:0,data:{}}}catch(m){const{errorCode:D,errorInfo:M}=m;throw new g.ChatError({code:D,message:M,moreMessage:`peerAccount:${(n=E?.[0])===null||n===void 0?void 0:n.conversationID}`})}})}getMessageReadReceiptList(s){return pA(this,void 0,void 0,function*(){const{common:n,constants:g}=this._core;try{const{conversationType:u}=s[0];if(u===g.OuterConstant.CONV_GROUP){const E=this._filterValidMessageSendByMe(s);if(E?.length>0){const m=yield function(M){return pA(this,void 0,void 0,function*(){const{common:T,constants:P}=Us.core,W={GroupId:M[0].conversationID.replace(P.OuterConstant.CONV_GROUP,""),MsgSeqList:M.map(iA=>({MsgSeq:iA.sequence}))};return T.buildAndSendPacket({servcmd:"group_open_http_svc.get_group_msg_receipt",data:W})})}(E),{GroupMsgReceiptList:D}=m||{};this._updateGroupMessagesReadReceiptInfo({messageList:s,readReceiptList:D})}}return{code:0,data:{messageList:s}}}catch(u){const{errorCode:E,errorInfo:m}=u;throw new n.ChatError({code:E,message:m})}})}getGroupMessageReadMemberList(s){return pA(this,void 0,void 0,function*(){const{constants:n,common:g}=this._core,{message:u,filter:E=kE.READ,cursor:m=""}=s,{conversationID:D,sequence:M,ID:T}=u,P=D.replace(n.OuterConstant.CONV_GROUP,""),W=s.count>=100?100:s.count;try{const iA=yield function(EA){return pA(this,void 0,void 0,function*(){const{sequence:RA,groupID:kA,filter:xA,cursor:LA,count:SA}=EA,OA={MsgSeq:RA,GroupId:kA,Filter:xA,Cursor:LA,Num:SA};return Us.core.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_group_msg_receipt_detail",data:OA})})}({groupID:P,sequence:M,filter:E,cursor:m,count:W});if(iA){const{Cursor:EA,IsFinish:RA,UnreadList:kA,ReadList:xA}=iA,LA={cursor:EA,isCompleted:RA===1,messageID:T,unreadUserIDList:[],readUserIDList:[]};return E===kE.READ?LA.readUserIDList=xA.map(SA=>SA.Read_Account):E===kE.UNREAD&&(LA.unreadUserIDList=kA.map(SA=>SA.Unread_Account)),{code:0,data:LA}}}catch(iA){const{errorCode:EA,errorInfo:RA}=iA;throw new g.ChatError({code:EA,message:RA})}})}_handleC2CMessageReadReceipt(s){const n=[],{constants:g,helper:u}=this._core,{C2cMsgInfo:E,PeerReadTime:m,Peer_Account:D}=s;if(u.isEmpty(E))return;const M=`${g.OuterConstant.CONV_C2C}${D}`;E?.forEach(T=>{const{TinyId:P,MsgClientTime:W,MsgRandom:iA}=T,EA=`${P}-${W}-${iA}`,RA=_c({conversationID:M,messageID:EA});RA&&!RA.readReceiptInfo.isPeerRead&&(RA.readReceiptInfo.isPeerRead=!0,RA.readReceiptInfo.timestamp=m,n.push({userID:D,messageID:EA,isPeerRead:!0,timestamp:m}))}),this._emitReadReceiptEventIfNeed(n)}_updateGroupMessagesReadReceiptInfo(s){const{messageList:n,readReceiptList:g}=s,u=new Map;n.forEach(E=>{u.set(E.sequence,E)}),g?.forEach(E=>{if(E.Code===0){const{MsgSeq:m,ReadNum:D,UnreadNum:M}=E,T=u.get(m);T&&(T.readReceiptInfo.readCount=D,T.readReceiptInfo.unreadCount=M)}})}_handleGroupMessageReadReceipt(s){const n=[],{constants:g}=this._core,{GroupTips:u}=s;u.forEach(E=>{const{MsgBody:{GroupMsgReceiptList:m},GroupInfo:{GroupId:D}}=E,M=`${g.OuterConstant.CONV_GROUP}${D}`;m?.forEach(T=>{const{TinyId:P,MsgClientTime:W,MsgRandom:iA,ReadNum:EA,UnreadNum:RA}=T,kA=`${P}-${W}-${iA}`,xA=_c({conversationID:M,messageID:kA}),LA={groupID:D,messageID:kA,readCount:0,unreadCount:0};xA&&(typeof EA=="number"&&(xA.readReceiptInfo.readCount=EA,LA.readCount=EA),typeof RA=="number"&&(xA.readReceiptInfo.unreadCount=RA,LA.unreadCount=RA),n.push(LA))})}),this._emitReadReceiptEventIfNeed(n)}_emitReadReceiptEventIfNeed(s){const{notificationCenter:n,OuterEvent:g}=this._core;s.length>0&&n.emitOuterEvent(g.MESSAGE_READ_RECEIPT_RECEIVED,{name:g.MESSAGE_READ_RECEIPT_RECEIVED,data:s})}_filterValidMessageSendByOther(s){return this._filterNeedReadReceiptMessages(s).filter(n=>{const{from:g}=n;return g!==this._core.common.getCurrentUserID()})}_filterValidMessageSendByMe(s){const{OuterConstant:n}=this._core.constants;return this._filterNeedReadReceiptMessages(s).filter(g=>{const{from:u,status:E}=g;return u===this._core.common.getCurrentUserID()&&E===n.MessageStatus.SUCCESS})}_filterNeedReadReceiptMessages(s){return s.filter(n=>n.needReadReceipt===!0)}dispose(){const{InnerEvent:{MESSAGE_PUSH:s},InnerEventSubType:{C2C_MESSAGE_READ_RECEIPT:n,GROUP_MESSAGE_READ_RECEIPT:g},notificationCenter:u}=this._core;u.unSubscribeInnerEvent(s,n,this._handleC2CMessageReadReceipt,this),u.unSubscribeInnerEvent(s,g,this._handleGroupMessageReadReceipt,this)}};function eu(s,n,g){return pA(this,void 0,void 0,function*(){const{common:{buildAndSendPacket:u}}=Us.core,{from:E,to:m,clientSequence:D,random:M,time:T}=s;return u({servcmd:"openim_msg_ext_http_svc.set_key_values",data:{From_Account:E,To_Account:m,MsgKey:`${D}_${M}_${T}`,OperateType:g,ExtensionList:n}})})}function Pu(s,n,g){return pA(this,void 0,void 0,function*(){const{common:{buildAndSendPacket:u}}=Us.core,{to:E,sequence:m}=s;return u({servcmd:"openim_msg_ext_http_svc.group_set_key_values",data:{GroupId:E,MsgSeq:m,OperateType:g,ExtensionList:n}})})}var Gc=new class{constructor(){this._messageExtensionsMap=new Map,this._extensionsLatestSequenceMap=new Map,this._completedFetchExtensions=new Set}init(s){this._core=s;const{notificationCenter:n,helper:{registerApi:g},InnerEvent:{MESSAGE_PUSH:u,LOGOUT:E},InnerEventSubType:{MESSAGE_EXTENSIONS_UPDATED:m}}=s;g({apiName:"setMessageExtensions",context:this}),g({apiName:"getMessageExtensions",context:this}),g({apiName:"deleteMessageExtensions",context:this}),n.subscribeInnerEvent(u,m,this._handleMessageExtensionsNotify,this),n.subscribeInnerEvent(E,this.reset,this)}setMessageExtensions(s,n){return pA(this,void 0,void 0,function*(){this._validateMessageExtensionBusinessCapability("setMessageExtensions");const{constants:{OuterConstant:g},ssoLog:u}=this._core,{ID:E,conversationID:m,sequence:D,time:M,conversationType:T}=s;let P=n;n.length>20&&(P=n.slice(0,20),u.warn("setMessageExtensions","the length of extensions cannot exceed 20"));const W=this._generateServerExtensions(s,P),iA=`convID:${m} messageID:${E} sequence:${D} time:${M} count:${P.length}`;try{let EA;if(T===g.CONV_C2C?EA=yield eu(s,W,kl):T===g.CONV_GROUP&&(EA=yield Pu(s,W,kl)),EA){const{resultList:RA,successCount:kA,failureCount:xA}=this._handleModifyMessageExtensions(s,EA);return{code:0,data:{extensions:RA},successLog:{message:`${iA} successCount:${kA} failCount:${xA}`}}}return{code:0,data:{extensions:[]}}}catch(EA){const{errorCode:RA}=EA;throw new this._core.helper.ChatError({functionName:"setMessageExtensions",code:RA,moreMessage:iA})}})}getMessageExtensions(s){return pA(this,void 0,void 0,function*(){const{utils:{isUndefined:n}}=this._core;this._validateMessageExtensionBusinessCapability("getMessageExtensions");const{conversationID:g,ID:u,sequence:E,time:m}=s,D=`convID:${g} messageID:${u} sequence:${E} time:${m}`;try{let M;this._completedFetchExtensions.has(u)&&(M=this._extensionsLatestSequenceMap.get(u));const T=yield this._fetchMessageExtensions(s,M);return n(M)&&T.length>1&&this._completedFetchExtensions.add(u),{code:0,data:{extensions:T},successLog:{message:D}}}catch(M){const{errorCode:T,errorInfo:P=""}=M||{};throw new this._core.common.ChatError({code:T,message:P,moreMessage:D})}})}deleteMessageExtensions(s,n){return pA(this,void 0,void 0,function*(){this._validateMessageExtensionBusinessCapability("deleteMessageExtensions");const{utils:{isEmpty:g},constants:{OuterConstant:u}}=this._core,{conversationType:E,conversationID:m,sequence:D,ID:M,time:T}=s;let P=Ug;const W=[];g(n)||(P=Ll,n?.forEach(RA=>{W.push({key:RA,value:"",seq:0})}));const iA=`convID:${m} messageID:${M} sequence:${D} time:${T} operateType:${P}`,EA=this._generateServerExtensions(s,W);try{let RA;if(E===u.CONV_C2C?RA=yield eu(s,EA,P):E===u.CONV_GROUP&&(RA=yield Pu(s,EA,P)),RA){const{resultList:kA,successCount:xA,failureCount:LA}=this._handleModifyMessageExtensions(s,RA);return{code:0,data:{extensions:kA},successLog:{message:`${iA}successCount:${xA} failCount:${LA}`}}}return{code:0,data:{extensions:[]}}}catch(RA){const{errorCode:kA}=RA;throw new this._core.helper.ChatError({functionName:"deleteMessageExtensions",code:kA,moreMessage:iA})}})}reset(){this._messageExtensionsMap.clear(),this._extensionsLatestSequenceMap.clear(),this._completedFetchExtensions.clear()}dispose(){this.reset();const{notificationCenter:s,InnerEvent:{MESSAGE_PUSH:n,LOGOUT:g},InnerEventSubType:{MESSAGE_EXTENSIONS_UPDATED:u}}=this._core;s.unSubscribeInnerEvent(n,u,this._handleMessageExtensionsNotify,this),s.subscribeInnerEvent(g,this.reset,this)}_handleModifyMessageExtensions(s,n){const{ID:g}=s,{Seq:u}=n,E=n.ExtensionList||[],m=[];let D=0,M=0,T=[];return E.forEach(P=>{const{ErrorCode:W,Extension:iA}=P,{Key:EA,Value:RA,Seq:kA}=iA;m.push({code:W,key:EA,value:RA}),W===0?D++:M++,T.push({key:EA,value:RA,seq:kA})}),this._extensionsLatestSequenceMap.set(g,u),T.length>0&&this._updateLocalExtensions(s.ID,T),{resultList:m,successCount:D,failureCount:M}}_updateLocalExtensions(s,n){this._messageExtensionsMap.has(s)||this._messageExtensionsMap.set(s,new Map);const g=this._messageExtensionsMap.get(s);n?.forEach(u=>{const{key:E,seq:m,value:D=""}=u;g?.set(E,{value:D,seq:m})})}_fetchMessageExtensions(s,n){return pA(this,void 0,void 0,function*(){const{constants:{OuterConstant:g},utils:{isEmpty:u}}=this._core;try{let E;const{conversationType:m,ID:D}=s;if(m===g.CONV_C2C?E=yield function(M,T){const{common:{buildAndSendPacket:P}}=Us.core,{from:W,to:iA,clientSequence:EA,random:RA,time:kA}=M;return P({servcmd:"openim_msg_ext_http_svc.get_key_values",data:{From_Account:W,To_Account:iA,MsgKey:`${EA}_${RA}_${kA}`,StartSeq:T}})}(s,n):m===g.CONV_GROUP&&(E=yield function(M,T){const{common:{buildAndSendPacket:P}}=Us.core,{to:W,sequence:iA}=M;return P({servcmd:"openim_msg_ext_http_svc.group_get_key_values",data:{GroupId:W,MsgSeq:iA,StartSeq:T}})}(s,n)),E){const{LatestSeq:M,ClearSeq:T,CompleteFlag:P}=E,W=(E.ExtensionList||[]).map(EA=>({key:EA.Key,value:EA.Value,seq:EA.Seq}));if(this._updateLocalExtensions(D,W),this._clearLocationExtensions(D,T),this._extensionsLatestSequenceMap.set(D,M),P!==1){const EA=W[W.length-1].seq+1;return this._fetchMessageExtensions(s,EA)}const iA=[];if(this._messageExtensionsMap.has(D)){const EA=this._messageExtensionsMap.get(D);EA?.forEach((RA,kA)=>{const{value:xA}=RA;u(xA)||iA.push({key:kA,value:xA})})}return iA}}catch(E){throw E}})}_clearLocationExtensions(s,n){if(!(n<=0)&&this._messageExtensionsMap.has(s)){const g=this._messageExtensionsMap.get(s);g?.forEach((u,E)=>{u.seq<=n&&g.delete(E)})}}_generateServerExtensions(s,n){const{ID:g}=s;if(this._messageExtensionsMap.has(g)){const u=this._messageExtensionsMap.get(g);return n.map(E=>{var m;const{key:D,value:M}=E;let T=0;return u?.has(D)&&(T=(m=u.get(D))===null||m===void 0?void 0:m.seq),{Key:D,Value:M,Seq:T}})}return n.map(u=>({Key:u.key,Value:u.value,Seq:0}))}_validateMessageExtensionBusinessCapability(s){const{helper:n,constants:g}=this._core;if(!n.checkBusinessCapabilityBits(hC))throw new n.ChatError({functionName:s,code:g.ERROR_CODE.NO_USE,replacement1:s})}_handleMessageExtensionsNotify(s){const{SetKVInfo:n,DeleteKVInfo:g,ClearKVInfo:u,MsgOptType:E,TinyId:m,MsgLastSeq:D,ExtensionC2cMsgInfo:M,ExtensionGroupMsgInfo:T}=s?.MsgExtensionNotify||{},P=M||T||{},{MsgClientTime:W,MsgRandom:iA}=P,EA=`${m}-${W}-${iA}`;this._extensionsLatestSequenceMap.set(EA,D),E===kl?this._handleMessageExtensionsUpdated({messageID:EA,updateMessageExtensionsInfo:n}):E===Ll?this._handleMessageExtensionsDeleted({messageID:EA,deleteMessageExtensionsInfo:g}):E===Ug&&this._handleMessageExtensionsCleared({messageID:EA,clearMessageExtensionsInfo:u})}_handleMessageExtensionsUpdated(s){const{notificationCenter:n,OuterEvent:g}=this._core,{messageID:u,updateMessageExtensionsInfo:E=[]}=s,m=[];E.forEach(D=>{const{MsgKeyValue:M=[]}=D,T=M.map(P=>(m.push({key:P.Key,value:P.Value}),{key:P.Key,value:P.Value,seq:P.Seq}));this._updateLocalExtensions(u,T)}),n.emitOuterEvent(g.MESSAGE_EXTENSIONS_UPDATED,{name:g.MESSAGE_EXTENSIONS_UPDATED,data:{messageID:u,extensions:m}})}_handleMessageExtensionsDeleted(s){const{notificationCenter:n,OuterEvent:g}=this._core,{messageID:u,deleteMessageExtensionsInfo:E=[]}=s,m=[];E.forEach(D=>{const{MsgKeyValue:M=[]}=D,T=M.map(P=>(m.push(P.Key),{key:P.Key,seq:P.Seq}));this._updateLocalExtensions(u,T)}),n.emitOuterEvent(g.MESSAGE_EXTENSIONS_DELETED,{name:g.MESSAGE_EXTENSIONS_DELETED,data:{messageID:u,keyList:m}})}_handleMessageExtensionsCleared(s){const{notificationCenter:n,OuterEvent:{MESSAGE_EXTENSIONS_DELETED:g},utils:{isEmpty:u}}=this._core,{messageID:E,clearMessageExtensionsInfo:m=[]}=s,D=[];m.forEach(M=>{const{ClearMsgSeq:T}=M;this._messageExtensionsMap.has(E)&&(this._messageExtensionsMap.get(E)||[]).forEach((P,W)=>{P.seq<=T&&!u(P.value)&&D.push(W)}),this._clearLocationExtensions(E,T)}),n.emitOuterEvent(g,{name:g,data:{messageID:E,keyList:D}})}};const pI={key:"message",required:!0,rules:["object"],allowEmpty:!1,customValidator:s=>{const{constants:{OuterConstant:n}}=Us.core;return s.status!==n.MessageStatus.SUCCESS?"message is not success":s.isSupportExtension===!0||"message is not support extension"}},sl={setMessageExtensions:[pI,{key:"extensions",required:!0,rules:["array"],allowEmpty:!1}],getMessageExtensions:[pI],deleteMessageExtensions:[pI]},nl=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({deleteMessage:[{required:!0,rules:["array"],allowEmpty:!1}],revokeMessage:[{required:!0,rules:["object"],allowEmpty:!1}],resendMessage:[{key:"message",required:!0,rules:["object"],allowEmpty:!1},{key:"options",required:!1,rules:["object"],allowEmpty:!1}],getMessageList:{conversationID:{required:!0,rules:["string"],allowEmpty:!1},nextReqMessageID:{required:!1,rules:["string"],allowEmpty:!0},count:{required:!1,rules:["number"],allowEmpty:!0}},getMessageListHopping:{conversationID:{required:!0,rules:["string"],allowEmpty:!1},sequence:{required:!1,rules:["number"],allowEmpty:!0},direction:{required:!1,rules:["number"],allowEmpty:!0},count:{required:!1,rules:["number"],allowEmpty:!0}},createTextAtMessage:{to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1},payload:{required:!0,rules:["object"],allowEmpty:!1,customValidator:s=>{const n=function(g){var u;return typeof g?.text!="string"||typeof g.text=="string"&&((u=g?.text)===null||u===void 0?void 0:u.length)===0?"payload.text is invalid.":!0}(s);return n!==!0?n:!(s?.atUserList&&!Array.isArray(s.atUserList))||"atUserList should be an array or undefind."}}},findMessage:[{required:!0,rules:["string"],allowEmpty:!1}],translateText:{sourceTextList:{required:!0,rules:["array"],allowEmpty:!1},sourceLanguage:{required:!0,rules:["string"],allowEmpty:!1},targetLanguage:{required:!0,rules:["string"],allowEmpty:!1}},createForwardMessage:{to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1,customValidator:s=>!(!s.startsWith("C2C")&&!s.startsWith("GROUP"))||"conversationType is invalid."},payload:{required:!0,rules:["object"],allowEmpty:!1}},createLocationMessage:{to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1},payload:{required:!0,rules:["object"],allowEmpty:!1,customValidator:s=>{const{utils:{isString:n,isNumber:g}}=Us.core;return n(s?.description)?g(s?.longitude)?!!g(s?.latitude)||"payload.latitude must be a number.":"payload.longitude must be a number.":"payload.description must be a string."}}}},{addMessageReaction:[{key:"message",required:!0,rules:["object"],allowEmpty:!1},{key:"reactionID",required:!0,rules:["string"],allowEmpty:!1}],removeMessageReaction:[{key:"message",required:!0,rules:["object"],allowEmpty:!1},{key:"reactionID",required:!0,rules:["string"],allowEmpty:!1}],getMessageReactions:{messageList:{required:!0,rules:["array"],allowEmpty:!1},maxUserCountPerReaction:{required:!1,rules:["number"],allowEmpty:!0,customValidator:s=>typeof s!="number"?"maxUserCountPerReaction is invalid.":!(s<0||s>10)||"maxUserCountPerReaction should between [0, 10]."}},getAllUserListOfMessageReaction:{message:{required:!0,rules:["object"],allowEmpty:!1,customValidator:s=>s.status==="success"||"message is invalid."},reactionID:{required:!0,rules:["string"],allowEmpty:!1},nextSeq:{required:!1,rules:["number"],allowEmpty:!0},count:{required:!1,rules:["number"],allowEmpty:!0}}}),{sendMessageReadReceipt:[{required:!0,rules:["array"],allowEmpty:!1}],getMessageReadReceiptList:[{required:!0,rules:["array"],allowEmpty:!1}],getGroupMessageReadMemberList:{message:{required:!0,rules:["object"],allowEmpty:!1},filter:{required:!1,rules:["number"],allowEmpty:!0},count:{required:!1,rules:["number"],allowEmpty:!0},cursor:{required:!1,rules:["string"],allowEmpty:!0}}}),sl),{pinGroupMessage:{groupID:{required:!0,rules:["string"],allowEmpty:!1},message:{required:!0,rules:["object"],allowEmpty:!1},isPinned:{required:!0,rules:["boolean"],allowEmpty:!1}},getPinnedGroupMessageList:[{key:"groupID",required:!0,rules:["string"],allowEmpty:!1}]}),{createQuoteMessage:[{key:"message",required:!0,rules:["object"],allowEmpty:!1},{key:"quotedMessage",required:!0,rules:["object"],allowEmpty:!1}]}),xa=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({deleteMessage:!0,revokeMessage:!0,resendMessage:!0,getMessageList:!0,getMessageListHopping:!0,createTextAtMessage:!0,findMessage:!0,translateText:!0,createForwardMessage:!0,createLocationMessage:!0},{addMessageReaction:!0,removeMessageReaction:!0,getMessageReactions:!0,getAllUserListOfMessageReaction:!0}),{sendMessageReadReceipt:!0,getMessageReadReceiptList:!0,getGroupMessageReadMemberList:!0}),{setMessageExtensions:!0,getMessageExtensions:!0,deleteMessageExtensions:!0}),{pinGroupMessage:!0,getPinnedGroupMessageList:!0}),{createQuoteMessage:!0});class FE{constructor(n){this._core=n}deleteMessage(n){return pA(this,void 0,void 0,function*(){const{to:g,messageIdentifiers:u}=n,E={From_Account:this._core.common.getCurrentUserID(),To_Account:g,MsgKeyList:u};return this._core.common.buildAndSendPacket({servcmd:"openim.delete_c2c_msg_ramble",data:E})})}revokeMessage(n){return pA(this,void 0,void 0,function*(){const{to:g,from:u,sequence:E,time:m,random:D}=n,M={MsgInfo:{From_Account:u,To_Account:g,MsgSeq:E,MsgRandom:D,MsgTimeStamp:m}};return this._core.common.buildAndSendPacket({servcmd:"openim.msgwithdraw",data:M})})}}class ra{constructor(n){this._core=n}deleteMessage(n){return pA(this,void 0,void 0,function*(){const{to:g,messageIdentifiers:u}=n,E={GroupId:g,Deleter_Account:this._core.common.getCurrentUserID(),Seqs:u};return this._core.common.buildAndSendPacket({servcmd:"group_open_http_svc.delete_group_ramble_msg_by_seq",data:E})})}revokeMessage(n){return pA(this,void 0,void 0,function*(){const{to:g,sequence:u}=n,E={GroupId:g,MsgSeqList:[{MsgSeq:u}]};return this._core.common.buildAndSendPacket({servcmd:"group_open_http_svc.group_msg_recall",data:E})})}}const Mn=2116;class kr{constructor(n){this._core=n}generateRevokeMessage(n){const{conversationID:g,sequence:u,random:E,tinyID:m,clientTime:D,revokeReason:M,revoker:T}=n;let P={};const{messageDataHandler:W}=this._core.message;return P=W.revokeMessage({conversationID:g,sequence:u,random:E,revoker:T}),P||(P={conversationID:g,sequence:u},m&&D&&E&&(P.ID=`${m}-${D}-${E}`)),P.revoker=T,P.revokeReason=M,P.revokerInfo={userID:T,nick:"",avatar:""},P}updateRevokerInfo(n){return pA(this,void 0,void 0,function*(){const g=n.map(u=>u.revoker);try{const u=yield this._fetchUserInfos(g);u&&n.forEach(E=>{const{revoker:m}=E;u[m]&&(E.revokerInfo.nick=u[m].nick||"",E.revokerInfo.avatar=u[m].avatar||"",E.revokerInfo.userID=m)})}catch(u){console.debug(u)}})}_fetchUserInfos(n){return pA(this,void 0,void 0,function*(){var g,u;const E=yield(g=this._core.user.userProfile)===null||g===void 0?void 0:g.getUserProfile({userIDList:n});return E?.data?(u=E.data)===null||u===void 0?void 0:u.reduce((m,{userID:D,nick:M,avatar:T})=>(m[D]={nick:M||"",avatar:T||""},m),{}):null})}}var rl=new class{constructor(){this._core=null,this._c2cMessageAction=null,this._groupMessageAction=null}init(s){this._core=s,this._groupMessageAction=new ra(s),this._c2cMessageAction=new FE(s),this._messageHelper=new kr(s);const{helper:n}=s;n.registerApi({apiName:"deleteMessage",context:this}),n.registerApi({apiName:"revokeMessage",context:this}),n.registerApi({apiName:"resendMessage",context:this}),n.registerApi({apiName:"findMessage",context:this}),n.registerApi({apiName:"createQuoteMessage",context:this})}deleteMessage(s){return pA(this,void 0,void 0,function*(){let n=[],g=[];const{conversationID:u,conversationType:E}=s[0],m=u.replace(E,"");if(E==="@TIM#SYSTEM")throw new this._core.helper.ChatError({code:Mn});if(s.forEach(D=>{const{conversationID:M,conversationType:T,status:P,_onlineOnlyFlag:W,sequence:iA,random:EA,time:RA}=D||{};if(P==="success"&&M===u&&T===E){if(!W){const kA=T==="C2C"?`${iA}_${EA}_${RA}`:String(iA);n.push(kA)}g.push(D)}}),n.length===0)return this._handleDeleteMessageSuccess(g),{code:0,data:{messageList:g}};n.length>30&&(n=n.slice(0,30),g=g.slice(0,30));try{return E==="C2C"?yield this._c2cMessageAction.deleteMessage({to:m,messageIdentifiers:n}):yield this._groupMessageAction.deleteMessage({to:m,messageIdentifiers:n}),this._handleDeleteMessageSuccess(g),{code:0,data:{messageList:g}}}catch(D){const{utils:{safeStringify:M}}=this._core,{errorCode:T,errorInfo:P}=D;throw new this._core.helper.ChatError({functionName:"deleteMessage",code:T,message:P,moreMessage:`messageIdentifiers: ${M(n)}`})}})}revokeMessage(s){return pA(this,void 0,void 0,function*(){var n;const{conversationType:g,isRevoked:u,ID:E,type:m,from:D,to:M}=s;let T=null;const P=`type:${m} from:${D} to:${M} ID:${E}`;if(g==="@TIM#SYSTEM")throw new this._core.helper.ChatError({message:"system message cannot be revoked"});if(u)throw new this._core.helper.ChatError({message:"message has been revoked",moreMessage:P});try{if(T=g==="C2C"?yield this._c2cMessageAction.revokeMessage(s):yield this._groupMessageAction.revokeMessage(s),T){const{RecallRetList:W}=T,iA=((n=W?.[0])===null||n===void 0?void 0:n.RetCode)||0;if(iA!==0)throw new this._core.helper.ChatError({code:iA,moreMessage:P});return s.isRevoked=!0,yield this._handleRevokeMessageSuccess(s),{code:0,data:{message:s},successLog:{message:P}}}}catch(W){const{errorCode:iA}=W;throw new this._core.helper.ChatError({functionName:"revokeMessage",code:iA,moreMessage:P})}})}resendMessage(s,n){return pA(this,void 0,void 0,function*(){var g,u;return s.isResend=!0,s.status="unSend",(u=(g=this._core)===null||g===void 0?void 0:g.apiMap)===null||u===void 0?void 0:u.sendMessage(s,n)})}findMessage(s){return this._core.message.messageDataHandler.findMessage(s)}createQuoteMessage(s,n){const{ID:g,time:u,sequence:E}=n;return s.quoteInfo={msgID:g,messageTime:u,messageSequence:E},s}_handleDeleteMessageSuccess(s){if(s.length===0)return;const{message:{messageDataHandler:n},common:{isTopic:g},notificationCenter:u,InnerEvent:E}=this._core;s.forEach(D=>{D.isDeleted=!0;const M=n.getLocalMessageList(D.conversationID);M?.forEach(T=>{T.ID===D.ID&&(T.isDeleted=!0)})});const{conversationID:m=""}=s[0];g(m)?u.emitInnerEvent(E.TOPIC_MESSAGE_DELETED,m):u.emitInnerEvent(E.MESSAGE_DELETED,m)}_handleRevokeMessageSuccess(s){return pA(this,void 0,void 0,function*(){var n;const g=(n=this._core.store.get("login"))===null||n===void 0?void 0:n.userId,{conversationID:u,sequence:E,random:m}=s;this._core.message.messageDataHandler.revokeMessage({conversationID:u,sequence:E,random:m,revoker:g}),yield this._messageHelper.updateRevokerInfo([s])})}};class Ul{static parseServerPushElement(n){const{MsgContent:g={}}=n,{Index:u,Data:E}=g;return new Ul({index:u,data:E})}constructor(n){this.type=Vr.MSG_FACE;const{index:g,data:u}=n;this.content={index:g,data:u}}validateBeforeSend(){var n,g;return typeof((n=this.content)===null||n===void 0?void 0:n.index)=="number"&&typeof((g=this.content)===null||g===void 0?void 0:g.data)=="string"?{isValid:!0}:{isValid:!1,error:{message:"content is invalid"}}}transformToServerFormat(n){const{isMergerMessage:g=!1}=n||{},u=g?this.payload:this.content,{index:E,data:m}=u;return{MsgType:this.type,MsgContent:{Index:E,Data:m}}}}class bc{static parseServerPushElement(n){const{MsgContent:g={}}=n,{Desc:u,Longitude:E,Latitude:m}=g;return new bc({description:u,longitude:E,latitude:m})}constructor(n){this.type=Vr.MSG_LOCATION;const{description:g,longitude:u,latitude:E}=n;this.content={description:g,longitude:u,latitude:E}}validateBeforeSend(){return{isValid:!0}}transformToServerFormat(n){const{isMergerMessage:g=!1}=n||{},u=g?this.payload:this.content,{description:E,longitude:m,latitude:D}=u;return{MsgType:this.type,MsgContent:{Desc:E,Longitude:m,Latitude:D}}}}class OE{static parseServerPushElement(n){const{MsgContent:g={}}=n,{StreamMsgID:u,CompatibleText:E,Markdown:m,BinaryData:D,ErrorCode:M,ErrorMsg:T}=g;return new OE({streamMessageID:u,compatibleText:E,markdown:m,binaryData:D,errorCode:M,errorMessage:T})}constructor(n){this.type=Vr.MSG_STREAM,this.content={streamMessageID:"",compatibleText:"",errorCode:0,errorMessage:"",isStreamEnded:!1},this._chunks=[],this._latestIndex=0;const{streamMessageID:g,compatibleText:u,markdown:E,binaryData:m,errorCode:D=0,errorMessage:M="",isStreamEnded:T=!1,chunks:P=[],latestIndex:W=0}=n;this.content.streamMessageID=g,this.content.compatibleText=u,this.content.markdown=E,this.content.binaryData=m,this.content.errorCode=D,this.content.errorMessage=M,this.content.isStreamEnded=T,this.content.chunks=P,this.content.latestIndex=W}updateChunks(n){if(!n||n.length===0)return;const g=n.sort((m,D)=>m.index-D.index),u=this._getMaxRevokedChunkIndex(g);u>=0&&(this._chunks=[],this._latestIndex=u,this._updateContent());const E=this._getValidChunks(g);if(E.length!==0&&(this._mergeAndSortChunks(E),this._chunks.length>0)){const m=this._chunks[this._chunks.length-1];this._latestIndex=m.index,this._updateContent(),this.content.isStreamEnded=m.isLast}}getLatestIndex(){return this._latestIndex}transformToServerFormat(n){const{isMergerMessage:g=!1}=n||{},u=g?this.payload:this.content,{streamMessageID:E,chunks:m}=u,D=m?.map(M=>({EventType:M.eventType||"data",Index:M.index,Markdown:M.markdown,IsLast:M.isLast}));return{MsgType:this.type,MsgContent:{StreamMsgID:E,Chunks:D}}}validateBeforeSend(){var n,g;return((g=(n=this.content)===null||n===void 0?void 0:n.chunks)===null||g===void 0?void 0:g.length)>0?{isValid:!0}:{isValid:!1,error:{message:"content is invalid"}}}_filterContinuousChunks(n,g){if(n.length===0)return[];const u=[];let E=g;for(const m of n){if(m.index>E)break;m.index===E&&(u.push(m),E++)}return u}_mergeAndSortChunks(n){const g=new Map;this._chunks.forEach(u=>{g.set(u.index,u)}),n.forEach(u=>{g.set(u.index,u)}),this._chunks=Array.from(g.values()).sort((u,E)=>u.index-E.index)}_updateContent(){this.content.markdown=this._chunks.map(g=>g.markdown).join("");const n=this._chunks.map(g=>g.binaryData).filter(g=>g?.length>0);if(n.length===0)this.content.binaryData=new Uint8Array(0);else if(n.length===1)this.content.binaryData=n[0];else{const g=n.reduce((m,D)=>m+D.length,0),u=new Uint8Array(g);let E=0;for(const m of n)u.set(m,E),E+=m.length;this.content.binaryData=u}}_getMaxRevokedChunkIndex(n){let g=-1;for(let u=0;ug&&(g=E.index)}return g}_getValidChunks(n){const g=n.filter(u=>u.eventType===Nc.DATA&&u.index>this._latestIndex);return this._filterContinuousChunks(g,this._latestIndex+1)}}var kc=new class{init(s){this._core=s,s.message.messageFactory.registerElementClass(Vr.MSG_FACE,Ul),s.message.messageFactory.registerElementClass(Vr.MSG_LOCATION,bc),s.message.messageFactory.registerElementClass(Vr.MSG_STREAM,OE),s.helper.registerApi({apiName:"createFaceMessage",context:this}),s.helper.registerApi({apiName:"createTextAtMessage",context:this}),s.helper.registerApi({apiName:"createForwardMessage",context:this}),s.helper.registerApi({apiName:"createLocationMessage",context:this})}createFaceMessage(s){if(!s)return null;const{index:n,data:g}=s?.payload||{},u=new Ul({index:n,data:g}),E=this._core.common.getCurrentUserID(),m=this._core.message.messageFactory.createMessage(Object.assign(Object.assign({},s),{from:E}));return m.setElement(u),m}createTextAtMessage(s){const{atUserList:n}=s?.payload||{},g=this._core.apiMap.createTextMessage(s),{OuterConstant:u}=this._core;if(!g)return null;if(Array.isArray(n)){const E=[],m=[];n.forEach(D=>{D!==u.MSG_AT_ALL?(E.push({GroupAtAllFlag:ch,GroupAt_Account:D}),m.push(D)):(E.push({GroupAtAllFlag:ao}),m.push(u.MSG_AT_ALL))}),g._groupAtInfoList=E,g.atUserList=m}return g}createForwardMessage(s){const{helper:n,OuterConstant:g}=this._core,{to:u,conversationType:E,priority:m,payload:D,needReadReceipt:M,receiverList:T,cloudCustomData:P="",isSupportExtension:W=!1}=s;if(!Array.isArray(D._elements))throw new n.ChatError({functionName:"createForwardMessage",code:2454});if(D.type===g.MSG_GRP_TIP)throw new n.ChatError({functionName:"createForwardMessage",code:2453});const iA=this._core.common.getCurrentUserID(),EA=this._core.message.messageFactory.createMessage({to:u,from:iA,conversationType:E,isPlaceMessage:0,priority:m,payload:D,needReadReceipt:M,isSupportExtension:W,cloudCustomData:P,receiverList:T});return EA.setRelayFlag(!0),EA.setElement(D._elements[0]),EA}createLocationMessage(s){if(!s)return null;const{description:n,longitude:g,latitude:u}=s?.payload||{},E=new bc({description:n,longitude:g,latitude:u}),m=this._core.common.getCurrentUserID(),D=this._core.message.messageFactory.createMessage(Object.assign(Object.assign({},s),{from:m}));return D.setElement(E),D}};let xu=class{init(s){this._messageHelper=new kr(s),this._core=s;const{notificationCenter:n,InnerEvent:{MESSAGE_PUSH:g},InnerEventSubType:{C2C_REVOKED_MESSAGE:u},helper:{registerWorkflowStep:E},constants:{WORKFLOW_NAME:m,WORKFLOW_STEP:D}}=s;n.subscribeInnerEvent(g,u,this._handleC2CNotifyMessage,this),E(m.SYNC_SERVER_INFO_AFTER_RE_ONLINE,D.HANDLE_C2C_REVOKED_MESSAGE_FROM_SYNC_UNREAD,this._handleC2CRevokeMessagesFromUnreadMessageSync,this)}_handleC2CNotifyMessage(s){const{C2cNotifyMsgArray:n}=s;n?.forEach(g=>{Object.keys(g).includes("WithdrawC2cMsgNotify")&&this._handleC2CRevokeMessage(g)})}_handleC2CRevokeMessage(s){return pA(this,void 0,void 0,function*(){try{const{WithdrawC2cMsgNotify:{C2cWithdrawInfoArray:n}}=s;yield this._parseAndEmitC2CRevokedMessages(n)}catch(n){console.debug(n)}})}_parseAndEmitC2CRevokedMessages(s){return pA(this,void 0,void 0,function*(){const n=[],{notificationCenter:g,OuterEvent:u,common:{getCurrentUserID:E}}=this._core;s.forEach(m=>{var D;const{MsgRand:M,MsgSeq:T,To_Account:P,From_Account:W,RevokerInfo:{Revoker_Account:iA,Revoke_Reason:EA}}=m,RA=E()===W?`C2C${P}`:`C2C${W}`,kA=((D=m?.RevokerInfo)===null||D===void 0?void 0:D.Reason)||EA,xA=this._messageHelper.generateRevokeMessage({conversationID:RA,sequence:T,random:M,revoker:iA,revokeReason:kA});n.push(xA)}),n.length>0&&(yield this._messageHelper.updateRevokerInfo(n),g.emitOuterEvent(u.MESSAGE_REVOKED,{name:u.MESSAGE_REVOKED,data:n}))})}_handleC2CRevokeMessagesFromUnreadMessageSync(s){return pA(this,void 0,void 0,function*(){const{revokedMessageList:n}=s.result;yield this._parseAndEmitC2CRevokedMessages(n)})}dispose(){const{notificationCenter:s,InnerEvent:{MESSAGE_PUSH:n},InnerEventSubType:{C2C_REVOKED_MESSAGE:g}}=this._core;s.unSubscribeInnerEvent(n,g,this._handleC2CNotifyMessage,this)}},pC=class{init(s){this._messageHelper=new kr(s),this._core=s;const{notificationCenter:n,InnerEvent:{MESSAGE_PUSH:g},InnerEventSubType:{GROUP_MESSAGE_REVOKED:u}}=s;n.subscribeInnerEvent(g,u,this._handleGroupNotifyMessage,this)}_handleGroupNotifyMessage(s){const{GroupTips:n}=s;n?.forEach(g=>{var u;Array.isArray((u=g?.MsgBody)===null||u===void 0?void 0:u.GroupWithdrawInfoArray)&&this._handleGroupRevokeMessage(g)})}_handleGroupRevokeMessage(s){return pA(this,void 0,void 0,function*(){try{const{RevokerInfo:n,MsgBody:{GroupWithdrawInfoArray:g},GroupInfo:u}=s,E=[],m=[],{notificationCenter:D,OuterEvent:M,utils:{isEmpty:T},common:{isCommunity:P}}=this._core;let W=!1;u&&(W=P({groupID:u.GroupId})||!T(u.TopicId)),g.forEach(iA=>{const{Random:EA,MsgSeq:RA,GroupId:kA,MsgClientTime:xA,TinyId:LA,TopicId:SA,RevokerInfo:{Revoker_Account:OA=n?.Revoker_Account||"",Reason:JA=n?.Reason||""}}=iA,ae=SA?`GROUP${SA}`:`GROUP${kA}`,se=this._messageHelper.generateRevokeMessage({conversationID:ae,sequence:RA,random:EA,tinyID:LA,clientTime:xA,revoker:OA,revokeReason:JA});W?(se.revokerInfo.nick=u.From_AccountNick,se.revokerInfo.avatar=u.From_AccountHeadurl,E.push(se)):m.push(se)}),m.length>0&&(yield this._messageHelper.updateRevokerInfo(m),E.push(...m)),E.length!==0&&D.emitOuterEvent(M.MESSAGE_REVOKED,{name:M.MESSAGE_REVOKED,data:E})}catch(n){console.debug(n)}})}dispose(){const{notificationCenter:s,InnerEvent:{MESSAGE_PUSH:n},InnerEventSubType:{GROUP_MESSAGE_REVOKED:g}}=this._core;s.unSubscribeInnerEvent(n,g,this._handleGroupNotifyMessage,this)}};var tu=new class{constructor(){this._c2cMessageReceiver=new xu,this._groupMessageReceiver=new pC}init(s){this._c2cMessageReceiver.init(s),this._groupMessageReceiver.init(s)}dispose(){this._c2cMessageReceiver.dispose(),this._groupMessageReceiver.dispose()}},lh=new class{constructor(){this._core=null}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"translateText",context:this})}translateText(s){return pA(this,void 0,void 0,function*(){try{const{sourceLanguage:n,sourceTextList:g,targetLanguage:u}=s,E=yield function(m,D){return pA(this,void 0,void 0,function*(){var M,T;const{sourceTextList:P,sourceLanguage:W,targetLanguage:iA}=m,{store:EA,common:RA}=D,kA={SourceText:P,Source:W,Target:iA,FromAccount:(M=EA.get("login"))===null||M===void 0?void 0:M.tinyID,SDKAppID:(T=EA.get("instance"))===null||T===void 0?void 0:T.sdkAppId},xA=yield RA.buildAndSendPacket({servcmd:"im_open_translate.ws_batch_trans_text",data:kA});if(xA){const{CmdErrorCode:LA,TargetText:SA}=xA;return{cmdErrorCode:LA,translatedTextList:SA}}})}({sourceLanguage:n,sourceTextList:g,targetLanguage:u},this._core);if(E){const{cmdErrorCode:{ErrorCode:m,ErrorInfo:D},translatedTextList:M}=E;if(m===0)return{code:0,data:{translatedTextList:M}};throw{errorCode:m,errorInfo:D,message:D}}}catch(n){const{errorCode:g,errorInfo:u}=n||{};throw new this._core.helper.ChatError({functionName:"translateText",code:g,message:u})}})}},Yu=new class{init(s){this._core=s,s.helper.registerApi({apiName:"convertVoiceToText",context:this})}convertVoiceToText(s){return pA(this,void 0,void 0,function*(){var n;const{message:g,language:u=Tc.ZH_PY}=s;let{url:E}=g.payload||{};const m=this._core.common.getCurrentUserID();g.from===m&&g.flow==="out"&&(E=g.payload.remoteAudioUrl),this._validateVoiceFormat(E);const D=((n=QI.exec(E))===null||n===void 0?void 0:n[1])||"mp3",M=BI[u]||$I;try{const T=yield function(P){var W;const{store:iA,common:EA}=Us.core,{url:RA,format:kA,serverLanguageType:xA}=P,LA={BytesUrl:RA,BytesEngServiceType:xA,BytesVoiceFormat:kA,Uint32Sdkappid:(W=iA.get("instance"))===null||W===void 0?void 0:W.sdkAppId,Uint64SourceType:0};return EA.buildAndSendPacket({servcmd:"im_open_speech.ws_sentence_recognition",data:LA})}({url:E,format:D,serverLanguageType:M});if(T){const{CmdErrorCode:P,BytesResult:W}=T;if(P.ErrorCode===0)return{code:0,data:{result:W}};throw{code:P.ErrorCode,message:P.ErrorInfo}}}catch(T){const{code:P,message:W}=T||{};throw new this._core.common.ChatError({functionName:"convertVoiceToText",code:P,message:W})}})}_validateVoiceFormat(s){if(!QI.test(s))throw new this._core.common.ChatError({code:2119})}};class mI{constructor(n){const{constants:g,common:u,utils:E}=Us.core,{CONV_C2C:m,CONV_GROUP:D}=g.OuterConstant,{ID:M,tinyID:T,from:P,to:W,clientTime:iA=u.timeManager.getServerTimeSeconds()||0,random:EA,sequence:RA,cloudCustomData:kA="",nick:xA="",avatar:LA="",clientSequence:SA,conversationType:OA,groupID:JA,_elements:ae,time:se}=n;this.ID=M||`${T}-${iA}-${EA}`,this.messageRandom=EA,this.from=P,this.messageSender=P,this.time=se,this.messageSequence=RA,this.clientSequence=SA||RA,this.clientTime=iA,this.cloudCustomData=kA,this.messageReceiver=W,this.avatar=LA,this.nick=xA;const _i=E.deepCopyWithMethods(ae);_i.forEach(Ti=>{Ti.payload=Ti.content,delete Ti.content}),this.messageBody=_i,M?OA.startsWith(m)?this.receiverUserID=W:OA.startsWith(D)&&(this.receiverGroupID=W):JA?(this.receiverGroupID=JA,this.messageReceiver=JA):W&&(this.receiverUserID=W,this.messageReceiver=W)}transformElementsToServerFormat(){return this.messageBody?Array.isArray(this.messageBody)?this.messageBody.map(n=>n.transformToServerFormat({isMergerMessage:!0})):this.messageBody.transformToServerFormat({isMergerMessage:!0}):null}}class al{static parseServerPushElement(n){const{MsgContent:g}=n,{MsgList:u=[],CompatibleText:E,AbstractList:m,Title:D,PbMsgKey:M,JsonMsgKey:T}=g||{},P=u.map(W=>dr(W));return new al({messageList:P,title:D,abstractList:m,compatibleText:E,pbDownloadKey:M,downloadKey:T})}constructor(n){this.type=Us.core.constants.OuterConstant.MSG_MERGER;const{messageList:g,title:u,abstractList:E,compatibleText:m,pbDownloadKey:D="",downloadKey:M="",version:T=0,layersOverLimit:P=!1}=n,W=[];g.forEach(iA=>{if(iA){const EA=new mI(iA);W.push(EA)}}),this.content={messageList:W,title:u,abstractList:E,compatibleText:m,version:T,downloadKey:M,pbDownloadKey:D,layersOverLimit:P}}validateBeforeSend(){const{isEmpty:n}=Us.core.helper;return n(this.content.messageList)?{isValid:!1,error:{message:"content is invalid"}}:{isValid:!0}}transformToServerFormat(n){const{isMergerMessage:g=!1}=n||{},u=g?this.payload:this.content,{abstractList:E,compatibleText:m,downloadKey:D,layersOverLimit:M,pbDownloadKey:T,title:P,version:W,messageList:iA}=u;return{MsgType:this.type,MsgContent:{AbstractList:E,CompatibleText:m,JsonMsgKey:D,LayersOverLimit:M,PbMsgKey:T,Title:P,Version:W,MsgList:Ac(iA)}}}}var mC=new class{init(s){this._core=s;const{message:n,helper:g,constants:{OuterConstant:u}}=s;n.messageFactory.registerElementClass(u.MSG_MERGER,al),g.registerApi({apiName:"createMergerMessage",context:this}),g.registerApi({apiName:"sendMessage",context:this,matcher:E=>E[0].type===u.MSG_MERGER}),g.registerApi({apiName:"downloadMergerMessage",context:this})}createMergerMessage(s){const{common:n}=this._core;if(!s)return null;const g=new al(s.payload),u=n.getCurrentUserID(),E=this._core.message.messageFactory.createMessage(Object.assign(Object.assign({},s),{from:u}));return E.setRelayFlag(!0),E.setElement(g),E}sendMessage(s,n){return pA(this,void 0,void 0,function*(){var g,u,E;try{const m=function(P){let W="utf-8";Us.core.helper.IN_BROWSER&&document&&(W=document.charset.toLowerCase());let iA,EA=0,RA=0;if(RA=P.length,W==="utf-8"||W==="utf8")for(let kA=0;kA11264){D=this._core.utils.deepCopyWithMethods(s);try{const{JsonMsgKey:P,PbMsgKey:W}=yield function(EA){return pA(this,void 0,void 0,function*(){const{payload:{messageList:RA}}=EA,kA={MsgList:Ac(RA)};return Us.core.common.buildAndSendPacket({servcmd:"im_long_msg.save_relay_json_msg",data:kA})})}(D),{payload:iA}=D;M=new al(Object.assign(Object.assign({},iA),{messageList:[],downloadKey:P,pbDownloadKey:W})),D.setElement(M)}catch(P){console.error(P)}}const{data:{message:T}}=yield(E=(u=(g=this._core)===null||g===void 0?void 0:g.message)===null||u===void 0?void 0:u.messageSender)===null||E===void 0?void 0:E.sendMessage(D,n);return M&&T.setElement(s._elements),{code:0,data:{message:T}}}catch(m){const{errorCode:D}=m;throw new this._core.helper.ChatError({code:D})}})}downloadMergerMessage(s){return pA(this,void 0,void 0,function*(){const{ssoLog:n}=this._core,g=s.payload,{downloadKey:u,pbDownload:E,type:m,messageList:D}=g,M=Do(g,["downloadKey","pbDownload","type","messageList"]);try{const T=yield function(iA){return pA(this,void 0,void 0,function*(){return Us.core.common.buildAndSendPacket({servcmd:"im_long_msg.get_relay_json_msg",data:{JsonMsgKey:iA}})})}(u),{MsgList:P}=T||{},W=P?.map(iA=>{const EA=dr(iA);return new mI(EA)});return typeof s.isOnlineMessage=="function"?s.setElement({type:s.type,content:Object.assign({messageList:W},M)}):(s.payload.messageList=W,s.payload.downloadKey="",s.payload.pbDownloadKey=""),n.info("downloadMergerMessage",` success downloadKey:${u}`),s}catch(T){const{errorCode:P}=T;throw new this._core.helper.ChatError({functionName:"downloadMergerMessage",code:P,moreMessage:u})}})}},aa=new class{init(s){this._core=s,this._core.helper.registerExperimentalAPI("sendComboMessage",this)}sendComboMessage(s){return pA(this,void 0,void 0,function*(){const{appStore:n,message:g,common:{getCurrentUserID:u},utils:{isArray:E}}=this._core,{GroupId:m,To_Account:D}=s;s.From_Account=s.From_Account||u();let M=null;if(m){M=this._generateGroupMessage(Object.assign(Object.assign({},s),{ToGroupId:m}));const T=n.userStore.getUserProfile(u());M.level=T?.level||0,E(D)&&D.length>0&&(M._receiverList=D)}else D&&(M=this._generateC2CMessage(s));return g.messageSender.sendMessage(M,s)})}_generateC2CMessage(s){const{message:n,OuterConstant:{CONV_C2C:g}}=this._core,u=g,E=n.messageHelper.parseServerPushMessage(s),m=n.messageFactory.createMessage(Object.assign(Object.assign({},E),{conversationType:u,flow:ec.OUT})),{elements:D}=E;return m.setElement(D),m}_generateGroupMessage(s){const{message:n,OuterConstant:{CONV_GROUP:g}}=this._core,u=g,E=n.messageHelper.parseServerGroupMessage(s),m=n.messageFactory.createMessage(Object.assign(Object.assign({},E),{conversationType:u,flow:ec.OUT})),{elements:D}=E;return m.setElement(D),m}},tc=new class{init(s){this._core=s;const{helper:n,notificationCenter:g,InnerEvent:{MESSAGE_PUSH:u},InnerEventSubType:{GROUP_MESSAGE_PINNED:E}}=s;g.subscribeInnerEvent(u,E,this._handleGroupMessagePinned,this),n.registerApi({apiName:"pinGroupMessage",context:this}),n.registerApi({apiName:"getPinnedGroupMessageList",context:this})}pinGroupMessage(s){return pA(this,void 0,void 0,function*(){const{ssoLog:n,common:{isTopic:g},OuterConstant:{GROUP_ID_PREFIX:u},helper:{ChatError:E}}=this._core;let{groupID:m,message:D,isPinned:M}=s;const{sequence:T}=D;try{return yield function(P){return pA(this,void 0,void 0,function*(){const{common:{buildAndSendPacket:W,getCurrentUserID:iA}}=Us.core,{groupID:EA,sequence:RA,isPinned:kA}=P,xA=iA(),LA=kA?"group_open_http_svc.pin_message":"group_open_http_svc.unpin_message",SA={GroupId:EA,MsgSeq:RA};return kA?SA.Pinner_Account=xA:SA.UnPinner_Account=xA,W({servcmd:LA,data:SA})})}({groupID:m,sequence:T,isPinned:M}),{code:0,data:{}}}catch(P){const{errorCode:W,errorInfo:iA}=P||{};throw new E({code:W,message:iA})}})}getPinnedGroupMessageList(s){return pA(this,void 0,void 0,function*(){let n=[];try{const g=yield function(u){return pA(this,void 0,void 0,function*(){const{groupID:E}=u,{common:{buildAndSendPacket:m}}=Us.core;return m({servcmd:"group_open_http_svc.get_pinned_messages",data:{GroupId:E}})})}({groupID:s});if(g){const{PinnedMsgList:u=[]}=g;n=yield this._updatePinnedMessageInfo({serverPinnedMessageList:u,groupID:s})}return{code:0,data:{messageList:n}}}catch(g){throw g}})}_handleGroupMessagePinned(s){const{message:{messageHelper:n,messageFactory:g},notificationCenter:u,OuterEvent:E,OuterConstant:m}=this._core;s.GroupTips.forEach(D=>{const{ToGroupId:M,MsgBody:{PinnedMsg:T,OpType:P,MsgOperatorMemberExtraInfo:W,SdkGroupMessageId:iA}}=D,{UserId:EA,NickName:RA="",ImageUrl:kA=""}=W;let xA=null,LA=!1;if(P===md){LA=!0;const SA=n.parseServerGroupMessage(T);xA=g.createMessage(Object.assign(Object.assign({},SA),{conversationType:m.CONV_GROUP,flow:"in"})),xA.setElement(SA.elements),xA.pinnerInfo={userID:EA,nick:RA,avatar:kA}}else if(P===LE){const{ClientTime:SA,Random:OA,SenderTinyId:JA,ServerTime:ae,MsgSeq:se}=iA;xA={ID:`${JA}-${SA}-${OA}`,sequence:se,random:OA,time:ae,clientTime:SA}}xA&&u.emitOuterEvent(E.PINNED_GROUP_MESSAGE_UPDATED,{name:E.PINNED_GROUP_MESSAGE_UPDATED,data:{groupID:M,message:xA,isPinned:LA,operatorInfo:{userID:EA,nick:RA,avatar:kA}}})})}_findMessageBySequence(s,n){const{message:{messageDataHandler:g}}=this._core;return[...g.getLocalMessageList(s),...g.getSparseMessageList(s)].find(u=>u.sequence===n)}_updatePinnedMessageInfo(s){return pA(this,arguments,void 0,function*({serverPinnedMessageList:n,groupID:g}){const{OuterConstant:{CONV_GROUP:u},utils:{isEmpty:E}}=this._core,m=[],D=[],M=[],T=new Map,P=`${u}${g}`;for(let iA=0;iA{const{sequence:kA}=RA,xA=T.get(kA),LA=iA[xA]||{userID:xA,nick:"",avatar:""};RA.pinnerInfo=LA}),m.sort((RA,kA)=>RA.sequence-kA.sequence),m}return[]})}_fetchPinnedMessageInfo(s){return pA(this,void 0,void 0,function*(){var n,g;const{message:{messageHistory:u},user:{userProfile:E},utils:{isArray:m}}=this._core,{conversationID:D,messageSequenceList:M,pinnerIDList:T}=s,P=yield Promise.all([this._fetchMessageBySequence({conversationID:D,messageSequenceList:M}),E?.getUserProfile({userIDList:T})]);if(m(P)){const W={};return(((n=P[1])===null||n===void 0?void 0:n.data)||[]).forEach(iA=>{const{userID:EA,nick:RA="",avatar:kA=""}=iA;W[EA]={userID:EA,nick:RA,avatar:kA}}),{messageList:((g=P[0])===null||g===void 0?void 0:g.messageList)||[],pinnerInfoMap:W}}})}_fetchMessageBySequence(s){return pA(this,void 0,void 0,function*(){const{utils:{isEmpty:n},message:{messageHistory:g}}=this._core,{conversationID:u,messageSequenceList:E}=s;return n(E)?[]:g.getGroupRoamingMessagesByAnchor({conversationID:u,messageSequenceList:E,getType:3})})}};class lg{constructor(n){this.eventType=Nc.DATA,this.index=0,this.markdown="",this.isLast=!1,this.binaryData=null;const{EventType:g,Index:u,Markdown:E,IsLast:m,BinaryData:D}=n;this.eventType=g,this.index=u,this.markdown=E,this.isLast=m,this.binaryData=D}}var fI=new class{constructor(){this._messageMap=new Map,this._retryCountMap=new Map}init(s){this._core=s;const{notificationCenter:n,OuterEvent:{MESSAGE_RECEIVED:g},InnerEvent:{HISTORY_MESSAGE_FETCHED:u},common:{workflowManager:E},constants:{WORKFLOW_NAME:m,WORKFLOW_STEP:D}}=s;n.subscribeInnerEvent(lo,this._handleStreamMessageChunkPush,this),n.subscribeOuterEvent(g,this._handleMessageReceived,this),n.subscribeInnerEvent(u,this.processHistoryMessage,this),E.registerWorkflowStep(m.SYNC_SERVER_INFO_AFTER_RE_ONLINE,D.STREAM_MESSAGE_RECOVER,this._recoverStreamMessage,this)}processHistoryMessage(s){const{utils:{isEmpty:n,safeStringify:g},ssoLog:u}=this._core;try{s?.forEach(E=>{var m;if(this._isValidStreamMessage(E)){const D=(m=E?._elements)===null||m===void 0?void 0:m[0],{streamMessageID:M,markdown:T,binaryData:P}=D?.content||{};n(T)&&n(P)?(this._messageMap.set(M,E),this._fetchStreamMessageChunks(E)):D.content.isStreamEnded=!0}})}catch(E){u.error("processHistoryMessage.error",g(E))}}_handleMessageReceived(s){const n=s.data;n?.forEach(g=>{var u,E;if(this._isValidStreamMessage(g)){const{streamMessageID:m}=((E=(u=g?._elements)===null||u===void 0?void 0:u[0])===null||E===void 0?void 0:E.content)||{};m&&(this._messageMap.set(m,g),this._fetchStreamMessageChunks(g))}})}_isValidStreamMessage(s){var n,g;const{utils:{isEmpty:u}}=this._core,{streamMessageID:E}=((g=(n=s?._elements)===null||n===void 0?void 0:n[0])===null||g===void 0?void 0:g.content)||{};return s.type===Vr.MSG_STREAM&&!u(E)}_fetchStreamMessageChunks(s){return pA(this,void 0,void 0,function*(){var n,g;const{constants:{ERROR_CODE:u},ssoLog:E,utils:{safeStringify:m}}=this._core,D=(n=s._elements)===null||n===void 0?void 0:n[0],M=(g=D?.content)===null||g===void 0?void 0:g.streamMessageID;try{const{from:T,to:P}=s,W=D.getLatestIndex();if(D.content.isStreamEnded)return;const iA=yield function(EA){return pA(this,void 0,void 0,function*(){const{from:RA,to:kA,streamMessageID:xA,index:LA}=EA,SA={From_Account:RA,To_Account:kA,StreamMsgID:xA,AckIndex:LA};return Us.core.common.buildAndSendPacket({servcmd:"StreamMsg.GetStreamHttp",data:SA,timeout:5e3})})}({from:T,to:P,streamMessageID:M,index:W});if(iA){const{ErrorCode:EA,ErrorInfo:RA}=iA;if(EA!==0)throw D.content.errorCode=EA,D.content.errorMessage=RA,{errorCode:EA,errorMessage:RA}}}catch(T){if(T.errorCode===u.NETWORK_TIMEOUT&&this._shouldRetryFetch(M)){const P=this._retryCountMap.get(M)||0;E.debug("_fetchStreamMessageChunks.timeout",`error: ${m(T)} retried: ${P}`),this._retryCountMap.set(M,P+1),this._fetchStreamMessageChunks(s)}else E.error("_fetchStreamMessageChunks.error",m(T))}})}_shouldRetryFetch(s){const{utils:{isNumber:n}}=this._core;if(!this._retryCountMap.has(s))return this._retryCountMap.set(s,1),!0;const g=this._retryCountMap.get(s);return!!(n(g)&&g<=3)}_onStreamEnded(s,n,g){const{ssoLog:u}=this._core;g.content.isStreamEnded=!0,g.stopReason=n,this._messageMap.delete(s),u.debug("_onStreamEnded",`streamMessage end, StopReason: ${n}`)}_handleStreamMessageChunkPush(s){var n;const{ssoLog:g}=this._core,{StopReason:u,Chunks:E,StreamID:m}=s?.body||{},D=this._messageMap.get(m);if(!D)return void g.warn(`_handleStreamMessageChunkPush, unfounded message: ${m}`);const M=(n=D._elements)===null||n===void 0?void 0:n[0];if(M&&this._validateExpectedChunk(M,E)){if(E.length>0){const T=E.map(P=>new lg(P));M.updateChunks(T)}this._emitMessageModify(D),function(T,P){pA(this,void 0,void 0,function*(){const{common:{generateProtocolData:W},utils:{safeStringify:iA},ssoLog:EA,channel:RA}=Us.core,kA={StreamMsgID:T,AckIndex:P};try{const xA=W({servcmd:"StreamMsg.AckHttp",data:kA});RA.sendPacket(xA)}catch(xA){EA.debug("sendStreamChunkAck",iA(xA))}})}(m,M.getLatestIndex()),M.content.isStreamEnded&&this._onStreamEnded(m,u,M)}}_emitMessageModify(s){const{notificationCenter:n,OuterEvent:{MESSAGE_MODIFIED:g}}=this._core;n.emitOuterEvent(g,{name:g,data:[s]})}_validateExpectedChunk(s,n){const g=s.getLatestIndex()+1;let u=!1;for(let E=0;Em.Index).join(", ")}]`),!1}return!0}_recoverStreamMessage(){this._retryCountMap.clear();const{ssoLog:s,utils:{safeStringify:n}}=this._core;try{const g=Array.from(this._messageMap.entries());for(let u=Math.max(0,g.length-300);u{const LA=this._getResponseBody(kA,E,iA&&EA),SA=this._buildResponse(kA,LA);if(kA.status===200)n(null,SA);else{if(EA&&!RA.includes(EA))return s.url=this._domainName2IP(RA,EA),s.uploadByIP=!0,this.request(s,n);n({code:kA.status,message:JSON.stringify(kA.responseText)},SA)}},kA.onerror=()=>{const LA=this._getResponseBody(kA,E,iA&&EA),SA=this._buildResponse(kA,LA),OA={code:kA.status,message:kA.status===0?"CORS blocked or network error":JSON.stringify(kA.responseText)};n(OA,SA)},s.onProgress&&kA.upload&&(kA.upload.onprogress=LA=>{const{total:SA,loaded:OA}=LA,JA=Math.min(Math.floor(100*OA/SA),100);s.onProgress({total:SA,loaded:OA,percent:JA/100})}),kA.send(P),kA})}_buildResponse(s,n){const g={};return s.getAllResponseHeaders().trim().split(` -`).forEach(u=>{if(u){const[E,m]=u.split(":").map(D=>D.trim());g[E.toLowerCase()]=m}}),{statusCode:s.status,statusMessage:s.statusText,headers:g,data:n}}_getResponseBody(s,n,g){return s.status===200&&n?{location:n,uploadIP:g}:{response:s.responseText,uploadIP:g}}_queryString(s,n="&",g="="){var u;const{isEmpty:E,isPlainObject:m}=(u=this._core)===null||u===void 0?void 0:u.utils;return E(s)?"":m(s)?Object.keys(s).map(D=>{const M=encodeURIComponent(D)+g;return Array.isArray(s[D])?s[D].map(T=>M+encodeURIComponent(T)).join(n):M+encodeURIComponent(s[D])}).filter(Boolean).join(n):void 0}_domainName2IP(s,n){return s.replace(/^http(s)?:\/\/(.*?)\//,`https://${n}/`)}};const Ju=["unknown","image","video","audio","log"];var yI=new class{init(s){this._core=s}request(s,n){var g;const{MINI_APP_NAMESPACE:u,IN_ALIPAY_MINI_APP:E,isUniIOSApp:m}=(g=this._core)===null||g===void 0?void 0:g.utils,{resources:D="",headers:M={},url:T,downloadUrl:P=""}=s;let W=T,iA=null;const EA=P?P.match(/^(https?:\/\/[^/]+\/)([^/]*\/?)(.*)$/):null;if(!EA)return void console.warn("message Invalid download URL format");const RA=decodeURIComponent(EA[3]),kA=RA.includes("?")?RA.split("?")[0]:RA||"",xA={key:s.fileKey||kA,success_action_status:200,"Content-Type":""},LA={};if(m()){const[OA,JA]=T.split("?sign=");JA&&(W=`${OA}?sign=${encodeURIComponent(JA)}`,LA.sign=decodeURIComponent(JA),LA.signature=decodeURIComponent(JA))}let SA={url:W,header:M,name:"file",filePath:D,formData:Object.assign(Object.assign({},xA),LA),timeout:s.timeout||3e5};if(E){const{name:OA}=SA,JA=Do(SA,["name"]);SA=Object.assign(Object.assign({},JA),{fileName:"file",fileType:s.fileType?Ju[s.fileType]:"image"})}return iA=u.uploadFile(Object.assign(Object.assign({},SA),{success:OA=>{this._handleResponse({response:OA,downloadUrl:P,callback:n})},fail:OA=>{this._handleResponse({response:OA,downloadUrl:P,callback:n})}})),iA.onProgressUpdate&&iA.onProgressUpdate(OA=>{s.onProgress&&s.onProgress({total:OA.totalBytesExpectedToSend||0,loaded:OA.totalBytesSent||0,percent:OA.progress?Math.floor(OA.progress)/100:0})}),iA}_handleResponse(s){const{downloadUrl:n,response:g,callback:u}=s,E={};if(g.header)for(const D in g.header)g.header.hasOwnProperty(D)&&(E[D.toLowerCase()]=g.header[D]);const m=+g.statusCode;m===200?u(null,{statusCode:m,headers:E,data:Object.assign(Object.assign({},g.data),{location:n})}):u({code:m,message:JSON.stringify(g.data)},{statusCode:m,headers:E,data:void 0})}};function gl(s){return function(n){return Object.prototype.toString.call(n).match(/^\[object (.*)\]$/)[1].toLowerCase()}(s)==="file"}function Lr(s){const n=s||99999999;return Math.round(Math.random()*n)}function Ur(s,n=!0,g=!0){const u=Date.now();return n?g?u-s+" ms":`${Math.round((u-s)/1e3)} s`:g?u-s:Math.round((u-s)/1e3)}function Ig(s){return`${Array.from({length:8},()=>Math.floor(65536*(1+Math.random())).toString(16).substring(1)).join("")}-${s}`}function ar(s,n){return Math.round(Number(s)*10**n)/10**n}function _r(s){return s<=1048576?`${ar(s/1024,1)}KB/s`:`${ar(s/1048576,1)}MB/s`}const ic="TIMImageElem",Fg="TIMSoundElem",Ya="TIMFileElem",Fl="TIMVideoFileElem",ha="RichMediaMessagePlugin",DI=["rich.my-imcloud.com","imrich.qcloud.com"],iu=1,Ba=2,cl=3,xE=255;var ou;(function(s){s.UNSENT="unSend",s.SUCCESS="success",s.FAIL="fail"})(ou||(ou={}));const YE={wechat:/^(wxfile:\/\/tmp_|http:\/\/temp\/|cloud:\/\/temp-)/,alipay:/^(https:\/\/resource\/|alipayfile:\/\/tmp\/)/,baidu:/^(http:\/\/tmp\/|swanfile:\/\/tmp_)/,bytedance:/^(ttfile:\/\/tmp_|\/(var|tmp)\/|tttemp:\/\/)/,qq:/^(qqfile:\/\/tmp_|http:\/\/qtemp\/)/},Jr=Symbol("isCustomUpload");var su,Pt=new class{init(s){this._core=s}addAuthToUrl(s=""){if(this._isMiniProgramTempFile(s))return s;const n=function(g){return g?g.startsWith("https://")?g:g.startsWith("http://")?g.replace("http://","https://"):g:""}(s);return this.processResourceUrl(n)}removeAuthToUrl(s){return function(n,g){const[u,E]=n.split("?");if(!E)return u;const m=E.split("&").reduce((M,T)=>{const[P,W]=T.split("=");return P&&P!==g&&(M[P]=W||""),M},{}),D=Object.keys(m).map(M=>`${M}${m[M]?`=${m[M]}`:""}`).join("&");return D?`${u}?${D}`:u}(s,"authKey")}_isMiniProgramTempFile(s){return!!this.getPlatformFlags().IN_MINI_APP&&Object.values(YE).some(n=>n.test(s))}extractFileFromInput(s){const{utils:{isArray:n}}=this._core;return gl(s)?s:function(g){if(typeof g!="object"||g===null)return!1;const u=Object.getPrototypeOf(g);if(u===null)return!0;let E=u;for(;Object.getPrototypeOf(E)!==null;)E=Object.getPrototypeOf(E);return u===E}(s)&&typeof uni<"u"?n(s.tempFiles)&&s.tempFiles.length>0?s.tempFiles[0]:n(s.files)?s.files[0]:s.tempFile?s.tempFile:null:s instanceof HTMLInputElement&&s.files&&s.files.length>0?s.files[0]:null}probeImageWidthHeight(s){return pA(this,void 0,void 0,function*(){var n;const{IN_MINI_APP:g,IN_BROWSER:u}=((n=this._core)===null||n===void 0?void 0:n.utils)||{};return this._shouldSkipProbing()?{width:0,height:0}:u?this._probeImageDimensionsWeb(s):g?this._probeImageDimensionsMiniApp(s):void 0})}isSimpleCos(){var s;const n=((s=this._core)===null||s===void 0?void 0:s.store.get("cloudConfig"))||{},{simple_cos:g}=n;return g!=="0"}getFileDNList(){var s;let n=DI;const g=((s=this._core)===null||s===void 0?void 0:s.store.get("cloudConfig"))||{},{file_dn_list:u}=g;if(u===void 0)return n;try{JSON.parse(u).forEach(E=>{n.includes(E)||n.push(E)})}catch(E){console.warn(E),n=DI}return n}getPlatform(){var s;return(s=this._core)===null||s===void 0?void 0:s.utils.platform}generateUUID(s,n){var g;let u=`${this.getSDKAppID()}-${this.getCurrentUserID()}-${(g=this._core)===null||g===void 0?void 0:g.utils.randomString()}`;if(n)return`${u}.${n}`;const E=s.name||s.value||s.url||s.tempFilePath,m=E&&E.slice(E.lastIndexOf(".")+1);return m&&(u=`${u}.${m}`),u}processResourceUrl(s){if(!s)return"";let n=s;const g=this.getFileDownloadProxy(),u=this.getAuthKey(),E=this.getFileDNList();return g&&(s.startsWith("http://")?n=s.replace(/^http:\/\/[^/]+/,g):s.startsWith("https://")&&(n=s.replace(/^https:\/\/[^/]+/,g))),u&&n.indexOf("authKey=")===-1&&function(D,M){let T=!1;if(D){const P=D.match(/:\/\/([0-9]?\.)?(.[^/:]+)/),W=P&&P[2]||"";if(W.includes("rich-dev"))return!0;for(let iA=0;iA-1?`${n}&authKey=${u}`:`${n}?authKey=${u}`),n}getCurrentUserID(){var s,n;return(n=(s=this._core)===null||s===void 0?void 0:s.store.get("login"))===null||n===void 0?void 0:n.userId}getSDKAppID(){var s,n;return(n=(s=this._core)===null||s===void 0?void 0:s.store.get("instance"))===null||n===void 0?void 0:n.sdkAppId}getFileDownloadProxy(){var s,n;return((n=(s=this._core)===null||s===void 0?void 0:s.store.get("instance"))===null||n===void 0?void 0:n.fileDownloadProxy)||""}getFileUploadProxy(){var s,n;return((n=(s=this._core)===null||s===void 0?void 0:s.store.get("instance"))===null||n===void 0?void 0:n.fileUploadProxy)||""}getAuthKey(){var s,n;return((n=(s=this._core)===null||s===void 0?void 0:s.store.get("login"))===null||n===void 0?void 0:n.authKey)||""}isPrivateNetWork(){var s,n;return(n=(s=this._core)===null||s===void 0?void 0:s.store.get("instance"))===null||n===void 0?void 0:n.proxyServer}getPlatformFlags(){var s;const{IN_BROWSER:n,IN_MINI_APP:g,IN_RN_APP:u,IN_UNI_NATIVE_APP:E}=(s=this._core)===null||s===void 0?void 0:s.utils;return{IN_BROWSER:n,IN_MINI_APP:g,IN_RN_APP:u,IN_UNI_NATIVE_APP:E}}isEmpty(s){var n;const{isEmpty:g}=(n=this._core)===null||n===void 0?void 0:n.utils;return g(s)}generateURL(s,n){const{needAddAuthToUrl:g=!0}=n||{};return g?this.addAuthToUrl(s):s}_probeImageDimensionsMiniApp(s){var n;const{MINI_APP_NAMESPACE:g}=((n=this._core)===null||n===void 0?void 0:n.utils)||{};return new Promise(u=>{g.getImageInfo({src:s,success:E=>u({width:E.width,height:E.height}),fail:()=>u({width:0,height:0})})})}_shouldSkipProbing(){var s;const{IN_RN_APP:n,IS_IE:g,IE_VERSION:u,IN_WX_MINI_GAME:E}=((s=this._core)===null||s===void 0?void 0:s.utils)||{};return n||g&&u===9||E}_probeImageDimensionsWeb(s){return new Promise(n=>{const g=new Image,u=()=>{g.onload=null,g.onerror=null,g.src=""};g.onload=()=>{n({width:g.width,height:g.height}),u()},g.onerror=()=>{n({width:0,height:0}),u()},g.src=s})}},Hu={exports:{}},qu=(su||(su=1,function(s){s.exports=function(n){var g=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];function u(LA,SA){var OA=LA[0],JA=LA[1],ae=LA[2],se=LA[3];JA=((JA+=((ae=((ae+=((se=((se+=((OA=((OA+=(JA&ae|~JA&se)+SA[0]-680876936|0)<<7|OA>>>25)+JA|0)&JA|~OA&ae)+SA[1]-389564586|0)<<12|se>>>20)+OA|0)&OA|~se&JA)+SA[2]+606105819|0)<<17|ae>>>15)+se|0)&se|~ae&OA)+SA[3]-1044525330|0)<<22|JA>>>10)+ae|0,JA=((JA+=((ae=((ae+=((se=((se+=((OA=((OA+=(JA&ae|~JA&se)+SA[4]-176418897|0)<<7|OA>>>25)+JA|0)&JA|~OA&ae)+SA[5]+1200080426|0)<<12|se>>>20)+OA|0)&OA|~se&JA)+SA[6]-1473231341|0)<<17|ae>>>15)+se|0)&se|~ae&OA)+SA[7]-45705983|0)<<22|JA>>>10)+ae|0,JA=((JA+=((ae=((ae+=((se=((se+=((OA=((OA+=(JA&ae|~JA&se)+SA[8]+1770035416|0)<<7|OA>>>25)+JA|0)&JA|~OA&ae)+SA[9]-1958414417|0)<<12|se>>>20)+OA|0)&OA|~se&JA)+SA[10]-42063|0)<<17|ae>>>15)+se|0)&se|~ae&OA)+SA[11]-1990404162|0)<<22|JA>>>10)+ae|0,JA=((JA+=((ae=((ae+=((se=((se+=((OA=((OA+=(JA&ae|~JA&se)+SA[12]+1804603682|0)<<7|OA>>>25)+JA|0)&JA|~OA&ae)+SA[13]-40341101|0)<<12|se>>>20)+OA|0)&OA|~se&JA)+SA[14]-1502002290|0)<<17|ae>>>15)+se|0)&se|~ae&OA)+SA[15]+1236535329|0)<<22|JA>>>10)+ae|0,JA=((JA+=((ae=((ae+=((se=((se+=((OA=((OA+=(JA&se|ae&~se)+SA[1]-165796510|0)<<5|OA>>>27)+JA|0)&ae|JA&~ae)+SA[6]-1069501632|0)<<9|se>>>23)+OA|0)&JA|OA&~JA)+SA[11]+643717713|0)<<14|ae>>>18)+se|0)&OA|se&~OA)+SA[0]-373897302|0)<<20|JA>>>12)+ae|0,JA=((JA+=((ae=((ae+=((se=((se+=((OA=((OA+=(JA&se|ae&~se)+SA[5]-701558691|0)<<5|OA>>>27)+JA|0)&ae|JA&~ae)+SA[10]+38016083|0)<<9|se>>>23)+OA|0)&JA|OA&~JA)+SA[15]-660478335|0)<<14|ae>>>18)+se|0)&OA|se&~OA)+SA[4]-405537848|0)<<20|JA>>>12)+ae|0,JA=((JA+=((ae=((ae+=((se=((se+=((OA=((OA+=(JA&se|ae&~se)+SA[9]+568446438|0)<<5|OA>>>27)+JA|0)&ae|JA&~ae)+SA[14]-1019803690|0)<<9|se>>>23)+OA|0)&JA|OA&~JA)+SA[3]-187363961|0)<<14|ae>>>18)+se|0)&OA|se&~OA)+SA[8]+1163531501|0)<<20|JA>>>12)+ae|0,JA=((JA+=((ae=((ae+=((se=((se+=((OA=((OA+=(JA&se|ae&~se)+SA[13]-1444681467|0)<<5|OA>>>27)+JA|0)&ae|JA&~ae)+SA[2]-51403784|0)<<9|se>>>23)+OA|0)&JA|OA&~JA)+SA[7]+1735328473|0)<<14|ae>>>18)+se|0)&OA|se&~OA)+SA[12]-1926607734|0)<<20|JA>>>12)+ae|0,JA=((JA+=((ae=((ae+=((se=((se+=((OA=((OA+=(JA^ae^se)+SA[5]-378558|0)<<4|OA>>>28)+JA|0)^JA^ae)+SA[8]-2022574463|0)<<11|se>>>21)+OA|0)^OA^JA)+SA[11]+1839030562|0)<<16|ae>>>16)+se|0)^se^OA)+SA[14]-35309556|0)<<23|JA>>>9)+ae|0,JA=((JA+=((ae=((ae+=((se=((se+=((OA=((OA+=(JA^ae^se)+SA[1]-1530992060|0)<<4|OA>>>28)+JA|0)^JA^ae)+SA[4]+1272893353|0)<<11|se>>>21)+OA|0)^OA^JA)+SA[7]-155497632|0)<<16|ae>>>16)+se|0)^se^OA)+SA[10]-1094730640|0)<<23|JA>>>9)+ae|0,JA=((JA+=((ae=((ae+=((se=((se+=((OA=((OA+=(JA^ae^se)+SA[13]+681279174|0)<<4|OA>>>28)+JA|0)^JA^ae)+SA[0]-358537222|0)<<11|se>>>21)+OA|0)^OA^JA)+SA[3]-722521979|0)<<16|ae>>>16)+se|0)^se^OA)+SA[6]+76029189|0)<<23|JA>>>9)+ae|0,JA=((JA+=((ae=((ae+=((se=((se+=((OA=((OA+=(JA^ae^se)+SA[9]-640364487|0)<<4|OA>>>28)+JA|0)^JA^ae)+SA[12]-421815835|0)<<11|se>>>21)+OA|0)^OA^JA)+SA[15]+530742520|0)<<16|ae>>>16)+se|0)^se^OA)+SA[2]-995338651|0)<<23|JA>>>9)+ae|0,JA=((JA+=((se=((se+=(JA^((OA=((OA+=(ae^(JA|~se))+SA[0]-198630844|0)<<6|OA>>>26)+JA|0)|~ae))+SA[7]+1126891415|0)<<10|se>>>22)+OA|0)^((ae=((ae+=(OA^(se|~JA))+SA[14]-1416354905|0)<<15|ae>>>17)+se|0)|~OA))+SA[5]-57434055|0)<<21|JA>>>11)+ae|0,JA=((JA+=((se=((se+=(JA^((OA=((OA+=(ae^(JA|~se))+SA[12]+1700485571|0)<<6|OA>>>26)+JA|0)|~ae))+SA[3]-1894986606|0)<<10|se>>>22)+OA|0)^((ae=((ae+=(OA^(se|~JA))+SA[10]-1051523|0)<<15|ae>>>17)+se|0)|~OA))+SA[1]-2054922799|0)<<21|JA>>>11)+ae|0,JA=((JA+=((se=((se+=(JA^((OA=((OA+=(ae^(JA|~se))+SA[8]+1873313359|0)<<6|OA>>>26)+JA|0)|~ae))+SA[15]-30611744|0)<<10|se>>>22)+OA|0)^((ae=((ae+=(OA^(se|~JA))+SA[6]-1560198380|0)<<15|ae>>>17)+se|0)|~OA))+SA[13]+1309151649|0)<<21|JA>>>11)+ae|0,JA=((JA+=((se=((se+=(JA^((OA=((OA+=(ae^(JA|~se))+SA[4]-145523070|0)<<6|OA>>>26)+JA|0)|~ae))+SA[11]-1120210379|0)<<10|se>>>22)+OA|0)^((ae=((ae+=(OA^(se|~JA))+SA[2]+718787259|0)<<15|ae>>>17)+se|0)|~OA))+SA[9]-343485551|0)<<21|JA>>>11)+ae|0,LA[0]=OA+LA[0]|0,LA[1]=JA+LA[1]|0,LA[2]=ae+LA[2]|0,LA[3]=se+LA[3]|0}function E(LA){var SA,OA=[];for(SA=0;SA<64;SA+=4)OA[SA>>2]=LA.charCodeAt(SA)+(LA.charCodeAt(SA+1)<<8)+(LA.charCodeAt(SA+2)<<16)+(LA.charCodeAt(SA+3)<<24);return OA}function m(LA){var SA,OA=[];for(SA=0;SA<64;SA+=4)OA[SA>>2]=LA[SA]+(LA[SA+1]<<8)+(LA[SA+2]<<16)+(LA[SA+3]<<24);return OA}function D(LA){var SA,OA,JA,ae,se,_i,Ti=LA.length,Ft=[1732584193,-271733879,-1732584194,271733878];for(SA=64;SA<=Ti;SA+=64)u(Ft,E(LA.substring(SA-64,SA)));for(OA=(LA=LA.substring(SA-64)).length,JA=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],SA=0;SA>2]|=LA.charCodeAt(SA)<<(SA%4<<3);if(JA[SA>>2]|=128<<(SA%4<<3),SA>55)for(u(Ft,JA),SA=0;SA<16;SA+=1)JA[SA]=0;return ae=(ae=8*Ti).toString(16).match(/(.*?)(.{0,8})$/),se=parseInt(ae[2],16),_i=parseInt(ae[1],16)||0,JA[14]=se,JA[15]=_i,u(Ft,JA),Ft}function M(LA){var SA,OA,JA,ae,se,_i,Ti=LA.length,Ft=[1732584193,-271733879,-1732584194,271733878];for(SA=64;SA<=Ti;SA+=64)u(Ft,m(LA.subarray(SA-64,SA)));for(OA=(LA=SA-64>2]|=LA[SA]<<(SA%4<<3);if(JA[SA>>2]|=128<<(SA%4<<3),SA>55)for(u(Ft,JA),SA=0;SA<16;SA+=1)JA[SA]=0;return ae=(ae=8*Ti).toString(16).match(/(.*?)(.{0,8})$/),se=parseInt(ae[2],16),_i=parseInt(ae[1],16)||0,JA[14]=se,JA[15]=_i,u(Ft,JA),Ft}function T(LA){var SA,OA="";for(SA=0;SA<4;SA+=1)OA+=g[LA>>8*SA+4&15]+g[LA>>8*SA&15];return OA}function P(LA){var SA;for(SA=0;SA"u"||ArrayBuffer.prototype.slice||function(){function LA(SA,OA){return(SA=0|SA||0)<0?Math.max(SA+OA,0):Math.min(SA,OA)}ArrayBuffer.prototype.slice=function(SA,OA){var JA,ae,se,_i,Ti=this.byteLength,Ft=LA(SA,Ti),Ni=Ti;return OA!==n&&(Ni=LA(OA,Ti)),Ft>Ni?new ArrayBuffer(0):(JA=Ni-Ft,ae=new ArrayBuffer(JA),se=new Uint8Array(ae),_i=new Uint8Array(this,Ft,JA),se.set(_i),ae)}}(),xA.prototype.append=function(LA){return this.appendBinary(W(LA)),this},xA.prototype.appendBinary=function(LA){this._buff+=LA,this._length+=LA.length;var SA,OA=this._buff.length;for(SA=64;SA<=OA;SA+=64)u(this._hash,E(this._buff.substring(SA-64,SA)));return this._buff=this._buff.substring(SA-64),this},xA.prototype.end=function(LA){var SA,OA,JA=this._buff,ae=JA.length,se=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(SA=0;SA>2]|=JA.charCodeAt(SA)<<(SA%4<<3);return this._finish(se,ae),OA=P(this._hash),LA&&(OA=kA(OA)),this.reset(),OA},xA.prototype.reset=function(){return this._buff="",this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},xA.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash.slice()}},xA.prototype.setState=function(LA){return this._buff=LA.buff,this._length=LA.length,this._hash=LA.hash,this},xA.prototype.destroy=function(){delete this._hash,delete this._buff,delete this._length},xA.prototype._finish=function(LA,SA){var OA,JA,ae,se=SA;if(LA[se>>2]|=128<<(se%4<<3),se>55)for(u(this._hash,LA),se=0;se<16;se+=1)LA[se]=0;OA=(OA=8*this._length).toString(16).match(/(.*?)(.{0,8})$/),JA=parseInt(OA[2],16),ae=parseInt(OA[1],16)||0,LA[14]=JA,LA[15]=ae,u(this._hash,LA)},xA.hash=function(LA,SA){return xA.hashBinary(W(LA),SA)},xA.hashBinary=function(LA,SA){var OA=P(D(LA));return SA?kA(OA):OA},xA.ArrayBuffer=function(){this.reset()},xA.ArrayBuffer.prototype.append=function(LA){var SA,OA=RA(this._buff.buffer,LA),JA=OA.length;for(this._length+=LA.byteLength,SA=64;SA<=JA;SA+=64)u(this._hash,m(OA.subarray(SA-64,SA)));return this._buff=SA-64>2]|=JA[SA]<<(SA%4<<3);return this._finish(se,ae),OA=P(this._hash),LA&&(OA=kA(OA)),this.reset(),OA},xA.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},xA.ArrayBuffer.prototype.getState=function(){var LA=xA.prototype.getState.call(this);return LA.buff=EA(LA.buff),LA},xA.ArrayBuffer.prototype.setState=function(LA){return LA.buff=iA(LA.buff,!0),xA.prototype.setState.call(this,LA)},xA.ArrayBuffer.prototype.destroy=xA.prototype.destroy,xA.ArrayBuffer.prototype._finish=xA.prototype._finish,xA.ArrayBuffer.hash=function(LA,SA){var OA=P(M(new Uint8Array(LA)));return SA?kA(OA):OA},xA}()}(Hu)),Hu.exports),fC=aI(qu),q=new class{constructor(){this.uploadFileTryCount=0,this.maxRetries=1,this.systemClockOffset=0,this.httpRequest=null,this.uploadFileType="",this.duration=900,this.fetchCosTryCount=0}init(s){var n;this._core=s;const{IN_MINI_APP:g}=s.utils;this.httpRequest=g?yI:Vu,(n=this.httpRequest)===null||n===void 0||n.init(s)}uploadToCOS(s){return pA(this,void 0,void 0,function*(){const n=`${ha} uploadToCOS`,{ssoLog:g,utils:{safeStringify:u}}=this._core,{file:E}=s;this.uploadFileType=s.uploadFileType,g.debug("uploadToCOS",`${n} options:${u(s)}`);try{const m=Date.now(),D=yield this._createCosOptions(s),M=D.fileExistsInCOS?{data:{location:D.downloadUrl}}:yield this._uploadFile(D);this._handleUploadError(M,s);const T=this._createUploadResult(E,M),P=Date.now()-m,W=function(EA){return EA<1024?`${EA}B`:EA<1048576?`${Math.floor(EA/1024)}KB`:`${Math.floor(EA/1048576)}MB`}(E.size),iA=`size:${W} time:${P}ms speed:${_r(1e3*E.size/P)}`;return g.debug("uploadToCOS",`${n} ok. name:${E.name} ${iA}`),{uploadOptions:D,response:T}}catch(m){throw g.warn("uploadToCOS",`${n} failed, error:${u(m)}`),m}})}_handleUploadError(s,n){var g,u;const{ChatError:E}=(g=this._core)===null||g===void 0?void 0:g.helper;if(s.statusCode===403)throw n.url,!((u=s?.data)===null||u===void 0)&&u.uploadIP&&s.data.uploadIP,new E({message:"Upload failed with status 403"})}_createUploadResult(s,n){return{fileName:s.name,fileSize:s.size,fileType:s.type.slice(s.type.indexOf("/")+1).toLowerCase(),location:n.data.location||"",uploadTime:Ur(Date.now(),!1),uploadSpeed:_r(1e3*s.size/Ur(Date.now(),!1))}}_createCosOptions(s){return pA(this,void 0,void 0,function*(){const{fileName:n,resources:g,uploadMethod:u}=yield this._prepareUploadParams(s),E=this._isC2CConversation(s.message.conversationID)?1:2;try{const m=yield this._fetchCosSignatureUrl({fileType:this.uploadFileType,fileName:n,uploadMethod:u,duration:this.duration,userID:s.message.from,conversationType:E}),{uploadUrl:D,downloadUrl:M,requestSnapshotUrl:T,thumbUrl:P,largeUrl:W,fileKey:iA,existFlag:EA}=m,RA=!Pt.isPrivateNetWork()&&m.uploadIP;return{url:this._getRawOrUploadProxyUrl(D),fileType:this.uploadFileType,fileName:n,resources:g,downloadUrl:M,requestSnapshotUrl:T,thumbUrl:P,largeUrl:W,fileKey:iA,uploadIP:RA||"",fileExistsInCOS:EA===1,onProgress:kA=>this._handleUploadProgress(kA,s)}}catch(m){throw console.error("Failed to create COS pre-signed URL options:",m),m}})}_prepareUploadParams(s){return pA(this,void 0,void 0,function*(){const{ssoLog:n,utils:{safeStringify:g,isEmpty:u}}=this._core;n.debug("_prepareUploadParams",` prepareUploadParams:${g(s)}`);const{file:E}=s,{IN_MINI_APP:m,IN_RN_APP:D}=Pt.getPlatformFlags(),M=m||D,T=M&&s.message.type!==Ya,{name:P}=E,W=P.slice(P.lastIndexOf(".")),iA=`${Lr(999999)}${W}`,EA=T?E.name:iA,RA=yield this._generateHashFileName(E);return{fileName:u(RA)?Ig(EA):`${RA}${W}`,resources:M?E.url:E,uploadMethod:M?1:0}})}_generateHashFileName(s){return pA(this,void 0,void 0,function*(){const{utils:{IN_MINI_APP:n,IN_BROWSER:g,IN_UNI_NATIVE_APP:u,isArray:E},ssoLog:m}=this._core,D=Date.now();let M="";return g&&(M=yield this._generateHashFileNameInWeb(s)),n&&(E(s.tempFiles)&&(s=s.tempFiles[0]),u||(M=yield this._generateFileNameInMiniProgram(s)),u&&(M=yield this._generateFileNameInUNINativeApp(s))),m.info("_generateHashFileName",`hashFileName:${M} costTime:${Date.now()-D}`),M})}_generateHashFileNameInWeb(s){return pA(this,void 0,void 0,function*(){const{ssoLog:n,utils:{safeStringify:g}}=this._core;let u="";try{u=yield new Promise((E,m)=>{const D=File.prototype.slice||File.prototype.mozSlice||File.prototype.webkitSlice;D||(n.warn("_generateHashFileNameInWeb","Browser does not support file slicing"),E(""));const M=10485760,T=Math.ceil(s.size/M);let P=0;const W=new fC.ArrayBuffer,iA=new FileReader,EA=setTimeout(()=>{iA.abort(),n.warn("_generateHashFileNameInWeb","File hash generation timeout"),E("")},2e3);function RA(){const kA=P*M,xA=kA+M>=s.size?s.size:kA+M;iA.readAsArrayBuffer(D.call(s,kA,xA))}iA.onload=kA=>{n.debug("_generateHashFileNameInWeb",`read chunk nr ${P+1} of ${T}`),W.append(kA.target.result),P++,P{clearTimeout(EA),m(kA)},RA()})}catch(E){n.warn("_generateHashFileNameInWeb",g(E))}return u})}_generateFileNameInMiniProgram(s){return pA(this,void 0,void 0,function*(){const{utils:{MINI_APP_NAMESPACE:n,safeStringify:g,isEmpty:u},ssoLog:E}=this._core;let m="";if(u(s.url))return E.warn("_generateFileNameInMiniProgram","file.url is empty"),m;if(typeof n?.getFileSystemManager!="function")return E.warn("_generateFileNameInUNINativeApp","getFileSystemManager is not a function"),m;try{m=yield new Promise((D,M)=>{n.getFileSystemManager().getFileInfo({filePath:s.url,success:T=>{D(T.digest)},fail:T=>{M(T)}})})}catch(D){E.warn("_generateFileNameInMiniProgram",g(D))}return m})}_generateFileNameInUNINativeApp(s){return pA(this,void 0,void 0,function*(){var n;const{utils:{safeStringify:g,isEmpty:u},ssoLog:E}=this._core;let m="";if(u(s.url))return E.warn("_generateFileNameInUNINativeApp","file.url is empty"),m;if(typeof((n=plus==null?void 0:plus.io)===null||n===void 0?void 0:n.getFileInfo)!="function")return E.warn("_generateFileNameInUNINativeApp","plus.io.getFileInfo is not a function"),m;try{m=yield new Promise((D,M)=>{plus.io.getFileInfo({filePath:s.url,success:T=>{D(T.digest)},fail:T=>{M(T)}})})}catch(D){E.warn("_generateFileNameInMiniProgram",g(D))}return m})}_handleUploadProgress(s,n){if(typeof n.onProgress=="function")try{n.onProgress(s.percent)}catch(g){throw console.warn("Upload progress callback error:",g),g}}_fetchCosSignatureUrl(s){return pA(this,void 0,void 0,function*(){const{ssoLog:n,utils:{safeStringify:g}}=this._core,u=Pt.isSimpleCos(),E=this._prepareCosRequestData(s),m=u?"im_cos_msg.simple_sig":"im_cos_msg.pre_sig";try{const D=yield function(T,P,W){return pA(this,void 0,void 0,function*(){try{const{helper:iA,channel:EA}=W,RA=iA.generateCosSpecifiedData({servcmd:T,data:P}),kA=`${RA.head.seq}${T}`;return yield EA.sendPacket(RA,{requestId:kA})}catch(iA){throw console.warn("getCosSig error:",iA),iA}})}(m,E,this._core);this.fetchCosTryCount=0;const M=this._processResponse(D);return n.debug("_fetchCosSignatureUrl",` ok. isSimpleCos:${u} data:${g(M)}`),M||{}}catch(D){if(this.fetchCosTryCount<1)return this.fetchCosTryCount++,this._fetchCosSignatureUrl(s);throw this.fetchCosTryCount=0,D}})}_processResponse(s){var n;const g=Pt.isSimpleCos(),u=g?(n=s?.rpt_pre_sig)===null||n===void 0?void 0:n[0]:s;if(!u)return{};if(g){const{str_final_ip:W,rpt_pre_sig:iA,uint32_file_id:EA,uint32_exist_flag:RA,str_download_url:kA,str_upload_url:xA,str_snapshot_url:LA,str_file_key:SA}=u;return{uploadIP:W,preSig:iA,fileID:EA,existFlag:RA,downloadUrl:kA,uploadUrl:xA,requestSnapshotUrl:LA,fileKey:SA}}const{upload_url:E,download_url:m,snapshot_url:D,thumb_url:M,large_url:T,file_key:P}=u;return{uploadUrl:E,downloadUrl:m,requestSnapshotUrl:D,thumbUrl:M,largeUrl:T,fileKey:P}}_prepareCosRequestData(s){return Pt.isSimpleCos()?{uint32_upload_method:s.uploadMethod,uint32_platform:Pt.getPlatform(),uint32_sdkappid:Pt.getSDKAppID(),str_user_id:s.userID,uint32_scene:s.conversationType,rpt_upload_object:[{uint32_file_id:1,uint32_file_type:s.fileType,str_file_name:s.fileName}]}:{file_type:s.fileType,file_name:s.fileName,upload_method:s.uploadMethod,Duration:s.duration}}_uploadFile(s){return pA(this,void 0,void 0,function*(){return new Promise((n,g)=>{this.httpRequest.request(s,(u,E)=>{u&&this.uploadFileTryCount=3e4}_syncSystemClock(s){var n,g,u;const E=((n=s.headers)===null||n===void 0?void 0:n.date)||((g=s.headers)===null||g===void 0?void 0:g.Date)||((u=s.error)===null||u===void 0?void 0:u.ServerTime);if(E){const m=Date.now(),D=Date.parse(E);this.systemClockOffset=D-m}}_getRawOrUploadProxyUrl(s){const n=Pt.getFileUploadProxy();let g=s;return n&&(g=s.replace(/^https:\/\/[^/]+/,n)),g}_isC2CConversation(s){return s.slice(0,3)==="C2C"}};const L=2108,oA=2251,b=2252,x=2253,tA=["jpg","jpeg","gif","png","bmp","image","webp"],uA={JPG:1,JPEG:1,GIF:2,PNG:3,BMP:4,UNKNOWN:255},wA=1,XA=2;class pe{constructor(n,g){this.instanceID=Lr(9999999),this.sizeType=n.type||0,this.type=0,this.size=n.size||0,this.width=n.width||0,this.height=n.height||0,this.imageUrl=Pt.addAuthToUrl(n.imageUrl||n.url||""),this.url=Pt.addAuthToUrl(n.url||g)}setSizeType(n){this.sizeType=n}setType(n){this.type=n}setImageUrl(n){n&&(this.imageUrl=Pt.addAuthToUrl(n))}getImageUrl(){return this.imageUrl}}function p(s){const{originUrl:n,originWidth:g,originHeight:u,min:E=198}=s,m=parseInt(g)||0,D=parseInt(u)||0,M={url:void 0,width:0,height:0};if((m<=D?m:D)<=E)M.url=n,M.width=m,M.height=D;else{D<=m?(M.width=Math.ceil(m*E/D),M.height=E):(M.width=E,M.height=Math.ceil(D*E/m));const T=n&&n.indexOf("?")>-1?`${n}&`:`${n}?`;M.url=E===198?`${T}imageView2/3/w/198/h/198`:`${T}imageView2/3/w/720/h/720`}if(n===void 0){const{url:T}=M;return Do(M,["url"])}return M}class B{constructor(n){this._imageMemoryURL="",this._percent=0,this.type=ic;const{uuid:g,file:u,imageFormat:E,imageInfoArray:m=[],isCustomUpload:D=!1}=n;this._imageMemoryURL=this.createImageDataAsURL(u),this.content={imageFormat:E,uuid:g,imageInfoArray:[]},this[Jr]=D,this.initImageInfoArray(m),this.autoFixUrl()}static parseServerPushElement(n){const{MsgContent:g}=n,{ImageFormat:u,ImageInfoArray:E,UUID:m}=g,D=function(M){return M.map(T=>({size:T.Size,type:T.Type,width:T.Width,height:T.Height,url:T.URL}))}(E);return new B({imageFormat:u,imageInfoArray:D,uuid:m})}createImageDataAsURL(n){let g="";const{IN_MINI_APP:u,IN_RN_APP:E,IN_BROWSER:m}=Pt.getPlatformFlags();return n&&((u||E)&&(g=n.url),m&&(g=window.URL.createObjectURL(n))),g}initImageInfoArray(n=[]){const g={type:0,size:0,width:0,height:0,url:""};for(let u=0;u<3;u++){const E=n[u]||Object.assign({},g),m=new pe(E,this._imageMemoryURL);m.setSizeType(u+1),m.setType(u),this.addImageInfo(m)}this.updateAccessSideImageInfoArray()}autoFixUrl(){const n=["http","https"];this.content.imageInfoArray.forEach(g=>{if(!g.url||g.imageUrl==="")return;const[u,...E]=g.imageUrl.split("://"),m=E.join("://");n.includes(u)||g.setImageUrl(`https://${m}`)})}updatePercent(n){this._percent=Math.min(n,1)}updateImageFormat(n){this.content.imageFormat=uA[n.toUpperCase()]||uA.UNKNOWN}addImageInfo(n){this.content.imageInfoArray.length>=3||this.content.imageInfoArray.push(n)}updateImageInfoArray(n){const g=this.content.imageInfoArray.length;let u;for(let E=0;E({InstanceId:g.instanceID,Type:g.sizeType,MsgType:g.type,Size:g.size,Width:g.width,Height:g.height,URL:Pt.removeAuthToUrl(g.imageUrl)}))}}const v=new class{init(s){this.core=s}},N={[iu]:"i",[cl]:"a",[Ba]:"v",[xE]:"f"};let O=null,z=null;function X(s){var n;const{store:g,utils:{isNumber:u,safeStringify:E},ssoLog:m}=v.core;try{const D=((n=g.get("cloudConfig"))===null||n===void 0?void 0:n.upload_size_limit)||"";D!==z&&(z=D,O=JSON.parse(D)||{});const M=O?.[N[s]];if(u(M))return 1024*M*1024}catch(D){m.debug("getCloudControlUploadSizeLimit",E(D))}return null}var rA=new class{constructor(){this._messageOptionsMap=new Map}init(s){var n;this._core=s;const{notificationCenter:g,helper:u,InnerEvent:E,message:m}=s;u.registerApi({apiName:"createImageMessage",context:this}),u.registerExperimentalAPI("createImageMessage",this,"createCustomUploadImageMessage"),(n=m?.messageFactory)===null||n===void 0||n.registerElementClass(ic,B),g.subscribeInnerEvent(E.DESTROY,this._dispose,this)}createImageMessage(s){var n,g,u;try{const E=(n=this._core.store.get("login"))===null||n===void 0?void 0:n.userId,m=(u=(g=this._core)===null||g===void 0?void 0:g.message.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:E})),D=this._processImage(s);s.payload.file=D;const M={imageFormat:uA.UNKNOWN,uuid:Pt.generateUUID(D),file:D,imageInfoArray:[]},T=new B(M);return m.setElement(T),this._messageOptionsMap.set(m.clientSequence,s),m}catch(E){throw E}}createCustomUploadImageMessage(s){var n,g,u,E;const{store:m,utils:{isEmpty:D}}=this._core,M=(n=m.get("login"))===null||n===void 0?void 0:n.userId,T=(u=(g=this._core)===null||g===void 0?void 0:g.message.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:M})),{largeImageUuid:P,largeFileSize:W,largeImageWidth:iA,largeImageHeight:EA,largeImageUrl:RA,originImageUuid:kA,originFileSize:xA,originImageWidth:LA,originImageHeight:SA,originImageUrl:OA,thumbImageUuid:JA,thumbFileSize:ae,thumbImageWidth:se,thumbImageHeight:_i,thumbImageUrl:Ti}=((E=s?.payload)===null||E===void 0?void 0:E.file)||{};if(D(OA)||D(kA))throw new Error("createImageMessageExperimental originImageUrl or originImageUuid is empty");const Ft=new B({imageFormat:uA.UNKNOWN,uuid:kA,imageInfoArray:[{instanceID:kA,size:xA,width:LA,height:SA,imageUrl:OA,url:OA},{instanceID:P,size:W,width:iA,height:EA,imageUrl:RA,url:RA},{instanceID:JA,size:ae,width:se,height:_i,imageUrl:Ti,url:Ti}],isCustomUpload:!0});return T.setElement(Ft),this._messageOptionsMap.set(T.clientSequence,s),T._skipUpload=!0,T}upload(s){return pA(this,void 0,void 0,function*(){const n=s.getElements()[0],{file:g}=this._messageOptionsMap.get(s.clientSequence).payload;this._validateBeforeUploadImage(g);const u=yield this._performImageUpload(n,s,g),E=this._generateImageInfo(u);return n.updateImageFormat(u?.fileType),n.updateImageInfoArray(E),this._updateImageType(n.content.imageInfoArray),s})}_performImageUpload(s,n,g){return pA(this,void 0,void 0,function*(){const{to:u}=n,E={uploadFileType:iu,file:g,to:u,message:n,onProgress:M=>{var T,P;s.updatePercent(M),(P=(T=this._messageOptionsMap.get(n.clientSequence))===null||T===void 0?void 0:T.onProgress)===null||P===void 0||P.call(T,M)}},{uploadOptions:m,response:D}=yield q.uploadToCOS(E);return this._parseResponse(m,D)})}_generateImageInfo(s){const{location:n,fileSize:g,width:u,height:E,smallImageUrl:m,smallImageWidth:D,smallImageHeight:M,largeImageUrl:T,largeImageWidth:P,largeImageHeight:W,imageInfoArray:iA}=s,EA=Pt.addAuthToUrl(n),RA={size:g,url:EA,width:u,height:E};return iA?.length>0?this._processImageInfoArray(iA,g):m&&T?[Object.assign({},RA),{largeImageUrl:T,largeImageWidth:P,largeImageHeight:W},{smallImageUrl:m,smallImageWidth:D,smallImageHeight:M}]:[Object.assign({},RA),this._generateThumbInfo(EA,u,E,720),this._generateThumbInfo(EA,u,E,198)]}_generateThumbInfo(s,n,g,u){return p({originUrl:s,originWidth:n,originHeight:g,min:u})}_processImageInfoArray(s,n){let g,u,E;for(const m of s)m.type===1?(u=m,u.size=n):m.type===2?(E=m,E.size=n):(g=m,g.size=n);return[Object.assign({},g),Object.assign({},E),Object.assign({},u)]}_parseResponse(s,n){return pA(this,void 0,void 0,function*(){try{const{thumbUrl:g,largeUrl:u,downloadUrl:E}=s;if(g&&u&&(yield this._getImageInfoByUrl(g,n,"thumb"),yield this._getImageInfoByUrl(u,n,"large")),Pt.isSimpleCos()&&!Pt.isPrivateNetWork()&&(yield this._getImageInfoArray(E,n),n?.uploadIP)){const m=this._extractDomainFromUrl(E);m&&(yield this._getDownloadIP(m,n))}return n}catch(g){throw g}})}_extractDomainFromUrl(s){var n;try{const g=s.match(/:\/\/([^\/]+)/);return g?g[1]:null}catch(g){return(n=this._core)===null||n===void 0||n.ssoLog.warn("_extractDomainFromUrl",`Failed to extract domain from URL:${g.message}`),null}}_getImageInfoByUrl(s,n,g){return pA(this,void 0,void 0,function*(){var u;try{const E=Pt.addAuthToUrl(s),{width:m=0,height:D=0}=yield Pt.probeImageWidthHeight(E);n.width=m,n.height=D,g==="thumb"?(n.smallImageUrl=s,n.smallImageWidth=m,n.smallImageHeight=D):(n.largeImageUrl=s,n.largeImageWidth=m,n.largeImageHeight=D)}catch(E){(u=this._core)===null||u===void 0||u.ssoLog.warn("_getImageInfoByUrl",`Failed to get ${g} image info:${E.message}`)}})}_validateBeforeUploadImage(s){var n;const{ChatError:g}=(n=this._core)===null||n===void 0?void 0:n.helper;if(!s)throw new g({code:oA});this._checkImageType(s),this._checkImageSize(s)}_processImage(s){var n;try{const{IN_MINI_APP:g}=(n=this._core)===null||n===void 0?void 0:n.utils;let{file:u}=s.payload;return u=g?this._processMiniAppImageFile(u):this._processWebImageFile(u),u}catch(g){throw g}}_processMiniAppImageFile(s){gl(s)&&console.warn("FileUnsupportedInMiniApp","createImageMessage");const n=s.tempFiles[0].path||s.tempFiles[0].tempFilePath;return{url:n,name:n.slice(n.lastIndexOf("/")+1),size:s.tempFiles&&s.tempFiles[0].size||1,type:n.slice(n.lastIndexOf(".")+1).toLowerCase()}}_processWebImageFile(s){var n;const{ChatError:g}=(n=this._core)===null||n===void 0?void 0:n.helper,u=Pt.extractFileFromInput(s);if(!u)throw new g({message:"Invalid file. Pass either `e.target` (from file input) or a File object"});return u}_getDownloadIP(s,n){return pA(this,void 0,void 0,function*(){const g=`${ha} getDownloadIP domainName: ${s}`;try{const u=yield function(m,D){return pA(this,void 0,void 0,function*(){try{const{helper:M,channel:T}=D,P="im_cos_msg.get_final_ip",W={str_domain:m},iA=M.generateProtocolData({servcmd:P,data:W}),EA=`${iA.head.seq}${P}`;return yield T.sendPacket(iA,{requestId:EA})}catch(M){throw console.warn("getFinalIP error:",M),M}})}(s,this._core);if(!u||!u.str_final_ip)return;console.log(`${g} ok. downloadIP:${u}`);const E=n.location.split("/");E[0]=u.str_final_ip,n.location=E.join("/")}catch(u){console.warn(u)}})}_getImageInfoArray(s,n){return pA(this,void 0,void 0,function*(){try{const g=yield function(u,E){return pA(this,void 0,void 0,function*(){try{const{helper:m,channel:D}=E,M="im_cos_msg.get_imageinfo",T={str_image_url:u},P=m.generateProtocolData({servcmd:M,data:T}),W=`${P.head.seq}${M}`;return yield D.sendPacket(P,{requestId:W})}catch(m){throw console.warn("getImageInfo error:",m),m}})}(s,this._core);return n.imageInfoArray=this._processImageInfoResponse(g),n}catch(g){throw n.imageInfoArray=void 0,g}})}_processImageInfoResponse(s){if(!s)return[];const{rpt_msg_image_info:n}=s;return n.map(g=>({type:g.uint32_image_type,url:g.str_url,width:g.uint32_width,height:g.uint32_height,imageFormat:g.str_image_format}))}_checkImageType(s){const{utils:n,helper:g}=this._core;let u="";if(n.IN_MINI_APP&&(u=s.url.slice(s.url.lastIndexOf(".")+1)),n.IN_BROWSER&&(u=s.name.slice(s.name.lastIndexOf(".")+1)),tA.indexOf(u.toLowerCase())<0)throw new g.ChatError({code:b})}_checkImageSize(s){const{utils:n,helper:g,store:u}=this._core;let E=0;if(E=(n.IN_MINI_APP,s.size),E===0)throw new g.ChatError({code:L});if(E>=(X(iu)||20971520))throw new g.ChatError({code:x})}_updateImageType(s){s[1].type=XA,s[2].type=wA}_reset(){this._messageOptionsMap.clear()}_dispose(){this._reset();const{notificationCenter:s,InnerEvent:n}=this._core;s.unSubscribeInnerEvent(n.DESTROY,this._dispose,this)}};const DA=2108,GA=2401,VA=2402,ee="2.5.0",Ee="1.18.0";function We(s,n){const g=s.split("."),u=n.split("."),E=Math.max(g.length,u.length);for(;g.lengthM)return 1;if(D0;return{isValid:n,error:n?null:{message:"content can not be empty"}}}transformToServerFormat(n){const{isMergerMessage:g=!1}=n||{},u=g?this.payload:this.content,{uuid:E,downloadFlag:m,fileUrl:D,fileName:M,fileSize:T}=u;return{MsgType:this.type,MsgContent:{Download_Flag:m,Url:Pt.removeAuthToUrl(D),FileName:M,FileSize:T,UUID:E}}}_getFileInfo(n){const{utils:{IN_UNI_NATIVE_APP:g}}=v.core;if(n.fileName&&n.fileSize)return{size:n.fileSize,name:n.fileName};const{file:u}=n;return u?(g&&this._processNativeAppFile(u),{size:u.size,name:u.name}):{size:0,name:""}}_processNativeAppFile(n){if(n.path&&n.path.includes(".")){const g=n.path.slice(n.path.lastIndexOf(".")+1).toLowerCase();n.type=g,n.name||(n.name=`${Lr(999999)}.${g}`)}n.name||(n.type="",n.name=n.path.slice(n.path.lastIndexOf("/")+1).toLowerCase()),n.suffix&&(n.type=n.suffix),n.url||(n.url=n.path)}}ot=Jr;var Ut=new class{constructor(){this._messageOptionsMap=new Map}init(s){var n;this._core=s;const{notificationCenter:g,helper:u,InnerEvent:E,message:m}=s;u.registerApi({apiName:"createFileMessage",context:this}),u.registerExperimentalAPI("createFileMessage",this,"createCustomUploadFileMessage"),(n=m?.messageFactory)===null||n===void 0||n.registerElementClass(Ya,at),g.subscribeInnerEvent(E.DESTROY,this._dispose,this)}createFileMessage(s){var n,g,u;try{this._checkVersion();const E=this._processFile(s.payload.file);s.payload.file=E;const m=(n=this._core.store.get("login"))===null||n===void 0?void 0:n.userId,D=(u=(g=this._core)===null||g===void 0?void 0:g.message.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:m})),M={uuid:Pt.generateUUID(E),file:E},T=new at(M);return D.setElement(T),this._messageOptionsMap.set(D.clientSequence,s),D}catch(E){throw E}}createCustomUploadFileMessage(s){var n,g,u;try{const{store:E,message:m,utils:{isEmpty:D}}=this._core,M=(n=E.get("login"))===null||n===void 0?void 0:n.userId,{url:T,uuid:P,fileSize:W,fileName:iA=""}=((g=s?.payload)===null||g===void 0?void 0:g.file)||{};if(D(T))throw new Error("url is required");const EA=(u=m.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:M})),RA=new at({url:T,uuid:P,file:{size:W,name:iA},isCustomUpload:!0});return EA.setElement(RA),EA}catch(E){throw E}}upload(s){return pA(this,void 0,void 0,function*(){const{file:n}=this._messageOptionsMap.get(s.clientSequence).payload;this._validateBeforeUploadFile(n);const g=s.getElements()[0],u=yield this._performFileUpload(g,s,n),E=Pt.addAuthToUrl(u?.location);return g.updateFileUrl(E),s})}_validateBeforeUploadFile(s){const{helper:{ChatError:n}}=this._core;if(!s)throw new n({code:GA});const g=X(xE)||104857600;if(s.size>g)throw new n({code:VA});if(s.size===0)throw new n({code:DA})}_performFileUpload(s,n,g){return pA(this,void 0,void 0,function*(){const{to:u}=n,E={uploadFileType:xE,file:g,to:u,message:n,onProgress:D=>{var M,T;s.updatePercent(D),(T=(M=this._messageOptionsMap.get(n.clientSequence))===null||M===void 0?void 0:M.onProgress)===null||T===void 0||T.call(M,D)}},{response:m}=yield q.uploadToCOS(E);return m})}_processFile(s){var n,g;const{IN_BROWSER:u,IN_RN_APP:E,IN_WX_MINI_APP:m,IN_QQ_MINI_APP:D,IN_UNI_NATIVE_APP:M}=(n=this._core)===null||n===void 0?void 0:n.utils,{ChatError:T}=(g=this._core)===null||g===void 0?void 0:g.helper;if(u||M){const P=Pt.extractFileFromInput(s);if(!P)throw new T({message:"Invalid file. Pass either `e.target` (from file input) or a File object"});return P}if(m||D){const{tempFiles:P}=s;return Object.assign(Object.assign({},P[0]),{url:P[0].path})}return E?Object.assign(Object.assign({},s),{url:s.uri}):s}_checkVersion(){var s,n;const{MINI_APP_NAMESPACE:g,IN_MINI_APP:u,IN_WX_MINI_APP:E,IN_QQ_MINI_APP:m,IN_UNI_NATIVE_APP:D}=(s=this._core)===null||s===void 0?void 0:s.utils,{ChatError:M}=(n=this._core)===null||n===void 0?void 0:n.helper;if(u){if(!(E||m||D))throw new M({message:"Unsupported mini app environment"});const T=g.getSystemInfoSync().SDKVersion;if(E&&We(T,ee)<0)throw new M({message:`WXChooseMessageFile requires SDK version ${ee} or higher`});if(m&&We(T,Ee)<0)throw new M({message:`QQChooseMessageFile requires SDK version ${Ee} or higher`})}}_reset(){this._messageOptionsMap.clear()}_dispose(){this._reset();const{notificationCenter:s,InnerEvent:n}=this._core;s.unSubscribeInnerEvent(n.DESTROY,this._dispose,this)}};const Jt=2108,Ui=2351,go=2352,Xi=["mp4","quicktime","mov","video"];var Ei;class Po{constructor(n){this.type=Fl,this.uploadProgress=0,this[Ei]=!1;const g=typeof n?.videoSecond=="number"?n?.videoSecond:0;this[Jr]=n.isCustomUpload||!1,this.content={remoteVideoUrl:Pt.addAuthToUrl(n.remoteVideoUrl||n.videoUrl||""),videoFormat:n.videoFormat,videoSecond:parseInt(g?.toString(),10),videoSize:n.videoSize,videoUrl:Pt.addAuthToUrl(n.videoUrl),videoDownloadFlag:2,videoUUID:n.videoUUID,thumbUUID:n.thumbUUID,thumbFormat:n.thumbFormat,thumbWidth:n.thumbWidth,snapshotWidth:n.thumbWidth,thumbHeight:n.thumbHeight,snapshotHeight:n.thumbHeight,thumbSize:n.thumbSize,snapshotSize:n.thumbSize,thumbDownloadFlag:2,thumbUrl:Pt.addAuthToUrl(n.thumbUrl),snapshotUrl:Pt.addAuthToUrl(n.thumbUrl)}}static parseServerPushElement(n){const{MsgContent:g}=n,{VideoUrl:u,VideoFormat:E,VideoSecond:m,VideoSize:D,VideoDownloadFlag:M,VideoUUID:T,ThumbUUID:P,ThumbFormat:W,ThumbWidth:iA,SnapshotWidth:EA,ThumbHeight:RA,SnapshotHeight:kA,ThumbSize:xA,SnapshotSize:LA,ThumbDownloadFlag:SA,ThumbUrl:OA,SnapshotUrl:JA}=g;return new Po({videoUrl:u,videoFormat:E,videoSecond:m,videoSize:D,videoDownloadFlag:M,videoUUID:T,thumbUUID:P,thumbFormat:W,thumbWidth:iA,snapshotWidth:EA,thumbHeight:RA,snapshotHeight:kA,thumbSize:xA,snapshotSize:LA,thumbDownloadFlag:SA,thumbUrl:OA,snapshotUrl:JA})}updatePercent(n){this.uploadProgress=Math.min(n,1)}updateVideoUrl(n){n&&(this.content.remoteVideoUrl=n)}updateSnapshotInfo(n){const{snapshotUrl:g,snapshotWidth:u,snapshotHeight:E}=n;Pt.isEmpty(g)||(this.content.thumbUrl=this.content.snapshotUrl=g),Pt.isEmpty(u)||(this.content.thumbWidth=this.content.snapshotWidth=Number(u)),Pt.isEmpty(E)||(this.content.thumbHeight=this.content.snapshotHeight=Number(E))}validateBeforeSend(){if(this[Jr])return{isValid:!0};const n=this.content.remoteVideoUrl!=="";return{isValid:n,error:n?null:{message:"content can not be empty"}}}transformToServerFormat(n){const{isMergerMessage:g=!1}=n||{},u=g?this.payload:this.content,{remoteVideoUrl:E,videoFormat:m,videoSecond:D,videoSize:M,videoDownloadFlag:T,videoUUID:P,thumbUUID:W,thumbFormat:iA,thumbWidth:EA,snapshotWidth:RA,thumbHeight:kA,snapshotHeight:xA,thumbSize:LA,snapshotSize:SA,thumbDownloadFlag:OA,thumbUrl:JA,snapshotUrl:ae}=u;return{MsgType:this.type,MsgContent:{VideoUrl:Pt.removeAuthToUrl(E),VideoFormat:m,VideoSecond:D,VideoSize:M,VideoDownloadFlag:T,VideoUUID:P,ThumbUUID:W,ThumbFormat:iA,ThumbWidth:EA,SnapshotWidth:RA,ThumbHeight:kA,SnapshotHeight:xA,ThumbSize:LA,SnapshotSize:SA,ThumbDownloadFlag:OA,ThumbUrl:Pt.removeAuthToUrl(JA),SnapshotUrl:Pt.removeAuthToUrl(ae)}}}}Ei=Jr;var es,pi=new class{constructor(){this._messageOptionsMap=new Map}init(s){var n;this._core=s;const{notificationCenter:g,helper:u,InnerEvent:E,message:m}=s;u.registerApi({apiName:"createVideoMessage",context:this}),u.registerExperimentalAPI("createVideoMessage",this,"createCustomUploadVideoMessage"),(n=m?.messageFactory)===null||n===void 0||n.registerElementClass(Fl,Po),g.subscribeInnerEvent(E.DESTROY,this._dispose,this)}createVideoMessage(s){var n,g,u;try{const E=this._processVideo(s);s.payload.file=E;const m=(n=this._core.store.get("login"))===null||n===void 0?void 0:n.userId,D=(u=(g=this._core)===null||g===void 0?void 0:g.message.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:m})),M={videoFormat:E.videoFile.type,videoSecond:ar(E.videoFile.second,0),videoSize:E.videoFile.size,remoteVideoUrl:"",videoUrl:E.videoFile.url,videoUUID:Pt.generateUUID(E.videoFile),thumbUUID:Pt.generateUUID(E.videoFile,"jpg"),thumbWidth:E.width||200,thumbHeight:E.height||200,thumbUrl:E.thumbUrl,thumbSize:E.thumbSize,thumbFormat:"jpg"},T=new Po(M);return D.setElement(T),this._messageOptionsMap.set(D.clientSequence,s),D}catch(E){throw E}}createCustomUploadVideoMessage(s){var n,g,u;try{const{store:E,message:m}=this._core;this._validateCustomUploadVideoMessage(s);const D=(n=E.get("login"))===null||n===void 0?void 0:n.userId,{videoUrl:M,videoUuid:T,duration:P,snapshotUrl:W,snapshotUuid:iA,videoFileSize:EA,videoType:RA,snapshotWidth:kA,snapshotHeight:xA,snapshotFileSize:LA,snapshotType:SA="jpg"}=((g=s?.payload)===null||g===void 0?void 0:g.file)||{},OA=(u=m.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:D})),JA=new Po({videoFormat:RA,videoSecond:P||0,videoSize:EA,remoteVideoUrl:M,videoUrl:M,videoUUID:T,thumbUUID:iA,thumbWidth:kA||200,thumbHeight:xA||200,thumbUrl:W,thumbSize:LA,thumbFormat:SA,isCustomUpload:!0});return OA.setElement(JA),this._messageOptionsMap.set(OA.clientSequence,s),OA}catch(E){throw E}}upload(s){return pA(this,void 0,void 0,function*(){const n=s.getElements()[0],{file:g}=this._messageOptionsMap.get(s.clientSequence).payload;this._validateBeforeUploadVideo(g);const u=yield this._performVideoUpload(n,s,g),{location:E,snapshotInfo:m}=u,D=Pt.addAuthToUrl(E);return n.updateVideoUrl(D),Pt.isEmpty(m)||n.updateSnapshotInfo(m),s})}_validateBeforeUploadVideo(s){const{helper:{ChatError:n}}=this._core,g=X(Ba)||104857600;if(s.videoFile.size>g)throw new n({code:Ui});if(s.videoFile.size===0)throw new n({code:Jt});if(Xi.indexOf(s.videoFile.type)===-1)throw new n({code:go})}_validateCustomUploadVideoMessage(s){var n;const{utils:{isEmpty:g,isNumber:u}}=this._core,{videoUrl:E,videoUuid:m,duration:D,snapshotUrl:M,snapshotUuid:T}=((n=s?.payload)===null||n===void 0?void 0:n.file)||{};if(g(E)||g(m)||!u(D)||g(M)||g(T))throw new Error("Invalid video message options: missing required fields (videoUrl, videoUuid, duration, snapshotUrl, snapshotUuid)")}_performVideoUpload(s,n,g){return pA(this,void 0,void 0,function*(){const{to:u}=n,E={uploadFileType:Ba,file:g,to:u,message:n,onProgress:M=>{var T,P;s.updatePercent(M),(P=(T=this._messageOptionsMap.get(n.clientSequence))===null||T===void 0?void 0:T.onProgress)===null||P===void 0||P.call(T,M)}},{response:m,uploadOptions:D}=yield q.uploadToCOS(E);return{snapshotInfo:yield this._getSnapshotInfoByUrl(D.requestSnapshotUrl),location:m.location}})}_processVideo(s){var n,g;try{const{ChatError:u}=(n=this._core)===null||n===void 0?void 0:n.helper,{IN_MINI_APP:E,IN_BROWSER:m}=(g=this._core)===null||g===void 0?void 0:g.utils;let{file:D}=s.payload,M={};if(E&&(M=this._processMiniVideoFile(D),D.name=M.name,D.url=M.url,D.type=M.type),m){const T=Pt.extractFileFromInput(D);if(!T)throw new u({message:"Invalid file. Pass either `e.target` (from file input) or a File object"});D=T,M=this._processWebVideoFile(D)}return D.videoFile=M,D.thumbUrl="",D.thumbSize=0,D}catch(u){throw console.warn(`${ha} _processFile error:`,u),u}}_processMiniVideoFile(s){const{utils:{IN_UNI_NATIVE_APP:n},helper:{ChatError:g}}=this._core;if(gl(s))throw new g({message:"FileUnsupportedInMiniApp"});Array.isArray(s.tempFiles)&&(s=s.tempFiles[0]);let u=s.tempFilePath.slice(s.tempFilePath.lastIndexOf(".")+1).toLowerCase();return n&&(u=s.fileType||u),{url:s.tempFilePath,name:s.tempFilePath.slice(s.tempFilePath.lastIndexOf("/")+1),size:s.size||1,second:s.duration||0,type:u}}_processWebVideoFile(s){const{name:n,size:g=1,duration:u=0,type:E}=s,m=E.split("/")[1];return{url:window.URL.createObjectURL(s),name:n,size:g,second:u,type:m}}_getSnapshotInfoByUrl(s){return pA(this,void 0,void 0,function*(){const{ssoLog:n}=this._core;try{n.debug("_getSnapshotInfoByUrl",`${ha} _getSnapshotInfoByUrl url:${s}`);const g={version:1,platform:Pt.getPlatform(),cover_name:Ig(Lr(99999)),snapshot_url:s},u=yield function(T,P){return pA(this,void 0,void 0,function*(){try{const W="im_cos_msg.video_cover",{helper:iA,channel:EA}=P,RA=iA.generateCosSpecifiedData({servcmd:W,data:T}),kA=`${RA.head.seq}${W}`;return yield EA.sendPacket(RA,{requestId:kA})}catch(W){throw console.warn("getSnapshotInfo error:",W),W}})}(g,this._core),{download_url:E}=u||{};if(n.debug("_getSnapshotInfoByUrl",`${ha} _getSnapshotInfoByUrl OK snapshotUrl:${E}`),Pt.isEmpty(E))return{};const m=Pt.addAuthToUrl(E),{width:D=0,height:M=0}=yield Pt.probeImageWidthHeight(m);return{snapshotUrl:m,snapshotWidth:D,snapshotHeight:M}}catch(g){throw g}})}_reset(){this._messageOptionsMap.clear()}_dispose(){this._reset();const{notificationCenter:s,InnerEvent:n}=this._core;s.unSubscribeInnerEvent(n.DESTROY,this._dispose,this)}};class ji{constructor(n){this.uploadProgress=0,this.type=Fg,this[es]=!1,this[Jr]=n.isCustomUpload||!1,this.content={downloadFlag:2,second:n.second,size:n.size,url:Pt.generateURL(n.url,{needAddAuthToUrl:!this[Jr]}),remoteAudioUrl:Pt.addAuthToUrl(n.url||""),uuid:n.uuid}}static parseServerPushElement(n){const{MsgContent:g}=n,{Url:u,Download_Flag:E,Second:m,Size:D,UUID:M}=g;return new ji({url:u,downloadFlag:E,second:m,size:D,uuid:M})}updatePercent(n){this.uploadProgress=Math.min(n,1)}updateAudioUrl(n){this.content.remoteAudioUrl=n}validateBeforeSend(){if(this[Jr])return{isValid:!0};const n=this.content.remoteAudioUrl!=="";return{isValid:n,error:n?null:{message:"content can not be empty"}}}transformToServerFormat(n){const{isMergerMessage:g=!1}=n||{},u=g?this.payload:this.content,{uuid:E,downloadFlag:m,remoteAudioUrl:D,size:M,second:T}=u;return{MsgType:this.type,MsgContent:{Url:Pt.removeAuthToUrl(D),Download_Flag:m,Second:T,Size:M,UUID:E}}}}es=Jr;const Ws=2108,_e=2300,_t=2301;var FA=new class{constructor(){this._messageOptionsMap=new Map}init(s){var n;this._core=s;const{notificationCenter:g,helper:u,InnerEvent:E,message:m}=s;u.registerApi({apiName:"createAudioMessage",context:this}),u.registerExperimentalAPI("createAudioMessage",this,"createCustomUploadAudioMessage"),(n=m?.messageFactory)===null||n===void 0||n.registerElementClass(Fg,ji),g.subscribeInnerEvent(E.DESTROY,this._dispose,this)}createAudioMessage(s){var n,g,u;try{let{file:E}=s.payload;E=this._processAudioFile(s.payload.file),s.payload.file=E;const m=(n=this._core.store.get("login"))===null||n===void 0?void 0:n.userId,D=(u=(g=this._core)===null||g===void 0?void 0:g.message.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:m})),M={second:Math.max(1,Math.round((E.duration||E.second)/1e3)),size:E.fileSize||E.size||1,url:E.tempFilePath||E.uri||E.url,uuid:Pt.generateUUID(E)},T=new ji(M);return D.setElement(T),this._messageOptionsMap.set(D.clientSequence,s),D}catch(E){throw E}}createCustomUploadAudioMessage(s){var n,g,u;try{this._validateCustomUploadOptions(s);const{store:E,message:m}=this._core,D=(n=E.get("login"))===null||n===void 0?void 0:n.userId,{url:M,uuid:T,duration:P,fileSize:W}=((g=s?.payload)===null||g===void 0?void 0:g.file)||{},iA=(u=m.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:D})),EA=new ji({second:P,size:W||1,url:M,uuid:T,isCustomUpload:!0});return iA.setElement(EA),this._messageOptionsMap.set(iA.clientSequence,s),iA}catch(E){throw E}}upload(s){return pA(this,void 0,void 0,function*(){const{ssoLog:n,utils:{safeStringify:g}}=this._core;n.debug("upload",`${ha} uploadAudio message:${g(s)}`);const{file:u}=this._messageOptionsMap.get(s.clientSequence).payload;this._validateBeforeUploadAudio(u);const E=s.getElements()[0],m=yield this._performAudioUpload(E,s,u),D=Pt.addAuthToUrl(m?.location);return E.updateAudioUrl(D),s})}_validateBeforeUploadAudio(s){const{helper:{ChatError:n},store:g}=this._core;if(!s)throw new n({code:_e});const u=X(cl)||20971520;if(s.size>u)throw new n({code:_t});if(s.size===0)throw new n({code:Ws})}_performAudioUpload(s,n,g){return pA(this,void 0,void 0,function*(){const{to:u}=n,E={uploadFileType:cl,file:g,to:u,message:n,onProgress:D=>{var M,T;s.updatePercent(D),(T=(M=this._messageOptionsMap.get(n.clientSequence))===null||M===void 0?void 0:M.onProgress)===null||T===void 0||T.call(M,D)}},{response:m}=yield q.uploadToCOS(E);return m})}_processAudioFile(s){var n;const{IN_MINI_APP:g,IN_BROWSER:u}=(n=this._core)===null||n===void 0?void 0:n.utils;return g?this._processMiniFile(s):u?this._processWebFile(s):void 0}_processMiniFile(s){return{url:s.tempFilePath,name:s.tempFilePath.slice(s.tempFilePath.lastIndexOf("/")+1),size:s.fileSize,second:s.duration,type:s.tempFilePath.slice(s.tempFilePath.lastIndexOf(".")+1).toLowerCase()}}_processWebFile(s){if(s.tempFilePath||s.uri)return s;const n=URL.createObjectURL(s);return s.tempFilePath=n,s}_validateCustomUploadOptions(s){var n;const{utils:{isEmpty:g}}=this._core,{url:u,uuid:E,duration:m}=((n=s?.payload)===null||n===void 0?void 0:n.file)||{};if(g(u)||g(E)||g(m))throw new Error("Invalid audio message options")}_reset(){this._messageOptionsMap.clear()}_dispose(){this._reset();const{notificationCenter:s,InnerEvent:n}=this._core;s.unSubscribeInnerEvent(n.DESTROY,this._dispose,this)}};const Xt={to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1},payload:{required:!0,rules:["object"],allowEmpty:!1},cloudCustomData:{required:!1,rules:["string"],allowEmpty:!1},priority:{required:!1,rules:["string"],allowEmpty:!1},customModerationConfigurationID:{required:!1,rules:["string"],allowEmpty:!1},onProgress:{required:!1,rules:["function"],allowEmpty:!1}},En={createImageMessage:Xt,createAudioMessage:Xt,createVideoMessage:Xt,createFileMessage:Xt},Ai={createImageMessage:!0,createAudioMessage:!0,createVideoMessage:!0,createFileMessage:!0},us={[ic]:rA,[Ya]:Ut,[Fl]:pi,[Fg]:FA};var vi=new class{constructor(){this.name="RichMediaMessage"}install(s){this._core=s;const{constants:{OuterConstant:{MSG_AUDIO:n,MSG_FILE:g,MSG_IMAGE:u,MSG_VIDEO:E}}}=s;v.init(s),rA.init(s),Ut.init(s),pi.init(s),FA.init(s),q.init(s),Pt.init(s),s.helper.registerApi({apiName:"sendMessage",context:this,matcher:m=>[n,g,u,E].includes(m[0].type)}),s.helper.registerValidateConfig({auth:Ai,params:En})}sendMessage(s,n){return pA(this,void 0,void 0,function*(){var g,u,E;try{return this._isCustomUpload(s)||(yield this._upload(s)),yield(E=(u=(g=this._core)===null||g===void 0?void 0:g.message)===null||u===void 0?void 0:u.messageSender)===null||E===void 0?void 0:E.sendMessage(s,n)}catch(m){throw m}})}_upload(s){return pA(this,void 0,void 0,function*(){const{ssoLog:n,utils:{safeStringify:g}}=this._core;if(n.debug("_upload",` uploadFile message:${g(s)}`),s._relayFlag!==!0)try{const u=us[s.type];u&&(yield u.upload(s),n.info("_upload",` type:${s.type}`))}catch(u){throw s.status=ou.FAIL,u instanceof Error&&(u.data={message:s}),this._core.message.messageDataHandler.storeConversationMessage(s),u}})}_isCustomUpload(s){var n,g;return((g=(n=s._elements)===null||n===void 0?void 0:n[0])===null||g===void 0?void 0:g[Jr])===!0}};const ho=new class{init(s){this.core=s}};class ht{constructor(n){this.conversationID=n.conversationID||"",this.unreadCount=n.unreadCount||0,this.type=n.type||"",this.lastMessage=ho.core.common.buildLastMessage(n.lastMessage),this.peerReadTime=n.peerReadTime||0,this.groupAtInfoList=[],this.remark=n.remark||"",this.isPinned=n.isPinned||!1,this.messageRemindType=n.messageRemindType,this.markList=n.markList||[],this.customData=n.customData||"",this.conversationGroupList=n.conversationGroupList||[],this.draftText=n.draftText||"",this.userProfile=n.userProfile,this.groupProfile=n.groupProfile,this.subType=n.subType||"",this._isInfoCompleted=!1,this._init()}_init(){var n;const{core:{OuterConstant:g,utils:{isUndefined:u}}}=ho;u(this.userProfile)&&this.type===g.CONV_C2C?this.userProfile={userID:this.conversationID.replace(g.CONV_C2C,"")}:this.type===g.CONV_GROUP&&(!this.subType&&(!((n=this.groupProfile)===null||n===void 0)&&n.type)&&(this.subType=this.groupProfile.type),u(this.groupProfile)&&(this.groupProfile={groupID:this.conversationID.replace(g.CONV_GROUP,""),selfInfo:{},lastMessage:{},type:this.subType}))}updateUnreadCount(n){var g;const{core:{OuterConstant:u,utils:{isUndefined:E},store:m}}=ho,{nextUnreadCount:D,isFromGetConversations:M,isUnreadC2CMessage:T}=n;if(E(D))return;if(this.subType===u.GRP_AVCHATROOM)return void(this.unreadCount=0);if(M&&this.type===u.CONV_GROUP)return void(this.unreadCount=D);if(T&&this.type===u.CONV_C2C)return void(this.unreadCount=D);const P=((g=m.get("cloudConfig"))===null||g===void 0?void 0:g.support_unread_count_for_meeting)==="1";this.subType!==u.GRP_MEETING||P?this.unreadCount+=D:this.unreadCount=0}updateLastMessage(n){this.lastMessage=ho.core.common.buildLastMessage(n)}reduceUnreadCount(){return this.unreadCount>=1&&(this.unreadCount-=1,!0)}isLastMessageRevoked(n){const{core:{OuterConstant:g}}=ho,{sequence:u,time:E}=n;return this.type===g.CONV_C2C&&u===this.lastMessage.lastSequence&&E===this.lastMessage.lastTime||this.type===g.CONV_GROUP&&u===this.lastMessage.lastSequence}setLastMessageRevoked(n){this.lastMessage.isRevoked=n}setLastMessageRevoker(n){this.lastMessage.revoker=n}setDraftText(n){this.draftText=n}updateGroupAtInfoList(n){const{core:{common:{updateGroupAtInfo:g}}}=ho;g(n,this.groupAtInfoList)}clearGroupAtInfoList(){this.groupAtInfoList.length=0}getProfileCompleted(){return this._isInfoCompleted}setProfileCompleted(){this._isInfoCompleted=!0}}const Qt=s=>{const{core:{OuterConstant:n,utils:{isString:g}}}=ho;return g(s)&&s.slice(0,3)===n.CONV_C2C},ug=s=>{const{core:{OuterConstant:n,utils:{isString:g}}}=ho;return g(s)&&s.slice(0,5)===n.CONV_GROUP},ks=s=>{const{core:{OuterConstant:n,utils:{isString:g}}}=ho;return g(s)&&s===n.CONV_SYSTEM};function Wi(s){const{OuterConstant:n}=ho.core;let g="";return s===0?g=n.MSG_REMIND_ACPT_AND_NOTE:s===1?g=n.MSG_REMIND_DISCARD:s===2?g=n.MSG_REMIND_ACPT_NOT_NOTE:s===3&&(g=n.NOT_RECEIVE_OFFLINE_PUSH_EXCEPT_AT),g}function Hr(s){const{OuterConstant:n}=ho.core;let g;return s.startsWith(n.CONV_C2C)&&(g=s.replace(n.CONV_C2C,"")),g==="@TLS#ERROR"||g==="@TLS#NOT_FOUND"}function oc(s,n){const{helper:g}=ho.core,u=new g.ChatError({functionName:s,code:n?.errorCode||n?.code,message:n?.errorInfo||n?.message});throw console.error(`${s} fail:`,u),u}var is,ga;(function(s){s[s.OFF=0]="OFF",s[s.ON=1]="ON"})(is||(is={})),function(s){s[s.ONLY_CONVERSATIONID=1]="ONLY_CONVERSATIONID"}(ga||(ga={}));var Qa;(function(s){s[s.CONV_NOT_FOUND=2500]="CONV_NOT_FOUND",s[s.USER_OR_GRP_NOT_FOUND=2501]="USER_OR_GRP_NOT_FOUND",s[s.CONV_UN_RECORDED_TYPE=2502]="CONV_UN_RECORDED_TYPE"})(Qa||(Qa={}));const ea=0,H=1;var BA=new class{constructor(){this._name="GetC2CMessageRemindType"}init(s){this._core=s}get(s){return pA(this,void 0,void 0,function*(){try{const{common:n}=this._core,g=yield function(E,m){return pA(this,void 0,void 0,function*(){const{toAccount:D,userIDList:M}=E,T={To_Account:D,Peer_Account:M};return m.common.buildAndSendPacket({servcmd:"openim.get_c2c_peer_mute_notifications",data:T})})}({toAccount:n.getCurrentUserID(),userIDList:s},this._core),{MuteNotificationsList:u=[]}=g||{};u.forEach(E=>{const{Peer_Account:m,MuteNotifications:D}=E,M=`${this._core.OuterConstant.CONV_C2C}${m}`,T=Wi(D);NA.patchMessageRemindType([M],T)})}catch(n){console.error(`${this._name}.get fail:`,n)}})}},yA=new class{constructor(){this._name="GetGroupMessageRemindType"}init(s){this._core=s}get(s){return pA(this,void 0,void 0,function*(){if(s.length!==0)try{const n=yield function(u,E){return pA(this,void 0,void 0,function*(){const{groupIDList:m,responseFilter:D}=u,M={GroupIdList:m,ResponseFilter:D};return E.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_group_self_member_info",data:M})})}({groupIDList:s,responseFilter:{MemberInfoFilter:["MsgFlag"]}},this._core),{GroupInfo:g=[]}=n||{};g.forEach(u=>{var E;const{GroupId:m,MemberList:D}=u,M=((E=D[0])===null||E===void 0?void 0:E.MsgFlag)||"",T=`${this._core.OuterConstant.CONV_GROUP}${m}`;NA.patchMessageRemindType([T],M)})}catch(n){console.error(`${this._name}.get fail:`,n)}})}},NA=new class{constructor(){this._name="ConversationDataHandler",this._totalUnreadCount=0,this._groupAtTipsList=[]}init(s){this._core=s;const{helper:n,notificationCenter:g,appStore:{conversationStore:u},constants:{WORKFLOW_NAME:E,WORKFLOW_STEP:m},InnerEvent:{SYNC_CONVERSATION_LIST:D,MESSAGE_PUSH:M,NEW_MESSAGE:T,MESSAGE_DELETED:P,MESSAGE_REVOKED:W,MESSAGE_MODIFIED:iA,CONVERSATION_UPDATED:EA,LOGOUT:RA,DESTROY:kA},InnerEventSubType:{C2C_MESSAGE_PEER_READ:xA}}=s;this._conversationStore=u,n.registerWorkflowStep(E.SYNC_SERVER_INFO_AFTER_LOGIN,m.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,this._handleUnreadSyncFinished,this),n.registerWorkflowStep(E.SYNC_SERVER_INFO_AFTER_LOGIN,m.CONVERSATION_UPDATE_AFTER_GROUP_LIST_SYNC_FINISHED,this._handleGroupListSyncFinished,this),n.registerWorkflowStep(E.RECEIVE_C2C_NEW_MESSAGE,m.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,this._handleNewMessage,this),n.registerWorkflowStep(E.RECEIVE_C2C_NEW_MESSAGE,m.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,this._handleUnreadSyncFinished,this),n.registerWorkflowStep(E.RECEIVE_GROUP_NEW_MESSAGE,m.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,this._handleNewMessage,this),n.registerWorkflowStep(E.SYNC_SERVER_INFO_AFTER_RE_ONLINE,m.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,this._handleUnreadSyncFinished,this),n.registerWorkflowStep(E.RECEIVE_GROUP_TIPS_NOTIFICATION,m.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,this._handleNewMessage,this);const{InnerEventSubType:{GROUP_AT_TIPS:LA}}=g;g.subscribeInnerEvent(D,this._handleConversationSynced,this),g.subscribeInnerEvent(T,this._handleNewMessage,this),g.subscribeInnerEvent(M,LA,this._handleNewGroupAtTips,this),g.subscribeInnerEvent(P,this._handleMessageDeleted,this),g.subscribeInnerEvent(W,this._handleMessageRevoked,this),g.subscribeInnerEvent(iA,this._handleMessageModified,this),g.subscribeInnerEvent(EA,this._handleConversationUpdated,this),g.subscribeInnerEvent(M,xA,this._handleMessageRead,this),g.subscribeInnerEvent(RA,this._reset,this),g.subscribeInnerEvent(kA,this._dispose,this),s.ssoLog.debug(`${this._name}.init`)}_handleConversationSynced(s){this.updateLocalConversationList({conversationUpdateFieldList:s.conversationUpdateFieldList||[],isFromGetConversations:!0,updateUnreadCount:!0}),this.emitConversationListUpdate()}_handleUnreadSyncFinished(s){const{constants:{WORKFLOW_STEP:n}}=this._core,{conversationUpdateFieldList:g=[],groupTipList:u=[],isUnreadC2CMessage:E}=s.result[n.UNREAD_MESSAGE_SYNC]||{};let m=!1;g.forEach(D=>{const{conversationID:M,unreadCount:T}=D,P=this.getLocalConversation(M);P&&P.unreadCount!==T&&(P.updateUnreadCount({nextUnreadCount:T,isUnreadC2CMessage:E}),m=!0)}),m&&this.emitConversationListUpdate(),this._handleGroupAtTipsSynced(u)}_handleGroupAtTipsSynced(s){var n;for(let g=0;g0&&this._handleNewGroupAtTips({GroupTips:M._groupAtInfoList}),m=!0}m&&this.emitConversationListUpdate()}_handleNewMessage(s){const{conversationUpdateFieldList:n=[],isInstantMessage:g=!0,isUnreadC2CMessage:u=!1,updateUnreadCount:E=!0}=s.result||{};if(n.length===0)return;const{common:{isTopic:m}}=this._core;m(n[0].conversationID)||(this.updateLocalConversationList({conversationUpdateFieldList:n,isInstantMessage:g,isUnreadC2CMessage:u,isFromGetConversations:!1,updateUnreadCount:E}),n.filter(D=>this._isConversationNeedShow(D.conversationID)).length>0&&this.emitConversationListUpdate())}_handleNewGroupAtTips(s){const{GroupTips:n=[]}=s;n.forEach(g=>{const{GroupAtTips:u,MsgBody:E,MsgRandom:m,ClientSeq:D}=g;let M={};u?M=this._convertGroupAtTipsKey(u):E?M=Object.assign({},this._convertGroupAtTipsKey(E)):g.groupAtType&&(M=Object.assign({},g)),M.__random=m,M.__sequence=D,this._groupAtTipsList.push(M)}),console.log(`${this._name}._handleNewGroupAtTips groupAtTipsList: ${JSON.stringify(this._groupAtTipsList)}`),this._updateGroupAtInfoList()}_convertGroupAtTipsKey(s){const{From_Account:n,GroupId:g,MsgSeq:u,GroupAtType:E}=s;return{from:n,groupID:g,sequence:u,groupAtType:E}}_updateGroupAtInfoList(){if(this._groupAtTipsList.length===0)return;const{common:s,OuterConstant:n}=this._core,g=s.getCurrentUserID();let u=!1;this._groupAtTipsList.forEach(E=>{const{groupID:m,from:D}=E;if(D!==g){const M=this.getLocalConversation(`${n.CONV_GROUP}${m}`);M&&(M.updateGroupAtInfoList(E),u=!0)}}),u&&this.emitConversationListUpdate(),this._groupAtTipsList.length=0}_handleMessageDeleted(s){var n,g;console.log(`${this._name}._handleMessageDeleted, conversationID:`,s);const{message:{messageDataHandler:u},OuterConstant:E}=this._core,m=u?.getLocalMessageList(s)||[];let D={};for(let P=(m.length||0)-1;P>=0;P--)if(!m[P].isDeleted&&m[P]._isExcludedFromLastMessage!==!0){D=m[P];break}const M=this.getLocalConversation(s);if(!M)return;let T=!1;M.lastMessage.lastSequence===D.sequence&&M.lastMessage.lastTime===D.time||(!((g=(n=this._core)===null||n===void 0?void 0:n.helper)===null||g===void 0)&&g.isEmpty(D)&&(D=void 0),M.updateLastMessage(D),T=!0),s.startsWith(E.CONV_C2C)&&this.updateUnreadCount(s),T&&(this.emitConversationListUpdate(),console.log(`${this._name}._handleMessageDeleted. update conversationID:${s} with lastMessage:`,M.lastMessage))}_handleMessageRevoked(s){const{messageList:n=[],updateUnreadCount:g=!0}=s;if(console.log(`${this._name}._handleMessageRevoked messageList:${n.length}`),n.length===0)return;let u=null,E=!1;n.forEach(m=>{u=this.getLocalConversation(m.conversationID),u&&(g&&u.reduceUnreadCount()&&(E=!0),u.isLastMessageRevoked({sequence:m.sequence,time:m.time})&&(u.setLastMessageRevoked(!0),u.setLastMessageRevoker(m.revoker),E=!0))}),E&&this.emitConversationListUpdate()}_handleMessageModified(s){const{utils:{isEmpty:n},common:{getMessagePreviewText:g},ssoLog:u}=this._core;u.debug(`${this._name}._handleMessageModified`,JSON.stringify(s));const{conversationID:E,messageList:m}=s,D=this.getLocalConversation(E);if(n(D))return;const{lastMessage:M}=D;if(M){const T=m?.[0]||{};M.lastTime===T.time&&M.lastSequence===T.sequence&&M.version!==T.version&&(M.type=T.type,M.payload=T.payload,M.messageForShow=g(T.type,T.payload),M.cloudCustomData=T.cloudCustomData,M.version=T.version,this.emitConversationListUpdate(),console.log(`${this._name} conversationID:${E} lastMessage updated`))}}_handleConversationUpdated(s){this.emitConversationListUpdate(s?.needSort)}updateLocalConversationList(s){const{isFromGetConversations:n}=s,{newConversationList:g}=this._getTmpConversationListMapping(s);this._sortConversationList(),n||this._updateNewConversationProfile(g),this._core.ssoLog.debug("updateLocalConversationList",` newConversationList: ${g.length}`)}_getTmpConversationListMapping(s){const{OuterConstant:n}=this._core,{conversationUpdateFieldList:g,isFromGetConversations:u,isInstantMessage:E,isUnreadC2CMessage:m=!1,updateUnreadCount:D}=s,M=[],T=g?.length;for(let P=0;P{M[1].isPinned===!0?s(M[1].lastMessage.lastTime)?u.push(M):g.push(M):s(M[1].lastMessage.lastTime)?m.push(M):E.push(M)});const D=g.sort((M,T)=>T[1].lastMessage.lastTime-M[1].lastMessage.lastTime).concat(u).concat(E.sort((M,T)=>T[1].lastMessage.lastTime-M[1].lastMessage.lastTime)).concat(m);this._updateConversationMapFromList(D)}_updateNewConversationProfile(s){if(s.length===0)return;const n=[],g=[],{OuterConstant:{CONV_GROUP:u,CONV_C2C:E}}=this._core;s.forEach(m=>{const{conversationID:D,type:M}=m;if(M===E){const T=D.replace(E,"");n.push(T)}else if(M===u){const T=D.replace(u,"");g.push(T)}}),n.length>0&&this._updateC2CConversation(n),g.length>0&&this._updateGroupConversation(g)}_updateC2CConversation(s){var n;const{OuterConstant:{CONV_C2C:g},appStore:{userStore:u},user:E}=this._core;let m=!1;(n=E.userProfile)===null||n===void 0||n.getUserProfile({userIDList:s}).then(D=>{(D?.data||[]).forEach(M=>{var T;const{userID:P}=M,W=this.getLocalConversation(`${g}${P}`);if(W){const iA=((T=u.getFriend(P))===null||T===void 0?void 0:T.remark)||"";W.remark=iA,W.userProfile=M,m=!0}}),m&&this.emitConversationListUpdate()}).catch(D=>{}),BA.get(s)}_updateGroupConversation(s){return pA(this,void 0,void 0,function*(){const{OuterConstant:{CONV_GROUP:n},appStore:{groupStore:g},utils:{safeStringify:u},ssoLog:E,apiMap:{getGroupProfile:m}}=this._core;let D=!1;try{yield Promise.all(s.map(M=>pA(this,void 0,void 0,function*(){const T=g.getGroup(M),P=this.getLocalConversation(`${n}${M}`);T&&P&&(P.groupProfile=T,D=!0),P&&!P.getProfileCompleted()&&typeof m=="function"&&(yield m({groupID:M}))}))),yA.get(s),D&&this.emitConversationListUpdate()}catch(M){E.debug("_updateGroupConversation",u(M))}})}_handleMessageRead(s){const{OuterConstant:{CONV_C2C:n}}=this._core,{C2cNotifyMsgArray:g=[]}=s||{};g.forEach(u=>{const{To_Account:E,UinPairReadArray:m=[]}=u?.C2cReadedReceipt||{};m?.forEach(D=>{const{LastReadTime:M}=D,T=`${n}${E}`;this._updateConversationReadInfo({conversationID:T,peerReadTime:M}),this._updateMessageListPeerRead({conversationID:T,peerReadTime:M})})})}_updateConversationReadInfo(s){const{appStore:n,utils:{isEmpty:g},common:{getCurrentUserID:u}}=this._core,{conversationID:E,peerReadTime:m}=s,D=n.conversationStore.getConversationMap();if(D.has(E)){const M=D.get(E);M.peerReadTime=m;const T=M?.lastMessage;g(T)||T.fromAccount===u()&&T.lastTime<=m&&!T.isPeerRead&&(T.isPeerRead=!0,n.conversationStore.updateConversation(E,{lastMessage:T}))}}_updateMessageListPeerRead(s){const{notificationCenter:n,OuterEvent:g,message:u}=this._core,{conversationID:E,peerReadTime:m}=s,D=u.messageDataHandler.getLocalMessageList(E),M=u.messageDataHandler.getSparseMessageList(E),T=[];D.forEach(P=>{P.time<=m&&!P.isPeerRead&&P.flow==="out"&&(P.isPeerRead=!0,T.push(P))}),M.forEach(P=>{P.time<=m&&!P.isPeerRead&&P.flow==="out"&&(P.isPeerRead=!0,T.push(P))}),n.emitOuterEvent(g.MESSAGE_READ_BY_PEER,{name:g.MESSAGE_READ_BY_PEER,data:T})}_isConversationNeedShow(s){var n,g;const{OuterConstant:{CONV_GROUP:u,GRP_ROOM:E,GRP_LIVE:m},utils:{isUndefined:D}}=this._core,M=this.getLocalConversation(s);if(D(M))return!0;const T=M.type===u&&((n=M.groupProfile)===null||n===void 0?void 0:n.type)===E,P=M.type===u&&((g=M.groupProfile)===null||g===void 0?void 0:g.type)===m;return!(T||P)}updateUnreadCount(s,n=!0){var g,u;let E=!1;const m=this.getLocalConversation(s),D=(u=(g=this._core)===null||g===void 0?void 0:g.message.messageDataHandler)===null||u===void 0?void 0:u.getLocalMessageList(s);if(!m)return E;const M=m.unreadCount,T=D?.filter(P=>!P.isRead&&!P._onlineOnlyFlag&&!P.isDeleted).length;return console.log(`${this._name}._updateUnreadCount conversationID:${s} currentUnreadCount:${M} newUnreadCount:${T}`),M!==T&&(m.unreadCount=T,E=!0,n===!0&&this.emitConversationListUpdate()),E}emitConversationListUpdate(s=!1){var n,g;s&&this._sortConversationList();const{OuterEvent:{CONVERSATION_LIST_UPDATED:u},conversation:E}=this._core,m=this.getLocalConversationList();this._emitEvent({name:u,data:m,isSyncCompleted:(g=(n=E?.syncConversationHandler)===null||n===void 0?void 0:n.isSyncCompleted)===null||g===void 0?void 0:g.call(n)}),this._emitTotalUnreadCountUpdate()}_emitTotalUnreadCountUpdate(){var s;const n=this.getTotalUnreadMessageCount();this._totalUnreadCount!==n&&(this._core.ssoLog.debug("_emitTotalUnreadCountUpdate",` from ${this._totalUnreadCount} to ${n}`),this._totalUnreadCount=n,this._emitEvent({name:(s=this._core)===null||s===void 0?void 0:s.OuterEvent.TOTAL_UNREAD_MESSAGE_COUNT_UPDATED,data:n}))}_emitEvent(s){var n;(n=this._core)===null||n===void 0||n.notificationCenter.emitOuterEvent(s.name,s)}getTotalUnreadMessageCount(){const{OuterConstant:s,utils:{isEmpty:n}}=this._core,g=this.getLocalConversationList();let u=0;return g.forEach(E=>{E.type!==s.CONV_SYSTEM&&(n(E.messageRemindType)||E.messageRemindType===s.MSG_REMIND_ACPT_AND_NOTE)&&(u+=E.unreadCount)}),u}getLocalConversationList(){return[...this._conversationStore.getConversationMap().values()].filter(s=>this._isConversationNeedShow(s.conversationID))}hasLocalConversation(s){return this._conversationStore.getConversationMap().has(s)}getLocalConversation(s){return this._conversationStore.getConversationMap().get(s)}setLocalConversation(s,n){return this._conversationStore.getConversationMap().set(s,n)}deleteLocalConversation(s){this._conversationStore.getConversationMap().delete(s)}_updateConversationMapFromList(s){this._clearConversationMap();for(const[n,g]of s)this.setLocalConversation(n,g)}_clearConversationMap(){this._conversationStore.getConversationMap().clear()}patchMessageRemindType(s,n){let g=!1;s.forEach(u=>{const E=this.getLocalConversation(u);E?.messageRemindType!==n&&(E.messageRemindType=n,g=!0)}),console.log(`${this._name}.patchMessageRemindType conversationIDList:${s} messageRemindType:${n} hasUpdated:${g}`),g&&this.emitConversationListUpdate()}markMessageAsRead(s){const{message:{messageDataHandler:n}}=this._core,{conversationID:g,lastReadTime:u=0,lastReadSequence:E=0}=s,m=n?.getLocalMessageList(g);if(m.length===0)return;const{length:D}=m;for(let M=D-1;M>=0;M--){const T=m[M],P=u&&T.time>u,W=E&&T.sequence>E;if(!P&&!W){if(T.flow==="in"&&T.isRead)break;T.setIsRead(!0)}}}appendToPinnedConversation(s){const n=[...this._conversationStore.getConversationMap().entries()],g=n.findIndex(u=>u[1].isPinned===!1);n.splice(g,0,[s.conversationID,s]),this._updateConversationMapFromList(n),this.emitConversationListUpdate()}_reset(){this._clearConversationMap(),this._totalUnreadCount=0,this._groupAtTipsList=[]}_dispose(){const{notificationCenter:s,InnerEvent:{NEW_MESSAGE:n,MESSAGE_DELETED:g,MESSAGE_REVOKED:u,MESSAGE_MODIFIED:E,CONVERSATION_UPDATED:m,LOGOUT:D,DESTROY:M,SYNC_CONVERSATION_LIST:T}}=this._core,{InnerEventSubType:{GROUP_AT_TIPS:P}}=s;s.unSubscribeInnerEvent(n,this._handleNewMessage,this),s.unSubscribeInnerEvent(n,P,this._handleNewGroupAtTips,this),s.unSubscribeInnerEvent(g,this._handleMessageDeleted,this),s.unSubscribeInnerEvent(u,this._handleMessageRevoked,this),s.unSubscribeInnerEvent(E,this._handleMessageModified,this),s.unSubscribeInnerEvent(m,this._handleConversationUpdated,this),s.unSubscribeInnerEvent(T,this._handleConversationSynced,this),s.unSubscribeInnerEvent(D,this._reset,this),s.unSubscribeInnerEvent(M,this._dispose,this)}},zA=new class{constructor(){this._name="GetConversationList"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"getConversationList",context:this})}getConversationList(s){return pA(this,void 0,void 0,function*(){return{code:0,data:{conversationList:this._getConversationList(s),isSyncCompleted:this._core.conversation.syncConversationHandler.isSyncCompleted()}}})}_getConversationList(s){const{utils:{isUndefined:n,isArray:g,isPlainObject:u}}=this._core;if(n(s))return NA.getLocalConversationList();if(g(s))return s.length===0?[]:NA.getLocalConversationList().filter(E=>s.includes(E.conversationID));if(u(s)){const{type:E,markType:m,groupName:D,hasUnreadCount:M,hasGroupAtInfo:T}=s;return NA.getLocalConversationList().filter(P=>this._filterType(P,E)&&this._filterMarkType(P,m)&&this._filterGroupName(P,D)&&this._filterUnreadCount(P,M)&&this._filterGroupAtInfo(P,T))}return[]}_filterType(s,n){const{OuterConstant:g}=this._core;return n!==g.CONV_C2C&&n!==g.CONV_GROUP||s.type===n}_filterGroupName(s,n){const{utils:{isString:g}}=this._core;return!g(n)||(n===""?s.conversationGroupList.length===0:s.conversationGroupList.includes(n))}_filterMarkType(s,n){const{utils:{isNumber:g}}=this._core;return!g(n)||(n===0?s.markList.length===0:s.markList.includes(n))}_filterUnreadCount(s,n){let g=!0;return n===!0?g=s.unreadCount>=1:n===!1&&(g=s.unreadCount===0),g}_filterGroupAtInfo(s,n){let g=!0;return n===!0?g=s.groupAtInfoList.length>=1:n===!1&&(g=s.groupAtInfoList.length===0),g}},we=new class{constructor(){this._name="GetConversationProfile"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"getConversationProfile",context:this})}getConversationProfile(s){return pA(this,void 0,void 0,function*(){const{OuterConstant:{CONV_C2C:n,CONV_GROUP:g,GRP_AVCHATROOM:u},appStore:{groupStore:E},utils:{isEmpty:m}}=this._core,D={code:0,data:{}};let M=NA.getLocalConversation(s);if(ks(s))return D.data.conversation=M,D;let T=!1;const P=Qt(s)?n:g;if(m(M)&&(T=!0,M=new ht({conversationID:s,type:P})),console.log(`${this._name}.getConversationProfile conversationID:${s} isNewConversation:${T}`),D.data.conversation=M,M?.getProfileCompleted())return D;if(P===n){const W=s.replace(n,"");yield this._handleC2CConversation(M,W),T&&(yield BA.get([W]))}if(P===g){const W=s.replace(g,"");if(!E.getGroup(W))return D;yield this._handleGroupConversation(M,W),T&&M.groupProfile.type!==u&&(yield yA.get([W]))}return D})}_handleC2CConversation(s,n){return pA(this,void 0,void 0,function*(){var g,u;const{user:E,helper:m,utils:{isEmpty:D},appStore:{conversationStore:M,userStore:T}}=this._core,{conversationID:P}=s,W=yield(g=E.userProfile)===null||g===void 0?void 0:g.getUserProfile({userIDList:[n]});if(W?.data.length===0)throw new m.ChatError({code:Qa.USER_OR_GRP_NOT_FOUND});s.userProfile=W?.data[0];const iA=(u=T.getFriend(n))===null||u===void 0?void 0:u.remark;D(iA)||s.remark===iA||(s.remark=iA),s.setProfileCompleted();const EA=NA.hasLocalConversation(P);console.log(`${this._name}._handleC2CConversation conversationID:${P} hasLocalConversation: ${EA}`),EA?M.updateConversation(P,s):NA.appendToPinnedConversation(s)})}_handleGroupConversation(s,n){return pA(this,void 0,void 0,function*(){const{apiMap:{getGroupProfile:g},appStore:{conversationStore:u}}=this._core,{conversationID:E}=s,m=yield g({groupID:n});s.groupProfile=m?.data.group,s.setProfileCompleted();const D=NA.hasLocalConversation(E);console.log(`${this._name}._handleGroupConversation conversationID:${E} hasLocalConversation: ${D}`),D?u.updateConversation(E,s):NA.appendToPinnedConversation(s)})}},le=new class{init(s){const{helper:n}=s;n.registerApi({apiName:"getTotalUnreadMessageCount",context:this})}getTotalUnreadMessageCount(){return NA.getTotalUnreadMessageCount()}},Ne=new class{constructor(){this._serverGroupConversationLastReadSeqMap=new Map,this._name="SetMessageRead"}init(s){this._core=s;const{helper:n,common:{isTopic:g},notificationCenter:u,InnerEvent:{MESSAGE_PUSH:E},InnerEventSubType:{ALL_MESSAGE_READ:m}}=s;n.registerApi({apiName:"setMessageRead",context:this,matcher:D=>!g(D[0].conversationID)}),n.registerApi({apiName:"setAllMessageRead",context:this}),u.subscribeInnerEvent(E,m,this._handleAllMessageRead,this)}handleC2CMessageReadSync(s){const{helper:{isEmpty:n},OuterConstant:g}=this._core;s.forEach(u=>{const{ReadC2cMsgNotify:E}=u;if(!n(E)){const{UinPairReadArray:m=[]}=E;m.forEach(D=>{const{From_Account:M,LastReadTime:T}=D,P=`${g.CONV_C2C}${M}`;console.log(`${this._name}.handleC2CMessageReadSync conversationID:${P} lastReadTime:${T}`),NA.markMessageAsRead({conversationID:P,lastReadTime:T}),NA.updateUnreadCount(P)})}})}handleGroupMessageReadSync(s){const{OuterConstant:n,utils:{isUndefined:g}}=this._core;s.forEach(u=>{const{GroupReadInfoArray:E}=u.MsgBody;g(E)||E.forEach(m=>{const{GroupId:D,LastReadMsgSeq:M}=m,T=`${n.CONV_GROUP}${D}`;console.log(`${this._name}.handleGroupMessageReadSync conversationID:${T} lastReadSequence:${M}`),NA.markMessageAsRead({conversationID:T,lastReadSequence:M}),NA.updateUnreadCount(T),this._clearGroupAtInfoList(T)})})}setMessageRead(s){return pA(this,void 0,void 0,function*(){var n,g;const{OuterConstant:u}=this._core,{conversationID:E}=s,m={code:0,data:{}},D=NA.getLocalConversation(E);let M=`${this._name}.setMessageRead conversationID:${E} unreadCount:${D?.unreadCount||0}`;if(m.successLog={message:M},!D)return m;const T=!(!((g=(n=this._core)===null||n===void 0?void 0:n.helper)===null||g===void 0)&&g.isEmpty(D.groupAtInfoList));if(D.type===u.CONV_GROUP&&T&&this._deleteGroupAtTips(E),D.unreadCount===0)return m;const{helper:{ChatError:P}}=this._core;try{if(D.type===u.CONV_C2C){const W=this._getLocalMessageMaxTime(D);M+=`lastMessageTime:${W}`,yield this._setC2CMessageRead(E,W)}if(D.type===u.CONV_GROUP){const W=this._getLocalMessageMaxSequence(D);M+=`lastMessageSequence:${W}`,yield this._setGroupMessageRead(E,W)}}catch(W){const{errorCode:iA,errorInfo:EA}=W;throw new P({functionName:"setMessageRead",code:iA,message:EA,moreMessage:M})}return D.type===u.CONV_SYSTEM&&(D.unreadCount=0),NA.emitConversationListUpdate(),Object.assign(Object.assign({},m),{successLog:{message:M}})})}setAllMessageRead(){return pA(this,arguments,void 0,function*(s={}){const{OuterConstant:{READ_ALL_MSG:n},utils:{safeStringify:g}}=this._core;let u=`scope:${s.scope}`;s.scope||(s.scope=n);const{scope:E}=s,m=this._generateSetAllMessageReadRequestData(E);if(m.allC2CMessageReadStatus===ea&&m.groupMessageReadInfoList.length===0)return{code:0};try{const D=yield function(M){return pA(this,void 0,void 0,function*(){const{allC2CMessageReadStatus:T,groupMessageReadInfoList:P}=M,W={C2CReadAllMsg:T,GroupReadInfo:P};return ho.core.common.buildAndSendPacket({servcmd:"openim.read_all_unread_msg",data:W})})}(m);if(D){const{GroupReadInfoArray:M,C2CReadAllMsg:T}=D,P=this._parseGroupReadInfo(M);this._updateAllConversationReadStatus({allC2CMessageReadStatus:T})>0&&NA.emitConversationListUpdate(),u+=`failureGroupInfoList:${g(P)}`}return{code:0,successLog:{message:u}}}catch(D){const{errorCode:M}=D;throw new this._core.helper.ChatError({functionName:"setAllMessageRead",code:M,moreMessage:u})}})}_handleAllMessageRead(s){const{GroupReadInfoArray:n,C2CReadAllMsg:g}=s;this._parseGroupReadInfo(n),this._updateAllConversationReadStatus({allC2CMessageReadStatus:g})>0&&NA.emitConversationListUpdate()}_updateAllConversationReadStatus(s){const{OuterConstant:{CONV_C2C:n,CONV_GROUP:g},appStore:u}=this._core,E=u.conversationStore.getConversationMap(),{allC2CMessageReadStatus:m}=s;let D=0;for(const[M,T]of E)if(T.unreadCount>=1){if(m===H&&T.type===n){const P=this._getLocalMessageMaxTime(T);NA.markMessageAsRead({conversationID:M,lastReadTime:P})}else if(T.type===g){const P=M.replace(g,"");if(this._serverGroupConversationLastReadSeqMap.has(P)){const W=this._serverGroupConversationLastReadSeqMap.get(P);NA.markMessageAsRead({conversationID:M,lastReadSequence:W})}}NA.updateUnreadCount(M,!1)&&(D+=1)}return D}_generateSetAllMessageReadRequestData(s){const{OuterConstant:{CONV_C2C:n,CONV_GROUP:g,READ_ALL_C2C_MSG:u},appStore:E}=this._core,m={allC2CMessageReadStatus:ea,groupMessageReadInfoList:[]},D=E.conversationStore.getConversationMap();for(const[,M]of D){const{type:T,unreadCount:P}=M;if(this._shouldSetAllMessageRead({scope:s,type:T,unreadCount:P})){if(T===n&&m.allC2CMessageReadStatus===ea){if(m.allC2CMessageReadStatus=H,s===u)break}else if(T===g){const W=this._getLocalMessageMaxSequence(M),{groupID:iA}=M.groupProfile;m.groupMessageReadInfoList.push({GroupId:iA,MsgSeq:W})}}}return m}_parseGroupReadInfo(s){const{utils:{isUndefined:n}}=this._core,g=[];return s?.forEach(u=>{const{GroupId:E,MsgSeq:m,RetCode:D,LastReadMsgSeq:M}=u;n(D)?this._serverGroupConversationLastReadSeqMap.set(E,M):(this._serverGroupConversationLastReadSeqMap.set(E,m),D!==0&&g.push(`${E}-${m}-${D}`))}),g}_deleteGroupAtTips(s){return pA(this,void 0,void 0,function*(){console.log(`${this._name}._deleteGroupAtTips conversationID:${s}`);const n=NA.getLocalConversation(s);if(!n)return;const g=n?.groupAtInfoList||[];if(g.length!==0)try{const{common:{getCurrentUserID:u,isCommunity:E},OuterConstant:{CONV_GROUP:m,CONV_AT_ALL:D}}=this._core;let M=[...g];if(E({groupID:s.replace(m,"")})&&(M=g.filter(P=>!P.atTypeArray.includes(D)),M.length===0))return void this._clearGroupAtInfoList(s,!1);const T=M.map(P=>({From_Account:P.from,To_Account:u(),MsgSeq:P.__sequence,MsgRandom:P.__random,GroupId:P.groupID}));yield function(P,W){return pA(this,void 0,void 0,function*(){const{messageListToDelete:iA}=P,EA={DelMsgList:iA};return W.common.buildAndSendPacket({servcmd:"openim.deletemsg",data:EA})})}({messageListToDelete:T},this._core),console.log(`${this._name}._deleteGroupAtTips ok. count:${g.length}`),this._clearGroupAtInfoList(s)}catch(u){console.error(`${this._name}._deleteGroupAtTips fail:`,u)}})}_clearGroupAtInfoList(s,n=!0){const g=NA.getLocalConversation(s);g&&(g.groupAtInfoList.length>0&&(g.clearGroupAtInfoList(),console.log(`${this._name}._clearGroupAtInfoList conversationID:${s} needEmitConversationUpdate:${n}`)),n&&NA.emitConversationListUpdate())}_getLocalMessageMaxTime(s){var n;const{conversationID:g}=s,u=this._core.message.messageDataHandler.getLocalMessageList(g),E=Math.max(...u.map(D=>D.time));let m=((n=s?.lastMessage)===null||n===void 0?void 0:n.lastTime)||0;return E>m&&(console.log(`${this._name}._getLocalMessageMaxTime update lastMessageTime from ${m} to ${E}`),m=E),m}_getLocalMessageMaxSequence(s){var n;const{conversationID:g}=s,u=this._core.message.messageDataHandler.getLocalMessageList(g),E=Math.max(...u.map(D=>D.sequence));let m=((n=s?.lastMessage)===null||n===void 0?void 0:n.lastSequence)||0;return E>m&&(console.log(`${this._name}._getLocalMessageMaxSequence update lastMessageSequence from ${m} to ${E}`),m=E),m}_setC2CMessageRead(s,n){return pA(this,void 0,void 0,function*(){try{yield function(g,u){return pA(this,void 0,void 0,function*(){return u.common.buildAndSendPacket({servcmd:"openim.msgreaded",data:g})})}({C2CMsgReaded:{Cookie:"",C2CMsgReadedItem:[{To_Account:s.replace("C2C",""),LastedMsgTime:n,Receipt:1}]}},this._core),console.log(`${this._name}._setC2CMessageRead ok, lastReadTime:${n}`),NA.markMessageAsRead({conversationID:s,lastReadTime:n}),NA.updateUnreadCount(s)}catch(g){throw console.warn(`${this._name}._setC2CMessageRead fail:`,g),g}})}_setGroupMessageRead(s,n){return pA(this,void 0,void 0,function*(){try{yield function(g,u){return pA(this,void 0,void 0,function*(){const{groupID:E,lastMessageSequence:m}=g,D={GroupId:E,MsgReadedSeq:m};return u.common.buildAndSendPacket({servcmd:"group_open_http_svc.msg_read_report",data:D})})}({groupID:s.replace("GROUP",""),lastMessageSequence:n},this._core),console.log(`${this._name}._setGroupMessageRead ok, lastReadSequence:${n}`),NA.markMessageAsRead({conversationID:s,lastReadSequence:n}),NA.updateUnreadCount(s)}catch(g){throw console.warn(`${this._name}._setGroupMessageRead fail:`,g),g}})}_shouldSetAllMessageRead(s){const{OuterConstant:{CONV_C2C:n,CONV_GROUP:g,READ_ALL_MSG:u,READ_ALL_C2C_MSG:E,READ_ALL_GROUP_MSG:m}}=this._core,{type:D,scope:M,unreadCount:T}=s;return!(T<=0)&&(!(D!==n||![u,E].includes(M))||!(D!==g||![u,m].includes(M)))}},ge=new class{constructor(){this._name="PinConversation"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"pinConversation",context:this})}handleConversationPinned(s,n){const{utils:{isArray:g}}=this._core;if(!g(s))return;const{OuterConstant:u}=this._core;let E=!1;s.forEach(m=>{const{Type:D,Peer_Account:M,GroupId:T}=m;let P;D===1?P=NA.getLocalConversation(`${u.CONV_C2C}${M}`):D===2&&(P=NA.getLocalConversation(`${u.CONV_GROUP}${T}`)),P&&(console.log(`${this._name}.handleConversationPinned conversationID:${P.conversationID} localPinned:${P.isPinned} remotePinned:${n}`),n&&!P.isPinned&&(P.isPinned=!0,E=!0),!n&&P.isPinned&&(P.isPinned=!1,E=!0))}),E&&NA.emitConversationListUpdate(!0)}pinConversation(s){return pA(this,void 0,void 0,function*(){const{OuterConstant:n,common:g,helper:{ChatError:u}}=this._core,{conversationID:E,isPinned:m}=s,D={code:0,data:{conversationID:E}},M=NA.getLocalConversation(E);if(M&&M.isPinned===m)return D;if(ks(E))return M&&(M.isPinned=m),NA.emitConversationListUpdate(!0),D;const T=`conversationID:${E} isPinned:${m}`;try{let P=null;if(Qt(E)?P={Type:1,To_Account:E.replace(n.CONV_C2C,"")}:ug(E)&&(P={Type:2,GroupId:E.replace(n.CONV_GROUP,"")}),yield function(iA,EA){return pA(this,void 0,void 0,function*(){const{fromAccount:RA,operationType:kA,itemList:xA}=iA,LA={From_Account:RA,OperationType:kA,RecentContactItem:xA};return EA.common.buildAndSendPacket({servcmd:"recentcontact.top",data:LA})})}({fromAccount:g.getCurrentUserID(),operationType:m===!0?1:2,itemList:[P]},this._core)){if(M)M.isPinned!==m&&(M.isPinned=m);else{const iA=new ht({conversationID:E,type:Qt(E)?n.CONV_C2C:n.CONV_GROUP,isPinned:m});NA.setLocalConversation(E,iA)}NA.emitConversationListUpdate(!0)}return Object.assign(Object.assign({},D),{successLog:{message:T}})}catch(P){const{errorCode:W,errorInfo:iA}=P;throw new u({functionName:"pinConversation",code:W,message:iA,moreMessage:T})}})}},Ue=new class{constructor(){this._name="DeleteConversation"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"deleteConversation",context:this})}handleConversationDeleted(s){const{utils:{isArray:n}}=this._core;if(!n(s))return;const{OuterConstant:g}=this._core,u=[];s.forEach(E=>{const{Type:m,Peer_Account:D,GroupId:M}=E;m===1&&u.push(`${g.CONV_C2C}${D}`),m===2&&u.push(`${g.CONV_GROUP}${M}`)}),console.log(`${this._name}.handleConversationDeleted conversationIDList:${u}`),this._deleteLocalConversationList(u)}deleteConversation(s){return pA(this,void 0,void 0,function*(){const{utils:{isString:n}}=this._core;if(n(s))return this._deleteConversation({conversationIDList:[s],flag:ga.ONLY_CONVERSATIONID});const g=Object.assign({},s);return g.conversationIDList.length>100&&(g.conversationIDList=g.conversationIDList.slice(0,100)),this._deleteConversation(g)})}_deleteConversation(s){return pA(this,void 0,void 0,function*(){const{conversationIDList:n,clearHistoryMessage:g=!0,flag:u=0}=s,{helper:{ChatError:E}}=this._core,m=`conversationIDList:${n} clearHistoryMessage:${g}`;try{const D=yield Promise.all([this._deleteConversationFromLocal(n),this._deleteConversationFromServer(n,g)]),M=[...D[0],...D[1]];if(M.length===0)throw new this._core.helper.ChatError({code:Qa.CONV_NOT_FOUND});return{code:0,data:u===ga.ONLY_CONVERSATIONID?{conversationID:M[0]}:{conversationIDList:M},successLog:{message:m}}}catch(D){const{errorCode:M,errorInfo:T}=D;throw new E({code:M,message:T,moreMessage:m})}})}_deleteConversationFromLocal(s){const{OuterConstant:n}=this._core;return s.filter(g=>{var u;if(!NA.hasLocalConversation(g))return!1;const E=(u=NA.getLocalConversation(g))===null||u===void 0?void 0:u.type;return E!==n.CONV_GROUP||this._hasLocalGroup(g)?E===n.CONV_SYSTEM&&(this._deleteLocalConversation(g),!0):(this._deleteLocalConversation(g),!0)})}_deleteConversationFromServer(s,n){return pA(this,void 0,void 0,function*(){const{OuterConstant:g,common:u}=this._core,E={fromAccount:u.getCurrentUserID(),conversationList:[],clearHistoryMessage:n?1:0};if(s.forEach(D=>{var M;if(NA.hasLocalConversation(D)){const T=((M=NA.getLocalConversation(D))===null||M===void 0?void 0:M.type)||"",P=D.replace(T,"");T===g.CONV_C2C?E.conversationList.push({To_Account:P,Type:1}):T===g.CONV_GROUP&&this._hasLocalGroup(D)&&E.conversationList.push({ToGroupid:P,Type:2})}}),E.conversationList.length===0)return[];const m=yield function(D,M){return pA(this,void 0,void 0,function*(){const{fromAccount:T,conversationList:P,clearHistoryMessage:W}=D,iA={From_Account:T,ContactItem:P,ClearRamble:W};return M.common.buildAndSendPacket({servcmd:"recentcontact.batch_delete",data:iA})})}(E,this._core);if(m){const{ResultItem:D=[]}=m,M=[];return D.length>0&&D.forEach(T=>{if(T.ResultCode===0){const P=T.Type===1?`${g.CONV_C2C}${T.To_Account}`:`${g.CONV_GROUP}${T.ToGroupid}`;M.push(P)}}),this._deleteLocalConversationList(M),M}return[]})}_deleteLocalConversationList(s){let n=!1;s.forEach(g=>{NA.hasLocalConversation(g)&&(this._deleteLocalConversation(g,!1),n=!0)}),console.log(`${this._name}._deleteLocalConversationList isUpdate:${n}`),n&&NA.emitConversationListUpdate()}_deleteLocalConversation(s,n=!0){const g=NA.hasLocalConversation(s);console.log(`${this._name}._deleteLocalConversation conversationID:${s} has:${g}`),g&&(NA.deleteLocalConversation(s),this._deleteConversationLocalMessage(s),n&&NA.emitConversationListUpdate())}_hasLocalGroup(s){const{OuterConstant:{CONV_GROUP:n},appStore:{groupStore:g}}=this._core,u=s.replace(n,"");return!!g.getGroup(u)}_deleteConversationLocalMessage(s){console.log(`${this._name}._deleteConversationLocalMessage conversationID:${s}`),this._core.message.messageDataHandler.deleteConversationMessageList(s),this._core.message.messageHistory.completedHistoryConversations.delete(s)}},vt=new class{constructor(){this._name="SetConversationDraft"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"setConversationDraft",context:this})}setConversationDraft(s){return pA(this,void 0,void 0,function*(){const{conversationID:n,draftText:g}=s;if(console.log(`${this._name} conversationID:${n} draftText:${g}`),!NA.hasLocalConversation(n))throw new this._core.helper.ChatError({code:Qa.CONV_NOT_FOUND});const u=NA.getLocalConversation(n);return u?.setDraftText(g),NA.emitConversationListUpdate(),{code:0,data:{conversation:u}}})}},Wt=new class{constructor(){this._name="SetC2CMessageRemindType"}init(s){this._core=s}set(s,n){return pA(this,void 0,void 0,function*(){s.length>30&&(console.warn(`${this._name}.set userIDList length:${s.length} exceeds limit 30`),s.splice(30));const g=function(){const{MSG_REMIND_ACPT_AND_NOTE:P,MSG_REMIND_DISCARD:W,MSG_REMIND_ACPT_NOT_NOTE:iA}=ho.core.OuterConstant;return{[P]:0,[W]:1,[iA]:2}}()[n],u=yield function(P,W){return pA(this,void 0,void 0,function*(){const{userIDList:iA,receiveMessageOption:EA}=P,RA={Peer_Account:iA,Mute_Notifications:EA};return W.common.buildAndSendPacket({servcmd:"openim.set_c2c_peer_mute_notifications",data:RA})})}({userIDList:s,receiveMessageOption:g},this._core),{ErrorList:E=[]}=u||{},m=[];E.forEach(P=>{const{Peer_Account:W,ErrorCode:iA}=P;m.push({userID:W,code:iA});const EA=s.indexOf(W);EA>-1&&s.splice(EA,1)});const D=[],M=[],{OuterConstant:T}=this._core;return s.forEach(P=>{M.push(`${T.CONV_C2C}${P}`),D.push({userID:P})}),NA.patchMessageRemindType(M,n),{code:0,data:{successUserIDList:D,failureUserIDList:m}}})}},ci=new class{constructor(){this._name="SetGroupMessageRemindType"}init(s){this._core=s}set(s,n){return pA(this,void 0,void 0,function*(){const{common:{getCurrentUserID:g,isTopic:u},OuterConstant:E}=this._core;if(yield function(m,D){return pA(this,void 0,void 0,function*(){const{groupID:M,userID:T,receiveMessageOption:P}=m,W={GroupId:M,Member_Account:T,MsgFlag:P};return D.common.buildAndSendPacket({servcmd:"group_open_http_svc.modify_group_member_info",data:W})})}({groupID:s,userID:g(),receiveMessageOption:n},this._core),!u(s)){const m=`${E.CONV_GROUP}${s}`;NA.patchMessageRemindType([m],n)}return{code:0,data:{groupID:s,messageRemindType:n}}})}},Dt=new class{constructor(){this._name="SetMessageRemindType"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"setMessageRemindType",context:this})}handleC2CMessageRemindTypeSync(s){const{helper:{isEmpty:n},OuterConstant:g,ssoLog:u}=this._core;s.forEach(E=>{const{MuteNotificationsSync:m}=E;if(!n(m)){const{To_Account:D,MuteNotifications:M}=m,T=D.map(W=>`${g.CONV_C2C}${W}`),P=Wi(M);u.debug(`${this._name}.handleC2CMessageRemindTypeSync conversationIDList:${T} messageRemindType:${P}`),NA.patchMessageRemindType(T,P)}})}setMessageRemindType(s){return pA(this,void 0,void 0,function*(){const n="setMessageRemindType",{groupID:g,userIDList:u,messageRemindType:E}=s,{helper:m,utils:{isUndefined:D},ssoLog:M}=this._core;try{if(!D(g))return M.debug(`${this._name}.${n} groupID:${g} messageRemindType:${E}`),yield ci.set(g,E);if(!D(u))return M.debug(`${this._name}.${n} userIDList:${u} messageRemindType:${E}`),yield Wt.set(u,E);throw new m.ChatError({functionName:n,message:"userIDList or groupID is required"})}catch(T){throw new m.ChatError({functionName:n,code:T?.errorCode,message:T?.errorInfo,moreMessage:`groupID:${g} userIDList:${u} messageRemindType:${E}`})}})}},Bi=new class{init(s){s.ssoLog.debug("ConversationAction.init"),this._core=s,zA.init(s),we.init(s),le.init(s),Ne.init(s),ge.init(s),Ue.init(s),vt.init(s),Dt.init(s);const{notificationCenter:n,InnerEvent:{MESSAGE_PUSH:g,DESTROY:u}}=this._core,{InnerEventSubType:{CONV_MODIFIED:E,C2C_MESSAGE_READ_SYNC:m,GROUP_MESSAGE_READ_SYNC:D,C2C_REMIND_TYPE_SYNC:M}}=n;n.subscribeInnerEvent(g,E,this._onConversationModified,this),n.subscribeInnerEvent(g,m,this._onC2CMessageReadSync,this),n.subscribeInnerEvent(g,M,this._onC2CMessageRemindTypeSync,this),n.subscribeInnerEvent(g,D,this._onGroupMessageReadSync,this),n.subscribeInnerEvent(u,this._dispose,this)}_onConversationModified(s){const{constants:{ConvModifyPushType:n}}=this._core,{RecentContactMod:g=[]}=s;g.forEach(u=>{const{PushType:E}=u;if(E===n.CONV_DELETED){const{RecentContactList:m}=u.RecentContactDeleteItem;Ue.handleConversationDeleted(m)}if(E===n.CONV_PINED){const{RecentContactList:m}=u.RecentContactTopItem;ge.handleConversationPinned(m,!0)}if(E===n.CONV_UNPINED){const{RecentContactList:m}=u.RecentContactTopItem;ge.handleConversationPinned(m,!1)}})}_onC2CMessageReadSync(s){const{C2cNotifyMsgArray:n=[]}=s;Ne.handleC2CMessageReadSync(n)}_onC2CMessageRemindTypeSync(s){const{C2cNotifyMsgArray:n=[]}=s;Dt.handleC2CMessageRemindTypeSync(n)}_onGroupMessageReadSync(s){const{GroupTips:n=[]}=s;Ne.handleGroupMessageReadSync(n)}_dispose(){const{notificationCenter:s,InnerEvent:{MESSAGE_PUSH:n,DESTROY:g}}=this._core,{InnerEventSubType:{CONV_MODIFIED:u,C2C_MESSAGE_READ_SYNC:E,GROUP_MESSAGE_READ_SYNC:m,C2C_REMIND_TYPE_SYNC:D}}=s;s.unSubscribeInnerEvent(n,u,this._onConversationModified,this),s.unSubscribeInnerEvent(n,E,this._onC2CMessageReadSync,this),s.unSubscribeInnerEvent(n,D,this._onC2CMessageRemindTypeSync,this),s.unSubscribeInnerEvent(n,m,this._onGroupMessageReadSync,this),s.unSubscribeInnerEvent(g,this._dispose,this)}},eo=new class{init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"setAllReceiveMessageOpt",context:this})}setAllReceiveMessageOpt(s){return pA(this,void 0,void 0,function*(){try{const{OuterConstant:{MSG_REMIND_ACPT_NOT_NOTE:n}}=this._core,{messageRemindType:g=n,isRepeated:u=!0}=s,{startTime:E=0,endTime:m=0}=this._calcStartAndEndTime(s),D=yield function(M){return pA(this,void 0,void 0,function*(){const{common:T}=ho.core,{startTime:P,endTime:W,isRepeated:iA,messageRemindType:EA}=M,RA={StartTime:P,EndTime:W,IsRepeated:iA,Level:EA};return T.buildAndSendPacket({servcmd:"im_msg_db_logic.ws_set_do_not_disturb",data:RA})})}({messageRemindType:this._getType(g),startTime:E,endTime:m,isRepeated:u?is.ON:is.OFF});return{code:0,data:{errorCode:D.ErrorCode,errorInfo:D.ErrorInfo}}}catch(n){oc("setAllReceiveMessageOpt",n)}})}_calcStartAndEndTime(s){const{startHour:n=0,startMinute:g=0,startSecond:u=0,duration:E=0,isRepeated:m=!0}=s,D=new Date,M=new Date(D.getFullYear(),D.getMonth(),D.getDate(),n,g,u),T=Math.round(M.getTime()/1e3);let P=T+E;return m&&E>=86400&&(P=T+86400),{startTime:T,endTime:P}}_getType(s){const{OuterConstant:n}=this._core;return{[n.MSG_REMIND_ACPT_AND_NOTE]:0,[n.MSG_REMIND_DISCARD]:1,[n.MSG_REMIND_ACPT_NOT_NOTE]:2}[s]}},Is=new class{init(s){this._core=s;const{helper:n,notificationCenter:g,InnerEvent:u}=s;n.registerApi({apiName:"getAllReceiveMessageOpt",context:this}),g.subscribeInnerEvent(u.MESSAGE_PUSH,g.InnerEventSubType.ALL_RECEIVE_MESSAGE_OPTION,this.onAllReceiveMsgOptionNotify,this)}onAllReceiveMsgOptionNotify(s){const n=this._handleResult(s),{notificationCenter:g,OuterEvent:{ALL_RECEIVE_MESSAGE_OPT_UPDATED:u}}=this._core;g.emitOuterEvent(u,{name:u,data:n})}getAllReceiveMessageOpt(){return pA(this,void 0,void 0,function*(){try{const s=yield function(){return pA(this,void 0,void 0,function*(){const{common:n}=ho.core,g={To_Account:n.getCurrentUserID()};return n.buildAndSendPacket({servcmd:"im_msg_db_logic.ws_get_do_not_disturb",data:g})})}();return{code:0,data:this._handleResult(s)}}catch(s){oc("getAllReceiveMessageOpt",s)}})}_handleResult(s){const{OuterConstant:n}=this._core,{MSG_REMIND_ACPT_AND_NOTE:g,MSG_REMIND_DISCARD:u,MSG_REMIND_ACPT_NOT_NOTE:E}=n,m={0:g,1:u,2:E},{Level:D,StartTime:M,EndTime:T,IsRepeated:P}=s;return{messageRemindType:m[D]||g,startTime:M,endTime:T,isRepeated:P===is.ON}}},Uo=new class{init(s){s.ssoLog.debug("ReceiveMessageOptions.init"),this._core=s,Wt.init(s),ci.init(s),BA.init(s),yA.init(s),eo.init(s),Is.init(s)}};const si=s=>!Qt(s)&&!ug(s)&&!ks(s),Fr={getConversationProfile:[{key:"conversationID",required:!0,rules:["string"],allowEmpty:!1,customValidator:s=>!si(s)||"conversationID is invalid."}],setMessageRead:{conversationID:{required:!0,rules:["string"],allowEmpty:!1,customValidator:s=>!si(s)||"conversationID is invalid."}},pinConversation:{conversationID:{required:!0,rules:["string"],allowEmpty:!1,customValidator:s=>!si(s)||"conversationID is invalid."},isPinned:{required:!0,rules:["boolean"],allowEmpty:!1}},deleteConversation:[{key:"options",required:!0,rules:["string","object"],allowEmpty:!1,customValidator:s=>{const{core:{utils:{isArray:n,isObject:g,isString:u}}}=ho;if(!u(s)&&!g(s))return"options is String or Object.";if(u(s)&&si(s))return"conversationID is invalid.";if(g(s)){if(!n(s.conversationIDList))return"conversationIDList is not Array.";if(s.conversationIDList.length===0)return"conversationIDList is empty.";if(s.conversationIDList.some(E=>{if(si(E))return!0}))return"conversationIDList includes invalid conversationID.";if(s.clearHistoryMessage&&typeof s.clearHistoryMessage!="boolean")return"clearHistoryMessage is not Boolean."}return!0}}],setConversationDraft:{conversationID:{required:!0,rules:["string"],allowEmpty:!1,customValidator:s=>!(!Qt(s)&&!ug(s))||"conversationID is invalid."},draftText:{required:!0,rules:["string"],allowEmpty:!0}},setAllReceiveMessageOpt:{messageRemindType:{required:!1,rules:["string"],allowEmpty:!0},startHour:{required:!1,rules:["number"],allowEmpty:!0},startMinute:{required:!1,rules:["number"],allowEmpty:!0},startSecond:{required:!1,rules:["number"],allowEmpty:!0},duration:{required:!1,rules:["number"],allowEmpty:!0},isRepeated:{required:!1,rules:["boolean"],allowEmpty:!0}}},Zo={getConversationList:!0,getConversationProfile:!0,getTotalUnreadCount:!0,setMessageRead:!0,pinConversation:!0,deleteConversation:!0,setConversationDraft:!0,setMessageRemindType:!0,getAllReceiveMessageOpt:!0,setAllReceiveMessageOpt:!0};var jn=new class{constructor(){this.name="Conversation"}install(s){ho.init(s),Bi.init(s),Uo.init(s),NA.init(s),s.helper.registerValidateConfig({auth:Zo,params:Fr})}};const Wn=new class{init(s){this.core=s}},ta="AVChatRoom",qr="AV_HISTORY_MSG",sc="GRP_COUNTER",Ku="Set",mm="Increase",Ri="Decrease",ni=0,yo=1,on=2,os=["Type","Name","Introduction","Notification","FaceUrl","Owner_Account","CreateTime","InfoSeq","LastInfoTime","LastMsgTime","MemberNum","MaxMemberNum","ApplyJoinOption","NextMsgSeq","ShutUpAllMember","InviteJoinOption","LastRecallTime"],Eg=["Type","Name","Introduction","Notification","FaceUrl","CreateTime","Owner_Account","LastInfoTime","LastMsgTime","NextMsgSeq","MemberNum","MaxMemberNum","ApplyJoinOption","InviteJoinOption"],Ol=["Role","JoinTime","MsgFlag","MsgSeq"],fd=["Role","JoinTime","MsgSeq","MsgFlag","NameCard"],Lc=0,Mr=1,SI="notStart",nu="resolved",Og="rejected",ru=10018,MI=11e3,Uc=2,ju=["Owner","Admin","Member"],fm=["Role","JoinTime","NameCard","ShutUpUntil","OnlineStatus"],ym=0,Dm=1,Sm=2,cD=4,lD=1,Fv=2,ID=3,uD=4,Ov=5,BT=1,yd=0,QT=4,ED=6,pT=400,dD=300,mT={from:!0,groupID:!0,groupName:!0,to:!0},Pv={from:!0,groupID:!0,groupName:!0,to:!0,type:!0},fT=2,xv=4,yT=5,DT=7,CD=8,hD=15,TQ=20,Mm=21,vm=2600,Dd=2602,ST=2603,MT=2620,Rm=2621,BD=2623,Ih=2660,vT=2661,RT=2681,wm=2683,Yv=2684,QD=2685,_m=2687,Vv=3122,wT=10018,_T={0:"DisableInvite",1:"NeedPermission",2:"FreeAccess"},Jv=s=>s===Wn.core.OuterConstant.GRP_PUBLIC,Sd=s=>s===Wn.core.OuterConstant.GRP_AVCHATROOM,Tm=(s,n)=>{const{isArray:g}=Wn.core.utils;if(!g(s)||!g(n))return!1;let u=!1;return n.forEach(({key:E,value:m})=>{const D=s.find(M=>M.key===E);D?D.value!==m&&(D.value=m,u=!0):(s.push({key:E,value:m}),u=!0)}),u},Md=s=>{const n=[];if(!s)return n;for(let g=0,u=s.length;g{const n=[];for(let g=0,u=s.length;g0&&M.members.forEach(T=>{T.userID===this.selfInfo.userID&&D(this.selfInfo,T,["sequence"])})}updateSelfInfo(n){const{nameCard:g,joinTime:u,role:E,messageRemindType:m,readedSequence:D,excludedUnreadSequenceList:M}=n,{common:{deepMerge:T}}=Wn.core;T(this.selfInfo,{nameCard:g,joinTime:u,role:E,messageRemindType:m,readedSequence:D,excludedUnreadSequenceList:M},[],["",null,void 0,0,NaN])}setSelfNameCard(n){this.selfInfo.nameCard=n}}var Yi=new class{constructor(){this._name="GroupDataHandler"}init(s){this._core=s;const{appStore:{groupStore:n}}=s;this._groupMap=n.getGroupMap()}hasLocalGroup(s){return this._groupMap.has(s)}getLocalGroup(s){return this._groupMap.get(s)}updateLocalGroup(s){const{common:{getCurrentUserID:n}}=this._core;let g;s.forEach(E=>{var m;g=E.groupID,this.hasLocalGroup(g)?(m=this.getLocalGroup(g))===null||m===void 0||m.updateGroup(E):(this._groupMap.set(g,new Wu(E)),this._clearGroupLocalMessage(g))});const u=n();for(const[,E]of this._groupMap)E.selfInfo.userID=u,E.selfInfo.role==="Owner"&&(E.ownerID=u)}deleteLocalGroup(s){this._groupMap.delete(s)}getLocalGroupList(){const{OuterConstant:{GRP_ROOM:s,GRP_LIVE:n}}=this._core;return[...this._groupMap.values()].filter(g=>{const{type:u}=g;return u!==s&&u!==n})}clearLocalGroup(){this._groupMap.clear()}emitGroupListUpdate(){const s=this.getLocalGroupList(),{OuterEvent:{GROUP_LIST_UPDATED:n},notificationCenter:g}=this._core;g.emitOuterEvent(n,{name:n,data:s})}updateConversationGroupProfile(s){const{appStore:{conversationStore:n},OuterConstant:{CONV_GROUP:g}}=this._core,u=`${g}${s}`,E=n.getConversation(u);if(E){const m=this.getLocalGroup(s);E.setProfileCompleted(),n.updateConversation(u,{groupProfile:m})}}reset(){this.clearLocalGroup()}_clearGroupLocalMessage(s){const{message:{messageHistory:n,messageDataHandler:g},OuterConstant:{CONV_GROUP:u},ssoLog:E}=this._core;E.debug("_clearGroupLocalMessage",`groupID:${s}`);const m=`${u}${s}`;n.completedHistoryConversations.delete(m),g.deleteConversationMessageList(m)}};function Gm(s,n){return pA(this,void 0,void 0,function*(){const{type:g,limit:u,offset:E,supportTopic:m=0,memberAccount:D,responseFilter:M}=s,T={Type:g,Limit:u,Offset:E,Member_Account:D,ResponseFilter:M,SupportTopic:m,NeedAppDefineData:1};return n.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_joined_group_list",data:T})})}const dn=function(s,n){return{code:0,data:s||{},successLog:n}};var Hv=new class{constructor(){this._name="GetGroupList",this._pagingStatus=SI,this.PAGING_GRP_COUNT_LIMIT=200}init(s){this._core=s;const{helper:n,constants:{WORKFLOW_NAME:g,WORKFLOW_STEP:u}}=s;n.registerApi({apiName:"getGroupList",context:this}),n.registerWorkflowStep(g.SYNC_SERVER_INFO_AFTER_LOGIN,u.GROUP_LIST_SYNC,this._syncGroupList,this)}getGroupList(){return pA(this,arguments,void 0,function*(s=!1){if(s){const g=[];return yield this._pagingGetJoinedCommunityList({limit:this.PAGING_GRP_COUNT_LIMIT,offset:0,groupList:g}),Yi.updateLocalGroup(g),Yi.getLocalGroupList()}if(this._core.ssoLog.debug("getGroupList",`${this._name}.getGroupList pagingStatus:${this._pagingStatus}`),this._pagingStatus===Og||this._pagingStatus===SI)return this._syncGroupList().then(()=>{const g=Yi.getLocalGroupList();return dn({groupList:g,isSyncCompleted:this._isSyncCompleted()})}).catch(g=>{throw g});const n=Yi.getLocalGroupList();return dn({groupList:n,isSyncCompleted:this._isSyncCompleted()},{message:`return group count:${n.length}`})})}_syncGroupList(){return pA(this,void 0,void 0,function*(){this._pagingStatus===SI&&Yi.clearLocalGroup();const s=this.PAGING_GRP_COUNT_LIMIT,n=[];try{yield this._pagingGetGroupList({limit:s,offset:0,groupList:n}),this._pagingStatus=nu,this._groupListTreeShaking(n),Yi.updateLocalGroup(n);const g=Yi.getLocalGroupList();return this._core.ssoLog.debug("_syncGroupList",`${this._name}._syncGroupList ok, count:${g.length}`),Yi.emitGroupListUpdate(),g}catch(g){throw this._pagingStatus=Og,g}})}_pagingGetGroupList(s){return pA(this,void 0,void 0,function*(){const{ssoLog:n}=this._core,{isCommunityRelay:g=!1,groupList:u}=s;let E,{limit:m,offset:D}=s;const M=[...os];g&&(E=this._core.OuterConstant.GRP_COMMUNITY,M.push("AtInfoList"));try{const T=yield Gm({type:E,limit:m,offset:D,memberAccount:this._core.store.get("login").userId,responseFilter:{GroupBaseInfoFilter:M,SelfInfoFilter:[...Ol]}},this._core),{GroupIdList:P=[],TotalCount:W=0}=T||{},iA=this._convertGroupKey(P);u.push(...iA);const EA=D+m,RA=!(W>EA),kA=`offset:${D} limit:${m} total:${W} isCompleted:${RA} current:${u.length} isCommunityRelay:${g}`;return n.debug("_pagingGetGroupList",`${this._name}._pagingGetGroupList ok. ${kA}`),g?RA?u:(D=EA,this._pagingGetGroupList({isCommunityRelay:!0,limit:m,offset:D,groupList:u})):RA?(n.debug("_pagingGetGroupList",`${this._name}._pagingGetGroupList start to get community list`),D=0,this._pagingGetGroupList({isCommunityRelay:!0,limit:m,offset:D,groupList:u})):(D=EA,this._pagingGetGroupList({limit:m,offset:D,groupList:u}))}catch(T){if(T.ErrorCode===ru)return n.warn("_pagingGetGroupList",`${this._name}._pagingGetGroupList response size exceeds the limit, request count:${m}`),m=50,this._pagingGetGroupList({isCommunityRelay:g,limit:m,offset:D,groupList:u});if(g)return T.code===MI&&n.debug("_pagingGetGroupList",`${this._name}._pagingGetGroupList ok. community unavailable`),u;throw T}})}_pagingGetJoinedCommunityList(s){return pA(this,void 0,void 0,function*(){const{common:{getCurrentUserID:n},OuterConstant:g,ssoLog:u}=this._core,{groupList:E}=s;let{limit:m,offset:D}=s;try{const M=yield Gm({limit:m,offset:D,type:g.GRP_COMMUNITY,memberAccount:n(),supportTopic:1,responseFilter:{GroupBaseInfoFilter:[...os],SelfInfoFilter:[...Ol]}},this._core),{GroupIdList:T=[],TotalCount:P=0}=M||{},W=this._convertGroupKey(T);E.push(...W);const iA=D+m,EA=!(P>iA),RA=`offset:${D} limit:${m} total:${P} isCompleted:${EA} current:${E.length}`;return u.debug("_pagingGetJoinedCommunityList",`${this._name}._pagingGetJoinedCommunityList ok. ${RA}`),EA?E:(D=iA,this._pagingGetJoinedCommunityList({limit:m,offset:D,groupList:E}))}catch(M){if(M.code===wT)return u.warn("_pagingGetJoinedCommunityList",`${this._name}._pagingGetJoinedCommunityList response size exceeds the limit, request count:${m}`),m=50,this._pagingGetJoinedCommunityList({limit:m,offset:D,groupList:E});throw M}})}_groupListTreeShaking(s){const n=new Map([...Yi.getLocalGroupList()]);for(let u=0,E=s.length;u{const{AtFlagList:E,AtMsgSeq:m,From_Account:D}=u;g.push({groupID:s,groupAtType:E,sequence:m,from:D})}),g}},zu=new class{constructor(){this._name="CreateGroup"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"createGroup",context:this})}createGroup(s){return pA(this,void 0,void 0,function*(){var n;this._preCheckParams(s);const{helper:{ChatError:g}}=this._core;try{const{utils:{isEmpty:u},common:{getCurrentUserID:E},OuterConstant:{GRP_AVCHATROOM:m}}=this._core,D=yield function(iA,EA){return pA(this,void 0,void 0,function*(){const{name:RA,type:kA,groupID:xA,introduction:LA,notification:SA,avatar:OA,maxMemberNum:JA,joinOption:ae,inviteOption:se,memberList:_i,groupCustomField:Ti,isSupportTopic:Ft}=iA;let Ni,cs;_i&&(Ni=_i.map(mt=>{const{userID:UA,memberCustomField:ri}=mt;return{Member_Account:UA,AppMemberDefinedData:ri?VE(ri):void 0}})),Ti&&(cs=VE(Ti));const Se={Name:RA,Type:kA,GroupId:xA,Introduction:LA,Notification:SA,FaceUrl:OA,MaxMemberCount:JA,ApplyJoinOption:ae,InviteJoinOption:se,MemberList:Ni,AppDefinedData:cs,SupportTopic:Ft,webPushFlag:1};return EA.common.buildAndSendPacket({servcmd:"group_open_http_svc.create_group",data:Se})})}(Object.assign(Object.assign({},s),{ownerID:E()}),this._core),{GroupId:M,OverJoinedGroupLimit_Account:T=[]}=D||{},P=`${this._name}.createGroup ok, type:${s.type} groupID:${M} overLimitUserIDList:${T}`;if(u(s.memberList)||u(T)||(s.memberList=(n=s.memberList)===null||n===void 0?void 0:n.filter(iA=>T.includes(iA.userID))),s.type===m)return dn({group:new Wu(Object.assign(Object.assign({},s),{groupID:M}))},{message:P});Yi.updateLocalGroup([Object.assign(Object.assign({},s),{groupID:M})]);const W=Yi.getLocalGroup(M);return this._notNeedSendCustomMessage(s)||(this._sendCustomMessage(M,s.type),Yi.emitGroupListUpdate()),dn({group:W},{message:P})}catch(u){const{errorCode:E,errorInfo:m}=u;throw new g({functionName:"createGroup",code:E,message:m,moreMessage:` groupID:${s.groupID}`})}})}_preCheckParams(s){const{type:n,groupID:g}=s,{utils:{isEmpty:u,isUndefined:E},common:{isCommunity:m}}=this._core,D=!u(g);if(!(()=>{const{GRP_PUBLIC:M,GRP_WORK:T,GRP_MEETING:P,GRP_AVCHATROOM:W,GRP_COMMUNITY:iA}=Wn.core.OuterConstant;return[M,T,P,W,iA]})().includes(n))throw new this._core.helper.ChatError({code:vm});if(!m({type:n})){if(D&&m({groupID:g}))throw new this._core.helper.ChatError({code:Dd});E(s.isSupportTopic)||(s.isSupportTopic=void 0)}if(this._canIUseMemberList(n)||E(s.memberList)||(s.memberList=void 0),this._canIUseJoinOption(n)||E(s.joinOption)||(s.joinOption=void 0),m({type:n})){if(D&&!m({groupID:g}))throw new this._core.helper.ChatError({code:Dd});s.isSupportTopic=this._canIUseTopic(s)?1:0}}_canIUseMemberList(s){return!Sd(s)}_canIUseJoinOption(s){return Jv(s)||this._core.common.isCommunity({type:s})}_canIUseTopic(s){const{isSupportTopic:n}=s;return n===!0}_notNeedSendCustomMessage(s){const{type:n,isSupportTopic:g}=s,{OuterConstant:{GRP_AVCHATROOM:u,GRP_COMMUNITY:E}}=this._core;return n===u||n===E&&g===1}_sendCustomMessage(s,n){var g,u,E,m,D,M;const{OuterConstant:T,common:{t:P}}=this._core;let W=P("CREATE_GROUP"),iA=Lc;n===T.GRP_COMMUNITY&&(W=P("CREATE_COMMUNITY"),iA=Mr);const EA={to:s,conversationType:"GROUP",payload:{data:JSON.stringify({businessID:"group_create",content:W,cmd:iA,opUser:this._core.store.get("login").userId,version:4})}},RA=(E=(u=(g=this._core)===null||g===void 0?void 0:g.message)===null||u===void 0?void 0:u.messageFactory)===null||E===void 0?void 0:E.createCustomMessage(EA);(M=(D=(m=this._core)===null||m===void 0?void 0:m.message)===null||D===void 0?void 0:D.messageSender)===null||M===void 0||M.sendMessage(RA,{})}},zs=new class{constructor(){this._name="AttributesDataHandler",this._groupAttributesCache=new Map,this._groupAttributesCacheValuesCopy={}}init(s){this._core=s;const{helper:n,constants:g}=s;n.registerWorkflowStep(g.WORKFLOW_NAME.SYNC_SERVER_INFO_AFTER_RE_ONLINE,g.WORKFLOW_STEP.GROUP_ATTRIBUTE_CACHE_CLEAR,this.clearLocalMainSequence,this)}clearLocalMainSequence(){this._groupAttributesCache.forEach(s=>{s.localMainSequence=0})}isGroupAttributesUpdated(s){const{elements:{newGroupProfile:n}}=s,{utils:{isEmpty:g,isUndefined:u}}=this._core;return!u(n)&&!g(n.groupAttributeOption)}handleGroupAttributesUpdated(s){const{groupID:n,groupAttributeOption:g}=s,{serverMainSequence:u,groupAttributeList:E=[],operation:m}=g;this._core.ssoLog.debug("handleGroupAttributesUpdated",`${this._name}.handleGroupAttributesUpdated groupID:${n} operation:${m}`);const{utils:{isUndefined:D}}=this._core;D(m)||(this.refreshGroupAttributesCache({groupID:n,serverMainSequence:u,groupAttributeList:E,operation:m}),this.emitGroupAttributesUpdated(n))}initGroupAttributesCache(s){const{groupID:n,avChatRoomKey:g}=s;this._groupAttributesCache.set(n,{lastUpdateTime:0,localMainSequence:0,serverMainSequence:0,avChatRoomKey:g,values:new Map}),this._core.ssoLog.debug("initGroupAttributesCache",`${this._name}.initGroupAttributesCache. groupID:${n} avChatRoomKey:${g}`)}hasGroupAttributesCache(s){return this._groupAttributesCache.has(s)}getGroupAttributesCache(s){return this.hasGroupAttributesCache(s)||this.initGroupAttributesCache({groupID:s}),this._groupAttributesCache.get(s)}deleteGroupAttributesCache(s){this.hasGroupAttributesCache(s)&&this._groupAttributesCache.delete(s)}refreshGroupAttributesCache(s){const{groupID:n,serverMainSequence:g,groupAttributeList:u,operation:E}=s;if(this.hasGroupAttributesCache(n)){const m=this.getGroupAttributesCache(n),{localMainSequence:D}=m;E!==Ov&&g-D!==1||(m.serverMainSequence=g,m.localMainSequence=g,m.lastUpdateTime=Date.now(),this._updateGroupAttributesCacheValues({groupAttributes:m,groupAttributeList:u,operation:E})),g-D>1&&(m.serverMainSequence=g),this._groupAttributesCache.set(n,m),this._core.ssoLog.debug("refreshGroupAttributesCache",`${this._name}.refreshGroupAttributesCache. operation:${E} localMainSequence:${D} serverMainSequence:${g}`)}}_updateGroupAttributesCacheValues(s){const{groupAttributes:n,groupAttributeList:g=[],operation:u}=s;u!==ID?u!==uD?(u===lD&&n.values.clear(),g.forEach(E=>{const{key:m,value:D,sequence:M}=E;n.values.set(m,{value:D,sequence:M})})):g.forEach(E=>{n.values.delete(E.key)}):n.values.clear()}getGroupAttributesCacheValues(s){var n;const{groupID:g,keyList:u=[]}=s,E={};if(this.hasGroupAttributesCache(g)){const{values:m}=this.getGroupAttributesCache(g);if(u.length===0){for(const D of m.keys())E[D]=((n=m.get(D))===null||n===void 0?void 0:n.value)||"";return E}return u.forEach(D=>{var M;m.has(D)&&(E[D]=((M=m.get(D))===null||M===void 0?void 0:M.value)||"")}),E}return E}saveGroupAttributesCacheValuesCopy(s){this._groupAttributesCacheValuesCopy=this.getGroupAttributesCacheValues({groupID:s})}emitGroupAttributesUpdated(s){var n,g;const{OuterConstant:{GRP_ROOM:u,GRP_LIVE:E}}=this._core,m=this.getGroupAttributesCacheValues({groupID:s}),D=this._core.appStore.groupStore.getGroup(s),{updatedKeyList:M,deletedKeyList:T}=this._computeValuesChangedData(m);M.length===0&&T.length===0||([u,E].includes(D.type)?(this._core.ssoLog.debug("RICH_STATUS_CHANGED",`${this._name}.emitRichStatusChanged update count:${M.length}, delete count:${T.length}`),this._emitEvent({name:(n=this._core)===null||n===void 0?void 0:n.OuterEvent.RICH_STATUS_CHANGED,data:{groupID:s,richStatus:m,updatedKeyList:M,deletedKeyList:T}})):(this._core.ssoLog.debug("emitGroupAttributesUpdated",`${this._name}.emitGroupAttributesUpdated update count:${M.length}, delete count:${T.length}`),this._emitEvent({name:(g=this._core)===null||g===void 0?void 0:g.OuterEvent.GROUP_ATTRIBUTES_UPDATED,data:{groupID:s,groupAttributes:m,updatedKeyList:M,deletedKeyList:T}})))}_computeValuesChangedData(s){const{utils:{isUndefined:n}}=this._core,g=[],u=[];return Object.keys(s).forEach(E=>{s[E]!==this._groupAttributesCacheValuesCopy[E]&&g.push(E)}),Object.keys(this._groupAttributesCacheValuesCopy).forEach(E=>{n(s[E])&&u.push(E)}),this._groupAttributesCacheValuesCopy={},{updatedKeyList:g,deletedKeyList:u}}_emitEvent(s){var n;(n=this._core)===null||n===void 0||n.notificationCenter.emitOuterEvent(s.name,s)}convertKeyValueMapToList(s){const n=[];return Object.keys(s).forEach(g=>{n.push({key:g,value:s[g]})}),n}reset(){this._groupAttributesCache.clear(),this._groupAttributesCacheValuesCopy={}}},Eh=new class{constructor(){this._name="DismissGroup"}init(s,n){this._core=s;const{helper:g}=s;g.registerApi({apiName:"dismissGroup",context:this,matcher:()=>!n.getInstalledSubPlugins().includes(ta)})}dismissGroup(s){return pA(this,void 0,void 0,function*(){const{helper:{ChatError:n}}=this._core;try{yield function(u,E){return pA(this,void 0,void 0,function*(){const m={GroupId:u};return E.common.buildAndSendPacket({servcmd:"group_open_http_svc.destroy_group",data:m})})}(s,this._core);const{type:g}=Yi.getLocalGroup(s);return Yi.deleteLocalGroup(s),Yi.emitGroupListUpdate(),zs.deleteGroupAttributesCache(s),dn({groupID:s,type:g},{message:s})}catch(g){const{errorCode:u,errorInfo:E}=g;throw new n({functionName:"dismissGroup",code:u,message:E})}})}},Pl=new class{constructor(){this._name="GetGroupProfile"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"getGroupProfile",context:this})}getGroupProfile(s){return pA(this,void 0,void 0,function*(){const{groupID:n,groupCustomFieldFilter:g}=s,u={groupIDList:[n],responseFilter:{GroupBaseInfoFilter:[...os],AppDefinedDataFilter_Group:g,MemberInfoFilter:[...fd]}},{helper:{ChatError:E}}=this._core;try{const m=yield this.getGroupProfileAdvance(u),{successGroupList:D,failureGroupList:M}=m;if(M.length>0)throw M[0];let T;return!Yi.hasLocalGroup(n)&&Sd(D[0].type)?T=new Wu(D[0]):(Yi.updateLocalGroup(D),T=Yi.getLocalGroup(n)),T.isSupportTopic||Yi.updateConversationGroupProfile(n),dn({group:T},{message:`groupID:${n}`})}catch(m){const{code:D,message:M}=m;throw new E({functionName:"getGroupProfile",code:D,message:M})}})}getGroupProfileAdvance(s){return pA(this,void 0,void 0,function*(){const{groupIDList:n}=s,{common:{isCommunity:g}}=this._core,u=n.filter(T=>!g({groupID:T})),E=n.filter(T=>g({groupID:T}));u.length>50&&(u.length=50),E.length>50&&(E.length=50);const m=yield Promise.all([this._getGroupProfileAdvance(Object.assign(Object.assign({},s),{groupIDList:u})),this._getGroupProfileAdvance(Object.assign(Object.assign({},s),{groupIDList:E,isCommunityProfile:!0}))]),D=[],M=[];return m.forEach(T=>{D.push(...T.successGroupList),M.push(...T.failureGroupList)}),{successGroupList:D,failureGroupList:M}})}_getGroupProfileAdvance(s){return pA(this,void 0,void 0,function*(){const{ssoLog:n,utils:{isUndefined:g}}=this._core,{isCommunityProfile:u=!1}=s,E=Do(s,["isCommunityProfile"]);if(E.groupIDList.length===0)return{successGroupList:[],failureGroupList:[]};try{const m=yield function(W,iA){return pA(this,void 0,void 0,function*(){const{groupIDList:EA,responseFilter:RA}=W,kA={GroupIdList:EA,ResponseFilter:RA};return iA.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_group_self_member_info",data:kA})})}(E,this._core),{GroupInfo:D=[]}=m||{},M=this._convertGroupProfileKey(D),T=M.filter(W=>g(W.errorCode)||W.errorCode===0),P=M.filter(W=>W.errorCode&&W.errorCode!==0).map(W=>({code:W.errorCode,message:W.errorInfo,data:{groupID:W.groupID}}));return n.debug("_getGroupProfileAdvance",`${this._name}._getGroupProfileAdvance ok, groupID:${E.groupIDList.join(",")}`),{successGroupList:T,failureGroupList:P}}catch(m){if(u)return{successGroupList:[],failureGroupList:[]};throw m}})}_convertGroupProfileKey(s){const n=[];for(let g=0,u=s.length;g0&&u{const{Key:T,Value:P=0}=M;E.set(T,P)}),this._groupCountersMap.set(n,{lastUpdateTime:Date.now(),groupCounterSeq:u,counters:E,avChatRoomKey:m})}}initGroupCountersCache(s){const{groupID:n,avChatRoomKey:g}=s;this._groupCountersMap.set(n,{lastUpdateTime:0,groupCounterSeq:0,counters:new Map,avChatRoomKey:g})}getLocalCounters(s,n){const g={};if(!this._hasLocalGroupCounters(s))return g;const{counters:u}=this.getLocalGroupCounters(s);if(n.length>0)n.forEach(E=>{u.has(E)&&(g[E]=u.get(E))});else for(const E of u.keys())g[E]=u.get(E);return g}deleteLocalGroupCounters(s){const{groupID:n,counterList:g=[],groupCounterSeq:u}=s;if(this._hasLocalGroupCounters(n)){const{counters:E,avChatRoomKey:m}=this.getLocalGroupCounters(n);g.forEach(D=>{E.delete(D.key)}),this._groupCountersMap.set(n,{lastUpdateTime:Date.now(),groupCounterSeq:u,counters:E,avChatRoomKey:m})}}setGroupCounters(s,n){if(!this._hasLocalGroupCounters(s))return;const g=this.getLocalGroupCounters(s),{counters:u}=g;let E=!1;Object.entries(n).forEach(([m,D])=>{u.has(m)&&u.get(m)!==D&&(u.set(m,D),E=!0)}),E&&this._groupCountersMap.set(s,Object.assign(Object.assign({},g),{lastUpdateTime:Date.now(),counters:u}))}_hasLocalGroupCounters(s){return this._groupCountersMap.has(s)}reset(){this._groupCountersMap.clear()}},JE=new class{constructor(){this._name="JoinGroup"}init(s,n){this._core=s;const{helper:g}=s;g.registerApi({apiName:"joinGroup",context:this,matcher:()=>!n.getInstalledSubPlugins().includes(ta)})}joinGroup(s){return pA(this,void 0,void 0,function*(){const{groupID:n}=s,{helper:{ChatError:g},OuterConstant:u,ssoLog:E}=this._core;try{if(Yi.hasLocalGroup(n))try{return yield Pl.getGroupProfile({groupID:n}),dn({status:u.JOIN_STATUS_ALREADY_IN_GROUP,group:Yi.getLocalGroup(n)},{message:`groupID:${n} joinedStatus:${u.JOIN_STATUS_ALREADY_IN_GROUP}`})}catch{return E.warn("joinGroup",`${this._name}.joinGroup ${n} was unjoined, start to join!`),Yi.deleteLocalGroup(n),yield this._applyJoinGroup(s)}return yield this._applyJoinGroup(s)}catch(m){const{errorCode:D,errorInfo:M}=m;throw new g({functionName:"joinGroup",code:D,message:M,moreMessage:`groupID:${n}`})}})}_applyJoinGroup(s){return pA(this,void 0,void 0,function*(){const{OuterConstant:n,helper:g,ssoLog:u}=this._core,{groupID:E}=s,m=Object.assign({},s),D=g.checkBusinessCapabilityBits(qr);D&&(m.historyMessageFlag=1);const M=yield function(SA,OA){return pA(this,void 0,void 0,function*(){const{groupID:JA,applyMessage:ae,historyMessageFlag:se}=SA,_i={GroupId:JA,ApplyMsg:ae,HugeGroupHistoryMsgFlag:se};return OA.common.buildAndSendPacket({servcmd:"group_open_http_svc.apply_join_group",data:_i})})}(m,this._core),{Type:T,JoinedStatus:P,LongPollingKey:W,StartSeq:iA,HugeGroupFlag:EA,AVChatRoomKey:RA,RspMsgList:kA=[]}=M||{},xA=`groupID:${E} joinedStatus:${P} longPollingKey:${W} startSeq:${iA} avChatRoomFlag:${EA} canGetAVChatRoomHistoryMsg:${D}, historyMessageCount:${kA.length}`;u.debug("_applyJoinGroup",`${this._name}._applyJoinGroup ok, ${xA}`);let LA=new Wu({groupID:E,type:T});if(P===n.JOIN_STATUS_WAIT_APPROVAL)return dn({status:n.JOIN_STATUS_WAIT_APPROVAL,group:LA});if(P===n.JOIN_STATUS_SUCCESS){try{LA=(yield Pl.getGroupProfile({groupID:E})).data.group}catch(SA){u.warn("_applyJoinGroup",`${this._name}._applyJoinGroup getGroupProfile failed, groupID: ${E}, errorCode:${SA?.code}`)}return this._handleJoinResult({group:LA,avChatRoomFlag:EA,longPollingKey:W,startSequence:iA,avChatRoomKey:RA,historyMessageList:kA})}throw new this._core.helper.ChatError({code:Ih})})}_handleJoinResult(s){const{group:n,avChatRoomFlag:g,avChatRoomKey:u}=s;return g===1?(zs.initGroupAttributesCache({groupID:n.groupID,avChatRoomKey:u}),nc.initGroupCountersCache({groupID:n.groupID,avChatRoomKey:u}),dn(s)):(Yi.updateLocalGroup([n]),Yi.emitGroupListUpdate(),dn({status:this._core.OuterConstant.JOIN_STATUS_SUCCESS,group:n},{message:`groupID:${n.groupID}`}))}},NQ=new class{constructor(){this._name="QuitGroup"}init(s,n){this._core=s;const{helper:g}=s;g.registerApi({apiName:"quitGroup",context:this,matcher:()=>!n.getInstalledSubPlugins().includes(ta)})}quitGroup(s){return pA(this,void 0,void 0,function*(){if(!Yi.hasLocalGroup(s))throw new this._core.helper.ChatError({code:BD});const{helper:{ChatError:n}}=this._core;try{yield function(u,E){return pA(this,void 0,void 0,function*(){const m={GroupId:u};return E.common.buildAndSendPacket({servcmd:"group_open_http_svc.quit_group",data:m})})}(s,this._core);const{type:g}=Yi.getLocalGroup(s);return Yi.deleteLocalGroup(s),Yi.emitGroupListUpdate(),zs.deleteGroupAttributesCache(s),dn({groupID:s,type:g},{message:`groupID:${s}`})}catch(g){const{errorCode:u,errorInfo:E}=g;throw new n({functionName:"quitGroup",code:u,message:E,moreMessage:`groupID:${s}`})}})}},cB=new class{constructor(){this._name="SearchGroup"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"searchGroupByID",context:this})}searchGroupByID(s){return pA(this,void 0,void 0,function*(){try{const n=yield function(OA,JA){return pA(this,void 0,void 0,function*(){const ae={GroupIdList:[OA],GroupBasePublicInfoFilter:[...Eg]};return JA.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_group_public_info",data:ae})})}(s,this._core),{GroupInfo:g=[]}=n||{},{AppDefinedData:u=[],ApplyJoinOption:E,CreateTime:m,FaceUrl:D,Introduction:M,InviteJoinOption:T,MaxMemberNum:P,MemberNum:W,Name:iA,Owner_Account:EA,Type:RA,ErrorCode:kA,ErrorInfo:xA}=g[0];if(kA!==0)throw new this._core.helper.ChatError({code:kA,message:xA});const LA=Md(u),SA=new Wu({groupID:s,name:iA,avatar:D,introduction:M,joinOption:E,inviteOption:T,maxMemberCount:P,memberCount:W,type:RA,ownerID:EA,createTime:m,groupCustomField:LA});return dn({group:SA})}catch(n){const{errorCode:g,errorInfo:u}=n;throw new this._core.helper.ChatError({functionName:"searchGroupByID",code:g,message:u})}})}},TT=new class{constructor(){this._name="UpdateGroupProfile"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"updateGroupProfile",context:this})}updateGroupProfile(s){return pA(this,void 0,void 0,function*(){const{groupID:n}=s,{utils:{isUndefined:g,safeStringify:u},ssoLog:E,helper:m}=this._core;let D=Yi.getLocalGroup(n);if(D){const{type:M}=D;this._canIUseJoinOption(M)||g(s.joinOption)||(E.warn("updateGroupProfile",`${this._name}.updateGroupProfile groupID:${n} joinOption is unavailable for Work/Meeting/AVChatRoom`),s.joinOption=void 0)}g(s.muteAllMembers)||(s.muteAllMembers=s.muteAllMembers===!0?"On":"Off");try{return yield function(M,T){return pA(this,void 0,void 0,function*(){const{groupID:P,name:W,avatar:iA,introduction:EA,notification:RA,muteAllMembers:kA,joinOption:xA,inviteOption:LA,groupCustomField:SA}=M,OA={GroupId:P,Name:W,FaceUrl:iA,Introduction:EA,Notification:RA,ShutUpAllMember:kA,ApplyJoinOption:xA,InviteJoinOption:LA,AppDefinedData:SA?VE(SA):void 0};return T.common.buildAndSendPacket({servcmd:"group_open_http_svc.modify_group_base_info",data:OA})})}(s,this._core),D?(D.updateGroup(s),Yi.emitGroupListUpdate()):D=new Wu(s),dn({group:D},{message:`groupID:${n}`})}catch(M){const{errorCode:T,errorInfo:P}=M;throw new m.ChatError({code:T,message:P,moreMessage:`options:${u(s)}`})}})}_canIUseJoinOption(s){return Jv(s)||this._core.common.isCommunity({type:s})}},NT=new class{constructor(){this._name="ChangeGroupOwner"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"changeGroupOwner",context:this})}changeGroupOwner(s){return pA(this,void 0,void 0,function*(){const n="changeGroupOwner",{groupID:g,newOwnerID:u}=s,E=Yi.getLocalGroup(g),{helper:m,OuterConstant:D,common:{getCurrentUserID:M}}=this._core;if(E?.type===D.GRP_AVCHATROOM)throw new m.ChatError({functionName:n,code:MT});if(u===M())throw new m.ChatError({functionName:n,code:Rm});try{return yield function(T,P){return pA(this,void 0,void 0,function*(){const{groupID:W,newOwnerID:iA}=T,EA={GroupId:W,NewOwner_Account:iA};return P.common.buildAndSendPacket({servcmd:"group_open_http_svc.change_group_owner",data:EA})})}(s,this._core),E.ownerID=u,Yi.emitGroupListUpdate(),dn({group:E})}catch(T){throw new m.ChatError({functionName:n,code:T?.errorCode,message:T?.errorInfo})}})}},GQ=new class{constructor(){this._name="GetGroupOnlineMemberCount",this._onlineMemberCountMap=new Map}init(s,n){this._core=s;const{helper:g}=s;g.registerApi({apiName:"getGroupOnlineMemberCount",context:this,matcher:()=>!n.getInstalledSubPlugins().includes(ta)})}getGroupOnlineMemberCount(s){return pA(this,void 0,void 0,function*(){const n="getGroupOnlineMemberCount";if(!Yi.hasLocalGroup(s))return dn({memberCount:0});const g=Date.now();if(this._onlineMemberCountMap.has(s)){const u=this._onlineMemberCountMap.get(s),{lastReqTime:E=0,memberCount:m=0}=u||{};if(g-E<=6e4)return dn({memberCount:m})}try{const u=yield function(D,M){return pA(this,void 0,void 0,function*(){const T={GroupId:D};return M.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_online_member_num",data:T})})}(s,this._core),{OnlineMemberNum:E=0}=u||{};this._onlineMemberCountMap.set(s,{lastReqTime:Date.now(),memberCount:E});const m=`${this._name}.${n} ok. groupID:${s} memberCount:${E}`;return dn({memberCount:E},{message:m})}catch(u){throw new this._core.helper.ChatError({functionName:n,code:u?.errorCode,message:u?.errorInfo})}})}},bQ=new class{init(s,n){s.ssoLog.debug("GroupAction.init"),Hv.init(s),zu.init(s),Eh.init(s,n),JE.init(s,n),NQ.init(s,n),cB.init(s),Pl.init(s),TT.init(s),NT.init(s),GQ.init(s,n)}dismissGroup(s){return Eh.dismissGroup(s)}joinGroup(s){return JE.joinGroup(s)}quitGroup(s){return NQ.quitGroup(s)}getGroupOnlineMemberCount(s){return GQ.getGroupOnlineMemberCount(s)}},qv=new class{constructor(){this._name="GetGroupApplicationList"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"getGroupApplicationList",context:this})}getGroupApplicationList(){return pA(this,void 0,void 0,function*(){const s="getGroupApplicationList";try{const n=yield Promise.all([this._getGroupApplicationList(),this._getGroupApplicationList({type:this._core.OuterConstant.GRP_COMMUNITY})]);this._core.ssoLog.debug("getGroupApplicationList",`${this._name}.${s} ok.`);const g=this._handleGroupApplicationResult([...n[0],...n[1]]);return dn({applicationList:g})}catch(n){throw new this._core.helper.ChatError({functionName:s,code:n?.errorCode,message:n?.errorInfo})}})}_getGroupApplicationList(s){return pA(this,void 0,void 0,function*(){const{type:n,startTime:g=0,limit:u=20}=s||{},{common:E}=this._core;let m;try{m=yield function(P,W){return pA(this,void 0,void 0,function*(){const{type:iA,startTime:EA,limit:RA,handleAccount:kA}=P,xA={Type:iA,StartTime:EA,Limit:RA,Handle_Account:kA};return W.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_pendency",data:xA})})}({type:n,startTime:g,limit:u,handleAccount:E.getCurrentUserID()},this._core)}catch(P){if(P?.errorCode!==11e3)throw P;m={}}const{NextStartTime:D=0,PendencyList:M=[]}=m||{};if(D===0)return M;const T=yield this._getGroupApplicationList(Object.assign(Object.assign({},s),{startTime:D}));return[...M,...T]})}_handleGroupApplicationResult(s){const n=[];return s.forEach(g=>{const u=this._convertApplicationData(g),{handled:E}=u,m=Do(u,["handled"]);E===0&&n.push(m)}),n}_convertApplicationData(s){const{Handled:n,AddTime:g,ApplyInviteMsg:u,Authentication:E,FromUserNickName:m,From_Account:D,GroupId:M,GroupName:T,PendencyType:P,To_Account:W}=s;return{handled:n,messageKey:g,applicant:D,applicantNick:m,groupID:M,groupName:T,authentication:E,applicationType:P,userID:W,note:u,addTime:g}}},Kv=new class{constructor(){this._name="HandleGroupApplication"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"handleGroupApplication",context:this})}handleGroupApplication(s){return pA(this,void 0,void 0,function*(){const{application:n}=s,g=this._handleParams(s);try{n?.applicationType===Uc?yield function(E,m){return pA(this,void 0,void 0,function*(){const{groupID:D,handleAction:M,handleMessage:T,applicant:P,authentication:W,invitee:iA}=E,EA={GroupId:D,HandleMsg:M,ApprovalMsg:T,Applicant_Account:P,Authentication:W,Invited_Account:iA};return m.common.buildAndSendPacket({servcmd:"group_open_http_svc.handle_invite_join_permission_group",data:EA})})}(g,this._core):yield function(E,m){return pA(this,void 0,void 0,function*(){const{groupID:D,handleAction:M,handleMessage:T,applicant:P,authentication:W,messageKey:iA}=E,EA={GroupId:D,HandleMsg:M,ApprovalMsg:T,Applicant_Account:P,Authentication:W,MsgKey:iA};return m.common.buildAndSendPacket({servcmd:"group_open_http_svc.handle_apply_join_group",data:EA})})}(g,this._core);const u=Yi.getLocalGroup(g.groupID);return dn({group:u})}catch(u){throw new this._core.helper.ChatError({functionName:"handleGroupApplication",code:u?.errorCode,message:u?.errorInfo})}})}_handleParams(s){var n;const{handleAction:g,handleMessage:u,message:E,application:m}=s;let D,M,T,P,W;if(E){const{payload:iA}=E||{};D=iA.operatorID,M=(n=iA.groupProfile)===null||n===void 0?void 0:n.groupID,T=iA.authentication,P=iA.messageKey}else D=m?.applicant||"",M=m?.groupID||"",T=m?.authentication||"",P=m?.messageKey||0;return m?.applicationType===Uc&&(W=m.userID),{handleAction:g,handleMessage:u,applicant:D,invitee:W,groupID:M,authentication:T,messageKey:P}}},pD=new class{init(s){s.ssoLog.debug("GroupApplication.init"),qv.init(s),Kv.init(s)}};let DC=class{constructor(s){this.userID="",this.avatar="",this.nick="",this.role="",this.joinTime="",this.nameCard="",this.muteUntil=0,this.memberCustomField=[],this.isOnline=!1,this.updateMember(s)}updateMember(s){const{core:{utils:{isUndefined:n},common:{deepMerge:g}}}=Wn;n(s.muteTime)||(this.muteUntil=Math.floor((Date.now()+1e3*s.muteTime)/1e3)),n(s.onlineStatus)||(this.isOnline=s.onlineStatus==="Online");const u=[null,void 0,"",0,NaN];s.memberCustomField&&Tm(this.memberCustomField,s.memberCustomField),g(this,s,["memberCustomField","marks","onlineStatus","muteTime"],u)}};function lB(s,n){return pA(this,void 0,void 0,function*(){const{groupID:g,userID:u,muteTime:E,role:m,nameCard:D,memberCustomField:M}=s;let T;M&&(T=VE(M));const P={GroupId:g,Member_Account:u,ShutUpTime:E,Role:m,NameCard:D,AppMemberDefinedData:T};return n.common.buildAndSendPacket({servcmd:"group_open_http_svc.modify_group_member_info",data:P})})}var mD=new class{constructor(){this._name="GetGroupMemberList"}init(s,n){this._core=s;const{helper:g}=s;g.registerApi({apiName:"getGroupMemberList",context:this,matcher:()=>!n.getInstalledSubPlugins().includes(ta)})}getGroupMemberList(s){return pA(this,void 0,void 0,function*(){const n="getGroupMemberList",{groupID:g,offset:u=0,count:E=100,role:m="",filter:D=""}=s,M=Yi.getLocalGroup(g),T=E>100?100:E,P={groupID:g,offset:u,limit:T,memberRoleFilter:ju.includes(m)?[m]:void 0,memberInfoFilter:fm};try{const W=yield function(se,_i){return pA(this,void 0,void 0,function*(){const{isCommunity:Ti}=_i.common,{groupID:Ft,offset:Ni,limit:cs,memberRoleFilter:Se,memberInfoFilter:mt}=se,UA={GroupId:Ft,Limit:cs,MemberRoleFilter:Se,MemberInfoFilter:mt};return Ti({groupID:Ft})?UA.Next=String(Ni):UA.Offset=Ni,_i.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_group_member_info",data:UA})})}(P,this._core),{MemberList:iA,MemberNum:EA,Next:RA}=W||{},kA=`${this._name}.${n} ok, totalMemberCount:${EA} next:${RA}`,{utils:{isArray:xA,isEmpty:LA},common:{isCommunity:SA}}=this._core;if(M&&(M.memberCount=EA),!xA(iA)||iA.length===0)return dn({memberList:[],offset:0},{message:kA});let OA=u+T;SA({groupID:g})&&(OA=LA(RA)?0:RA),iA.lengthD.userID),u=yield(n=this._core.user.userProfile)===null||n===void 0?void 0:n.getUserProfile({userIDList:g}),E=u?.data||[],m=new Map(E.map(D=>[D.userID,D]));return s.forEach(D=>{if(m.has(D.userID)){const{nick:M="",avatar:T=""}=m.get(D.userID);D.nick=M,D.avatar=T}}),s})}_generateGroupMember(s){const n=[];for(let g=0,u=s.length;g50&&(T.warn("getGroupMemberProfile",`${this._name}.${n} userIDList length:${u.length} exceeds limit 50`),u.splice(50));const P=`userIDList length:${u.length} groupID:${g}`;try{const W=yield function(kA,xA){return pA(this,void 0,void 0,function*(){const{groupID:LA,userIDList:SA,memberInfoFilter:OA,memberCustomFieldFilter:JA}=kA,ae={GroupId:LA,Member_List_Account:SA,MemberInfoFilter:OA,AppDefinedDataFilter_GroupMember:JA};return xA.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_specified_group_member_info",data:ae})})}({groupID:g,userIDList:u,memberCustomFieldFilter:E,memberInfoFilter:[...fm]},this._core),{MemberList:iA}=W||{};if(!M(iA)||iA.length===0)return dn({memberList:[]});let EA=this._convertMemberInfo(iA);EA=yield this._getMemberAvatarAndNick(EA);const RA=this._generateGroupMember(EA);return dn({memberList:RA},{message:P})}catch(W){throw new D.ChatError({functionName:n,code:W?.errorCode,message:W?.errorInfo,moreMessage:P})}})}_convertMemberInfo(s){const n=[];for(let g=0,u=s.length;gD.userID),u=yield(n=this._core.user.userProfile)===null||n===void 0?void 0:n.getUserProfile({userIDList:g}),E=u?.data||[],m=new Map(E.map(D=>[D.userID,D]));return s.forEach(D=>{if(m.has(D.userID)){const{nick:M="",avatar:T=""}=m.get(D.userID);D.nick=M,D.avatar=T}}),s})}_generateGroupMember(s){const n=[];for(let g=0,u=s.length;g({Member_Account:M}));try{const M=yield function(RA,kA){return pA(this,void 0,void 0,function*(){const{groupID:xA,userIDList:LA}=RA,SA={GroupId:xA,MemberList:LA};return kA.common.buildAndSendPacket({servcmd:"group_open_http_svc.add_group_member",data:SA})})}({groupID:g,userIDList:D},this._core),{MemberList:T=[]}=M||{},{failureUserIDList:P,successUserIDList:W,existedUserIDList:iA,overLimitUserIDList:EA}=this._handleResult(T);return dn({failureUserIDList:P,successUserIDList:W,existedUserIDList:iA,overLimitUserIDList:EA,group:E},{message:` groupID:${g} successUserIDList:${W} failureUserIDList:${P} existedUserIDList:${iA} overLimitUserIDList:${EA}`})}catch(M){throw new m.ChatError({functionName:n,code:M?.errorCode,message:M?.errorInfo})}})}_handleResult(s){const n=[],g=[],u=[],E=[];return s.forEach(m=>{const{Result:D,Member_Account:M}=m;D===ym?n.push(M):D===Dm?g.push(M):D===Sm?u.push(M):D===cD&&E.push(M)}),{failureUserIDList:n,successUserIDList:g,existedUserIDList:u,overLimitUserIDList:E}}},Rd=new class{constructor(){this._name="DeleteGroupMember"}init(s,n){this._core=s;const{helper:g}=s;g.registerApi({apiName:"deleteGroupMember",context:this,matcher:()=>!n.getInstalledSubPlugins().includes(ta)})}deleteGroupMember(s){return pA(this,void 0,void 0,function*(){const n="deleteGroupMember",{groupID:g,userIDList:u}=s,E=Yi.getLocalGroup(g),{helper:m,utils:{isUndefined:D},ssoLog:M}=this._core;if(D(E))throw new m.ChatError({functionName:n,code:ST});u.length>20&&(M.warn("deleteGroupMember",`${this._name}.${n} userIDList length:${u.length} exceeds limit 20`),u.splice(20));try{return yield function(T,P){return pA(this,void 0,void 0,function*(){const{groupID:W,userIDList:iA,reason:EA}=T,RA={GroupId:W,MemberToDel_Account:iA,Reason:EA};return P.common.buildAndSendPacket({servcmd:"group_open_http_svc.delete_group_member",data:RA})})}({groupID:g,userIDList:u},this._core),dn({group:E,userIDList:u},{message:`groupID:${g} userIDList length:${u.length}`})}catch(T){throw new m.ChatError({functionName:n,code:T?.errorCode,message:T?.errorInfo})}})}},jv=new class{constructor(){this._name="SetGroupMemberMuteTime"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"setGroupMemberMuteTime",context:this})}setGroupMemberMuteTime(s){return pA(this,void 0,void 0,function*(){const{helper:n}=this._core,{groupID:g,userID:u,muteTime:E}=s,m=` groupID:${g} userID:${u} muteTime:${E}`;this._preCheckSettingMuteParams(s);try{yield lB(s,this._core);const D=Yi.getLocalGroup(g),M=new DC({userID:u,muteTime:E});return dn({group:D,member:M},{message:m})}catch(D){throw new n.ChatError({functionName:"setGroupMemberMuteTime",code:D?.errorCode,message:D?.errorInfo,moreMessage:m})}})}_preCheckSettingMuteParams(s){const{userID:n}=s,{store:g,helper:u}=this._core;if(n===g.get("login").userId)throw new u.ChatError({functionName:"setGroupMemberMuteTime",code:QD})}},LQ=new class{constructor(){this._name="SetGroupMemberRole"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"setGroupMemberRole",context:this})}setGroupMemberRole(s){return pA(this,void 0,void 0,function*(){const n="setGroupMemberRole",{helper:g}=this._core,{groupID:u,userID:E,role:m}=s,D=`${this._name}.${n} ok, groupID:${u} userID:${E} role:${m}`;this._preCheckSettingRoleParams(s);try{yield lB(s,this._core);const M=Yi.getLocalGroup(u),T=new DC({userID:E,role:m});return dn({group:M,member:T},{message:D})}catch(M){throw new g.ChatError({functionName:n,code:M?.errorCode,message:M?.errorInfo,moreMessage:D})}})}_preCheckSettingRoleParams(s){var n;const{groupID:g,userID:u,role:E}=s,{store:m,helper:D,OuterConstant:M,common:{isCommunity:T}}=this._core,P=Yi.getLocalGroup(g);if(((n=P?.selfInfo)===null||n===void 0?void 0:n.role)!==M.GRP_MBR_ROLE_OWNER)throw new D.ChatError({functionName:"setGroupMemberRole",code:RT});if(u===m.get("login").userId)throw new D.ChatError({functionName:"setGroupMemberRole",code:Yv});const W=[...ju];if(T({groupID:g})&&W.push(M.GRP_MBR_ROLE_CUSTOM),!W.includes(E))throw new D.ChatError({functionName:"setGroupMemberRole",code:wm})}},fD=new class{constructor(){this._name="SetGroupMemberNameCard"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"setGroupMemberNameCard",context:this})}setGroupMemberNameCard(s){return pA(this,void 0,void 0,function*(){var n;const g="setGroupMemberNameCard",{helper:u,common:{getCurrentUserID:E}}=this._core,{groupID:m,userID:D=E(),nameCard:M}=s,T=`${this._name}.${g} ok, groupID:${m} userID:${D} nameCard:${M}`;this._preCheckSettingNameCardParams(s);try{yield lB({groupID:m,userID:D,nameCard:M},this._core);const W=Yi.getLocalGroup(m);D===((n=W?.selfInfo)===null||n===void 0?void 0:n.userID)&&(W.updateSelfInfo({nameCard:M}),Yi.emitGroupListUpdate(),Yi.updateConversationGroupProfile(m));const iA=new DC({userID:D,nameCard:M});return dn({group:W,member:iA},{message:T})}catch(P){throw new u.ChatError({functionName:g,code:P?.errorCode,message:P?.errorInfo,moreMessage:T})}})}_preCheckSettingNameCardParams(s){const{groupID:n}=s,{helper:g}=this._core,u=Yi.getLocalGroup(n);if(Sd(u?.type))throw new g.ChatError({functionName:"setGroupMemberNameCard",code:_m})}},bm=new class{constructor(){this._name="SetGroupMemberCustomField"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"setGroupMemberCustomField",context:this})}setGroupMemberCustomField(s){return pA(this,void 0,void 0,function*(){const n="setGroupMemberCustomField",{helper:g,common:{getCurrentUserID:u}}=this._core;this._preCheckSettingCustomFiledParams(s);const{groupID:E,userID:m=u(),memberCustomField:D}=s,M=`${this._name}.${n} ok, groupID:${E}userID:${m} memberCustomField:${JSON.stringify(D)}`;try{yield lB({groupID:E,userID:m,memberCustomField:D},this._core);const P=Yi.getLocalGroup(E),W=new DC({userID:m,memberCustomField:D});return dn({group:P,member:W},{message:M})}catch(T){throw new g.ChatError({functionName:n,code:T?.errorCode,message:T?.errorInfo,moreMessage:M})}})}_preCheckSettingCustomFiledParams(s){const{groupID:n}=s,{helper:g}=this._core,u=Yi.getLocalGroup(n);if(Sd(u?.type))throw new g.ChatError({functionName:"setGroupMemberCustomField",code:_m})}},Wv=new class{init(s,n){s.ssoLog.debug("GroupMember.init"),mD.init(s,n),kQ.init(s),vd.init(s),Rd.init(s,n),jv.init(s),LQ.init(s),fD.init(s),bm.init(s)}getGroupMemberList(s){return mD.getGroupMemberList(s)}deleteGroupMember(s){return Rd.deleteGroupMember(s)}},GT=new class{init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"getGroupCounters",context:this})}getGroupCounters(s){return pA(this,void 0,void 0,function*(){const n="getGroupCounters";try{Nm(n,sc);const{groupID:g,keyList:u=[]}=s,{avChatRoomKey:E,lastUpdateTime:m}=nc.getLocalGroupCounters(g);if(!(Date.now()-m>=this._getExpireTime()))return{code:0,data:{counters:nc.getLocalCounters(g,u)}};const D=yield function(P){return pA(this,void 0,void 0,function*(){const{groupID:W,GroupCounterKeys:iA,avChatRoomKey:EA}=P,{common:RA}=Wn.core,kA={GroupId:W,keyList:iA,BytesKey:EA};return RA.buildAndSendPacket({servcmd:"group_open_http_svc.get_group_counter",data:kA})})}({groupID:g,keyList:u,avChatRoomKey:E}),{GroupCounter:M=[],GroupCounterSeq:T}=D;return nc.updateLocalGroupCounters({groupID:g,counterList:M,groupCounterSeq:T}),{code:0,data:{counters:nc.getLocalCounters(g,u)}}}catch(g){yC(n,g)}})}_getExpireTime(){const{store:s,utils:{isUndefined:n}}=this._core,g=s.get("cloudConfig")||{},{grp_counter_expire_time:u}=g;return n(u)?3e4:Number(u)}},km=new class{init(s){const{helper:n}=s;n.registerApi({apiName:"setGroupCounters",context:this}),n.registerApi({apiName:"increaseGroupCounter",context:this}),n.registerApi({apiName:"decreaseGroupCounter",context:this})}setGroupCounters(s){return pA(this,void 0,void 0,function*(){return this._handleCounterOperation(Ku,s)})}increaseGroupCounter(s){return pA(this,void 0,void 0,function*(){return this._handleCounterOperation(mm,s)})}decreaseGroupCounter(s){return pA(this,void 0,void 0,function*(){return this._handleCounterOperation(Ri,s)})}_handleCounterOperation(s,n){return pA(this,void 0,void 0,function*(){const g=`${s}GroupCounter`;try{Nm(g,sc);const{groupID:u,key:E,value:m=0}=n,{avChatRoomKey:D}=nc.getLocalGroupCounters(u),M=s===Ku?this._convertObjectToList(n.counters):[{Key:E,Value:m}],T=yield this._updateGroupCounters({groupID:u,counterList:M,avChatRoomKey:D,mode:s});return nc.setGroupCounters(u,T),{code:0,data:{counters:T}}}catch(u){yC(g,u)}})}_updateGroupCounters(s){return pA(this,void 0,void 0,function*(){const n=yield function(E){const{groupID:m,counterList:D,mode:M,avChatRoomKey:T}=E,{common:P}=Wn.core,W={GroupId:m,GroupCounter:D,Mode:M,BytesKey:T};return P.buildAndSendPacket({servcmd:"group_open_http_svc.update_group_counter",data:W})}(s),{GroupCounter:g=[]}=n,u={};return g.forEach(E=>{const{Key:m,Value:D=0}=E;u[m]=D}),u})}_convertObjectToList(s){return Object.entries(s).map(([n,g])=>({Key:n,Value:g||0}))}},IB=new class{init(s){this._core=s,GT.init(s),km.init(s)}isGroupCounterUpdated(s){const{elements:{groupCounterInfo:n}}=s,{utils:{isEmpty:g}}=this._core;return!g(n)}handleGroupCounterUpdated(s){const{to:n,elements:{groupCounterInfo:g}}=s;g.forEach(u=>{const{type:E,groupCounterSeq:m,counterList:D=[]}=u;E!==ni&&E!==on||this._processAndNotifyCounterUpdate(n,m,D),E===yo&&nc.deleteLocalGroupCounters({groupID:n,groupCounterSeq:m,counterList:D})})}_processAndNotifyCounterUpdate(s,n,g){const{OuterEvent:u,notificationCenter:E}=this._core;nc.updateLocalGroupCounters({groupID:s,groupCounterSeq:n,counterList:g}),g.forEach(({Key:m,Value:D=0})=>{E.emitOuterEvent(u.GROUP_COUNTER_UPDATED,{name:u.GROUP_COUNTER_UPDATED,data:{groupID:s,key:m,value:D}})})}reset(){nc.reset()}},Lm=new class{constructor(){this._name="InitGroupAttributes"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"initGroupAttributes",context:this})}initGroupAttributes(s){return pA(this,void 0,void 0,function*(){const{groupID:n,groupAttributes:g}=s,{serverMainSequence:u,avChatRoomKey:E}=zs.getGroupAttributesCache(n),m=zs.convertKeyValueMapToList(g);try{const D=yield function(W,iA){return pA(this,void 0,void 0,function*(){const{groupID:EA,mainSequence:RA,groupAttributeList:kA,avChatRoomKey:xA}=W,LA={GroupId:EA,AttrMainSeq:RA,GroupAttr:kA,BytesKey:xA,AttrControl:["RaceConflict"]};return iA.common.buildAndSendPacket({servcmd:"group_open_http_svc.set_group_attr",data:LA})})}({groupID:n,avChatRoomKey:E,groupAttributeList:m,mainSequence:u},this._core),{AttrMainSeq:M,GroupAttr:T}=D||{},P=T.map(W=>{const{Key:iA,seq:EA}=W;return{key:iA,value:g[iA],sequence:EA}});return zs.saveGroupAttributesCacheValuesCopy(n),zs.refreshGroupAttributesCache({groupID:n,serverMainSequence:M,groupAttributeList:P,operation:lD}),zs.emitGroupAttributesUpdated(n),dn({groupAttributes:g},{message:` groupID:${n} serverMainSequence:${M}`})}catch(D){throw new this._core.helper.ChatError({functionName:"initGroupAttributes",code:D?.errorCode,message:D?.errorInfo})}})}},bT=new class{constructor(){this._name="SetGroupAttributes"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"setGroupAttributes",context:this}),n.registerExperimentalAPI("setRichStatus",this)}setGroupAttributes(s){return pA(this,void 0,void 0,function*(){const{groupID:n,groupAttributes:g,richStatusMode:u}=s,{serverMainSequence:E,avChatRoomKey:m,values:D}=zs.getGroupAttributesCache(n),M=zs.convertKeyValueMapToList(g).map(T=>{var P;const{key:W,value:iA}=T;return{key:W,value:iA,seq:((P=D.get(T.key))===null||P===void 0?void 0:P.sequence)||0}});try{const T=yield function(EA,RA){return pA(this,void 0,void 0,function*(){const{groupID:kA,mainSequence:xA,groupAttributeList:LA,avChatRoomKey:SA,richStatusMode:OA}=EA,JA={GroupId:kA,AttrMainSeq:xA,GroupAttr:LA,BytesKey:SA,AttrControl:["RaceConflict"],AllowRoomEngineOpt:OA};return RA.common.buildAndSendPacket({servcmd:"group_open_http_svc.modify_group_attr",data:JA})})}({groupID:n,avChatRoomKey:m,groupAttributeList:M,mainSequence:E,richStatusMode:u},this._core),{AttrMainSeq:P,GroupAttr:W}=T||{},iA=W.map(EA=>{const{Key:RA,seq:kA}=EA;return{key:RA,value:g[RA],sequence:kA}});return zs.saveGroupAttributesCacheValuesCopy(n),zs.refreshGroupAttributesCache({groupID:n,serverMainSequence:P,groupAttributeList:iA,operation:Fv}),zs.emitGroupAttributesUpdated(n),dn({groupAttributes:g},{message:` groupID:${n} serverMainSequence:${P}`})}catch(T){throw new this._core.helper.ChatError({functionName:"setGroupAttributes",code:T?.errorCode,message:T?.errorInfo})}})}setRichStatus(s){return pA(this,void 0,void 0,function*(){const{groupID:n,richStatus:g}=s;return this.setGroupAttributes({groupID:n,groupAttributes:g,richStatusMode:!0})})}},yD=new class{constructor(){this._name="DeleteGroupAttributes"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"deleteGroupAttributes",context:this}),n.registerExperimentalAPI("deleteRichStatus",this)}deleteGroupAttributes(s){return pA(this,void 0,void 0,function*(){const n="deleteGroupAttributes",{groupID:g,keyList:u=[],richStatusMode:E}=s;try{let m;m=u.length===0?yield this._clearGroupAttributes(g,{richStatusMode:E}):yield this._deleteGroupAttributes(g,{keyList:u,richStatusMode:E});const{resultList:D,serverMainSequence:M,operation:T,groupAttributeList:P}=m||{},W=`${this._name}.${n} ok. groupID:${g} operation: ${T}`;return zs.saveGroupAttributesCacheValuesCopy(g),zs.refreshGroupAttributesCache({groupID:g,serverMainSequence:M,groupAttributeList:P,operation:T}),zs.emitGroupAttributesUpdated(g),dn({keyList:D},{message:W})}catch(m){throw new this._core.helper.ChatError({functionName:n,code:m?.errorCode,message:m?.errorInfo})}})}deleteRichStatus(s){return pA(this,void 0,void 0,function*(){return this.deleteGroupAttributes(Object.assign(Object.assign({},s),{richStatusMode:!0}))})}_deleteGroupAttributes(s,n){return pA(this,void 0,void 0,function*(){const{serverMainSequence:g,avChatRoomKey:u,values:E}=zs.getGroupAttributesCache(s),{keyList:m,richStatusMode:D}=n,M=[],T=[];m.forEach(iA=>{if(E.has(iA)){const{sequence:EA=0}=E.get(iA)||{};T.push({key:iA,seq:EA}),M.push(iA)}});const P=yield function(iA,EA){return pA(this,void 0,void 0,function*(){const{groupID:RA,mainSequence:kA,groupAttributeList:xA,avChatRoomKey:LA,richStatusMode:SA}=iA,OA={GroupId:RA,AttrMainSeq:kA,GroupAttr:xA,BytesKey:LA,AttrControl:["RaceConflict"],AllowRoomEngineOpt:SA};return EA.common.buildAndSendPacket({servcmd:"group_open_http_svc.delete_group_attr",data:OA})})}({groupID:s,avChatRoomKey:u,groupAttributeList:T,mainSequence:g,richStatusMode:D},this._core),{AttrMainSeq:W}=P||{};return{resultList:M,serverMainSequence:W,groupAttributeList:T,operation:uD}})}_clearGroupAttributes(s,n){return pA(this,void 0,void 0,function*(){const{serverMainSequence:g,avChatRoomKey:u,values:E}=zs.getGroupAttributesCache(s),{richStatusMode:m}=n||{},D=[...E.keys()],M=yield function(P,W){return pA(this,void 0,void 0,function*(){const{groupID:iA,mainSequence:EA,avChatRoomKey:RA,richStatusMode:kA}=P,xA={GroupId:iA,AttrMainSeq:EA,BytesKey:RA,AttrControl:["RaceConflict"],AllowRoomEngineOpt:kA};return W.common.buildAndSendPacket({servcmd:"group_open_http_svc.clear_group_attr",data:xA})})}({groupID:s,avChatRoomKey:u,mainSequence:g,richStatusMode:m},this._core),{AttrMainSeq:T}=M||{};return{resultList:D,serverMainSequence:T,operation:ID}})}},DD=new class{constructor(){this._name="GetGroupAttributes"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"getGroupAttributes",context:this}),n.registerExperimentalAPI("getRichStatus",this,"getGroupAttributes")}getGroupAttributes(s){return pA(this,void 0,void 0,function*(){const{groupID:n}=s,{avChatRoomKey:g,lastUpdateTime:u,localMainSequence:E,serverMainSequence:m}=zs.getGroupAttributesCache(n),{helper:{ChatError:D}}=this._core,M=`groupID:${n} localMainSequence:${E} serverMainSequence:${m} keyList:${s.keyList}`;if(Date.now()-u>=3e4||E{const{key:iA,value:EA,seq:RA}=W;return{key:iA,value:EA,sequence:RA}});return zs.refreshGroupAttributesCache({groupID:u,serverMainSequence:M,groupAttributeList:P,operation:Ov}),{serverGroupAttributeList:T}})}},UQ=new class{init(s){s.ssoLog.debug("GroupAttribute.init"),Lm.init(s),bT.init(s),yD.init(s),DD.init(s),zs.init(s)}isGroupAttributesUpdated(s){return zs.isGroupAttributesUpdated(s)}handleGroupAttributesUpdated(s){const{to:n,elements:{newGroupProfile:g}}=s,{groupAttributeOption:u}=g,{serverMainSequence:E,withChangedAttributeInfo:m}=u,{localMainSequence:D}=zs.getGroupAttributesCache(n),M=E-D;if(console.log(`GroupAttribute.handleGroupAttributesUpdated groupID:${n} withChangedAttributeInfo:${m} diffSequence:${M}`),M!==0)if(zs.saveGroupAttributesCacheValuesCopy(n),m!==1||M!==1){if(zs.hasGroupAttributesCache(n)){const{avChatRoomKey:T}=zs.getGroupAttributesCache(n);DD.getGroupAttributesFromServer({groupID:n,avChatRoomKey:T}).then(()=>{zs.emitGroupAttributesUpdated(n)}).catch(()=>{})}}else zs.handleGroupAttributesUpdated({groupID:n,groupAttributeOption:u})}reset(){zs.reset()}};function HE(s,n="tips"){const{ClientSeq:g,From_Account:u,MsgClientTime:E,MsgPriority:m,MsgRandom:D,MsgSeq:M,MsgTimeStamp:T,TinyId:P,ToGroupId:W,GroupInfo:iA,MsgBody:EA}=s,RA=function(kA){const{GroupCode:xA,GroupId:LA,GroupName:SA,GroupType:OA,MsgFrom_AccountExtraInfo:JA,From_Account:ae,To_Account:se}=kA;return{groupCode:xA,groupID:LA,groupName:SA,type:OA,messageFromAccountExtraInformation:JA,from:ae,to:se}}(iA);return{clientSequence:g,from:u,clientTime:E,priority:m,random:D,sequence:M,time:T,tinyID:P,to:W,groupProfile:RA,elements:n==="tips"?Zu(EA):dh(EA)}}function Zu(s){const n={};return Object.keys(s).forEach(g=>{var u,E;switch(g){case"MemberNum":n.memberCount=s[g];break;case"OpType":n.operationType=s[g];break;case"Operator_Account":n.operatorID=s[g];break;case"List_Account":n.userIDList=s[g];break;case"MsgMemberExtraInfo":n.memberInfoList=(u=s[g])===null||u===void 0?void 0:u.map(m=>SD(m));break;case"MsgOperatorMemberExtraInfo":n.operatorInfo=SD(s[g]);break;case"MsgGroupNewInfo":n.newGroupProfile=function(m){const D={};return Object.keys(m).forEach(M=>{switch(M){case"GroupIntroduction":D.introduction=m[M];break;case"GroupName":D.groupName=m[M];break;case"GroupFaceUrl":D.avatar=m[M];break;case"GroupNotification":D.notification=m[M];break;case"ApplyJoinOption":D.joinOption=m[M];break;case"InviteJoinOption":D.inviteOption=m[M];break;case"ShutupAll":D.muteAllMembers=m[M];break;case"Owner_Account":D.ownerID=m[M];break;case"GroupAttrOption":D.groupAttributeOption=function(P){const{BytesChangedKeys:W,GroupAttrSeq:iA,OpType:EA,PushChangedAttrValFlag:RA,GroupAttrInfo:kA}=P,xA=kA.map(LA=>{const{Key:SA,Val:OA,SubKeySeq:JA}=LA;return{key:SA,value:OA,sequence:JA}});return{changedKeyList:W,groupAttributeList:xA,serverMainSequence:iA,operation:EA,withChangedAttributeInfo:RA}}(m[M]);break;case"MsgAppDefinedData":D.groupCustomField=(T=m[M])==null?void 0:T.map(P=>({key:P.Key,value:P.Value}));break;case"InviteOption":D.inviteOption=_T[m[M]]||m[M]}var T}),D}(s[g]);break;case"MsgMemberInfo":n.msgMemberInfo=(E=s[g])===null||E===void 0?void 0:E.map(m=>function(D){const{ShutupTime:M,User_Account:T}=D;return{muteTime:M,userID:T}}(m));break;case"OnlineMemberInfo":n.onlineMemberInfo=function(m){const{ExpireTime:D,OnlineMemberNum:M}=m;return{expireTime:D,onlineMemberNum:M}}(s[g]);break;case"GroupCounterInfo":n.groupCounterInfo=function(m){return m.map(D=>{const{GroupCounterSeq:M,GroupCounter:T,Type:P}=D;return{type:P,groupCounterSeq:M,counterList:T}})}(s[g])}}),n}function SD(s){const{ImageUrl:n,NickName:g,Role:u,UserId:E}=s;return{avatar:n,nick:g,role:u,userID:E}}function dh(s){const n={};return Object.keys(s).forEach(g=>{switch(g){case"MsgKey":n.messageKey=s[g];break;case"Operator_Account":n.operatorID=s[g];break;case"ReportType":n.operationType=s[g];break;case"Authentication":n.authentication=s[g];break;case"MsgFlag":n.messageRemindType=s[g];break;case"UserDefinedField":n.userDefinedField=s[g];break;case"RemarkInfo":n.remarkInfo=s[g];break;case"BanDuration":n.duration=s[g];break;case"MuteTime":n.muteTime=s[g];break;case"MsgMemberExtraInfoList":n.inviteeInfoList=(u=s[g]||[])==null?void 0:u.map(E=>{const{UserId:m,ImageUrl:D,NickName:M}=E;return{userID:m,avatar:D,nick:M}});break;case"MemberList_Account":n.inviteeList=s[g]}var u}),n}class Um{constructor(n){this.type=Wn.core.OuterConstant.MSG_GRP_TIP,this.content={},this._initContent(n)}static parseServerPushElement(n){const g=Zu(n);return new Um(g)}_initContent(n){Object.keys(n).forEach(g=>{switch(g){case"groupProfile":this._initGroupProfile(n[g]);break;case"operatorInfo":this._initOperatorInfo(n[g]);break;case"memberInfoList":case"msgMemberInfo":this._updateMemberList(n[g]);break;case"newGroupProfile":this._initNewGroupProfile(n[g]);break;case"memberExtraInfo":case"remarkInfo":case"onlineMemberInfo":break;default:this.content[g]=n[g]}}),this.content.userIDList||(this.content.userIDList=[this.content.operatorID])}_initGroupProfile(n){this.content.groupProfile={};const g=Object.keys(n);for(let u=0;u{n.forEach(u=>{g.userID===u.userID&&Object.assign(g,u)})}):this.content.memberList=n}_initNewGroupProfile(n){this.content.newGroupProfile={};const g=Object.keys(n);for(let u=0;u0&&this._handleGroupTipMessage(g),{conversationUpdateFieldList:u,messageList:g}}_emitGroupTipsEvent(s){var n;const{constants:{WORKFLOW_STEP:g}}=this._core,{messageList:u=[]}=((n=s?.result)===null||n===void 0?void 0:n[g.HANDLE_GROUP_TIPS_NOTIFICATION])||{};if(u.length>0){const{notificationCenter:E,OuterEvent:m}=this._core;E.emitOuterEvent(m.MESSAGE_RECEIVED,{name:m.MESSAGE_RECEIVED,data:u})}}_handleGroupTips(s,n=!0){const{Event:g,GroupTips:u}=s,E=new Map,m=[],D=[];for(let M=0,T=u.length;M{const{operationType:u}=g.payload;switch(u){case n.JOINED:this._handleNewMemberJoined(g);break;case n.QUITTED:this._handleMemberQuitted(g);break;case n.KICKED:this._handleMemberKicked(g);break;case n.GROUP_PROFILE_UPDATED:this._handleGroupProfileUpdated(g);break;case n.ADMIN_SET:this._handleMemberGrantAdmin(g);break;case n.ADMIN_CANCELED:this._handleMemberRevokeAdmin(g)}})}_handleNewMemberJoined(s){this._handleGroupMemberCountUpdated(s)}_handleMemberQuitted(s){this._handleGroupMemberCountUpdated(s)}_handleMemberKicked(s){this._handleGroupMemberCountUpdated(s)}_handleGroupProfileUpdated(s){var n;const{newGroupProfile:g,groupProfile:u,operatorInfo:E}=s.payload,{groupID:m}=u,D=Yi.getLocalGroup(m);Object.keys(g).forEach(T=>{switch(T){case"ownerID":this._handleGroupOwnerChanged(m,g);break;case"groupName":D.name=g[T];break;case"groupCustomField":Array.isArray(D[T])&&Array.isArray(g[T])?Tm(D[T],g[T]):D[T]=g[T];break;default:D[T]=g[T]}});const{utils:{isUndefined:M}}=this._core;M(E)||((n=D?.selfInfo)===null||n===void 0?void 0:n.userID)!==E.userID||Object.keys(E).forEach(T=>{T==="nameCard"&&D.updateSelfInfo({nameCard:E[T]}),T==="role"&&this._updateSelfRole(D,E[T])}),Yi.emitGroupListUpdate(),Yi.updateConversationGroupProfile(m)}_handleGroupOwnerChanged(s,n){const{common:g,OuterConstant:u}=this._core,E=Yi.getLocalGroup(s),m=g.getCurrentUserID(),{ownerID:D}=n;m===D&&E.updateGroup({ownerID:D,selfInfo:{role:u.GRP_MBR_ROLE_OWNER}})}_updateSelfRole(s,n){const{OuterConstant:g}=this._core;let u=g.GRP_MBR_ROLE_MEMBER;n===pT?u=g.GRP_MBR_ROLE_OWNER:n===dD&&(u=g.GRP_MBR_ROLE_ADMIN),s.updateSelfInfo({role:u})}_handleGroupMemberCountUpdated(s){const{memberCount:n,groupProfile:{groupID:g}}=s.payload,u=Yi.getLocalGroup(g),{utils:{isNumber:E}}=this._core;u&&E(n)&&u.memberCount!==n&&(u.memberCount=n,Yi.emitGroupListUpdate(),Yi.updateConversationGroupProfile(g))}_handleGroupTipsRecover(s){const{utils:{isArray:n}}=this._core,{groupTipList:g}=s?.result||{};n(g)&&g.forEach(u=>{const{messageList:E}=this._handleGroupTips({Event:u.Event,GroupTips:[u]},!1);this._handleGroupTipMessage(E)})}_handleMemberGrantAdmin(s){const{OuterConstant:n}=this._core,{groupProfile:g,userIDList:u}=s.payload,E=this._core.common.getCurrentUserID(),{groupID:m}=g,D=Yi.getLocalGroup(m);D&&u.includes(E)&&(D.updateSelfInfo({role:n.GRP_MBR_ROLE_ADMIN}),Yi.emitGroupListUpdate(),Yi.updateConversationGroupProfile(m))}_handleMemberRevokeAdmin(s){const{OuterConstant:n}=this._core,{groupProfile:g,userIDList:u}=s.payload,E=this._core.common.getCurrentUserID(),{groupID:m}=g,D=Yi.getLocalGroup(m);D&&u.includes(E)&&(D.updateSelfInfo({role:n.GRP_MBR_ROLE_MEMBER}),Yi.emitGroupListUpdate(),Yi.updateConversationGroupProfile(m))}};class FQ{constructor(n){this.type=Wn.core.OuterConstant.MSG_GRP_SYS_NOTICE,this.content={},this._initContent(n)}static parseServerPushElement(n){const g=dh(n);return new FQ(g)}_initContent(n){Object.keys(n).forEach(g=>{switch(g){case"remarkInfo":this.content.handleMessage=n[g];break;case"groupProfile":this._initGroupProfile(n[g]);break;case"memberInfoList":break;default:this.content[g]=n[g]}})}_initGroupProfile(n){this.content.groupProfile={};const g=Object.keys(n);for(let u=0;u0&&this._handleGroupSysTemMessage(g,E),g===!0&&E.length>0&&m.emitOuterEvent(D.MESSAGE_RECEIVED,{name:D.MESSAGE_RECEIVED,data:E})}_handleGroupSystemNotification(s,n){const g=[];let u={};for(let E=0;E0?[u]:[],messageList:g}}_assembleMessage(s){const{message:{messageFactory:n},OuterConstant:g,utils:{randomInt:u}}=this._core;s.flow="in",s.conversationType=g.CONV_SYSTEM,s.conversationSubType=s.groupProfile.type,s.conversationID=g.CONV_SYSTEM;const E=n.createMessage(s),m=new FQ(Object.assign(Object.assign({},s.elements),{groupProfile:Object.assign({},s.groupProfile)}));E.setElement(m),E.isSystemMessage=!0;const D=E.sequence===1&&E.random===1,M=E.sequence===2&&E.random===2;return(D||M)&&(E.sequence=u(),E.random=u(),E.generateMessageID()),E}_handleConversationOptions(s,n){const{OuterConstant:g}=this._core,u={conversationID:g.CONV_SYSTEM,unreadCount:0,type:g.CONV_SYSTEM,subType:s.conversationSubType,lastMessage:null};return n&&u.unreadCount++,u}_handleGroupSysTemMessage(s,n){s&&n.forEach(g=>{const{operationType:u}=g.payload;switch(u){case fT:this._handleGroupJoinResult(g);break;case xv:this._handleMemberKicked(g);break;case yT:this._handleGroupDismissed(g);break;case DT:this._handleGroupInvitedResult(g);break;case CD:this._handleGroupQuitResult(g);break;case TQ:this._handleMessageRemindTypeSynced(g);break;case Mm:this._handleAVChatRoomMemberBanned(g)}})}_handleGroupJoinResult(s){const{groupProfile:n}=s.payload,{groupID:g,type:u}=n,E=Yi.hasLocalGroup(g);this._core.ssoLog.debug("_handleGroupJoinResult",` groupID:${g} type:${u} hasLocalGroup:${E}`),E||Sd(u)||(Yi.updateLocalGroup([Object.assign({},n)]),Yi.emitGroupListUpdate())}_handleMemberKicked(s){const{groupProfile:{groupID:n,type:g}}=s.payload;Yi.hasLocalGroup(n)&&this._deleteLocalGroup(n,g),this._updateConversationProfile(n,{unreadCount:0})}_handleGroupDismissed(s){const{groupProfile:{groupID:n,type:g}}=s.payload;Yi.hasLocalGroup(n)&&this._deleteLocalGroup(n,g),this._updateConversationProfile(n,{unreadCount:0})}_handleGroupInvitedResult(s){const{groupProfile:n}=s.payload,{groupID:g}=n,u=Yi.hasLocalGroup(g);this._core.ssoLog.debug("_handleGroupInvitedResult",` groupID:${g} hasLocalGroup:${u}`),u||Pl.getGroupProfile({groupID:g}).then(E=>{const{data:{group:m}}=E;Yi.updateLocalGroup([Object.assign({},m)]),Yi.emitGroupListUpdate()})}_handleGroupQuitResult(s){const{groupProfile:{groupID:n,type:g}}=s.payload,u=Yi.hasLocalGroup(n);this._core.ssoLog.debug("_handleGroupQuitResult",` groupID:${n} type:${g} hasLocalGroup:${u}`),u&&this._deleteLocalGroup(n,g),this._updateConversationProfile(n,{unreadCount:0})}_handleMessageRemindTypeSynced(s){const{groupProfile:{groupID:n},messageRemindType:g}=s.payload;this._updateConversationProfile(n,{messageRemindType:g})}_handleAVChatRoomMemberBanned(s){const{groupProfile:{groupID:n,type:g}}=s.payload;this._deleteLocalGroup(n,g)}_deleteLocalGroup(s,n){if(Sd(n)){const{appStore:{conversationStore:g},OuterConstant:{CONV_GROUP:u}}=this._core;g.deleteConversation(`${u}${s}`)}Yi.deleteLocalGroup(s),Yi.emitGroupListUpdate()}_updateConversationProfile(s,n){const{appStore:{conversationStore:g},OuterConstant:{CONV_GROUP:u}}=this._core,E=`${u}${s}`;g.getConversation(E)&&g.updateConversation(E,n)}},MD=new class{init(s){this._core=s,s.ssoLog.debug("GroupNotificationHandler.init"),zv.init(s),Zv.init(s);const{notificationCenter:n,InnerEvent:g}=s,{InnerEventSubType:u}=n;n.subscribeInnerEvent(g.MESSAGE_PUSH,u.GROUP_TIPS_NOTIFICATION,this._onNewGroupTipsNotification,this),n.subscribeInnerEvent(g.MESSAGE_PUSH,u.GROUP_SYSTEM_NOTIFICATION,this._onNewGroupSystemNotification,this),n.subscribeInnerEvent(g.DESTROY,this._dispose,this)}_onNewGroupTipsNotification(s){const{common:{workflowManager:n},constants:{WORKFLOW_NAME:g}}=this._core;n.executeWorkflow(g.RECEIVE_GROUP_TIPS_NOTIFICATION,s)}_onNewGroupSystemNotification(s){Zv.onNewGroupSystemNotification(s)}_dispose(){const{notificationCenter:s,InnerEvent:n}=this._core,{InnerEventSubType:g}=s;s.unSubscribeInnerEvent(n.MESSAGE_PUSH,g.GROUP_TIPS_NOTIFICATION,this._onNewGroupTipsNotification,this),s.unSubscribeInnerEvent(n.MESSAGE_PUSH,g.GROUP_SYSTEM_NOTIFICATION,this._onNewGroupSystemNotification,this)}};const vn={required:!0,rules:["string"],allowEmpty:!1},OQ={required:!0,rules:["number"],allowEmpty:!1},wd={required:!0,rules:["array"],allowEmpty:!1},vD={required:!0,rules:["object"],allowEmpty:!1},kT={createGroup:{name:vn,type:vn},dismissGroup:[Object.assign({key:"groupID"},vn)],joinGroup:{groupID:vn,applyMessage:{required:!1,rules:["string"],allowEmpty:!0}},quitGroup:[Object.assign({key:"groupID"},vn)],searchGroupByID:[Object.assign({key:"groupID"},vn)],getGroupProfile:{groupID:vn,groupCustomFieldFilter:{required:!1,rules:["array"],allowEmpty:!0}},updateGroupProfile:{groupID:vn,muteAllMembers:{required:!1,rules:["boolean"],allowEmpty:!1}},changeGroupOwner:{groupID:vn,newOwnerID:vn},getGroupOnlineMemberCount:[Object.assign({key:"groupID"},vn)],handleGroupApplication:{handleAction:vn},getGroupMemberList:{groupID:vn},getGroupMemberProfile:{groupID:vn,userIDList:wd,memberCustomFieldFilter:{required:!1,rules:["array"],allowEmpty:!0}},addGroupMember:{groupID:vn,userIDList:wd},deleteGroupMember:{groupID:vn,userIDList:wd},setGroupMemberMuteTime:{groupID:vn,userID:vn,muteTime:Object.assign(Object.assign({},OQ),{customValidator:s=>!(s<0)||"muteTime must be a non-negative number."})},setGroupMemberRole:{groupID:vn,userID:vn,role:vn},setGroupMemberNameCard:{groupID:vn,userID:{required:!1,rules:["string"],allowEmpty:!1},nameCard:vn},setGroupMemberCustomField:{groupID:vn,userID:{required:!1,rules:["string"],allowEmpty:!1},memberCustomField:wd},markGroupMemberList:{groupID:vn,markType:Object.assign(Object.assign({},OQ),{customValidator:s=>!(s<1e3)||"markType must be greater than or equal to 1000."}),enableMark:{required:!0,rules:["boolean"],allowEmpty:!1},userIDList:wd},initGroupAttributes:{groupID:vn,groupAttributes:vD},setGroupAttributes:{groupID:vn,groupAttributes:vD},deleteGroupAttributes:{groupID:vn,keyList:Object.assign(Object.assign({},wd),{allowEmpty:!0})},getGroupAttributes:{groupID:vn,keyList:Object.assign(Object.assign({},wd),{allowEmpty:!0})},getGroupCounters:{groupID:vn,keyList:{required:!1,rules:["array"],allowEmpty:!0}},setGroupCounters:{groupID:vn,counters:vD},increaseGroupCounter:{groupID:vn,key:vn,value:OQ},decreaseGroupCounter:{groupID:vn,key:vn,value:OQ}},LT={getGroupList:!0,createGroup:!0,dismissGroup:!0,joinGroup:!0,quitGroup:!0,searchGroupByID:!0,getGroupProfile:!0,updateGroupProfile:!0,changeGroupOwner:!0,getGroupOnlineMemberCount:!0,getGroupApplicationList:!0,handleGroupApplication:!0,getGroupMemberList:!0,getGroupMemberProfile:!0,addGroupMember:!0,deleteGroupMember:!0,setGroupMemberMuteTime:!0,setGroupMemberRole:!0,setGroupMemberNameCard:!0,setGroupMemberCustomField:!0,markGroupMemberList:!0,initGroupAttributes:!0,setGroupAttributes:!0,getGroupAttributes:!0,deleteGroupAttributes:!0,getGroupCounters:!0,setGroupCounters:!0,increaseGroupCounter:!0,decreaseGroupCounter:!0};var UT=new class{constructor(){this._installedSubPlugins=[],this.groupDataHandler=Yi,this.groupAction=bQ,this.groupAttribute=UQ,this.groupMember=Wv,this.groupCounter=IB,this.name="Group"}install(s,n=[]){this._core=s,Wn.init(s),Yi.init(s),bQ.init(s,this),Wv.init(s,this),pD.init(s),IB.init(s),UQ.init(s),MD.init(s),s.helper.registerValidateConfig({auth:LT,params:kT}),this._installSubPlugins(n);const{notificationCenter:g,InnerEvent:u}=s;g.subscribeInnerEvent(u.LOGOUT,this._reset,this),g.subscribeInnerEvent(u.DESTROY,this._dispose,this)}getInstalledSubPlugins(){return this._installedSubPlugins}_installSubPlugins(s){const{utils:{isArray:n}}=this._core;s&&n(s)&&s.forEach(g=>{var u;this._installedSubPlugins.includes(g.name)||((u=g.install)===null||u===void 0||u.call(g,this._core,this),this._installedSubPlugins.push(g.name))})}_reset(){Yi.reset(),UQ.reset(),IB.reset()}_dispose(){this._reset();const{notificationCenter:s,InnerEvent:n}=this._core;s.unSubscribeInnerEvent(n.LOGOUT,this._reset,this),s.unSubscribeInnerEvent(n.DESTROY,this._dispose,this)}};const uB=new class{init(s){this.core=s}},Xv="AV_MBR_LIST",FT="AV_BAN_MBR",qE={NORMAL_MESSAGE:3,GROUP_TIPS_HAS_ROAMING:4,GROUP_SYSTEM_MESSAGE:5,GROUP_TIPS_HAS_NO_ROAMING:6,BROADCAST_MESSAGE:17,MESSAGE_REVOKED:20,MESSAGE_REACTION:21,LIVE_CUSTOM_DATA:100},Ch={GROUP_DISMISSED:5,QUIT_GROUP:8,AVCHATROOM_MEMBER_BANNED:21},RD=60,wD=2603,OT=2686,PT=2688,PQ=3122;class $v{constructor(n){const{core:g,manager:u,groupID:E,getRequestParams:m,onSuccess:D,onFail:M}=n;this._name="Polling",this._core=g,this._manager=u,this._timeoutID=-1,this._isRunning=!1,this._groupID=E,this._getRequestParams=m,this._onSuccess=D,this._onFail=M}start(){this._isRunning=!0,this._request(),console.log(`${this._name}.start pollingInterval:${this._manager.getCurrentPollingInterval(this._groupID)}`)}isRunning(){return this._isRunning}_request(){return pA(this,void 0,void 0,function*(){try{const n=this._getRequestParams(this._groupID),g=yield function(E,m){return pA(this,void 0,void 0,function*(){const{longPollingKey:D,startSequence:M,startBroadcastSeq:T,simplifiedMessage:P}=E,W={Key:D,StartSeq:M,StartBroadcastSeq:T,DownsizeFlag:P,USP:1,HoldTime:90};return m.common.buildAndSendPacket({servcmd:"group_open_long_polling_http_svc.get_msg",data:W})})}(n,this._core);this._onSuccess(this._groupID,g);const u=this._manager.getCurrentPollingInterval(this._groupID);this._runNextPolling(u)}catch(n){this._onFail(this._groupID,n),this._runNextPolling(2e3)}})}_runNextPolling(n){this.isRunning()&&(this._timeoutID>-1&&clearTimeout(this._timeoutID),this._timeoutID=setTimeout(this._request.bind(this),n))}stop(){console.log(`${this._name}.stop timerID:${this._timeoutID}`),this._timeoutID>-1&&(clearTimeout(this._timeoutID),this._timeoutID=-1),this._isRunning=!1}}class hh{constructor(n){this._maxLength=n,this._map=new Map}set(n){var g;if(this._map.size>=this._maxLength){const u=((g=this._map.entries().next().value)===null||g===void 0?void 0:g[0])||"";this._map.delete(u)}this._map.set(n,1)}has(n){return this._map.has(n)}delete(n){this.has(n)&&this._map.delete(n)}clear(){this._map.clear()}}const Xu=s=>s===qE.GROUP_TIPS_HAS_NO_ROAMING||s===qE.GROUP_TIPS_HAS_ROAMING,xQ=s=>s===qE.GROUP_SYSTEM_MESSAGE;function Fm(s){const n=function(g){const{E:u,MCT:E,MR:m,MP:D,MTS:M,GId:T,MS:P,CCD:W,F_Account:iA,IsSys:EA,GInf:RA,MsgBody:kA}=g,xA=Do(g,["E","MCT","MR","MP","MTS","GId","MS","CCD","F_Account","IsSys","GInf","MsgBody"]);return Object.assign({Event:u,MsgClientTime:E,MsgRandom:m,MsgPriority:D,MsgTimeStamp:M,ToGroupId:T,MsgSeq:P,CloudCustomData:W,From_Account:iA,IsSystemMsg:EA,GroupInfo:_D(RA),MsgBody:xT(kA)},xA)}(s);return function(g){const{Event:u}=g;(Xu(u)||xQ(u))&&(g.From_Account=g.From_Account||"@TIM#SYSTEM"),E=u,(E===qE.BROADCAST_MESSAGE||(m=>m===qE.NORMAL_MESSAGE)(u))&&function(m){const{core:{OuterConstant:D}}=uB;m.CloudCustomData=m.CloudCustomData||"",m.MsgBody=m.MsgBody.map(M=>{if(M.MsgType===D.MSG_CUSTOM){const{content:T={}}=M;M.content=Object.assign({Data:"",Desc:"",Ext:""},T)}return M})}(g);var E;Xu(u)&&function(m){const{GroupJoinType:D,MsgOperatorMemberExtraInfo:M={},MsgMemberExtraInfo:T,Operator_Account:P,List_Account:W,OpType:iA}=m.MsgBody||{};typeof D=="number"||iA!==1&&iA!==2||(m.MsgBody.GroupJoinType=iA===2?0:1),T||(m.MsgBody.MsgMemberExtraInfo=W?.map(EA=>({UserId:EA}))),iA!==1||T||(m.MsgBody.MsgMemberExtraInfo=[{UserId:M.UserId}]),m.MsgBody.MsgOperatorMemberExtraInfo=Object.assign({Operator_Account:P,ImageUrl:"",NickName:""},M)}(g),xQ(u)&&function(m){const{MsgOperatorMemberExtraInfo:D={},Operator_Account:M}=m.MsgBody||{};m.MsgBody.MsgMemberExtraInfo=Object.assign({UserId:M,ImageUrl:"",NickName:""},D),m.MsgBody=Object.assign({Authentication:"",RemarkInfo:"",MsgKey:1e3*m.MsgTimeStamp},m.MsgBody),m.MsgBody=Object.keys(m.MsgBody).filter(T=>T!=="MsgOperatorMemberExtraInfo").reduce((T,P)=>Object.assign(Object.assign({},T),{[P]:m.MsgBody[P]}),{})}(g)}(n),n}function _D(s){const n=s||{},{GN:g,GT:u,F_Hd:E,F_NN:m,F_Ll:D}=n,M=Do(n,["GN","GT","F_Hd","F_NN","F_Ll"]),T=Object.assign({GroupName:g,GroupType:u},M);return E&&(T.From_AccountHeadurl=E),m&&(T.From_AccountNick=m),D&&(T.From_AccountLevel=D),T}function xT(s){let n=s;Array.isArray(s)||(n=[s]);const g=n.map(u=>{const{O_Account:E,Opt:m,L_Account:D,RT:M,UDF:T,OpInf:P,OnlineInf:W,MsgMemberExtraInfo:iA}=u,EA=Do(u,["O_Account","Opt","L_Account","RT","UDF","OpInf","OnlineInf","MsgMemberExtraInfo"]),RA=Object.assign({Operator_Account:E,OpType:m,List_Account:D,ReportType:M,UserDefinedField:T},EA);return P&&(RA.MsgOperatorMemberExtraInfo=function(kA){const{Img:xA,NN:LA}=kA,SA=Do(kA,["Img","NN"]);return Object.assign({ImageUrl:xA,NickName:LA},SA)}(P)),iA&&(RA.MsgMemberExtraInfo=function(kA){return kA?.map(xA=>{const{Img:LA,NN:SA}=xA,OA=Do(xA,["Img","NN"]);return Object.assign({ImageUrl:LA,NickName:SA},OA)})}(iA)),W&&(RA.OnlineMemberInfo=function(kA){const{ET:xA,Num:LA}=kA;return{ExpireTime:xA,OnlineMemberNum:LA}}(W)),RA});return Array.isArray(s)?g:g[0]}var Bh=new class{constructor(){this._name="MessageParser",this._sequenceList=new hh(200),this._messageIDList=new hh(100),this._broadcastMessageIDMap=new Map,this._reportMessageStackedCount=0}init(s,n){this._core=s,this._avChatRoomHandler=n}onMessageReceived(s,n,g=!1){this._sortServerMessageList({groupID:s,serverMessageList:n,isHistoryMessage:g});const u=this._handleMessageList(s,n);if(u.length===0)return;if(!g){const{appStore:{conversationStore:T},OuterConstant:{CONV_GROUP:P},common:{buildLastMessage:W}}=this._core,iA=W(u[u.length-1]);T.updateConversation(`${P}${s}`,{lastMessage:iA})}this._checkMessageStacked(u);const E=u.filter(T=>T.isModified===!0),m=u.filter(T=>T.isModified===!1),{OuterEvent:{MESSAGE_RECEIVED:D,MESSAGE_MODIFIED:M}}=this._core;E.length>0&&this._emitEvent({name:M,data:E}),m.length>0&&this._emitEvent({name:D,data:m})}_sortServerMessageList(s){const{groupID:n,serverMessageList:g,isHistoryMessage:u}=s;let E=[];this._avChatRoomHandler.isPollingSimplifiedMessage()&&!u?(g.sort((m,D)=>m.MS-D.MS),E=g.map(m=>m.MS)):(g.sort((m,D)=>m.MsgSeq-D.MsgSeq),E=g.map(m=>m.MsgSeq)),console.log(`${this._name}._sortServerMessageList groupID:${n} count:${E.length} sequenceList:${E}`),E.length=0}_handleMessageList(s,n){var g;const{message:{messageDataHandler:u,messageHelper:E}}=this._core,m=this._avChatRoomHandler.isPollingSimplifiedMessage(),D=[],M=n.length;for(let T=0;Tg===qE.MESSAGE_REVOKED)(n)?(this._handleMessageRevoked(s),null):(g=>g===qE.LIVE_CUSTOM_DATA)(n)?(this._onLiveCustomData(s),null):(g=>g===qE.MESSAGE_REACTION)(n)?null:s:(console.warn(`${this._name}.onMessageReceived unknown event:${n}`),null)}_createMessage(s){const{message:{messageFactory:n},OuterConstant:g}=this._core;let u=g.CONV_GROUP;s.elements.type===g.MSG_GRP_SYS_NOTICE&&(u=g.CONV_SYSTEM);const E=!!s.isSystemMessage,m=n.createMessage(Object.assign(Object.assign({},s),{conversationType:u,isSystemMessage:E,flow:"in"}));return m.setElement(s.elements),m}_filterDuplicateMessage(s){const{common:n}=this._core;if(!n.isUnlimitedAVChatRoom()){if(this._sequenceList.has(s.sequence))return null;this._sequenceList.set(s.sequence)}const g=this._messageIDList.has(s.ID);return g?(console.warn(`${this._name}_filterDuplicateMessageItem ID:${s.ID} has:${g}`),null):(this._messageIDList.set(s.ID),s)}_handleMessageRevoked(s){const{OuterConstant:n,OuterEvent:{MESSAGE_REVOKED:g}}=this._core,{ToGroupId:u,MsgBody:{RevokeMsgList:E},RevokerInfo:{Revoker_Account:m,Reason:D=""}}=s,M=[];E.forEach(T=>{const{TinyId:P,MsgClientTime:W,Random:iA,MsgSeq:EA}=T,RA={conversationID:`${n.CONV_GROUP}${u}`,ID:`${P}-${W}-${iA}`,revoker:m,revokeReason:D,revokerInfo:{userID:m,nick:"",avatar:""},sequence:EA};M.push(RA)}),M.length!==0&&this._emitEvent({name:g,data:M})}_onLiveCustomData(s){const{OuterEvent:{ROOM_CUSTOM_DATA_RECEIVED:n}}=this._core,{ToGroupId:g,MsgSeq:u,MsgTimeStamp:E,MsgBody:m}=s,D=m?.Content||m?.MsgContent||"";this._emitEvent({name:n,data:D}),console.log(`${this._name}._onLiveCustomData groupID:${g} sequence:${u} time:${E} data:${D}`)}_onGroupDismissed(s){this._avChatRoomHandler.reset(s)}_checkMessageStacked(s){const{length:n}=s;if(n>=100&&this._reportMessageStackedCount<5){const g=this._avChatRoomHandler.getJoinedGroups();this._core.ssoLog.info("MessageStacked",`count:${n} groupID:${g.join(",")}`),this._reportMessageStackedCount+=1}}_emitEvent(s){this._core.notificationCenter.emitOuterEvent(s.name,s)}onBroadcastMessageReceived(s){const{message:{messageHelper:n},OuterEvent:{MESSAGE_RECEIVED:g}}=this._core,u=this._avChatRoomHandler.isPollingSimplifiedMessage(),E=[],m=s.length;for(let D=0;D0&&this._emitEvent({name:g,data:E})}_updateLocalOnlineMemberCountFromTips(s){const{utils:{isEmpty:n}}=this._core,{ToGroupId:g,MsgBody:{OnlineMemberInfo:u}}=s;if(n(u))return;const{OnlineMemberNum:E=0,ExpireTime:m=RD}=u,D=Date.now();let M=this._avChatRoomHandler.getLocalOnlineMemberCount(g);n(M)?M={lastReqTime:0,lastSyncTime:0,latestUpdateTime:D,memberCount:E,expireTime:m}:(M.latestUpdateTime=D,M.memberCount=E),this._avChatRoomHandler.updateLocalOnlineMemberCount(g,M)}reset(){this._reportMessageStackedCount=0,this._sequenceList.clear(),this._messageIDList.clear(),this._broadcastMessageIDMap.clear()}};const EB=s=>{const{core:{store:n}}=uB;return(n.get("cloudConfig")||{})[s]},Qh=s=>{const{core:{utils:{isUndefined:n}}}=uB;return!n(s)},YQ=()=>{const s=EB("polling_interval");return Qh(s)?parseInt(s,10):300},dB=()=>{const s=EB("polling_simplified_msg");return Qh(s)?parseInt(s,10):0};var AR=new class{constructor(){this._name="GetAVChatRoomOnlineMemberCount"}init(s,n){this._core=s,this._parentPlugin=n;const{helper:g}=s;g.registerApi({apiName:"getGroupOnlineMemberCount",context:this,matcher:()=>n.getInstalledSubPlugins().length>0})}getGroupOnlineMemberCount(s){return pA(this,void 0,void 0,function*(){const{appStore:{groupStore:n},OuterConstant:g}=this._core,u=n.getGroup(s);return u?u.type===g.GRP_AVCHATROOM?this._getOnlineMemberCount(s):this._parentPlugin.groupAction.getGroupOnlineMemberCount(s):{code:0,data:{memberCount:0}}})}_getOnlineMemberCount(s){return pA(this,void 0,void 0,function*(){const n="_getOnlineMemberCount",{utils:{isEmpty:g}}=this._core,u=Pg.getLocalOnlineMemberCount(s);if(g(u)||this._isExpired(s)){const{memberCount:E=0}=yield this._getOnlineMemberCountFromServer(s);return console.log(`${this._name}.${n} ok, groupID:${s} memberCount:${E} from server.`),{code:0,data:{memberCount:E}}}return console.log(`${this._name}.${n} ok, groupID:${s} memberCount:${u.memberCount} from local.`),{code:0,data:{memberCount:u.memberCount}}})}_isExpired(s){const n=Pg.getLocalOnlineMemberCount(s),g=Date.now(),u=g-n.lastSyncTime>1e3*n.expireTime,E=g-n.latestUpdateTime>1e4,m=g-n.lastReqTime>3e3;return u&&E&&m}_getOnlineMemberCountFromServer(s){return pA(this,void 0,void 0,function*(){const n="_getOnlineMemberCountFromServer";try{const g=yield function(M,T){return pA(this,void 0,void 0,function*(){const P={GroupId:M};return T.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_online_member_num",data:P})})}(s,this._core),{OnlineMemberNum:u=0,ExpireTime:E=RD}=g||{},m=Date.now(),D={lastSyncTime:m,latestUpdateTime:m,lastReqTime:m,memberCount:u,expireTime:E};return Pg.updateLocalOnlineMemberCount(s,D),{memberCount:u}}catch(g){const u=new this._core.helper.ChatError({functionName:n,code:g?.errorCode,message:g?.errorInfo});throw console.error(`${this._name}.${n} fail:`,u),u}})}},Pg=new class{constructor(){this._name="AVChatRoomHandler",this._joinedGroupMap=new Map,this._pollingRequestInfoMap=new Map,this._pollingInstanceMap=new Map,this._onlineMemberCountMap=new Map,this._pollingIntervalMap=new Map,this._pollingNoMessageCountMap=new Map,this._membersReqInfoMap=new Map,this._startBroadcastSequence=1}init(s,n){this._core=s,this._parentPlugin=n,Bh.init(s,this),s.ssoLog.debug("AVChatRoomHandler.init")}onAVChatRoomSystemNotification(s){const{OuterConstant:{GRP_AVCHATROOM:n}}=this._core,{GroupTips:g=[]}=s;for(let u=0;u0&&(n=[...this._joinedGroupMap.values()].filter(g=>g.type===s)),n}handleJoinGroupResult(s){return pA(this,void 0,void 0,function*(){const{utils:{isUndefined:n},OuterConstant:{CONV_GROUP:g},apiMap:{getConversationProfile:u},OuterConstant:E}=this._core,{longPollingKey:m,group:D,historyMessageList:M=[]}=s,{groupID:T}=D;return yield this._preCheck(D),this._joinedGroupMap.set(T,D),this._parentPlugin.groupDataHandler.updateLocalGroup([D]),this._parentPlugin.groupDataHandler.emitGroupListUpdate(),u(`${g}${T}`),AR.getGroupOnlineMemberCount(T),M.length>0&&Bh.onMessageReceived(T,M,!0),n(m)?{code:0,data:{status:E.JOIN_STATUS_SUCCESS,group:D}}:{code:0,data:this.startMessageLongPolling(s)}})}isGroupCounterUpdated(s){return this._parentPlugin.groupCounter.isGroupCounterUpdated(s)}handleGroupCounterUpdated(s){this._parentPlugin.groupCounter.handleGroupCounterUpdated(s)}_preCheck(s){return pA(this,void 0,void 0,function*(){const{common:n,OuterConstant:g,helper:u,apiMap:{quitGroup:E},ssoLog:m}=this._core;if(n.isUnlimitedAVChatRoom()){if(this._pollingInstanceMap.size>(()=>{const T=EB("polling_count_limit");return Qh(T)&&T>0?parseInt(T,10):20})())throw new u.ChatError({code:PT,message:"the count of longPolling exceeds the max limit"});return}if(this._joinedAVChatRoomCount()===0||s.type===g.GRP_LIVE)return;const[D,M]=this._joinedGroupMap.entries().next().value;if(M.selfInfo.role===g.GRP_MBR_ROLE_OWNER)this._parentPlugin.groupDataHandler.deleteLocalGroup(D);else try{yield E(D)}catch(T){m.debug("quitGroup",`${this._name}._preCheck quitGroup failed, groupID:${D} info:`,T)}this.reset(D)})}startMessageLongPolling(s){const{OuterConstant:n}=this._core,{longPollingKey:g,startSequence:u=1,group:E}=s,{groupID:m}=E;return this._pollingRequestInfoMap.set(m,{longPollingKey:g,startSequence:u}),this._pollingIntervalMap.set(m,YQ()),this._startPolling(m),this._reportLongPollingCount(),{status:n.JOIN_STATUS_SUCCESS,group:E}}_startPolling(s){if(this._core.ssoLog.debug("_startPolling",`${this._name}._startPolling groupID:${s}`),this._pollingInstanceMap.has(s)){const g=this._pollingInstanceMap.get(s);return void(g?.isRunning()||g==null||g.start())}const n=new $v({core:this._core,manager:this,groupID:s,getRequestParams:this._handleRequestParams.bind(this),onSuccess:this._handleSuccess.bind(this),onFail:this._handleFailure.bind(this)});n.start(),this._pollingInstanceMap.set(s,n)}_handleRequestParams(s){const{longPollingKey:n,startSequence:g}=this._pollingRequestInfoMap.get(s)||{};return s===[...this._pollingInstanceMap.keys()][0]?{longPollingKey:n,startSequence:g,startBroadcastSeq:this._startBroadcastSequence,simplifiedMessage:dB()}:{longPollingKey:n,startSequence:g,simplifiedMessage:dB()}}_handleSuccess(s,n){const{ErrorCode:g}=n;if(g!==0){const{longPollingKey:u,startSequence:E}=this._pollingRequestInfoMap.get(s)||{};return void console.warn(`${this._name}._handleSuccess groupID:${s} key:${u} startSeq:${E} errorCode:${g}`)}this._hasJoinedAVChatRoom(s)&&this._handleResponseData(s,n)}_handleResponseData(s,n){const{Key:g,NextSeq:u,NextBroadcastSeq:E,RspMsgList:m=[],RspBroadcastMsgList:D=[]}=n;if(g&&u&&this._pollingRequestInfoMap.set(s,{longPollingKey:g,startSequence:u}),E&&E>this._startBroadcastSequence&&(this._startBroadcastSequence=E),m.length>0)this._getPollingNoMessageCount(s)!==0&&(this._updatePollingNoMessageCount(s,0),this._pollingIntervalMap.set(s,YQ())),Bh.onMessageReceived(s,m);else{let M=this._getPollingNoMessageCount(s);if(M+=1,this._updatePollingNoMessageCount(s,M),M===(()=>{const T=EB("polling_no_msg_count");return Qh(T)?parseInt(T,10):20})()){const T=YQ()+(()=>{const P=EB("polling_interval_plus");return Qh(P)?parseInt(P,10):2e3})();this._pollingIntervalMap.set(s,T)}}D.length>0&&Bh.onBroadcastMessageReceived(D)}_handleFailure(s,n){const{ssoLog:g,utils:{safeStringify:u}}=this._core;g.warn("polling",`${this._name}._handleFailure groupID:${s} error: ${u(n)}`)}_joinedAVChatRoomCount(){const{OuterConstant:s}=this._core;let n=[];return this._joinedGroupMap.size>0&&(n=this.getJoinedGroups().filter(g=>g.type===s.GRP_AVCHATROOM)),n.length}_hasJoinedAVChatRoom(s){return this._joinedGroupMap.has(s)}getJoinedGroups(){return[...this._joinedGroupMap.values()]}updateLocalLiveGroup(s,n){this._joinedGroupMap.set(s,n),this._parentPlugin.groupDataHandler.updateLocalGroup([n])}handleLiveHistoryMessages(s,n){Bh.onMessageReceived(s,n,!0)}isOverFrequencyLimit(s){if(!this._membersReqInfoMap.has(s))return this._membersReqInfoMap.set(s,{startTime:Date.now(),requestCount:1}),!1;let{startTime:n,requestCount:g}=this._membersReqInfoMap.get(s);const{interval:u,count:E}=(()=>{const m=EB("av_members_freq_limit");if(Qh(m)){const{interval:D,count:M}=JSON.parse(m);if(M>0&&D>0)return{interval:D,count:M}}return{interval:30,count:4}})();return Date.now()-n>1e3*u?(this._membersReqInfoMap.set(s,{startTime:Date.now(),requestCount:1}),!1):(g+=1,this._membersReqInfoMap.set(s,{startTime:n,requestCount:g}),g>E)}_stopPolling(s){if(this._core.ssoLog.debug("_stopPolling",`${this._name}._stopPolling groupID:${s}`),s){const{appStore:{conversationStore:n},OuterConstant:{CONV_GROUP:g}}=this._core;n.deleteConversation(`${g}${s}`);const u=this._pollingInstanceMap.get(s);return u?.stop(),this._parentPlugin.groupDataHandler.deleteLocalGroup(s),this._pollingInstanceMap.delete(s),this._pollingRequestInfoMap.delete(s),this._joinedGroupMap.delete(s),this._onlineMemberCountMap.delete(s),this._pollingIntervalMap.delete(s),this._pollingNoMessageCountMap.delete(s),void this._membersReqInfoMap.delete(s)}for(const n of this._pollingInstanceMap.values())n?.stop();this._pollingInstanceMap.clear(),this._pollingRequestInfoMap.clear(),this._joinedGroupMap.clear(),this._onlineMemberCountMap.clear(),this._pollingIntervalMap.clear(),this._pollingNoMessageCountMap.clear(),this._membersReqInfoMap.clear()}_updatePollingNoMessageCount(s,n){this._pollingNoMessageCountMap.set(s,n)}_getPollingNoMessageCount(s){return this._pollingNoMessageCountMap.get(s)||0}_reportLongPollingCount(){const s=this._joinedGroupMap.size;if(s>1){const{common:n,OuterConstant:g,ssoLog:u}=this._core,E=n.isUnlimitedAVChatRoom()?1:0,m=[],D=[];Array.from(this._joinedGroupMap.values()).forEach(({groupID:M,type:T})=>{T===g.GRP_LIVE?D.push(M):m.push(M)}),u.info("longPollingCount",String(s),{moreMessage:`av:${m.join(",")} live:${D.join(",")} code: ${E}`,eventType:29})}}reset(s){this._stopPolling(s),this._startBroadcastSequence=1,Bh.reset()}},eR=new class{init(s,n){this._core=s,this._parentPlugin=n;const{helper:g}=s;g.registerApi({apiName:"joinGroup",context:this,matcher:()=>n.getInstalledSubPlugins().length>0})}joinGroup(s){return pA(this,void 0,void 0,function*(){const{OuterConstant:n}=this._core,g=yield this._parentPlugin.groupAction.joinGroup(s),{data:{status:u,group:{type:E}}}=g;return E===n.GRP_AVCHATROOM?u===n.JOIN_STATUS_ALREADY_IN_GROUP?g:Pg.handleJoinGroupResult(g.data):g})}},YT=new class{init(s,n){this._core=s,this._parentPlugin=n;const{helper:g}=s;g.registerApi({apiName:"quitGroup",context:this,matcher:()=>n.getInstalledSubPlugins().length>0})}quitGroup(s){return pA(this,void 0,void 0,function*(){const{OuterConstant:n}=this._core,g=yield this._parentPlugin.groupAction.quitGroup(s),{data:{type:u}}=g;return u===n.GRP_AVCHATROOM&&Pg.reset(s),g})}},tR=new class{init(s,n){this._core=s,this._parentPlugin=n;const{helper:g}=s;g.registerApi({apiName:"dismissGroup",context:this,matcher:()=>n.getInstalledSubPlugins().length>0})}dismissGroup(s){return pA(this,void 0,void 0,function*(){const{OuterConstant:n}=this._core,g=yield this._parentPlugin.groupAction.dismissGroup(s),{data:{type:u}}=g;return u===n.GRP_AVCHATROOM&&Pg.reset(s),g})}},Om=new class{constructor(){this._name="GetAVChatRoomMemberList"}init(s,n){this._core=s,this._parentPlugin=n;const{helper:g}=s;g.registerApi({apiName:"getGroupMemberList",context:this,matcher:()=>n.getInstalledSubPlugins().length>0})}getGroupMemberList(s){return pA(this,void 0,void 0,function*(){const{appStore:{groupStore:n},helper:g,OuterConstant:u}=this._core,{groupID:E}=s,m=n.getGroup(E);if(m?.type===u.GRP_AVCHATROOM&&g.checkBusinessCapabilityBits(Xv)){if(Pg.isOverFrequencyLimit(E))throw{code:2996,message:`Over frequency limit: get_members-${E}`};return this._getGroupMemberList(s)}return this._parentPlugin.groupMember.getGroupMemberList(s)})}_getGroupMemberList(s){return pA(this,void 0,void 0,function*(){const n="_getGroupMemberList",{helper:g}=this._core;try{const u=yield function(M,T){return pA(this,void 0,void 0,function*(){const{groupID:P,offset:W=0}=M,iA={GroupId:P,Timestamp:W};return T.common.buildAndSendPacket({servcmd:"group_open_avchatroom_http_svc.get_members",data:iA})})}(s,this._core),{MemberList:E=[],NextTimestamp:m=0}=u||{},D=this._handleMemberList(E);return console.log(`${this._name}.${n} ok, groupID:${s.groupID} count:${D.length} nextOffset:${m}`),{code:0,data:{memberList:D,offset:m}}}catch(u){const E=new g.ChatError({functionName:n,code:u?.errorCode,message:u?.errorInfo});throw console.error(`${this._name}.${n} fail:`,E),E}})}_handleMemberList(s){return s.map(n=>{const{Member_Account:g,NickName:u="",Avatar:E="",Remark:m="",JoinTime:D=0,Marks:M=[]}=n;return{userID:g,nick:u,avatar:E,remark:m,joinTime:D,marks:M,isOnline:!0}})}},Pm=new class{constructor(){this._name="DeleteAVChatRoomMember"}init(s,n){this._core=s,this._parentPlugin=n;const{helper:g}=s;g.registerApi({apiName:"deleteGroupMember",context:this,matcher:()=>n.getInstalledSubPlugins().length>0})}deleteGroupMember(s){return pA(this,void 0,void 0,function*(){const n="deleteGroupMember",{appStore:{groupStore:g},utils:{isUndefined:u},helper:E,OuterConstant:m}=this._core,{groupID:D}=s,M=g.getGroup(D);if(u(M))throw new E.ChatError({functionName:n,code:wD});if(M.type===m.GRP_AVCHATROOM){if(E.checkBusinessCapabilityBits(FT))return this._deleteGroupMember(s);throw new E.ChatError({functionName:n,code:PQ})}return this._parentPlugin.groupMember.deleteGroupMember(s)})}_deleteGroupMember(s){return pA(this,void 0,void 0,function*(){const n="_deleteGroupMember",{appStore:{groupStore:g},helper:u,ssoLog:E}=this._core,{groupID:m,duration:D=0,userIDList:M}=s;if(D===0)throw new u.ChatError({functionName:n,code:OT});try{return yield function(T,P){return pA(this,void 0,void 0,function*(){const{groupID:W,userIDList:iA,duration:EA,reason:RA}=T,kA={GroupId:W,Members_Account:iA,Duration:EA,Description:RA};return P.common.buildAndSendPacket({servcmd:"group_open_http_svc.ban_group_member",data:kA})})}(s,this._core),E.debug(n,`${this._name}.${n} ok, groupID:${m}`),{code:0,data:{group:g.getGroup(m),userIDList:M}}}catch(T){throw new u.ChatError({functionName:n,code:T?.errorCode,message:T?.errorInfo})}})}},_d=new class{constructor(){this._name="MarkAVChatRoomMember"}init(s){this._core=s;const{helper:n}=s;n.registerApi({apiName:"markGroupMemberList",context:this})}markGroupMemberList(s){return pA(this,void 0,void 0,function*(){const n="markGroupMemberList",{groupID:g,markType:u,enableMark:E,userIDList:m=[]}=s,D=this._generateRequestData(s);try{const M=yield function(iA,EA){return pA(this,void 0,void 0,function*(){const{groupID:RA,operationType:kA,memberList:xA}=iA,LA={GroupId:RA,CommandType:kA,MemberList:xA};return EA.common.buildAndSendPacket({servcmd:"group_open_avchatroom_http_svc.modify_user_info",data:LA})})}(D,this._core),{MemberList:T=[]}=M||{},{successUserIDList:P,failureUserIDList:W}=this._handleResult(T,m);return{code:0,data:{successUserIDList:P,failureUserIDList:W},successLog:{message:`${this._name}.${n} ok, groupID:${g} markType:${u} enableMark:${E} success:${P.length} fail:${W.length}`}}}catch(M){throw new this._core.helper.ChatError({functionName:n,code:M?.errorCode,message:M?.errorInfo})}})}_generateRequestData(s){const{groupID:n,markType:g,enableMark:u,userIDList:E=[]}=s,m=u===!0?1:2,D=[...E];return D.length>500&&console.warn(`${this._name}._generateRequestData, the length of userIDList cannot exceed 500`),{groupID:n,operationType:m,memberList:D.map(M=>({Member_Account:M,Marks:[g]}))}}_handleResult(s,n){const g=[],u=[];return s.length===n.length?(g.push(...n),{successUserIDList:g,failureUserIDList:u}):(n.forEach(E=>{s.find(m=>m.Member_Account===E)?g.push(E):u.push(E)}),{successUserIDList:g,failureUserIDList:u})}},iR=new class{init(s,n){s.ssoLog.debug("AVChatRoomAction.init"),eR.init(s,n),YT.init(s,n),tR.init(s,n),Om.init(s,n),AR.init(s,n),Pm.init(s,n),_d.init(s)}},oR=new class{constructor(){this._name="LiveHandler"}init(s){this._core=s;const{helper:n,ssoLog:g}=s;n.registerExperimentalAPI("startMessageLongPolling",this),n.registerExperimentalAPI("stopMessageLongPolling",this),g.debug("LiveHandler.init")}startMessageLongPolling(s){const{common:n,utils:{isEmpty:g},OuterConstant:u,ssoLog:E}=this._core,{groupID:m,longPollingKey:D,longPollingSequence:M=1}=s;if(g(D))return E.warn("startMessageLongPolling",`${this._name}.startMessageLongPolling longPollingKey is empty.`),Promise.resolve({});Pg.hasPollingInstance(m)&&this.stopMessageLongPolling({groupID:m});const T=Pg.getJoinedLiveList(),P=n.isUnlimitedAVChatRoom();!P&&T.length>0&&this.stopMessageLongPolling({groupID:T[0].groupID}),E.debug("startMessageLongPolling",`${this._name}.startMessageLongPolling isUnlimited:${P} groupID:${m} longPollingKey:${D} longPollingSequence:${M}`);const W={groupID:m,type:u.GRP_LIVE};return Pg.updateLocalLiveGroup(m,W),this._getLiveHistoryMessages({groupID:m,longPollingKey:D,startSequence:M}),Pg.startMessageLongPolling({group:W,longPollingKey:D,startSequence:M})}stopMessageLongPolling(s){const{groupID:n}=s;return Pg.reset(n),this._core.ssoLog.debug("stopMessageLongPolling",`${this._name}.stopMessageLongPolling ok, groupID:${n}`),Promise.resolve({groupID:n})}_getLiveHistoryMessages(s){return pA(this,void 0,void 0,function*(){const{ssoLog:n}=this._core,{groupID:g}=s;try{const u=yield function(m,D){return pA(this,void 0,void 0,function*(){const{groupID:M,longPollingKey:T,startSequence:P}=m,W={GroupId:M,LongPollingKey:T,PullPreSeq:P};return D.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_huge_group_msg",data:W})})}(s,this._core),{RspMsgList:E=[]}=u||{};n.debug("_getLiveHistoryMessages",`${this._name}._getLiveHistoryMessages ok, groupID:${g} count:${E.length}`),E.length>0&&Pg.handleLiveHistoryMessages(g,E)}catch(u){n.debug("_getLiveHistoryMessages",`${this._name}._getLiveHistoryMessages failed, groupID:${g} info:${u.message}`)}})}},xm=new class{constructor(){this.name="AVChatRoom"}install(s,n){this._core=s,uB.init(s),Pg.init(s,n),iR.init(s,n),oR.init(s);const{notificationCenter:g,InnerEvent:u}=s,{InnerEventSubType:E}=g;g.subscribeInnerEvent(u.MESSAGE_PUSH,E.GROUP_SYSTEM_NOTIFICATION,this._onAVChatRoomSystemNotification,this),g.subscribeInnerEvent(u.LOGOUT,this._reset,this),g.subscribeInnerEvent(u.DESTROY,this._dispose,this)}_onAVChatRoomSystemNotification(s){Pg.onAVChatRoomSystemNotification(s)}_reset(){Pg.reset()}_dispose(){this._reset();const{notificationCenter:s,InnerEvent:n}=this._core,{InnerEventSubType:g}=s;s.unSubscribeInnerEvent(n.MESSAGE_PUSH,g.GROUP_SYSTEM_NOTIFICATION,this._onAVChatRoomSystemNotification,this),s.unSubscribeInnerEvent(n.LOGOUT,this._reset,this),s.unSubscribeInnerEvent(n.DESTROY,this._dispose,this)}};const Ag=new class{init(s){this.core=s}},Ym="message",CB="user",hB={OR:"or",AND:"and"},vI=20,VT=20,sR=20,ph={required:!1,rules:["array"],allowEmpty:!0,customValidator:s=>!s||!!(Array.isArray(s)&&s.length<=5)||"keywordList should be an array and length <= 5"},Vm={required:!1,rules:["string"],allowEmpty:!0,customValidator:s=>!s||!![hB.OR,hB.AND].includes(s)||"keywordListMatchType should be OR or AND"},SC={required:!1,rules:["number"],allowEmpty:!0,customValidator:s=>typeof s=="number"&&s>=1&&s<=100||"count must be a number between 1 and 100"},VQ={required:!1,rules:["string"],allowEmpty:!0},nR={required:!1,rules:["array"],allowEmpty:!0,customValidator:s=>{const{OuterConstant:n}=Ag.core;if(!Array.isArray(s))return"groupTypeList should be an array";const g=[n.GRP_PUBLIC,n.GRP_COMMUNITY,n.GRP_WORK,n.GRP_MEETING];let u=!1;for(let E=0;E{const{OuterConstant:n}=Ag.core,g=[n.MSG_TEXT,n.MSG_IMAGE,n.MSG_AUDIO,n.MSG_FILE,n.MSG_VIDEO,n.MSG_LOCATION,n.MSG_CUSTOM,n.MSG_MERGER];let u=!1;for(let E=0;E{const{OuterConstant:n}=Ag.core;return!(!s?.startsWith(n.CONV_C2C)&&!s?.startsWith(n.CONV_GROUP)&&s!==n.CONV_SYSTEM)||"conversationID is invalid"}},Jm=s=>({required:!1,rules:["number"],allowEmpty:!0,customValidator:n=>typeof n=="number"&&n>=0||`${s} should be a number >= 0';`}),TD={required:!1,rules:["string"],allowEmpty:!0,customValidator:s=>{const{OuterConstant:n}=Ag.core;return!![n.GENDER_FEMALE,n.GENDER_MALE].includes(s)||"gender is invalid"}},Hm={searchCloudMessages:{keywordList:ph,keywordListMatchType:Vm,cursor:VQ,senderUserIDList:{required:!1,rules:["array"],allowEmpty:!0,customValidator:s=>!!(Array.isArray(s)&&s.length<=5)||"senderUserIDList should be an array and length <= 5"},messageTypeList:rR,conversationID:aR,timePosition:Jm("timePosition"),timePeriod:Jm("timePeriod")},searchCloudUsers:{keywordList:ph,keywordListMatchType:Vm,cursor:VQ,count:SC,miniBirthday:Jm("miniBirthday"),maxBirthday:Jm("maxBirthday"),gender:TD},searchCloudGroupMembers:{keywordList:ph,keywordListMatchType:Vm,cursor:VQ,count:SC,groupTypeList:nR,groupIDList:{required:!1,rules:["array"],allowEmpty:!0}},searchCloudGroups:{keywordList:ph,keywordListMatchType:Vm,cursor:VQ,count:SC,groupTypeList:nR}},ND={searchCloudMessages:!0,searchCloudUsers:!0,searchCloudGroupMembers:!0,searchCloudGroups:!0};var GD=new class{constructor(){this.name="CloudSearch"}install(s){this._core=s,Ag.init(s),s.helper.registerApi({apiName:"searchCloudMessages",context:this}),s.helper.registerApi({apiName:"searchCloudUsers",context:this}),s.helper.registerApi({apiName:"searchCloudGroupMembers",context:this}),s.helper.registerApi({apiName:"searchCloudGroups",context:this}),s.helper.registerValidateConfig({auth:ND,params:Hm})}searchCloudMessages(s){return pA(this,void 0,void 0,function*(){try{const{OuterConstant:n,helper:g}=this._core,{conversationID:u,timePeriod:E,timePosition:m}=s,D=Do(s,["conversationID","timePeriod","timePosition"]),M=Object.assign({count:100},D);u&&(u.startsWith(n.CONV_C2C)?M.account=u.replace(n.CONV_C2C,""):u.startsWith(n.CONV_GROUP)&&(M.groupID=u.replace(n.CONV_GROUP,""))),this._setTimeRangeParams(M,{timePeriod:E,timePosition:m});const T=yield function(LA){return pA(this,void 0,void 0,function*(){const{count:SA,keywordList:OA,keywordListMatchType:JA,senderUserIDList:ae,messageTypeList:se,endTime:_i,startTime:Ti,cursor:Ft,account:Ni,groupID:cs}=LA,Se={Count:SA,KeywordList:OA,MatchType:JA,SendUserIDList:ae,MsgTypeList:se,EndTime:_i,StartTime:Ti,Cursor:Ft,PeerAccount:Ni,GroupID:cs};return Ag.core.common.buildAndSendPacket({servcmd:"message_search.query",data:Se})})}(M);if(!T)return{code:0,data:{}};const{ErrorCode:P,ErrorInfo:W,TotalCount:iA,Cursor:EA="",ConversationMsgs:RA=[]}=T;if(P!==0)throw{errorCode:P,errorInfo:W};const kA=`keywordList:${s.keywordList} keywordListMatchType:${s.keywordListMatchType} cursor:${s.cursor} res: totalCount:${iA}`;return{code:0,data:{searchResultList:RA.map(LA=>{const{MsgList:SA,Count:OA,GroupID:JA,UserID:ae}=LA,se=JA?`${n.CONV_GROUP}${JA}`:`${n.CONV_C2C}${ae}`;if(this._isSearchingAllConversations(s)&&OA>1)return{conversationID:se,messageCount:OA,messageList:[]};const _i=SA.map(Ti=>g.isEmpty(JA)?function(Ft,Ni){const cs=Ni.OuterConstant.CONV_C2C,Se=Ni.message.messageHelper.parseServerPushMessage(Ft),mt=Ni.message.messageFactory.createMessage(Object.assign(Object.assign({},Se),{conversationType:cs,flow:"in"}));return mt.setElement(Se.elements),mt}(Ti,this._core):function(Ft,Ni){const cs=Ni.OuterConstant.CONV_GROUP,Se=Ni.message.messageHelper.parseServerGroupMessage(Ft),mt=Ni.message.messageFactory.createMessage(Object.assign(Object.assign({},Se),{conversationType:cs,flow:"in"}));return mt.setElement(Se.elements),mt}(Ti,this._core));return{conversationID:se,messageCount:OA,messageList:_i}}),cursor:EA,totalCount:iA},successLog:{message:kA}}}catch(n){const{errorCode:g,errorInfo:u}=n||{};this._handleError({errorCode:g,errorInfo:u,searchType:Ym,functionName:"searchCloudMessages"})}})}searchCloudUsers(s){return pA(this,void 0,void 0,function*(){var n;try{const{keywordListMatchType:g,count:u=VT}=s,E=Do(s,["keywordListMatchType","count"]),m=Object.assign({count:u,keywordListMatchType:g===hB.AND?1:0},E);this._setBirthdayRangeParams(m,s);const D=yield function(kA){return pA(this,void 0,void 0,function*(){const{count:xA,keywordList:LA,keywordListMatchType:SA,miniBirthday:OA,maxBirthday:JA,cursor:ae,gender:se}=kA,_i={Count:xA,Keywords:LA,KeywordMatchType:SA,Cursor:ae,UserBirthStart:OA,UserBirthEnd:JA,Gender:se};return Ag.core.common.buildAndSendPacket({servcmd:"user_search.query",data:_i})})}(m);if(!D)return{error:0,data:{}};const{ErrorCode:M,ErrorInfo:T,TotalCount:P,Cursor:W="",Users:iA=[]}=D;if(M!==0)throw{errorCode:M,errorInfo:T};const EA=`keywordList:${s.keywordList} keywordListMatchType:${s.keywordListMatchType} cursor:${s.cursor} count:${s.count} res: totalCount:${P}`,RA=[];for(let kA=0,xA=iA.length;kA({tag:ae.Tag,value:ae.StrValue})),JA=(n=this._core.user.userProfile)===null||n===void 0?void 0:n.createProfile(LA,OA);RA.push(JA)}return{code:0,data:{searchResultList:RA,cursor:W,totalCount:P},successLog:{message:EA}}}catch(g){const{errorCode:u,errorInfo:E}=g||{};this._handleError({errorCode:u,errorInfo:E,searchType:CB,functionName:"searchCloudUsers"})}})}searchCloudGroupMembers(s){return pA(this,void 0,void 0,function*(){try{const{count:n=sR,keywordListMatchType:g}=s,u=Do(s,["count","keywordListMatchType"]),E=Object.assign({count:n,keywordListMatchType:g===hB.AND?1:0},u),m=yield function(RA){return pA(this,void 0,void 0,function*(){const{count:kA,keywordList:xA,keywordListMatchType:LA,groupTypeList:SA,cursor:OA,groupIDList:JA}=RA,ae={Count:kA,Keywords:xA,KeywordMatchType:LA,Cursor:OA,GroupType:SA,GroupIdList:JA};return Ag.core.common.buildAndSendPacket({servcmd:"group_member_search.query",data:ae})})}(E);if(!m)return{code:0,data:{}};const{ErrorCode:D,ErrorInfo:M,GroupMembers:T=[],Cursor:P,TotalCount:W}=m;if(D!==0)throw{errorCode:D,errorInfo:M};const iA=`keywordList:${s.keywordList} keywordListMatchType:${s.keywordListMatchType} cursor:${s.cursor} count:${s.count} res: totalCount:${W}`,EA=new Map;return T.forEach(RA=>{const{GroupID:kA,GroupName:xA,GroupType:LA,GroupFaceUrl:SA,GroupMemberUserName:OA,GroupMemberUserID:JA,GroupMemberNameCard:ae,GroupMemberAvatar:se=""}=RA,_i={groupID:kA,name:xA,type:LA,avatar:SA},Ti={userID:JA,nick:OA,nameCard:ae,avatar:se};if(EA.has(kA)){const Ft=EA.get(kA);Ft.memberList.push(Ti),EA.set(kA,Ft)}else EA.set(kA,{groupInfo:_i,memberList:[Ti]})}),{code:0,data:{searchResultList:[...EA.values()],cursor:P,totalCount:W},successLog:{message:iA}}}catch(n){const{errorCode:g,errorInfo:u}=n||{};this._handleError({errorCode:g,errorInfo:u,searchType:CB,functionName:"searchCloudGroupMembers"})}})}searchCloudGroups(s){return pA(this,void 0,void 0,function*(){try{const{count:n=vI,keywordListMatchType:g}=s,u=Do(s,["count","keywordListMatchType"]),E=Object.assign({count:n,keywordListMatchType:g===hB.AND?1:0},u),m=yield function(EA){return pA(this,void 0,void 0,function*(){const{count:RA,keywordList:kA,keywordListMatchType:xA,groupTypeList:LA,cursor:SA}=EA,OA={Count:RA,Keywords:kA,KeywordMatchType:xA,Cursor:SA,GroupType:LA};return Ag.core.common.buildAndSendPacket({servcmd:"group_search.query",data:OA})})}(E);if(!m)return{code:0,data:{}};const{ErrorCode:D,ErrorInfo:M,Groups:T,Cursor:P,TotalCount:W}=m;if(D!==0)throw{errorCode:D,errorInfo:M};const iA=`keywordList:${s.keywordList} keywordListMatchType:${s.keywordListMatchType} cursor:${s.cursor} count:${s.count} res: totalCount:${W}`;return{code:0,data:{searchResultList:T?.map(EA=>function(RA){const{GroupFaceUrl:kA,GroupID:xA,GroupIntroduction:LA,GroupMemberNum:SA,GroupName:OA,GroupOwnerTinyID:JA,GroupOwnerUserID:ae,GroupOwnerUserName:se,GroupType:_i,GroupAddOption:Ti,GroupInviteOption:Ft}=RA;return{avatar:kA,groupID:xA,introduction:LA,memberCount:SA,name:OA,ownerTinyID:JA,ownerID:ae,ownerNick:se,type:_i,joinOption:Ti,inviteOption:Ft}}(EA))||[],cursor:P,totalCount:W},successLog:{message:iA}}}catch(n){const{errorCode:g,errorInfo:u}=n||{};this._handleError({errorCode:g,errorInfo:u,searchType:CB,functionName:"searchCloudGroups"})}})}_setTimeRangeParams(s,{timePeriod:n,timePosition:g}){n&&n>0&&(s.startTime=g&&g>0?g-n:this._core.helper.timeManager.getServerTimeSeconds()-n),s.startTime&&s.startTime<0&&(s.startTime=void 0),g&&g>0&&(s.endTime=g)}_handleError({errorCode:s,errorMessage:n,searchType:g}){const{helper:u}=this._core;let E=s;throw s===60020?E="SearchUnable":g!==Ym&&s===27003?E="SearchParamsError":g!==Ym&&s===60018&&(E="SearchOverLimit"),new u.ChatError({code:E,message:n})}_isSearchingAllConversations(s){return this._core.helper.isEmpty(s.conversationID)}_setBirthdayRangeParams(s,n){const{miniBirthday:g,maxBirthday:u}=n;g!==void 0&&(s.miniBirthday=g,u===void 0&&(s.maxBirthday=4294967295)),u!==void 0&&(s.maxBirthday=u)}};function mh(s,n){return Math.round(Number(s)*Math.pow(10,n))/Math.pow(10,n)}const gR="qualityStat",bD="im-ssolog-quality-stat";var kD;(function(s){s[s.ONLINE=8]="ONLINE"})(kD||(kD={}));const qm="networkRTT",fh="messageE2EDelay",BB="sendMessageC2C",yh="sendMessageGroup",Dh="sendMessageGroupAV",QB="sendMessageRichMedia",pB="cosUpload",MC="messageReceivedGroup",JQ="messageReceivedGroupAVPush",HQ="messageReceivedGroupAVPull",JT={[qm]:2,[fh]:3,[BB]:4,[yh]:5,[Dh]:6,[QB]:7,[MC]:8,[JQ]:9,[HQ]:10,[pB]:11},cR=[BB,yh,Dh,QB,pB],Sh=[MC,JQ,HQ],mB=[qm,fh,BB,yh,Dh,QB,pB,MC,JQ,HQ],LD={ERR_SVR_COMM_SENSITIVE_TEXT:80001,ERR_SVR_COMM_BODY_SIZE_LIMIT:80002,OPEN_SERVICE_OVERLOAD_ERROR:60022,ERR_SVR_MSG_PKG_PARSE_FAILED:20001,ERR_SVR_MSG_INTERNAL_AUTH_FAILED:20002,ERR_SVR_MSG_INVALID_ID:20003,ERR_SVR_MSG_PUSH_DENY:20006,ERR_SVR_MSG_IN_PEER_BLACKLIST:20007,ERR_SVR_MSG_BOTH_NOT_FRIEND:20009,ERR_SVR_MSG_NOT_PEER_FRIEND:20010,ERR_SVR_MSG_NOT_SELF_FRIEND:20011,ERR_SVR_MSG_SHUTUP_DENY:20012,ERR_SVR_GROUP_INVALID_PARAMETERS:10004,ERR_SVR_GROUP_PERMISSION_DENY:10007,ERR_SVR_GROUP_NOT_FOUND:10010,ERR_SVR_GROUP_INVALID_GROUPID:10015,ERR_SVR_GROUP_REJECT_FROM_THIRDPARTY:10016,ERR_SVR_GROUP_SHUTUP_DENY:10017,MSG_SEND_FAIL:2100,OVER_FREQUENCY_LIMIT:2996},Km="quality_stat";var qQ=new class{constructor(){this._messageStatsMap=new Map,this._userSideErrorCodes=new Set(Object.values(LD))}init(s){this._core=s,Object.values(cR).forEach(n=>{this._messageStatsMap.set(n,{totalCount:0,successCount:0,failedCountOfUserSide:0,costSum:0,costCount:0,fileSizeSum:0})})}dispatchSendStats(s){const{name:n,message:g,error:u,startTs:E}=s,{SEND_MESSAGE_STAT:m}=this._core.constants;switch(n){case m.TOTAL_COUNT:this._handleTotalCount(g);break;case m.SUCCESS_COUNT:this._handleSuccessCount(g);break;case m.FAILED_COUNT:this._handleFailedCount(g,u);break;case m.SEND_COST:this._handleSendCost(g,E)}}getStatResult(s){const n=this._messageStatsMap.get(s);if(!n||n.totalCount===0)return null;const{totalCount:g,successCount:u,failedCountOfUserSide:E}=n,m=mh(u/g*100,2),D=u+E,M=mh(D/g*100,2),T=this._calcAverageValue(n,s);return this._resetStat(s),{total_count:g,success_count_business:u,percent_business:m,success_count_platform:D,percent_platform:M,average_value:T}}_handleTotalCount(s){const n=this._getSendMessageSpecifiedKey(s),g=n&&this._messageStatsMap.get(n);g&&g.totalCount++}_handleSuccessCount(s){const n=this._getSendMessageSpecifiedKey(s),g=n&&this._messageStatsMap.get(n);g&&g.successCount++}_handleFailedCount(s,n){var g;const u=(g=n?.code)!==null&&g!==void 0?g:n?.errorCode;if(this._isUserSideError(u)){const E=this._getSendMessageSpecifiedKey(s),m=E&&this._messageStatsMap.get(E);m&&m.failedCountOfUserSide++}}_handleSendCost(s,n){const g=this._getSendMessageSpecifiedKey(s),u=g&&this._messageStatsMap.get(g);u&&(u.costSum+=Date.now()-n,u.costCount++)}_isUserSideError(s){return this._userSideErrorCodes.has(s)||s>=120001&&s<=13e4||s>=10100&&s<=10200}_getSendMessageSpecifiedKey(s){const{MSG_IMAGE:n,MSG_AUDIO:g,MSG_VIDEO:u,MSG_FILE:E,CONV_C2C:m,CONV_GROUP:D,GRP_AVCHATROOM:M}=this._core.OuterConstant;if([n,g,u,E].includes(s.type))return QB;if(s.conversationType===m)return BB;if(s.conversationType===D){const{groupStore:T}=this._core.appStore,P=T.getGroup(s.to);if(!P)return;const{type:W}=P;return W===M?Dh:yh}}_calcAverageValue(s,n){return s.costCount===0?0:Math.round(n===pB?1e3*s.fileSizeSum/s.costSum:s.costSum/s.costCount)}_resetStat(s){const n=this._messageStatsMap.get(s);n&&(n.totalCount=0,n.successCount=0,n.failedCountOfUserSide=0,n.costSum=0,n.costCount=0,n.fileSizeSum=0)}},KQ=new class{constructor(){this._lastCycleStats=new Map,this._currentCycleStats=new Map}init(s){this._core=s;const{OuterEvent:n,notificationCenter:g}=s;this._initStatsMap(),g.subscribeOuterEvent(n.MESSAGE_RECEIVED,this._onMessageReceived,this)}addMessageSequence(s){const n=this._getReceivedMessageSpecifiedKey(s),{utils:{isUndefined:g},OuterConstant:{CONV_GROUP:u},ssoLog:E}=this._core;if(g(n)||!this._currentCycleStats.has(n))return void E.debug("addMessageSequence",`${gR}.addMessageSequence invalid key:${n}`);const{conversationID:m,sequence:D}=s,M=m.replace(u,""),T=this._lastCycleStats.get(n);if(T.size===0||!T.has(M))return void this._addToCurrentCycle(n,M,D);const P=T.get(M);D>P.minSeq&&D{const{sortedSequences:m,minSeq:D,maxSeq:M}=E;m.length>0&&(u+=m.length,g+=M-D+1)}),g===0?null:(this._transferCycleDataOptimized(s),{total_count:g,success_count_business:u,percent_business:mh(u/g*100,2)})}reset(){this._lastCycleStats.clear(),this._currentCycleStats.clear()}dispose(){const{notificationCenter:s,OuterEvent:{MESSAGE_RECEIVED:n}}=this._core;s.unSubscribeOuterEvent(n,this._onMessageReceived,this),this.reset()}_initStatsMap(){Object.values(Sh).forEach(s=>{this._lastCycleStats.set(s,new Map),this._currentCycleStats.set(s,new Map)})}_onMessageReceived(s){const{data:n=[]}=s;n.forEach(g=>{this.addMessageSequence(g)})}_transferCycleDataOptimized(s){const n=this._currentCycleStats.get(s);if(!n)return;const g=new Map;n.forEach((u,E)=>{const m=u.dirty?[...u.sortedSequences].sort((D,M)=>D-M):u.sortedSequences;g.set(E,{sortedSequences:m,minSeq:u.minSeq,maxSeq:u.maxSeq,dirty:!1})}),this._lastCycleStats.set(s,g),this._currentCycleStats.set(s,new Map)}_getReceivedMessageSpecifiedKey(s){const{OuterConstant:{CONV_GROUP:n,GRP_AVCHATROOM:g}}=this._core;if(s.conversationType===n&&s?._onlineOnlyFlag!==!0){const{groupStore:u}=this._core.appStore,E=u.getGroup(s.to);if(!E)return null;const{type:m}=E;return m===g?HQ:MC}}_insertToLastCycle(s,n){n.dirty&&(n.sortedSequences.sort((u,E)=>u-E),n.dirty=!1);const g=this._findInsertPos(n.sortedSequences,s);n.sortedSequences.splice(g,0,s),n.minSeq=Math.min(n.minSeq,s),n.maxSeq=Math.max(n.maxSeq,s)}_findInsertPos(s,n){let g=0,u=s.length-1;for(;g<=u;){const E=Math.floor((g+u)/2);if(s[E]===n)return E;s[E]0&&(this._totalDelay+=g,this._totalCount++,g<=1?this._countLessThan1s++:g<=3&&this._countLessThan3s++)}getStatResult(){if(this._totalCount===0)return null;const s={total_count:this._totalCount,success_count_business:this._countLessThan1s,success_count_platform:this._countLessThan3s,percent_business:this._calculatePercentage(this._countLessThan1s,this._totalCount),percent_platform:this._calculatePercentage(this._countLessThan3s,this._totalCount),average_value:this._calculateAverageDelay(this._totalCount)};return this.reset(),s}reset(){this._totalDelay=0,this._totalCount=0,this._countLessThan1s=0,this._countLessThan3s=0}dispose(){const{notificationCenter:s,OuterEvent:{MESSAGE_RECEIVED:n}}=this._core;s.unSubscribeOuterEvent(n,this._onMessageReceived,this),this.reset()}_onMessageReceived(s){const{data:n=[]}=s,{OuterConstant:{MSG_GRP_TIP:g,MSG_GRP_SYS_NOTICE:u}}=this._core,E=[g,u];n.forEach(m=>{!E.includes(m.type)&&m.clientTime>0&&this.addMessageDelay(m.clientTime)})}_calculateAverageDelay(s){return s===0?0:mh(this._totalDelay/s,1)}_calculatePercentage(s,n){return mh(s/n*100,2)}},lR=new class{init(s){this.core=s}},HT=new class{constructor(){this.name="MessageQualityStat",this._reportIndex=0,this._wholePeriod=!1,this._pendingReports=[],this._failedLogsCache=new Map}install(s){this._core=s;const{helper:n,notificationCenter:g,InnerEvent:{QUALITY_STAT:u,LOGOUT:E,DESTROY:m},constants:{WORKFLOW_NAME:D,WORKFLOW_STEP:M}}=s;lR.init(s),qQ.init(s),KQ.init(s),jQ.init(s),n.registerWorkflowStep(D.SYNC_SERVER_INFO_AFTER_LOGIN,M.QUALITY_REPORT,this.handleLoginSuccess,this),g.subscribeInnerEvent(u,this._handleQualityStat,this),g.subscribeInnerEvent(E,this._reset,this),g.subscribeInnerEvent(m,this._dispose,this)}handleLoginSuccess(){const{store:s,helper:n,utils:{isUndefined:g}}=this._core,u=s.get("cloudConfig")||{},{q_rpt_interval:E}=u,m=g(E)?12e4:Number(E);n.taskScheduler.addTask({id:Km,intervalMs:m,callback:this.report,context:this})}report(){this._wholePeriod=!0;const s=[...mB.map(n=>{const g=this._buildQualityReportItem(n);return g?Object.assign(Object.assign({},g),{report_index:this._reportIndex,whole_period:this._wholePeriod}):null}).filter(Boolean),...this._pendingReports];this._pendingReports=[],this._needSkipReport()||this._uploadQualityReports(s)}_handleQualityStat(s){const{constants:{QUALITY_METRICS:n}}=this._core,{label:g,data:u}=s;g===n.MESSAGE_SEND_SUCCESS_RATE&&qQ.dispatchSendStats(u)}_needSkipReport(){return this._isSDKAppIDInBlacklist()&&!this._isTinyIDInWhitelist()}_isSDKAppIDInBlacklist(){const{store:s,utils:n}=this._core,g=s.get("cloudConfig")||{},u=s.get("instance")||{},{sdkAppId:E}=u,{q_rpt_sdkappid_bl:m=[]}=g;if(!n.isEmpty(m))return m.split(",").map(D=>Number(D)).includes(E)}_isTinyIDInWhitelist(){const{store:s,utils:n}=this._core,g=s.get("cloudConfig")||{},u=s.get("login")||{},E=Number(u.tinyID),{q_rpt_tinyid_wl:m=[]}=g;if(!n.isEmpty(m))return m.split(",").includes(E)}_buildQualityReportItem(s){const n=this._getStatResultByKey(s);if(n===null)return null;const g={quality_type:JT[s],timestamp:Date.now(),network_type:kD.ONLINE,extension:""};return Object.assign(Object.assign({},g),n)}_getStatResultByKey(s){switch(s){case fh:return jQ.getStatResult();case BB:case yh:case Dh:case QB:case pB:return qQ.getStatResult(s);case MC:case JQ:case HQ:return KQ.getStatResult(s);default:return null}}_uploadQualityReports(s){return pA(this,void 0,void 0,function*(){try{const n={header:this._core.common.getCommonHead(),quality:s};yield function(g){const{common:u,channel:E}=lR.core,m="imopenstat.tim_web_report_v2",D=u.generateSSOLogProtocolData({servcmd:m,data:g}),M=`${D.head.seq}${m}`;return E.sendPacket(D,{requestId:M})}(n),this._reportIndex++,this._wholePeriod=!1}catch(n){console.warn("doReport failed. error:",n),this._pendingReports=this._pendingReports.concat(s),this._cacheFailedLogs()}})}_cacheFailedLogs(){const s=this._pendingReports,n=`${gR}._cacheFailedLogs`;let g=[...this._failedLogsCache.get(bD)||[],...s];g.length>10&&(g=g.slice(g.length-10),console.log(`${n} logs overflow, keeping last 10 items`)),this._failedLogsCache.set(bD,g),console.log(`${n} count: ${g.length}`),this._pendingReports=[]}_reset(){const{helper:s}=this._core;s.taskScheduler.removeTask(Km)}_dispose(){const{notificationCenter:s,InnerEvent:{QUALITY_STAT:n,LOGOUT:g,DESTROY:u}}=this._core;s.unSubscribeInnerEvent(n,this._handleQualityStat,this),s.unSubscribeInnerEvent(g,this._reset,this),s.unSubscribeInnerEvent(u,this._dispose,this),this._reset(),jQ.dispose(),KQ.dispose()}};const ll=new class{init(s){this.core=s}};function IR(s){return pA(this,void 0,void 0,function*(){var n;const{message:g,user:u,appStore:E,constants:{OuterConstant:m}}=ll.core,D=E.conversationStore.getConversationMap();if(D.has(s)){const T=(n=D.get(s))===null||n===void 0?void 0:n.userProfile;if(T&&s.startsWith(m.CONV_C2C)){const{avatar:P,nick:W}=T;ll.core.message.messageDataHandler.updateNickAndAvatarOfSentMessage({conversationID:s,latestAvatar:P,latestNick:W,isSentByMe:!1})}}const{data:M}=(yield u.userProfile.getMyProfile())||{};if(M){const{avatar:T,nick:P}=M;g.messageDataHandler.updateNickAndAvatarOfSentMessage({conversationID:s,latestAvatar:T,latestNick:P,isSentByMe:!0})}})}function uR(s){return pA(this,void 0,void 0,function*(){const n=s.map(g=>g.revoker);try{const g=yield function(u){return pA(this,void 0,void 0,function*(){var E,m;const D=yield(E=ll.core.user.userProfile)===null||E===void 0?void 0:E.getUserProfile({userIDList:u});return D?.data?(m=D.data)===null||m===void 0?void 0:m.reduce((M,{userID:T,nick:P,avatar:W})=>(M[T]={nick:P||"",avatar:W||""},M),{}):null})}(n);g&&s.forEach(u=>{const{revoker:E}=u;g[E]&&(u.revokerInfo.nick=g[E].nick||"",u.revokerInfo.avatar=g[E].avatar||"",u.revokerInfo.userID=E)})}catch(g){console.debug(g)}})}const UD=1,ER=2,Mh=20,WQ=2500,dR=1,vh=300;function zQ(s){return pA(this,void 0,void 0,function*(){var n,g;const{appStore:u,utils:{isEmpty:E},common:{getCurrentUserID:m},notificationCenter:D,OuterEvent:M,OuterConstant:{CONV_C2C:T}}=ll.core,{messageList:P,conversationID:W}=s,iA=u.conversationStore.getConversationMap();let EA=(n=iA.get(W))===null||n===void 0?void 0:n.peerReadTime;if(!EA){const kA=W.replace(T,""),xA=yield function(LA){return pA(this,void 0,void 0,function*(){const SA={To_Account:LA};return ll.core.common.buildAndSendPacket({servcmd:"openim.get_peer_read_time",data:SA})})}([kA]);if(xA){const{ReadTime:LA}=xA;EA=LA?.[0],iA.has(W)&&(iA.get(W).peerReadTime=EA)}}if(iA.has(W)){const kA=(g=iA.get(W))===null||g===void 0?void 0:g.lastMessage;E(kA)||kA.fromAccount===m()&&kA.lastTime<=EA&&!kA.isPeerRead&&(kA.isPeerRead=!0,u.conversationStore.updateConversation(W,{lastMessage:kA}))}const RA=[];P.forEach(kA=>{kA.time<=EA&&!kA.isPeerRead&&kA.flow==="out"&&(kA.isPeerRead=!0,RA.push(kA))}),RA.length>0&&D.emitOuterEvent(M.MESSAGE_READ_BY_PEER,{name:M.MESSAGE_READ_BY_PEER,data:RA})})}var CR=new class{init(s){this._core=s,s.helper.registerApi({apiName:"getMessageList",context:this}),s.helper.registerApi({apiName:"getMessageListHopping",context:this}),s.helper.registerApi({apiName:"clearHistoryMessage",context:this})}getMessageList(s){return pA(this,void 0,void 0,function*(){try{const{message:n,OuterConstant:{Direction:g,CONV_C2C:u,CONV_GROUP:E},InnerEvent:{HISTORY_MESSAGE_FETCHED:m},notificationCenter:D}=this._core,{conversationID:M,nextReqMessageID:T}=s,P=Mh;if(M==="@TIM#SYSTEM")return{code:0,data:{messageList:[],isCompleted:!1,nextMessageSeq:""}};const W=this._getAvailableLocalMessagesCount({conversationID:M,nextReqMessageID:T});if(this._needFetchHistoryMessageList({conversationID:M,availableLocalMessagesCount:W,targetCount:P})){let iA=null;if(M.startsWith(E)?iA=yield n.messageHistory.getGroupRoamingMessagesByAnchor({conversationID:M,sequence:Number(T),count:P,direction:g.FORWARD,shouldMarkCompleted:!0}):M.startsWith(u)&&(iA=yield n.messageHistory.getC2CRoamingMessagesByAnchor({conversationID:M,messageID:T,count:P,direction:g.FORWARD,shouldMarkCompleted:!0})),iA){const{nextReqMessageIDFromServer:EA,hasNoMoreHistoryMessage:RA,messageList:kA}=iA,xA=n.messageDataHandler.prependLocalMessageList({messageList:kA,conversationID:M});(function(ae){const{appStore:se,message:_i,OuterConstant:Ti}=ll.core,Ft=se.conversationStore.getConversation(ae),Ni=_i.messageDataHandler.getLocalMessageList(ae);if(!Ft||Ni.length===0||ae===Ti.CONV_SYSTEM)return;const cs=[];for(let mt=0;mtUA.isRevoked).length;Se=cs.length-Ft.unreadCount-mt}else Se=cs.length-Ft.unreadCount;for(let mt=0;mtae.isRevoked);yield uR(SA),D.emitInnerEvent(m,xA);const OA={nextReqMessageID:RA?"":String(EA),messageList:LA,isCompleted:RA},JA=LA.map(ae=>ae.sequence);return{code:0,data:OA,successLog:{message:`conversationID: ${M} nextReqMessageID: ${T} availableLocalMessagesCount: ${W} sequenceList: ${JSON.stringify(JA)}`}}}return{code:0,data:{messageList:[],isCompleted:!1,nextReqMessageID:""}}}return{code:0,data:yield this._getMessageListFromMemory({conversationID:M,nextReqMessageID:T,count:P}),successLog:{message:`conversationID: ${M} nextReqMessageID: ${T} availableLocalMessagesCount: ${W}}`}}}catch(n){const{code:g,message:u}=n||{};throw new this._core.helper.ChatError({code:g,message:u,moreMessage:`options: ${this._core.utils.safeStringify(s)}`})}})}getMessageListHopping(s){return pA(this,void 0,void 0,function*(){var n,g;const{OuterConstant:{Direction:u,CONV_C2C:E,CONV_GROUP:m},utils:{safeStringify:D}}=this._core,{conversationID:M,sequence:T,time:P,direction:W=u.FORWARD}=s,{utils:{isEmpty:iA},message:EA,notificationCenter:RA,InnerEvent:{HISTORY_MESSAGE_FETCHED:kA}}=this._core;if(![u.BACKWARD,u.FORWARD].includes(W))throw new this._core.helper.ChatError({message:"direction must be 0 or 1",moreMessage:`options: ${D(s)}`});let{count:xA=Mh}=s;xA=xA>Mh?Mh:xA;let LA=null;if(M.startsWith(m)){if(LA=yield EA.messageHistory.getGroupRoamingMessagesByAnchor({conversationID:M,sequence:T,count:xA,direction:W}),LA){const{nextReqMessageIDFromServer:SA,hasNoMoreHistoryMessage:OA,messageList:JA,invisibleSequenceList:ae}=LA;if(this._core.message.messageDataHandler.storeSparseMessageList(JA),RA.emitInnerEvent(kA,JA),W===u.FORWARD){const se=OA&&SA<1;return{code:0,data:{messageList:JA,isCompleted:se,nextMessageSeq:se?"":SA}}}if(W===u.BACKWARD){if(iA(JA)&&iA(ae))return{code:0,data:{messageList:[],isCompleted:!0,nextMessageSeq:""}};const se=((n=JA?.[JA.length-1])===null||n===void 0?void 0:n.sequence)||0,_i=((g=ae?.[ae.length-1])===null||g===void 0?void 0:g.sequence)||0;return{code:0,data:{messageList:JA.filter(Ti=>Ti.sequence>=T),isCompleted:!OA,nextMessageSeq:OA?Math.max(se,_i)+1:""}}}return{code:0,data:LA}}}else if(M.startsWith(E)&&(LA=yield EA.messageHistory.getC2CRoamingMessagesByAnchor({conversationID:M,count:xA+1,time:P,direction:W}),LA)){const{messageList:SA,lastMessageTime:OA,hasNoMoreHistoryMessage:JA}=LA;return RA.emitInnerEvent(kA,SA),JA||(W===u.FORWARD?SA.shift():SA.pop()),EA.messageDataHandler.storeSparseMessageList(SA),yield zQ({messageList:SA,conversationID:M}),{code:0,data:{messageList:SA,isCompleted:JA,nextMessageTime:JA?"":OA}}}})}clearHistoryMessage(s){return pA(this,void 0,void 0,function*(){var n;const{appStore:g,common:{ChatError:u,getCurrentUserID:E},OuterConstant:{CONV_C2C:m,CONV_GROUP:D},apiMap:M,message:T}=this._core,P=g.conversationStore.getConversation(s);if(!P)throw new u({code:WQ});const W={fromAccount:E()},{type:iA}=P;iA===m?(W.type=UD,W.toAccount=s.replace(m,"")):iA===D&&(W.type=ER,W.toGroupID=s.replace(D,""));try{return yield(n=M?.setMessageRead)===null||n===void 0?void 0:n.call(M,{conversationID:s}),(yield function(RA){return pA(this,void 0,void 0,function*(){const{fromAccount:kA,type:xA,toAccount:LA,toGroupID:SA}=RA,OA={From_Account:kA,Type:xA,To_Account:LA,ToGroupid:SA};return ll.core.common.buildAndSendPacket({servcmd:"recentcontact.clear_msg",data:OA})})}(W))&&(T.messageDataHandler.deleteConversationMessageList(s),T.messageHistory.completedHistoryConversations.delete(s),T.messageHistory.clearHistoryMessageListFetchAnchors(s),this._updateConversationLastMessage(s)),{code:0,data:{conversationID:s},successLog:{message:`convID:${s}`}}}catch(EA){const{errorCode:RA}=EA;throw new this._core.helper.ChatError({functionName:"clearHistoryMessage",code:RA,moreMessage:`convID:${s}`})}})}_updateConversationLastMessage(s){const{appStore:n}=this._core;n.conversationStore.updateConversation(s,{lastMessage:this._generateLastMessage()},{needSort:!0})}_getAvailableLocalMessagesCount({conversationID:s,nextReqMessageID:n}){const{OuterConstant:{CONV_C2C:g,CONV_GROUP:u}}=this._core,E=this._core.message.messageDataHandler.getLocalMessageList(s),{length:m}=E;if(!n)return m;let D=-1;return s?.startsWith(g)?D=E.findIndex(M=>M.ID===n):s?.startsWith(u)&&(D=E.findIndex(M=>n.includes("-")?M.ID===n:String(M.sequence)===n)),D===-1?0:D}_needFetchHistoryMessageList({conversationID:s,availableLocalMessagesCount:n,targetCount:g}){const{message:u}=this._core;return nn.startsWith(E)?EA.ID===g:String(EA.sequence)===g),W=iA>u?iA-u:0,T=iA):W=M>u?M-u:0,P.messageList=D.slice(W,iA),P.isCompleted=T<=u&&m.messageHistory.completedHistoryConversations.has(n),P.isCompleted?P.nextReqMessageID="":P.nextReqMessageID=this._generateNextReqMessageID({conversationID:n,targetIndex:W}),n.startsWith(E)&&(yield IR(n),yield zQ({messageList:P.messageList,conversationID:n})),P})}_generateNextReqMessageID({conversationID:s,targetIndex:n}){const g=this._core.message.messageDataHandler.getLocalMessageList(s);return s.startsWith("C2C")?g[n].ID:String(g[n].sequence)}_generateLastMessage(){return{lastTime:0,lastSequence:0,fromAccount:"",messageForShow:"",payload:null,type:"",isRevoked:!1,cloudCustomData:"",onlineOnlyFlag:!1,nick:"",nameCard:"",version:0,isPeerRead:!1,revoker:null}}},fB=new class{constructor(){this._lastMessageSequenceMapOnDisconnect=new Map,this._lastMessageTimeMapOnDisconnect=new Map}init(s){this._core=s;const{common:{workflowManager:n},constants:{WORKFLOW_NAME:g,WORKFLOW_STEP:u,InnerEvent:E}}=s;n.registerWorkflowStep(g.SYNC_SERVER_INFO_AFTER_RE_ONLINE,u.HISTORY_MESSAGE_RECOVER,this._syncGroupOfflineMessage,this),n.registerWorkflowStep(g.SYNC_SERVER_INFO_AFTER_RE_ONLINE,u.C2C_HISTORY_MESSAGE_RECOVER,this._syncC2COfflineMessage,this),s.notificationCenter.subscribeInnerEvent(E.SOCKET_DISCONNECTED,this._updateLastMessageSequenceMapOnDisconnect,this)}_syncGroupOfflineMessage(s){const{conversationList:n}=s?.result||{},{OuterConstant:g,utils:{isArray:u}}=this._core;if(u(n)){const E=n.filter(m=>m.type===g.CONV_GROUP&&m.groupProfile.type!==g.GRP_AVCHATROOM);return this._recoverGroupHistoryMessage(E)}}_recoverGroupHistoryMessage(s){return pA(this,void 0,void 0,function*(){const{OuterConstant:n}=this._core,g=[],u=[];return yield Promise.all(s?.map(E=>pA(this,void 0,void 0,function*(){const{groupProfile:{groupID:m}={},lastMessage:{lastSequence:D}={}}=E,M=`${n.CONV_GROUP}${m}`;let T=this._getLocalLastMessageSequence(M);this._shouldRecoverHistory({localLastMessageSequence:T,serverLastMessageSequence:D})&&(yield this._recoverGroupHistoryForConversation({conversationID:M,localLastMessageSequence:T,serverLastMessageSequence:D,groupTipList:u})),g.push(M.replace(n.CONV_GROUP,""))}))),{recoverRevokeNoticeGroupIDList:g,groupTipList:u}})}_recoverGroupHistoryForConversation(s){return pA(this,arguments,void 0,function*({conversationID:n,localLastMessageSequence:g,serverLastMessageSequence:u,groupTipList:E}){try{const{utils:{isArray:m,isObject:D,isEmpty:M},OuterEvent:T,OuterConstant:P,notificationCenter:W,message:iA,appStore:EA,common:{getMessagePreviewText:RA,buildLastMessage:kA}}=this._core,xA=u-g,LA=Math.min(20,xA),SA={},OA=yield iA.messageHistory.getGroupRoamingMessagesByAnchor({conversationID:n,sequence:g+LA,direction:P.Direction.FORWARD,count:LA}),{nextReqMessageIDFromServer:JA,hasNoMoreHistoryMessage:ae,messageList:se,serverGroupTipList:_i}=OA;m(_i)&&E.push(..._i);const Ti=ae&&JA<0,Ft=[];if(m(se)&&(se.forEach(Ni=>{iA.messageReceiver.groupMessageReceiver.updateMessageProfile(Ni),Ni.from===P.CONV_SYSTEM&&(Ni.isSystemMessage=!1),iA.messageDataHandler.storeConversationMessage(Ni)&&!M(Ni.payload)&&(Ft.push(Ni),Ni._isExcludedFromLastMessage||(SA.lastMessage=kA(Ni)))}),Ft.length>0&&W.emitOuterEvent(T.MESSAGE_RECEIVED,{name:T.MESSAGE_RECEIVED,data:Ft})),!Ti&&se.length>0){const Ni=se[se.length-1].sequence;yield this._recoverGroupHistoryForConversation({conversationID:n,localLastMessageSequence:Ni,serverLastMessageSequence:u,groupTipList:E})}D(SA.lastMessage)&&(SA.lastMessage.messageForShow=RA(SA.lastMessage.type,SA.lastMessage.payload),EA.conversationStore.updateConversation(n,SA))}catch(m){this._core.ssoLog.error("_recoverGroupHistoryForConversation",`Recovery failed for conversation:${n}`,{error:m})}})}_updateLastMessageSequenceMapOnDisconnect(){const{message:s}=this._core,n=s.messageDataHandler.getContinuousMessagesByConversation();for(const[g,u]of n){const E=Array.from(u.values());if(E?.length>0){const m=E[E.length-1];g.startsWith("C2C")?this._lastMessageTimeMapOnDisconnect.set(g,m.time):g.startsWith("GROUP")&&this._lastMessageSequenceMapOnDisconnect.set(g,m.sequence)}}}_getLocalLastMessageSequence(s){const{message:n}=this._core;if(this._lastMessageSequenceMapOnDisconnect.has(s))return this._lastMessageSequenceMapOnDisconnect.get(s);const g=n.messageDataHandler.getLocalMessageList(s),u=g[g.length-1];return u?.sequence}_shouldRecoverHistory(s){const{localLastMessageSequence:n,serverLastMessageSequence:g}=s;if(typeof n!="number"||typeof g!="number")return!1;const u=g-n;return g!==0&&n>0&&u>=dR&&u{m.type===g.CONV_C2C&&E.push(m)}),this._recoverC2CHistoryMessage(E)}}_recoverC2CHistoryMessage(s){return pA(this,void 0,void 0,function*(){yield Promise.all(s?.map(n=>pA(this,void 0,void 0,function*(){const{conversationID:g,lastMessage:{lastTime:u}={}}=n,E=this._getLocalLastMessageTime(g);this._shouldRecoverC2CHistory({localLastMessageTime:E,serverLastMessageTime:u})&&(yield this._recoverHistoryForC2CConversation({conversationID:g,localLastMessageTime:E,serverLastMessageTime:u}))})))})}_shouldRecoverC2CHistory(s){const{localLastMessageTime:n,serverLastMessageTime:g}=s,u=g-n;return n>0&&u>=1&&u<=600}_recoverHistoryForC2CConversation(s){return pA(this,void 0,void 0,function*(){var n;const{conversationID:g,localLastMessageTime:u,serverLastMessageTime:E}=s,{utils:{isArray:m,isObject:D,isEmpty:M,safeStringify:T},OuterEvent:P,OuterConstant:W,notificationCenter:iA,message:EA,appStore:RA,common:{getMessagePreviewText:kA,buildLastMessage:xA}}=this._core;try{const LA={},SA=yield EA.messageHistory.getC2CRoamingMessagesByAnchor({conversationID:g,direction:W.Direction.BACKWARD,time:u,count:20});if(M(SA))return;const{hasNoMoreHistoryMessage:OA,messageList:JA}=SA,ae=[];m(JA)&&(JA.forEach(_i=>{EA.messageDataHandler.storeConversationMessage(_i)&&!M(_i.payload)&&(ae.push(_i),_i._isExcludedFromLastMessage||(LA.lastMessage=xA(_i)))}),ae.length>0&&iA.emitOuterEvent(P.MESSAGE_RECEIVED,{name:P.MESSAGE_RECEIVED,data:ae}));const se=(n=JA[JA.length-1])===null||n===void 0?void 0:n.time;!OA&&se>E&&(yield this._recoverHistoryForC2CConversation({conversationID:g,localLastMessageTime:se,serverLastMessageTime:E})),D(LA.lastMessage)&&(LA.lastMessage.messageForShow=kA(LA.lastMessage.type,LA.lastMessage.payload),RA.conversationStore.updateConversation(g,LA))}catch(LA){this._core.ssoLog.error("_recoverHistoryForC2CConversation",`Recovery failed for conversation:${g} error: ${T(LA)}`)}})}_getLocalLastMessageTime(s){const{message:n}=this._core;if(this._lastMessageTimeMapOnDisconnect.has(s))return this._lastMessageTimeMapOnDisconnect.get(s);const g=n.messageDataHandler.getLocalMessageList(s),u=g[g.length-1];return u?.time}reset(){this._lastMessageSequenceMapOnDisconnect.clear(),this._lastMessageTimeMapOnDisconnect.clear()}dispose(){this.reset()}},yB=new class{constructor(){this.name="HistoryMessage"}install(s){this._core=s,ll.init(s),CR.init(s),fB.init(s),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.LOGOUT,this._reset,this),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this.dispose,this)}dispose(){const{notificationCenter:s,InnerEvent:n}=this._core;s.unSubscribeInnerEvent(n.LOGOUT,this._reset,this),s.unSubscribeInnerEvent(n.DESTROY,this.dispose,this),fB.dispose()}_reset(){fB.reset()}},FD=new class{init(s){this.core=s}},vC=new class{constructor(){this._reportedAtomicStoreIDs=new Set}init(s){const{helper:{registerExperimentalAPI:n}}=s;this._core=s,n("reportModalView",this),n("reportTUIFeatureUsage",this),n("reportRoomEngineEvent",this)}reportModalView(s){const{ssoLog:n,utils:{safeStringify:g,isString:u}}=this._core;try{if(!u(s))throw new Error("reportModalView data is not a string");n.createSSOLogData({method:"reportModalView",message:s,eventType:30}).end(!0)}catch(E){n.debug(`reportModalView Report failed: ${g(E)}`)}}reportTUIFeatureUsage(s){const{ssoLog:n,utils:{safeStringify:g,isEmpty:u}}=this._core,{atomicStoreID:E}=s;try{u(E)||this._reportedAtomicStoreIDs.has(E)||(this._core.ssoLog.info("reportTUIFeatureUsage",`atomicStoreID: ${s.atomicStoreID}`,{method:"reportTUIFeatureUsage",eventType:31,code:E}),this._reportedAtomicStoreIDs.add(E))}catch(m){n.debug(`reportTUIFeatureUsage Report failed: ${g(m)}`)}}reportRoomEngineEvent(s){const{utils:{safeStringify:n},ssoLog:g}=this._core;try{g.debug(`reportRoomEngineEvent Report: ${n(s)}`);const{eventId:u,eventCode:E,eventResult:m,eventMessage:D,moreMessage:M,extensionMessage:T}=s;g.createSSOLogData({method:T,code:u,message:D,eventType:30,costTime:E,uiPlatform:m,moreMessage:M}).end(!0)}catch(u){g.debug(`reportRoomEngineEvent Report failed: ${n(u)}`)}}reset(){this._reportedAtomicStoreIDs.clear()}dispose(){this.reset()}},ZQ=new class{constructor(){this.name="DataReport"}install(s){this._core=s;const{notificationCenter:n,InnerEvent:{LOGOUT:g,DESTROY:u}}=s;FD.init(s),vC.init(s),n.subscribeInnerEvent(g,this._reset,this),n.subscribeInnerEvent(u,this._dispose,this)}_reset(){vC.reset()}_dispose(){const{notificationCenter:s,InnerEvent:{LOGOUT:n,DESTROY:g}}=this._core;s.unSubscribeInnerEvent(n,this._reset,this),s.unSubscribeInnerEvent(g,this._dispose,this),vC.dispose()}};let jm=nr.STANDARD,DB=[];jm=nr.STANDARD,DB=[ah,IC,uC,EC,Rc,HT,yB,ZQ,PE,vi,jn,UT,xm,GD,XI];function SB(s,n){const{operationType:g,memberInfoList:u,operatorInfo:E}=s||{};let m={};if(Rs(u)?Rs(E)||(m=E):g!==Tg.JOINED&&g!==Tg.KICKED&&g!==Tg.ADMIN_SET&&g!==Tg.ADMIN_CANCELED||(m=Object.assign({},u[0])),!Rs(m)){const{nick:D="",avatar:M=""}=m;n.nick=D,n.avatar=M}}const XQ=s=>({lastTime:s?.time||s?.lastTime||0,lastSequence:s?.sequence||s?.lastSequence||0,fromAccount:s?.from||s?.fromAccount||"",messageForShow:Zc(s?.type,s?.payload),payload:s?.payload||null,type:s?.type||"",isRevoked:s?.isRevoked||!1,cloudCustomData:s?.cloudCustomData||"",onlineOnlyFlag:s?._onlineOnlyFlag||!1,nick:s?.nick||"",nameCard:s?.nameCard||"",version:s?.version||0,isPeerRead:s?.isPeerRead||!1,revoker:s?.revoker||null});var $Q=Object.freeze({__proto__:null,ChatError:gs,WorkflowManager:ws,buildAndSendPacket:gg,buildLastMessage:XQ,get builtInPlugins(){return DB},checkBusinessCapabilityBits:tn,deepMerge:Cd,getCurrentUserID:Ar,getErrorMessage:rs,getMessagePreviewText:Zc,isC2CConv:s=>l(s)&&s.slice(0,3)===ka.CONV_C2C,isCommunity:Xr,isGroupConv:s=>l(s)&&s.slice(0,5)===ka.CONV_GROUP,isInternational:wl,isTopic:zc,isUnlimitedAVChatRoom:function(){var s;return!!(!((s=fe.store.get("instance"))===null||s===void 0)&&s.unlimitedAVChatRoom)},liteChatInstanceMap:Ca,registerInterceptor:Mc,registerValidateConfig:Wc,requireAuth:ud,get sdkEdition(){return jm},setGroupTipsUserInfo:SB,t:ku,updateGroupAtInfo:(s,n)=>{const{CONV_AT_ME:g,CONV_AT_ALL:u,CONV_AT_ALL_AT_ME:E}=Lo;if(function(M,T){const{CONV_AT_ME:P,CONV_AT_ALL:W,CONV_AT_ALL_AT_ME:iA}=Lo,{groupID:EA,sequence:RA}=M;let kA=!1;return Xr({groupID:EA})&&T.forEach(xA=>{xA.messageSequence===RA&&(xA.atTypeArray.includes(P)&&M.groupAtType.includes(W)&&(xA.atTypeArray=[iA]),xA.atTypeArray.includes(W)&&M.groupAtType.includes(P)&&(xA.atTypeArray=[iA],xA.__random=M.__random,xA.__sequence=M.__sequence),kA=!0)}),kA}(s,n))return;let m=[...s.groupAtType];m.includes(g)&&m.includes(u)&&(m=[E]);const D={from:s.from,groupID:s.groupID,topicID:s.topicID,messageSequence:s.sequence,atTypeArray:m,__random:s.__random,__sequence:s.__sequence};n.push(D)},validateAndExecute:Sr,validateParameters:II});class au{constructor(){this._builtInPlugins=new Set,this._externalPlugins=new Set}static getInstance(){return au._instance||(au._instance=new au),au._instance}static setInstance(n){au._instance=n}installBuiltInPlugin(n){n&&this._installPlugin(n,this._builtInPlugins)}installExternalPlugin(n){n&&this._installPlugin(n,this._externalPlugins)}clear(){this._builtInPlugins=new Set,this._externalPlugins=new Set}_installPlugin(n,g){let u=[];u=h(n)?n:[n];const E=u.findIndex(D=>D?.name==="AVChatRoom"),m=E>-1?u.splice(E,1):[];u.forEach(D=>{this._isPluginInstalled(D.name)||(D&&vg(D.install)?(g.add(D.name),vg(D.getInstalledSubPlugins)?(m?.forEach(M=>g.add(M?.name)),D.install(Cr.getInstance().exposeApiForPlugin(),m)):D.install(Cr.getInstance().exposeApiForPlugin()),vg(D.handleLoginSuccess)&&this._isLoggedIn()&&D.handleLoginSuccess()):vg(D)?(g.add(D.name),D(Cr.getInstance().exposeApiForPlugin()),vg(D.handleLoginSuccess)&&this._isLoggedIn()&&D.handleLoginSuccess()):console.warn('A plugin must either be a function or an object with an "install" function.'))})}_isPluginInstalled(n){return this._builtInPlugins.has(n)||this._externalPlugins.has(n)}_isLoggedIn(){var n;return((n=fe.store.get("login"))===null||n===void 0?void 0:n.isLoggedIn)===!0}}var MB=new class{constructor(){this._conversationMap=new Map}getConversationMap(){return this._conversationMap}getConversation(s){return this._conversationMap.get(s)}updateConversation(s,n,g){const{emit:u=!0,needSort:E=!1}=g||{},m=this._conversationMap.get(s);m&&!Rs(n)&&(Object.keys(n).forEach(D=>{m[D]=n[D]}),u&&fe.notificationCenter.emitInnerEvent(no.CONVERSATION_UPDATED,{needSort:E}))}deleteConversation(s){this._conversationMap.has(s)&&(this._conversationMap.delete(s),fe.notificationCenter.emitInnerEvent(no.CONVERSATION_UPDATED))}},Ap=new class{constructor(){this._groupMap=new Map}getGroupMap(){return this._groupMap}getGroup(s){return this._groupMap.get(s)}updateGroup(s,n){const g=this._groupMap.get(s);g&&!Rs(n)&&Object.keys(n).forEach(u=>{g[u]=n[u]})}},ep=new class{constructor(){this._messagesByConversation=new Map}updateMessage(s,n,g){var u;const{operation:E,updateUnreadCount:m=!0}=g,D=Do(g,["operation","updateUnreadCount"]),M=[];for(const T of n){const P=(u=this._messagesByConversation.get(s))===null||u===void 0?void 0:u.get(T);if(!P)return!1;Object.keys(D).forEach(W=>{P[W]=D[W]}),M.push(P)}return this._emitMessageStoreOperationEvent(E,{conversationID:s,messageList:M,updateUnreadCount:m}),M}getMessagesByConversation(s){var n;return[...((n=this._messagesByConversation.get(s))===null||n===void 0?void 0:n.values())||[]]}getMessages(){return this._messagesByConversation}_emitMessageStoreOperationEvent(s,n){const{conversationID:g}=n;zc(g)?fe.notificationCenter.emitInnerEvent(_u[s],n):fe.notificationCenter.emitInnerEvent(s,n)}},rc=new class{constructor(){this.userProfileMap=new Map,this.friendMap=new Map}getUserProfileMap(){return this.userProfileMap}getFriendMap(){return this.friendMap}getUserProfile(s){return this.userProfileMap.get(s)}getFriend(s){return this.friendMap.get(s)}},OD=Object.freeze({__proto__:null,conversationStore:MB,groupStore:Ap,messageStore:ep,userStore:rc});class Cr{static getInstance(){return Cr._instance||(Cr._instance=new Cr),Cr._instance}static setInstance(n){Cr._instance=n}constructor(){this._experimentalApiMap={statTUIKeyFeatures:this.statKeyFeatureUsage.bind(this),setApplicationID:this.setApplicationID.bind(this)},this._apiHandlersMap={},this._apiMap={on:fe.notificationCenter.subscribeOuterEvent.bind(fe.notificationCenter),off:fe.notificationCenter.unSubscribeOuterEvent.bind(fe.notificationCenter),destroy:this.destroy.bind(this),callExperimentalAPI:this.callExperimentalAPI.bind(this),use:au.getInstance().installExternalPlugin.bind(au.getInstance()),registerPlugin:this.registerPlugin.bind(this),setLogLevel:this.setLogLevel.bind(this)}}registerPlugin(n){fe.ssoLog.debug("registerPlugin",n)}statKeyFeatureUsage(n){fe.ssoLog.debug("statTUIKeyFeatures",n)}setLogLevel(n){fe.ssoLog.debug("setLogLevel",n),fe.ssoLog.setLogLevel(n)}setApplicationID(n){fe.store.set("instance",{applicationID:n})}getApiMap(){return this._apiMap}setApiMap(n){this._apiMap=n}registerApi(n){const{common:{timeManager:g},utils:{safeStringify:u}}=fe,{apiName:E,context:m,methodName:D=E,matcher:M}=n;this._apiHandlersMap[E]||(this._apiHandlersMap[E]=[]),this._apiHandlersMap[E].push({context:m,methodName:D,matcher:M}),this._apiMap[E]&&this._apiHandlersMap[E].length!==1||(this._apiMap[E]=(...T)=>{const P=g.getServerTimeMs();let W=0;E==="login"&&(W=4),qI.includes(E)&&fe.ssoLog.debug(E,`${E} start params: ${u(T)}`),Sr(D,T);const iA=this._apiHandlersMap[E];for(const EA of iA)if(!EA.matcher||EA.matcher(T))try{const RA=EA.context[EA.methodName].bind(EA.context)(...T);return this._isPromiseLike(RA)?this._handleAsyncResult(RA,E,W,P):(this._reportApiSuccessLog({result:RA,apiName:E,eventType:W,startTime:P}),RA)}catch(RA){throw fe.ssoLog.error(E,`${E} fail ${RA?.message||RA?.errorMessage})`,{error:RA,costTime:g.getServerTimeMs()-P,eventType:W,method:E}),RA}})}registerExperimentalAPI(n,g,u){const E=u||n;this._experimentalApiMap[n]=g[E].bind(g)}destroy(){return pA(this,void 0,void 0,function*(){var n,g;try{!((n=fe.store.get("login"))===null||n===void 0)&&n.isLogin&&(yield this._apiMap.logout()),fe.notificationCenter.emitInnerEvent(no.DESTROY)}catch(u){console.debug("destroy error: ",u)}finally{fe.notificationCenter.emitOuterEvent(Dr.SDK_DESTROY,{SDKAppID:(g=fe.store.get("instance"))===null||g===void 0?void 0:g.sdkAppId}),Ca.clear(),au.getInstance().clear(),ws.getInstance().destroy(),fe.destroy()}})}exposeApiForClient(){return this._apiMap}exposeApiForPlugin(){return Object.assign(Object.assign({InnerEvent:no,InnerEventSubType:fe.notificationCenter.InnerEventSubType,OuterEvent:Dr,OuterConstant:Lo,SignalingEvent:qc,helper:Object.assign(Object.assign(Object.assign({},fe.utils),fe.common),{registerApi:this.registerApi.bind(this),registerExperimentalAPI:this.registerExperimentalAPI.bind(this),registerInterceptor:Mc,registerValidateConfig:Wc,checkBusinessCapabilityBits:tn,registerWorkflowStep:ws.getInstance().registerWorkflowStep.bind(ws.getInstance()),ChatError:gs}),apiMap:this._apiMap},fe),{constants:Object.assign(Object.assign({},za),fe.constants),common:Object.assign(Object.assign(Object.assign({},$Q),fe.common),{workflowManager:ws.getInstance()}),utils:fe.utils,appStore:OD})}callExperimentalAPI(n,g){return fe.ssoLog.debug(`callExperimentalAPI.${n} start params: ${fe.utils.safeStringify(g)}`),this._experimentalApiMap[n]?this._experimentalApiMap[n](g):(fe.ssoLog.error("callExperimentalAPI",`callExperimentalAPI.${n} not found, params: ${fe.utils.safeStringify(g)}`),Promise.reject(new gs({code:da.INVALID_OPERATION})))}_isPromiseLike(n){return n!==null&&typeof n=="object"&&typeof n.then=="function"}_handleAsyncResult(n,g,u,E){return n.then(m=>(this._reportApiSuccessLog({result:m,apiName:g,eventType:u,startTime:E}),m)).catch(m=>{throw fe.ssoLog.error(g,`${g} fail ${m?.message||m?.errorMessage})`,{error:m,costTime:fe.common.timeManager.getServerTimeMs()-E,eventType:u,method:g,startTime:E}),m})}_reportApiSuccessLog(n){let{result:g,apiName:u,startTime:E,eventType:m}=n;const{timeManager:D}=fe.common,{successLog:{message:M,moreMessage:T}={message:"",moreMessage:""}}=g||{},P=D.getServerTimeMs();u==="login"&&(E+=D.getTimeOffsetWithServer()),qI.includes(u)&&fe.ssoLog.info(u,`${u} success ${M} ${T}`,{costTime:P-E,eventType:m,message:M,moreMessage:T,startTime:E}),g?.successLog&&delete g.successLog}}class hR{constructor(){this._latestLoginAt=0,this._latestSendOnlinePresenceRequestTime=0,this._helloInterval=120,this._customLoginInfo=""}init(){const{notificationCenter:n,store:g}=fe;g.set("login",{isReady:!1}),Cr.getInstance().registerApi({apiName:"login",context:this}),Cr.getInstance().registerApi({apiName:"logout",context:this}),Cr.getInstance().registerApi({apiName:"getLoginUser",context:this}),Cr.getInstance().registerApi({apiName:"isReady",context:this}),Cr.getInstance().registerApi({apiName:"getServerTime",context:this}),Cr.getInstance().registerExperimentalAPI("setCustomLoginInfo",this),n.subscribeInnerEvent(no.RECONNECTED,this._reLogin,this),fe.notificationCenter.subscribeInnerEvent(no.DESTROY,this._dispose,this)}login(n){return pA(this,void 0,void 0,function*(){var g;const{sdkEdition:u}=fe.store.get("instance")||{};try{if(this._isLoginIn())return this._createRepeatLoginResponse();if(this._isLoginFrequencyExceeded())throw new gs({functionName:"login",code:da.REPEAT_LOGIN});const E=yield this._performLogin(n);this._validateAfterLogin(E),this._handleLoginSuccess(E),yield this._ensureAsyncComplete(),this._updateAndEmitSDKReady(),this._latestLoginAt=0;const m=(g=fe.channel.getSocketAdapter())===null||g===void 0?void 0:g.getId(),{appId:D,href:M}=fe.store.get("instance")||{},{instanceID:T,customStatus:P}=E||{};return{code:0,data:E,successLog:{message:u,moreMessage:`socketID:${m} instanceID:${T} customStatus:${P} href: ${M} appId: ${D}`}}}catch(E){const{errorCode:m}=E;m!==da.REPEAT_LOGIN&&(this._latestLoginAt=0);const D=new gs({functionName:"login",code:m});throw console.error(D),D}})}_reLogin(){return pA(this,void 0,void 0,function*(){var n;try{if(!this._isLoginIn())return;const g=yield bu(this._customLoginInfo);if(g){const{instanceID:u,customStatus:E}=g;fe.store.set("login",{statusInstanceId:u}),ws.getInstance().executeWorkflow(Vt.SYNC_SERVER_INFO_AFTER_RE_ONLINE,{customStatus:E,statusType:SE.USER_STATUS_ONLINE});const m=(n=fe.channel.getSocketAdapter())===null||n===void 0?void 0:n.getId();fe.ssoLog.info("reLogin",`socketId:${m} instanceId:${u}`)}}catch(g){console.warn(g)}})}logout(){return pA(this,arguments,void 0,function*(n=na.USER_INITIATED){const{ssoLog:g}=fe;g.debug("logout",`logout start logoutReason: ${n}`);try{yield this._performLogout(n),g.info("logout","logout success"),fe.ssoLog.uploadSSOLogData()}catch(u){const{errorCode:E}=u;throw new gs({functionName:"logout",code:E})}finally{this.handleLogoutCompleted()}return{code:0,data:{}}})}getLoginUser(){return this._isLoginIn()?Ar():""}isReady(){var n;return(n=fe.store.get("login"))===null||n===void 0?void 0:n.isReady}setCustomLoginInfo(n=""){this._customLoginInfo=n}handleLogoutCompleted(){this._updateAndEmitSDKNotReady(),this._reset(),ws.getInstance().reset(),fe.notificationCenter.emitInnerEvent("logout")}getServerTime(){const{timeManager:n}=fe.common;return n.getServerTimeMs()}_updateAndEmitSDKReady(){fe.store.set("login",{isReady:!0}),setTimeout(()=>{fe.notificationCenter.emitOuterEvent(Dr.SDK_READY,{name:Dr.SDK_READY})},1)}_updateAndEmitSDKNotReady(){fe.store.set("login",{isReady:!1}),fe.notificationCenter.emitOuterEvent(Dr.SDK_NOT_READY,{name:Dr.SDK_NOT_READY})}_validateAfterLogin(n){const g="login";if(!n)throw new gs({functionName:g,message:"login response is empty"});const{tinyID:u,a2Key:E}=n||{};if(!u)throw new gs({functionName:g,code:da.NO_TINYID});if(!E)throw new gs({functionName:g,code:da.NO_A2KEY})}_createRepeatLoginResponse(){var n;return{code:0,data:{actionStatus:"OK",errorCode:0,errorInfo:rs({code:"RepeatLogin",replacement1:(n=fe.store.get("login"))===null||n===void 0?void 0:n.userId}),repeatLogin:!0}}}_performLogin(n){return pA(this,void 0,void 0,function*(){const{userID:g,userSig:u}=n;return fe.store.set("login",{userId:g,userSig:u}),this._latestLoginAt=Date.now(),bu(this._customLoginInfo)})}_ensureAsyncComplete(){return pA(this,void 0,void 0,function*(){yield new Promise(n=>{setTimeout(()=>n(null),1)})})}_handleLoginSuccess(n){const{timeManager:g}=fe.common,{helloInterval:u,timeStamp:E,customStatus:m,purchaseBits:D}=n,M=1e3*E;g.calculateTimeOffsetWithServer(this._latestLoginAt,M),this._helloInterval=u||120,this._updateLoginStore(n),fe.user.userStatus.setCustomStatus(m),ws.getInstance().executeWorkflow(Vt.SYNC_SERVER_INFO_AFTER_LOGIN,{purchaseBits:D}),fe.common.taskScheduler.addTask({id:Gg,intervalMs:1e3*this._helloInterval,callback:this._sendOnlinePresenceRequest,context:this})}_performLogout(n){return function(g){return pA(this,void 0,void 0,function*(){const{logoutReason:u}=g,E="im_open_status.wslogout",m=fe.common.generateProtocolData({servcmd:E,data:{wslogout_type:u,isWebUniapp:0}}),D=`${m.head.seq}${E}`;return yield fe.channel.sendPacket(m,{requestId:D})})}({logoutReason:n})}_updateLoginStore(n){const{a2Key:g,tinyID:u,instanceID:E,authKey:m}=n;fe.store.set("login",{a2Key:g,tinyID:u,statusInstanceId:E,authKey:m,isLoggedIn:!0})}_sendOnlinePresenceRequest(){return pA(this,void 0,void 0,function*(){this._latestSendOnlinePresenceRequestTime=Date.now();try{yield function(){const n="im_open_status.wshello",g=fe.common.generateProtocolData({servcmd:n,data:{isWebUniapp:0}}),u=`${g.head.seq}${n}`;return fe.channel.sendPacket(g,{requestId:u})}()}catch(n){fe.ssoLog.warn("_sendOnlinePresenceRequest",` error:${n.message}`)}})}_isLoginIn(){var n;return((n=fe.store.get("login"))===null||n===void 0?void 0:n.isLoggedIn)===!0}_isLoginFrequencyExceeded(){return Date.now()-this._latestLoginAt<=15e3}_reset(){fe.common.taskScheduler.removeTask(Gg),this._helloInterval=120,this._latestSendOnlinePresenceRequestTime=0,this._latestLoginAt=0,this._customLoginInfo="",fe.store.clear("login"),fe.store.set("login",{isReady:!1}),fe.store.set("instance",{applicationID:0})}_dispose(){this._reset();const{notificationCenter:n}=fe;n.unSubscribeInnerEvent(no.RECONNECTED,this._reLogin,this),n.unSubscribeInnerEvent(no.DESTROY,this._dispose,this)}}const BR={login:{userID:{required:!0,rules:["string"],allowEmpty:!1},userSig:{required:!0,rules:["string"],allowEmpty:!1}}},qT={logout:!0};class Rh{constructor(){this.loginAction=new hR,this.kickedOutHandler=new Gu,this.loginAction.init(),this.kickedOutHandler.init(),Wc({auth:qT,params:BR})}}var Kr,$u,KE;(function(s){s.CONV_C2C="C2C",s.CONV_GROUP="GROUP",s.CONV_TOPIC="TOPIC",s.CONV_SYSTEM="@TIM#SYSTEM"})(Kr||(Kr={})),function(s){s.MSG_PRIORITY_HIGH="High",s.MSG_PRIORITY_NORMAL="Normal",s.MSG_PRIORITY_LOW="Low",s.MSG_PRIORITY_LOWEST="Lowest"}($u||($u={})),function(s){s.MSG_TEXT="TIMTextElem",s.MSG_CUSTOM="TIMCustomElem",s.MSG_LOCATION="TIMLocationElem",s.MSG_FACE="TIMFaceElem",s.MSG_IMAGE="TIMImageElem",s.MSG_AUDIO="TIMSoundElem",s.MSG_FILE="TIMFileElem",s.MSG_VIDEO="TIMVideoFileElem",s.MSG_GRP_TIP="TIMGroupTipElem",s.MSG_GRP_SYS_NOTICE="TIMGroupSystemNoticeElem",s.MSG_MERGER="TIMRelayElem"}(KE||(KE={}));const PD={1:$u.MSG_PRIORITY_HIGH,2:$u.MSG_PRIORITY_NORMAL,3:$u.MSG_PRIORITY_LOW,4:$u.MSG_PRIORITY_LOWEST},xD=0,QR=1;var AE;(function(s){s.IN="in",s.OUT="out"})(AE||(AE={}));const pR=2,tp={};function gu(s){if(!s)return 0;if(tp[s]===void 0){const n=new Date,g=`3${n.getHours()}`.slice(-2),u=`0${n.getMinutes()}`.slice(-2),E=`0${n.getSeconds()}`.slice(-2);tp[s]=parseInt([g,u,E,"0001"].join(""),10),console.log(`autoIncrementIndex start index:${tp[s]}`)}else tp[s]+=1;return tp[s]}class jE{constructor(n){this.ID="",this.random=0,this.sequence=0,this.nameCard="",this.isRead=!1,this.isPeerRead=!1,this.isDeleted=!1,this.isResend=!1,this.hasRiskContent=!1,this._onlineOnlyFlag=!1,this.atUserList=[],this._groupAtInfoList=[],this.isBroadcastMessage=!1,this.priority=$u.MSG_PRIORITY_NORMAL,this._relayFlag=!1;const{clientTime:g=fe.common.timeManager.getServerTimeSeconds()||0,senderTinyID:u,currentUser:E,needReadReceipt:m,isSupportExtension:D,customModerationConfigurationId:M,to:T,from:P,nick:W="",avatar:iA="",time:EA,messageControlInfo:RA,tinyID:kA,cloudCustomData:xA="",messageLifeTime:LA,messageVersion:SA=0,conversationType:OA,sequence:JA,checkResult:ae=0,isPlaceMessage:se=0,messageFlagBits:_i,receiverList:Ti,isSystemMessage:Ft=!1,status:Ni=Yr.SUCCESS,revokeReason:cs="",conversationSubType:Se,clientSequence:mt,protocol:UA="JSON",revokerInfo:ri={userID:"",nick:"",avatar:""},readReceiptInfo:_s={readCount:void 0,unreadCount:void 0,isPeerRead:void 0,timestamp:0},random:Gi,groupProfile:Or,atUserList:xi,flow:gr,isRead:Gt=!1,priority:bt=$u.MSG_PRIORITY_NORMAL,onlineOnlyFlag:tE=!1,nameCard:ln="",quoteInfo:Bo}=n;var Il;this.clientTime=g,this.senderTinyID=u||kA,this.needReadReceipt=m===!0||m===1,this.isSupportExtension=D===!0||D===1,this._cmConfigID=M,this.to=T,this.nick=W,this.avatar=iA,this.protocol=UA,this.random=Gi===void 0?(Il=Il||99999999,Math.round(Math.random()*Il)):Gi,this.time=EA||Math.ceil(Date.now()/1e3),this._isExcludedFromLastMessage=!!RA?.excludedFromLastMessage,this._isExcludedFromUnreadCount=!!RA?.excludedFromUnreadCount,this.isModified=!!SA,this.cloudCustomData=xA,this.messageLifeTime=LA,this.from=P||null,this.sequence=JA||0,this.conversationType=OA||Kr.CONV_C2C,this.hasRiskContent=ae>1,this.version=SA,this.isPlaceMessage=se,this.isRevoked=se===2||_i===8,this.isSystemMessage=Ft,this.readReceiptInfo=_s,this.revokeReason=cs,this.revokerInfo=ri,this._receiverList=Ti,this.conversationSubType=Se,this.revoker=ri?.revoker||"",this.clientSequence=mt||JA||0,this.status=Ni,this.atUserList=xi||[],this.flow=gr,this.isRead=Gt,this.priority=bt,this._onlineOnlyFlag=tE,this.nameCard=ln,this.quoteInfo=Bo,this.reInitialize(E),this._initC2CReadReceiptInfo(n),this._extractGroupInfo(Or)}getElements(){return this._elements}isOnlineMessage(){return this.messageLifeTime===0}setElement(n){Array.isArray(n)?this._elements=n:this._elements=[n],this._updatePayloadAndType()}transformElementsToServerFormat(){return this._elements?Array.isArray(this._elements)?this._elements.map(n=>n.transformToServerFormat()):this._elements.transformToServerFormat():null}setRelayFlag(n){this._relayFlag=n}validateBeforeSend(){var n,g,u;return this._relayFlag?{isValid:!0}:((n=this._elements)===null||n===void 0?void 0:n.length)>0?(u=(g=this._elements[0])===null||g===void 0?void 0:g.validateBeforeSend)===null||u===void 0?void 0:u.call(g):{isValid:!1}}_updatePayloadAndType(){this._elements[0]&&(this.payload=this._elements[0].content,this.type=this._elements[0].type)}_initC2CReadReceiptInfo(n){const{readReceiptSentByPeer:g,timestamp:u=0}=n;this.conversationType===Kr.CONV_C2C&&this.needReadReceipt===!0&&(this.readReceiptInfo.isPeerRead=g===1,this.readReceiptInfo.timestamp=u)}_extractGroupInfo(n){if(!n)return;const{From_AccountNick:g,From_AccountHeadurl:u,MsgFrom_AccountExtraInfo:E,GroupType:m}=n,{NameCard:D}=E||{};typeof g=="string"&&(this.nick=g),typeof u=="string"&&(this.avatar=u),typeof D=="string"&&(this.nameCard=D),this.conversationSubType=m}reInitialize(n){n===this.from&&(this.isRead=!0),this._initSequence(n),this._concatConversationID(n),this.generateMessageID()}_concatConversationID(n){let g="";const u=this.conversationType;u!==Kr.CONV_SYSTEM?(g=u===Kr.CONV_C2C?n===this.from?this.to:this.from:this.to,this.conversationID=g?`${u}${g}`:null):this.conversationID=Kr.CONV_SYSTEM}_initSequence(n){this.clientSequence===0&&n&&(this.clientSequence=gu(n)),this.sequence===0&&this.conversationType===Kr.CONV_C2C&&(this.sequence=this.clientSequence)}generateMessageID(){this.from===Kr.CONV_SYSTEM&&(this.senderTinyID="144115198244471703"),this.ID=`${this.senderTinyID}-${this.clientTime}-${this.random}`}setIsRead(n){this.isRead=n}}class Td{static parseServerPushElement(n){const{MsgContent:g={}}=n,{Data:u,Ext:E,Desc:m}=g;return new Td({data:u,description:m,extension:E})}constructor(n){this.type=KE.MSG_CUSTOM;const{data:g="",description:u="",extension:E=""}=n;this.content={data:g,description:u,extension:E}}transformToServerFormat(n){const{isMergerMessage:g=!1}=n||{},u=g?this.payload:this.content,{data:E,description:m,extension:D}=u;return{MsgType:this.type,MsgContent:{Data:E,Ext:D,Desc:m}}}validateBeforeSend(){const{isEmpty:n}=fe.utils,g=[this.content.data,this.content.description,this.content.extension].some(u=>!n(u));return{isValid:g,error:g?null:{message:"content can not be empty"}}}}class Nd{static parseServerPushElement(n){const{MsgContent:g={Text:""}}=n,{Text:u}=g;return new Nd({text:u})}constructor(n){this.type=wg.MSG_TEXT,this.content={text:n.text||""}}validateBeforeSend(){var n,g;return((g=(n=this.content)===null||n===void 0?void 0:n.text)===null||g===void 0?void 0:g.length)>0?{isValid:!0}:{isValid:!1,error:{message:"content can not be empty"}}}transformToServerFormat(n){const{isMergerMessage:g=!1}=n||{},u=g?this.payload:this.content,{text:E}=u;return{MsgType:this.type,MsgContent:{Text:E}}}}var Wm=new class{constructor(){this._elementClassMap={[KE.MSG_CUSTOM]:Td,[KE.MSG_TEXT]:Nd}}init(){Cr.getInstance().registerApi({apiName:"createCustomMessage",context:this}),Cr.getInstance().registerApi({apiName:"createTextMessage",context:this})}registerElementClass(s,n){var g;(g=n).prototype!==void 0&&"constructor"in g.prototype&&(this._elementClassMap[s]=n)}getElementClass(s){return this._elementClassMap[s]}createMessage(s){const{from:n,flow:g=AE.OUT}=s,{userId:u}=fe.store.get("login")||{};this._isSendByCurrentInstance({from:n,flow:g,currentUser:u})?this._updateWithSenderInfo(s):this._isMultiEndpointSyncMessage({from:n,flow:g,currentUser:u})&&(s.flow=AE.OUT);const E=Object.assign(Object.assign({},s),{currentUser:u});return new jE(E)}createCustomMessage(s){const n=Ar(),g=this.createMessage(Object.assign(Object.assign({},s),{from:n})),u=this._elementClassMap[KE.MSG_CUSTOM];if(!g)return null;if(u){const E=new u(s.payload);g.setElement(E)}return g}createTextMessage(s){var n;if(!s)return null;const g=typeof s.payload=="string"?s.payload:((n=s?.payload)===null||n===void 0?void 0:n.text)||"",u=new Nd({text:g}),E=Ar(),m=fe.message.messageFactory.createMessage(Object.assign(Object.assign({},s),{from:E}));return m.setElement(u),m}_updateWithSenderInfo(s){var n,g;const{nick:u,avatar:E,conversationType:m,to:D}=s,{userId:M,tinyID:T}=fe.store.get("login")||{},P=rc.getUserProfile(M);return s.nick=u||P?.nick||"",s.avatar=E||P?.avatar||"",s.tinyID=s.tinyID||T||"",s.from=M,s.status=Yr.UNSENT,s.flow=AE.OUT,m===ka.CONV_GROUP&&(s.nameCard=(g=(n=Ap.getGroup(D))===null||n===void 0?void 0:n.selfInfo)===null||g===void 0?void 0:g.nameCard),s}_isMultiEndpointSyncMessage(s){const{from:n,flow:g,currentUser:u}=s;return n===u&&g===AE.IN}_isSendByCurrentInstance(s){const{from:n,flow:g,currentUser:u}=s;return n===u&&g===AE.OUT}};const mR={PushFlag:0,Title:"",Desc:"",Ext:"",ApnsInfo:{Sound:"",BadgeMode:0,IsVoipPush:void 0,Image:"",InterruptionLevel:"active",ContentAvailable:0},AndroidInfo:{Sound:"",XiaoMiChannelID:"",OPPOChannelID:"",GoogleChannelID:"",VIVOClassification:1,VIVOCategory:"",HuaWeiCategory:"",OPPOCategory:"",HuaWeiImage:"",HonorImage:"",GoogleImage:"",HonorImportance:"",MeizuNotifyType:void 0}},Gd={HonorImportance:{range:["LOW","NORMAL"],defaultValue:void 0},MeizuNotifyType:{range:[0,1],defaultValue:void 0}},YD={enableIOSBackgroundNotification:{range:[!0,!1],defaultValue:!1},interruptionLevel:{range:["passive","active","time-sensitive","critical"],defaultValue:"active"}};function fR(s,n){return Object.keys(n).forEach(g=>{const{range:u,defaultValue:E}=n[g];s[g]=u.includes(s[g])?s[g]:E}),s}function ip(s){const n=s.lastIndexOf(".");return n===-1?s:s.slice(0,n)}function yR(s){const{androidInfo:n={},androidOPPOChannelID:g=""}=s,u=n.OPPOChannelID||g,E=fR(n,Gd),{sound:m="",FCMChannelID:D=""}=E,M=Do(E,["sound","FCMChannelID"]);return Object.assign(Object.assign({},M),{Sound:ip(m),OPPOChannelID:u,GoogleChannelID:D})}function DR(s){const{apnsInfo:n={},ignoreIOSBadge:g=!1,disableVoipPush:u}=s,E=fR(n,YD),{ignoreIOSBadge:m,disableVoipPush:D,enableIOSBackgroundNotification:M}=E,T=Do(E,["ignoreIOSBadge","disableVoipPush","enableIOSBackgroundNotification"]),P=m===!0||g===!0?1:0;let W;return r(u)||(W=u===!1?1:0),r(D)||(W=D===!1?1:0),Object.assign(Object.assign({},T),{BadgeMode:P,IsVoipPush:W,ContentAvailable:M?1:0})}function VD(s){return fe.utils.isPlainObject(s)?{PushFlag:s.disablePush===!0?1:0,Title:s.title||"",Desc:s.description||"",Ext:s.extension||"",ApnsInfo:DR(s),AndroidInfo:yR(s)}:mR}function zm(s){const{From_AccountHeadurl:n,From_AccountNick:g,IsNeedReadReceipt:u,IsPeerRead:E,IsSyncMsg:m,MsgBody:D,MsgClientTime:M,MsgLifeTime:T,MsgRandom:P,MsgSeq:W,MsgTimeStamp:iA,SendMsgControl:EA,SupportMessageExtension:RA,TinyId:kA,MsgCheckResult:xA,CloudCustomData:LA,MsgVersion:SA,MsgFlagBits:OA,RevokerInfo:JA,InnerSdkCustomData:ae}=s;let se,{From_Account:_i,To_Account:Ti}=s;if(m===1){const Ft=Ti;Ti=_i,_i=Ft}if(JA){const{Reason:Ft,Revoker_Account:Ni,Revoker_FromUin:cs}=JA;se={reason:Ft,revoker:Ni,revokerFromUin:cs,userID:Ni}}return{from:_i,avatar:n,nick:g,needReadReceipt:u===1,isSyncMessage:m,clientTime:M,messageLifeTime:T,random:P,sequence:W,time:iA,messageControlInfo:{excludedFromLastMessage:EA?.NoLastMsg===1,excludedFromUnreadCount:EA?.NoUnread===1},isSupportExtension:RA,to:Ti,tinyID:kA,checkResult:xA,cloudCustomData:LA,revokerInfo:se,messageVersion:SA,messageFlagBits:OA,readReceiptSentByPeer:E,elements:RC(D),onlineOnlyFlag:T===0,quoteInfo:op(ae)}}function Zm(s){const{From_Account:n,MsgBody:g,MsgClientTime:u,MsgRandom:E,MsgSeq:m,MsgTimeStamp:D,To_Account:M,MsgVersion:T,CloudCustomData:P,MsgCheckResult:W}=s;return{from:n,clientTime:u,random:E,sequence:m,time:D,to:M,elements:RC(g),messageVersion:T,cloudCustomData:P,checkResult:W}}function JD(s){const{ClientSeq:n,From_Account:g,GroupInfo:u,MsgBody:E,MsgClientTime:m,MsgRandom:D,MsgSeq:M,MsgTimeStamp:T,SendMsgControl:P,SupportMessageExtension:W,TinyId:iA,CloudCustomData:EA,MsgVersion:RA,MsgCheckResult:kA,NeedReadReceipt:xA,IsPlaceMsg:LA,RevokerInfo:SA,GroupAtInfo:OA,OnlineOnlyFlag:JA,InnerSdkCustomData:ae}=s;let se,_i=$u.MSG_PRIORITY_NORMAL;if(Object.keys(PD).includes(String(s.MsgPriority))&&(_i=PD[s.MsgPriority]),SA){const{Reason:Ft,Revoker_Account:Ni,Revoker_FromUin:cs}=SA;se={reason:Ft,revoker:Ni,revokerFromUin:cs,userID:Ni}}const Ti=function(Ft){const Ni=[];return Array.isArray(Ft)&&Ft.forEach(cs=>{cs.GroupAtAllFlag===xD?Ni.push(cs.GroupAt_Account):cs.GroupAtAllFlag===QR&&Ni.push(Lo.MSG_AT_ALL)}),Ni}(OA);return{clientSequence:n,from:g,groupProfile:u,clientTime:m,priority:_i,random:D,sequence:M,time:T,messageControlInfo:{excludedFromLastMessage:P?.NoLastMsg===1,excludedFromUnreadCount:P?.NoUnread===1},isSupportExtension:W,tinyID:iA,cloudCustomData:EA,messageVersion:RA,checkResult:kA,needReadReceipt:xA,isPlaceMessage:LA,revokerInfo:se,atUserList:Ti,elements:RC(E),to:KT(s),onlineOnlyFlag:JA===1,quoteInfo:op(ae)}}function KT(s){const{utils:{isEmpty:n},constants:{IS_TOPIC_MESSAGE:g}}=fe,{ToGroupId:u,GroupInfo:{MillionGroupFlag:E=0,TopicId:m}={}}=s;return E!==g||n(m)?u:m}function RC(s){if(!s)return null;if(Array.isArray(s))return s.map(g=>{const u=fe.message.messageFactory.getElementClass(g.MsgType);return u?.parseServerPushElement(g)});const n=fe.message.messageFactory.getElementClass(s.MsgType);return n?.parseServerPushElement(s)}function HD(s){const{From_Account:n,MsgBody:g,MsgClientTime:u,MsgRandom:E,MsgSeq:m,MsgTimeStamp:D,GroupId:M,TopicId:T,MsgVersion:P,CloudCustomData:W,MsgCheckResult:iA}=s;return{from:n,clientTime:u,random:E,sequence:m,time:D,groupID:M,topicID:T,elements:RC(g),messageVersion:P,cloudCustomData:W,checkResult:iA}}function op(s){const{utils:{isString:n,safeStringify:g},ssoLog:u}=fe;if(!n(s))return null;try{const{messageID:E,messageTime:m,messageSequence:D}=JSON.parse(s).businessQuote;return{msgID:E,messageTime:m,messageSequence:D}}catch(E){return u.debug("_parseServerQuoteInfo",g(E)),null}}function sp({conversationUpdateFields:s,message:n}){const{conversationID:g,conversationType:u,conversationSubType:E,flow:m,_isExcludedFromUnreadCount:D,_isExcludedFromLastMessage:M}=n,T=M?"":XQ(n),P=!D&&m===AE.IN;s.has(g)?(s.get(g).lastMessage=T,P&&s.get(g).unreadCount++):s.set(g,{conversationID:g,type:u,subType:E,unreadCount:P?1:0,lastMessage:T})}function vB(s){return s.filter(n=>{const g=!Rs(n?._elements),u=n?.isPlaceMessage===1;return g||fe.ssoLog.error("emptyMessageBody",`from:${n.from} to:${n.to} sequence:${n.sequence}`),g&&!u})}function RB(s){const{messageDataHandler:n}=fe.message;return!n.isInMessageList(s)&&!n.isMessageSentByCurrentInstance(s)}var SR=Object.freeze({__proto__:null,autoIncrementIndex:gu,createAndroidPushInfo:yR,createApnsPushInfo:DR,createOfflinePushInfo:VD,filterValidMessages:vB,getAndroidSoundName:ip,parseServerGroupMessage:JD,parseServerPushC2CModifyMessage:Zm,parseServerPushGroupModifyMessage:HD,parseServerPushMessage:zm,parseServerPushMessageElement:RC,shouldStoreMessage:RB,updateConversationFields:sp});const{isPlainObject:MR}=fe.utils;function np(s,n={}){const{onlineUserOnly:g,messageControlInfo:u}=n;let{offlinePushInfo:E}=n;s.conversationType===Kr.CONV_C2C&&g===!0&&(E?E.disablePush=!0:E={disablePush:!0});let m="";typeof s.cloudCustomData=="string"&&s.cloudCustomData.length>0&&(m=s.cloudCustomData);const D=[];if(u&&MR(u)){const{excludedFromUnreadCount:M,excludedFromLastMessage:T,excludedFromContentModeration:P}=u;M===!0&&D.push("NoUnread"),T===!0&&D.push("NoLastMsg"),P===!0&&D.push("NoMsgCheck")}return{onlineUserOnly:g,cloudCustomData:m,messageControlInfo:D,offlinePushInfo:E}}function qD(s){const{webhookInfo:{disableCloudMessagePreHook:n=!1,disableCloudMessagePostHook:g=!1}={}}=s||{};if(!n&&!g)return;const u=[];return n&&u.push("ForbidBeforeSendMsgCallback"),g&&u.push("ForbidAfterSendMsgCallback"),u}function wh(s,n){return pA(this,void 0,void 0,function*(){const g=s.conversationType===Kr.CONV_GROUP?function(E,m){var D;const M=np(E,m),{onlineUserOnly:T,cloudCustomData:P,messageControlInfo:W,offlinePushInfo:iA}=M,EA=JSON.parse(JSON.stringify(E.transformElementsToServerFormat()));let RA;return h(E._receiverList)&&E._receiverList.length>0&&(RA=E._receiverList,E._receiverList.length>50&&(RA=E._receiverList.slice(0,50),console.warn("ReceiverListLimit"))),{servcmd:"group_open_http_svc.send_group_msg",data:{From_Account:(D=fe.store.get("login"))===null||D===void 0?void 0:D.userId,GroupId:E.to,MsgBody:EA,CloudCustomData:P,Random:E.random,MsgPriority:E.priority,ClientSeq:E.clientSequence,GroupAtInfo:E._groupAtInfoList,OnlineOnlyFlag:T?1:0,MsgClientTime:E.clientTime,OfflinePushInfo:VD(iA),SendMsgControl:T?void 0:W,NeedReadReceipt:E.needReadReceipt===!0?1:0,To_Account:RA,SupportMessageExtension:E.isSupportExtension===!0?1:0,IsRelayMsg:E._relayFlag===!0?1:0,CustomModerationConfigID:E._cmConfigID,ForbidCallbackControl:qD(m),InnerSdkCustomData:_B(E)}}}(s,n):function(E,m){var D;const M=np(E,m),{onlineUserOnly:T,cloudCustomData:P,messageControlInfo:W,offlinePushInfo:iA}=M,EA=T===!0?0:void 0,RA=JSON.parse(JSON.stringify(E.transformElementsToServerFormat()));return{servcmd:"openim.sendmsg",data:{From_Account:(D=fe.store.get("login"))===null||D===void 0?void 0:D.userId,To_Account:E.to,MsgBody:RA,CloudCustomData:P,MsgSeq:E.sequence,MsgRandom:E.random,MsgLifeTime:EA,From_AccountNick:E.nick,From_AccountHeadurl:E.avatar,SendMsgControl:EA!==0?W:void 0,MsgClientTime:E.clientTime,IsNeedReadReceipt:E.needReadReceipt===!0?1:0,SupportMessageExtension:E.isSupportExtension===!0?1:0,IsRelayMsg:E._relayFlag===!0?1:0,CustomModerationConfigID:E._cmConfigID,OfflinePushInfo:VD(iA),ForbidCallbackControl:qD(m),InnerSdkCustomData:_B(E)}}}(s,n),u=yield gg(g);return u?{time:u.MsgTime,messageDropReason:u.MsgDropReason,sequence:u.MsgSeq}:null})}function _h(s){return pA(this,void 0,void 0,function*(){const{from:n,to:g,version:u=0,sequence:E,random:m,time:D,type:M,cloudCustomData:T}=s,P={From_Account:n,To_Account:g,MsgVersion:u,MsgSeq:E,MsgRandom:m,MsgTime:D,MsgType:M,MsgBody:s.transformElementsToServerFormat(),CloudCustomData:T},W=yield gg({servcmd:"openim.modify_c2c_msg",data:P});if(W){const{MsgBody:iA,MsgVersion:EA,CloudCustomData:RA}=W;return{elements:RC(iA),messageVersion:EA,cloudCustomData:RA}}})}function wB(s){return pA(this,void 0,void 0,function*(){const{to:n,version:g=0,sequence:u,cloudCustomData:E}=s,m={GroupId:n,MsgVersion:g,MsgSeq:u,MsgBody:s.transformElementsToServerFormat(),CloudCustomData:E},D=yield gg({servcmd:"openim.modify_group_msg",data:m});if(D){const{MsgBody:M,MsgVersion:T,CloudCustomData:P}=D;return{elements:RC(M),messageVersion:T,cloudCustomData:P}}})}function Th(s){return pA(this,void 0,void 0,function*(){const{groupID:n,count:g,messageSequence:u,messageSequenceList:E,getType:m}=s,D={GroupId:n,ReqMsgNumber:g,WithRecalledMsg:1,Version:1,GetType:m};return u&&(D.ReqMsgSeq=u),h(E)&&E.length>0&&(D.ReqMsgSeqList=E),yield gg({servcmd:"group_open_http_svc.group_msg_get",data:D})})}function Xm(s){return pA(this,void 0,void 0,function*(){const{peerAccount:n,count:g,lastMessageTime:u,messageKey:E,direction:m}=s;return gg({servcmd:"openim.getroammsg",data:{Peer_Account:n,MaxCnt:g,WithRecalledMsg:1,LastMsgTime:u,MsgKey:E,GetDirection:m}})})}function _B(s){if(fe.utils.isObject(s.quoteInfo)){const{msgID:n,messageSequence:g,messageTime:u}=s.quoteInfo;return JSON.stringify({businessQuote:{messageID:n,messageSequence:g,messageTime:u}})}}var KD=Object.freeze({__proto__:null,createMessagePackOptions:np,generateForbidCallbackControl:qD,getC2CRoamingMessagesByAnchor:Xm,getGroupRoamingMessagesByAnchor:Th,getRoamingMessages:function(s){return pA(this,void 0,void 0,function*(){const{peerAccount:n,count:g,lastMessageTime:u,messageKey:E}=s;return(yield gg({servcmd:"openim.getroammsg",data:{Peer_Account:n,MaxCnt:g||15,LastMsgTime:u||0,MsgKey:E,GetDirection:0,WithRecalledMsg:1}}))||[]})},modifyC2CMessage:_h,modifyGroupMessage:wB,sendMessage:wh});const{isPlainObject:jT}=fe.utils,{MSG_AUDIO:jD,MSG_FILE:WD,MSG_IMAGE:vR,MSG_VIDEO:RR,MSG_MERGER:wR}=Lo;class $m{constructor(){this._sendProtocolMap=new Map}init(){Cr.getInstance().registerApi({apiName:"sendMessage",context:this,matcher:n=>![jD,WD,vR,RR,wR].includes(n[0].type)})}registerSendProtocol(n,g,u){this._sendProtocolMap.set(n,g.bind(u))}sendMessage(n,g){return pA(this,void 0,void 0,function*(){const{TOTAL_COUNT:u,SEND_COST:E,SUCCESS_COUNT:m,FAILED_COUNT:D}=rr;if(!(n instanceof jE))throw new gs({code:da.MSG_INSTANCE_REQUIRED});const M=n.validateBeforeSend();if(!M.isValid){const{code:W,message:iA=""}=M.error||{};throw new gs({code:W,message:iA})}this._reportMessageSendQuality({name:u,message:n});let T=!1;const{messageDataHandler:P}=fe.message||{};try{const{messageControlInfo:W}=g||{};let iA=null;P.addRandomOfSentMessage(n.random);const EA=Date.now(),RA=this._getSendProtocol(n);if(n.conversationType===Kr.CONV_C2C?(T=g?.onlineUserOnly===!0,iA=yield RA(n,g)):n.conversationType===Kr.CONV_GROUP&&(yield this._validateBeforeSendGroupMessage(n),iA=yield RA(n,g)),iA){const{messageDropReason:kA,sequence:xA,time:LA}=iA;if(this._updateNickAndAvatarOfSentMessageByMe(n),kA&&this._logRateLimitInfo(n,xA,kA),this._reportMessageSendQuality({name:m,message:n}),this._reportMessageSendQuality({name:E,message:n,startTs:EA}),n.isResend===!0){const SA=P.findMessage(n.ID);SA&&(fe.ssoLog.debug("sendMessage",`sendMessage resend ok. ID:${SA.ID}`),P.deleteConversationMessage(SA))}return n.status=Yr.SUCCESS,n.time=LA,n.conversationType===Kr.CONV_GROUP&&(n.sequence=xA),T?n._onlineOnlyFlag=!0:(P.storeConversationMessage(n),this._applySentMessageControlInfo(n,W),this._emitOnlineMessageSent(n)),n.type===wg.MSG_STREAM?{code:0,data:{message:n,streamMessageID:iA.streamMessageID}}:{code:0,data:{message:n}}}}catch(W){n.status=Yr.FAIL,P.removeRandomOfSentMessage(n.random);let{errorCode:iA}=W||{},EA=W?.errorInfo||W?.message||"";throw this._hasRiskContent(iA)&&(n.hasRiskContent=!0),T||this._isRejectedByRestApi(iA)||P.storeConversationMessage(n),this._reportMessageSendQuality({name:D,message:n,error:W}),new gs({code:iA,message:EA,data:{message:n},moreMessage:`type:${n.type} from:${n.from} to:${n.to}`})}})}_hasRiskContent(n){return n===80001||n===80004}_isRejectedByRestApi(n){return n>=10100&&n<=10200||n>=120001&&n<=13e4}_emitOnlineMessageSent(n){const g=n._isExcludedFromLastMessage?"":n,{conversationID:u,conversationType:E}=n,m=zc(u)?no.TOPIC_NEW_MESSAGE:no.NEW_MESSAGE;fe.notificationCenter.emitInnerEvent(m,{result:{conversationUpdateFieldList:[{conversationID:u,type:E,message:n,lastMessage:g,unreadCount:0}]}})}_applySentMessageControlInfo(n,g){g&&jT(g)&&(g.excludedFromLastMessage===!0&&(n._isExcludedFromLastMessage=!0),g.excludedFromUnreadCount===!0&&(n._isExcludedFromUnreadCount=!0))}_logRateLimitInfo(n,g,u){const E=`from:${n.from} to:${n.to} sequence:${g} messageDropReason:${u}`;fe.ssoLog.warn("messageDropReason",E)}_updateNickAndAvatarOfSentMessageByMe(n){const{messageDataHandler:g}=fe.message||{};let u=!1;const{conversationID:E}=n,m=g.getLatestMsgSentByMe(E);if(m){const{nick:D,avatar:M}=m;D===n.nick&&M===n.avatar||(u=!0),u&&g.updateNickAndAvatarOfSentMessage({conversationID:E,latestNick:n.nick,latestAvatar:n.avatar,isSentByMe:!0})}}_validateBeforeSendGroupMessage(n){return pA(this,void 0,void 0,function*(){var g,u,E;const{to:m,from:D}=n;let M=m,T=Ap.getGroup(M);if(Xr({groupID:M})&&T?.isSupportTopic)throw new gs({code:da.MSG_SEND_GRP_WITH_TOPIC_FAIL});if(zc(m)&&([M]=m.split(sa.TOPIC),T=Ap.getGroup(M)),!T&&typeof((g=Cr.getInstance().getApiMap())===null||g===void 0?void 0:g.getGroupProfile)=="function"){const P=yield Cr.getInstance().getApiMap().getGroupProfile({groupID:M});if(((E=(u=P?.data)===null||u===void 0?void 0:u.group)===null||E===void 0?void 0:E.type)===Lo.GRP_AVCHATROOM){const W=rs({code:da.MSG_SEND_FAIL_NOT_IN_AV,replacement1:D,replacement2:M});throw new gs({code:da.MSG_SEND_FAIL_NOT_IN_AV,message:W})}}return!0})}_reportMessageSendQuality(n){fe.notificationCenter.emitInnerEvent(no.QUALITY_STAT,{label:cI.MESSAGE_SEND_SUCCESS_RATE,data:n})}_getSendProtocol(n){return this._sendProtocolMap.get(n.type)||wh}}var WT=new class{constructor(){this._sparseMessagesByConversation=new Map,this._latestMessageSentByPeerMap=new Map,this._latestMessageSentByMeMap=new Map,this._randomOfSentMessageList=new Set}init(){fe.notificationCenter.subscribeInnerEvent(no.LOGOUT,this._reset,this),fe.notificationCenter.subscribeInnerEvent(no.DESTROY,this._dispose,this)}get _messagesByConversation(){return ep.getMessages()}storeConversationMessage(s,n=!1){if(an)return!0;const{conversationID:g}=s;if(!g||(this._messagesByConversation.has(g)||this._messagesByConversation.set(g,new Map),this._shouldSkipStoreMessage(s,n)))return!1;const u=this._getUniqueIdOfMessage(s);return this._messagesByConversation.get(g).set(u,s),this._updateLatestMessageMap(s),!0}_updateLatestMessageMap(s){const{conversationID:n}=s;s.flow==="out"?this._setLatestMsgSentByMe(n,s):n.startsWith("C2C")&&this._setLatestMsgSentByPeer(n,s)}_shouldSkipStoreMessage(s,n){const g=this._getUniqueIdOfMessage(s),u=this._messagesByConversation.get(s.conversationID);if(u?.has(g)){const E=u?.get(g);if(!n||E?.isModified===!0)return!0}return!1}deleteConversationMessage(s){var n;const{conversationID:g=""}=s,u=this._getUniqueIdOfMessage(s);this._messagesByConversation.has(g)&&((n=this._messagesByConversation.get(g))===null||n===void 0||n.delete(u))}modifyConversationMessage(s,n){var g;if(!this._messagesByConversation.has(s)&&!this._sparseMessagesByConversation.has(s))return{isUpdated:!1,message:null};const u=this._getUniqueIdOfMessage(n),E=this._getMessageFromLocalMessage(s,u);if(E){const{messageVersion:m,elements:D,cloudCustomData:M,checkResult:T=0}=n,P=T>1;if(fe.ssoLog.debug("modifyConversationMessage",`conversationToMessageMap modifyConversationMessage localVersion:${E.version} remoteVersion:${m}`),E.versionE.ID===s)||null,n)break;if(!n){const u=Array.from(this._sparseMessagesByConversation.values());for(const E of u)if(n=E.get(s)||null,n)break}return n}deleteConversationMessageList(s){this._messagesByConversation.has(s)&&(this._messagesByConversation.delete(s),this._latestMessageSentByMeMap.delete(s),this._latestMessageSentByPeerMap.delete(s)),this._sparseMessagesByConversation.has(s)&&this._sparseMessagesByConversation.delete(s)}revokeMessage({conversationID:s,sequence:n,random:g,revoker:u}){const E=this._messagesByConversation.get(s);let m=null;if(E){const D=Array.from(E.values());if(m=this._findMessageBySequenceAndRandom({messageList:D,random:g,sequence:n}),m){const M=this._getUniqueIdOfMessage(m);return ep.updateMessage(s,[M],{isRevoked:!0,revoker:u,operation:yc.revoke}),m}}if(this._sparseMessagesByConversation.has(s)){const D=Array.from(this._sparseMessagesByConversation.get(s).values());if(m=this._findMessageBySequenceAndRandom({messageList:D,random:g,sequence:n}),m)return m.isRevoked=!0,m.revoker=u,m}}_findMessageBySequenceAndRandom({messageList:s,sequence:n,random:g}){for(let u=0;u0){const D=new Map([...E,...m.entries()]);this._messagesByConversation.set(g,D),this._updateLatestMessageSentByMe(g),this._updateLatestMessageSentByPeer(g)}return u}storeSparseMessageList(s){if(s.length===0)return;const{conversationID:n}=s[0],g=s.length;this._sparseMessagesByConversation.has(n)||this._sparseMessagesByConversation.set(n,new Map);const u=this._sparseMessagesByConversation.get(n);for(let E=0;E=0;u--)if(g[u].flow==="out"){this._setLatestMsgSentByMe(s,g[u]);break}}}_updateLatestMessageSentByPeer(s){var n;const g=Array.from(((n=this._messagesByConversation.get(s))===null||n===void 0?void 0:n.values())||[]);if(g.length!==0&&s.startsWith("C2C")){for(let u=g.length-1;u>=0;u--)if(g[u].flow==="in"){this._setLatestMsgSentByPeer(s,g[u]);break}}}_getUniqueIdOfMessage(s){const{from:n,to:g,random:u,sequence:E,time:m}=s;return`${n}-${g}-${u}-${E}-${m}`}_setLatestMsgSentByPeer(s,n){this._latestMessageSentByPeerMap.set(s,n)}_setLatestMsgSentByMe(s,n){this._latestMessageSentByMeMap.set(s,n)}getLatestMsgSentByPeer(s){return this._latestMessageSentByPeerMap.get(s)}getLatestMsgSentByMe(s){return this._latestMessageSentByMeMap.get(s)}addRandomOfSentMessage(s){this._randomOfSentMessageList.add(s)}removeRandomOfSentMessage(s){this._randomOfSentMessageList.delete(s)}updateNickAndAvatarOfSentMessage(s){const{conversationID:n="",latestAvatar:g,latestNick:u,isSentByMe:E=!0}=s,m=this._messagesByConversation.get(n);if(!m)return;const D=Array.from(m.values()),M=E?"out":"in";D.forEach(T=>{const{nick:P,avatar:W,flow:iA}=T;iA===M&&(P!==u&&(T.nick=u),W!==g&&(T.avatar=g))})}isInMessageList(s){var n;const{conversationID:g}=s;if(!g||!this._messagesByConversation.has(g))return!1;const u=this._getUniqueIdOfMessage(s);return(n=this._messagesByConversation.get(g))===null||n===void 0?void 0:n.has(u)}isMessageSentByCurrentInstance(s){const{random:n}=s;return this._randomOfSentMessageList.has(n)}getContinuousMessagesByConversation(){return this._messagesByConversation}getLocalMessageList(s){const n=this._messagesByConversation.get(s);return n?[...n.values()]:[]}getSparseMessageList(s){const n=this._sparseMessagesByConversation.get(s);return n?[...n.values()]:[]}_reset(){this._messagesByConversation.clear(),this._latestMessageSentByPeerMap.clear(),this._latestMessageSentByMeMap.clear(),this._randomOfSentMessageList.clear()}_dispose(){this._reset(),fe.notificationCenter.unSubscribeInnerEvent(no.LOGOUT,this._reset,this),fe.notificationCenter.unSubscribeInnerEvent(no.DESTROY,this._dispose,this)}};function Af(s,n){const g=MB.getConversation(s);if(g?.lastMessage){const{lastMessage:u}=g,{lastTime:E,lastSequence:m,version:D}=u,{time:M,sequence:T,messageVersion:P,elements:W,cloudCustomData:iA}=n;E===M&&m===T&&D!==P&&(u.type=W[0].type,u.payload=W[0].content,u.messageForShow=Zc(u.type,u.payload),u.cloudCustomData=iA,u.version=P,MB.updateConversation(s,{lastMessage:u}))}}class _R{init(){Cr.getInstance().registerApi({apiName:"modifyMessage",context:this})}modifyMessage(n){return pA(this,void 0,void 0,function*(){const{to:g,payload:u,sequence:E,conversationType:m,random:D,time:M,from:T,type:P}=n;if(this._canModifyMessageElement(P)){const W=n?._elements||[];W.length>=1&&(W[0].type=P,W[0].content=u)}try{let W=null,iA=null;if(m===Kr.CONV_C2C?W=yield _h(n):m===Kr.CONV_GROUP&&(W=yield wB(n)),W){let EA=`${m}${g}`;return g===Ar()&&m===Kr.CONV_C2C&&(EA=`${m}${T}`),iA={conversationType:m,from:T,to:g,time:M,random:D,sequence:E,elements:W?.elements,cloudCustomData:W?.cloudCustomData,messageVersion:W?.messageVersion,conversationID:EA},this._handleModifyMessageSuccess(iA),{code:0,data:{message:n},successLog:{message:`to:${g}`}}}}catch(W){const{errorCode:iA}=W||{};throw new gs({functionName:"modifyMessage",code:iA,moreMessage:`to:${g}`})}})}_handleModifyMessageSuccess(n){const{conversationID:g}=n,{isUpdated:u,message:E}=fe.message.messageDataHandler.modifyConversationMessage(g,n);u===!0&&fe.notificationCenter.emitOuterEvent(Dr.MESSAGE_MODIFIED,{name:Dr.MESSAGE_MODIFIED,data:[E]}),fe.notificationCenter.emitInnerEvent(no.MESSAGE_MODIFIED,{conversationID:g,message:E}),Af(g,n)}_canModifyMessageElement(n){return[KE.MSG_TEXT,KE.MSG_CUSTOM,KE.MSG_LOCATION,KE.MSG_FACE].includes(n)}}class Nh{init(){const{notificationCenter:n}=fe,{InnerEventSubType:g}=n;ws.getInstance().registerWorkflowStep(Vt.RECEIVE_C2C_NEW_MESSAGE,Kt.HANDLE_C2C_NEW_MESSAGE,this._handleC2CMessagePush,this),ws.getInstance().registerWorkflowStep(Vt.RECEIVE_C2C_NEW_MESSAGE,Kt.EMIT_C2C_MESSAGE_EVENT,this._emitMessageEventsAfterReceiveNewMessage,this),ws.getInstance().registerWorkflowStep(Vt.SYNC_SERVER_INFO_AFTER_RE_ONLINE,Kt.EMIT_C2C_MESSAGE_EVENT,this._emitMessageEventsAfterSyncUnreadMessage,this),n.subscribeInnerEvent(no.MESSAGE_PUSH,g.C2C_REALTIME_MESSAGE,this._executeReceiverNewMessageWorkFlow,this),n.subscribeInnerEvent(no.MESSAGE_PUSH,g.C2C_MESSAGE_MODIFIED,this._handleC2CMessageModify,this),n.subscribeInnerEvent(no.DESTROY,this._dispose,this)}_executeReceiverNewMessageWorkFlow(n){ws.getInstance().executeWorkflow(Vt.RECEIVE_C2C_NEW_MESSAGE,n)}_handleC2CMessagePush(n){const g=n.data||{},{messageDataHandler:u}=fe.message||{},E=[],m=new Map;return g.C2cMsgArray.forEach(D=>{const M=this._generateC2CMessage(D);this._updateMessageProfile(M);let T=M.isModified===1;u.isMessageSentByCurrentInstance(M)?M.isModified=T:T=!1,M._onlineOnlyFlag?u.isMessageSentByCurrentInstance(M)||E.push(M):RB(M)&&(u.storeConversationMessage(M)&&sp({conversationUpdateFields:m,message:M}),u.isMessageSentByCurrentInstance(M)&&!T||E.push(M))}),{conversationUpdateFieldList:[...m.values()],messages:E}}_emitMessageEventsAfterReceiveNewMessage(n){var g;const{messages:u=[]}=((g=n.result)===null||g===void 0?void 0:g[Kt.HANDLE_C2C_NEW_MESSAGE])||{};this._emitMessageEvents(u)}_emitMessageEventsAfterSyncUnreadMessage(n){var g;const{messages:u=[]}=((g=n.result)===null||g===void 0?void 0:g[Kt.UNREAD_MESSAGE_SYNC])||{};this._emitMessageEvents(u)}_emitMessageEvents(n){const g=n?.filter(E=>E?.isModified===!0)||[];g.length>0&&fe.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:g});const u=n?.filter(E=>!E?.isModified);u.length>0&&fe.notificationCenter.emitOuterEvent("onMessageReceived",{name:"onMessageReceived",data:u})}_generateC2CMessage(n){const g=Kr.CONV_C2C,u=zm(n),E=fe.message.messageFactory.createMessage(Object.assign(Object.assign({},u),{conversationType:g,flow:AE.IN})),{elements:m}=u;return E.setElement(m),E}_updateMessageProfile(n){var g;const{messageDataHandler:u}=fe.message||{},E=(g=fe.store.get("login"))===null||g===void 0?void 0:g.userId,{from:m,nick:D,avatar:M,conversationID:T=""}=n;if(m!==E){const P=u.getLatestMsgSentByPeer(T);if(P){const{nick:W,avatar:iA}=P;r(D)||r(M)?(n.nick=l(W)?W:n.nick,n.avatar=l(iA)?iA:n.avatar):D===W&&M===iA||(u.updateNickAndAvatarOfSentMessage({conversationID:T,latestNick:D,latestAvatar:M,isSentByMe:!1}),this._updateConversationUserProfile({conversationID:T,nick:D,avatar:M}))}}else{const P=u.getLatestMsgSentByMe(T);!P||D===P.nick&&M===P.avatar||u.updateNickAndAvatarOfSentMessage({conversationID:T,latestNick:D,latestAvatar:M,isSentByMe:!0})}}_updateConversationUserProfile(n){const{conversationID:g,nick:u,avatar:E}=n,m=MB.getConversation(g),{userProfile:D={}}=m||{};D.avatar===E&&D.nick===u||MB.updateConversation(g,{userProfile:Object.assign(Object.assign({},D),{nick:u,avatar:E})})}_updateMessageListDueToModify(n){const{conversationID:g}=n,{isUpdated:u,message:E}=fe.message.messageDataHandler.modifyConversationMessage(g,n);u===!0&&fe.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:[E]}),fe.notificationCenter.emitInnerEvent("ModifyMessageSuccess",n),Af(g,n)}_handleC2CMessageModify(n){n.C2cMsgModNotifys.forEach(g=>{var u;const E=Kr.CONV_C2C;let m=Zm(g);const{to:D,from:M}=m;let T=`${E}${D}`;D===((u=fe.store.get("login"))===null||u===void 0?void 0:u.userId)&&(T=`${E}${M}`),m=Object.assign({conversationType:E,conversationID:T},m),this._updateMessageListDueToModify(m)})}_dispose(){const{notificationCenter:n}=fe,{InnerEventSubType:g}=n;fe.notificationCenter.unSubscribeInnerEvent(no.MESSAGE_PUSH,g.C2C_REALTIME_MESSAGE,this._handleC2CMessagePush,this),fe.notificationCenter.unSubscribeInnerEvent(no.MESSAGE_PUSH,g.C2C_MESSAGE_MODIFIED,this._handleC2CMessageModify,this),fe.notificationCenter.unSubscribeInnerEvent(no.DESTROY,this._dispose,this)}}class Gh{init(){const{notificationCenter:n}=fe,{InnerEventSubType:g}=n;ws.getInstance().registerWorkflowStep(Vt.RECEIVE_GROUP_NEW_MESSAGE,Kt.HANDLE_GROUP_NEW_MESSAGE,this._handleGroupMessagePush,this),ws.getInstance().registerWorkflowStep(Vt.RECEIVE_GROUP_NEW_MESSAGE,Kt.EMIT_GROUP_MESSAGE_EVENT,this._emitMessageEvents,this),n.subscribeInnerEvent(no.MESSAGE_PUSH,g.GROUP_REALTIME_MESSAGE,this._executeReceiverNewMessageWorkFlow,this),n.subscribeInnerEvent(no.MESSAGE_PUSH,g.GROUP_MESSAGE_MODIFIED,this._handleGroupMessageModify,this),n.subscribeInnerEvent(no.DESTROY,this._dispose,this)}_executeReceiverNewMessageWorkFlow(n){this._canExecuteReceiverNewMessageWorkFlow(n)&&ws.getInstance().executeWorkflow(Vt.RECEIVE_GROUP_NEW_MESSAGE,n)}_handleGroupMessagePush(n){const g=n.data||{},{messageDataHandler:u}=fe.message,E=[],m=new Map,D=g?.GroupMsgArray;return D?.forEach(M=>{if(M.GroupInfo.NotVisible===1)return;const T=this._generateGroupMessage(M);this.updateMessageProfile(T);let P=T.isModified===1;u.isMessageSentByCurrentInstance(T)?T.isModified=P:P=!1,T._onlineOnlyFlag?u.isMessageSentByCurrentInstance(T)||E.push(T):RB(T)&&u.storeConversationMessage(T)&&(E.push(T),sp({conversationUpdateFields:m,message:T}))}),{conversationUpdateFieldList:[...m.values()],messages:E}}_emitMessageEvents(n){var g;const{messages:u}=((g=n.result)===null||g===void 0?void 0:g[Kt.HANDLE_GROUP_NEW_MESSAGE])||{},E=u?.filter(D=>D?.isModified===!0)||[];E.length>0&&fe.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:E});const m=u?.filter(D=>!D?.isModified)||[];m.length>0&&fe.notificationCenter.emitOuterEvent("onMessageReceived",{name:"onMessageReceived",data:m})}_generateGroupMessage(n){const g=Kr.CONV_GROUP,u=JD(n),E=fe.message.messageFactory.createMessage(Object.assign(Object.assign({},u),{conversationType:g,flow:AE.IN})),{elements:m}=u;return E.setElement(m),E}updateMessageProfile(n){var g;const{messageDataHandler:u}=fe.message||{},E=(g=fe.store.get("login"))===null||g===void 0?void 0:g.userId,{from:m,nick:D,avatar:M,conversationID:T="",_elements:P}=n;if(m===E){const W=u.getLatestMsgSentByMe(T);!W||D===W.nick&&M===W.avatar||u.updateNickAndAvatarOfSentMessage({conversationID:T,latestNick:D,latestAvatar:M,isSentByMe:!0})}else if(m===Lo.CONV_SYSTEM){const{operationType:W,memberInfoList:iA,operatorInfo:EA}=P;let RA={};if(Rs(iA)?Rs(EA)||(RA=EA):[Tg.JOINED,Tg.KICKED,Tg.ADMIN_SET,Tg.ADMIN_CANCELED].includes(W)&&(RA=Object.assign({},iA[0])),!Rs(RA)){const{nick:kA="",avatar:xA=""}=RA;n.nick=kA,n.avatar=xA}}}_updateMessageListDueToModify(n){const{conversationID:g}=n,{isUpdated:u,message:E}=fe.message.messageDataHandler.modifyConversationMessage(g,n);u===!0&&fe.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:[E]}),Af(g,n)}_handleGroupMessageModify(n){n.GroupMsgModNotifys.forEach(g=>{const u=Kr.CONV_GROUP;let E=HD(g);const{topicID:m,groupID:D}=E,M=m||D,T=`${u}${M}`;E=Object.assign({conversationType:u,conversationID:T,to:M},E),this._updateMessageListDueToModify(E)})}_dispose(){const{notificationCenter:n}=fe,{InnerEventSubType:{GROUP_REALTIME_MESSAGE:g,GROUP_MESSAGE_MODIFIED:u}}=n;n.unSubscribeInnerEvent(no.MESSAGE_PUSH,g,this._handleGroupMessagePush,this),n.unSubscribeInnerEvent(no.MESSAGE_PUSH,u,this._handleGroupMessageModify,this),n.unSubscribeInnerEvent(no.DESTROY,this._dispose,this)}_canExecuteReceiverNewMessageWorkFlow(n){var g,u;const{GroupId:E,GroupType:m}=((u=(g=n?.GroupMsgArray)===null||g===void 0?void 0:g[0])===null||u===void 0?void 0:u.GroupInfo)||{},D=m===La.GRP_AVCHATROOM;return!(!Ap.getGroup(E)&&D)}}var zD=new class{constructor(){this.c2cMessageReceiver=new Nh,this.groupMessageReceiver=new Gh}init(){this.c2cMessageReceiver.init(),this.groupMessageReceiver.init()}};const TR={createCustomMessage:{to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1},payload:{required:!0,rules:["object"],allowEmpty:!1},cloudCustomData:{required:!1,rules:["string"],allowEmpty:!1},priority:{required:!1,rules:["string"],allowEmpty:!1},customModerationConfigurationID:{required:!1,rules:["string"],allowEmpty:!1}},sendMessage:[{key:"message",required:!0,rules:["object"],allowEmpty:!1},{key:"options",required:!1,rules:["object"],allowEmpty:!1}],createTextMessage:{to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1,customValidator:s=>!(!s.startsWith("C2C")&&!s.startsWith("GROUP"))||"conversationType is invalid."},payload:{required:!0,rules:["object"],allowEmpty:!1,customValidator:s=>function(n){var g;return typeof n?.text!="string"||typeof n.text=="string"&&((g=n?.text)===null||g===void 0?void 0:g.length)===0?"payload.text must be a string":!0}(s)}}},zT={createCustomMessage:!0,sendMessage:!0,modifyMessage:!0};var ZT=new class{constructor(){this._historyMessageListFetchAnchors=new Map,this.completedHistoryConversations=new Set}getGroupRoamingMessagesByAnchor(s){return pA(this,void 0,void 0,function*(){try{const{conversationID:n,count:g,direction:u,sequence:E,messageSequenceList:m,shouldMarkCompleted:D=!1,getType:M}=s,T=n.replace(ka.CONV_GROUP,""),P=[];let W=E;if(u===Kc.BACKWARD){if(typeof E!="number")return{messageList:[],hasNoMoreHistoryMessage:!1,nextReqMessageIDFromServer:""};W=E+g-1}const iA=yield Th({groupID:T,count:g,messageSequence:W,messageSequenceList:m,getType:M});if(iA){const{RspMsgList:EA=[],NextReqMsgSeq:RA=0,IsFinished:kA,InvisibleMsgSeq:xA}=iA,LA=`groupID:${T} sequence:${E} reqSeq:${W} direction:${u} complete:${kA} nextSequence:${RA} remoteMsgCount:${EA.length} invisibleSequenceList:${xA}`,SA=[];for(let ae=0;ae=E),OA&&D&&this.completedHistoryConversations.add(n);const JA=vB(SA);return fe.ssoLog.info("getGroupRoamingMessagesByAnchor",LA),{messageList:JA,invisibleSequenceList:xA,nextReqMessageIDFromServer:RA,hasNoMoreHistoryMessage:OA,serverGroupTipList:P}}}catch(n){const{errorCode:g,errorInfo:u}=n||{};throw new gs({code:g,message:u})}})}clearHistoryMessageListFetchAnchors(s){this._historyMessageListFetchAnchors.delete(s)}isHistoryMessageFetchCompleted(s){return this.completedHistoryConversations.has(s)}_parseMessage(s){var n;const g=ka.CONV_GROUP;s.Event===4&&(s.MsgBody.MsgType=Lo.MSG_GRP_TIP);const u=JD(s),E=Wm.createMessage(Object.assign(Object.assign({},u),{conversationType:g,flow:"in"}));return SB(((n=u.elements)===null||n===void 0?void 0:n.content)||{},E),E.setElement(u.elements),E}getC2CRoamingMessagesByAnchor(s){return pA(this,void 0,void 0,function*(){var n;try{const{conversationID:g,count:u,messageID:E,time:m,direction:D,shouldMarkCompleted:M=!1}=s;let T=m,P="";if(!m){const EA=E?fe.message.messageDataHandler.findMessage(E):null;if(T=EA?.time||0,E&&this._historyMessageListFetchAnchors.has(g)){const RA=this._historyMessageListFetchAnchors.get(g);T=RA.lastMessageTime,P=RA.messageKey}}const W=g.replace(ka.CONV_C2C,""),iA=yield Xm({count:u,lastMessageTime:T,messageKey:P,peerAccount:W,direction:D});if(iA){const{MsgList:EA=[],Complete:RA,MsgKey:kA,LastMsgTime:xA}=iA;this._historyMessageListFetchAnchors.set(g,{messageKey:kA,lastMessageTime:xA});const LA=[];for(let ae=0;ae{const{tag:E,value:m}=u;E&&E.indexOf(XD)>-1?g.profileCustomField.push({key:E,value:m}):bd.has(E)&&(g[bd.get(E)]=m)}),Object.assign(Object.assign({},ef),g)}parseProfileItem(s=[]){const n=[];return s.forEach(g=>{n.push({tag:g.Tag,value:g.Value})}),n}parseProfileList(s=[]){const n=[];return s.forEach(g=>{n.push({tag:g.Tag,value:g.ValueBytes})}),n}convertParamsToProfile(s){const n=[];return Object.keys(s).forEach(g=>{g!==$D&&n.push({tag:xl[g.toUpperCase()],value:s[g]})}),s.profileCustomField&&h(s.profileCustomField)&&s.profileCustomField.forEach(g=>{n.push({tag:g.key,value:g.value})}),n}normalizeProfileFields(s){const n={},g=[];return s.forEach(u=>{const{tag:E,value:m}=u;if(E&&E.indexOf(XD)>-1&&g.push({key:E,value:m}),bd.has(E)&&m!==void 0){const D=bd.get(E);n[D]=m}}),g.length>0&&(n.profileCustomField=g),n}};const{generateProtocolData:GR}=fe.common;function bR(s){return pA(this,void 0,void 0,function*(){const n="profile.portrait_get_all",g={From_Account:Ar(),UserItem:[]};s.forEach(D=>{g.UserItem.push({CustomSequence:0,StandardSequence:0,To_Account:D})});const u=GR({servcmd:n,data:g}),E=`${u.head.seq}${n}`,m=yield fe.channel.sendPacket(u,{requestId:E});if(m)return function(D){const{ActionStatus:M,ErrorCode:T,ErrorDisplay:P,ErrorInfo:W,UserProfileItem:iA}=D,EA=[];return iA.map(RA=>{const{To_Account:kA,CustomSequence:xA,ResultCode:LA,ResultInfo:SA,StandardSequence:OA,ProfileItem:JA}=RA,ae=eE.parseProfileItem(JA);EA.push({userId:kA,customSequence:xA,resultCode:LA,resultInfo:SA,standardSequence:OA,profileItem:ae})}),{actionStatus:M,errorCode:T,errorDisplay:P,errorInfo:W,userProfile:EA}}(m)})}function WE(s){return rc.getFriendMap().has(s)}const{isEmpty:AS}=fe.utils;class tf{constructor(){this._strangerProfileMap=new Map}init(){Cr.getInstance().registerApi({apiName:"getMyProfile",context:this}),Cr.getInstance().registerApi({apiName:"getUserProfile",context:this}),Cr.getInstance().registerApi({apiName:"updateMyProfile",context:this}),this.createProfile=eE.createProfile.bind(eE);const{notificationCenter:n}=fe;ws.getInstance().registerWorkflowStep(Vt.SYNC_SERVER_INFO_AFTER_LOGIN,Kt.USER_PROFILE_SYNC,this.getMyProfileCacheThenServer,this),n.subscribeInnerEvent(no.MESSAGE_PUSH,n.InnerEventSubType.PROFILE_MODIFIED,this._onProfileDataModify,this),n.subscribeInnerEvent(no.LOGOUT,this._reset,this),n.subscribeInnerEvent(no.DESTROY,this._dispose,this)}getMyProfile(){return pA(this,void 0,void 0,function*(){try{const n=Ar(),g=yield bR([n]);if(g){const u=this._handleProfileFormResponse(g)[0];return rc.getUserProfileMap().set(n,u),{code:0,data:u}}}catch(n){const{errorCode:g,errorInfo:u}=n;throw new gs({functionName:"getMyProfile",code:g,message:u})}})}getUserProfile(n){return pA(this,void 0,void 0,function*(){try{let{userIDList:g}=n;const{userIdListToRequest:u,profileFromCache:E}=this._filterRequestAndCacheUsers(g);if(u.length===0)return{code:0,data:E,successLog:{message:`userIDList.length:${g.length}`}};u.length>NR&&(fe.ssoLog.warn("getUserProfile","userIdListToRequest.length > 1000"),u.length=NR);const{data:m,error:D}=yield this._batchFetchUserProfiles(u),M=u.length,T=m.length,P=M-T;if(E.length===0&&M===P&&!AS(D))throw D;if(h(m))return m.forEach(iA=>{WE(iA.userID)?rc.getUserProfileMap().set(iA.userID,iA):this._strangerProfileMap.set(iA.userID,iA)}),{code:0,data:m.concat(E),successLog:{message:`getUserProfile query:${M} success:${T} fail:${P} from cache:${E.length}`}}}catch(g){throw new gs(g)}})}getMyProfileCacheThenServer(){return pA(this,void 0,void 0,function*(){const n=Ar(),g=rc.getUserProfileMap().has(n);return g?{code:0,data:g}:this.getMyProfile()})}updateMyProfile(n){return pA(this,void 0,void 0,function*(){const g=Ar(),u={};for(const m in n)n[m]!==void 0&&(u[m]=n[m]);const E=eE.convertParamsToProfile(u);try{yield function(P){return pA(this,void 0,void 0,function*(){const W="profile.portrait_set",iA=GR({servcmd:W,data:P}),EA=`${iA.head.seq}${W}`,RA=yield fe.channel.sendPacket(iA,{requestId:EA});if(RA){const{ActionStatus:kA,ErrorCode:xA,ErrorDisplay:LA,ErrorInfo:SA}=RA;return{actionStatus:kA,errorCode:xA,errorDisplay:LA,errorInfo:SA}}})}({From_Account:g,ProfileItem:E});const D=rc.getUserProfile(g);let M;M=D?Object.assign(Object.assign({},D),u):eE.createProfile(g,E);const T=!rg(D,M,["lastUpdatedTime"]);return M.lastUpdatedTime=Date.now(),rc.getUserProfileMap().set(g,M),T&&this._emitProfileUpdated(M),{code:0,data:M,successLog:{message:`profileArray: ${fe.utils.safeStringify(E)}`}}}catch(m){const{errorCode:D,errorInfo:M}=m;throw new gs({functionName:"updateMyProfile",code:D,message:M,moreMessage:`params: ${fe.utils.safeStringify(n)}`})}})}updateMyNickAndAvatar(n){return pA(this,void 0,void 0,function*(){const g=Ar(),u=Date.now(),E=rc.getUserProfile(g);let m={};m=E?Object.assign(E,n):eE.createProfile(g,n),m.lastUpdatedTime=u,rc.getUserProfileMap().set(g,m)})}_onProfileDataModify(n){const g=function(m){const{Profile_Account:D,PushType:M,ProfileList:T}=m;return{userId:D,pushType:M,profileList:eE.parseProfileList(T)}}(n.ProfileDataMod[0]);if(AS(g))return;const{isProfileUpdated:u,profile:E}=this._handleProfileModified(g);u&&this._emitProfileUpdated(E)}_emitProfileUpdated(n){fe.notificationCenter.emitInnerEvent(no.PROFILE_UPDATE,{name:no.PROFILE_UPDATE,data:[n]}),fe.notificationCenter.emitOuterEvent(Dr.PROFILE_UPDATED,{name:Dr.PROFILE_UPDATED,data:[n]}),MB.updateConversation(`C2C${n?.userID}`,{userProfile:n})}_dispose(){const{notificationCenter:n}=fe;n.unSubscribeInnerEvent(no.LOGOUT,this._reset,this),n.unSubscribeInnerEvent(no.MESSAGE_PUSH,n.InnerEventSubType.PROFILE_MODIFIED,this._onProfileDataModify,this),n.unSubscribeInnerEvent(no.DESTROY,this._dispose,this),this._reset()}_handleProfileModified(n){const{userId:g,profileList:u}=n,E=rc.getUserProfile(g);if(!(Ar()===g||WE(g)&&E))return{isProfileUpdated:!1,profile:null};const m=eE.normalizeProfileFields(u),D=Object.keys(m).some(W=>W===$D?this._isCustomFieldChanged(E.profileCustomField,m.profileCustomField):E[W]!==m[W]);if(!D)return{isProfileUpdated:!1,profile:E};const M=Date.now(),T=Object.prototype.hasOwnProperty.call(m,$D)?this._mergeProfileCustomField(E.profileCustomField,m.profileCustomField):E.profileCustomField,P=Object.assign(Object.assign(Object.assign({},E),m),{profileCustomField:T,lastUpdatedTime:M});return rc.getUserProfileMap().set(g,P),{isProfileUpdated:D,profile:P}}_filterRequestAndCacheUsers(n){const g=[],u=[];return n.forEach(E=>{const m=rc.getUserProfileMap().has(E);WE(E)&&m?u.push(rc.getUserProfile(E)):this._isStrangerAndProfileValid(E)?u.push(this._strangerProfileMap.get(E)):g.push(E)}),{userIdListToRequest:g,profileFromCache:u}}_handleProfileFormResponse(n){const{userProfile:g}=n;if(!Array.isArray(g))return[];const u=g.filter(m=>m.userId!=="@TLS#NOT_FOUND"&&m.userId!==""&&!AS(m.profileItem)),E=Date.now();return u.map(m=>{const D=eE.createProfile(m.userId,m.profileItem);return D.lastUpdatedTime=E,D})}_isStrangerAndProfileValid(n){var g;if(!WE(n)){const{lastUpdatedTime:u=0}=this._strangerProfileMap.get(n)||{},E=((g=fe.store.get("cloudConfig"))===null||g===void 0?void 0:g.stranger_profile_expiration_time)||6e5;return Date.now()-u<=E}return!1}_chunkUserIDList(n,g){return Array.from({length:Math.ceil(n.length/g)},(u,E)=>n.slice(E*g,(E+1)*g))}_batchFetchUserProfiles(n){return pA(this,void 0,void 0,function*(){const g=[],u=[];let E={};return this._chunkUserIDList(n,100).forEach(m=>{g.push(bR(m))}),(yield Promise.allSettled(g)).forEach(m=>{if(m.status==="fulfilled"){const D=m.value,M=this._handleProfileFormResponse(D);h(M)&&u.push(...M)}else if(m.status==="rejected"){const{code:D,message:M}=m.reason||{};E={errorCode:D,message:M}}}),{data:u,error:E}})}_isCustomFieldChanged(n=[],g=[]){if(!h(g)||g.length===0)return!1;if(!h(n)||n.length===0)return!0;const u=new Map(n.map(E=>[E.key,E.value]));return g.some(E=>u.get(E.key)!==E.value)}_mergeProfileCustomField(n=[],g=[]){const u=h(n)?n.map(E=>Object.assign({},E)):[];return h(g)&&g.length!==0&&g.forEach(({key:E,value:m})=>{const D=u.find(M=>M.key===E);D?D.value=m:u.push({key:E,value:m})}),u}_reset(){rc.getUserProfileMap().clear(),this._strangerProfileMap.clear()}}const of=new Map,eS=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];for(let s=0,n=eS.length;s>(-2*m&6)):0)E="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(E);try{return decodeURIComponent(escape(g))}catch(u){return console.warn(u),""}}const{isEmpty:$T}=fe.utils,{generateProtocolData:sf}=fe.common;function kR(s){return pA(this,void 0,void 0,function*(){const n="im_open_status.ws_get_user_status",g=sf({servcmd:n,data:{To_Account:s}}),u=`${g.head.seq}${n}`,E=yield fe.channel.sendPacket(g,{requestId:u});if(E)return function(m){const{ErrorCode:D,ErrorInfo:M,ErrorList:T=[],UserStatusList:P=[]}=m,W=P.map(EA=>{const{To_Account:RA,Status:kA,CustomStatus:xA,Detail:LA=[]}=EA;return{userID:RA,statusType:kA,customStatus:rp(xA),onlineDevices:AN(LA)}}),iA=T.map(EA=>{const{To_Account:RA,Invalid_Account:kA,ErrorCode:xA,ErrorInfo:LA}=EA;return{userID:$T(kA)?RA:kA,code:xA,message:LA}});return{errorCode:D,errorInfo:M,successUserList:W,failureUserList:iA}}(E)})}function AN(s){const n=[];return s?.forEach(g=>{const{Platform:u,Status:E}=g;E==="Online"&&n.push(u)}),n}class eN{constructor(){this._customStatus=""}init(){const{notificationCenter:n}=fe;Cr.getInstance().registerApi({apiName:"getUserStatus",context:this}),Cr.getInstance().registerApi({apiName:"setSelfStatus",context:this}),Cr.getInstance().registerApi({apiName:"subscribeUserStatus",context:this}),Cr.getInstance().registerApi({apiName:"unsubscribeUserStatus",context:this}),ws.getInstance().registerWorkflowStep(Vt.SYNC_SERVER_INFO_AFTER_RE_ONLINE,Kt.USER_STATUS_UPDATE,this._onReOnline,this),n.subscribeInnerEvent(no.MESSAGE_PUSH,n.InnerEventSubType.USER_STATUS_UPDATE,this._onUserStatusUpdate,this),n.subscribeInnerEvent(no.LOGOUT,this._reset,this),n.subscribeInnerEvent(no.DESTROY,this._dispose,this)}setSelfStatus(n){return pA(this,void 0,void 0,function*(){const g=Ar(),{customStatus:u}=n;try{return yield function(E){return pA(this,void 0,void 0,function*(){const m="im_open_status.ws_set_custom_status",D=sf({servcmd:m,data:{CustomStatus:E}}),M=`${D.head.seq}${m}`,T=yield fe.channel.sendPacket(D,{requestId:M});if(T){const{ErrorCode:P,ErrorInfo:W}=T;return{errorCode:P,errorInfo:W}}})}(u),this._customStatus=u,{code:0,data:{userID:g,statusType:bh,customStatus:u},successLog:{message:`customStatus: ${u}`}}}catch(E){const{errorCode:m,errorInfo:D}=E;throw new gs({functionName:"setSelfStatus",code:m,message:D})}})}getUserStatus(n){return pA(this,void 0,void 0,function*(){const{userIDList:g=[]}=n;if(this._isOnlyMeInArray(g))return this._getMyStatus();const u=yield this._getUserStatus(g);return Object.assign(Object.assign({},u),{successLog:{message:`userIDList length: ${g.length}`}})})}setCustomStatus(n){const g=rp(n);this._customStatus=g}subscribeUserStatus(n){return pA(this,void 0,void 0,function*(){try{const{userIDList:g=[]}=n;this._checkBusinessCapabilityBits("subscribeUserStatus");const u=this._getMaxUserCount("subscribe"),E=this._sliceUserIDList(g,u),m=yield function(M){return pA(this,void 0,void 0,function*(){const{channel:T}=fe,P="im_open_status.ws_status_subscribe",W=sf({servcmd:P,data:{To_Account:M}}),iA=`${W.head.seq}${P}`;return yield T.sendPacket(W,{requestId:iA})})}(E),D=this._parseResponse(m);return{code:0,data:{failureUserList:D},successLog:{message:`userID length:${g.length} failCount: ${D.length}`}}}catch(g){const{errorCode:u}=g;throw new gs({functionName:"subscribeUserStatus",code:u})}})}unsubscribeUserStatus(n){return pA(this,void 0,void 0,function*(){try{this._checkBusinessCapabilityBits("unsubscribeUserStatus");const{userIDList:g=[]}=n,u=this._getMaxUserCount("unsubscribe"),E=this._sliceUserIDList(g,u),m=yield function(M){return pA(this,void 0,void 0,function*(){const{channel:T}=fe,P="im_open_status.ws_status_unsubscribe";let W={};W=M.length===0?{UnsubscribeAll:1}:{To_Account:M};const iA=sf({servcmd:P,data:W}),EA=`${iA.head.seq}${P}`;return yield T.sendPacket(iA,{requestId:EA})})}(E),D=this._parseResponse(m);return{code:0,data:{failureUserList:D},successLog:{message:`userID length:${g.length} failCount: ${D.length}`}}}catch(g){const{errorCode:u}=g;throw new gs({functionName:"unsubscribeUserStatus",code:u})}})}_onUserStatusUpdate(n){const{UserStatusList:g=[]}=n||{},u=g.map(E=>{const{To_Account:m,Status:D,CustomStatus:M,Platform:T}=E,P={userID:m,statusType:D,customStatus:rp(M)};return T&&(P.onlineDevices=T),P});this._emitUserStatusUpdatedEvent(u)}_onReOnline(n){const g=rp(n.data.customStatus);if(this._customStatus===g)return;this._customStatus=g;const u={userID:Ar(),statusType:bh,customStatus:g};this._emitUserStatusUpdatedEvent(u)}_emitUserStatusUpdatedEvent(n){fe.notificationCenter.emitOuterEvent(Dr.USER_STATUS_UPDATED,{name:Dr.USER_STATUS_UPDATED,data:n})}_sliceUserIDList(n,g){return n.slice(0,g)}_parseResponse(n){const{ErrorList:g=[]}=n;return g.map(u=>{const{To_Account:E,Invalid_Account:m,ErrorCode:D,ErrorInfo:M}=u;return{userID:fe.utils.isEmpty(m)?E:m,code:D,message:M}})}_checkBusinessCapabilityBits(n){if(!fe.store.get("commercialConfig").get(XT))throw new gs({functionName:n,code:da.NO_USE,replacement1:n})}_getMaxUserCount(n){const g=fe.store.get("cloudConfig")||{},u={query:{key:"status_query_count",default:500},subscribe:{key:"status_sub_count",default:100},unsubscribe:{key:"status_unsub_count",default:100}},{key:E,default:m}=u[n],D=g[E]||m;return parseInt(D,10)}_getMyStatus(){return{code:0,data:{successUserList:[{userID:Ar(),statusType:bh,customStatus:this._customStatus}],failureUserList:[]}}}_getUserStatus(n){return pA(this,void 0,void 0,function*(){try{this._checkBusinessCapabilityBits("getUserStatus");const g=this._getMaxUserCount("query"),u=this._sliceUserIDList(n,g),E=yield kR(u),{successUserList:m,failureUserList:D}=E||{};return{code:0,data:{successUserList:m,failureUserList:D}}}catch(g){const{errorCode:u}=g;throw new gs({functionName:"getUserStatus",code:u})}})}_isOnlyMeInArray(n){const g=Ar();return n.length===1&&n.indexOf(g)>-1}_dispose(){const{notificationCenter:n}=fe;n.unSubscribeInnerEvent(no.MESSAGE_PUSH,n.InnerEventSubType.USER_STATUS_UPDATE,this._onUserStatusUpdate,this),n.unSubscribeInnerEvent(no.DESTROY,this._dispose,this),n.unSubscribeInnerEvent(no.LOGOUT,this._reset,this),this._reset()}_reset(){this._customStatus=""}}const tS={getUserProfile:{userIDList:{required:!0,rules:["array"],allowEmpty:!1}},updateMyProfile:{nick:{required:!1,rules:["string"],allowEmpty:!0},avatar:{required:!1,rules:["string"],allowEmpty:!0},gender:{required:!1,rules:["string"],allowEmpty:!0},selfSignature:{required:!1,rules:["string"],allowEmpty:!0},allowType:{required:!1,rules:["string"],allowEmpty:!0},birthday:{required:!1,rules:["number"],allowEmpty:!1},language:{required:!1,rules:["string"],allowEmpty:!0},messageSettings:{required:!1,rules:["string"],allowEmpty:!0},adminForbidType:{required:!1,rules:["string"],allowEmpty:!0},level:{required:!1,rules:["number"],allowEmpty:!1},role:{required:!1,rules:["number"],allowEmpty:!0},profileCustomField:{required:!1,rules:["array"],allowEmpty:!0,customValidator:function(s){for(const n of s){if(typeof n!="object")return"Each item in profileCustomField must be an object";if(typeof n?.key!="string")return"Each item.key in profileCustomField must be a string";if(!n?.key.startsWith(XD))return'Each item.key in profileCustomField must start with "Tag_Profile_Custom"'}return!0}}},setSelfStatus:{customStatus:{required:!0,rules:["string"],allowEmpty:!0}},getUserStatus:{userIDList:{required:!0,rules:["array"],allowEmpty:!1}},subscribeUserStatus:{userIDList:{required:!0,rules:["array"],allowEmpty:!1}},unsubscribeUserStatus:{userIDList:{required:!1,rules:["array"],allowEmpty:!0}}},tN={getMyProfile:!0,getUserProfile:!0,updateMyProfile:!0,setSelfStatus:!0,getUserStatus:!0,subscribeUserStatus:!0,unsubscribeUserStatus:!0};class iN{constructor(){this.userProfile=new tf,this.userStatus=new eN,this.userProfile.init(),this.userStatus.init(),Wc({auth:tN,params:tS})}}function iS(s){const n=[];if(!l(s))return n;const g=s.length;if(g===0)return n;for(let u=g-1;u>=0;u--)s[u]==="1"&&n.push(2**(g-u-1));return n}var kd,wC,Ld;(function(s){s.NOT_START="notStart",s.PENDING="pending",s.RESOLVED="resolved",s.REJECTED="rejected"})(kd||(kd={})),function(s){s[s.C2C=1]="C2C",s[s.GROUP=2]="GROUP"}(wC||(wC={})),function(s){s[s.C2C=8]="C2C",s[s.GROUP=2]="GROUP"}(Ld||(Ld={}));class oS{constructor(){this._name="SyncConversationHandler",this._pagingStatus=kd.NOT_START,this._pagingTimeStamp=0,this._pagingStartIndex=0,this._pagingPinnedTimeStamp=0,this._pagingPinnedStartIndex=0}init(){const{notificationCenter:n}=fe;ws.getInstance().registerWorkflowStep(Vt.SYNC_SERVER_INFO_AFTER_RE_ONLINE,Kt.CONVERSATION_RECOVER,this._syncConversationList,this),ws.getInstance().registerWorkflowStep(Vt.SYNC_SERVER_INFO_AFTER_LOGIN,Kt.CONVERSATION_LIST_SYNC,this._syncConversationListAfterLogin,this),n.subscribeInnerEvent(no.LOGOUT,this._reset,this),n.subscribeInnerEvent(no.DESTROY,this._dispose,this),fe.ssoLog.debug(`${this._name}.init`)}isSyncCompleted(){return this._pagingStatus===kd.RESOLVED}_syncConversationListAfterLogin(){return pA(this,void 0,void 0,function*(){return this._pagingStatus=kd.NOT_START,this._pagingTimeStamp=0,this._pagingStartIndex=0,this._pagingPinnedTimeStamp=0,this._pagingPinnedStartIndex=0,this._syncConversationList()})}_syncConversationList(){return pA(this,void 0,void 0,function*(){const{ssoLog:n,utils:{safeStringify:g}}=fe;n.debug("_syncConversationList","start");try{const u=yield this._pagingGetConversationList(!0);this._pagingStatus=kd.RESOLVED;const{conversationList:E=[]}=u||{};return n.info("_syncConversationList",`success count:${E.length}`),u}catch(u){const E=new gs(u);n.error("_syncConversationList",`fail ${g(u)}`,{error:E})}})}_pagingGetConversationList(n){return pA(this,void 0,void 0,function*(){try{const g=[];this._pagingStatus=kd.PENDING;const u=yield function(iA){return pA(this,void 0,void 0,function*(){const{fromAccount:EA,pagingTimeStamp:RA,pagingStartIndex:kA,pagingPinnedTimeStamp:xA,pagingPinnedStartIndex:LA}=iA;return gg({servcmd:"recentcontact.page_get",data:{AssistFlags:31,MsgAssistFlags:15,OrderType:1,From_Account:EA,StartIndex:kA,TimeStamp:RA,TopStartIndex:LA,TopTimeStamp:xA}})})}({fromAccount:Ar(),pagingTimeStamp:n?this._pagingTimeStamp:0,pagingStartIndex:n?this._pagingStartIndex:0,pagingPinnedTimeStamp:n?this._pagingPinnedTimeStamp:0,pagingPinnedStartIndex:n?this._pagingPinnedStartIndex:0}),{CompleteFlag:E,SessionItem:m=[],TimeStamp:D,StartIndex:M,TopTimeStamp:T,TopStartIndex:P}=u||{};let W=[];if(E===1&&(this._pagingStatus=kd.RESOLVED),m.length>0&&(W=this._getConversationOptions(m),g.push(...W)),fe.notificationCenter.emitInnerEvent(no.SYNC_CONVERSATION_LIST,{conversationUpdateFieldList:W}),this._pagingTimeStamp=D,this._pagingStartIndex=M,this._pagingPinnedTimeStamp=T,this._pagingPinnedStartIndex=P,E!==1){const{conversationList:iA}=yield this._pagingGetConversationList(n);g.push(...iA)}return{conversationList:g}}catch(g){throw g}})}_getConversationOptions(n){const{utils:{isUndefined:g}}=fe,u=this._convertConversationKey(n);return this._filterValidConversations(u).map(E=>(g(E.lastMsg)&&(E.lastMsg={elements:[]}),E.type===wC.C2C?this._assembleC2COption(E):this._assembleGroupOption(E)))}_filterValidConversations(n){return n.filter(({type:g,userID:u})=>g===wC.C2C&&!function(E){let m;return E.startsWith(Lo.CONV_C2C)&&(m=E.replace(Lo.CONV_C2C,"")),m==="@TLS#ERROR"||m==="@TLS#NOT_FOUND"}(u)||g===2)}_assembleC2COption(n){var g,u,E,m,D,M,T,P;const W=this._createUserprofile(n);return{conversationID:`${Lo.CONV_C2C}${n.userID}`,type:Lo.CONV_C2C,lastMessage:{lastTime:n.time,lastSequence:n.sequence,fromAccount:n.lastC2CMsgFromAccount,type:!((g=n.lastMsg)===null||g===void 0)&&g.elements[0]?(u=n.lastMsg)===null||u===void 0?void 0:u.elements[0].type:null,payload:!((E=n.lastMsg)===null||E===void 0)&&E.elements[0]?this._amendLayersOverLimitProp(n.lastMsg.elements[0].content):null,cloudCustomData:((M=(D=(m=n.lastMsg)===null||m===void 0?void 0:m.elements)===null||D===void 0?void 0:D[0])===null||M===void 0?void 0:M.cloudCustomData)||"",isRevoked:n.lastMessageFlag===Ld.C2C,onlineOnlyFlag:!1,nick:"",nameCard:"",version:0,isPeerRead:this._computeIsPeerRead(n),revoker:((P=(T=n.lastMsg)===null||T===void 0?void 0:T.revokerInfo)===null||P===void 0?void 0:P.revoker)||null},unreadCount:0,userProfile:W,peerReadTime:n.peerReadTime,isPinned:n.isPinned===1,customData:n.customMark||"",markList:iS(n.standardMark),conversationGroupList:[],remark:n.friendRemark||"",messageRemindType:this._transMsgRemindType(n.messageRemindType)}}_createUserprofile(n){var g;const{userID:u,nick:E,peerAvatar:m}=n,D=[{tag:"Tag_Profile_IM_Nick",value:E},{tag:"Tag_Profile_IM_Image",value:m}];return(g=fe.user.userProfile)===null||g===void 0?void 0:g.createProfile(u,D)}_computeIsPeerRead(n){const g=Ar(),{lastC2CMsgFromAccount:u,time:E,c2cPeerReadTime:m}=n;return u===g&&E<=m}_assembleGroupOption(n){var g,u,E,m,D;return{conversationID:`${Lo.CONV_GROUP}${n.groupID}`,type:Lo.CONV_GROUP,lastMessage:Object.assign(Object.assign({lastTime:n.time,lastSequence:n.sequence,fromAccount:n.msgGroupFromAccount},this._patchTypeAndPayload(n)),{cloudCustomData:((E=(u=(g=n.lastMsg)===null||g===void 0?void 0:g.elements)===null||u===void 0?void 0:u[0])===null||E===void 0?void 0:E.cloudCustomData)||"",isRevoked:n.lastMessageFlag===Ld.GROUP,onlineOnlyFlag:!1,nick:n.msgGroupFromNickName||"",nameCard:n.msgGroupFromCardName||"",revoker:((D=(m=n.lastMsg)===null||m===void 0?void 0:m.revokerInfo)===null||D===void 0?void 0:D.revoker)||null}),groupProfile:{groupID:n.groupID,name:n.groupNick,avatar:n.groupImage,type:n.groupType,nextMessageSeq:n.nextMessageSeq},unreadCount:this._computeGroupUnreadCount(n),peerReadTime:0,isPinned:n.isPinned===1,version:0,customData:n.customMark||"",markList:iS(n.standardMark),conversationGroupList:[],messageRemindType:this._transMsgRemindType(n.messageRemindType),subType:n.groupType}}_convertConversationKey(n){return n.map(g=>({type:g.Type,userID:g.To_Account,nick:g.C2cNick,peerAvatar:g.C2cImage,time:g.MsgTimeStamp,sequence:g.MsgSeq,lastC2CMsgFromAccount:g.LastC2cMsgFrom_Account,lastMsg:this._convertLastMsgKey(g.LastMsg),lastMessageFlag:g.LastMsgFlags,c2cPeerReadTime:g.C2cPeerReadTime,peerReadTime:g.C2cPeerReadTime,friendRemark:g.C2cRemark,isPinned:g.TopFlags,standardMark:g.StandardMark,customMark:g.CustomMark,messageRemindType:g.MsgRecvOption,groupID:g.ToAccount,groupNick:g.GroupNick,groupImage:g.GroupImage,groupType:g.GroupType,nextMessageSeq:g.GroupNextMsgSeq,msgGroupFromAccount:g.MsgGroupFrom_Account,msgGroupFromNickName:g.MsgGroupFromNickName,msgGroupFromCardName:g.MsgGroupFromCardName,unreadCount:g.UnreadMsgCount,noUnreadCount:g.GroupIgnoredUnreadSeqCount}))}_convertLastMsgKey(n){var g,u,E;const{utils:{isEmpty:m}}=fe;if(m(n))return null;let D="",M=null;if(!m(n.GroupTips)){const{From_Account:T,GroupName:P}=((g=n.GroupTips)===null||g===void 0?void 0:g.GroupInfo)||{};D=Lo.MSG_GRP_TIP,M=Object.assign(Object.assign({},this._parseContent(D,n.GroupTips.MsgBody)),{groupProfile:{from:T,groupName:P}})}return n.MsgBody&&(D=(u=n.MsgBody[0])===null||u===void 0?void 0:u.MsgType,M=this._parseContent(D,n.MsgBody[0])),{event:n.Event,elements:[{type:D,content:M,cloudCustomData:n.CloudCustomData}],revokerInfo:{revoker:(E=n.RevokerInfo)===null||E===void 0?void 0:E.Revoker_Account}}}_parseContent(n,g){var u;if(!g)return g;const E=fe.message.messageFactory.getElementClass(n);return E?(u=E.parseServerPushElement(g))===null||u===void 0?void 0:u.content:g}_amendLayersOverLimitProp(n){const{LayersOverLimit:g}=n;return Do(n,["LayersOverLimit"]).layersOverLimit=g===1,n}_transMsgRemindType(n){let g="";return n===0?g=Lo.MSG_REMIND_ACPT_AND_NOTE:n===1?g=Lo.MSG_REMIND_DISCARD:n===2?g=Lo.MSG_REMIND_ACPT_NOT_NOTE:n===3&&(g=Lo.NOT_RECEIVE_OFFLINE_PUSH_EXCEPT_AT),g}_patchTypeAndPayload(n){var g;const{utils:{isUndefined:u}}=fe,{event:E,elements:m=[]}=n.lastMsg||{};return u(E)?{type:m[0]?m[0].type:null,payload:m[0]?this._amendLayersOverLimitProp(m[0].content):null}:{type:Lo.MSG_GRP_TIP,payload:((g=m?.[0])===null||g===void 0?void 0:g.content)||{}}}_computeGroupUnreadCount(n){const{unreadCount:g=0,noUnreadCount:u=0}=n,E=g-u;return E>0?E:0}_reset(){this._pagingStatus=kd.NOT_START,this._pagingTimeStamp=0,this._pagingStartIndex=0,this._pagingPinnedTimeStamp=0,this._pagingPinnedStartIndex=0}_dispose(){this._reset();const{notificationCenter:n}=fe;n.unSubscribeInnerEvent(no.LOGOUT,this._reset,this),n.unSubscribeInnerEvent(no.DESTROY,this._dispose,this)}}class sS{constructor(){this.syncConversationHandler=new oS,this.syncConversationHandler.init()}}console.log(`TencentCloudLiteChat.VERSION:${Zr}`);var nS={create:function(s){var n,g;const{SDKAppID:u,testEnv:E=!1,devMode:m=!1,unlimitedAVChatRoom:D=!1,scene:M="",oversea:T=!1,instance:P,disableIndependentDomain:W=!1,proxyServer:iA=""}=s;let EA=u;if(!function(kA){if(typeof kA=="number")return!0;const xA=Number(kA);return!Number.isNaN(xA)}(EA))return console.error("Create SDK instance failed. Failed to parse the SDKAppID, please check the arguments"),null;if(EA=Number(EA),Ca.has(EA))return Ca.get(EA);let RA=null;if(P)RA=P,RA._workflowManager&&ws.setInstance(RA._workflowManager),RA._pluginManager&&RA._pluginManager.installBuiltInPlugin(DB),P.isReady()&&((g=(n=ws.getInstance()).executeWorkflow)===null||g===void 0||g.call(n,Vt.SYNC_SERVER_INFO_AFTER_LOGIN));else{const kA=function(){function ae(){return(65536*(1+Math.random())|0).toString(16).substring(1)}return`${ae()+ae()}${ae()}${ae()}${ae()}${ae()}${ae()}${ae()}`}();fe.init({sdkAppId:EA,instanceId:kA,testEnv:E,devMode:m,unlimitedAVChatRoom:D,disableIndependentDomain:W,scene:M,oversea:T,sdkEdition:jm,version:Zr,proxyServer:iA}),ws.getInstance().init(),fe.message=new ZD,fe.user=new iN,fe.login=new Rh,fe.conversation=new sS,au.getInstance().installBuiltInPlugin(DB),RA=Cr.getInstance().exposeApiForClient(),RA._workflowManager=ws.getInstance(),RA._pluginManager=au.getInstance();const{utils:{IS_WORKER_AVAILABLE:xA,USER_AGENT:LA,getPlatformType:SA,isIOSWebView:OA}}=fe,JA=`instanceID:${kA} SDKAppID:${u} platform:${HA} host:${SA()} isIOSWebView:${OA} workerAvailable:${xA} UserAgent:${LA}`;fe.ssoLog.info("sdkConstruct",JA)}return Ca.set(EA,RA),RA},TSignaling:qc,EVENT:Dr,VERSION:Zr,TYPES:Lo};return nS})}(z1)),z1.exports}var KoA=qoA();const ig=yW(KoA);var Z1={exports:{}},joA=Z1.exports,a8;function WoA(){return a8||(a8=1,function(t,i){(function(r,l){t.exports=l()})(joA,function(){function r(re,qe){if(!(re instanceof qe))throw new TypeError("Cannot call a class as a function")}function l(re,qe){for(var yt=0;yt"u"&&typeof uni.requireNativePlugin=="function",WA=TA&&uni.getDeviceInfo().platform.toLocaleLowerCase()==="ios",ue=(TA&&uni.getDeviceInfo().platform.toLocaleLowerCase(),lA||sA||mA||IA||cA||TA),Ce=U!==void 0&&(U.nativeModuleProxy!==void 0||U.ReactNative!==void 0),xe=sA?qq:mA?tt:IA?swan:cA?my:lA?wx:TA?uni:{},Qe=function(re){if(G(re)!=="object"||re===null)return!1;var qe=Object.getPrototypeOf(re);if(qe===null)return!0;for(var yt=qe;Object.getPrototypeOf(yt)!==null;)yt=Object.getPrototypeOf(yt);return qe===yt};function ut(re){if(re==null)return!0;if(typeof re=="boolean")return!1;if(typeof re=="number")return re===0;if(typeof re=="string"||typeof re=="function"||Array.isArray(re))return re.length===0;if(re instanceof Error)return re.message==="";if(Qe(re)){for(var qe in re)if(Object.prototype.hasOwnProperty.call(re,qe))return!1;return!0}return!1}var ft=function(){return I(function re(){r(this,re),this._n="WebRequest"},[{key:"request",value:function(re,qe){var yt=this,Me="".concat(this._n,".request"),Oe=re.downloadUrl||"",gt=(re.method||"PUT").toUpperCase(),Fi=re.url;if(console.log("%c tim-upload-plugin %c","background:#0abf5b; padding:1px; border-radius:3px; color: #fff","background:transparent","".concat(Me," URL:").concat(Fi)),re.qs){var To=function(ki){var ns=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"&",jo=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"=";return ut(ki)?"":Qe(ki)?Object.keys(ki).map(function(Ao){var Zt=encodeURIComponent(Ao)+jo;return Array.isArray(ki[Ao])?ki[Ao].map(function(oo){return Zt+encodeURIComponent(oo)}).join(ns):Zt+encodeURIComponent(ki[Ao])}).filter(Boolean).join(ns):void 0}(re.qs);To&&(Fi+="".concat(Fi.indexOf("?")===-1?"?":"&").concat(To))}var io=new XMLHttpRequest;io.open(gt,Fi,!0),io.responseType=re.dataType||"text";var Eo=re.headers||{};if(re.uploadByIP&&(Eo=w(w({},Eo),{},{host:re.uploadIP})),!ut(Eo))for(var Vs in Eo)Eo.hasOwnProperty(Vs)&&Vs.toLowerCase()!=="content-length"&&Vs.toLowerCase()!=="user-agent"&&Vs.toLowerCase()!=="origin"&&Vs.toLowerCase()!=="host"&&io.setRequestHeader(Vs,Eo[Vs]);return io.onload=function(){if(io.status===200)qe(null,yt._xhrRes(io,yt._xhrBody(io,Oe,re.uploadByIP&&re.uploadIP),Eo));else{if(re.uploadIP&&re.url.indexOf(re.uploadIP)===-1)return re.url=function(ns,jo){return ns.replace(/^http(s)?:\/\/(.*?)\//,"https://".concat(jo,"/"))}(re.url,re.uploadIP),re.uploadByIP=!0,yt.request(re,qe);var ki={code:io.status,message:JSON.stringify(io.responseText)};qe(ki,yt._xhrRes(io,yt._xhrBody(io,Oe,re.uploadByIP&&re.uploadIP),Eo))}},io.onerror=function(ki){var ns=yt._xhrBody(io,Oe,re.uploadByIP&&re.uploadIP),jo={code:io.status,message:JSON.stringify(io.responseText)};ns||io.statusText||io.status!==0||(ki.message="CORS blocked or network error"),qe(jo,yt._xhrRes(io,ns)),jo=null},re.onProgress&&io.upload&&(io.upload.onprogress=function(ki){var ns=ki.total,jo=ki.loaded,Ao=Math.floor(100*jo/ns);re.onProgress({total:ns,loaded:jo,percent:(Ao>=100?100:Ao)/100})}),io.send(re.resources),io}},{key:"_xhrRes",value:function(re,qe){var yt={};return re.getAllResponseHeaders().trim().split(` -`).forEach(function(Me){if(Me){var Oe=Me.indexOf(":"),gt=Me.substr(0,Oe).trim().toLowerCase(),Fi=Me.substr(Oe+1).trim();yt[gt]=Fi}}),{statusCode:re.status,statusMessage:re.statusText,headers:yt,data:qe}}},{key:"_xhrBody",value:function(re,qe,yt){return re.status===200&&qe?{location:qe,uploadIP:yt}:{response:re.responseText,uploadIP:yt}}}])}(),je=["unknown","image","video","audio","log"],Mt=["name"],jt=function(){return I(function re(){r(this,re)},[{key:"request",value:function(re,qe){var yt=this,Me=re.resources,Oe=Me===void 0?"":Me,gt=re.headers,Fi=gt===void 0?{}:gt,To=re.url,io=re.downloadUrl,Eo=io===void 0?"":io,Vs=To,ki=null,ns=Eo.match(/^(https?:\/\/[^/]+\/)([^/]*\/?)(.*)$/),jo=decodeURIComponent(ns[3]),Ao=jo.indexOf("?")>-1?jo.split("?")[0]:jo,Zt={key:re.fileKey?re.fileKey:Ao,success_action_status:200,"Content-Type":""},oo={};if(WA){var bi=To.split("?sign=");if(bi.length>1){var vs=bi[1];Vs="".concat(bi[0],"?sign=").concat(encodeURIComponent("".concat(vs))),oo.sign=decodeURIComponent(vs),oo.signature=decodeURIComponent(vs)}}var HA={url:Vs,header:Fi,name:"file",filePath:Oe,formData:w(w({},Zt),oo),timeout:re.timeout||3e5};if(cA){var ce=HA;ce.name,HA=w(w({},function(Ve,Ot){if(Ve==null)return{};var nt,It,ei=function(be,Ze){if(be==null)return{};var wt={};for(var Nt in be)if({}.hasOwnProperty.call(be,Nt)){if(Ze.includes(Nt))continue;wt[Nt]=be[Nt]}return wt}(Ve,Ot);if(Object.getOwnPropertySymbols){var ti=Object.getOwnPropertySymbols(Ve);for(It=0;It=3e4&&(this.systemClockOffset=To-Fi,qe=!0)}else Math.floor(re.statusCode/100)===5&&(qe=!0)}return qe}}],[{key:"getVersion",value:function(){return"1.4.3"}}])}()})}(Z1)),Z1.exports}var zoA=WoA();const ZoA=yW(zoA);/** +`],{type:"application/javascript"});this._worker=new Worker(URL.createObjectURL(g)),this._worker.postMessage({type:Dr,url:r})}send(r){var g,u;try{(g=this._worker)===null||g===void 0||g.postMessage({type:Us,data:r})}catch(E){(u=this._onSendFail)===null||u===void 0||u.call(this,E)}}bindSocketHandlers(r){const{onOpen:g,onMessage:u,onClose:E,onError:m,onSendFail:D}=r;if(this._worker){const M={[fs]:g,[as]:u,[wu]:E,[Wa]:m,[hs]:D};this._onSendFail=D,this._worker.onmessage=T=>{var P;const{type:W}=T?.data||{};typeof M[W]=="function"&&((P=M[W])===null||P===void 0||P.call(M,T?.data))}}}unbindSocketHandlers(){this._worker&&(this._worker.onmessage=null)}disconnect(){this._worker&&(this._worker.postMessage({type:Jc}),this._worker.terminate(),this._worker=null),this._blobUrl&&(URL.revokeObjectURL(this._blobUrl),this._blobUrl=null)}}class qI{}var es,eo=new class{constructor(){this._store=new Map}get(s){return this._store.get(s)}getStorage(s){return Gi?oi?my.getStorageSync({key:s}).data:Ao.getStorageSync(s):this._canUseLocalStorage()?localStorage.getItem(s):{}}set(s,r){const g=this._store.get(s)||{};r instanceof Map?this._store.set(s,r):this._store.set(s,Object.assign(Object.assign({},g),r))}setStorage(s,r){Gi?oi?my.setStorageSync({key:s,data:JSON.stringify(r)}):Ao.setStorageSync(s,JSON.stringify(r)):this._canUseLocalStorage()&&localStorage.setItem(s,JSON.stringify(r))}clear(s){typeof s=="string"?this._store.set(s,{}):this._store.clear()}clearLocalStorage(s){this._canUseLocalStorage()&&(typeof s=="string"?localStorage.setItem(s,""):localStorage.clear())}reset(){this.clear()}_canUseLocalStorage(){return typeof window<"u"&&navigator&&navigator.cookieEnabled&&localStorage}};class pc{connectSocket(r){return this._socket=Ao.connectSocket({url:r,header:{"content-type":"application/json"},multiple:!0,complete:()=>{}}),this._socket}send(r){var g;(g=this._socket)===null||g===void 0||g.send({data:r,fail:this._onSendFail})}bindSocketHandlers(r){const{onOpen:g,onMessage:u,onClose:E,onError:m,onSendFail:D}=r;this._socket&&(this._socket.onClose(E),this._socket.onOpen(g),this._socket.onMessage(M=>u(M?.data)),this._socket.onError(()=>m),this._onSendFail=D)}unbindSocketHandlers(){this._socket&&(this._socket.onClose(()=>{}),this._socket.onOpen(()=>{}),this._socket.onMessage(()=>{}),this._socket.onError(()=>{}))}disconnect(){this._socket&&(this._socket.close(),this._socket=null)}}(function(s){s[s.CONNECTED=0]="CONNECTED",s[s.CONNECTING=1]="CONNECTING",s[s.DISCONNECTED=2]="DISCONNECTED"})(es||(es={}));class ng{constructor(r){this._url="",this._readyState=es.DISCONNECTED,this._url=r,this._id=L(),this._emitter=new Pn,oi?this._socket=new pc:ct||Co||Dt||Ve||Ni||Pt?this._socket=new cn({onError:this._onError.bind(this)}):an?this._socket=new qI:this._canUseWebWorker()?this._socket=new sg:this._socket=new Ml,this.connect()}connect(){this.doOpen(),this._bindSocketHandlers()}doOpen(){[es.CONNECTED,es.CONNECTING].includes(this._readyState)||(this._readyState=es.CONNECTING,this._ws=this._socket.connectSocket(this._url))}send(r){this._readyState!==es.CONNECTED?this.reconnect():this._socket.send(r)}reconnect(){[es.CONNECTED,es.CONNECTING].includes(this._readyState)||(this.disconnect(),this.doOpen())}getId(){return this._id}on(r,g,u){this._emitter.on(r,g,u)}off(r,g,u){this._emitter.off(r,g,u)}isConnected(){return this._readyState===es.CONNECTED}disconnect(){this._readyState=es.DISCONNECTED,this._unbindSocketHandlers(),this._socket.disconnect()}_onOpen(r){this._readyState===es.CONNECTING&&(this._readyState=es.CONNECTED,this._emitter.emit("connect",{socketId:this._id,event:r}))}_onMessage(r){this._emitter.emit("message",r)}_onClose(r){this._readyState=es.DISCONNECTED,this._emitter.emit("close",{socketId:this._id,event:r})}_onError(r){this._readyState=es.DISCONNECTED,this._emitter.emit("error",{socketId:this._id,error:r})}_onSendFail(r){this._readyState=es.DISCONNECTED,this._emitter.emit("sendFail",{socketId:this._id,error:r})}_bindSocketHandlers(){this._socket.bindSocketHandlers({onOpen:this._onOpen.bind(this),onMessage:this._onMessage.bind(this),onClose:this._onClose.bind(this),onError:this._onError.bind(this),onSendFail:this._onSendFail.bind(this)})}_unbindSocketHandlers(){this._socket.unbindSocketHandlers()}_canUseWebWorker(){const r=eo.get("cloudConfig")||{};return(n(r.isWorkerEnabled)||r.isWorkerEnabled==="1")&&Go}}const Dg={[gt.SINGAPORE]:[[2e7,3e7],[172e7,173e7]],[gt.KOREA]:[[3e7,4e7],[173e7,174e7]],[gt.GERMANY]:[[4e7,5e7],[174e7,175e7]],[gt.IND]:[[5e7,6e7],[175e7,176e7]],[gt.JPN]:[[6e7,7e7],[176e7,177e7]],[gt.USA]:[[7e7,8e7],[177e7,178e7]],[gt.INDONESIA]:[[8e7,9e7],[178e7,179e7]],[gt.KSA]:[[9e7,1e8],[179e7,18e8]]};function ua(s){var r;if(!((r=eo.get("instance"))===null||r===void 0)&&r.oversea)return gt.OVERSEA;for(const g of Object.keys(Dg))for(const[u,E]of Dg[g])if(s>=u&&s`${oA}=${W[oA]}`).join("&"));var W;return g?`${s}/binfo?${P}&compress=gzip`:`${s}/info?${P}`}function Hs(s){const r=eo.get("instance"),{sdkAppId:g,testEnv:u,proxyServer:E}=r,m=ua(g);if(u)return Kn(dt.TEST[m].DEFAULT,{isBinary:s});if(!Rs(E))return Kn(E,{isBinary:s});const D=dt.PRODUCTION[m],M=zt&&D.ANYCAST,T=zt,P=!!D.BACKUP_CN;return Kn({[bo.INITIAL]:()=>(To=bo.DEFAULT,D.DEFAULT),[bo.DEFAULT]:()=>(To=bo.IPV6,D.IPV6),[bo.IPV6]:()=>(To=bo.BACKUP,D.BACKUP),[bo.BACKUP]:()=>T?(To=bo.BACKUP_WEB_ONLY,function(W){const oA=Math.floor(10001*Math.random())+1e4;return W.replace("*",String(oA))}(D.BACKUP_WEB_ONLY)):P?(To=bo.BACKUP_CN,D.BACKUP_CN):M?(To=bo.ANYCAST,D.ANYCAST):D.DEFAULT,[bo.BACKUP_WEB_ONLY]:()=>P?(To=bo.BACKUP_CN,D.BACKUP_CN):M?(To=bo.ANYCAST,D.ANYCAST):D.DEFAULT,[bo.BACKUP_CN]:()=>(To=M?bo.ANYCAST:bo.DEFAULT,D[To]),[bo.ANYCAST]:()=>(To=bo.DEFAULT,D.ANYCAST="",D.DEFAULT)}[To](),{isBinary:s})}var Sg=new class{constructor(){this._timeOffsetWithServer=0}getServerTimeMs(){return Date.now()+this._timeOffsetWithServer}getServerTimeSeconds(){return Math.floor(this.getServerTimeMs()/1e3)}getTimeOffsetWithServer(){return this._timeOffsetWithServer}calculateTimeOffsetWithServer(s,r){const g=Date.now(),u=g-s;this._timeOffsetWithServer=r+u-g}};const mc=16;var fn=new class{constructor(){this._tasks=[],this._timer=null,this._taskMap=new Map}_addTaskToScheduler(s){const{id:r}=s;this.removeTask(r),this._tasks.push(s),this._taskMap.set(r,s),this._sort(),this._scheduleNextTask()}_createTask(s){const{id:r,callback:g,context:u,isOnce:E=!1,intervalMs:m=mc}=s,D=Math.max(m,mc);return{id:r,nextExecuteTime:Date.now()+D,intervalMs:m,callback:g,context:u,isOnce:E}}addTask(s){const r=this._createTask(s);this._addTaskToScheduler(r)}addOnceTask(s){const r=this._createTask(Object.assign(Object.assign({},s),{isOnce:!0}));this._addTaskToScheduler(r)}removeTask(s){const r=this._tasks.findIndex(g=>g.id===s);r>-1&&(this._tasks.splice(r,1),this._taskMap.delete(s),this._scheduleNextTask())}updateTaskInterval(s,r){const g=this._taskMap.get(s);g&&(g.intervalMs=r,g.nextExecuteTime=Date.now()+r,this._sort(),this._scheduleNextTask())}clearAllTasks(){this._tasks=[],this._taskMap.clear(),this._timer&&(clearTimeout(this._timer),this._timer=null)}dispose(){this.clearAllTasks()}_sort(){this._tasks.sort((s,r)=>s.nextExecuteTime-r.nextExecuteTime)}_scheduleNextTask(){this._timer&&(clearTimeout(this._timer),this._timer=null);const s=this._tasks[0];if(s){const r=Math.max(0,s.nextExecuteTime-Date.now());this._timer=setTimeout(()=>this._execute(),r)}}_execute(){const s=Date.now();for(;this._tasks.length&&this._tasks[0].nextExecuteTime<=s;){const r=this._tasks[0];try{r.context?r.callback.call(r.context):r.callback(),r.isOnce?this.removeTask(r.id):(r.nextExecuteTime=s+r.intervalMs,this._sort())}catch(g){console.warn(`Task ${r.id} execution failed:`,g),r.isOnce&&this.removeTask(r.id)}}this._scheduleNextTask()}};function Ga(s){const r=[];for(let g=0;g=55296&&u<=56319){const E=s.charCodeAt(++g)-56320+(u-55296<<10)+65536;r.push(240|E>>18,128|E>>12&63,128|E>>6&63,128|63&E)}else u<=127?r.push(u):u<=2047?r.push(192|u>>6,128|63&u):r.push(224|u>>12,128|u>>6&63,128|63&u)}return new Uint8Array(r)}function In(s){const r=Array.isArray(s)?[]:Object.create(null);for(const g in s)Object.prototype.hasOwnProperty.call(s,g)&&_(g)&&s[g]!=null&&(s[g]===null||typeof s[g]!="object"?r[g]=s[g]:r[g]=In(s[g]));return r}function ys(s,r){if(BA.includes(s))return 0;const g=Ga(JSON.stringify(r));let u=4294967295;const{length:E}=g;for(let m=0;m>>=1:u=u>>>1^3988292384}return(4294967295^u)>>>0}function Ea(s){const{servcmd:r,data:g}=s,u=function(m){const D=eo.get("login")||{},M=eo.get("instance")||{};return{servcmd:m,ver:"v4",platform:VA,websdkappid:537048168,websdkversion:"1.7.3",a2:D.a2Key||void 0,tinyid:D.tinyID||void 0,status_instid:D.statusInstanceId||0,sdkappid:M.sdkAppId,contenttype:"json",reqtime:Math.floor(Date.now()/1e3),identifier:D.a2Key?void 0:D.userId,usersig:D.a2Key?void 0:D.userSig,sdkability:478343027,sdkability_ext:lA(""),cappid:M.applicationID||0,tjgID:"",seq:Sa(),cs:0}}(r),E=In(g);return u.cs=ys(r,E),{head:u,body:E}}function yn(s){const{servcmd:r,data:g}=s,u=function(m){const D=eo.get("login")||{},M=eo.get("instance")||{};return{servcmd:m,ver:"v4",platform:VA,websdkappid:537048168,websdkversion:"1.7.3",sdkappid:M.sdkAppId,contenttype:"",reqtime:Math.floor(Date.now()/1e3),identifier:"",usersig:"",status_instid:D.statusInstanceId||0,sdkability:478343027,sdkability_ext:lA(""),cappid:M.applicationID||0,seq:Sa(),cs:0}}(r),E=In(g);return u.cs=ys(r,E),{head:u,body:E}}let ba=L();function Sa(){return ba=ba<2415919103?ba+1:L(),ba}function $(){var s;const r=eo.get("login")||{},g=eo.get("instance")||{};return{sdk_type:30,sdk_app_id:g.sdkAppId,sdk_version:"1.6.18",tiny_id:Number(r.tinyID),user_id:r.userId||((s=eo.get("webPush"))===null||s===void 0?void 0:s.userId),platform:VA,instance_id:g.instanceId,trace_id:new Date().getTime()}}var j,vA=Object.freeze({__proto__:null,calcBodyCRC:ys,filterProtocolDataInvalidFields:In,generateCosSpecifiedData:function(s){const{servcmd:r,data:g}=s,u=function(m){const D=eo.get("login")||{},M=eo.get("instance")||{};return{servcmd:m,ver:"v4",platform:VA,websdkappid:537048168,websdkversion:"1.7.3",sdkappid:M.sdkAppId,contenttype:"json",reqtime:Math.floor(Date.now()/1e3),identifier:D.userId,usersig:D.userSig,status_instid:D.statusInstanceId||0,sdkability:478343027,sdkability_ext:lA(""),cappid:M.applicationID||0,seq:Sa(),cs:0}}(r),E=In(g);return u.cs=ys(r,E),{head:u,body:E}},generateProtocolData:Ea,generateSSOLogProtocolData:yn,generateSequence:Sa,getCommonHead:$,getHostSite:ua,taskScheduler:fn,timeManager:Sg});(function(s){s[s.info=4]="info",s[s.warning=5]="warning",s[s.error=6]="error"})(j||(j={}));const jA={method:"extension",networkType:"network_type",eventType:"event_type",code:"error_code",message:"error_message",moreMessage:"more_message",duplicate:"duplicate",costTime:"cost_time",level:"level",uiPlatform:"ui_platform",timestamp:"timestamp"};class oe{constructor(r){this.level=j.info,this._canSendLog=!0,this._logCreatedAt=Sg.getServerTimeMs(),this.timestamp=0,this.networkType=8,this.code=0,this.moreMessage="",this.method="",this.message="",this.costTime=0,this.duplicate=!1,this.eventType=0,this.uiPlatform=this._getUiPlatform(),this._sdkEdition=this._getSDKEdition();const{method:g,eventType:u=0,message:E="",costTime:m=0,error:D,uiPlatform:M,moreMessage:T="",code:P=0,startTime:W=0}=r||{};this.eventType=u,this.method=g,this.message=E,this.costTime=m,this.moreMessage=`${T} startTime:${W}`,this.code=P,D&&this.setError(D),Rs(M)||(this.uiPlatform=M)}setMoreMessage(r){this.moreMessage=`${this.moreMessage} ${r}`}updateLogCreatedAtByTimeOffset(){this._logCreatedAt+=Sg.getTimeOffsetWithServer()}end(r=!1){this._canSendLog&&(this._canSendLog=!1,this.timestamp=Sg.getServerTimeMs(),this._ssoLogModule.pushToLogQueue(this._convertSSOLogDataKeyToServe()),r&&this._ssoLogModule.uploadSSOLogData())}setError(r){var g;return r instanceof Error?this._canSendLog?(!((g=eo.get("netWorkMonitor"))===null||g===void 0)&&g.isNetworkOnline&&(r.errorCode&&(this.code=r.errorCode),r.errorMessage&&this.setMoreMessage(r.errorMessage)),this.level=j.error,this):this:(console.warn("SSOLogData.setError value not instanceof Error, please check!"),this)}setLogInfo(r){return Object.keys(r).forEach(g=>{Object.keys(jA).includes(g)&&(this[g]=r[g])}),this}setSSOLogModule(r){this._ssoLogModule=r}_convertSSOLogDataKeyToServe(){const r={};return Object.keys(this).forEach(g=>{const u=g;jA[u]&&(r[jA[u]]=this[u])}),r}_getUiPlatform(){var r;const g=(r=eo.get("instance"))===null||r===void 0?void 0:r.scene;if(typeof g=="string"){const u=Number(g);return isNaN(u)?void 0:u}}_getSDKEdition(){var r;return(r=eo.get("instance"))===null||r===void 0?void 0:r.sdkEdition}}var ye;(function(s){s.RECONNECTED="reconnected",s.CLOUD_CONFIG_UPDATE="cloud_config_update",s.SOCKET_DISCONNECTED="socket_disconnected"})(ye||(ye={}));var He=ye;const Pe=20,rt=6e4,ht=[4,5,6],_t="report-logger";var Vt=new class{constructor(){this._sdkAppIdBlackList=[],this._tinyIdWhiteList=[],this._reportLevel=[4,5,6],this._minThreshold=Pe,this._maxThreshold=100,this._waitingTime=rt,this._lastReportAt=Date.now(),this._ssoLogMap=new Map,this._logLevel=IA.DEBUG,this._throttleConfig={global:{throttleTime:me,maxCount:ae},single:{throttleTime:ZA,maxCount:KA}},this._globalThrottle={count:0,startTime:Date.now()},this._singleThrottleMap=new Map,gn.subscribeInnerEvent(He.CLOUD_CONFIG_UPDATE,this._handleCloudConfigUpdate,this),fn.addTask({id:_t,intervalMs:1e3,callback:this._checkAndReportIfDue,context:this}),this._logQueue=[],this._savePlatFormInfo()}_handleCloudConfigUpdate(s){const{evt_rpt_threshold:r=Pe,evt_rpt_waiting:g=rt,evt_rpt_level:u=ht,evt_rpt_sdkappid_bl:E="",evt_rpt_tinyid_wl:m="",evt_rpt_global_throttle_time:D=me,evt_rpt_global_throttle_count:M=ae,evt_rpt_single_throttle_time:T=ZA,evt_rpt_single_throttle_count:P=KA}=s||{};this._sdkAppIdBlackList=E.split(",").map(W=>Number(W)),this._waitingTime=Number(g),this._minThreshold=r,this._reportLevel=u,this._tinyIdWhiteList=m.split(","),this._throttleConfig={global:{throttleTime:D,maxCount:M},single:{throttleTime:T,maxCount:P}}}createSSOLogData(s){const r=new oe(s);return r.setSSOLogModule(this),this._ssoLogMap.set(s.method,r),r}getSSOLogData(s){return this._ssoLogMap.get(s)||{}}pushToLogQueue(s){s&&(this._logQueue.push(s),this._shouldUploadImmediately()&&this.uploadSSOLogData())}setLogLevel(s){[IA.DEBUG,IA.ERROR,IA.INFO,IA.NONE,IA.WARN].includes(s)&&(this._logLevel=s)}debug(s,r="",g){this._log(IA.DEBUG,s,r,g)}info(s,r="",g){this._log(IA.INFO,s,r,g)}warn(s,r="",g){this._log(IA.WARN,s,r,g)}error(s,r="",g){this._log(IA.ERROR,s,r,g)}_shouldUploadImmediately(){return this._logQueue.length>=this._minThreshold}_isReportDue(){return Date.now()>=this._lastReportAt+this._waitingTime}_checkAndReportIfDue(){this._isReportDue()&&this._logQueue.length>0&&this.uploadSSOLogData()}uploadSSOLogData(){return mA(this,void 0,void 0,function*(){if(this._logQueue.length===0)return;const s=this._logQueue.slice();this._logQueue=[];try{const r=this._filterLogs(s);if(r.length===0)return void(this._lastReportAt=Date.now());const g={Header:$(),Event:r};Rs(g.Header.user_id)||(yield function(u){const E="imopenstat.tim_web_report_v2",m=yn({servcmd:E,data:u}),D=`${m.head.seq}${E}`;return Se.sendPacket(m,{requestId:D})}(g))}catch(r){this._requeueFailedLogs(s),this.debug("uploadSSOLogData",en(r))}finally{this._lastReportAt=Date.now()}})}_requeueFailedLogs(s){this._logQueue=s.concat(this._logQueue);const r=this._logQueue.length-200;r>0&&(this._logQueue.splice(0,r),this.debug("uploadSSOLogData",`log queue overflow, dropped ${r} oldest logs`))}_savePlatFormInfo(){var s,r;if(ct){const g=(r=(s=wx.getAccountInfoSync)===null||s===void 0?void 0:s.call(wx))===null||r===void 0?void 0:r.miniProgram;if(g){const{appId:u,envVersion:E}=g;eo.set("instance",{appId:u,envVersion:E})}}else zt&&eo.set("instance",{href:window.location.href})}_filterLogs(s){const{tinyID:r}=eo.get("login")||{},{sdkAppId:g}=eo.get("instance")||{};return this._sdkAppIdBlackList.includes(g)&&!this._tinyIdWhiteList.includes(r)?[]:s.filter(u=>this._reportLevel.includes(u.level))}_checkThrottle(s){return!!this._checkGlobalThrottle()||this._checkSingleThrottle(s)}_checkGlobalThrottle(){const s=Date.now();if(s-this._globalThrottle.startTime>=this._throttleConfig.global.throttleTime)this._globalThrottle.count=1,this._globalThrottle.startTime=s;else if(this._globalThrottle.count++,this._globalThrottle.count>this._throttleConfig.global.maxCount)return!0;return!1}_checkSingleThrottle(s){const r=Date.now(),g=this._singleThrottleMap.get(s);return g?r-g.startTime>=this._throttleConfig.single.throttleTime?(g.count=1,g.startTime=r,!1):g.count>=this._throttleConfig.single.maxCount||(g.count++,!1):(this._singleThrottleMap.set(s,{count:1,startTime:r}),!1)}_shouldLog(s){return s>=this._logLevel&&this._logLevel!==IA.NONE}_shouldReport(s){return this._reportLevel.includes(HA[s])}_formatLog(s,r,g,u){const E=new Date,m=`${E.getHours()}:${E.getMinutes()}:${E.getSeconds()}:${E.getMilliseconds()}`,D=`<${IA[s]}>`;return ve||Gi?[`${gA} [${m}] ${D} [${r}] ${g}`]:["%c%s%c%s","background:#0abf5b; padding:1px; border-radius:3px; color: #fff",gA,"",`[${m}] ${D} [${r}] ${g} params: ${en(u)}`]}_log(s,r,g,u){if(this._shouldLog(s)){const E=this._formatLog(s,r,g,u);RA[s].apply(console,E)}if(this._shouldReport(s)){const E=this._getThrottleKey(r,g,u);this._checkThrottle(E)||this.createSSOLogData(Object.assign(Object.assign({message:g},u),{method:r})).end()}}_getThrottleKey(s,r,g){const u=`${s}${r}${en(Object.assign(Object.assign({},g),{costTime:""}))}`,E=Ga(JSON.stringify(u));let m=4294967295;const{length:D}=E;for(let M=0;M>>=1:m=m>>>1^3988292384}return`${(4294967295^m)>>>0}`}reset(){console.log("SSO_LOG_MODULE.reset"),fn.removeTask(_t),gn.unSubscribeInnerEvent(He.CLOUD_CONFIG_UPDATE,this._handleCloudConfigUpdate,this),this._lastReportAt=0,this.uploadSSOLogData(),this._sdkAppIdBlackList=[],this._tinyIdWhiteList=[],this._minThreshold=Pe,this._maxThreshold=100,this._waitingTime=rt,this._logQueue=[],this._logLevel=IA.DEBUG,this._globalThrottle={count:0,startTime:Date.now()},this._singleThrottleMap.clear()}};const ui=15e3,It="Channel",Yt="channel_schedule_task",qi="channel_reconnect_task",Wi="connected",qs="connecting",vi="disconnected",zo=1e3,Mg="network_status_change",ar="activity_status_change",Sr="send_fail",Yn="reconnect_failed",vl="socket_error",Ks="socket_close";function gI(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}function Wg(s){return Wg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(r){return typeof r}:function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},Wg(s)}function fc(s){throw new Error('Could not dynamically require "'+s+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var _u,Ma={exports:{}},Rl=(_u||(_u=1,function(s){s.exports=function r(g,u,E){function m(T,P){if(!u[T]){if(!g[T]){if(!P&&fc)return fc(T);if(D)return D(T,!0);var W=new Error("Cannot find module '"+T+"'");throw W.code="MODULE_NOT_FOUND",W}var oA=u[T]={exports:{}};g[T][0].call(oA.exports,function(EA){return m(g[T][1][EA]||EA)},oA,oA.exports,r,g,u,E)}return u[T].exports}for(var D=fc,M=0;M>>6:(EA<65536?oA[xA++]=224|EA>>>12:(oA[xA++]=240|EA>>>18,oA[xA++]=128|EA>>>12&63),oA[xA++]=128|EA>>>6&63),oA[xA++]=128|63&EA);return oA},u.buf2binstring=function(W){return P(W,W.length)},u.binstring2buf=function(W){for(var oA=new E.Buf8(W.length),EA=0,wA=oA.length;EA>10&1023,SA[wA++]=56320|1023&kA)}return P(SA,wA)},u.utf8border=function(W,oA){var EA;for((oA=oA||W.length)>W.length&&(oA=W.length),EA=oA-1;0<=EA&&(192&W[EA])==128;)EA--;return EA<0||EA===0?oA:EA+M[W[EA]]>oA?EA:oA}},{"./common":1}],3:[function(r,g,u){g.exports=function(E,m,D,M){for(var T=65535&E,P=E>>>16&65535,W=0;D!==0;){for(D-=W=2e3>>1:m>>>1;D[M]=m}return D}();g.exports=function(m,D,M,T){var P=E,W=T+M;m^=-1;for(var oA=T;oA>>8^P[255&(m^D[oA])];return-1^m}},{}],6:[function(r,g,u){g.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],7:[function(r,g,u){g.exports=function(E,m){var D,M,T,P,W,oA,EA,wA,kA,xA,LA,SA,OA,qA,Ie,le,bi,ki,Ot,Li,cs,Re,St,UA,ai;D=E.state,M=E.next_in,UA=E.input,T=M+(E.avail_in-5),P=E.next_out,ai=E.output,W=P-(m-E.avail_out),oA=P+(E.avail_out-257),EA=D.dmax,wA=D.wsize,kA=D.whave,xA=D.wnext,LA=D.window,SA=D.hold,OA=D.bits,qA=D.lencode,Ie=D.distcode,le=(1<>>=Ot=ki>>>24,OA-=Ot,(Ot=ki>>>16&255)==0)ai[P++]=65535&ki;else{if(!(16&Ot)){if(!(64&Ot)){ki=qA[(65535&ki)+(SA&(1<>>=Ot,OA-=Ot),OA<15&&(SA+=UA[M++]<>>=Ot=ki>>>24,OA-=Ot,!(16&(Ot=ki>>>16&255))){if(!(64&Ot)){ki=Ie[(65535&ki)+(SA&(1<>>=Ot,OA-=Ot,(Ot=P-W)>3,SA&=(1<<(OA-=Li<<3))-1,E.next_in=M,E.next_out=P,E.avail_in=M>>24&255)+(Re>>>8&65280)+((65280&Re)<<8)+((255&Re)<<24)}function SA(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new E.Buf16(320),this.work=new E.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function OA(Re){var St;return Re&&Re.state?(St=Re.state,Re.total_in=Re.total_out=St.total=0,Re.msg="",St.wrap&&(Re.adler=1&St.wrap),St.mode=wA,St.last=0,St.havedict=0,St.dmax=32768,St.head=null,St.hold=0,St.bits=0,St.lencode=St.lendyn=new E.Buf32(kA),St.distcode=St.distdyn=new E.Buf32(xA),St.sane=1,St.back=-1,oA):EA}function qA(Re){var St;return Re&&Re.state?((St=Re.state).wsize=0,St.whave=0,St.wnext=0,OA(Re)):EA}function Ie(Re,St){var UA,ai;return Re&&Re.state?(ai=Re.state,St<0?(UA=0,St=-St):(UA=1+(St>>4),St<48&&(St&=15)),St&&(St<8||15=Ui.wsize?(E.arraySet(Ui.window,St,UA-Ui.wsize,Ui.wsize,0),Ui.wnext=0,Ui.whave=Ui.wsize):(ai<(_s=Ui.wsize-Ui.wnext)&&(_s=ai),E.arraySet(Ui.window,St,UA-ai,_s,Ui.wnext),(ai-=_s)?(E.arraySet(Ui.window,St,UA-ai,ai,0),Ui.wnext=ai,Ui.whave=Ui.wsize):(Ui.wnext+=_s,Ui.wnext===Ui.wsize&&(Ui.wnext=0),Ui.whave>>8&255,UA.check=D(UA.check,dg,2,0),Gt=Nt=0,UA.mode=2;break}if(UA.flags=0,UA.head&&(UA.head.done=!1),!(1&UA.wrap)||(((255&Nt)<<8)+(Nt>>8))%31){Re.msg="incorrect header check",UA.mode=30;break}if((15&Nt)!=8){Re.msg="unknown compression method",UA.mode=30;break}if(Gt-=4,Va=8+(15&(Nt>>>=4)),UA.wbits===0)UA.wbits=Va;else if(Va>UA.wbits){Re.msg="invalid window size",UA.mode=30;break}UA.dmax=1<>8&1),512&UA.flags&&(dg[0]=255&Nt,dg[1]=Nt>>>8&255,UA.check=D(UA.check,dg,2,0)),Gt=Nt=0,UA.mode=3;case 3:for(;Gt<32;){if(Vi===0)break A;Vi--,Nt+=ai[Ui++]<>>8&255,dg[2]=Nt>>>16&255,dg[3]=Nt>>>24&255,UA.check=D(UA.check,dg,4,0)),Gt=Nt=0,UA.mode=4;case 4:for(;Gt<16;){if(Vi===0)break A;Vi--,Nt+=ai[Ui++]<>8),512&UA.flags&&(dg[0]=255&Nt,dg[1]=Nt>>>8&255,UA.check=D(UA.check,dg,2,0)),Gt=Nt=0,UA.mode=5;case 5:if(1024&UA.flags){for(;Gt<16;){if(Vi===0)break A;Vi--,Nt+=ai[Ui++]<>>8&255,UA.check=D(UA.check,dg,2,0)),Gt=Nt=0}else UA.head&&(UA.head.extra=null);UA.mode=6;case 6:if(1024&UA.flags&&(Vi<(Qo=UA.length)&&(Qo=Vi),Qo&&(UA.head&&(Va=UA.head.extra_len-UA.length,UA.head.extra||(UA.head.extra=new Array(UA.head.extra_len)),E.arraySet(UA.head.extra,ai,Ui,Qo,Va)),512&UA.flags&&(UA.check=D(UA.check,ai,Qo,Ui)),Vi-=Qo,Ui+=Qo,UA.length-=Qo),UA.length))break A;UA.length=0,UA.mode=7;case 7:if(2048&UA.flags){if(Vi===0)break A;for(Qo=0;Va=ai[Ui+Qo++],UA.head&&Va&&UA.length<65536&&(UA.head.name+=String.fromCharCode(Va)),Va&&Qo>9&1,UA.head.done=!0),Re.adler=UA.check=0,UA.mode=12;break;case 10:for(;Gt<32;){if(Vi===0)break A;Vi--,Nt+=ai[Ui++]<>>=7&Gt,Gt-=7&Gt,UA.mode=27;break}for(;Gt<3;){if(Vi===0)break A;Vi--,Nt+=ai[Ui++]<>>=1)){case 0:UA.mode=14;break;case 1:if(Li(UA),UA.mode=20,St!==6)break;Nt>>>=2,Gt-=2;break A;case 2:UA.mode=17;break;case 3:Re.msg="invalid block type",UA.mode=30}Nt>>>=2,Gt-=2;break;case 14:for(Nt>>>=7&Gt,Gt-=7≫Gt<32;){if(Vi===0)break A;Vi--,Nt+=ai[Ui++]<>>16^65535)){Re.msg="invalid stored block lengths",UA.mode=30;break}if(UA.length=65535&Nt,Gt=Nt=0,UA.mode=15,St===6)break A;case 15:UA.mode=16;case 16:if(Qo=UA.length){if(Vi>>=5,Gt-=5,UA.ndist=1+(31&Nt),Nt>>>=5,Gt-=5,UA.ncode=4+(15&Nt),Nt>>>=4,Gt-=4,286>>=3,Gt-=3}for(;UA.have<19;)UA.lens[cS[UA.have++]]=0;if(UA.lencode=UA.lendyn,UA.lenbits=7,TI={bits:UA.lenbits},Vl=T(0,UA.lens,0,19,UA.lencode,0,UA.work,TI),UA.lenbits=TI.bits,Vl){Re.msg="invalid code lengths set",UA.mode=30;break}UA.have=0,UA.mode=19;case 19:for(;UA.have>>16&255,_I=65535&Yg,!((Tr=Yg>>>24)<=Gt);){if(Vi===0)break A;Vi--,Nt+=ai[Ui++]<>>=Tr,Gt-=Tr,UA.lens[UA.have++]=_I;else{if(_I===16){for(oE=Tr+2;Gt>>=Tr,Gt-=Tr,UA.have===0){Re.msg="invalid bit length repeat",UA.mode=30;break}Va=UA.lens[UA.have-1],Qo=3+(3&Nt),Nt>>>=2,Gt-=2}else if(_I===17){for(oE=Tr+3;Gt>>=Tr)),Nt>>>=3,Gt-=3}else{for(oE=Tr+7;Gt>>=Tr)),Nt>>>=7,Gt-=7}if(UA.have+Qo>UA.nlen+UA.ndist){Re.msg="invalid bit length repeat",UA.mode=30;break}for(;Qo--;)UA.lens[UA.have++]=Va}}if(UA.mode===30)break;if(UA.lens[256]===0){Re.msg="invalid code -- missing end-of-block",UA.mode=30;break}if(UA.lenbits=9,TI={bits:UA.lenbits},Vl=T(P,UA.lens,0,UA.nlen,UA.lencode,0,UA.work,TI),UA.lenbits=TI.bits,Vl){Re.msg="invalid literal/lengths set",UA.mode=30;break}if(UA.distbits=6,UA.distcode=UA.distdyn,TI={bits:UA.distbits},Vl=T(W,UA.lens,UA.nlen,UA.ndist,UA.distcode,0,UA.work,TI),UA.distbits=TI.bits,Vl){Re.msg="invalid distances set",UA.mode=30;break}if(UA.mode=20,St===6)break A;case 20:UA.mode=21;case 21:if(6<=Vi&&258<=Ir){Re.next_out=Or,Re.avail_out=Ir,Re.next_in=Ui,Re.avail_in=Vi,UA.hold=Nt,UA.bits=Gt,M(Re,ln),Or=Re.next_out,_s=Re.output,Ir=Re.avail_out,Ui=Re.next_in,ai=Re.input,Vi=Re.avail_in,Nt=UA.hold,Gt=UA.bits,UA.mode===12&&(UA.back=-1);break}for(UA.back=0;xg=(Yg=UA.lencode[Nt&(1<>>16&255,_I=65535&Yg,!((Tr=Yg>>>24)<=Gt);){if(Vi===0)break A;Vi--,Nt+=ai[Ui++]<>ac)])>>>16&255,_I=65535&Yg,!(ac+(Tr=Yg>>>24)<=Gt);){if(Vi===0)break A;Vi--,Nt+=ai[Ui++]<>>=ac,Gt-=ac,UA.back+=ac}if(Nt>>>=Tr,Gt-=Tr,UA.back+=Tr,UA.length=_I,xg===0){UA.mode=26;break}if(32&xg){UA.back=-1,UA.mode=12;break}if(64&xg){Re.msg="invalid literal/length code",UA.mode=30;break}UA.extra=15&xg,UA.mode=22;case 22:if(UA.extra){for(oE=UA.extra;Gt>>=UA.extra,Gt-=UA.extra,UA.back+=UA.extra}UA.was=UA.length,UA.mode=23;case 23:for(;xg=(Yg=UA.distcode[Nt&(1<>>16&255,_I=65535&Yg,!((Tr=Yg>>>24)<=Gt);){if(Vi===0)break A;Vi--,Nt+=ai[Ui++]<>ac)])>>>16&255,_I=65535&Yg,!(ac+(Tr=Yg>>>24)<=Gt);){if(Vi===0)break A;Vi--,Nt+=ai[Ui++]<>>=ac,Gt-=ac,UA.back+=ac}if(Nt>>>=Tr,Gt-=Tr,UA.back+=Tr,64&xg){Re.msg="invalid distance code",UA.mode=30;break}UA.offset=_I,UA.extra=15&xg,UA.mode=24;case 24:if(UA.extra){for(oE=UA.extra;Gt>>=UA.extra,Gt-=UA.extra,UA.back+=UA.extra}if(UA.offset>UA.dmax){Re.msg="invalid distance too far back",UA.mode=30;break}UA.mode=25;case 25:if(Ir===0)break A;if(Qo=ln-Ir,UA.offset>Qo){if((Qo=UA.offset-Qo)>UA.whave&&UA.sane){Re.msg="invalid distance too far back",UA.mode=30;break}Qo>UA.wnext?(Qo-=UA.wnext,Il=UA.wsize-Qo):Il=UA.wnext-Qo,Qo>UA.length&&(Qo=UA.length),GC=UA.window}else GC=_s,Il=Or-UA.offset,Qo=UA.length;for(Irbi?(Ot=Il[GC+xA[St]],Li=Gt[iE+xA[St]]):(Ot=96,Li=0),SA=1<>Or)+(OA-=SA)]=ki<<24|Ot<<16|Li,OA!==0;);for(SA=1<>=1;if(SA!==0?(Nt&=SA-1,Nt+=SA):Nt=0,St++,--ln[Re]==0){if(Re===ai)break;Re=W[oA+xA[St]]}if(_s{const M=new Uint8Array(D).slice(4);let T;try{T=Rl.inflate(M,{to:"string"})}catch(P){console.error("inflate error",P)}return T})(s.data):function(D){const M=new Uint8Array(D);let T="",P=0;const{length:W}=M;for(;P0)for(let kA=0;kA{var u;const{uplinkData:E,canResend:m,resolve:D,reject:M,timeout:T}=r;if(m){this._pendingRequests.set(g,{resolve:D,reject:M,timestamp:Date.now(),uplinkData:E,timeout:T,canResend:m});const P=this._isBinarySupported?Ga(E).buffer:E;(u=this._socketAdapter)===null||u===void 0||u.send(P)}else this._pendingRequests.delete(g)})}_onConnect(s){const{socketId:r,event:g={}}=s||{};this._connectionId=r,this._connectionEstablishedTime=Date.now();const u=Date.now()-this._connectionStartTime,E=`${It}.onConnect cost:${u} ms. socketID:${r} res:${JSON.stringify(g)}`;if(this._ssoLog({method:"onConnect",message:E}),this._checkPendingRequestsAndResend(),this._sendHeartbeatIfReady(),this._isReconnecting){const m=`${It}.reconnect success`;this._ssoLog({method:"reconnectSuccess",message:m}),gn.emitInnerEvent(He.RECONNECTED),this._isReconnecting=!1}this._resetReconnectDelay(),this._handleConnectStateChange({state:Wi,shouldEmitEvent:!0,shouldAttemptReconnect:!1})}_sendAck(s){const r=Ea({servcmd:"openim.ws_msg_push_ack",data:{SessionData:s}});this.sendPacket(r)}_executeScheduledTaskIfReady(){return mA(this,void 0,void 0,function*(){this._clearTimeoutRequest(),this._sendHeartbeatIfReady()})}_canSendHeartbeat(){var s;return((s=this._socketAdapter)===null||s===void 0?void 0:s.isConnected())&&Date.now()>=this._nextHeartbeatAt&&!this._isHeartbeatInProgress}_sendHeartbeat(){return mA(this,void 0,void 0,function*(){var s;const r=Ea({servcmd:"heartbeat.alive",data:{}});try{const g=`${r.head.seq}${r.head.servcmd}`;yield this.sendPacket(r,{requestId:g,timeout:3e3})}catch(g){const u=(s=eo.get("netWorkMonitor"))===null||s===void 0?void 0:s.isNetworkOnline,E=`${It}.sendHeartbeat failed. isNetWorkOnline:${u} error: ${en(g)}`;this._ssoLog({method:"sendHeartbeatError",message:E}),this._handleConnectStateChange({state:vi,shouldEmitEvent:!0,shouldAttemptReconnect:!0})}})}_sendHeartbeatIfReady(){return mA(this,void 0,void 0,function*(){this._canSendHeartbeat()&&(this._isHeartbeatInProgress=!0,yield this._sendHeartbeat(),this._isHeartbeatInProgress=!1)})}_updateHeartbeatTime(){this._nextHeartbeatAt=Co?Date.now()+5e3:Date.now()+1e4}_handleNetworkStatusChange(s){const r=`${It}.networkStatusChange ${JSON.stringify(s)}`;this._ssoLog({method:"networkStatusChange",message:r});const{isNetworkOnline:g,networkType:u}=s;g&&u!=="none"?this._handleConnectStateChange({state:Wi,shouldEmitEvent:!1,shouldAttemptReconnect:!0,reason:Mg}):this._handleConnectStateChange({state:vi,shouldEmitEvent:!1,shouldAttemptReconnect:!0,reason:Mg})}isPrivateNetWork(){const s=eo.get("instance")||{};return s.proxyServer&&!s.fileDownloadProxy}_handleConnectStateChange(s){const{state:r,shouldAttemptReconnect:g,shouldEmitEvent:u,reason:E}=s,m=`${It}._handleConnectStateChange currentConnectState: ${this._currentConnectState} shouldAttemptReconnect: ${g} shouldEmitEvent: ${u} reason: ${E}`;this._currentConnectState!==r&&(this._ssoLog({method:"handleConnectStateChange",message:m}),u&&(Vt.info("_handleConnectStateChange",` from ${this._currentConnectState} to ${r}`),gn.emitOuterEvent("netStateChange",{name:"netStateChange",data:{state:r}}),this._currentConnectState=r,r===vi&&gn.emitInnerEvent(He.SOCKET_DISCONNECTED)),g&&(this._resetReconnectDelay(),fn.addTask({id:qi,intervalMs:this._intendedDelay,callback:this._scheduleReconnectWithBackoff,context:this})))}_handleActivityStatusChange(s){var r,g;const u=(g=(r=this._socketAdapter)===null||r===void 0?void 0:r._ws)===null||g===void 0?void 0:g.readyState,E=`${It}.activityStatusChange ${JSON.stringify(s)} readyState: ${u}`;Vt.debug("activityStatusChange",E),u===3&&this._handleConnectStateChange({state:vi,shouldEmitEvent:!0,shouldAttemptReconnect:!0,reason:ar})}_resetReconnectDelay(){var s;Vt.debug(`${It}._resetReconnectDelay`),fn.removeTask(qi);const r=(s=eo.get("activityMonitor"))===null||s===void 0?void 0:s.isActive;this._intendedDelay=r?zo:1e3}_scheduleReconnectWithBackoff(){var s;const r=(s=eo.get("activityMonitor"))===null||s===void 0?void 0:s.isActive;this._intendedDelay=r?Math.min(5e3,Math.max(zo,1.5*this._intendedDelay)):Math.min(3e5,Math.max(1e3,1.5*this._intendedDelay));const g=new Date().toTimeString().slice(0,8),u=`${It}.scheduleReconnectWithBackoff timeStr: ${g} intendedDelay: ${this._intendedDelay}`;Vt.debug(u),this.reconnect(),fn.updateTaskInterval(qi,this._intendedDelay)}_ssoLog(s){const{method:r,message:g}=s;Vt.info(r,g)}_diagnose(){this.isPrivateNetWork()||(this._lastDiagnoseAt=Date.now(),function(s){mA(this,void 0,void 0,function*(){const r=s.split("/")[2];if(!r.startsWith("ws"))return;const g=`https://${r}/v3/netcheck/getconninfo?${s.slice(s.indexOf("info?")+5)}&reqtime=${Date.now()}`;try{yield Yi({method:"GET",url:g,data:{}})}catch(u){Vt.warn("diagnoseBySSO",`diagnoseBySSO failed. error:${u.message}`)}})}(this._url),function(s){mA(this,void 0,void 0,function*(){const r=`https://boce-cdn.my-imcloud.com/v3/netcheck/getconninfo?${s.slice(s.indexOf("info?")+5)}&reqtime=${Date.now()}`;try{yield Yi({method:"GET",url:r,data:{}})}catch(g){Vt.warn(`diagnoseByCDN', 'diagnoseByCDN failed. error:${g.message}`)}})}(this._url),this._beforeSendInterceptors=[])}_clearTimeoutRequest(){for(const[s,r]of this._pendingRequests.entries()){const{reject:g,timestamp:u,timeout:E}=r;Date.now()-u>=E&&(this._pendingRequests.delete(s),Date.now()-this._lastDiagnoseAt>=3e4&&this._diagnose(),g({errorCode:mr,errorInfo:"NETWORK_TIMEOUT",data:{requestId:s}}))}}_updateIsBinarySupported(){var s;if(!((s=eo.get("instance"))===null||s===void 0)&&s.devMode)return void(this._isBinarySupported=!1);const r=ds();if((oi||ct&&r==="windows"||ks)&&(this._isBinarySupported=!1),Co){const{uniRuntimeVersion:g=""}=Ao.getSystemInfoSync();(function(u){const E=u.split(".").map(Number),[m=0,D=0,M=0]=E;return m>2||!(m<2)&&(D>2||!(D<2)&&M>=6)})(g)||(this._isBinarySupported=!1)}}_isCompressedData(s){const r=new Uint8Array(s);return r[0]===67&&r[1]===79&&r[2]===77&&r[3]===80}};const De={init:function(s){eo.set("instance",s),Se.init()},destroy:function(){Se.dispose(),eo.clear(),fn.dispose()},notificationCenter:gn,channel:Se,store:eo,ssoLog:Vt,utils:yg,common:vA,constants:lt},vg=s=>typeof s=="function";function rg(s,r,g){const u=g||[];if(!s||!r)return!1;const E=Object.keys(s).filter(D=>!u.includes(D)),m=Object.keys(r).filter(D=>!u.includes(D));return E.length===m.length&&E.every(D=>!!r.hasOwnProperty(D)&&(typeof s[D]=="object"&&s[D]!==null?rg(s[D],r[D],g):s[D]===r[D]))}var Rg;(function(s){s.SDK_READY="sdkStateReady",s.SDK_NOT_READY="sdkStateNotReady",s.SDK_DESTROY="sdkDestroy",s.MESSAGE_RECEIVED="onMessageReceived",s.ROOM_CUSTOM_DATA_RECEIVED="onRoomCustomDataReceived",s.MESSAGE_MODIFIED="onMessageModified",s.MESSAGE_REVOKED="onMessageRevoked",s.MESSAGE_READ_BY_PEER="onMessageReadByPeer",s.MESSAGE_READ_RECEIPT_RECEIVED="onMessageReadReceiptReceived",s.MESSAGE_EXTENSIONS_UPDATED="onMessageExtensionsUpdated",s.MESSAGE_EXTENSIONS_DELETED="onMessageExtensionsDeleted",s.MESSAGE_REACTIONS_UPDATED="onMessageReactionsUpdated",s.CONVERSATION_LIST_UPDATED="onConversationListUpdated",s.TOTAL_UNREAD_MESSAGE_COUNT_UPDATED="onTotalUnreadMessageCountUpdated",s.CONVERSATION_GROUP_LIST_UPDATED="onConversationGroupListUpdated",s.CONVERSATION_IN_GROUP_UPDATED="onConversationInGroupUpdated",s.GROUP_LIST_UPDATED="onGroupListUpdated",s.GROUP_ATTRIBUTES_UPDATED="groupAttributesUpdated",s.GROUP_COUNTER_UPDATED="onGroupCounterUpdated",s.TOPIC_CREATED="onTopicCreated",s.TOPIC_DELETED="onTopicDeleted",s.TOPIC_UPDATED="onTopicUpdated",s.PROFILE_UPDATED="onProfileUpdated",s.USER_STATUS_UPDATED="onUserStatusUpdated",s.BLACKLIST_UPDATED="blacklistUpdated",s.FRIEND_LIST_UPDATED="onFriendListUpdated",s.FRIEND_GROUP_LIST_UPDATED="onFriendGroupListUpdated",s.FRIEND_APPLICATION_LIST_UPDATED="onFriendApplicationListUpdated",s.MY_FOLLOWERS_LIST_UPDATED="onMyFollowersListUpdated",s.MY_FOLLOWING_LIST_UPDATED="onMyFollowingListUpdated",s.MUTUAL_FOLLOWERS_LIST_UPDATED="onMutualFollowersListUpdated",s.KICKED_OUT="kickedOut",s.ERROR="error",s.NET_STATE_CHANGE="netStateChange",s.ALL_RECEIVE_MESSAGE_OPT_UPDATED="onAllReceiveMessageOptUpdated",s.SERVER_CONFIG_UPDATED="onServerConfigUpdated",s.PINNED_GROUP_MESSAGE_UPDATED="onPinnedGroupMessageUpdated",s.WEB_PUSH_MESSAGE_RECEIVED="onWebPushMessageReceived",s.GROUP_ONLINE_MEMBER_COUNT_CHANGED="onGroupOnlineMemberCountChanged",s.RICH_STATUS_CHANGED="onRichStatusChanged"})(Rg||(Rg={}));var Dn,Mr=Rg;(function(s){s.LOGOUT="logout",s.DESTROY="destroy",s.CLOUD_CONFIG_UPDATE="cloud_config_update",s.PROFILE_UPDATE="profile_updated",s.ERROR="error",s.RECONNECTED="reconnected",s.FORCE_OFFLINE="im_open_status.stat_forceoffline",s.COMMERCIAL_CONFIG_PUSH="im_sdk_config_mgr.push_imsdk_purchase_bitsv2",s.OVERLOAD_PUSH="OverLoadPush.notify2",s.NEW_MESSAGE="new_message",s.MESSAGE_PUSH="im_open_push.msg_push",s.MESSAGE_DELETED="message_deleted",s.MESSAGE_REVOKED="message_revoked",s.MESSAGE_MODIFIED="message_modified",s.SOCKET_DISCONNECTED="socket_disconnected",s.CONVERSATION_UPDATED="conversation_updated",s.TOPIC_MESSAGE_DELETED="topic_message_deleted",s.TOPIC_MESSAGE_REVOKED="topic_message_revoked",s.TOPIC_MESSAGE_MODIFIED="topic_message_modified",s.TOPIC_NEW_MESSAGE="topic_new_message",s.QUALITY_STAT="quality_stat",s.SYNC_CONVERSATION_LIST="sync_conversation_list",s.HISTORY_MESSAGE_FETCHED="history_message_fetched"})(Dn||(Dn={}));var Ei,ro=Dn;(function(s){s.NEW_INVITATION_RECEIVED="newInvitationReceived",s.INVITEE_ACCEPTED="ts_invitee_accepted",s.INVITEE_REJECTED="ts_invitee_rejected",s.INVITATION_CANCELLED="ts_invitation_cancelled",s.INVITATION_TIMEOUT="ts_invitation_timeout",s.INVITATION_MODIFIED="ts_invitation_modified"})(Ei||(Ei={}));var qc=Ei;const zg=Object.assign({},{KICKED_OUT_MULT_ACCOUNT:"multipleAccount",KICKED_OUT_MULT_DEVICE:"multipleDevice",KICKED_OUT_USERSIG_EXPIRED:"userSigExpired",KICKED_OUT_REST_API:"REST_API_Kick"}),wg={MSG_TEXT:"TIMTextElem",MSG_IMAGE:"TIMImageElem",MSG_AUDIO:"TIMSoundElem",MSG_FILE:"TIMFileElem",MSG_FACE:"TIMFaceElem",MSG_VIDEO:"TIMVideoFileElem",MSG_LOCATION:"TIMLocationElem",MSG_GRP_TIP:"TIMGroupTipElem",MSG_GRP_SYS_NOTICE:"TIMGroupSystemNoticeElem",MSG_CUSTOM:"TIMCustomElem",MSG_MERGER:"TIMRelayElem",MSG_STREAM:"TIMStreamElem"};var Yr;(function(s){s.UNSENT="unSend",s.SUCCESS="success",s.FAIL="fail"})(Yr||(Yr={}));const yc={modify:ro.MESSAGE_MODIFIED,delete:ro.MESSAGE_DELETED,revoke:ro.MESSAGE_REVOKED};var Kc;(function(s){s[s.FORWARD=0]="FORWARD",s[s.BACKWARD=1]="BACKWARD"})(Kc||(Kc={}));const ag=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},wg),{MSG_PRIORITY_HIGH:"High",MSG_PRIORITY_NORMAL:"Normal",MSG_PRIORITY_LOW:"Low",MSG_PRIORITY_LOWEST:"Lowest"}),{RECEIVE_WITH_OFFLINE_PUSH_EXCEPT_AT:"AcceptNotNotifyExceptAt",NOT_RECEIVE_OFFLINE_PUSH_EXCEPT_AT:"AcceptNotNotifyExceptAt",NOT_RECEIVE_MSG_EXCEPT_AT:"NotReceiveMsgExceptAt",MSG_AT_ALL:"__kImSDK_MesssageAtALL__"}),{MSG_REMIND_ACPT_AND_NOTE:"AcceptAndNotify",MSG_REMIND_ACPT_NOT_NOTE:"AcceptNotNotify",MSG_REMIND_DISCARD:"Discard"}),{MessageStatus:Yr,Direction:Kc}),Tu={[yc.modify]:ro.TOPIC_MESSAGE_MODIFIED,[yc.delete]:ro.TOPIC_MESSAGE_DELETED,[yc.revoke]:ro.TOPIC_MESSAGE_REVOKED},DE={GENDER_UNKNOWN:"Gender_Type_Unknown",GENDER_FEMALE:"Gender_Type_Female",GENDER_MALE:"Gender_Type_Male",USER_STATUS_UNKNOWN:0,USER_STATUS_ONLINE:1,USER_STATUS_OFFLINE:2,USER_STATUS_UNLOGINED:3,USER_NOT_FOUND:"@TLS#NOT_FOUND"},_g=Object.assign({},DE),ka={CONV_C2C:"C2C",CONV_GROUP:"GROUP",CONV_TOPIC:"TOPIC",CONV_SYSTEM:"@TIM#SYSTEM"},Dc=Object.assign(Object.assign(Object.assign(Object.assign({},ka),{CONV_AT_ME:1,CONV_AT_ALL:2,CONV_AT_ALL_AT_ME:3}),{CONV_MARK_TYPE_STAR:1,CONV_MARK_TYPE_UNREAD:2,CONV_MARK_TYPE_FOLD:4,CONV_MARK_TYPE_HIDE:8}),{READ_ALL_C2C_MSG:"readAllC2CMessage",READ_ALL_GROUP_MSG:"readAllGroupMessage",READ_ALL_MSG:"readAllMessage"}),SE=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},{SNS_TYPE_NO_RELATION:"CheckResult_Type_NoRelation",SNS_TYPE_A_WITH_B:"CheckResult_Type_AWithB",SNS_TYPE_B_WITH_A:"CheckResult_Type_BWithA",SNS_TYPE_BOTH_WAY:"CheckResult_Type_BothWay"}),{ALLOW_TYPE_ALLOW_ANY:"AllowType_Type_AllowAny",ALLOW_TYPE_NEED_CONFIRM:"AllowType_Type_NeedConfirm",ALLOW_TYPE_DENY_ANY:"AllowType_Type_DenyAny"}),{SNS_ADD_TYPE_SINGLE:"Add_Type_Single",SNS_ADD_TYPE_BOTH:"Add_Type_Both"}),{SNS_DELETE_TYPE_SINGLE:"Delete_Type_Single",SNS_DELETE_TYPE_BOTH:"Delete_Type_Both"}),{SNS_APPLICATION_TYPE_BOTH:"Pendency_Type_Both",SNS_APPLICATION_SENT_TO_ME:"Pendency_Type_ComeIn",SNS_APPLICATION_SENT_BY_ME:"Pendency_Type_SendOut",SNS_APPLICATION_AGREE:"Response_Action_Agree",SNS_APPLICATION_AGREE_AND_ADD:"Response_Action_AgreeAndAdd"}),{SNS_CHECK_TYPE_BOTH:"CheckResult_Type_Both",SNS_CHECK_TYPE_SINGLE:"CheckResult_Type_Single"}),{FORBID_TYPE_NONE:"AdminForbid_Type_None",FORBID_TYPE_SEND_OUT:"AdminForbid_Type_SendOut"}),La={GRP_WORK:"Private",GRP_PUBLIC:"Public",GRP_MEETING:"ChatRoom",GRP_AVCHATROOM:"AVChatRoom",GRP_COMMUNITY:"Community",GRP_ROOM:"Room",GRP_LIVE:"Live"},na={COMMUNITY:"@TGS#_",TOPIC:"@TOPIC#_"},Tg={JOINED:1,QUITTED:2,KICKED:3,ADMIN_SET:4,ADMIN_CANCELED:5,GROUP_PROFILE_UPDATED:6,GROUP_MEMBER_PROFILE_UPDATED:7,TOPIC_PROFILE_UPDATED:8},cI=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},La),{GRP_MBR_ROLE_OWNER:"Owner",GRP_MBR_ROLE_ADMIN:"Admin",GRP_MBR_ROLE_MEMBER:"Member",GRP_MBR_ROLE_CUSTOM:"Custom"}),{GRP_TIP_MBR_JOIN:1,GRP_TIP_MBR_QUIT:2,GRP_TIP_MBR_KICKED_OUT:3,GRP_TIP_MBR_SET_ADMIN:4,GRP_TIP_MBR_CANCELED_ADMIN:5,GRP_TIP_GRP_PROFILE_UPDATED:6,GRP_TIP_MBR_PROFILE_UPDATED:7,GRP_TIP_BAN_AVCHATROOM_MEMBER:10,GRP_TIP_UNBAN_AVCHATROOM_MEMBER:11}),{JOIN_OPTIONS_FREE_ACCESS:"FreeAccess",JOIN_OPTIONS_NEED_PERMISSION:"NeedPermission",JOIN_OPTIONS_DISABLE_APPLY:"DisableApply",JOIN_STATUS_SUCCESS:"JoinedSuccess",JOIN_STATUS_ALREADY_IN_GROUP:"AlreadyInGroup",JOIN_STATUS_WAIT_APPROVAL:"WaitAdminApproval"}),{INVITE_OPTIONS_DISABLE_INVITE:"DisableInvite",INVITE_OPTIONS_NEED_PERMISSION:"NeedPermission",INVITE_OPTIONS_FREE_ACCESS:"FreeAccess"}),{GRP_PROFILE_OWNER_ID:"ownerID",GRP_PROFILE_CREATE_TIME:"createTime",GRP_PROFILE_LAST_INFO_TIME:"lastInfoTime",GRP_PROFILE_MEMBER_NUM:"memberNum",GRP_PROFILE_MAX_MEMBER_NUM:"maxMemberNum",GRP_PROFILE_JOIN_OPTION:"joinOption",GRP_PROFILE_INVITE_OPTION:"inviteOption",GRP_PROFILE_INTRODUCTION:"introduction",GRP_PROFILE_NOTIFICATION:"notification",GRP_PROFILE_MUTE_ALL_MBRS:"muteAllMembers"}),{GROUP_ID_PREFIX:na,GROUP_TIPS_OPERATION_TYPE:Tg}),Bs={IOS_OFFLINE_PUSH_NO_SOUND:"push.no_sound",IOS_OFFLINE_PUSH_DEFAULT_SOUND:"default"},Uo=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},zg),ag),_g),Dc),SE),cI),Bs),{NET_STATE_CONNECTING:"connecting",NET_STATE_DISCONNECTED:"disconnected",NET_STATE_CONNECTED:"connected"}),da={NO_SDKAPPID:2e3,NO_TINYID:2022,NO_A2KEY:2023,USER_NOT_LOGGED_IN:2024,REPEAT_LOGIN:2025,MSG_SEND_FAIL:2100,MSG_SEND_FAIL_NOT_IN_AV:2101,MSG_SEND_GRP_WITH_TOPIC_FAIL:2115,MSG_INSTANCE_REQUIRED:2105,MSG_INVALID_CONV_TYPE:2106,MSG_REVOKE_FAIL:2110,MSG_DELETE_FAIL:2111,MSG_UNREAD_ALL_FAIL:2112,READ_RECEIPT_MSG_LIST_EMPTY:2114,CANNOT_DELETE_GRP_SYSTEM_NOTICE:2116,NOT_MY_FRIEND:2700,NETWORK_ERROR:2800,NETWORK_TIMEOUT:2801,NO_NETWORK:2805,UNCAUGHT_ERROR:2903,INVALID_OPERATION:2905,SDK_IS_NOT_READY:2999,LOGGING_IN:3e3,LOGIN_FAILED:3001,KICKED_OUT_MULT_DEVICE:3002,KICKED_OUT_MULT_ACCOUNT:3003,KICKED_OUT_USERSIG_EXPIRED:3004,LOGGED_OUT:3005,KICKED_OUT_REST_API:3006,NO_USE:3122,OPTIONS_IS_EMPTY:3153,MSG_A2KEY_EXPIRED:20002,ACCOUNT_A2KEY_EXPIRED:70001,HELLO_ANSWER_KICKED_OUT:1002,OPEN_SERVICE_OVERLOAD_ERROR:60022},gr={BASIC:"1",STANDARD:"2",PROFESSIONAL:"3",NODE:"4"},Jt={SYNC_SERVER_INFO_AFTER_RE_ONLINE:"sync-server-info-after-re-online",SYNC_SERVER_INFO_AFTER_LOGIN:"sync-server-info-after-login",RECEIVE_C2C_NEW_MESSAGE:"receive-c2c-new-message",RECEIVE_GROUP_NEW_MESSAGE:"receive-group-new-message",RECEIVE_GROUP_TIPS_NOTIFICATION:"receive-group-tips-notification"},Wt={USER_STATUS_UPDATE:"user-status-update",CONVERSATION_RECOVER:"conversation-recover",HISTORY_MESSAGE_RECOVER:"history-message-recover",BLACKLIST_RECOVER:"blacklist-recover",FRIEND_RECOVER:"friend-recover",GROUP_ATTRIBUTE_CACHE_CLEAR:"group-attribute-cache-clear",UNREAD_MESSAGE_RECOVER:"unread-message-recover",HANDLE_NEW_MESSAGE:"handle-new-message",HANDLE_CONVERSATION_PROFILE_UPDATED:"handle-conversation-profile-updated",COMMERCIAL_CONFIG_UPDATE:"commercial-config-update",UNREAD_MESSAGE_SYNC:"unread-message-sync",FRIEND_AND_BLACKLIST_SYNC:"friend-and-blacklist-sync",SIGNALING_MESSAGE_RECOVER:"signaling-message-recover",GROUP_LIST_SYNC:"group-list-sync",CONVERSATION_LIST_SYNC:"conversation-list-sync",USER_PROFILE_SYNC:"user-profile-sync",CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED:"conversation-update-after-unread-sync-finished",CONVERSATION_UPDATE_AFTER_GROUP_LIST_SYNC_FINISHED:"conversation-update-after-group-list-sync-finished",HANDLE_C2C_NEW_MESSAGE:"handle-c2c-new-message",HANDLE_GROUP_NEW_MESSAGE:"handle-group-new-message",CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE:"create-or-update-conversation-by-receive-new-message",HANDLE_GROUP_TIPS_FROM_SYNC_UNREAD:"handle-group-tips-from-sync-unread",HANDLE_C2C_REVOKED_MESSAGE_FROM_SYNC_UNREAD:"handle-c2c-revoked-message-from-sync-unread",GROUP_REVOKED_NOTICE_RECOVER:"group-revoked-notice-recover",CLOUD_CONFIG_SYNC:"cloud-config-sync",UPDATE_GROUP_NEXT_SEQUENCE:"update-group-next-sequence",EMIT_C2C_MESSAGE_EVENT:"emit-c2c-message-event",EMIT_GROUP_MESSAGE_EVENT:"emit-group-message-event",CONVERSATION_GROUP_LIST_SYNC:"conversation-group-list-sync",CONVERSATION_GROUP_UPDATE:"conversation-group-update",UPDATE_TOPIC_AFTER_UNREAD_SYNC_FINISHED:"update-topic-after-unread-sync-finished",UPDATE_TOPIC_BY_RECEIVE_NEW_MESSAGE:"update-topic-by-received-new-message",TOPIC_REQUEST_INFO_RESET:"topic-request-info-reset",QUALITY_REPORT:"quality-report",GROUP_TIPS_RECOVER:"group-tips-recover",HANDLE_GROUP_TIPS_NOTIFICATION:"handle-group-tips-notification",C2C_HISTORY_MESSAGE_RECOVER:"c2c-history-message-recover",FRIEND_APPLICATION_LIST_RECOVER:"friend-application-list-recover",EMIT_GROUP_TIPS_EVENT:"emit-group-tips-event",STREAM_MESSAGE_RECOVER:"stream-message-recover"},Ng={[Jt.SYNC_SERVER_INFO_AFTER_RE_ONLINE]:[{stepId:Wt.USER_STATUS_UPDATE},{stepId:Wt.GROUP_ATTRIBUTE_CACHE_CLEAR},{stepId:Wt.UNREAD_MESSAGE_SYNC,dependency:Wt.C2C_HISTORY_MESSAGE_RECOVER},{stepId:Wt.CONVERSATION_RECOVER},{stepId:Wt.HISTORY_MESSAGE_RECOVER,dependency:Wt.CONVERSATION_RECOVER},{stepId:Wt.BLACKLIST_RECOVER},{stepId:Wt.FRIEND_RECOVER},{stepId:Wt.FRIEND_APPLICATION_LIST_RECOVER},{stepId:Wt.GROUP_REVOKED_NOTICE_RECOVER,dependency:Wt.HISTORY_MESSAGE_RECOVER},{stepId:Wt.GROUP_TIPS_RECOVER,dependency:Wt.HISTORY_MESSAGE_RECOVER},{stepId:Wt.TOPIC_REQUEST_INFO_RESET},{stepId:Wt.HANDLE_C2C_REVOKED_MESSAGE_FROM_SYNC_UNREAD,dependency:Wt.UNREAD_MESSAGE_SYNC},{stepId:Wt.HANDLE_GROUP_TIPS_FROM_SYNC_UNREAD,dependency:Wt.UNREAD_MESSAGE_SYNC},{stepId:Wt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,dependency:[Wt.UNREAD_MESSAGE_SYNC,Wt.CONVERSATION_RECOVER]},{stepId:Wt.EMIT_C2C_MESSAGE_EVENT,dependency:[Wt.UNREAD_MESSAGE_SYNC,Wt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED],skipIfDependencyMissing:!1},{stepId:Wt.C2C_HISTORY_MESSAGE_RECOVER,dependency:Wt.CONVERSATION_RECOVER},{stepId:Wt.STREAM_MESSAGE_RECOVER}],[Jt.SYNC_SERVER_INFO_AFTER_LOGIN]:[{stepId:Wt.COMMERCIAL_CONFIG_UPDATE},{stepId:Wt.CLOUD_CONFIG_SYNC},{stepId:Wt.USER_PROFILE_SYNC},{stepId:Wt.UNREAD_MESSAGE_SYNC},{stepId:Wt.FRIEND_AND_BLACKLIST_SYNC},{stepId:Wt.GROUP_LIST_SYNC},{stepId:Wt.CONVERSATION_LIST_SYNC},{stepId:Wt.SIGNALING_MESSAGE_RECOVER,dependency:Wt.UNREAD_MESSAGE_SYNC},{stepId:Wt.UPDATE_TOPIC_AFTER_UNREAD_SYNC_FINISHED,dependency:[Wt.UNREAD_MESSAGE_SYNC]},{stepId:Wt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,dependency:[Wt.UNREAD_MESSAGE_SYNC,Wt.CONVERSATION_LIST_SYNC]},{stepId:Wt.CONVERSATION_UPDATE_AFTER_GROUP_LIST_SYNC_FINISHED,dependency:[Wt.GROUP_LIST_SYNC,Wt.CONVERSATION_LIST_SYNC]},{stepId:Wt.CONVERSATION_GROUP_LIST_SYNC},{stepId:Wt.CONVERSATION_GROUP_UPDATE,dependency:[Wt.CONVERSATION_LIST_SYNC,Wt.CONVERSATION_GROUP_LIST_SYNC]},{stepId:Wt.QUALITY_REPORT}],[Jt.RECEIVE_C2C_NEW_MESSAGE]:[{stepId:Wt.HANDLE_C2C_NEW_MESSAGE},{stepId:Wt.UNREAD_MESSAGE_SYNC},{stepId:Wt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,dependency:Wt.HANDLE_C2C_NEW_MESSAGE},{stepId:Wt.EMIT_C2C_MESSAGE_EVENT,dependency:[Wt.HANDLE_C2C_NEW_MESSAGE,Wt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE],skipIfDependencyMissing:!1},{stepId:Wt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,dependency:[Wt.UNREAD_MESSAGE_SYNC]}],[Jt.RECEIVE_GROUP_NEW_MESSAGE]:[{stepId:Wt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Wt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,dependency:Wt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Wt.UPDATE_GROUP_NEXT_SEQUENCE,dependency:Wt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Wt.UPDATE_TOPIC_BY_RECEIVE_NEW_MESSAGE,dependency:Wt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Wt.EMIT_GROUP_MESSAGE_EVENT,dependency:[Wt.HANDLE_GROUP_NEW_MESSAGE,Wt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE],skipIfDependencyMissing:!1}],[Jt.RECEIVE_GROUP_TIPS_NOTIFICATION]:[{stepId:Wt.HANDLE_GROUP_TIPS_NOTIFICATION},{stepId:Wt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,dependency:Wt.HANDLE_GROUP_TIPS_NOTIFICATION},{stepId:Wt.EMIT_GROUP_TIPS_EVENT,dependency:[Wt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,Wt.HANDLE_GROUP_TIPS_NOTIFICATION],skipIfDependencyMissing:!1}]},lI={MESSAGE_SEND_SUCCESS_RATE:"messageSendSuccessRate"},cr={TOTAL_COUNT:"sendMessageTotalCount",SUCCESS_COUNT:"sendMessageSuccessCount",FAILED_COUNT:"sendMessageFailedCount",SEND_COST:"sendMessageCost"},KI=["login","getMyProfile","getUserProfile","updateMyProfile","setSelfStatus","getUserStatus","subscribeUserStatus","unsubscribeUserStatus","modifyMessage","deleteGroupMember","dismissGroup","getGroupMemberList","getGroupOnlineMemberCount","joinGroup","markGroupMemberList","quitGroup","searchCloudMessages","searchCloudGroups","searchCloudGroupMembers","searchCloudUsers","getMyFollowingList","getMyFollowersList","getMutualFollowersList","followUser","unfollowUser","getUserFollowInfo","checkFollowType","getFriendProfile","addFriend","deleteFriend","updateFriend","checkFriend","setFriendApplicationRead","createFriendGroup","deleteFriendGroup","addToFriendGroup","removeFromFriendGroup","renameFriendGroup","changeGroupOwner","createGroup","dismissGroup","getGroupList","getGroupOnlineMemberCount","getGroupProfile","searchGroupByID","updateGroupProfile","handleGroupApplication","deleteGroupAttributes","getGroupAttributes","initGroupAttributes","setGroupAttributes","addGroupMember","deleteGroupMember","getGroupMemberList","getGroupMemberProfile","setGroupMemberMuteTime","setGroupMemberNameCard","setGroupMemberRole","deleteMessage","revokeMessage","setMessageExtensions","getMessageExtensions","deleteMessageExtensions","getMessageList","addMessageReaction","removeMessageReaction","clearHistoryMessage","sendMessageReadReceipt","getMessageReadReceiptList","getGroupMessageReadMemberList","createMergerMessage","invite","accept","cancel","reject","modifyInvitation","deleteConversation","pinConversation","setMessageRead","setAllMessageRead","getConversationList","getTotalUnreadMessageCount","renameConversationGroup","deleteConversationGroup","markConversation","setConversationCustomData","deleteConversationsFromGroup","addConversationsToGroup","createConversationGroup"];var za=Object.freeze({__proto__:null,ERROR_CODE:da,InnerEvent:ro,NEED_LOG_API:KI,OuterConstant:Uo,OuterEvent:Mr,PUSH:Bs,QUALITY_METRICS:lI,SDK_EDITION:gr,SDK_INFO:{VERSION:"1.7.3",APPID:537048168},SEND_MESSAGE_STAT:cr,SignalingEvent:qc,WEB_PUSH_ACCOUNT_TYPE:1,WORKFLOW_DEFINITIONS:Ng,WORKFLOW_NAME:Jt,WORKFLOW_STEP:Wt}),ra,un,Sn;(function(s){s[s.USER_INITIATED=0]="USER_INITIATED",s[s.KICKED_OUT=1]="KICKED_OUT"})(ra||(ra={})),function(s){s[s.multipleAccount=1]="multipleAccount",s[s.multipleDevice=2]="multipleDevice",s[s.restApi=3]="restApi"}(un||(un={})),function(s){s[s.multipleDevice=3002]="multipleDevice",s[s.multipleAccount=3003]="multipleAccount",s[s.usersigExpired=70001]="usersigExpired",s[s.restApi=20002]="restApi"}(Sn||(Sn={}));const Nu={[un.multipleAccount]:"multipleAccount",[un.multipleDevice]:"multipleDevice",[un.restApi]:"REST_API_Kick",[Sn.multipleAccount]:"multipleAccount",[Sn.multipleDevice]:"multipleDevice",[Sn.restApi]:"REST_API_Kick",[Sn.usersigExpired]:"userSigExpired"},Gg="login_online_presence_task",{ERROR:Ua,DESTROY:jc,FORCE_OFFLINE:jI}=ro,{KICKED_OUT_MULT_ACCOUNT:ME,KICKED_OUT_MULT_DEVICE:II,KICKED_OUT_REST_API:Gu,ACCOUNT_A2KEY_EXPIRED:wl,MSG_A2KEY_EXPIRED:Sc}=da;class bu{init(){const{notificationCenter:r}=De;r.subscribeInnerEvent(jI,this._handleForceOfflineFromServerPush,this),r.subscribeInnerEvent(Ua,Sc,this._handleForceOfflineFromResponse,this,this._isChatLoginEvent),r.subscribeInnerEvent(Ua,wl,this._handleForceOfflineFromResponse,this,this._isChatLoginEvent),r.subscribeInnerEvent(Ua,ME,this._handleForceOfflineFromResponse,this),r.subscribeInnerEvent(Ua,II,this._handleForceOfflineFromResponse,this),r.subscribeInnerEvent(Ua,Gu,this._handleForceOfflineFromResponse,this),r.subscribeInnerEvent(jc,this._dispose,this)}_handleForceOfflineFromServerPush(r){var g;if(((g=De.store.get("login"))===null||g===void 0?void 0:g.isLoggedIn)===!0){const{EventArray:u=[]}=r?.body||{};this._extractKickedOutMessages(u).forEach(E=>{const{KickoutMsgNotify:{KickType:m,NewInstInfo:D,Instid:M}}=E;this._isCurrentInstanceKickedOut(M)&&this._processKickedOutReasonInfo({kickedOutReasonCode:m,newInstanceInfo:D})})}}_extractKickedOutMessages(r){return r.reduce((g,u)=>[...g,...u.C2cNotifyMsgArray||[]],[]).filter(g=>{var u;return this._isKickedOut((u=g?.KickoutMsgNotify)===null||u===void 0?void 0:u.KickType)})}_handleForceOfflineFromResponse(r){const{errorCode:g}=r;this._processKickedOutReasonInfo({kickedOutReasonCode:g})}_processKickedOutReasonInfo(r){return mA(this,void 0,void 0,function*(){const{kickedOutReasonCode:g}=r,{ssoLog:u,utils:{safeStringify:E}}=De;try{this._logKickedOutEvent(r),this._shouldLogoutAfterKickedOut(g)?yield De.login.loginAction.logout(ra.KICKED_OUT):De.login.loginAction.handleLogoutCompleted()}catch(m){u.debug("_processKickedOutReasonInfo",` fail ${E(m)}`)}finally{De.notificationCenter.emitOuterEvent(Mr.KICKED_OUT,{data:{type:Nu[g]},name:Mr.KICKED_OUT})}})}_logKickedOutEvent(r){const{kickedOutReasonCode:g,newInstanceInfo:u={}}=r,E=`type:${Nu[g]} newInstanceInfo: ${JSON.stringify(u)}`;De.ssoLog.warn("kickedOut",E)}_isKickedOut(r){return[un.multipleAccount,un.multipleDevice,un.restApi].includes(r)}_isChatLoginEvent(r){const{requestHead:g}=r||{};return g?.idtype!==1}_shouldLogoutAfterKickedOut(r){return![Sn.usersigExpired,un.restApi].includes(r)}_isCurrentInstanceKickedOut(r){const{isLoggedIn:g,statusInstanceId:u}=De.store.get("login")||{};return g===!0&&r===u}_dispose(){const{notificationCenter:r}=De;r.unSubscribeInnerEvent(jI,this._handleForceOfflineFromServerPush,this),r.unSubscribeInnerEvent(Ua,wl,this._handleForceOfflineFromResponse,this),r.unSubscribeInnerEvent(Ua,Sc,this._handleForceOfflineFromResponse,this),r.unSubscribeInnerEvent(Ua,ME,this._handleForceOfflineFromResponse,this),r.unSubscribeInnerEvent(Ua,II,this._handleForceOfflineFromResponse,this),r.unSubscribeInnerEvent(Ua,Gu,this._handleForceOfflineFromResponse,this),r.unSubscribeInnerEvent(jc,this._dispose,this)}}function ku(s){return mA(this,void 0,void 0,function*(){const r="im_open_status.wslogin",g=De.common.generateProtocolData({servcmd:r,data:{State:"Online",is_web_uniapp:0,InstType:0,CustomInfo:s}}),u=`${g.head.seq}${r}`,E=yield De.channel.sendPacket(g,{timeout:9e4,requestId:u});if(E){const{HelloInterval:m,InstId:D,TinyId:M,TimeStamp:T,CustomStatus:P,PurchaseBits:W,A2Key:oA,RichMsgAuthKey:EA,ErrorCode:wA,ErrorInfo:kA,ActionStatus:xA}=E;return{helloInterval:m,instanceID:D,tinyID:M,timeStamp:T,customStatus:P,purchaseBits:W,a2Key:oA,authKey:EA,errorCode:wA,errorInfo:kA,actionStatus:xA}}})}function _l(){const{store:s}=De;return ua(s.get("instance").sdkAppId)!==gt.CHINA}function rs(s){var r;try{const g=eo.getStorage("errorMessage");if(!s||!g)return"";const u=((r=JSON.parse(g))===null||r===void 0?void 0:r.errorMessage)||{},{code:E,replacement1:m="",replacement2:D=""}=s;if(!E)return"";const M=_l()?`${E}_en`:`${E}_cn`;let T=u[u[M]?M:E]||"";return T&&(m&&(T=T.replace("$replacement1",m)),D&&(T=T.replace("$replacement2",D))),T}catch(g){return console.warn("Error parsing stored error messages:",g),""}}class gs extends Error{constructor(r={}){r.code=r.code||r.errorCode;let{functionName:g="Unknown",code:u,message:E="",data:m="",moreMessage:D="",errorMessage:M=""}=r;M=(u?rs(r):"")||M||E;let T=u?`${g} failed. error: {"message": ${M}, "code": ${u}}`:`${g} failed. error: {"message": ${M}}`;T=`${T} ${D}`,super(),this.code=u,this.errorCode=u,this.errorMessage=M,this.message=T,this.data=m}}function ud(s,r){var g;if(s&&((g=De.store.get("login"))===null||g===void 0?void 0:g.isLoggedIn)!==!0)throw new gs({code:da.USER_NOT_LOGGED_IN,functionName:r})}function uI(s,r,g){if(Array.isArray(s))for(let u=0;u{return P===(W=u,Object.prototype.toString.call(W).match(/^\[object (.*)\]$/)[1].toLowerCase());var W})){for(let W=0;W{const{interceptor:E,context:m}=u;E.apply(m,[g])})}(s)}function Mc(s,r){vE.push({interceptor:s,context:r})}function Wc(s){const{params:r,auth:g}=s;r&&typeof r=="object"&&Object.assign(Tl,r),g&&typeof g=="object"&&Object.assign(Ed,g)}function tn(s){return De.store.get("commercialConfig").get(s)}class ws{constructor(){this._handlers=new Map,this._activeWorkflows=new Map,this._stepStartTimes=new Map,this._logHandlers={start:(r,g)=>{const u=Date.now();g?(this._stepStartTimes.set(`${r}-${g}`,u),De.ssoLog.debug("_executeWorkflowStep",`[Workflow ${r}] Step ${g} started at ${new Date(u).toISOString()}`)):(this._workflowStartTimes.set(r,u),De.ssoLog.debug("_executeWorkflowStep",`[Workflow ${r}] started at ${new Date(u).toISOString()}`))},success:(r,g)=>{const u=Date.now();if(g){const E=this._stepStartTimes.get(`${r}-${g}`),m=E?u-E:0;this._stepStartTimes.delete(`${r}-${g}`),De.ssoLog.debug("_executeWorkflowStep",`[Workflow ${r}] Step ${g} completed successfully at ${new Date(u).toISOString()} (${m}ms)`)}else{const E=this._workflowStartTimes.get(r),m=E?u-E:0;this._workflowStartTimes.delete(r),De.ssoLog.debug("_executeWorkflowStep",`[Workflow ${r}] completed successfully at ${new Date(u).toISOString()} (${m}ms)`)}},error:(r,g,u)=>{const{ssoLog:E,utils:{safeStringify:m}}=De,D=Date.now();if(g){const M=this._stepStartTimes.get(`${r}-${g}`),T=M?D-M:0;this._stepStartTimes.delete(`${r}-${g}`),E.error("_executeWorkflowStep",`[Workflow ${r}] Step ${g} failed at ${new Date(D).toISOString()} (${T}ms) ${m(u)}`,{error:u})}else{const M=this._workflowStartTimes.get(r),T=M?D-M:0;this._workflowStartTimes.delete(r),E.error("_executeWorkflowStep",`[Workflow ${r}] failed at ${new Date(D).toISOString()} (${T}ms) ${m(u)}`,{error:u})}}}}static getInstance(){return ws._instance||(ws._instance=new ws),ws._instance}static setInstance(r){ws._instance=r}init(){this._initializeWorkflows()}registerWorkflowStep(r,g,u,E){if(!this._handlers.has(r))return void De.ssoLog.debug("registerWorkflowStep",`Workflow '${r}' not defined in core`);if(!Ng[r].find(D=>D.stepId===g))return void De.ssoLog.debug("registerWorkflowStep",`Step '${g}' not defined in workflow '${r}'`);const m=this._handlers.get(r);m.has(g)||m.set(g,E?u.bind(E):u)}executeWorkflow(r,g){return mA(this,void 0,void 0,function*(){if(!this._validateWorkflow(r))return;De.ssoLog.debug("executeWorkflow",`[Workflow ${r}] Started execution at ${new Date().toISOString()}`);const u=Ng[r],E={},m={cancelled:!1};this._activeWorkflows.set(r,{cancelToken:m});try{const D=new Map;u.forEach(T=>{D.set(T.stepId,T)});const M={workflowName:r,pendingSteps:new Set(u.map(T=>T.stepId)),completedSteps:new Set,runningSteps:new Set,stepMap:D,stepResults:E,data:g,cancelToken:m};yield new Promise((T,P)=>{const W=()=>{if(m.cancelled)return void T();this._getExecutableSteps({pendingSteps:M.pendingSteps,completedSteps:M.completedSteps,stepMap:M.stepMap,workflowName:r}).filter(oA=>!M.runningSteps.has(oA)).forEach(oA=>{M.completedSteps.has(oA)||M.runningSteps.has(oA)||this._executeWorkflowStep(oA,M,{onComplete:()=>{if(M.pendingSteps.size===0)return void T();this._getExecutableSteps({pendingSteps:M.pendingSteps,completedSteps:M.completedSteps,stepMap:M.stepMap,workflowName:r}).filter(EA=>!M.runningSteps.has(EA)).length===0&&M.runningSteps.size===0&&(De.ssoLog.debug("executeWorkflow",`Workflow ${r} completed with some steps skipped due to dependency failures`),T())},onError:P,onStepComplete:W})})};W()}),De.ssoLog.debug("executeWorkflow",`[Workflow ${r}] Completed execution at ${new Date().toISOString()}`)}catch(D){De.ssoLog.error("executeWorkflow",`[Workflow ${r}] Failed execution at ${new Date().toISOString()}`,{error:D})}finally{this._activeWorkflows.delete(r)}})}_executeWorkflowStep(r,g,u){return mA(this,void 0,void 0,function*(){const{workflowName:E,runningSteps:m,stepMap:D,stepResults:M,data:T}=g;m.add(r),this._logWorkflowExecution(E,r,"start");try{const P=D.get(r);let W=null;P?.dependency&&(c(P.dependency)?W=M[P.dependency]:Array.isArray(P.dependency)&&(W={},P.dependency.forEach(EA=>{W[EA]=M[EA]})));const oA=this._handlers.get(E).get(r);if(oA){const EA=yield Promise.resolve(oA({data:T,result:W}));M[r]=EA,this._logWorkflowExecution(E,r,"success")}g.completedSteps.add(r)}catch(P){const W=`[Workflow].${E}.${r}`,{errorCode:oA,errorInfo:EA=`${W} failed`}=P||{},wA=new gs({functionName:W,code:oA,message:EA});De.ssoLog.error(W,EA,{error:wA}),this._logWorkflowExecution(E,r,"error",P),u.onError(P)}finally{m.delete(r),g.pendingSteps.delete(r),u.onStepComplete(),u.onComplete()}})}reset(){this._cancelAllWorkflows()}destroy(){this.reset(),this._handlers.clear()}_initializeWorkflows(){Object.keys(Ng).forEach(r=>{this._handlers.has(r)||this._handlers.set(r,new Map)})}_cancelWorkFlow(r){const g=this._activeWorkflows.get(r);if(!g)return;const{cancelToken:u}=g;u.cancelled=!0,this._activeWorkflows.delete(r)}_cancelAllWorkflows(){Object.keys(Ng).forEach(r=>{this._cancelWorkFlow(r)})}_validateWorkflow(r){return Ng[r]?!!this._handlers.get(r):!1}_getExecutableSteps(r){const{pendingSteps:g,completedSteps:u,stepMap:E,workflowName:m}=r;return Array.from(g).filter(D=>{const M=E.get(D)||{},{dependency:T,skipIfDependencyMissing:P=!0}=M;if(!T)return!0;if(c(T))return this._isStepRegistered({workflowName:m,stepId:T})?u.has(T):!P;if(C(T)){if(T.filter(W=>!this._isStepRegistered({workflowName:m,stepId:W})).length>0&&P)return!1;for(const W of T)if(!u.has(W))return!1;return!0}return!1})}_isStepRegistered(r){var g;const{workflowName:u,stepId:E}=r;return(g=this._handlers.get(u))===null||g===void 0?void 0:g.has(E)}_logWorkflowExecution(r,g,u,E){this._logHandlers[u](r,g)}}const Ca=new Map,$r=({type:s,groupID:r})=>s===Uo.GRP_COMMUNITY||`${r}`.startsWith(na.COMMUNITY)&&!`${r}`.includes(na.TOPIC),zc=(s="")=>{const r=s.startsWith("GROUP")?s.replace("GROUP",""):s;return r.startsWith(na.COMMUNITY)&&`${r}`.includes(na.TOPIC)},dd="openim",Zg="million_group_open_http_svc";function gg(s){return mA(this,void 0,void 0,function*(){const{servcmd:r,data:g}=function(m){const{data:D}=m;return RE(D)||Xg(D)}(s)?function(m){let{servcmd:D,data:M}=m;return Xg(M)?function(T){const{servcmd:P,data:W}=T;let{GroupId:oA=""}=W;const EA=oA;return[oA]=EA.split(na.TOPIC),{servcmd:jn(P),data:Object.assign(Object.assign({},W),{GroupId:oA,TopicId:EA})}}(m):(RE(M)&&(D=jn(D)),{servcmd:D,data:M})}(s):s,u=De.common.generateProtocolData({servcmd:r,data:g}),E=`${u.head.seq}${r}`;return De.channel.sendPacket(u,{requestId:E,timeout:s.timeout})})}function RE(s){const{Type:r,GroupId:g,GroupIdList:u=[]}=s,E=g||u[0]||"";return $r({type:r,groupID:E})}function Xg(s){const{GroupId:r=""}=s;return zc(r)}function jn(s){if(s.includes(dd))return s;const r=s.split(".")[1];return`${Zg}.${r}`}function ir(){var s;return(s=De.store.get("login"))===null||s===void 0?void 0:s.userId}const Fa=s=>C(s)||f(s),Cd=(s,r,g,u)=>{if(!Fa(s)||!Fa(r))return 0;let E=0;const m=Object.keys(r);let D;for(let M=0,T=m.length;M{if(n(r))return"";if(s===Uo.MSG_TEXT)return r.text||"";const g=WI[s];return g?Lu(g):""},Xc=[{cmd:"ws_get_user_status",interval:5,count:20},{cmd:"ws_status_subscribe",interval:5,count:20},{cmd:"ws_status_unsubscribe",interval:5,count:20},{cmd:"get_group_self_member_info",interval:5,count:20},{cmd:"modify_group_base_info",interval:1,count:8},{cmd:"get_pendency",interval:1,count:15},{cmd:"set_group_attr",interval:5,count:10},{cmd:"modify_group_attr",interval:5,count:10},{cmd:"delete_group_attr",interval:5,count:10},{cmd:"clear_group_attr",interval:5,count:10},{cmd:"get_group_attr",interval:5,count:20},{cmd:"update_group_counter",interval:5,count:20},{cmd:"get_group_counter",interval:5,count:20},{cmd:"get_topic",interval:1,count:10},{cmd:"read_all_unread_msg",interval:1,count:1},{cmd:"query",interval:5,count:20}],zI="im_sdk_config_mgr.fetch_config",dI="im_sdk_config_mgr.push_configv2",$c="cloud-config",Al=2996,va=new class{init(s){this.core=s}};function bg(s){return mA(this,void 0,void 0,function*(){const{sdkAppId:r}=va.core.store.get("instance")||{},g=va.core.helper.generateProtocolData({servcmd:zI,data:{uint32_sdkappid:r,uint64_version:s}}),u=`${g.head.seq}${zI}`;return va.core.channel.sendPacket(g,{requestId:u})})}var Ds=new class{constructor(){this._core=null,this._expirationTime=0,this._version=0,this._isFetching=!1,this._cmdFrequencyLimitMap=new Map,this._methodCallFrequencyMap=new Map}install(s){this._core=s;const{notificationCenter:r,InnerEvent:g,helper:u,constants:{WORKFLOW_NAME:E,WORKFLOW_STEP:m},channel:D}=s;r.subscribeInnerEvent(dI,this._handlePushedConfig,this),u.registerWorkflowStep(E.SYNC_SERVER_INFO_AFTER_LOGIN,m.CLOUD_CONFIG_SYNC,this._handleLoginSuccess,this),r.subscribeInnerEvent(g.LOGOUT,this._reset,this),r.subscribeInnerEvent(g.DESTROY,this._dispose,this),u.registerExperimentalAPI("getServerConfig",this),this._updateCmdFreqLimitMap(Xc),D.registerBeforeSendInterceptor(this.checkMethodCallOverLimit,this)}getServerConfig(s){return mA(this,void 0,void 0,function*(){var r;const g={code:0,data:""};return s&&(g.data=((r=this._core.store.get("cloudConfig"))===null||r===void 0?void 0:r[s])||""),g})}checkMethodCallOverLimit(s){if(!this._cmdFrequencyLimitMap.has(s))return;if(!this._methodCallFrequencyMap.has(s))return void this._methodCallFrequencyMap.set(s,{startTime:Date.now(),methodCallCounter:1});const{count:r,interval:g}=this._cmdFrequencyLimitMap.get(s);let{startTime:u,methodCallCounter:E}=this._methodCallFrequencyMap.get(s);if(Date.now()-u>1e3*g)this._methodCallFrequencyMap.set(s,{startTime:Date.now(),methodCallCounter:1});else if(E+=1,this._methodCallFrequencyMap.set(s,{startTime:u,methodCallCounter:E}),E>r)throw new this._core.helper.ChatError({code:Al,replacement1:s})}_handlePushedConfig(s){return mA(this,void 0,void 0,function*(){const{ssoLog:r,utils:{safeStringify:g}}=this._core;r.info("_handlePushedConfig",g(s)),yield this._updateCloudConfig(s)})}_handleLoginSuccess(){return mA(this,void 0,void 0,function*(){const{ssoLog:s,utils:{safeStringify:r}}=this._core;try{if(this._canFetch()){const g=yield bg(this._version);s.info("_fetchCloudConfigIfLogin",r(g)),yield this._updateCloudConfig(g)}this._core.helper.taskScheduler.addTask({id:$c,intervalMs:1e3,callback:this._fetchCloudConfigIfReady,context:this})}catch(g){s.debug("_fetchCloudConfigIfLogin",r(g))}})}_fetchCloudConfigIfReady(){return mA(this,void 0,void 0,function*(){const{ssoLog:s,utils:{safeStringify:r}}=this._core;if(this._canFetch())try{const g=yield bg(this._version);s.info("_fetchCloudConfigIfReady",r(g)),yield this._updateCloudConfig(g)}catch(g){s.error("_fetchCloudConfigIfReady",r(g))}})}_updateCloudConfig(s){return mA(this,void 0,void 0,function*(){const r=this._parseCloudConfig(s);r&&(this._core.store.set("cloudConfig",r),yield this._parseCmdFreqLimit(),this._core.notificationCenter.emitInnerEvent(this._core.InnerEvent.CLOUD_CONFIG_UPDATE,r),this._core.notificationCenter.emitOuterEvent(this._core.OuterEvent.SERVER_CONFIG_UPDATED,{name:this._core.OuterEvent.SERVER_CONFIG_UPDATED,data:{config:r}}))})}_canFetch(){const{isLoggedIn:s}=this._core.store.get("login")||{};return s&&!this._isFetching&&Date.now()>=this._expirationTime}_parseCloudConfig(s){const{int32_error_code:r,str_error_message:g,str_json_config:u,uint32_expired_time:E,uint32_sdkappid:m,uint64_version:D}=s;let M=null;if(r===0){if(this._version!==D)try{M=JSON.parse(u),this._version=D}catch{}this._expirationTime=Date.now()+1e3*E}else this._expirationTime=r===void 0?Date.now()+36e5:Date.now()+12e4;return M}_parseCmdFreqLimit(){return mA(this,void 0,void 0,function*(){var s;let r=(s=yield this.getServerConfig("cmd_frequency_limit"))===null||s===void 0?void 0:s.data;const{isEmpty:g}=this._core.utils;if(!g(r))try{r=JSON.parse(r),this._updateCmdFreqLimitMap(r)}catch(u){console.warn(u)}})}_updateCmdFreqLimitMap(s){s.forEach(r=>{this._cmdFrequencyLimitMap.set(r.cmd,{interval:r.interval,count:r.count})})}_reset(){this._core.helper.taskScheduler.removeTask($c),this._core.store.clear("cloudConfig"),this._updateCmdFreqLimitMap(Xc),this._methodCallFrequencyMap.clear(),this._expirationTime=0,this._version=0,this._isFetching=!1}_dispose(){const{notificationCenter:s,InnerEvent:r}=this._core;s.unSubscribeInnerEvent(dI,this._handlePushedConfig,this),s.unSubscribeInnerEvent(r.LOGOUT,this._reset,this),s.unSubscribeInnerEvent(r.DESTROY,this._dispose,this),this._reset()}};class Wn{constructor(r=0,g=0){this.high=r,this.low=g}equal(r){return r!==null&&this.low===r.low&&this.high===r.high}toString(){const r=Number(this.high).toString(16);let g=Number(this.low).toString(16);if(g.length<8){let u=8-g.length;for(;u;)g=`0${g}`,u--}return r+g}}const vc={SEARCH_GRP_SNS:new Wn(0,Math.pow(2,1)).toString(),AV_HISTORY_MSG:new Wn(0,Math.pow(2,2)).toString(),GRP_COMMUNITY:new Wn(0,Math.pow(2,3)).toString(),MSG_TO_SPECIFIED_GRP_MBR:new Wn(0,Math.pow(2,4)).toString(),AV_MBR_LIST:new Wn(0,Math.pow(2,6)).toString(),USER_STATUS:new Wn(0,Math.pow(2,7)).toString(),CONV_MARK:new Wn(0,Math.pow(2,9)).toString(),CONV_GROUP:new Wn(0,Math.pow(2,10)).toString(),AV_BAN_MBR:new Wn(0,Math.pow(2,11)).toString(),MSG_EXT:new Wn(0,Math.pow(2,13)).toString(),GRP_COUNTER:new Wn(0,Math.pow(2,15)).toString(),PLUGIN_TRANSLATE:new Wn(Math.pow(2,6)).toString(),PLUGIN_VOICE_TO_TEXT:new Wn(Math.pow(2,7)).toString(),PLUGIN_CS:new Wn(Math.pow(2,8)).toString(),PLUGIN_PUSH:new Wn(Math.pow(2,9)).toString(),PLUGIN_BOT:new Wn(Math.pow(2,10)).toString(),MSG_REACTION:new Wn(Math.pow(2,16)).toString(),FOLLOW:new Wn(Math.pow(2,20)).toString()},ZI="CommercialConfig",XI="commercial-config";var wE=new class{constructor(){this._core=null,this._expirationTime=0,this._isFetching=!1,this._featureMap=new Map,this._methodKeyMap=new Map,this._purchaseBits="0"}install(s){this._core=s;const{helper:r,notificationCenter:g,constants:{WORKFLOW_NAME:u,WORKFLOW_STEP:E,InnerEvent:m}}=s;g.subscribeInnerEvent(m.COMMERCIAL_CONFIG_PUSH,this._handlePushedConfig,this),g.subscribeInnerEvent(m.LOGOUT,this._handleLogout,this),g.subscribeInnerEvent(m.DESTROY,this._dispose,this),r.registerWorkflowStep(u.SYNC_SERVER_INFO_AFTER_LOGIN,E.COMMERCIAL_CONFIG_UPDATE,this._syncCommercialConfig,this),s.helper.registerExperimentalAPI("isCommercialAbilityEnabled",this),s.helper.registerExperimentalAPI("queryCommercialAbility",this)}isCommercialAbilityEnabled(s){return mA(this,void 0,void 0,function*(){const r=parseInt(s,10).toString(2),{length:g}=r;let u,E=!0;for(let m=g-1,D=0;m>=0;m--,D++)if(r.charAt(m)==="1"&&(u=D<32?new Wn(0,2**D).toString():new Wn(2**(D-32),0).toString(),!this._featureMap.get(u))){E=!1;break}return this._core.ssoLog.debug("isFeatureEnabled",`${ZI}.isFeatureEnabled decimalNumber:${s} key:${u} ret:${E}`),{code:0,data:{enabled:E}}})}queryCommercialAbility(){return this._purchaseBits}_fetchAndParseCommercialConfig(){return mA(this,void 0,void 0,function*(){var s;const{ssoLog:r,utils:{safeStringify:g},common:{buildAndSendPacket:u}}=this._core;try{this._isFetching=!0;const E=yield u({servcmd:"im_sdk_config_mgr.fetch_imsdk_purchase_bitsv2",data:{uint32_sdkappid:(s=this._core.store.get("instance"))===null||s===void 0?void 0:s.sdkAppId}});E&&(this._parseCommercialConfig(E),this._core.store.set("commercialConfig",this._methodKeyMap))}catch(E){r.error("_fetchAndParseCommercialConfig",g(E))}finally{this._isFetching=!1}})}_syncCommercialConfig(s){return mA(this,void 0,void 0,function*(){const{purchaseBits:r}=s?.data||{};r&&(this._parsePurchaseBits(r),this._core.store.set("commercialConfig",this._methodKeyMap)),this._canFetch()&&(yield this._fetchAndParseCommercialConfig()),this._core.helper.taskScheduler.addTask({id:XI,intervalMs:1e3,callback:this._fetchCommercialConfigIfReady,context:this})})}_canFetch(){var s;const r=(s=this._core.store.get("login"))===null||s===void 0?void 0:s.isLoggedIn,g=Date.now()>=this._expirationTime;return r&&!this._isFetching&&g}_handlePushedConfig(s){s?.body&&(this._parseCommercialConfig(s.body),this._core.store.set("commercialConfig",this._methodKeyMap))}_fetchCommercialConfigIfReady(){return mA(this,void 0,void 0,function*(){this._canFetch()&&(yield this._fetchAndParseCommercialConfig())})}_parseCommercialConfig(s){const{ssoLog:r}=this._core;if(typeof s!="object")return;const{int32_error_code:g,str_error_message:u,str_purchase_bits:E,uint32_expired_time:m}=s;g===0?(this._parsePurchaseBits(E),this._expirationTime=Date.now()+1e3*m):g===void 0?(r.warn("_parseCommercialConfig",`${ZI}._parseCommercialConfig failed. Invalid message format:`,s),this._expirationTime=Date.now()+36e5):(r.warn("_parseCommercialConfig",`${ZI}._parseCommercialConfig errorCode:${g} errorMessage:${u}`),this._expirationTime=Date.now()+12e4)}_isValidPurchaseBits(s){return s&&typeof s=="string"&&s.length>=1&&s.length<=64&&/[01]{1,64}/.test(s)}_parsePurchaseBits(s){const{ssoLog:r,utils:{safeStringify:g}}=this._core;if(this._isValidPurchaseBits(s)){this._purchaseBits=s,this._featureMap.clear(),this._methodKeyMap.clear();let u=null;for(let E=s.length-1,m=0;E>=0;E--,m++)if(u=m<32?new Wn(0,2**m).toString():new Wn(2**(m-32),0).toString(),s[E]==="1"){this._featureMap.set(u,!0);const D=this._getKeyByValue(vc,u);D&&this._methodKeyMap.set(D,!0)}else{this._featureMap.set(u,!1);const D=this._getKeyByValue(vc,u);D&&this._methodKeyMap.set(D,!1)}}else r.warn("_parsePurchaseBits",`${ZI}.parsePurchaseBits invalid purchases:${g(s)}`)}_getKeyByValue(s,r){const g=Object.entries(s).find(([u,E])=>E===r);return g?g[0]:void 0}_handleLogout(){this._reset()}_dispose(){this._reset(),this._core.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.COMMERCIAL_CONFIG_PUSH,this._handlePushedConfig,this),this._core.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.LOGOUT,this._reset,this),this._core.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.DESTROY,this._dispose,this)}_reset(){this._core.helper.taskScheduler.removeTask(XI),this._core.store.set("commercialConfig",{}),this._expirationTime=0,this._isFetching=!1,this._featureMap.clear(),this._purchaseBits="0"}},ch=new class{constructor(){this._core=null,this._serverOverloadInfoMap=new Map}install(s){this._core=s;const{notificationCenter:r,InnerEvent:g,channel:u}=this._core;r.subscribeInnerEvent(g.OVERLOAD_PUSH,this._handleOverLoadPush,this),r.subscribeInnerEvent(g.LOGOUT,this._reset,this),r.subscribeInnerEvent(g.DESTROY,this._dispose,this),u.registerBeforeSendInterceptor(this.checkServerOverload,this)}checkServerOverload(s){if(!this._serverOverloadInfoMap.has(s))return;const{overloadStartTimestamp:r,delaySeconds:g}=this._serverOverloadInfoMap.get(s);if(Date.now()-r<=1e3*g)throw new this._core.helper.ChatError({functionName:s,message:"service is busy, please try again later"});this._serverOverloadInfoMap.delete(s)}_handleOverLoadPush(s){const{OverLoadServCmd:r,DelaySecs:g}=s;this._serverOverloadInfoMap.set(r,{overloadStartTimestamp:Date.now(),delaySeconds:g})}_reset(){this._serverOverloadInfoMap.clear()}_dispose(){this._reset();const{notificationCenter:s,InnerEvent:r}=this._core;s.unSubscribeInnerEvent(r.OVERLOAD_PUSH,this._handleOverLoadPush,this),s.unSubscribeInnerEvent(r.LOGOUT,this._reset,this),s.unSubscribeInnerEvent(r.DESTROY,this._dispose,this)}},dC=new class{constructor(){this.name="ConfigCenter"}install(s){va.init(s),Ds.install(s),wE.install(s),ch.install(s)}},lh=new class{constructor(){this.name="ErrorMessage",this._core=null}install(s){return mA(this,void 0,void 0,function*(){if(this._core=s,this._canFetch()){const r=yield this._fetchErrorMessage();if(!r)return;const g=this._parseResponse(r);this._saveErrorMessage(g)}})}_canFetch(){const s=this._core.store.getStorage("errorMessage");return!s||this._isExpired(s)}_saveErrorMessage(s){this._core.store.setStorage("errorMessage",{errorMessage:s,errorMessageSavedTime:new Date().getTime()})}_fetchErrorMessage(){return mA(this,void 0,void 0,function*(){try{return yield this._core.helper.httpRequest({method:"GET",url:"https://web.sdk.qcloud.com/im/download/error-message/v3/0.0.6/tim-error-message.txt"})}catch(s){console.error(s)}})}_isExpired(s){if(!s)return!0;const{errorMessageSavedTime:r}=s;return r&&new Date().getTime()-r>=6048e5}_parseResponse(s){if(typeof s=="string"){const r=s.split(`; +`),g={},u=new RegExp(/'/g);for(let E=0;E{var qA,Ie,le;const bi=function(ki,Ot){const{From_Account:Li,From_AccountHeadurl:cs,From_AccountNick:Re,IsNeedReadReceipt:St,MsgBody:UA,MsgClientTime:ai,MsgRandom:_s,MsgSeq:Ui,MsgTimeStamp:Or,SendMsgControl:Vi,SupportMessageExtension:Ir,To_Account:Nt,TinyId:Gt,MsgCheckResult:iE,CloudCustomData:ln,IsPeerRead:Qo,MsgFlagBits:Il,MsgVersion:GC,EventArray:Tr}=ki;return{from:Li,avatar:cs,nick:Re,needReadReceipt:St===1,readReceiptSentByPeer:Qo,clientTime:ai,messageFlagBits:Il,random:_s,sequence:Ui,time:Or,messageControlInfo:Vi,isSupportExtension:Ir,to:Nt,tinyID:Gt,checkResult:iE,cloudCustomData:ln,messageVersion:GC,eventArray:Tr,elements:Ot.message.messageHelper.parseServerPushMessageElement(UA)}}(OA,xA);if(!((le=(Ie=(qA=OA?.EventArray)===null||qA===void 0?void 0:qA[0])===null||Ie===void 0?void 0:Ie.hasOwnProperty)===null||le===void 0)&&le.call(Ie,"C2cNotifyMsgArray"))SA.push(...function(ki){var Ot;const Li=[];return(Ot=ki.EventArray)===null||Ot===void 0||Ot.forEach(cs=>{var Re,St;const{C2cNotifyMsgArray:UA}=cs,ai=(St=(Re=UA?.[0])===null||Re===void 0?void 0:Re.WithdrawC2cMsgNotify)===null||St===void 0?void 0:St.C2cWithdrawInfoArray;Array.isArray(ai)&&Li.push(...ai)}),Li}(OA));else{const ki=xA.message.messageFactory.createMessage(Object.assign(Object.assign({},bi),{conversationType:"C2C",flow:"in"})),{elements:Ot}=bi;ki.setElement(Ot),LA.push(ki)}}),{unreadMessageList:LA,revokedMessageList:SA}}(T.MsgList,r);return{syncFlag:T?.SyncFlag,unreadMessageList:EA,revokedMessageList:wA,unreadCountList:P,overflowUnreadCountList:W,cookie:T?.Cookie,groupTipList:oA}}catch(T){console.warn(T)}})}var kg,ao;(function(s){s[s.START_SYNC=0]="START_SYNC",s[s.SYNCING=1]="SYNCING",s[s.SYNC_COMPLETE=2]="SYNC_COMPLETE"})(kg||(kg={})),function(s){s[s.LOGIN_SUCCESS=0]="LOGIN_SUCCESS",s[s.NEW_MESSAGE_RECEIVED=1]="NEW_MESSAGE_RECEIVED"}(ao||(ao={}));var CC=new class{constructor(){this.name="UnreadMessageSynchronizer",this._unreadDBMessageMap=new Map,this._cookie="",this._localConversationIDListBeforeDisconnect=[]}install(s){this._core=s;const{constants:r}=s;s.helper.registerWorkflowStep(r.WORKFLOW_NAME.SYNC_SERVER_INFO_AFTER_RE_ONLINE,r.WORKFLOW_STEP.UNREAD_MESSAGE_SYNC,this._syncUnreadDBMessageAfterReOnline,this),s.helper.registerWorkflowStep(r.WORKFLOW_NAME.RECEIVE_C2C_NEW_MESSAGE,r.WORKFLOW_STEP.UNREAD_MESSAGE_SYNC,this._syncUnreadDBMessageAfterNewMessageReceived,this),s.helper.registerWorkflowStep(r.WORKFLOW_NAME.SYNC_SERVER_INFO_AFTER_LOGIN,r.WORKFLOW_STEP.UNREAD_MESSAGE_SYNC,this._syncUnreadDBMessageAfterLogin,this),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.SOCKET_DISCONNECTED,this._handleDisconnect,this),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.LOGOUT,this._reset,this),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this._dispose,this)}_syncUnreadMessage(s){return mA(this,void 0,void 0,function*(){const{isAfterReOnline:r=!1,isAfterNewMessageReceived:g=!1,isAfterLogin:u=!1}=s||{};let E=kg.START_SYNC;const m=[],D=[],M=[],T=[];for(;this._canContinueSync({cookie:this._cookie,syncFlag:E});){const P=yield this._fetchUnreadDBMessage({cookie:this._cookie,syncFlag:E,syncTriggerEvent:g?ao.NEW_MESSAGE_RECEIVED:ao.LOGIN_SUCCESS});if(!P)break;const{unreadMessageList:W=[],revokedMessageList:oA=[],overflowUnreadCountList:EA,unreadCountList:wA,groupTipList:kA}=P;if(this._cookie=P?.cookie||"",E=P?.syncFlag,this._parseAndSaveUnreadMessageList(W),M.push(...oA),this._updateConversationUnreadOptions({unreadCountList:wA,overflowUnreadCountList:EA,conversationUpdateFieldList:m}),Array.isArray(kA)&&D.push(...kA),r){const{messages:xA}=this._handleNewMessageList(W);T.push(...xA)}}return r?{conversationUpdateFieldList:m,revokedMessageList:M,unreadMessageMap:this._unreadDBMessageMap,groupTipList:D,messages:T,isUnreadC2CMessage:!0}:{conversationUpdateFieldList:m,isInstantMessage:!u,isUnreadC2CMessage:!0,revokedMessageList:M,unreadMessageMap:this._unreadDBMessageMap,groupTipList:D}})}_syncUnreadDBMessageAfterLogin(){return mA(this,void 0,void 0,function*(){return this._cookie="",this._syncUnreadMessage({isAfterLogin:!0})})}_syncUnreadDBMessageAfterNewMessageReceived(s){return mA(this,void 0,void 0,function*(){if(s.data.Flag===1)return this._syncUnreadMessage({isAfterNewMessageReceived:!0})})}_updateConversationUnreadOptions(s){const{unreadCountList:r,overflowUnreadCountList:g,conversationUpdateFieldList:u}=s,{constants:{OuterConstant:{CONV_C2C:E,CONV_SYSTEM:m}}}=this._core;r?.forEach(D=>{const{From_Account:M,UnreadCount:T}=D;if(M!==m){const P=u.find(({conversationID:W})=>W===`${E}${M}`);P?P.unreadCount=T:u.push({conversationID:`${E}${M}`,unreadCount:T,type:E})}}),g?.forEach(D=>{const{From_Account:M,LastMsgTime:T}=D;M!==m&&(u.find(({conversationID:P})=>P===`${E}${M}`)||u.push({conversationID:`${E}${M}`,type:E,lastMsgTime:T}))})}_syncUnreadDBMessageAfterReOnline(){return mA(this,void 0,void 0,function*(){return this._syncUnreadMessage({isAfterReOnline:!0})})}_updateMessageProfile(s){var r;const{messageDataHandler:g}=this._core.message||{},u=(r=this._core.store.get("login"))===null||r===void 0?void 0:r.userId,{from:E,nick:m,avatar:D,conversationID:M=""}=s;if(E!==u){const T=g.getLatestMsgSentByPeer(M);if(T){const{nick:P,avatar:W}=T;m&&D?m===P&&D===W||g.updateNickAndAvatarOfSentMessage({conversationID:M,latestNick:m,latestAvatar:D,isSentByMe:!1}):(s.nick=P,s.avatar=W)}}else{const T=g.getLatestMsgSentByMe(M);!T||m===T.nick&&D===T.avatar||g.updateNickAndAvatarOfSentMessage({conversationID:M,latestNick:m,latestAvatar:D,isSentByMe:!0})}}_handleNewMessageList(s){const{messageDataHandler:r}=this._core.message||{},g=new Map,u=[];return s.forEach(E=>{this._updateMessageProfile(E);let m=E.isModified===1;if(r.isMessageSentByCurrentInstance(E)?E.isModified=m:m=!1,E.isOnlineMessage())E._onlineOnlyFlag=!0,r.isMessageSentByCurrentInstance(E)||u.push(E);else if(this._shouldStoreUnreadMessage(E)){if(r.storeConversationMessage(E)){const{conversationID:D,conversationType:M,conversationSubType:T,flow:P,_isExcludedFromUnreadCount:W,_isExcludedFromLastMessage:oA}=E,EA=oA?"":E;g.has(D)?(g.get(D).lastMessage=EA,P==="in"&&(W||g.get(D).unreadCount++)):g.set(D,{conversationID:D,type:M,subType:T,unreadCount:W||P!=="in"?0:1,lastMessage:EA})}r.isMessageSentByCurrentInstance(E)&&!m||u.push(E)}}),{messages:u,conversationOptions:g}}_shouldStoreUnreadMessage(s){var r;const{conversationID:g}=s,{message:u,appStore:E,utils:{isEmpty:m}}=this._core||{},D=Array.from(((r=E.conversationStore.getConversationMap())===null||r===void 0?void 0:r.keys())||[]),M=this._getLocalLastMessageTime(g);return!u.messageDataHandler.isInMessageList(s)&&D.includes(g)&&this._localConversationIDListBeforeDisconnect.includes(g)&&!m(M)}_fetchUnreadDBMessage(s){return mA(this,void 0,void 0,function*(){const{ssoLog:r,utils:{safeStringify:g}}=this._core;try{r.debug("_fetchUnreadDBMessage",`unread-message-synchronizer._fetchUnreadDBMessage options:${g(s)}`);const E=yield el(s,this._core);if(!E)return null;const{syncFlag:m,unreadMessageList:D,revokedMessageList:M,cookie:T,unreadCountList:P,overflowUnreadCountList:W,groupTipList:oA}=E;return this._parseAndSaveUnreadMessageList(D),{syncFlag:m,cookie:T,unreadMessageList:D,revokedMessageList:M,unreadCountList:P,overflowUnreadCountList:W,groupTipList:oA}}catch(u){console.log(u)}})}_canContinueSync({cookie:s,syncFlag:r}){var g;return r===kg.START_SYNC||r===kg.SYNCING&&!(!((g=this._core)===null||g===void 0)&&g.helper.isEmpty(s))}_parseAndSaveUnreadMessageList(s){s.forEach(r=>{const{ID:g}=r;this._unreadDBMessageMap.set(g,r)})}_handleDisconnect(){var s;const{appStore:r}=this._core;this._localConversationIDListBeforeDisconnect=Array.from(((s=r.conversationStore.getConversationMap())===null||s===void 0?void 0:s.keys())||[])}_getLocalLastMessageTime(s){const{message:r}=this._core,g=r.messageDataHandler.getLocalMessageList(s),u=g[g.length-1];return u?.time}_reset(){this._cookie="",this._unreadDBMessageMap.clear()}_dispose(){var s,r;(s=this._core)===null||s===void 0||s.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.LOGOUT,this._reset,this),(r=this._core)===null||r===void 0||r.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.DESTROY,this._dispose,this),this._reset()}},_E=new class{init(s){var r;this._core=s,this._visibilityChangeHandler=this._handleVisibilityChange.bind(this),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this._dispose,this),document?.addEventListener("visibilitychange",this._visibilityChangeHandler),(r=this._core)===null||r===void 0||r.store.set("activityMonitor",{isActive:!0})}_handleVisibilityChange(){var s,r;const g=document?.visibilityState==="visible";(s=this._core)===null||s===void 0||s.store.set("activityMonitor",{isActive:g}),(r=this._core)===null||r===void 0||r.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:g})}_reset(){var s;(s=this._core)===null||s===void 0||s.store.clear("activityMonitor")}_dispose(){document?.removeEventListener("visibilitychange",this._visibilityChangeHandler);const{notificationCenter:s,InnerEvent:r}=this._core;s.unSubscribeInnerEvent(r.DESTROY,this._dispose,this),this._reset()}},TE=new class{init(s){var r;this._core=s,this._bindAppActivityEvent(),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this._dispose,this),(r=this._core)===null||r===void 0||r.store.set("activityMonitor",{isActive:!0})}_bindAppActivityEvent(){var s,r,g,u,E;const{MINI_APP_NAMESPACE:m,IN_TT_MINI_GAME:D,IN_WX_MINI_GAME:M}=((s=this._core)===null||s===void 0?void 0:s.utils)||{};D||M?((r=m?.onShow)===null||r===void 0||r.call(m,()=>{var T,P;(T=this._core)===null||T===void 0||T.store.set("activityMonitor",{isActive:!0}),(P=this._core)===null||P===void 0||P.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!0})}),(g=m?.onHide)===null||g===void 0||g.call(m,()=>{var T,P;(T=this._core)===null||T===void 0||T.store.set("activityMonitor",{isActive:!1}),(P=this._core)===null||P===void 0||P.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!1})})):((u=m?.onAppShow)===null||u===void 0||u.call(m,()=>{var T,P;(T=this._core)===null||T===void 0||T.store.set("activityMonitor",{isActive:!0}),(P=this._core)===null||P===void 0||P.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!0})}),(E=m?.onAppHide)===null||E===void 0||E.call(m,()=>{var T,P;(T=this._core)===null||T===void 0||T.store.set("activityMonitor",{isActive:!1}),(P=this._core)===null||P===void 0||P.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!1})}))}_reset(){var s;(s=this._core)===null||s===void 0||s.store.clear("activityMonitor")}_dispose(){const{notificationCenter:s,InnerEvent:r}=this._core;s.unSubscribeInnerEvent(r.DESTROY,this._dispose,this),this._reset()}},hd=new class{init(s){const{IN_MINI_APP:r,IN_WX_MINI_PLUGIN:g}=s.helper;g||(r?TE.init(s):_E.init(s))}};const NE="none",tl="online";var CI=new class{init(s){this._core=s,this._activateNetworkMonitoring(),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this._dispose,this)}_activateNetworkMonitoring(){return mA(this,void 0,void 0,function*(){navigator.onLine?this._onOnline():this._onOffline(),this._onOnlineCallback=this._onOnline.bind(this),this._onOfflineCallback=this._onOffline.bind(this),window.addEventListener("online",this._onOnlineCallback),window.addEventListener("offline",this._onOfflineCallback)})}_deactivateNetworkMonitoring(){this._onOnlineCallback!==null&&(window.removeEventListener("online",this._onOnlineCallback),this._onOnlineCallback=null),this._onOfflineCallback!==null&&(window.removeEventListener("offline",this._onOfflineCallback),this._onOfflineCallback=null)}_onNetworkStatusChange(s){var r,g;const{isConnected:u,networkType:E}=s;(r=this._core)===null||r===void 0||r.store.set("netWorkMonitor",{isNetworkOnline:u,networkType:E}),(g=this._core)===null||g===void 0||g.notificationCenter.emitInnerEvent("networkStatusChange",{isNetworkOnline:u,networkType:E})}_onOnline(){this._onNetworkStatusChange({isConnected:!0,networkType:tl})}_onOffline(){this._onNetworkStatusChange({isConnected:!1,networkType:NE})}_reset(){var s;this._deactivateNetworkMonitoring(),(s=this._core)===null||s===void 0||s.store.clear("netWorkMonitor")}_dispose(){var s,r;(s=this._core)===null||s===void 0||s.notificationCenter.unSubscribeInnerEvent((r=this._core)===null||r===void 0?void 0:r.InnerEvent.DESTROY,this._dispose,this),this._reset()}},Uu=new class{init(s){this._core=s,this._activateNetworkMonitoring(),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this._dispose,this)}_activateNetworkMonitoring(){return mA(this,void 0,void 0,function*(){try{const{utils:{MINI_APP_NAMESPACE:s}}=this._core;this._mpNetworkStatusCallback=this._onNetworkStatusChange.bind(this),s.onNetworkStatusChange(this._onNetworkStatusChange.bind(this))}catch(s){console.error(s)}})}_deactivateNetworkMonitoring(){if(this._mpNetworkStatusCallback!==null){const{utils:{MINI_APP_NAMESPACE:s}}=this._core;s.offNetworkStatusChange&&s.offNetworkStatusChange(this._mpNetworkStatusCallback),this._mpNetworkStatusCallback=null}}_onNetworkStatusChange(s){var r,g;const{isConnected:u,networkType:E}=s;(r=this._core)===null||r===void 0||r.store.set("netWorkMonitor",{isNetworkOnline:u,networkType:E}),(g=this._core)===null||g===void 0||g.notificationCenter.emitInnerEvent("networkStatusChange",{isNetworkOnline:u,networkType:E})}_reset(){var s;this._deactivateNetworkMonitoring(),(s=this._core)===null||s===void 0||s.store.clear("netWorkMonitor")}_dispose(){var s,r;(s=this._core)===null||s===void 0||s.notificationCenter.unSubscribeInnerEvent((r=this._core)===null||r===void 0?void 0:r.InnerEvent.DESTROY,this._dispose,this),this._reset()}},Fu=new class{init(s){const{IN_MINI_APP:r}=s.utils;r?Uu.init(s):CI.init(s)}},hC=new class{constructor(){this.name="SystemStateMonitor"}install(s){hd.init(s),Fu.init(s)}};const wr=new Set(["tui_room_svr.*","callkit_records_svr.*","room_engine_srv.*","room_engine_http_srv.*","room_engine_mic.*","live_engine_srv.*","live_engine_http_srv.*","live_engine_pk.*","trtc_ai_service.*","call_engine_srv.*"]),cg="tui_room_svr.*";var Rc=new class{constructor(){this.name="BusinessCommandTransfer",this._transferredCommands=wr}install(s){this._core=s;const{notificationCenter:r,InnerEvent:g,helper:u}=s;r.subscribeInnerEvent(g.CLOUD_CONFIG_UPDATE,this._onCloudConfigUpdate,this),r.subscribeInnerEvent(g.LOGOUT,this._reset,this),r.subscribeInnerEvent(g.DESTROY,this._dispose,this),r.subscribeInnerEvent("im_open_push.msg_push",r.InnerEventSubType.BUSINESS_COMMAND,this._onServerPushBusinessCommand,this),u.registerExperimentalAPI("sendTRTCCustomData",this,"transferBusinessCommand"),u.registerExperimentalAPI("sendRoomCustomData",this,"transferBusinessCommand")}transferBusinessCommand(s){return mA(this,void 0,void 0,function*(){const r="transferBusinessCommand";try{const{serviceCommand:g=cg}=s||{};if(!this._isValidTransferredCommand(g))throw new this._core.helper.ChatError({code:2995,functionName:r});return{code:0,data:(yield function(E,m){return mA(this,void 0,void 0,function*(){const{helper:D,channel:M}=m,{serviceCommand:T=cg,data:P}=E||{};let W={};try{W=typeof P=="string"?JSON.parse(P):P}catch(wA){console.warn(wA)}const oA=D.generateProtocolData({servcmd:T,data:W}),EA=`${oA.head.seq}${T}`;return M.sendPacket(oA,{requestId:EA,shouldRejectOnError:!1})})}(s,this._core))||{}}}catch(g){throw console.warn(g),new this._core.helper.ChatError({code:g?.errorCode,message:g?.errorInfo,data:{},functionName:r})}})}_onCloudConfigUpdate(s={}){try{if(typeof s.rtc_cmd!="string")return;const r=JSON.parse(s.rtc_cmd);Array.isArray(r)&&(this._transferredCommands=new Set([...this._transferredCommands,...r]))}catch(r){console.log(r)}}_isValidTransferredCommand(s=""){const r=`${s?.split(".")[0]}.*`;return this._transferredCommands.has(r)}_onServerPushBusinessCommand(s){const{OuterEvent:r,notificationCenter:g}=this._core,{MsgContent:u}=s||{},{ROOM_CUSTOM_DATA_RECEIVED:E}=r;g.emitOuterEvent(E,{name:E,data:u})}_reset(){this._transferredCommands=wr}_dispose(){const{notificationCenter:s,InnerEvent:r}=this._core;this._reset(),s.unSubscribeInnerEvent(r.CLOUD_CONFIG_UPDATE,this._onCloudConfigUpdate,this),s.unSubscribeInnerEvent(r.LOGOUT,this._reset,this),s.unSubscribeInnerEvent(r.DESTROY,this._dispose,this),s.unSubscribeInnerEvent("im_open_push.msg_push",s.InnerEventSubType.BUSINESS_COMMAND,this._onServerPushBusinessCommand,this)}};const Ou=1,Nl=2,Bd=3,Aa=4,hI=5,_n="TIMCustomElem",BC="C2C",il="GROUP",Qd="invite",BI="accept",Oa="cancel",QC="reject",Pa="modifyInvitation",hr="signaling",pd=8010,Pu="signaling-timeout";function Br(s){return s.filter(r=>{if(r.type===_n){const{cloudCustomData:g="",payload:{data:u=""}={}}=r,E=g.match(/"type":"tsignaling"/),m=u.match(/inviteID/),D=u.match(/actionType/);return E||m&&D}return!1})}function wc(s){const{data:r}=s.payload;try{return JSON.parse(r)}catch(g){return console.error(g),null}}function ol(s,r){return s.toString(16).padStart(r,"0")}function Lg(s){if(s<0||s>53)throw new Error("Number of digits must be between 0 and 53");if(s<=30)return Math.floor(Math.random()*(1<0;const M=this._core.common.getCurrentUserID();return D.includes(M)}return!0}updateSignaling(s){const r=`${hr}.updateSignaling`,{inviteID:g,inviter:u,inviteeList:E,groupID:m}=s;if(console.log(`${r} inviteID:${g} inviter:${u} groupID:${m}`),m&&this.hasSignaling(g)){const D=E[0],{inviteeList:M}=this._onlineSignalingMap.get(g);M.includes(D)&&(M.splice(M.indexOf(D),1),console.log(`${r} remove ${D}. localInviteeList.length:${M.length}`)),M.length===0&&this.removeSignaling(g)}else this.removeSignaling(g)}setSignalingListenStatus(s){this._isSignalingListening=s}getSignalingListenStatus(){return this._isSignalingListening}_dispose(){var s,r;this._reset(),(s=this._core)===null||s===void 0||s.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.DESTROY,this._dispose,this),(r=this._core)===null||r===void 0||r.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.LOGOUT,this._reset,this),this._isSignalingListening=!1}_reset(){this._onlineSignalingMap.clear()}},$g=new class{init(s){this._core=s}createInviteSignaling(s){const r=this._generateInviteID(),g=this._createInviteSignalingData(Object.assign(Object.assign({},s),{inviteID:r})),{groupID:u,inviteeList:E}=g,m=u||E[0];return{signaling:this._createSignaling(g,m),signalingData:g,signalingExtensionOptions:this._createSignalingExtensionOptions(s)}}createAcceptSignaling(s){const r=this._createAcceptSignalingData(s),{groupID:g,inviter:u}=r,E=g||u;return{signaling:this._createSignaling(r,E),signalingData:r,signalingExtensionOptions:this._createSignalingExtensionOptions(s)}}createCancelSignaling(s){const r=this._createCancelSignalingData(s),{groupID:g,inviteeList:u}=r,E=g||u[0];return{signaling:this._createSignaling(r,E),signalingData:r,signalingExtensionOptions:this._createSignalingExtensionOptions(s)}}createRejectSignaling(s){const r=this._createRejectSignalingData(s),{groupID:g,inviter:u}=r,E=g||u;return{signaling:this._createSignaling(r,E),signalingData:r,signalingExtensionOptions:this._createSignalingExtensionOptions(s)}}createTimeoutSignaling(s){const{isInviter:r=!1}=s,g=this._createTimeoutSignalingData(s),{groupID:u,inviteeList:E,inviter:m}=g,D=u||(r?E[0]:m);return{signaling:this._createSignaling(g,D),signalingData:g,signalingExtensionOptions:this._createSignalingExtensionOptions(g)}}_createSignalingExtensionOptions(s){var r,g;const{data:u="",onlineUserOnly:E,inviteID:m="",offlinePushInfo:D,actionType:M}=s,T=((g=(r=Po.getSignaling(m))===null||r===void 0?void 0:r.signaling)===null||g===void 0?void 0:g._onlineOnlyFlag)||!1;return{onlineUserOnly:E||T,offlinePushInfo:D,messageControlInfo:this._createMessageControlInfo(u,M)}}_createMessageControlInfo(s,r){const g=r===hI&&!!s.match(/excludeTimeoutSignalingFromHistoryMessage/),u=!!s.match(/excludeFromHistoryMessage/)||!!s.match(/excludeOriginalSignalingFromHistoryMessage/);return{excludedFromContentModeration:!0,excludedFromUnreadCount:g||u,excludedFromLastMessage:g||u}}_createInviteSignalingData(s){const r=`${hr}._createInviteSignalingData`,{userID:g,timeout:u=0,groupID:E="",inviteeList:m=[]}=s,D=this._core.common.getCurrentUserID(),M=Object.assign(Object.assign({},this._generateBaseSignalData(s)),{actionType:Ou,inviter:D,inviteeList:E?m:[g],timeout:u});return console.log(`${r} signalingData:`,M),M}_createAcceptSignalingData(s){const r=`${hr}._createAcceptSignalingData`,{inviteID:g}=s,u=this._core.common.getCurrentUserID(),{inviter:E,groupID:m}=Po.getSignaling(g),D=Object.assign(Object.assign({},this._generateBaseSignalData(s)),{actionType:Bd,groupID:m,inviter:E,inviteeList:[u]});return console.log(`${r} signalingData:`,D),D}_createCancelSignalingData(s){const r=`${hr}._createCancelSignalingData`,{inviteID:g}=s,u=this._core.common.getCurrentUserID(),{inviteeList:E,groupID:m}=Po.getSignaling(g),D=Object.assign(Object.assign({},this._generateBaseSignalData(s)),{actionType:Nl,groupID:m,inviter:u,inviteeList:E});return console.log(`${r} signalingData:`,D),D}_createRejectSignalingData(s){const r=`${hr}._createRejectSignalingData`,{inviteID:g}=s,u=this._core.common.getCurrentUserID(),{inviter:E,groupID:m}=Po.getSignaling(g),D=Object.assign(Object.assign({},this._generateBaseSignalData(s)),{actionType:Aa,groupID:m,inviter:E,inviteeList:[u]});return console.log(`${r} signalingData:`,D),D}_createTimeoutSignalingData(s){const r=`${hr}._createTimeoutSignalingData`,{isInviter:g=!1,inviteID:u}=s,{inviteeList:E,inviter:m}=Po.getSignaling(u),D=this._core.common.getCurrentUserID(),M=Object.assign(Object.assign({},this._generateBaseSignalData(s)),{actionType:hI,inviter:m,inviteeList:g?E:[D]});return console.log(`${r} signalingData:`,M),M}_createSignaling(s,r){var g,u,E;const{groupID:m=""}=s,D={to:r,conversationType:m?il:BC,priority:"High",payload:{data:JSON.stringify(s)}};return(E=(u=(g=this._core)===null||g===void 0?void 0:g.message)===null||u===void 0?void 0:u.messageFactory)===null||E===void 0?void 0:E.createCustomMessage(D)}_generateInviteID(){return[ol(Lg(32),8),ol(Lg(16),4),ol(16384|Lg(12),4),ol(32768|Lg(14),4),ol(Lg(48),12)].join("-")}_generateBaseSignalData(s){const{data:r="",inviteID:g="",groupID:u=""}=s;return{businessID:1,timeout:0,data:r,inviteID:g,groupID:u}}},Za=new class{constructor(){this._isProcessingSignaling=!1}init(s){this._core=s,s.helper.registerApi({apiName:"invite",context:this}),s.helper.registerApi({apiName:"accept",context:this}),s.helper.registerApi({apiName:"cancel",context:this}),s.helper.registerApi({apiName:"reject",context:this}),s.helper.registerApi({apiName:"modifyInvitation",context:this}),s.helper.registerApi({apiName:"getSignalingInfo",context:this}),s.helper.registerApi({apiName:"addSignalingListener",context:this}),s.helper.registerApi({apiName:"removeSignalingListener",context:this}),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this._dispose,this),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.LOGOUT,this._reset,this)}invite(s){return mA(this,void 0,void 0,function*(){var r;try{this._validateBeforeInvite(s);const{signaling:g,signalingData:u,signalingExtensionOptions:E}=$g.createInviteSignaling(s),m=yield this._sendSignaling(g,E);if(m?.code===0){const{inviteID:D,timeout:M}=u;return Po.saveSignaling(D,Object.assign(Object.assign({},u),{signaling:g})),M>0&&((r=this._core)===null||r===void 0||r.helper.taskScheduler.addOnceTask({id:`${Pu}-${D}`,intervalMs:1e3*(M+5),callback:this.handleInvitationExpiryTimer.bind(this,D)})),Object.assign(Object.assign({},m),{inviteID:D})}return m}catch(g){throw g}})}accept(s){return mA(this,void 0,void 0,function*(){try{const{inviteID:r}=s;this._validateBeforeAccept(r),this._isProcessingSignaling=!0;const{signaling:g,signalingData:u,signalingExtensionOptions:E}=$g.createAcceptSignaling(s),m=yield this._sendSignaling(g,E);return m?.code===0?(Po.updateSignaling(u),Object.assign(Object.assign({},m),{inviteID:r})):m}catch(r){throw r}finally{this._isProcessingSignaling=!1}})}cancel(s){return mA(this,void 0,void 0,function*(){try{const{inviteID:r}=s;this._validateBeforeCancel(r),this._isProcessingSignaling=!0;const{signaling:g,signalingExtensionOptions:u}=$g.createCancelSignaling(s),E=yield this._sendSignaling(g,u);return E?.code===0?(Po.removeSignaling(r),Object.assign(Object.assign({},E),{inviteID:r})):E}catch(r){throw r}finally{this._isProcessingSignaling=!1}})}reject(s){return mA(this,void 0,void 0,function*(){try{const{inviteID:r}=s;this._validateBeforeReject(r),this._isProcessingSignaling=!0;const{signaling:g,signalingExtensionOptions:u}=$g.createRejectSignaling(s),E=yield this._sendSignaling(g,u);return E?.code===0?(Po.removeSignaling(r),Object.assign(Object.assign({},E),{inviteID:r})):E}catch(r){throw r}finally{this._isProcessingSignaling=!1}})}modifyInvitation(s){return mA(this,void 0,void 0,function*(){var r,g;const{inviteID:u,data:E}=s;let m="";try{this._validateBeforeModifyInvitation(u);const D=Po.getSignaling(u),{signaling:M}=D,T=So(D,["signaling"]);m=M.payload.data,T.data=E,M.payload.data=JSON.stringify(T);const P=yield(g=(r=this._core)===null||r===void 0?void 0:r.message.messageAction)===null||g===void 0?void 0:g.modifyMessage(M);return Po.hasSignaling(u)&&Po.saveSignaling(u,Object.assign(Object.assign({},T),{signaling:M})),P}catch(D){if(m){const{signaling:M}=Po.getSignaling(u);M.payload.data=m}throw D}})}getSignalingInfo(s){const{ssoLog:r,utils:{safeStringify:g}}=this._core;if(Br([s]).length===0)return;const u=wc(s),E={businessID:u.businessID||1,inviteID:u.inviteID,groupID:u.groupID||"",inviter:u.inviter||"",inviteeList:u.inviteeList||[],data:u.data||"",actionType:u.actionType||Ou,timeout:u.timeout||0};return r.debug(`${hr} getSignalingInfo ${g(E)}`),E}addSignalingListener(s,r,g){var u,E;s===((u=this._core)===null||u===void 0?void 0:u.SignalingEvent.NEW_INVITATION_RECEIVED)&&Po.setSignalingListenStatus(!0),(E=this._core)===null||E===void 0||E.notificationCenter.subscribeOuterEvent(s,r,g)}removeSignalingListener(s,r,g){var u,E;s===((u=this._core)===null||u===void 0?void 0:u.SignalingEvent.NEW_INVITATION_RECEIVED)&&Po.setSignalingListenStatus(!1),(E=this._core)===null||E===void 0||E.notificationCenter.unSubscribeOuterEvent(s,r,g)}handleInvitationExpiryTimer(s){const r=Po.getOnlineSignalingMap(),g=this._core.common.getCurrentUserID();if(!r.has(s))return;const u=r.get(s).inviter===g;this._sendTimeoutNotice({inviteID:s,isInviter:u})}_sendSignaling(s,r){return mA(this,void 0,void 0,function*(){var g,u,E;return(E=(u=(g=this._core)===null||g===void 0?void 0:g.message)===null||u===void 0?void 0:u.messageSender)===null||E===void 0?void 0:E.sendMessage(s,r)})}_sendTimeoutNotice(s){return mA(this,void 0,void 0,function*(){var r,g,u;this._core.ssoLog.debug("_sendTimeoutNotice",`${hr}._sendTimeoutNotice params:${JSON.stringify(s)}`);const{isInviter:E,inviteID:m}=s,{signaling:D,signalingData:M,signalingExtensionOptions:T}=$g.createTimeoutSignaling(s),P=yield this._sendSignaling(D,T);if(P?.code===0){const{data:W,groupID:oA,inviteeList:EA,inviter:wA}=M;(r=this._core)===null||r===void 0||r.notificationCenter.emitOuterEvent((g=this._core)===null||g===void 0?void 0:g.SignalingEvent.INVITATION_TIMEOUT,{name:(u=this._core)===null||u===void 0?void 0:u.SignalingEvent.INVITATION_TIMEOUT,data:{data:W,groupID:oA,inviteID:m,inviteeList:EA,inviter:wA,isSelfTimeout:!0,message:D}}),E?Po.removeSignaling(m):Po.updateSignaling(M)}})}_validateInviteId(s,r){if(!Po.hasSignaling(r))throw new this._core.helper.ChatError({functionName:s,code:pd})}_validateProcessStatus(s){if(this._isProcessingSignaling)throw new this._core.helper.ChatError({functionName:s,message:"processing other signaling operations"})}_validateBeforeInvite(s){const r=Qd,{userID:g}=s,u=this._core.common.getCurrentUserID();if(g===u)throw new this._core.helper.ChatError({functionName:r,message:`cannot invite yourself, currentUserId:${u}, inviteeId:${g}`})}_validateBeforeAccept(s){const r=BI;this._validateInviteId(r,s),this._validateProcessStatus(r);const g=this._core.common.getCurrentUserID(),{inviteeList:u}=Po.getSignaling(s);if(!u.includes(g)){const E=`userID:${g} not in inviteeList. inviteID:${s}`;throw new this._core.helper.ChatError({functionName:r,message:E})}}_validateBeforeCancel(s){const r=Oa;this._validateInviteId(r,s),this._validateProcessStatus(r);const g=this._core.common.getCurrentUserID(),{inviter:u}=Po.getSignaling(s);if(u!==g){const E=`unmatched inviter:${u} and my userID:${g}`;throw new this._core.helper.ChatError({functionName:r,message:E})}}_validateBeforeReject(s){const r=QC;this._validateInviteId(r,s),this._validateProcessStatus(r);const g=this._core.common.getCurrentUserID(),{inviteeList:u}=Po.getSignaling(s);if(!u.includes(g)){const E=`userID:${g} not in inviteeList. inviteID:${s}`;throw new this._core.helper.ChatError({functionName:r,message:E})}}_validateBeforeModifyInvitation(s){const r=Pa;this._validateInviteId(r,s)}_dispose(){var s,r;this._reset(),(s=this._core)===null||s===void 0||s.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.DESTROY,this._dispose,this),(r=this._core)===null||r===void 0||r.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.LOGOUT,this._reset,this)}_reset(){this._isProcessingSignaling=!1}},Gl=new class{constructor(){this._actionProcessor=new Map([[Ou,this._onNewInvitationReceived.bind(this)],[Aa,this._onInviteeRejected.bind(this)],[Bd,this._onInviteeAccepted.bind(this)],[Nl,this._onInvitationCancelled.bind(this)],[hI,this._onInvitationTimeout.bind(this)]])}init(s){this._core=s,s.notificationCenter.subscribeOuterEvent(s.OuterEvent.MESSAGE_RECEIVED,this._handleMessageReceived,this),s.notificationCenter.subscribeOuterEvent(s.OuterEvent.MESSAGE_MODIFIED,this._handleMessageModified,this),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this._dispose,this)}handleActionSignaling(s){s.forEach(r=>{const g=wc(r);if(g){const u=this._actionProcessor.get(g.actionType);u?.(g,r)}})}_handleMessageReceived(s){if(!Po.getSignalingListenStatus())return;const r=Br(s.data);r.length!==0&&this.handleActionSignaling(r)}_handleMessageModified(s){if(!Po.getSignalingListenStatus())return;const r=Br(s.data);r.length>0&&r.forEach(g=>{const u=wc(g);u&&this._onInvitationModified(u,g)})}_onNewInvitationReceived(s,r){var g,u;const E=`${hr}._onNewInvitationReceived`,{inviteID:m,inviteeList:D,groupID:M}=s,T=this._core.common.getCurrentUserID();if(this._core.ssoLog.debug("_onNewInvitationReceived",`${E} signalingData:${JSON.stringify(s)}}`),M&&!D.includes(T))return;let{timeout:P}=s;const W=Date.now()/1e3-r.time;P>0&&W>0&&P>W&&(P-=W);const oA=Po.getSignaling(m);oA!==s&&(oA||Po.saveSignaling(m,Object.assign(Object.assign({},s),{signaling:r})),P>0&&((g=this._core)===null||g===void 0||g.helper.taskScheduler.addOnceTask({id:`${Pu}-${m}`,intervalMs:1e3*P,callback:Za.handleInvitationExpiryTimer.bind(Za,m)})),this._emitEvent({name:(u=this._core)===null||u===void 0?void 0:u.SignalingEvent.NEW_INVITATION_RECEIVED,data:Object.assign(Object.assign({},this._generateBaseEmitData(s)),{inviteeList:D})}))}_onInviteeRejected(s){var r;const g=`${hr}._onInviteeRejected`,{inviteID:u,inviter:E,groupID:m,inviteeList:D}=s,M=Po.hasSignaling(u);this._core.ssoLog.debug("_onInviteeRejected",`${g} inviteID:${u} hasInviteID:${M} inviter:${E} groupID:${m}`),M&&(Po.updateSignaling(s),this._emitEvent({name:(r=this._core)===null||r===void 0?void 0:r.SignalingEvent.INVITEE_REJECTED,data:Object.assign(Object.assign({},this._generateBaseEmitData(s)),{invitee:D[0]})}))}_onInviteeAccepted(s){var r;const g=`${hr}._onInviteeAccepted`,{inviteID:u,inviter:E,groupID:m,inviteeList:D}=s,M=Po.hasSignaling(u);this._core.ssoLog.debug("_onInviteeAccepted",`${g} inviteID:${u} hasInviteID:${M} inviter:${E} groupID:${m}`),M&&(Po.updateSignaling(s),this._emitEvent({name:(r=this._core)===null||r===void 0?void 0:r.SignalingEvent.INVITEE_ACCEPTED,data:Object.assign(Object.assign({},this._generateBaseEmitData(s)),{invitee:D[0]})}))}_onInvitationCancelled(s){var r;const g=`${hr}._onInvitationCancelled`,{inviteID:u,inviter:E,groupID:m}=s,D=Po.hasSignaling(u);this._core.ssoLog.debug("_onInvitationCancelled",`${g} inviteID:${u} hasInviteID:${D} inviter:${E} groupID:${m}`),D&&(Po.removeSignaling(u),this._emitEvent({name:(r=this._core)===null||r===void 0?void 0:r.SignalingEvent.INVITATION_CANCELLED,data:this._generateBaseEmitData(s)}))}_onInvitationTimeout(s){var r;const g=`${hr}._onInvitationTimeout`,{inviteID:u,inviteeList:E}=s,m=Po.hasSignaling(u);this._core.ssoLog.debug("_onInvitationTimeout",`${g} inviteID:${u} hasInviteID:${m} data:${s.data}`),m&&(Po.updateSignaling(s),this._emitEvent({name:(r=this._core)===null||r===void 0?void 0:r.SignalingEvent.INVITATION_TIMEOUT,data:Object.assign(Object.assign({},this._generateBaseEmitData(s)),{inviteeList:E,isSelfTimeout:!1})}))}_onInvitationModified(s,r){var g;const u=`${hr}._onInvitationModified`,{inviteID:E,data:m}=s,D=Po.hasSignaling(E);this._core.ssoLog.debug("_onInvitationModified",`${u} inviteID:${E} data:${m}`),D&&(Po.saveSignaling(E,Object.assign(Object.assign({},s),{signaling:r})),this._emitEvent({name:(g=this._core)===null||g===void 0?void 0:g.SignalingEvent.INVITATION_MODIFIED,data:{inviteID:E,data:m}}))}_emitEvent(s){var r;(r=this._core)===null||r===void 0||r.notificationCenter.emitOuterEvent(s.name,s)}_generateBaseEmitData(s){const{inviteID:r,inviter:g,groupID:u,data:E}=s;return{inviteID:r,inviter:g,groupID:u,data:E||""}}_dispose(){var s,r,g;(s=this._core)===null||s===void 0||s.notificationCenter.unSubscribeOuterEvent(this._core.OuterEvent.MESSAGE_RECEIVED,this._handleMessageReceived,this),(r=this._core)===null||r===void 0||r.notificationCenter.unSubscribeOuterEvent(this._core.OuterEvent.MESSAGE_MODIFIED,this._handleMessageModified,this),(g=this._core)===null||g===void 0||g.notificationCenter.unSubscribeOuterEvent(this._core.InnerEvent.DESTROY,this._dispose,this)}},ea=new class{constructor(){this._offlineSignalingMap=new Map}init(s){this._core=s;const{notificationCenter:r,helper:g,constants:{InnerEvent:u,WORKFLOW_STEP:E,WORKFLOW_NAME:m}}=s;r.subscribeInnerEvent(u.DESTROY,this._dispose,this),r.subscribeInnerEvent(u.LOGOUT,this._reset,this),g.registerWorkflowStep(m.SYNC_SERVER_INFO_AFTER_LOGIN,E.SIGNALING_MESSAGE_RECOVER,this._handleC2COfflineMessage,this)}_handleC2COfflineMessage(s){const{result:{unreadMessageMap:r}={}}=s||{};if(!(r?.size!==0&&Po.getSignalingListenStatus()))return;const g=Br([...r.values()]);if(g.length!==0&&(g.forEach(u=>{this._handleC2CActionType(u)}),this._offlineSignalingMap.size>0)){const u=this._sortOfflineSignalingByTime();Gl.handleActionSignaling(u)}}_handleC2CActionType(s){const r=wc(s);if(!r)return;const{actionType:g}=r;g===Ou?this._saveValidOfflineInvite(r,s):this._removeOfflineInvite(r)}_saveValidOfflineInvite(s,r){const{inviteID:g,inviteeList:u=[],timeout:E=0}=s,m=this._core.common.getCurrentUserID();if(!u.includes(m))return;const D=Date.now()/1e3-r.time;E>0&&D>E&&E!==0||this._offlineSignalingMap.set(g,Object.assign(Object.assign({},s),{signalingList:[r]}))}_removeOfflineInvite(s){const{inviteID:r=""}=s;this._offlineSignalingMap.has(r)&&this._offlineSignalingMap.delete(r)}_sortOfflineSignalingByTime(){let s=[];return this._offlineSignalingMap.forEach(r=>{s=[...s,...r.signalingList]}),s.sort((r,g)=>r.time-g.time)}_dispose(){var s,r;this._reset(),(s=this._core)===null||s===void 0||s.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.LOGOUT,this._reset,this),(r=this._core)===null||r===void 0||r.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.DESTROY,this._dispose,this)}_reset(){this._offlineSignalingMap.clear()}};const Ih={invite:{userID:{required:!0,rules:["string"],allowEmpty:!1},data:{required:!1,rules:["string"],allowEmpty:!0},timeout:{required:!1,rules:["number"],allowEmpty:!1},onlineUserOnly:{required:!1,rules:["boolean"],allowEmpty:!1},offlinePushInfo:{required:!1,rules:["object"],allowEmpty:!1}},cancel:{inviteID:{required:!0,rules:["string"],allowEmpty:!1},data:{required:!1,rules:["string"],allowEmpty:!0}},accept:{inviteID:{required:!0,rules:["string"],allowEmpty:!1},data:{required:!1,rules:["string"],allowEmpty:!0}},reject:{inviteID:{required:!0,rules:["string"],allowEmpty:!1},data:{required:!1,rules:["string"],allowEmpty:!0}},modifyInvitation:{inviteID:{required:!0,rules:["string"],allowEmpty:!1},data:{required:!1,rules:["string"],allowEmpty:!0}}},js={invite:!0,cancel:!0,accept:!0,reject:!0,modifyInvitation:!0};var $I=new class{constructor(){this.name="Signaling"}install(s){Za.init(s),Gl.init(s),$g.init(s),Po.init(s),ea.init(s),s.helper.registerValidateConfig({auth:js,params:Ih})}};const Fs=new class{init(s){this.core=s}};function _c(s){let r;const{message:g}=Fs.core,{conversationID:u,messageID:E}=s;return r=g.messageDataHandler.getLocalMessageList(u).find(m=>m.ID===E),!r&&(r=g.messageDataHandler.getSparseMessageList(u).find(m=>m.ID===E)),r}function Ac(s){return s.map(r=>{const{from:g,to:u,cloudCustomData:E,avatar:m,nick:D,ID:M,clientSequence:T,clientTime:P,messageRandom:W,messageSequence:oA,time:EA}=r;return{ClientSeq:T,CloudCustomData:E,From_Account:g,From_AccountHeadurl:m,From_AccountNick:D,Id:M,MsgBody:JSON.parse(JSON.stringify(r.transformElementsToServerFormat())),MsgClientTime:P,MsgRandom:W,Random:W,MsgSeq:oA,MsgTimeStamp:EA,ReceiverId:u,SenderId:g,To_Account:u}})}function Qr(s){var r;const{From_Account:g,From_AccountHeadurl:u,From_AccountNick:E,GroupId:m,MsgClientTime:D,ClientSeq:M,To_Account:T,MsgTimeStamp:P,TinyId:W,MsgRandom:oA,MsgSeq:EA}=s;return{from:g,avatar:u,nick:E,clientTime:D,time:P,tinyID:W,random:oA,sequence:EA,to:T,groupID:m,clientSequence:M,_elements:(r=s.MsgBody)===null||r===void 0?void 0:r.map(wA=>{const{MsgType:kA}=wA;return Fs.core.message.messageFactory.getElementClass(kA).parseServerPushElement(wA)})}}var Vr,Xa;(function(s){s.MSG_TEXT="TIMTextElem",s.MSG_CUSTOM="TIMCustomElem",s.MSG_LOCATION="TIMLocationElem",s.MSG_FACE="TIMFaceElem",s.MSG_STREAM="TIMStreamElem"})(Vr||(Vr={})),function(s){s[s.FORWARD=0]="FORWARD",s[s.BACKWARD=1]="BACKWARD"}(Xa||(Xa={}));const GE="MSG_REACTION",pC="MSG_EXT",uh=0,go=1,Tc={ZH_CN:"zh (cmn-Hans-CN)",EN_US:"en-US",YUE_HK:"yue-Hant-HK",JA_JP:"ja-JP",ZH_PY:"zh-PY"},bl="16k_zh",mC="16k_en",fC="16k_yue",kl="16k_ja",Au="16k_zh-PY",QI={[Tc.ZH_CN]:bl,[Tc.EN_US]:mC,[Tc.YUE_HK]:fC,[Tc.JA_JP]:kl,[Tc.ZH_PY]:Au},pI=/\.(wav|pcm|ogg-opus|speex|silk|mp3|m4a|aac|amr)/,bE={READ:0,UNREAD:1},Ll=1,Ul=2,Ug=3;var ec;(function(s){s.IN="in",s.OUT="out"})(ec||(ec={}));const md=16,kE=17;var Nc;(function(s){s[s.DATA=0]="DATA",s[s.REVOKED=1]="REVOKED"})(Nc||(Nc={}));var eu;(function(s){s[s.NORMAL=0]="NORMAL",s[s.TIMEOUT=1]="TIMEOUT"})(eu||(eu={}));const Io="StreamMsg.PushStreamHttp";var LE=new class{constructor(){this._reactionsMap=new Map}init(s){this._core=s;const{helper:r,notificationCenter:g,InnerEvent:{MESSAGE_PUSH:u},InnerEventSubType:{MESSAGE_REACTION_UPDATED:E,MESSAGE_REACTION_UPDATED_SYNC:m}}=s;r.registerApi({apiName:"addMessageReaction",context:this}),r.registerApi({apiName:"removeMessageReaction",context:this}),r.registerApi({apiName:"getMessageReactions",context:this}),r.registerApi({apiName:"getAllUserListOfMessageReaction",context:this}),g.subscribeInnerEvent(u,E,this._handleReactionUpdated,this),g.subscribeInnerEvent(u,m,this._handleReactionSync,this)}addMessageReaction(s,r){return mA(this,void 0,void 0,function*(){const{OuterConstant:g,ssoLog:u,helper:E}=this._core;this._validateMessageReactionBusinessCapability();const{conversationID:m,ID:D,conversationType:M,from:T,to:P,clientSequence:W,random:oA,time:EA,sequence:wA}=s,kA=`conversationID:${m} messageID:${D} reactionID:${r}`;try{return this._recordMessageReactedByMe(D,r),M===g.CONV_C2C?yield function(xA,LA){return mA(this,void 0,void 0,function*(){var SA;const{from:OA,to:qA,clientSequence:Ie,random:le,time:bi,reactionID:ki}=xA,Ot={From_Account:OA,To_Account:qA,MsgKey:`${Ie}_${le}_${bi}`,Reaction:ki,Add_Account:[(SA=LA.store.get("login"))===null||SA===void 0?void 0:SA.userId]};return Fs.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.reaction_add",data:Ot})})}({from:T,to:P,clientSequence:W,random:oA,time:EA,reactionID:r},this._core):M===g.CONV_GROUP&&(yield function(xA,LA){return mA(this,void 0,void 0,function*(){var SA;const{to:OA,reactionID:qA,sequence:Ie}=xA,le={GroupId:OA,MsgSeq:Ie,Reaction:qA,Add_Account:[(SA=LA.store.get("login"))===null||SA===void 0?void 0:SA.userId]};return Fs.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.group_reaction_add",data:le})})}({to:P,reactionID:r,sequence:wA},this._core)),{code:0,successLog:{message:kA}}}catch(xA){this._removeMyReactionRecord(D,r);const{errorCode:LA}=xA||{};throw new E.ChatError({functionName:"addMessageReaction",code:LA,moreMessage:kA})}})}removeMessageReaction(s,r){return mA(this,void 0,void 0,function*(){const{OuterConstant:g,helper:u}=this._core;this._validateMessageReactionBusinessCapability();const{conversationID:E,ID:m,conversationType:D,from:M,to:T,clientSequence:P,random:W,time:oA,sequence:EA}=s,wA=`conversationID:${E} messageID:${m} reactionID:${r}`;try{return this._removeMyReactionRecord(m,r),D===g.CONV_C2C?yield function(kA,xA){return mA(this,void 0,void 0,function*(){var LA;const{from:SA,to:OA,clientSequence:qA,random:Ie,time:le,reactionID:bi}=kA,ki={From_Account:SA,To_Account:OA,MsgKey:`${qA}_${Ie}_${le}`,Reaction:bi,Del_Account:[(LA=xA.store.get("login"))===null||LA===void 0?void 0:LA.userId]};return Fs.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.reaction_del",data:ki})})}({from:M,to:T,clientSequence:P,random:W,time:oA,reactionID:r},this._core):D===g.CONV_GROUP&&(yield function(kA,xA){return mA(this,void 0,void 0,function*(){var LA;const{to:SA,reactionID:OA,sequence:qA}=kA,Ie={GroupId:SA,MsgSeq:qA,Reaction:OA,Del_Account:[(LA=xA.store.get("login"))===null||LA===void 0?void 0:LA.userId]};return Fs.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.group_reaction_del",data:Ie},xA)})}({to:T,reactionID:r,sequence:EA},this._core)),{code:0,successLog:{message:wA}}}catch(kA){const{errorCode:xA}=kA||{};throw new u.ChatError({functionName:"removeMessageReaction",code:xA,moreMessage:wA})}})}getAllUserListOfMessageReaction(s){return mA(this,void 0,void 0,function*(){this._validateMessageReactionBusinessCapability();const{message:r,reactionID:g,nextSeq:u=0}=s,E=s.count>100?100:s.count,{conversationID:m}=r,{ssoLog:D,helper:M,constants:T}=this._core;try{let P=null;if(P=m.startsWith(T.OuterConstant.CONV_C2C)?yield function(W){return mA(this,void 0,void 0,function*(){const{message:oA,nextSeq:EA,reactionID:wA,count:kA}=W,{from:xA,to:LA,clientSequence:SA,random:OA,time:qA}=oA,Ie={Reaction:wA,NextSeq:EA,Count:kA,From_Account:xA,To_Account:LA,MsgKey:`${SA}_${OA}_${qA}`};return Fs.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.reaction_iterate",data:Ie})})}({message:r,reactionID:g,nextSeq:u,count:E}):yield function(W){return mA(this,void 0,void 0,function*(){const{message:oA,nextSeq:EA,reactionID:wA,count:kA}=W,{sequence:xA,to:LA}=oA,SA={Reaction:wA,NextSeq:EA,GroupId:LA,Count:kA,MsgSeq:xA};return Fs.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.group_reaction_iterate",data:SA})})}({message:r,reactionID:g,nextSeq:u,count:E}),P){const{Reaction_Account:W,NextSeq:oA}=P,EA=yield this._getUserProfileList(W);return{code:0,data:{nextSeq:oA,isCompleted:u===0,userList:EA}}}}catch(P){const{errorCode:W}=P||{};throw new M.ChatError({functionName:"getAllUserListOfMessageReaction",code:W})}})}getMessageReactions(s){return mA(this,void 0,void 0,function*(){const{constants:r}=this._core;this._validateMessageReactionBusinessCapability();const{messageList:g,maxUserCountPerReaction:u=10}=s,E=g[0];let m=null;const D=new Map,{from:M,to:T,conversationType:P}=E,W=this._generateMessageKeyList(g,D);P===r.OuterConstant.CONV_C2C?m=yield function(kA){return mA(this,void 0,void 0,function*(){const{from:xA,to:LA,messageKeyList:SA,maxUserCountPerReaction:OA}=kA,qA={From_Account:xA,To_Account:LA,MsgKeyList:SA,Count:OA};return Fs.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.reaction_multi_stat",data:qA})})}({from:M,to:T,messageKeyList:W,maxUserCountPerReaction:u}):P===r.OuterConstant.CONV_GROUP&&(m=yield function(kA){return mA(this,void 0,void 0,function*(){const{groupId:xA,messageSequenceList:LA,maxUserCountPerReaction:SA}=kA,OA={GroupId:xA,MsgSeqList:LA,Count:SA};return Fs.core.common.buildAndSendPacket({servcmd:"openim_msg_ext_http_svc.group_reaction_multi_stat",data:OA})})}({groupId:T,messageSequenceList:W,maxUserCountPerReaction:u}));const{Results:oA=[]}=m||{},EA=this._extractUserIDsFromReactionResults(oA),wA=yield this._getUserProfileMap(EA);return{code:0,data:{resultList:oA.map(kA=>{const{ReactionList:xA,MsgSeq:LA,MsgKey:SA}=kA;return{messageID:this._generateMessageID({messageSequence:LA,messageKey:SA,messageIDMap:D}),reactionList:xA.map(OA=>{const{Reaction:qA,Count:Ie,Reaction_Account:le,ReactedByMe:bi}=OA;return{reactionID:qA,totalUserCount:Ie,partialUserList:this._generatePartialUserInfo({userIDList:le,userProfileMap:wA}),reactedByMyself:bi===1}})}})}}})}dispose(){this._reactionsMap.clear()}_extractUserIDsFromReactionResults(s){const r=[];return s?.forEach(g=>{const{ReactionList:u=[]}=g;u.forEach(E=>{E.Reaction_Account&&r.push(...E.Reaction_Account)})}),r}_getUserProfileList(s){return mA(this,void 0,void 0,function*(){var r;try{const g=yield(r=this._core.user.userProfile)===null||r===void 0?void 0:r.getUserProfile({userIDList:s});return g?g.data:[]}catch{return[]}})}_getUserProfileMap(s){return mA(this,void 0,void 0,function*(){const r=new Map;return(yield this._getUserProfileList(s)).forEach(g=>{const{nick:u,avatar:E,userID:m}=g;r.set(m,{nick:u,avatar:E,userID:m})}),r})}_recordMessageReactedByMe(s,r){const g=`${s}-${r}`;this._reactionsMap.has(g)?this._reactionsMap.get(g).reactedByMe=!0:this._reactionsMap.set(g,{reactedByMe:!0})}_removeMyReactionRecord(s,r){const g=`${s}-${r}`;this._reactionsMap.has(g)&&(this._reactionsMap.get(g).reactedByMe=!1)}_recordMessageReactionInfo(s){const{messageID:r,reactionID:g,reactionInfo:u}=s,E=`${r}-${g}`,m=this._reactionsMap.get(E)||{};this._reactionsMap.set(E,Object.assign(Object.assign({},m),u))}_validateMessageReactionBusinessCapability(){const{helper:s,constants:r}=this._core;if(!s.checkBusinessCapabilityBits(GE))throw new s.ChatError({functionName:"addMessageReaction",code:r.ERROR_CODE.NO_USE,replacement1:"addMessageReaction"})}_handleReactionUpdated(s){const{MsgReactionNotifyList:r}=s,{notificationCenter:g,constants:u}=this._core;r.forEach(E=>mA(this,void 0,void 0,function*(){const{C2CMsgInfo:m,GroupMsgInfo:D,MsgReactionSummary:M}=E,{TinyId:T,MsgClientTime:P,MsgRandom:W}=Object.assign(Object.assign({},m),D),oA=`${T}-${P}-${W}`,EA=this._extractUserIDsFromReactionResults([{ReactionList:M}]),wA=yield this._getUserProfileMap(EA),kA=M.map(xA=>{var LA;const{Reaction:SA,Reaction_Account:OA}=xA,qA=this._generatePartialUserInfo({userIDList:OA,userProfileMap:wA}),Ie=OA?xA.Count:0,le=((LA=this._reactionsMap.get(`${oA}-${SA}`))===null||LA===void 0?void 0:LA.reactedByMe)||!1;return this._recordMessageReactionInfo({messageID:oA,reactionID:SA,reactionInfo:{reactionID:SA,totalUserCount:Ie,partialUserList:qA}}),{reactionID:SA,totalUserCount:Ie,partialUserList:qA,reactedByMyself:le}});g.emitOuterEvent(u.OuterEvent.MESSAGE_REACTIONS_UPDATED,{name:u.OuterEvent.MESSAGE_REACTIONS_UPDATED,data:{messageID:oA,reactionList:kA}})}))}_handleReactionSync(s){var r;const{notificationCenter:g,constants:u}=this._core,{C2CMsgInfo:E={},GroupMsgInfo:m={},Reaction:D,OperateType:M}=s.MsgReactionNotify,{TinyId:T="",MsgClientTime:P=0,MsgRandom:W=0}=Object.assign(Object.assign({},E),m),oA=`${T}-${P}-${W}`,EA=`${oA}-${D}`;if(M===1?this._recordMessageReactedByMe(oA,D):this._removeMyReactionRecord(oA,D),(r=this._reactionsMap.get(EA))===null||r===void 0?void 0:r.reactionID){const wA=this._reactionsMap.get(EA);wA.reactedByMyself=M===1,g.emitOuterEvent(u.OuterEvent.MESSAGE_REACTIONS_UPDATED,{name:u.OuterEvent.MESSAGE_REACTIONS_UPDATED,data:{messageID:oA,reactionList:[wA]}})}}_generatePartialUserInfo({userIDList:s,userProfileMap:r}){const g=[];return s?.forEach(u=>{r.has(u)&&g.push(r.get(u))}),g}_generateMessageID(s){const{messageSequence:r,messageKey:g,messageIDMap:u}=s;return g?u.get(g):u.get(r)}_generateMessageKeyList(s,r){const{constants:g}=this._core,u=s[0],{conversationType:E}=u;let m=[];return E===g.OuterConstant.CONV_C2C?m=s.map(D=>{const{clientSequence:M,random:T,time:P,ID:W}=D,oA=`${M}_${T}_${P}`;return r.set(oA,W),oA}):E===g.OuterConstant.CONV_GROUP&&(m=s.map(D=>{const{ID:M,sequence:T}=D;return r.set(T,M),T})),m}},$a=new class{init(s){this._core=s;const{helper:r,InnerEvent:{MESSAGE_PUSH:g},InnerEventSubType:{C2C_MESSAGE_READ_RECEIPT:u,GROUP_MESSAGE_READ_RECEIPT:E},notificationCenter:m}=s;r.registerApi({apiName:"sendMessageReadReceipt",context:this}),r.registerApi({apiName:"getMessageReadReceiptList",context:this}),r.registerApi({apiName:"getGroupMessageReadMemberList",context:this}),m.subscribeInnerEvent(g,u,this._handleC2CMessageReadReceipt,this),m.subscribeInnerEvent(g,E,this._handleGroupMessageReadReceipt,this)}sendMessageReadReceipt(s){return mA(this,void 0,void 0,function*(){var r;const{common:g,constants:u}=this._core,E=this._filterValidMessageSendByOther(s);if(E.length===0)throw new g.ChatError({code:u.ERROR_CODE.READ_RECEIPT_MSG_LIST_EMPTY});try{const{conversationType:m}=E[0];return m===u.OuterConstant.CONV_C2C?yield function(D){return mA(this,void 0,void 0,function*(){const{common:M,constants:T}=Fs.core,P=D[0].conversationID.replace(T.OuterConstant.CONV_C2C,""),W=D.map(EA=>{const{from:wA,to:kA,sequence:xA,random:LA,time:SA,clientTime:OA}=EA;return{From_Account:wA,To_Account:kA,MsgSeq:xA,MsgRandom:LA,MsgTime:SA,MsgClientTime:OA}}),oA={Peer_Account:P,C2CMsgInfo:W};return M.buildAndSendPacket({servcmd:"openim.c2c_msg_read_receipt",data:oA})})}(E):yield function(D){return mA(this,void 0,void 0,function*(){const{common:M,constants:T}=Fs.core,P={GroupId:D[0].conversationID.replace(T.OuterConstant.CONV_GROUP,""),MsgSeqList:D.map(W=>({MsgSeq:W.sequence}))};return M.buildAndSendPacket({servcmd:"group_open_http_svc.group_msg_receipt",data:P})})}(E),{code:0,data:{}}}catch(m){const{errorCode:D,errorInfo:M}=m;throw new g.ChatError({code:D,message:M,moreMessage:`peerAccount:${(r=E?.[0])===null||r===void 0?void 0:r.conversationID}`})}})}getMessageReadReceiptList(s){return mA(this,void 0,void 0,function*(){const{common:r,constants:g}=this._core;try{const{conversationType:u}=s[0];if(u===g.OuterConstant.CONV_GROUP){const E=this._filterValidMessageSendByMe(s);if(E?.length>0){const m=yield function(M){return mA(this,void 0,void 0,function*(){const{common:T,constants:P}=Fs.core,W={GroupId:M[0].conversationID.replace(P.OuterConstant.CONV_GROUP,""),MsgSeqList:M.map(oA=>({MsgSeq:oA.sequence}))};return T.buildAndSendPacket({servcmd:"group_open_http_svc.get_group_msg_receipt",data:W})})}(E),{GroupMsgReceiptList:D}=m||{};this._updateGroupMessagesReadReceiptInfo({messageList:s,readReceiptList:D})}}return{code:0,data:{messageList:s}}}catch(u){const{errorCode:E,errorInfo:m}=u;throw new r.ChatError({code:E,message:m})}})}getGroupMessageReadMemberList(s){return mA(this,void 0,void 0,function*(){const{constants:r,common:g}=this._core,{message:u,filter:E=bE.READ,cursor:m=""}=s,{conversationID:D,sequence:M,ID:T}=u,P=D.replace(r.OuterConstant.CONV_GROUP,""),W=s.count>=100?100:s.count;try{const oA=yield function(EA){return mA(this,void 0,void 0,function*(){const{sequence:wA,groupID:kA,filter:xA,cursor:LA,count:SA}=EA,OA={MsgSeq:wA,GroupId:kA,Filter:xA,Cursor:LA,Num:SA};return Fs.core.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_group_msg_receipt_detail",data:OA})})}({groupID:P,sequence:M,filter:E,cursor:m,count:W});if(oA){const{Cursor:EA,IsFinish:wA,UnreadList:kA,ReadList:xA}=oA,LA={cursor:EA,isCompleted:wA===1,messageID:T,unreadUserIDList:[],readUserIDList:[]};return E===bE.READ?LA.readUserIDList=xA.map(SA=>SA.Read_Account):E===bE.UNREAD&&(LA.unreadUserIDList=kA.map(SA=>SA.Unread_Account)),{code:0,data:LA}}}catch(oA){const{errorCode:EA,errorInfo:wA}=oA;throw new g.ChatError({code:EA,message:wA})}})}_handleC2CMessageReadReceipt(s){const r=[],{constants:g,helper:u}=this._core,{C2cMsgInfo:E,PeerReadTime:m,Peer_Account:D}=s;if(u.isEmpty(E))return;const M=`${g.OuterConstant.CONV_C2C}${D}`;E?.forEach(T=>{const{TinyId:P,MsgClientTime:W,MsgRandom:oA}=T,EA=`${P}-${W}-${oA}`,wA=_c({conversationID:M,messageID:EA});wA&&!wA.readReceiptInfo.isPeerRead&&(wA.readReceiptInfo.isPeerRead=!0,wA.readReceiptInfo.timestamp=m,r.push({userID:D,messageID:EA,isPeerRead:!0,timestamp:m}))}),this._emitReadReceiptEventIfNeed(r)}_updateGroupMessagesReadReceiptInfo(s){const{messageList:r,readReceiptList:g}=s,u=new Map;r.forEach(E=>{u.set(E.sequence,E)}),g?.forEach(E=>{if(E.Code===0){const{MsgSeq:m,ReadNum:D,UnreadNum:M}=E,T=u.get(m);T&&(T.readReceiptInfo.readCount=D,T.readReceiptInfo.unreadCount=M)}})}_handleGroupMessageReadReceipt(s){const r=[],{constants:g}=this._core,{GroupTips:u}=s;u.forEach(E=>{const{MsgBody:{GroupMsgReceiptList:m},GroupInfo:{GroupId:D}}=E,M=`${g.OuterConstant.CONV_GROUP}${D}`;m?.forEach(T=>{const{TinyId:P,MsgClientTime:W,MsgRandom:oA,ReadNum:EA,UnreadNum:wA}=T,kA=`${P}-${W}-${oA}`,xA=_c({conversationID:M,messageID:kA}),LA={groupID:D,messageID:kA,readCount:0,unreadCount:0};xA&&(typeof EA=="number"&&(xA.readReceiptInfo.readCount=EA,LA.readCount=EA),typeof wA=="number"&&(xA.readReceiptInfo.unreadCount=wA,LA.unreadCount=wA),r.push(LA))})}),this._emitReadReceiptEventIfNeed(r)}_emitReadReceiptEventIfNeed(s){const{notificationCenter:r,OuterEvent:g}=this._core;s.length>0&&r.emitOuterEvent(g.MESSAGE_READ_RECEIPT_RECEIVED,{name:g.MESSAGE_READ_RECEIPT_RECEIVED,data:s})}_filterValidMessageSendByOther(s){return this._filterNeedReadReceiptMessages(s).filter(r=>{const{from:g}=r;return g!==this._core.common.getCurrentUserID()})}_filterValidMessageSendByMe(s){const{OuterConstant:r}=this._core.constants;return this._filterNeedReadReceiptMessages(s).filter(g=>{const{from:u,status:E}=g;return u===this._core.common.getCurrentUserID()&&E===r.MessageStatus.SUCCESS})}_filterNeedReadReceiptMessages(s){return s.filter(r=>r.needReadReceipt===!0)}dispose(){const{InnerEvent:{MESSAGE_PUSH:s},InnerEventSubType:{C2C_MESSAGE_READ_RECEIPT:r,GROUP_MESSAGE_READ_RECEIPT:g},notificationCenter:u}=this._core;u.unSubscribeInnerEvent(s,r,this._handleC2CMessageReadReceipt,this),u.unSubscribeInnerEvent(s,g,this._handleGroupMessageReadReceipt,this)}};function tu(s,r,g){return mA(this,void 0,void 0,function*(){const{common:{buildAndSendPacket:u}}=Fs.core,{from:E,to:m,clientSequence:D,random:M,time:T}=s;return u({servcmd:"openim_msg_ext_http_svc.set_key_values",data:{From_Account:E,To_Account:m,MsgKey:`${D}_${M}_${T}`,OperateType:g,ExtensionList:r}})})}function xu(s,r,g){return mA(this,void 0,void 0,function*(){const{common:{buildAndSendPacket:u}}=Fs.core,{to:E,sequence:m}=s;return u({servcmd:"openim_msg_ext_http_svc.group_set_key_values",data:{GroupId:E,MsgSeq:m,OperateType:g,ExtensionList:r}})})}var Gc=new class{constructor(){this._messageExtensionsMap=new Map,this._extensionsLatestSequenceMap=new Map,this._completedFetchExtensions=new Set}init(s){this._core=s;const{notificationCenter:r,helper:{registerApi:g},InnerEvent:{MESSAGE_PUSH:u,LOGOUT:E},InnerEventSubType:{MESSAGE_EXTENSIONS_UPDATED:m}}=s;g({apiName:"setMessageExtensions",context:this}),g({apiName:"getMessageExtensions",context:this}),g({apiName:"deleteMessageExtensions",context:this}),r.subscribeInnerEvent(u,m,this._handleMessageExtensionsNotify,this),r.subscribeInnerEvent(E,this.reset,this)}setMessageExtensions(s,r){return mA(this,void 0,void 0,function*(){this._validateMessageExtensionBusinessCapability("setMessageExtensions");const{constants:{OuterConstant:g},ssoLog:u}=this._core,{ID:E,conversationID:m,sequence:D,time:M,conversationType:T}=s;let P=r;r.length>20&&(P=r.slice(0,20),u.warn("setMessageExtensions","the length of extensions cannot exceed 20"));const W=this._generateServerExtensions(s,P),oA=`convID:${m} messageID:${E} sequence:${D} time:${M} count:${P.length}`;try{let EA;if(T===g.CONV_C2C?EA=yield tu(s,W,Ll):T===g.CONV_GROUP&&(EA=yield xu(s,W,Ll)),EA){const{resultList:wA,successCount:kA,failureCount:xA}=this._handleModifyMessageExtensions(s,EA);return{code:0,data:{extensions:wA},successLog:{message:`${oA} successCount:${kA} failCount:${xA}`}}}return{code:0,data:{extensions:[]}}}catch(EA){const{errorCode:wA}=EA;throw new this._core.helper.ChatError({functionName:"setMessageExtensions",code:wA,moreMessage:oA})}})}getMessageExtensions(s){return mA(this,void 0,void 0,function*(){const{utils:{isUndefined:r}}=this._core;this._validateMessageExtensionBusinessCapability("getMessageExtensions");const{conversationID:g,ID:u,sequence:E,time:m}=s,D=`convID:${g} messageID:${u} sequence:${E} time:${m}`;try{let M;this._completedFetchExtensions.has(u)&&(M=this._extensionsLatestSequenceMap.get(u));const T=yield this._fetchMessageExtensions(s,M);return r(M)&&T.length>1&&this._completedFetchExtensions.add(u),{code:0,data:{extensions:T},successLog:{message:D}}}catch(M){const{errorCode:T,errorInfo:P=""}=M||{};throw new this._core.common.ChatError({code:T,message:P,moreMessage:D})}})}deleteMessageExtensions(s,r){return mA(this,void 0,void 0,function*(){this._validateMessageExtensionBusinessCapability("deleteMessageExtensions");const{utils:{isEmpty:g},constants:{OuterConstant:u}}=this._core,{conversationType:E,conversationID:m,sequence:D,ID:M,time:T}=s;let P=Ug;const W=[];g(r)||(P=Ul,r?.forEach(wA=>{W.push({key:wA,value:"",seq:0})}));const oA=`convID:${m} messageID:${M} sequence:${D} time:${T} operateType:${P}`,EA=this._generateServerExtensions(s,W);try{let wA;if(E===u.CONV_C2C?wA=yield tu(s,EA,P):E===u.CONV_GROUP&&(wA=yield xu(s,EA,P)),wA){const{resultList:kA,successCount:xA,failureCount:LA}=this._handleModifyMessageExtensions(s,wA);return{code:0,data:{extensions:kA},successLog:{message:`${oA}successCount:${xA} failCount:${LA}`}}}return{code:0,data:{extensions:[]}}}catch(wA){const{errorCode:kA}=wA;throw new this._core.helper.ChatError({functionName:"deleteMessageExtensions",code:kA,moreMessage:oA})}})}reset(){this._messageExtensionsMap.clear(),this._extensionsLatestSequenceMap.clear(),this._completedFetchExtensions.clear()}dispose(){this.reset();const{notificationCenter:s,InnerEvent:{MESSAGE_PUSH:r,LOGOUT:g},InnerEventSubType:{MESSAGE_EXTENSIONS_UPDATED:u}}=this._core;s.unSubscribeInnerEvent(r,u,this._handleMessageExtensionsNotify,this),s.subscribeInnerEvent(g,this.reset,this)}_handleModifyMessageExtensions(s,r){const{ID:g}=s,{Seq:u}=r,E=r.ExtensionList||[],m=[];let D=0,M=0,T=[];return E.forEach(P=>{const{ErrorCode:W,Extension:oA}=P,{Key:EA,Value:wA,Seq:kA}=oA;m.push({code:W,key:EA,value:wA}),W===0?D++:M++,T.push({key:EA,value:wA,seq:kA})}),this._extensionsLatestSequenceMap.set(g,u),T.length>0&&this._updateLocalExtensions(s.ID,T),{resultList:m,successCount:D,failureCount:M}}_updateLocalExtensions(s,r){this._messageExtensionsMap.has(s)||this._messageExtensionsMap.set(s,new Map);const g=this._messageExtensionsMap.get(s);r?.forEach(u=>{const{key:E,seq:m,value:D=""}=u;g?.set(E,{value:D,seq:m})})}_fetchMessageExtensions(s,r){return mA(this,void 0,void 0,function*(){const{constants:{OuterConstant:g},utils:{isEmpty:u}}=this._core;try{let E;const{conversationType:m,ID:D}=s;if(m===g.CONV_C2C?E=yield function(M,T){const{common:{buildAndSendPacket:P}}=Fs.core,{from:W,to:oA,clientSequence:EA,random:wA,time:kA}=M;return P({servcmd:"openim_msg_ext_http_svc.get_key_values",data:{From_Account:W,To_Account:oA,MsgKey:`${EA}_${wA}_${kA}`,StartSeq:T}})}(s,r):m===g.CONV_GROUP&&(E=yield function(M,T){const{common:{buildAndSendPacket:P}}=Fs.core,{to:W,sequence:oA}=M;return P({servcmd:"openim_msg_ext_http_svc.group_get_key_values",data:{GroupId:W,MsgSeq:oA,StartSeq:T}})}(s,r)),E){const{LatestSeq:M,ClearSeq:T,CompleteFlag:P}=E,W=(E.ExtensionList||[]).map(EA=>({key:EA.Key,value:EA.Value,seq:EA.Seq}));if(this._updateLocalExtensions(D,W),this._clearLocationExtensions(D,T),this._extensionsLatestSequenceMap.set(D,M),P!==1){const EA=W[W.length-1].seq+1;return this._fetchMessageExtensions(s,EA)}const oA=[];if(this._messageExtensionsMap.has(D)){const EA=this._messageExtensionsMap.get(D);EA?.forEach((wA,kA)=>{const{value:xA}=wA;u(xA)||oA.push({key:kA,value:xA})})}return oA}}catch(E){throw E}})}_clearLocationExtensions(s,r){if(!(r<=0)&&this._messageExtensionsMap.has(s)){const g=this._messageExtensionsMap.get(s);g?.forEach((u,E)=>{u.seq<=r&&g.delete(E)})}}_generateServerExtensions(s,r){const{ID:g}=s;if(this._messageExtensionsMap.has(g)){const u=this._messageExtensionsMap.get(g);return r.map(E=>{var m;const{key:D,value:M}=E;let T=0;return u?.has(D)&&(T=(m=u.get(D))===null||m===void 0?void 0:m.seq),{Key:D,Value:M,Seq:T}})}return r.map(u=>({Key:u.key,Value:u.value,Seq:0}))}_validateMessageExtensionBusinessCapability(s){const{helper:r,constants:g}=this._core;if(!r.checkBusinessCapabilityBits(pC))throw new r.ChatError({functionName:s,code:g.ERROR_CODE.NO_USE,replacement1:s})}_handleMessageExtensionsNotify(s){const{SetKVInfo:r,DeleteKVInfo:g,ClearKVInfo:u,MsgOptType:E,TinyId:m,MsgLastSeq:D,ExtensionC2cMsgInfo:M,ExtensionGroupMsgInfo:T}=s?.MsgExtensionNotify||{},P=M||T||{},{MsgClientTime:W,MsgRandom:oA}=P,EA=`${m}-${W}-${oA}`;this._extensionsLatestSequenceMap.set(EA,D),E===Ll?this._handleMessageExtensionsUpdated({messageID:EA,updateMessageExtensionsInfo:r}):E===Ul?this._handleMessageExtensionsDeleted({messageID:EA,deleteMessageExtensionsInfo:g}):E===Ug&&this._handleMessageExtensionsCleared({messageID:EA,clearMessageExtensionsInfo:u})}_handleMessageExtensionsUpdated(s){const{notificationCenter:r,OuterEvent:g}=this._core,{messageID:u,updateMessageExtensionsInfo:E=[]}=s,m=[];E.forEach(D=>{const{MsgKeyValue:M=[]}=D,T=M.map(P=>(m.push({key:P.Key,value:P.Value}),{key:P.Key,value:P.Value,seq:P.Seq}));this._updateLocalExtensions(u,T)}),r.emitOuterEvent(g.MESSAGE_EXTENSIONS_UPDATED,{name:g.MESSAGE_EXTENSIONS_UPDATED,data:{messageID:u,extensions:m}})}_handleMessageExtensionsDeleted(s){const{notificationCenter:r,OuterEvent:g}=this._core,{messageID:u,deleteMessageExtensionsInfo:E=[]}=s,m=[];E.forEach(D=>{const{MsgKeyValue:M=[]}=D,T=M.map(P=>(m.push(P.Key),{key:P.Key,seq:P.Seq}));this._updateLocalExtensions(u,T)}),r.emitOuterEvent(g.MESSAGE_EXTENSIONS_DELETED,{name:g.MESSAGE_EXTENSIONS_DELETED,data:{messageID:u,keyList:m}})}_handleMessageExtensionsCleared(s){const{notificationCenter:r,OuterEvent:{MESSAGE_EXTENSIONS_DELETED:g},utils:{isEmpty:u}}=this._core,{messageID:E,clearMessageExtensionsInfo:m=[]}=s,D=[];m.forEach(M=>{const{ClearMsgSeq:T}=M;this._messageExtensionsMap.has(E)&&(this._messageExtensionsMap.get(E)||[]).forEach((P,W)=>{P.seq<=T&&!u(P.value)&&D.push(W)}),this._clearLocationExtensions(E,T)}),r.emitOuterEvent(g,{name:g,data:{messageID:E,keyList:D}})}};const mI={key:"message",required:!0,rules:["object"],allowEmpty:!1,customValidator:s=>{const{constants:{OuterConstant:r}}=Fs.core;return s.status!==r.MessageStatus.SUCCESS?"message is not success":s.isSupportExtension===!0||"message is not support extension"}},sl={setMessageExtensions:[mI,{key:"extensions",required:!0,rules:["array"],allowEmpty:!1}],getMessageExtensions:[mI],deleteMessageExtensions:[mI]},nl=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({deleteMessage:[{required:!0,rules:["array"],allowEmpty:!1}],revokeMessage:[{required:!0,rules:["object"],allowEmpty:!1}],resendMessage:[{key:"message",required:!0,rules:["object"],allowEmpty:!1},{key:"options",required:!1,rules:["object"],allowEmpty:!1}],getMessageList:{conversationID:{required:!0,rules:["string"],allowEmpty:!1},nextReqMessageID:{required:!1,rules:["string"],allowEmpty:!0},count:{required:!1,rules:["number"],allowEmpty:!0}},getMessageListHopping:{conversationID:{required:!0,rules:["string"],allowEmpty:!1},sequence:{required:!1,rules:["number"],allowEmpty:!0},direction:{required:!1,rules:["number"],allowEmpty:!0},count:{required:!1,rules:["number"],allowEmpty:!0}},createTextAtMessage:{to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1},payload:{required:!0,rules:["object"],allowEmpty:!1,customValidator:s=>{const r=function(g){var u;return typeof g?.text!="string"||typeof g.text=="string"&&((u=g?.text)===null||u===void 0?void 0:u.length)===0?"payload.text is invalid.":!0}(s);return r!==!0?r:!(s?.atUserList&&!Array.isArray(s.atUserList))||"atUserList should be an array or undefind."}}},findMessage:[{required:!0,rules:["string"],allowEmpty:!1}],translateText:{sourceTextList:{required:!0,rules:["array"],allowEmpty:!1},sourceLanguage:{required:!0,rules:["string"],allowEmpty:!1},targetLanguage:{required:!0,rules:["string"],allowEmpty:!1}},createForwardMessage:{to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1,customValidator:s=>!(!s.startsWith("C2C")&&!s.startsWith("GROUP"))||"conversationType is invalid."},payload:{required:!0,rules:["object"],allowEmpty:!1}},createLocationMessage:{to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1},payload:{required:!0,rules:["object"],allowEmpty:!1,customValidator:s=>{const{utils:{isString:r,isNumber:g}}=Fs.core;return r(s?.description)?g(s?.longitude)?!!g(s?.latitude)||"payload.latitude must be a number.":"payload.longitude must be a number.":"payload.description must be a string."}}}},{addMessageReaction:[{key:"message",required:!0,rules:["object"],allowEmpty:!1},{key:"reactionID",required:!0,rules:["string"],allowEmpty:!1}],removeMessageReaction:[{key:"message",required:!0,rules:["object"],allowEmpty:!1},{key:"reactionID",required:!0,rules:["string"],allowEmpty:!1}],getMessageReactions:{messageList:{required:!0,rules:["array"],allowEmpty:!1},maxUserCountPerReaction:{required:!1,rules:["number"],allowEmpty:!0,customValidator:s=>typeof s!="number"?"maxUserCountPerReaction is invalid.":!(s<0||s>10)||"maxUserCountPerReaction should between [0, 10]."}},getAllUserListOfMessageReaction:{message:{required:!0,rules:["object"],allowEmpty:!1,customValidator:s=>s.status==="success"||"message is invalid."},reactionID:{required:!0,rules:["string"],allowEmpty:!1},nextSeq:{required:!1,rules:["number"],allowEmpty:!0},count:{required:!1,rules:["number"],allowEmpty:!0}}}),{sendMessageReadReceipt:[{required:!0,rules:["array"],allowEmpty:!1}],getMessageReadReceiptList:[{required:!0,rules:["array"],allowEmpty:!1}],getGroupMessageReadMemberList:{message:{required:!0,rules:["object"],allowEmpty:!1},filter:{required:!1,rules:["number"],allowEmpty:!0},count:{required:!1,rules:["number"],allowEmpty:!0},cursor:{required:!1,rules:["string"],allowEmpty:!0}}}),sl),{pinGroupMessage:{groupID:{required:!0,rules:["string"],allowEmpty:!1},message:{required:!0,rules:["object"],allowEmpty:!1},isPinned:{required:!0,rules:["boolean"],allowEmpty:!1}},getPinnedGroupMessageList:[{key:"groupID",required:!0,rules:["string"],allowEmpty:!1}]}),{createQuoteMessage:[{key:"message",required:!0,rules:["object"],allowEmpty:!1},{key:"quotedMessage",required:!0,rules:["object"],allowEmpty:!1}]}),xa=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({deleteMessage:!0,revokeMessage:!0,resendMessage:!0,getMessageList:!0,getMessageListHopping:!0,createTextAtMessage:!0,findMessage:!0,translateText:!0,createForwardMessage:!0,createLocationMessage:!0},{addMessageReaction:!0,removeMessageReaction:!0,getMessageReactions:!0,getAllUserListOfMessageReaction:!0}),{sendMessageReadReceipt:!0,getMessageReadReceiptList:!0,getGroupMessageReadMemberList:!0}),{setMessageExtensions:!0,getMessageExtensions:!0,deleteMessageExtensions:!0}),{pinGroupMessage:!0,getPinnedGroupMessageList:!0}),{createQuoteMessage:!0});class UE{constructor(r){this._core=r}deleteMessage(r){return mA(this,void 0,void 0,function*(){const{to:g,messageIdentifiers:u}=r,E={From_Account:this._core.common.getCurrentUserID(),To_Account:g,MsgKeyList:u};return this._core.common.buildAndSendPacket({servcmd:"openim.delete_c2c_msg_ramble",data:E})})}revokeMessage(r){return mA(this,void 0,void 0,function*(){const{to:g,from:u,sequence:E,time:m,random:D}=r,M={MsgInfo:{From_Account:u,To_Account:g,MsgSeq:E,MsgRandom:D,MsgTimeStamp:m}};return this._core.common.buildAndSendPacket({servcmd:"openim.msgwithdraw",data:M})})}}class aa{constructor(r){this._core=r}deleteMessage(r){return mA(this,void 0,void 0,function*(){const{to:g,messageIdentifiers:u}=r,E={GroupId:g,Deleter_Account:this._core.common.getCurrentUserID(),Seqs:u};return this._core.common.buildAndSendPacket({servcmd:"group_open_http_svc.delete_group_ramble_msg_by_seq",data:E})})}revokeMessage(r){return mA(this,void 0,void 0,function*(){const{to:g,sequence:u}=r,E={GroupId:g,MsgSeqList:[{MsgSeq:u}]};return this._core.common.buildAndSendPacket({servcmd:"group_open_http_svc.group_msg_recall",data:E})})}}const Mn=2116;class kr{constructor(r){this._core=r}generateRevokeMessage(r){const{conversationID:g,sequence:u,random:E,tinyID:m,clientTime:D,revokeReason:M,revoker:T}=r;let P={};const{messageDataHandler:W}=this._core.message;return P=W.revokeMessage({conversationID:g,sequence:u,random:E,revoker:T}),P||(P={conversationID:g,sequence:u},m&&D&&E&&(P.ID=`${m}-${D}-${E}`)),P.revoker=T,P.revokeReason=M,P.revokerInfo={userID:T,nick:"",avatar:""},P}updateRevokerInfo(r){return mA(this,void 0,void 0,function*(){const g=r.map(u=>u.revoker);try{const u=yield this._fetchUserInfos(g);u&&r.forEach(E=>{const{revoker:m}=E;u[m]&&(E.revokerInfo.nick=u[m].nick||"",E.revokerInfo.avatar=u[m].avatar||"",E.revokerInfo.userID=m)})}catch(u){console.debug(u)}})}_fetchUserInfos(r){return mA(this,void 0,void 0,function*(){var g,u;const E=yield(g=this._core.user.userProfile)===null||g===void 0?void 0:g.getUserProfile({userIDList:r});return E?.data?(u=E.data)===null||u===void 0?void 0:u.reduce((m,{userID:D,nick:M,avatar:T})=>(m[D]={nick:M||"",avatar:T||""},m),{}):null})}}var rl=new class{constructor(){this._core=null,this._c2cMessageAction=null,this._groupMessageAction=null}init(s){this._core=s,this._groupMessageAction=new aa(s),this._c2cMessageAction=new UE(s),this._messageHelper=new kr(s);const{helper:r}=s;r.registerApi({apiName:"deleteMessage",context:this}),r.registerApi({apiName:"revokeMessage",context:this}),r.registerApi({apiName:"resendMessage",context:this}),r.registerApi({apiName:"findMessage",context:this}),r.registerApi({apiName:"createQuoteMessage",context:this})}deleteMessage(s){return mA(this,void 0,void 0,function*(){let r=[],g=[];const{conversationID:u,conversationType:E}=s[0],m=u.replace(E,"");if(E==="@TIM#SYSTEM")throw new this._core.helper.ChatError({code:Mn});if(s.forEach(D=>{const{conversationID:M,conversationType:T,status:P,_onlineOnlyFlag:W,sequence:oA,random:EA,time:wA}=D||{};if(P==="success"&&M===u&&T===E){if(!W){const kA=T==="C2C"?`${oA}_${EA}_${wA}`:String(oA);r.push(kA)}g.push(D)}}),r.length===0)return this._handleDeleteMessageSuccess(g),{code:0,data:{messageList:g}};r.length>30&&(r=r.slice(0,30),g=g.slice(0,30));try{return E==="C2C"?yield this._c2cMessageAction.deleteMessage({to:m,messageIdentifiers:r}):yield this._groupMessageAction.deleteMessage({to:m,messageIdentifiers:r}),this._handleDeleteMessageSuccess(g),{code:0,data:{messageList:g}}}catch(D){const{utils:{safeStringify:M}}=this._core,{errorCode:T,errorInfo:P}=D;throw new this._core.helper.ChatError({functionName:"deleteMessage",code:T,message:P,moreMessage:`messageIdentifiers: ${M(r)}`})}})}revokeMessage(s){return mA(this,void 0,void 0,function*(){var r;const{conversationType:g,isRevoked:u,ID:E,type:m,from:D,to:M}=s;let T=null;const P=`type:${m} from:${D} to:${M} ID:${E}`;if(g==="@TIM#SYSTEM")throw new this._core.helper.ChatError({message:"system message cannot be revoked"});if(u)throw new this._core.helper.ChatError({message:"message has been revoked",moreMessage:P});try{if(T=g==="C2C"?yield this._c2cMessageAction.revokeMessage(s):yield this._groupMessageAction.revokeMessage(s),T){const{RecallRetList:W}=T,oA=((r=W?.[0])===null||r===void 0?void 0:r.RetCode)||0;if(oA!==0)throw new this._core.helper.ChatError({code:oA,moreMessage:P});return s.isRevoked=!0,yield this._handleRevokeMessageSuccess(s),{code:0,data:{message:s},successLog:{message:P}}}}catch(W){const{errorCode:oA}=W;throw new this._core.helper.ChatError({functionName:"revokeMessage",code:oA,moreMessage:P})}})}resendMessage(s,r){return mA(this,void 0,void 0,function*(){var g,u;return s.isResend=!0,s.status="unSend",(u=(g=this._core)===null||g===void 0?void 0:g.apiMap)===null||u===void 0?void 0:u.sendMessage(s,r)})}findMessage(s){return this._core.message.messageDataHandler.findMessage(s)}createQuoteMessage(s,r){const{ID:g,time:u,sequence:E}=r;return s.quoteInfo={msgID:g,messageTime:u,messageSequence:E},s}_handleDeleteMessageSuccess(s){if(s.length===0)return;const{message:{messageDataHandler:r},common:{isTopic:g},notificationCenter:u,InnerEvent:E}=this._core;s.forEach(D=>{D.isDeleted=!0;const M=r.getLocalMessageList(D.conversationID);M?.forEach(T=>{T.ID===D.ID&&(T.isDeleted=!0)})});const{conversationID:m=""}=s[0];g(m)?u.emitInnerEvent(E.TOPIC_MESSAGE_DELETED,m):u.emitInnerEvent(E.MESSAGE_DELETED,m)}_handleRevokeMessageSuccess(s){return mA(this,void 0,void 0,function*(){var r;const g=(r=this._core.store.get("login"))===null||r===void 0?void 0:r.userId,{conversationID:u,sequence:E,random:m}=s;this._core.message.messageDataHandler.revokeMessage({conversationID:u,sequence:E,random:m,revoker:g}),yield this._messageHelper.updateRevokerInfo([s])})}};class Fl{static parseServerPushElement(r){const{MsgContent:g={}}=r,{Index:u,Data:E}=g;return new Fl({index:u,data:E})}constructor(r){this.type=Vr.MSG_FACE;const{index:g,data:u}=r;this.content={index:g,data:u}}validateBeforeSend(){var r,g;return typeof((r=this.content)===null||r===void 0?void 0:r.index)=="number"&&typeof((g=this.content)===null||g===void 0?void 0:g.data)=="string"?{isValid:!0}:{isValid:!1,error:{message:"content is invalid"}}}transformToServerFormat(r){const{isMergerMessage:g=!1}=r||{},u=g?this.payload:this.content,{index:E,data:m}=u;return{MsgType:this.type,MsgContent:{Index:E,Data:m}}}}class bc{static parseServerPushElement(r){const{MsgContent:g={}}=r,{Desc:u,Longitude:E,Latitude:m}=g;return new bc({description:u,longitude:E,latitude:m})}constructor(r){this.type=Vr.MSG_LOCATION;const{description:g,longitude:u,latitude:E}=r;this.content={description:g,longitude:u,latitude:E}}validateBeforeSend(){return{isValid:!0}}transformToServerFormat(r){const{isMergerMessage:g=!1}=r||{},u=g?this.payload:this.content,{description:E,longitude:m,latitude:D}=u;return{MsgType:this.type,MsgContent:{Desc:E,Longitude:m,Latitude:D}}}}class FE{static parseServerPushElement(r){const{MsgContent:g={}}=r,{StreamMsgID:u,CompatibleText:E,Markdown:m,BinaryData:D,ErrorCode:M,ErrorMsg:T}=g;return new FE({streamMessageID:u,compatibleText:E,markdown:m,binaryData:D,errorCode:M,errorMessage:T})}constructor(r){this.type=Vr.MSG_STREAM,this.content={streamMessageID:"",compatibleText:"",errorCode:0,errorMessage:"",isStreamEnded:!1},this._chunks=[],this._latestIndex=0;const{streamMessageID:g,compatibleText:u,markdown:E,binaryData:m,errorCode:D=0,errorMessage:M="",isStreamEnded:T=!1,chunks:P=[],latestIndex:W=0}=r;this.content.streamMessageID=g,this.content.compatibleText=u,this.content.markdown=E,this.content.binaryData=m,this.content.errorCode=D,this.content.errorMessage=M,this.content.isStreamEnded=T,this.content.chunks=P,this.content.latestIndex=W}updateChunks(r){if(!r||r.length===0)return;const g=r.sort((m,D)=>m.index-D.index),u=this._getMaxRevokedChunkIndex(g);u>=0&&(this._chunks=[],this._latestIndex=u,this._updateContent());const E=this._getValidChunks(g);if(E.length!==0&&(this._mergeAndSortChunks(E),this._chunks.length>0)){const m=this._chunks[this._chunks.length-1];this._latestIndex=m.index,this._updateContent(),this.content.isStreamEnded=m.isLast}}getLatestIndex(){return this._latestIndex}transformToServerFormat(r){const{isMergerMessage:g=!1}=r||{},u=g?this.payload:this.content,{streamMessageID:E,chunks:m}=u,D=m?.map(M=>({EventType:M.eventType||"data",Index:M.index,Markdown:M.markdown,IsLast:M.isLast}));return{MsgType:this.type,MsgContent:{StreamMsgID:E,Chunks:D}}}validateBeforeSend(){var r,g;return((g=(r=this.content)===null||r===void 0?void 0:r.chunks)===null||g===void 0?void 0:g.length)>0?{isValid:!0}:{isValid:!1,error:{message:"content is invalid"}}}_filterContinuousChunks(r,g){if(r.length===0)return[];const u=[];let E=g;for(const m of r){if(m.index>E)break;m.index===E&&(u.push(m),E++)}return u}_mergeAndSortChunks(r){const g=new Map;this._chunks.forEach(u=>{g.set(u.index,u)}),r.forEach(u=>{g.set(u.index,u)}),this._chunks=Array.from(g.values()).sort((u,E)=>u.index-E.index)}_updateContent(){this.content.markdown=this._chunks.map(g=>g.markdown).join("");const r=this._chunks.map(g=>g.binaryData).filter(g=>g?.length>0);if(r.length===0)this.content.binaryData=new Uint8Array(0);else if(r.length===1)this.content.binaryData=r[0];else{const g=r.reduce((m,D)=>m+D.length,0),u=new Uint8Array(g);let E=0;for(const m of r)u.set(m,E),E+=m.length;this.content.binaryData=u}}_getMaxRevokedChunkIndex(r){let g=-1;for(let u=0;ug&&(g=E.index)}return g}_getValidChunks(r){const g=r.filter(u=>u.eventType===Nc.DATA&&u.index>this._latestIndex);return this._filterContinuousChunks(g,this._latestIndex+1)}}var kc=new class{init(s){this._core=s,s.message.messageFactory.registerElementClass(Vr.MSG_FACE,Fl),s.message.messageFactory.registerElementClass(Vr.MSG_LOCATION,bc),s.message.messageFactory.registerElementClass(Vr.MSG_STREAM,FE),s.helper.registerApi({apiName:"createFaceMessage",context:this}),s.helper.registerApi({apiName:"createTextAtMessage",context:this}),s.helper.registerApi({apiName:"createForwardMessage",context:this}),s.helper.registerApi({apiName:"createLocationMessage",context:this})}createFaceMessage(s){if(!s)return null;const{index:r,data:g}=s?.payload||{},u=new Fl({index:r,data:g}),E=this._core.common.getCurrentUserID(),m=this._core.message.messageFactory.createMessage(Object.assign(Object.assign({},s),{from:E}));return m.setElement(u),m}createTextAtMessage(s){const{atUserList:r}=s?.payload||{},g=this._core.apiMap.createTextMessage(s),{OuterConstant:u}=this._core;if(!g)return null;if(Array.isArray(r)){const E=[],m=[];r.forEach(D=>{D!==u.MSG_AT_ALL?(E.push({GroupAtAllFlag:uh,GroupAt_Account:D}),m.push(D)):(E.push({GroupAtAllFlag:go}),m.push(u.MSG_AT_ALL))}),g._groupAtInfoList=E,g.atUserList=m}return g}createForwardMessage(s){const{helper:r,OuterConstant:g}=this._core,{to:u,conversationType:E,priority:m,payload:D,needReadReceipt:M,receiverList:T,cloudCustomData:P="",isSupportExtension:W=!1}=s;if(!Array.isArray(D._elements))throw new r.ChatError({functionName:"createForwardMessage",code:2454});if(D.type===g.MSG_GRP_TIP)throw new r.ChatError({functionName:"createForwardMessage",code:2453});const oA=this._core.common.getCurrentUserID(),EA=this._core.message.messageFactory.createMessage({to:u,from:oA,conversationType:E,isPlaceMessage:0,priority:m,payload:D,needReadReceipt:M,isSupportExtension:W,cloudCustomData:P,receiverList:T});return EA.setRelayFlag(!0),EA.setElement(D._elements[0]),EA}createLocationMessage(s){if(!s)return null;const{description:r,longitude:g,latitude:u}=s?.payload||{},E=new bc({description:r,longitude:g,latitude:u}),m=this._core.common.getCurrentUserID(),D=this._core.message.messageFactory.createMessage(Object.assign(Object.assign({},s),{from:m}));return D.setElement(E),D}};let Yu=class{init(s){this._messageHelper=new kr(s),this._core=s;const{notificationCenter:r,InnerEvent:{MESSAGE_PUSH:g},InnerEventSubType:{C2C_REVOKED_MESSAGE:u},helper:{registerWorkflowStep:E},constants:{WORKFLOW_NAME:m,WORKFLOW_STEP:D}}=s;r.subscribeInnerEvent(g,u,this._handleC2CNotifyMessage,this),E(m.SYNC_SERVER_INFO_AFTER_RE_ONLINE,D.HANDLE_C2C_REVOKED_MESSAGE_FROM_SYNC_UNREAD,this._handleC2CRevokeMessagesFromUnreadMessageSync,this)}_handleC2CNotifyMessage(s){const{C2cNotifyMsgArray:r}=s;r?.forEach(g=>{Object.keys(g).includes("WithdrawC2cMsgNotify")&&this._handleC2CRevokeMessage(g)})}_handleC2CRevokeMessage(s){return mA(this,void 0,void 0,function*(){try{const{WithdrawC2cMsgNotify:{C2cWithdrawInfoArray:r}}=s;yield this._parseAndEmitC2CRevokedMessages(r)}catch(r){console.debug(r)}})}_parseAndEmitC2CRevokedMessages(s){return mA(this,void 0,void 0,function*(){const r=[],{notificationCenter:g,OuterEvent:u,common:{getCurrentUserID:E}}=this._core;s.forEach(m=>{var D;const{MsgRand:M,MsgSeq:T,To_Account:P,From_Account:W,RevokerInfo:{Revoker_Account:oA,Revoke_Reason:EA}}=m,wA=E()===W?`C2C${P}`:`C2C${W}`,kA=((D=m?.RevokerInfo)===null||D===void 0?void 0:D.Reason)||EA,xA=this._messageHelper.generateRevokeMessage({conversationID:wA,sequence:T,random:M,revoker:oA,revokeReason:kA});r.push(xA)}),r.length>0&&(yield this._messageHelper.updateRevokerInfo(r),g.emitOuterEvent(u.MESSAGE_REVOKED,{name:u.MESSAGE_REVOKED,data:r}))})}_handleC2CRevokeMessagesFromUnreadMessageSync(s){return mA(this,void 0,void 0,function*(){const{revokedMessageList:r}=s.result;yield this._parseAndEmitC2CRevokedMessages(r)})}dispose(){const{notificationCenter:s,InnerEvent:{MESSAGE_PUSH:r},InnerEventSubType:{C2C_REVOKED_MESSAGE:g}}=this._core;s.unSubscribeInnerEvent(r,g,this._handleC2CNotifyMessage,this)}},yC=class{init(s){this._messageHelper=new kr(s),this._core=s;const{notificationCenter:r,InnerEvent:{MESSAGE_PUSH:g},InnerEventSubType:{GROUP_MESSAGE_REVOKED:u}}=s;r.subscribeInnerEvent(g,u,this._handleGroupNotifyMessage,this)}_handleGroupNotifyMessage(s){const{GroupTips:r}=s;r?.forEach(g=>{var u;Array.isArray((u=g?.MsgBody)===null||u===void 0?void 0:u.GroupWithdrawInfoArray)&&this._handleGroupRevokeMessage(g)})}_handleGroupRevokeMessage(s){return mA(this,void 0,void 0,function*(){try{const{RevokerInfo:r,MsgBody:{GroupWithdrawInfoArray:g},GroupInfo:u}=s,E=[],m=[],{notificationCenter:D,OuterEvent:M,utils:{isEmpty:T},common:{isCommunity:P}}=this._core;let W=!1;u&&(W=P({groupID:u.GroupId})||!T(u.TopicId)),g.forEach(oA=>{const{Random:EA,MsgSeq:wA,GroupId:kA,MsgClientTime:xA,TinyId:LA,TopicId:SA,RevokerInfo:{Revoker_Account:OA=r?.Revoker_Account||"",Reason:qA=r?.Reason||""}}=oA,Ie=SA?`GROUP${SA}`:`GROUP${kA}`,le=this._messageHelper.generateRevokeMessage({conversationID:Ie,sequence:wA,random:EA,tinyID:LA,clientTime:xA,revoker:OA,revokeReason:qA});W?(le.revokerInfo.nick=u.From_AccountNick,le.revokerInfo.avatar=u.From_AccountHeadurl,E.push(le)):m.push(le)}),m.length>0&&(yield this._messageHelper.updateRevokerInfo(m),E.push(...m)),E.length!==0&&D.emitOuterEvent(M.MESSAGE_REVOKED,{name:M.MESSAGE_REVOKED,data:E})}catch(r){console.debug(r)}})}dispose(){const{notificationCenter:s,InnerEvent:{MESSAGE_PUSH:r},InnerEventSubType:{GROUP_MESSAGE_REVOKED:g}}=this._core;s.unSubscribeInnerEvent(r,g,this._handleGroupNotifyMessage,this)}};var iu=new class{constructor(){this._c2cMessageReceiver=new Yu,this._groupMessageReceiver=new yC}init(s){this._c2cMessageReceiver.init(s),this._groupMessageReceiver.init(s)}dispose(){this._c2cMessageReceiver.dispose(),this._groupMessageReceiver.dispose()}},Eh=new class{constructor(){this._core=null}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"translateText",context:this})}translateText(s){return mA(this,void 0,void 0,function*(){try{const{sourceLanguage:r,sourceTextList:g,targetLanguage:u}=s,E=yield function(m,D){return mA(this,void 0,void 0,function*(){var M,T;const{sourceTextList:P,sourceLanguage:W,targetLanguage:oA}=m,{store:EA,common:wA}=D,kA={SourceText:P,Source:W,Target:oA,FromAccount:(M=EA.get("login"))===null||M===void 0?void 0:M.tinyID,SDKAppID:(T=EA.get("instance"))===null||T===void 0?void 0:T.sdkAppId},xA=yield wA.buildAndSendPacket({servcmd:"im_open_translate.ws_batch_trans_text",data:kA});if(xA){const{CmdErrorCode:LA,TargetText:SA}=xA;return{cmdErrorCode:LA,translatedTextList:SA}}})}({sourceLanguage:r,sourceTextList:g,targetLanguage:u},this._core);if(E){const{cmdErrorCode:{ErrorCode:m,ErrorInfo:D},translatedTextList:M}=E;if(m===0)return{code:0,data:{translatedTextList:M}};throw{errorCode:m,errorInfo:D,message:D}}}catch(r){const{errorCode:g,errorInfo:u}=r||{};throw new this._core.helper.ChatError({functionName:"translateText",code:g,message:u})}})}},Vu=new class{init(s){this._core=s,s.helper.registerApi({apiName:"convertVoiceToText",context:this})}convertVoiceToText(s){return mA(this,void 0,void 0,function*(){var r;const{message:g,language:u=Tc.ZH_PY}=s;let{url:E}=g.payload||{};const m=this._core.common.getCurrentUserID();g.from===m&&g.flow==="out"&&(E=g.payload.remoteAudioUrl),this._validateVoiceFormat(E);const D=((r=pI.exec(E))===null||r===void 0?void 0:r[1])||"mp3",M=QI[u]||Au;try{const T=yield function(P){var W;const{store:oA,common:EA}=Fs.core,{url:wA,format:kA,serverLanguageType:xA}=P,LA={BytesUrl:wA,BytesEngServiceType:xA,BytesVoiceFormat:kA,Uint32Sdkappid:(W=oA.get("instance"))===null||W===void 0?void 0:W.sdkAppId,Uint64SourceType:0};return EA.buildAndSendPacket({servcmd:"im_open_speech.ws_sentence_recognition",data:LA})}({url:E,format:D,serverLanguageType:M});if(T){const{CmdErrorCode:P,BytesResult:W}=T;if(P.ErrorCode===0)return{code:0,data:{result:W}};throw{code:P.ErrorCode,message:P.ErrorInfo}}}catch(T){const{code:P,message:W}=T||{};throw new this._core.common.ChatError({functionName:"convertVoiceToText",code:P,message:W})}})}_validateVoiceFormat(s){if(!pI.test(s))throw new this._core.common.ChatError({code:2119})}};class fI{constructor(r){const{constants:g,common:u,utils:E}=Fs.core,{CONV_C2C:m,CONV_GROUP:D}=g.OuterConstant,{ID:M,tinyID:T,from:P,to:W,clientTime:oA=u.timeManager.getServerTimeSeconds()||0,random:EA,sequence:wA,cloudCustomData:kA="",nick:xA="",avatar:LA="",clientSequence:SA,conversationType:OA,groupID:qA,_elements:Ie,time:le}=r;this.ID=M||`${T}-${oA}-${EA}`,this.messageRandom=EA,this.from=P,this.messageSender=P,this.time=le,this.messageSequence=wA,this.clientSequence=SA||wA,this.clientTime=oA,this.cloudCustomData=kA,this.messageReceiver=W,this.avatar=LA,this.nick=xA;const bi=E.deepCopyWithMethods(Ie);bi.forEach(ki=>{ki.payload=ki.content,delete ki.content}),this.messageBody=bi,M?OA.startsWith(m)?this.receiverUserID=W:OA.startsWith(D)&&(this.receiverGroupID=W):qA?(this.receiverGroupID=qA,this.messageReceiver=qA):W&&(this.receiverUserID=W,this.messageReceiver=W)}transformElementsToServerFormat(){return this.messageBody?Array.isArray(this.messageBody)?this.messageBody.map(r=>r.transformToServerFormat({isMergerMessage:!0})):this.messageBody.transformToServerFormat({isMergerMessage:!0}):null}}class al{static parseServerPushElement(r){const{MsgContent:g}=r,{MsgList:u=[],CompatibleText:E,AbstractList:m,Title:D,PbMsgKey:M,JsonMsgKey:T}=g||{},P=u.map(W=>Qr(W));return new al({messageList:P,title:D,abstractList:m,compatibleText:E,pbDownloadKey:M,downloadKey:T})}constructor(r){this.type=Fs.core.constants.OuterConstant.MSG_MERGER;const{messageList:g,title:u,abstractList:E,compatibleText:m,pbDownloadKey:D="",downloadKey:M="",version:T=0,layersOverLimit:P=!1}=r,W=[];g.forEach(oA=>{if(oA){const EA=new fI(oA);W.push(EA)}}),this.content={messageList:W,title:u,abstractList:E,compatibleText:m,version:T,downloadKey:M,pbDownloadKey:D,layersOverLimit:P}}validateBeforeSend(){const{isEmpty:r}=Fs.core.helper;return r(this.content.messageList)?{isValid:!1,error:{message:"content is invalid"}}:{isValid:!0}}transformToServerFormat(r){const{isMergerMessage:g=!1}=r||{},u=g?this.payload:this.content,{abstractList:E,compatibleText:m,downloadKey:D,layersOverLimit:M,pbDownloadKey:T,title:P,version:W,messageList:oA}=u;return{MsgType:this.type,MsgContent:{AbstractList:E,CompatibleText:m,JsonMsgKey:D,LayersOverLimit:M,PbMsgKey:T,Title:P,Version:W,MsgList:Ac(oA)}}}}var DC=new class{init(s){this._core=s;const{message:r,helper:g,constants:{OuterConstant:u}}=s;r.messageFactory.registerElementClass(u.MSG_MERGER,al),g.registerApi({apiName:"createMergerMessage",context:this}),g.registerApi({apiName:"sendMessage",context:this,matcher:E=>E[0].type===u.MSG_MERGER}),g.registerApi({apiName:"downloadMergerMessage",context:this})}createMergerMessage(s){const{common:r}=this._core;if(!s)return null;const g=new al(s.payload),u=r.getCurrentUserID(),E=this._core.message.messageFactory.createMessage(Object.assign(Object.assign({},s),{from:u}));return E.setRelayFlag(!0),E.setElement(g),E}sendMessage(s,r){return mA(this,void 0,void 0,function*(){var g,u,E;try{const m=function(P){let W="utf-8";Fs.core.helper.IN_BROWSER&&document&&(W=document.charset.toLowerCase());let oA,EA=0,wA=0;if(wA=P.length,W==="utf-8"||W==="utf8")for(let kA=0;kA11264){D=this._core.utils.deepCopyWithMethods(s);try{const{JsonMsgKey:P,PbMsgKey:W}=yield function(EA){return mA(this,void 0,void 0,function*(){const{payload:{messageList:wA}}=EA,kA={MsgList:Ac(wA)};return Fs.core.common.buildAndSendPacket({servcmd:"im_long_msg.save_relay_json_msg",data:kA})})}(D),{payload:oA}=D;M=new al(Object.assign(Object.assign({},oA),{messageList:[],downloadKey:P,pbDownloadKey:W})),D.setElement(M)}catch(P){console.error(P)}}const{data:{message:T}}=yield(E=(u=(g=this._core)===null||g===void 0?void 0:g.message)===null||u===void 0?void 0:u.messageSender)===null||E===void 0?void 0:E.sendMessage(D,r);return M&&T.setElement(s._elements),{code:0,data:{message:T}}}catch(m){const{errorCode:D}=m;throw new this._core.helper.ChatError({code:D})}})}downloadMergerMessage(s){return mA(this,void 0,void 0,function*(){const{ssoLog:r}=this._core,g=s.payload,{downloadKey:u,pbDownload:E,type:m,messageList:D}=g,M=So(g,["downloadKey","pbDownload","type","messageList"]);try{const T=yield function(oA){return mA(this,void 0,void 0,function*(){return Fs.core.common.buildAndSendPacket({servcmd:"im_long_msg.get_relay_json_msg",data:{JsonMsgKey:oA}})})}(u),{MsgList:P}=T||{},W=P?.map(oA=>{const EA=Qr(oA);return new fI(EA)});return typeof s.isOnlineMessage=="function"?s.setElement({type:s.type,content:Object.assign({messageList:W},M)}):(s.payload.messageList=W,s.payload.downloadKey="",s.payload.pbDownloadKey=""),r.info("downloadMergerMessage",` success downloadKey:${u}`),s}catch(T){const{errorCode:P}=T;throw new this._core.helper.ChatError({functionName:"downloadMergerMessage",code:P,moreMessage:u})}})}},ga=new class{init(s){this._core=s,this._core.helper.registerExperimentalAPI("sendComboMessage",this)}sendComboMessage(s){return mA(this,void 0,void 0,function*(){const{appStore:r,message:g,common:{getCurrentUserID:u},utils:{isArray:E}}=this._core,{GroupId:m,To_Account:D}=s;s.From_Account=s.From_Account||u();let M=null;if(m){M=this._generateGroupMessage(Object.assign(Object.assign({},s),{ToGroupId:m}));const T=r.userStore.getUserProfile(u());M.level=T?.level||0,E(D)&&D.length>0&&(M._receiverList=D)}else D&&(M=this._generateC2CMessage(s));return g.messageSender.sendMessage(M,s)})}_generateC2CMessage(s){const{message:r,OuterConstant:{CONV_C2C:g}}=this._core,u=g,E=r.messageHelper.parseServerPushMessage(s),m=r.messageFactory.createMessage(Object.assign(Object.assign({},E),{conversationType:u,flow:ec.OUT})),{elements:D}=E;return m.setElement(D),m}_generateGroupMessage(s){const{message:r,OuterConstant:{CONV_GROUP:g}}=this._core,u=g,E=r.messageHelper.parseServerGroupMessage(s),m=r.messageFactory.createMessage(Object.assign(Object.assign({},E),{conversationType:u,flow:ec.OUT})),{elements:D}=E;return m.setElement(D),m}},tc=new class{init(s){this._core=s;const{helper:r,notificationCenter:g,InnerEvent:{MESSAGE_PUSH:u},InnerEventSubType:{GROUP_MESSAGE_PINNED:E}}=s;g.subscribeInnerEvent(u,E,this._handleGroupMessagePinned,this),r.registerApi({apiName:"pinGroupMessage",context:this}),r.registerApi({apiName:"getPinnedGroupMessageList",context:this})}pinGroupMessage(s){return mA(this,void 0,void 0,function*(){const{ssoLog:r,common:{isTopic:g},OuterConstant:{GROUP_ID_PREFIX:u},helper:{ChatError:E}}=this._core;let{groupID:m,message:D,isPinned:M}=s;const{sequence:T}=D;try{return yield function(P){return mA(this,void 0,void 0,function*(){const{common:{buildAndSendPacket:W,getCurrentUserID:oA}}=Fs.core,{groupID:EA,sequence:wA,isPinned:kA}=P,xA=oA(),LA=kA?"group_open_http_svc.pin_message":"group_open_http_svc.unpin_message",SA={GroupId:EA,MsgSeq:wA};return kA?SA.Pinner_Account=xA:SA.UnPinner_Account=xA,W({servcmd:LA,data:SA})})}({groupID:m,sequence:T,isPinned:M}),{code:0,data:{}}}catch(P){const{errorCode:W,errorInfo:oA}=P||{};throw new E({code:W,message:oA})}})}getPinnedGroupMessageList(s){return mA(this,void 0,void 0,function*(){let r=[];try{const g=yield function(u){return mA(this,void 0,void 0,function*(){const{groupID:E}=u,{common:{buildAndSendPacket:m}}=Fs.core;return m({servcmd:"group_open_http_svc.get_pinned_messages",data:{GroupId:E}})})}({groupID:s});if(g){const{PinnedMsgList:u=[]}=g;r=yield this._updatePinnedMessageInfo({serverPinnedMessageList:u,groupID:s})}return{code:0,data:{messageList:r}}}catch(g){throw g}})}_handleGroupMessagePinned(s){const{message:{messageHelper:r,messageFactory:g},notificationCenter:u,OuterEvent:E,OuterConstant:m}=this._core;s.GroupTips.forEach(D=>{const{ToGroupId:M,MsgBody:{PinnedMsg:T,OpType:P,MsgOperatorMemberExtraInfo:W,SdkGroupMessageId:oA}}=D,{UserId:EA,NickName:wA="",ImageUrl:kA=""}=W;let xA=null,LA=!1;if(P===md){LA=!0;const SA=r.parseServerGroupMessage(T);xA=g.createMessage(Object.assign(Object.assign({},SA),{conversationType:m.CONV_GROUP,flow:"in"})),xA.setElement(SA.elements),xA.pinnerInfo={userID:EA,nick:wA,avatar:kA}}else if(P===kE){const{ClientTime:SA,Random:OA,SenderTinyId:qA,ServerTime:Ie,MsgSeq:le}=oA;xA={ID:`${qA}-${SA}-${OA}`,sequence:le,random:OA,time:Ie,clientTime:SA}}xA&&u.emitOuterEvent(E.PINNED_GROUP_MESSAGE_UPDATED,{name:E.PINNED_GROUP_MESSAGE_UPDATED,data:{groupID:M,message:xA,isPinned:LA,operatorInfo:{userID:EA,nick:wA,avatar:kA}}})})}_findMessageBySequence(s,r){const{message:{messageDataHandler:g}}=this._core;return[...g.getLocalMessageList(s),...g.getSparseMessageList(s)].find(u=>u.sequence===r)}_updatePinnedMessageInfo(s){return mA(this,arguments,void 0,function*({serverPinnedMessageList:r,groupID:g}){const{OuterConstant:{CONV_GROUP:u},utils:{isEmpty:E}}=this._core,m=[],D=[],M=[],T=new Map,P=`${u}${g}`;for(let oA=0;oA{const{sequence:kA}=wA,xA=T.get(kA),LA=oA[xA]||{userID:xA,nick:"",avatar:""};wA.pinnerInfo=LA}),m.sort((wA,kA)=>wA.sequence-kA.sequence),m}return[]})}_fetchPinnedMessageInfo(s){return mA(this,void 0,void 0,function*(){var r,g;const{message:{messageHistory:u},user:{userProfile:E},utils:{isArray:m}}=this._core,{conversationID:D,messageSequenceList:M,pinnerIDList:T}=s,P=yield Promise.all([this._fetchMessageBySequence({conversationID:D,messageSequenceList:M}),E?.getUserProfile({userIDList:T})]);if(m(P)){const W={};return(((r=P[1])===null||r===void 0?void 0:r.data)||[]).forEach(oA=>{const{userID:EA,nick:wA="",avatar:kA=""}=oA;W[EA]={userID:EA,nick:wA,avatar:kA}}),{messageList:((g=P[0])===null||g===void 0?void 0:g.messageList)||[],pinnerInfoMap:W}}})}_fetchMessageBySequence(s){return mA(this,void 0,void 0,function*(){const{utils:{isEmpty:r},message:{messageHistory:g}}=this._core,{conversationID:u,messageSequenceList:E}=s;return r(E)?[]:g.getGroupRoamingMessagesByAnchor({conversationID:u,messageSequenceList:E,getType:3})})}};class lg{constructor(r){this.eventType=Nc.DATA,this.index=0,this.markdown="",this.isLast=!1,this.binaryData=null;const{EventType:g,Index:u,Markdown:E,IsLast:m,BinaryData:D}=r;this.eventType=g,this.index=u,this.markdown=E,this.isLast=m,this.binaryData=D}}var yI=new class{constructor(){this._messageMap=new Map,this._retryCountMap=new Map}init(s){this._core=s;const{notificationCenter:r,OuterEvent:{MESSAGE_RECEIVED:g},InnerEvent:{HISTORY_MESSAGE_FETCHED:u},common:{workflowManager:E},constants:{WORKFLOW_NAME:m,WORKFLOW_STEP:D}}=s;r.subscribeInnerEvent(Io,this._handleStreamMessageChunkPush,this),r.subscribeOuterEvent(g,this._handleMessageReceived,this),r.subscribeInnerEvent(u,this.processHistoryMessage,this),E.registerWorkflowStep(m.SYNC_SERVER_INFO_AFTER_RE_ONLINE,D.STREAM_MESSAGE_RECOVER,this._recoverStreamMessage,this)}processHistoryMessage(s){const{utils:{isEmpty:r,safeStringify:g},ssoLog:u}=this._core;try{s?.forEach(E=>{var m;if(this._isValidStreamMessage(E)){const D=(m=E?._elements)===null||m===void 0?void 0:m[0],{streamMessageID:M,markdown:T,binaryData:P}=D?.content||{};r(T)&&r(P)?(this._messageMap.set(M,E),this._fetchStreamMessageChunks(E)):D.content.isStreamEnded=!0}})}catch(E){u.error("processHistoryMessage.error",g(E))}}_handleMessageReceived(s){const r=s.data;r?.forEach(g=>{var u,E;if(this._isValidStreamMessage(g)){const{streamMessageID:m}=((E=(u=g?._elements)===null||u===void 0?void 0:u[0])===null||E===void 0?void 0:E.content)||{};m&&(this._messageMap.set(m,g),this._fetchStreamMessageChunks(g))}})}_isValidStreamMessage(s){var r,g;const{utils:{isEmpty:u}}=this._core,{streamMessageID:E}=((g=(r=s?._elements)===null||r===void 0?void 0:r[0])===null||g===void 0?void 0:g.content)||{};return s.type===Vr.MSG_STREAM&&!u(E)}_fetchStreamMessageChunks(s){return mA(this,void 0,void 0,function*(){var r,g;const{constants:{ERROR_CODE:u},ssoLog:E,utils:{safeStringify:m}}=this._core,D=(r=s._elements)===null||r===void 0?void 0:r[0],M=(g=D?.content)===null||g===void 0?void 0:g.streamMessageID;try{const{from:T,to:P}=s,W=D.getLatestIndex();if(D.content.isStreamEnded)return;const oA=yield function(EA){return mA(this,void 0,void 0,function*(){const{from:wA,to:kA,streamMessageID:xA,index:LA}=EA,SA={From_Account:wA,To_Account:kA,StreamMsgID:xA,AckIndex:LA};return Fs.core.common.buildAndSendPacket({servcmd:"StreamMsg.GetStreamHttp",data:SA,timeout:5e3})})}({from:T,to:P,streamMessageID:M,index:W});if(oA){const{ErrorCode:EA,ErrorInfo:wA}=oA;if(EA!==0)throw D.content.errorCode=EA,D.content.errorMessage=wA,{errorCode:EA,errorMessage:wA}}}catch(T){if(T.errorCode===u.NETWORK_TIMEOUT&&this._shouldRetryFetch(M)){const P=this._retryCountMap.get(M)||0;E.debug("_fetchStreamMessageChunks.timeout",`error: ${m(T)} retried: ${P}`),this._retryCountMap.set(M,P+1),this._fetchStreamMessageChunks(s)}else E.error("_fetchStreamMessageChunks.error",m(T))}})}_shouldRetryFetch(s){const{utils:{isNumber:r}}=this._core;if(!this._retryCountMap.has(s))return this._retryCountMap.set(s,1),!0;const g=this._retryCountMap.get(s);return!!(r(g)&&g<=3)}_onStreamEnded(s,r,g){const{ssoLog:u}=this._core;g.content.isStreamEnded=!0,g.stopReason=r,this._messageMap.delete(s),u.debug("_onStreamEnded",`streamMessage end, StopReason: ${r}`)}_handleStreamMessageChunkPush(s){var r;const{ssoLog:g}=this._core,{StopReason:u,Chunks:E,StreamID:m}=s?.body||{},D=this._messageMap.get(m);if(!D)return void g.warn(`_handleStreamMessageChunkPush, unfounded message: ${m}`);const M=(r=D._elements)===null||r===void 0?void 0:r[0];if(M&&this._validateExpectedChunk(M,E)){if(E.length>0){const T=E.map(P=>new lg(P));M.updateChunks(T)}this._emitMessageModify(D),function(T,P){mA(this,void 0,void 0,function*(){const{common:{generateProtocolData:W},utils:{safeStringify:oA},ssoLog:EA,channel:wA}=Fs.core,kA={StreamMsgID:T,AckIndex:P};try{const xA=W({servcmd:"StreamMsg.AckHttp",data:kA});wA.sendPacket(xA)}catch(xA){EA.debug("sendStreamChunkAck",oA(xA))}})}(m,M.getLatestIndex()),M.content.isStreamEnded&&this._onStreamEnded(m,u,M)}}_emitMessageModify(s){const{notificationCenter:r,OuterEvent:{MESSAGE_MODIFIED:g}}=this._core;r.emitOuterEvent(g,{name:g,data:[s]})}_validateExpectedChunk(s,r){const g=s.getLatestIndex()+1;let u=!1;for(let E=0;Em.Index).join(", ")}]`),!1}return!0}_recoverStreamMessage(){this._retryCountMap.clear();const{ssoLog:s,utils:{safeStringify:r}}=this._core;try{const g=Array.from(this._messageMap.entries());for(let u=Math.max(0,g.length-300);u{const LA=this._getResponseBody(kA,E,oA&&EA),SA=this._buildResponse(kA,LA);if(kA.status===200)r(null,SA);else{if(EA&&!wA.includes(EA))return s.url=this._domainName2IP(wA,EA),s.uploadByIP=!0,this.request(s,r);r({code:kA.status,message:JSON.stringify(kA.responseText)},SA)}},kA.onerror=()=>{const LA=this._getResponseBody(kA,E,oA&&EA),SA=this._buildResponse(kA,LA),OA={code:kA.status,message:kA.status===0?"CORS blocked or network error":JSON.stringify(kA.responseText)};r(OA,SA)},s.onProgress&&kA.upload&&(kA.upload.onprogress=LA=>{const{total:SA,loaded:OA}=LA,qA=Math.min(Math.floor(100*OA/SA),100);s.onProgress({total:SA,loaded:OA,percent:qA/100})}),kA.send(P),kA})}_buildResponse(s,r){const g={};return s.getAllResponseHeaders().trim().split(` +`).forEach(u=>{if(u){const[E,m]=u.split(":").map(D=>D.trim());g[E.toLowerCase()]=m}}),{statusCode:s.status,statusMessage:s.statusText,headers:g,data:r}}_getResponseBody(s,r,g){return s.status===200&&r?{location:r,uploadIP:g}:{response:s.responseText,uploadIP:g}}_queryString(s,r="&",g="="){var u;const{isEmpty:E,isPlainObject:m}=(u=this._core)===null||u===void 0?void 0:u.utils;return E(s)?"":m(s)?Object.keys(s).map(D=>{const M=encodeURIComponent(D)+g;return Array.isArray(s[D])?s[D].map(T=>M+encodeURIComponent(T)).join(r):M+encodeURIComponent(s[D])}).filter(Boolean).join(r):void 0}_domainName2IP(s,r){return s.replace(/^http(s)?:\/\/(.*?)\//,`https://${r}/`)}};const Hu=["unknown","image","video","audio","log"];var DI=new class{init(s){this._core=s}request(s,r){var g;const{MINI_APP_NAMESPACE:u,IN_ALIPAY_MINI_APP:E,isUniIOSApp:m}=(g=this._core)===null||g===void 0?void 0:g.utils,{resources:D="",headers:M={},url:T,downloadUrl:P=""}=s;let W=T,oA=null;const EA=P?P.match(/^(https?:\/\/[^/]+\/)([^/]*\/?)(.*)$/):null;if(!EA)return void console.warn("message Invalid download URL format");const wA=decodeURIComponent(EA[3]),kA=wA.includes("?")?wA.split("?")[0]:wA||"",xA={key:s.fileKey||kA,success_action_status:200,"Content-Type":""},LA={};if(m()){const[OA,qA]=T.split("?sign=");qA&&(W=`${OA}?sign=${encodeURIComponent(qA)}`,LA.sign=decodeURIComponent(qA),LA.signature=decodeURIComponent(qA))}let SA={url:W,header:M,name:"file",filePath:D,formData:Object.assign(Object.assign({},xA),LA),timeout:s.timeout||3e5};if(E){const{name:OA}=SA,qA=So(SA,["name"]);SA=Object.assign(Object.assign({},qA),{fileName:"file",fileType:s.fileType?Hu[s.fileType]:"image"})}return oA=u.uploadFile(Object.assign(Object.assign({},SA),{success:OA=>{this._handleResponse({response:OA,downloadUrl:P,callback:r})},fail:OA=>{this._handleResponse({response:OA,downloadUrl:P,callback:r})}})),oA.onProgressUpdate&&oA.onProgressUpdate(OA=>{s.onProgress&&s.onProgress({total:OA.totalBytesExpectedToSend||0,loaded:OA.totalBytesSent||0,percent:OA.progress?Math.floor(OA.progress)/100:0})}),oA}_handleResponse(s){const{downloadUrl:r,response:g,callback:u}=s,E={};if(g.header)for(const D in g.header)g.header.hasOwnProperty(D)&&(E[D.toLowerCase()]=g.header[D]);const m=+g.statusCode;m===200?u(null,{statusCode:m,headers:E,data:Object.assign(Object.assign({},g.data),{location:r})}):u({code:m,message:JSON.stringify(g.data)},{statusCode:m,headers:E,data:void 0})}};function gl(s){return function(r){return Object.prototype.toString.call(r).match(/^\[object (.*)\]$/)[1].toLowerCase()}(s)==="file"}function Lr(s){const r=s||99999999;return Math.round(Math.random()*r)}function Ur(s,r=!0,g=!0){const u=Date.now();return r?g?u-s+" ms":`${Math.round((u-s)/1e3)} s`:g?u-s:Math.round((u-s)/1e3)}function Ig(s){return`${Array.from({length:8},()=>Math.floor(65536*(1+Math.random())).toString(16).substring(1)).join("")}-${s}`}function lr(s,r){return Math.round(Number(s)*10**r)/10**r}function _r(s){return s<=1048576?`${lr(s/1024,1)}KB/s`:`${lr(s/1048576,1)}MB/s`}const ic="TIMImageElem",Fg="TIMSoundElem",Ya="TIMFileElem",Ol="TIMVideoFileElem",ha="RichMediaMessagePlugin",SI=["rich.my-imcloud.com","imrich.qcloud.com"],ou=1,Ba=2,cl=3,PE=255;var su;(function(s){s.UNSENT="unSend",s.SUCCESS="success",s.FAIL="fail"})(su||(su={}));const xE={wechat:/^(wxfile:\/\/tmp_|http:\/\/temp\/|cloud:\/\/temp-)/,alipay:/^(https:\/\/resource\/|alipayfile:\/\/tmp\/)/,baidu:/^(http:\/\/tmp\/|swanfile:\/\/tmp_)/,bytedance:/^(ttfile:\/\/tmp_|\/(var|tmp)\/|tttemp:\/\/)/,qq:/^(qqfile:\/\/tmp_|http:\/\/qtemp\/)/},Jr=Symbol("isCustomUpload");var nu,xt=new class{init(s){this._core=s}addAuthToUrl(s=""){if(this._isMiniProgramTempFile(s))return s;const r=function(g){return g?g.startsWith("https://")?g:g.startsWith("http://")?g.replace("http://","https://"):g:""}(s);return this.processResourceUrl(r)}removeAuthToUrl(s){return function(r,g){const[u,E]=r.split("?");if(!E)return u;const m=E.split("&").reduce((M,T)=>{const[P,W]=T.split("=");return P&&P!==g&&(M[P]=W||""),M},{}),D=Object.keys(m).map(M=>`${M}${m[M]?`=${m[M]}`:""}`).join("&");return D?`${u}?${D}`:u}(s,"authKey")}_isMiniProgramTempFile(s){return!!this.getPlatformFlags().IN_MINI_APP&&Object.values(xE).some(r=>r.test(s))}extractFileFromInput(s){const{utils:{isArray:r}}=this._core;return gl(s)?s:function(g){if(typeof g!="object"||g===null)return!1;const u=Object.getPrototypeOf(g);if(u===null)return!0;let E=u;for(;Object.getPrototypeOf(E)!==null;)E=Object.getPrototypeOf(E);return u===E}(s)&&typeof uni<"u"?r(s.tempFiles)&&s.tempFiles.length>0?s.tempFiles[0]:r(s.files)?s.files[0]:s.tempFile?s.tempFile:null:s instanceof HTMLInputElement&&s.files&&s.files.length>0?s.files[0]:null}probeImageWidthHeight(s){return mA(this,void 0,void 0,function*(){var r;const{IN_MINI_APP:g,IN_BROWSER:u}=((r=this._core)===null||r===void 0?void 0:r.utils)||{};return this._shouldSkipProbing()?{width:0,height:0}:u?this._probeImageDimensionsWeb(s):g?this._probeImageDimensionsMiniApp(s):void 0})}isSimpleCos(){var s;const r=((s=this._core)===null||s===void 0?void 0:s.store.get("cloudConfig"))||{},{simple_cos:g}=r;return g!=="0"}getFileDNList(){var s;let r=SI;const g=((s=this._core)===null||s===void 0?void 0:s.store.get("cloudConfig"))||{},{file_dn_list:u}=g;if(u===void 0)return r;try{JSON.parse(u).forEach(E=>{r.includes(E)||r.push(E)})}catch(E){console.warn(E),r=SI}return r}getPlatform(){var s;return(s=this._core)===null||s===void 0?void 0:s.utils.platform}generateUUID(s,r){var g;let u=`${this.getSDKAppID()}-${this.getCurrentUserID()}-${(g=this._core)===null||g===void 0?void 0:g.utils.randomString()}`;if(r)return`${u}.${r}`;const E=s.name||s.value||s.url||s.tempFilePath,m=E&&E.slice(E.lastIndexOf(".")+1);return m&&(u=`${u}.${m}`),u}processResourceUrl(s){if(!s)return"";let r=s;const g=this.getFileDownloadProxy(),u=this.getAuthKey(),E=this.getFileDNList();return g&&(s.startsWith("http://")?r=s.replace(/^http:\/\/[^/]+/,g):s.startsWith("https://")&&(r=s.replace(/^https:\/\/[^/]+/,g))),u&&r.indexOf("authKey=")===-1&&function(D,M){let T=!1;if(D){const P=D.match(/:\/\/([0-9]?\.)?(.[^/:]+)/),W=P&&P[2]||"";if(W.includes("rich-dev"))return!0;for(let oA=0;oA-1?`${r}&authKey=${u}`:`${r}?authKey=${u}`),r}getCurrentUserID(){var s,r;return(r=(s=this._core)===null||s===void 0?void 0:s.store.get("login"))===null||r===void 0?void 0:r.userId}getSDKAppID(){var s,r;return(r=(s=this._core)===null||s===void 0?void 0:s.store.get("instance"))===null||r===void 0?void 0:r.sdkAppId}getFileDownloadProxy(){var s,r;return((r=(s=this._core)===null||s===void 0?void 0:s.store.get("instance"))===null||r===void 0?void 0:r.fileDownloadProxy)||""}getFileUploadProxy(){var s,r;return((r=(s=this._core)===null||s===void 0?void 0:s.store.get("instance"))===null||r===void 0?void 0:r.fileUploadProxy)||""}getAuthKey(){var s,r;return((r=(s=this._core)===null||s===void 0?void 0:s.store.get("login"))===null||r===void 0?void 0:r.authKey)||""}isPrivateNetWork(){var s,r;return(r=(s=this._core)===null||s===void 0?void 0:s.store.get("instance"))===null||r===void 0?void 0:r.proxyServer}getPlatformFlags(){var s;const{IN_BROWSER:r,IN_MINI_APP:g,IN_RN_APP:u,IN_UNI_NATIVE_APP:E}=(s=this._core)===null||s===void 0?void 0:s.utils;return{IN_BROWSER:r,IN_MINI_APP:g,IN_RN_APP:u,IN_UNI_NATIVE_APP:E}}isEmpty(s){var r;const{isEmpty:g}=(r=this._core)===null||r===void 0?void 0:r.utils;return g(s)}generateURL(s,r){const{needAddAuthToUrl:g=!0}=r||{};return g?this.addAuthToUrl(s):s}_probeImageDimensionsMiniApp(s){var r;const{MINI_APP_NAMESPACE:g}=((r=this._core)===null||r===void 0?void 0:r.utils)||{};return new Promise(u=>{g.getImageInfo({src:s,success:E=>u({width:E.width,height:E.height}),fail:()=>u({width:0,height:0})})})}_shouldSkipProbing(){var s;const{IN_RN_APP:r,IS_IE:g,IE_VERSION:u,IN_WX_MINI_GAME:E}=((s=this._core)===null||s===void 0?void 0:s.utils)||{};return r||g&&u===9||E}_probeImageDimensionsWeb(s){return new Promise(r=>{const g=new Image,u=()=>{g.onload=null,g.onerror=null,g.src=""};g.onload=()=>{r({width:g.width,height:g.height}),u()},g.onerror=()=>{r({width:0,height:0}),u()},g.src=s})}},qu={exports:{}},Ku=(nu||(nu=1,function(s){s.exports=function(r){var g=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];function u(LA,SA){var OA=LA[0],qA=LA[1],Ie=LA[2],le=LA[3];qA=((qA+=((Ie=((Ie+=((le=((le+=((OA=((OA+=(qA&Ie|~qA&le)+SA[0]-680876936|0)<<7|OA>>>25)+qA|0)&qA|~OA&Ie)+SA[1]-389564586|0)<<12|le>>>20)+OA|0)&OA|~le&qA)+SA[2]+606105819|0)<<17|Ie>>>15)+le|0)&le|~Ie&OA)+SA[3]-1044525330|0)<<22|qA>>>10)+Ie|0,qA=((qA+=((Ie=((Ie+=((le=((le+=((OA=((OA+=(qA&Ie|~qA&le)+SA[4]-176418897|0)<<7|OA>>>25)+qA|0)&qA|~OA&Ie)+SA[5]+1200080426|0)<<12|le>>>20)+OA|0)&OA|~le&qA)+SA[6]-1473231341|0)<<17|Ie>>>15)+le|0)&le|~Ie&OA)+SA[7]-45705983|0)<<22|qA>>>10)+Ie|0,qA=((qA+=((Ie=((Ie+=((le=((le+=((OA=((OA+=(qA&Ie|~qA&le)+SA[8]+1770035416|0)<<7|OA>>>25)+qA|0)&qA|~OA&Ie)+SA[9]-1958414417|0)<<12|le>>>20)+OA|0)&OA|~le&qA)+SA[10]-42063|0)<<17|Ie>>>15)+le|0)&le|~Ie&OA)+SA[11]-1990404162|0)<<22|qA>>>10)+Ie|0,qA=((qA+=((Ie=((Ie+=((le=((le+=((OA=((OA+=(qA&Ie|~qA&le)+SA[12]+1804603682|0)<<7|OA>>>25)+qA|0)&qA|~OA&Ie)+SA[13]-40341101|0)<<12|le>>>20)+OA|0)&OA|~le&qA)+SA[14]-1502002290|0)<<17|Ie>>>15)+le|0)&le|~Ie&OA)+SA[15]+1236535329|0)<<22|qA>>>10)+Ie|0,qA=((qA+=((Ie=((Ie+=((le=((le+=((OA=((OA+=(qA&le|Ie&~le)+SA[1]-165796510|0)<<5|OA>>>27)+qA|0)&Ie|qA&~Ie)+SA[6]-1069501632|0)<<9|le>>>23)+OA|0)&qA|OA&~qA)+SA[11]+643717713|0)<<14|Ie>>>18)+le|0)&OA|le&~OA)+SA[0]-373897302|0)<<20|qA>>>12)+Ie|0,qA=((qA+=((Ie=((Ie+=((le=((le+=((OA=((OA+=(qA&le|Ie&~le)+SA[5]-701558691|0)<<5|OA>>>27)+qA|0)&Ie|qA&~Ie)+SA[10]+38016083|0)<<9|le>>>23)+OA|0)&qA|OA&~qA)+SA[15]-660478335|0)<<14|Ie>>>18)+le|0)&OA|le&~OA)+SA[4]-405537848|0)<<20|qA>>>12)+Ie|0,qA=((qA+=((Ie=((Ie+=((le=((le+=((OA=((OA+=(qA&le|Ie&~le)+SA[9]+568446438|0)<<5|OA>>>27)+qA|0)&Ie|qA&~Ie)+SA[14]-1019803690|0)<<9|le>>>23)+OA|0)&qA|OA&~qA)+SA[3]-187363961|0)<<14|Ie>>>18)+le|0)&OA|le&~OA)+SA[8]+1163531501|0)<<20|qA>>>12)+Ie|0,qA=((qA+=((Ie=((Ie+=((le=((le+=((OA=((OA+=(qA&le|Ie&~le)+SA[13]-1444681467|0)<<5|OA>>>27)+qA|0)&Ie|qA&~Ie)+SA[2]-51403784|0)<<9|le>>>23)+OA|0)&qA|OA&~qA)+SA[7]+1735328473|0)<<14|Ie>>>18)+le|0)&OA|le&~OA)+SA[12]-1926607734|0)<<20|qA>>>12)+Ie|0,qA=((qA+=((Ie=((Ie+=((le=((le+=((OA=((OA+=(qA^Ie^le)+SA[5]-378558|0)<<4|OA>>>28)+qA|0)^qA^Ie)+SA[8]-2022574463|0)<<11|le>>>21)+OA|0)^OA^qA)+SA[11]+1839030562|0)<<16|Ie>>>16)+le|0)^le^OA)+SA[14]-35309556|0)<<23|qA>>>9)+Ie|0,qA=((qA+=((Ie=((Ie+=((le=((le+=((OA=((OA+=(qA^Ie^le)+SA[1]-1530992060|0)<<4|OA>>>28)+qA|0)^qA^Ie)+SA[4]+1272893353|0)<<11|le>>>21)+OA|0)^OA^qA)+SA[7]-155497632|0)<<16|Ie>>>16)+le|0)^le^OA)+SA[10]-1094730640|0)<<23|qA>>>9)+Ie|0,qA=((qA+=((Ie=((Ie+=((le=((le+=((OA=((OA+=(qA^Ie^le)+SA[13]+681279174|0)<<4|OA>>>28)+qA|0)^qA^Ie)+SA[0]-358537222|0)<<11|le>>>21)+OA|0)^OA^qA)+SA[3]-722521979|0)<<16|Ie>>>16)+le|0)^le^OA)+SA[6]+76029189|0)<<23|qA>>>9)+Ie|0,qA=((qA+=((Ie=((Ie+=((le=((le+=((OA=((OA+=(qA^Ie^le)+SA[9]-640364487|0)<<4|OA>>>28)+qA|0)^qA^Ie)+SA[12]-421815835|0)<<11|le>>>21)+OA|0)^OA^qA)+SA[15]+530742520|0)<<16|Ie>>>16)+le|0)^le^OA)+SA[2]-995338651|0)<<23|qA>>>9)+Ie|0,qA=((qA+=((le=((le+=(qA^((OA=((OA+=(Ie^(qA|~le))+SA[0]-198630844|0)<<6|OA>>>26)+qA|0)|~Ie))+SA[7]+1126891415|0)<<10|le>>>22)+OA|0)^((Ie=((Ie+=(OA^(le|~qA))+SA[14]-1416354905|0)<<15|Ie>>>17)+le|0)|~OA))+SA[5]-57434055|0)<<21|qA>>>11)+Ie|0,qA=((qA+=((le=((le+=(qA^((OA=((OA+=(Ie^(qA|~le))+SA[12]+1700485571|0)<<6|OA>>>26)+qA|0)|~Ie))+SA[3]-1894986606|0)<<10|le>>>22)+OA|0)^((Ie=((Ie+=(OA^(le|~qA))+SA[10]-1051523|0)<<15|Ie>>>17)+le|0)|~OA))+SA[1]-2054922799|0)<<21|qA>>>11)+Ie|0,qA=((qA+=((le=((le+=(qA^((OA=((OA+=(Ie^(qA|~le))+SA[8]+1873313359|0)<<6|OA>>>26)+qA|0)|~Ie))+SA[15]-30611744|0)<<10|le>>>22)+OA|0)^((Ie=((Ie+=(OA^(le|~qA))+SA[6]-1560198380|0)<<15|Ie>>>17)+le|0)|~OA))+SA[13]+1309151649|0)<<21|qA>>>11)+Ie|0,qA=((qA+=((le=((le+=(qA^((OA=((OA+=(Ie^(qA|~le))+SA[4]-145523070|0)<<6|OA>>>26)+qA|0)|~Ie))+SA[11]-1120210379|0)<<10|le>>>22)+OA|0)^((Ie=((Ie+=(OA^(le|~qA))+SA[2]+718787259|0)<<15|Ie>>>17)+le|0)|~OA))+SA[9]-343485551|0)<<21|qA>>>11)+Ie|0,LA[0]=OA+LA[0]|0,LA[1]=qA+LA[1]|0,LA[2]=Ie+LA[2]|0,LA[3]=le+LA[3]|0}function E(LA){var SA,OA=[];for(SA=0;SA<64;SA+=4)OA[SA>>2]=LA.charCodeAt(SA)+(LA.charCodeAt(SA+1)<<8)+(LA.charCodeAt(SA+2)<<16)+(LA.charCodeAt(SA+3)<<24);return OA}function m(LA){var SA,OA=[];for(SA=0;SA<64;SA+=4)OA[SA>>2]=LA[SA]+(LA[SA+1]<<8)+(LA[SA+2]<<16)+(LA[SA+3]<<24);return OA}function D(LA){var SA,OA,qA,Ie,le,bi,ki=LA.length,Ot=[1732584193,-271733879,-1732584194,271733878];for(SA=64;SA<=ki;SA+=64)u(Ot,E(LA.substring(SA-64,SA)));for(OA=(LA=LA.substring(SA-64)).length,qA=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],SA=0;SA>2]|=LA.charCodeAt(SA)<<(SA%4<<3);if(qA[SA>>2]|=128<<(SA%4<<3),SA>55)for(u(Ot,qA),SA=0;SA<16;SA+=1)qA[SA]=0;return Ie=(Ie=8*ki).toString(16).match(/(.*?)(.{0,8})$/),le=parseInt(Ie[2],16),bi=parseInt(Ie[1],16)||0,qA[14]=le,qA[15]=bi,u(Ot,qA),Ot}function M(LA){var SA,OA,qA,Ie,le,bi,ki=LA.length,Ot=[1732584193,-271733879,-1732584194,271733878];for(SA=64;SA<=ki;SA+=64)u(Ot,m(LA.subarray(SA-64,SA)));for(OA=(LA=SA-64>2]|=LA[SA]<<(SA%4<<3);if(qA[SA>>2]|=128<<(SA%4<<3),SA>55)for(u(Ot,qA),SA=0;SA<16;SA+=1)qA[SA]=0;return Ie=(Ie=8*ki).toString(16).match(/(.*?)(.{0,8})$/),le=parseInt(Ie[2],16),bi=parseInt(Ie[1],16)||0,qA[14]=le,qA[15]=bi,u(Ot,qA),Ot}function T(LA){var SA,OA="";for(SA=0;SA<4;SA+=1)OA+=g[LA>>8*SA+4&15]+g[LA>>8*SA&15];return OA}function P(LA){var SA;for(SA=0;SA"u"||ArrayBuffer.prototype.slice||function(){function LA(SA,OA){return(SA=0|SA||0)<0?Math.max(SA+OA,0):Math.min(SA,OA)}ArrayBuffer.prototype.slice=function(SA,OA){var qA,Ie,le,bi,ki=this.byteLength,Ot=LA(SA,ki),Li=ki;return OA!==r&&(Li=LA(OA,ki)),Ot>Li?new ArrayBuffer(0):(qA=Li-Ot,Ie=new ArrayBuffer(qA),le=new Uint8Array(Ie),bi=new Uint8Array(this,Ot,qA),le.set(bi),Ie)}}(),xA.prototype.append=function(LA){return this.appendBinary(W(LA)),this},xA.prototype.appendBinary=function(LA){this._buff+=LA,this._length+=LA.length;var SA,OA=this._buff.length;for(SA=64;SA<=OA;SA+=64)u(this._hash,E(this._buff.substring(SA-64,SA)));return this._buff=this._buff.substring(SA-64),this},xA.prototype.end=function(LA){var SA,OA,qA=this._buff,Ie=qA.length,le=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(SA=0;SA>2]|=qA.charCodeAt(SA)<<(SA%4<<3);return this._finish(le,Ie),OA=P(this._hash),LA&&(OA=kA(OA)),this.reset(),OA},xA.prototype.reset=function(){return this._buff="",this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},xA.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash.slice()}},xA.prototype.setState=function(LA){return this._buff=LA.buff,this._length=LA.length,this._hash=LA.hash,this},xA.prototype.destroy=function(){delete this._hash,delete this._buff,delete this._length},xA.prototype._finish=function(LA,SA){var OA,qA,Ie,le=SA;if(LA[le>>2]|=128<<(le%4<<3),le>55)for(u(this._hash,LA),le=0;le<16;le+=1)LA[le]=0;OA=(OA=8*this._length).toString(16).match(/(.*?)(.{0,8})$/),qA=parseInt(OA[2],16),Ie=parseInt(OA[1],16)||0,LA[14]=qA,LA[15]=Ie,u(this._hash,LA)},xA.hash=function(LA,SA){return xA.hashBinary(W(LA),SA)},xA.hashBinary=function(LA,SA){var OA=P(D(LA));return SA?kA(OA):OA},xA.ArrayBuffer=function(){this.reset()},xA.ArrayBuffer.prototype.append=function(LA){var SA,OA=wA(this._buff.buffer,LA),qA=OA.length;for(this._length+=LA.byteLength,SA=64;SA<=qA;SA+=64)u(this._hash,m(OA.subarray(SA-64,SA)));return this._buff=SA-64>2]|=qA[SA]<<(SA%4<<3);return this._finish(le,Ie),OA=P(this._hash),LA&&(OA=kA(OA)),this.reset(),OA},xA.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},xA.ArrayBuffer.prototype.getState=function(){var LA=xA.prototype.getState.call(this);return LA.buff=EA(LA.buff),LA},xA.ArrayBuffer.prototype.setState=function(LA){return LA.buff=oA(LA.buff,!0),xA.prototype.setState.call(this,LA)},xA.ArrayBuffer.prototype.destroy=xA.prototype.destroy,xA.ArrayBuffer.prototype._finish=xA.prototype._finish,xA.ArrayBuffer.hash=function(LA,SA){var OA=P(M(new Uint8Array(LA)));return SA?kA(OA):OA},xA}()}(qu)),qu.exports),SC=gI(Ku),K=new class{constructor(){this.uploadFileTryCount=0,this.maxRetries=1,this.systemClockOffset=0,this.httpRequest=null,this.uploadFileType="",this.duration=900,this.fetchCosTryCount=0}init(s){var r;this._core=s;const{IN_MINI_APP:g}=s.utils;this.httpRequest=g?DI:Ju,(r=this.httpRequest)===null||r===void 0||r.init(s)}uploadToCOS(s){return mA(this,void 0,void 0,function*(){const r=`${ha} uploadToCOS`,{ssoLog:g,utils:{safeStringify:u}}=this._core,{file:E}=s;this.uploadFileType=s.uploadFileType,g.debug("uploadToCOS",`${r} options:${u(s)}`);try{const m=Date.now(),D=yield this._createCosOptions(s),M=D.fileExistsInCOS?{data:{location:D.downloadUrl}}:yield this._uploadFile(D);this._handleUploadError(M,s);const T=this._createUploadResult(E,M),P=Date.now()-m,W=function(EA){return EA<1024?`${EA}B`:EA<1048576?`${Math.floor(EA/1024)}KB`:`${Math.floor(EA/1048576)}MB`}(E.size),oA=`size:${W} time:${P}ms speed:${_r(1e3*E.size/P)}`;return g.debug("uploadToCOS",`${r} ok. name:${E.name} ${oA}`),{uploadOptions:D,response:T}}catch(m){throw g.warn("uploadToCOS",`${r} failed, error:${u(m)}`),m}})}_handleUploadError(s,r){var g,u;const{ChatError:E}=(g=this._core)===null||g===void 0?void 0:g.helper;if(s.statusCode===403)throw r.url,!((u=s?.data)===null||u===void 0)&&u.uploadIP&&s.data.uploadIP,new E({message:"Upload failed with status 403"})}_createUploadResult(s,r){return{fileName:s.name,fileSize:s.size,fileType:s.type.slice(s.type.indexOf("/")+1).toLowerCase(),location:r.data.location||"",uploadTime:Ur(Date.now(),!1),uploadSpeed:_r(1e3*s.size/Ur(Date.now(),!1))}}_createCosOptions(s){return mA(this,void 0,void 0,function*(){const{fileName:r,resources:g,uploadMethod:u}=yield this._prepareUploadParams(s),E=this._isC2CConversation(s.message.conversationID)?1:2;try{const m=yield this._fetchCosSignatureUrl({fileType:this.uploadFileType,fileName:r,uploadMethod:u,duration:this.duration,userID:s.message.from,conversationType:E}),{uploadUrl:D,downloadUrl:M,requestSnapshotUrl:T,thumbUrl:P,largeUrl:W,fileKey:oA,existFlag:EA}=m,wA=!xt.isPrivateNetWork()&&m.uploadIP;return{url:this._getRawOrUploadProxyUrl(D),fileType:this.uploadFileType,fileName:r,resources:g,downloadUrl:M,requestSnapshotUrl:T,thumbUrl:P,largeUrl:W,fileKey:oA,uploadIP:wA||"",fileExistsInCOS:EA===1,onProgress:kA=>this._handleUploadProgress(kA,s)}}catch(m){throw console.error("Failed to create COS pre-signed URL options:",m),m}})}_prepareUploadParams(s){return mA(this,void 0,void 0,function*(){const{ssoLog:r,utils:{safeStringify:g,isEmpty:u}}=this._core;r.debug("_prepareUploadParams",` prepareUploadParams:${g(s)}`);const{file:E}=s,{IN_MINI_APP:m,IN_RN_APP:D}=xt.getPlatformFlags(),M=m||D,T=M&&s.message.type!==Ya,{name:P}=E,W=P.slice(P.lastIndexOf(".")),oA=`${Lr(999999)}${W}`,EA=T?E.name:oA,wA=yield this._generateHashFileName(E);return{fileName:u(wA)?Ig(EA):`${wA}${W}`,resources:M?E.url:E,uploadMethod:M?1:0}})}_generateHashFileName(s){return mA(this,void 0,void 0,function*(){const{utils:{IN_MINI_APP:r,IN_BROWSER:g,IN_UNI_NATIVE_APP:u,isArray:E},ssoLog:m}=this._core,D=Date.now();let M="";return g&&(M=yield this._generateHashFileNameInWeb(s)),r&&(E(s.tempFiles)&&(s=s.tempFiles[0]),u||(M=yield this._generateFileNameInMiniProgram(s)),u&&(M=yield this._generateFileNameInUNINativeApp(s))),m.info("_generateHashFileName",`hashFileName:${M} costTime:${Date.now()-D}`),M})}_generateHashFileNameInWeb(s){return mA(this,void 0,void 0,function*(){const{ssoLog:r,utils:{safeStringify:g}}=this._core;let u="";try{u=yield new Promise((E,m)=>{const D=File.prototype.slice||File.prototype.mozSlice||File.prototype.webkitSlice;D||(r.warn("_generateHashFileNameInWeb","Browser does not support file slicing"),E(""));const M=10485760,T=Math.ceil(s.size/M);let P=0;const W=new SC.ArrayBuffer,oA=new FileReader,EA=setTimeout(()=>{oA.abort(),r.warn("_generateHashFileNameInWeb","File hash generation timeout"),E("")},2e3);function wA(){const kA=P*M,xA=kA+M>=s.size?s.size:kA+M;oA.readAsArrayBuffer(D.call(s,kA,xA))}oA.onload=kA=>{r.debug("_generateHashFileNameInWeb",`read chunk nr ${P+1} of ${T}`),W.append(kA.target.result),P++,P{clearTimeout(EA),m(kA)},wA()})}catch(E){r.warn("_generateHashFileNameInWeb",g(E))}return u})}_generateFileNameInMiniProgram(s){return mA(this,void 0,void 0,function*(){const{utils:{MINI_APP_NAMESPACE:r,safeStringify:g,isEmpty:u},ssoLog:E}=this._core;let m="";if(u(s.url))return E.warn("_generateFileNameInMiniProgram","file.url is empty"),m;if(typeof r?.getFileSystemManager!="function")return E.warn("_generateFileNameInUNINativeApp","getFileSystemManager is not a function"),m;try{m=yield new Promise((D,M)=>{r.getFileSystemManager().getFileInfo({filePath:s.url,success:T=>{D(T.digest)},fail:T=>{M(T)}})})}catch(D){E.warn("_generateFileNameInMiniProgram",g(D))}return m})}_generateFileNameInUNINativeApp(s){return mA(this,void 0,void 0,function*(){var r;const{utils:{safeStringify:g,isEmpty:u},ssoLog:E}=this._core;let m="";if(u(s.url))return E.warn("_generateFileNameInUNINativeApp","file.url is empty"),m;if(typeof((r=plus==null?void 0:plus.io)===null||r===void 0?void 0:r.getFileInfo)!="function")return E.warn("_generateFileNameInUNINativeApp","plus.io.getFileInfo is not a function"),m;try{m=yield new Promise((D,M)=>{plus.io.getFileInfo({filePath:s.url,success:T=>{D(T.digest)},fail:T=>{M(T)}})})}catch(D){E.warn("_generateFileNameInMiniProgram",g(D))}return m})}_handleUploadProgress(s,r){if(typeof r.onProgress=="function")try{r.onProgress(s.percent)}catch(g){throw console.warn("Upload progress callback error:",g),g}}_fetchCosSignatureUrl(s){return mA(this,void 0,void 0,function*(){const{ssoLog:r,utils:{safeStringify:g}}=this._core,u=xt.isSimpleCos(),E=this._prepareCosRequestData(s),m=u?"im_cos_msg.simple_sig":"im_cos_msg.pre_sig";try{const D=yield function(T,P,W){return mA(this,void 0,void 0,function*(){try{const{helper:oA,channel:EA}=W,wA=oA.generateCosSpecifiedData({servcmd:T,data:P}),kA=`${wA.head.seq}${T}`;return yield EA.sendPacket(wA,{requestId:kA})}catch(oA){throw console.warn("getCosSig error:",oA),oA}})}(m,E,this._core);this.fetchCosTryCount=0;const M=this._processResponse(D);return r.debug("_fetchCosSignatureUrl",` ok. isSimpleCos:${u} data:${g(M)}`),M||{}}catch(D){if(this.fetchCosTryCount<1)return this.fetchCosTryCount++,this._fetchCosSignatureUrl(s);throw this.fetchCosTryCount=0,D}})}_processResponse(s){var r;const g=xt.isSimpleCos(),u=g?(r=s?.rpt_pre_sig)===null||r===void 0?void 0:r[0]:s;if(!u)return{};if(g){const{str_final_ip:W,rpt_pre_sig:oA,uint32_file_id:EA,uint32_exist_flag:wA,str_download_url:kA,str_upload_url:xA,str_snapshot_url:LA,str_file_key:SA}=u;return{uploadIP:W,preSig:oA,fileID:EA,existFlag:wA,downloadUrl:kA,uploadUrl:xA,requestSnapshotUrl:LA,fileKey:SA}}const{upload_url:E,download_url:m,snapshot_url:D,thumb_url:M,large_url:T,file_key:P}=u;return{uploadUrl:E,downloadUrl:m,requestSnapshotUrl:D,thumbUrl:M,largeUrl:T,fileKey:P}}_prepareCosRequestData(s){return xt.isSimpleCos()?{uint32_upload_method:s.uploadMethod,uint32_platform:xt.getPlatform(),uint32_sdkappid:xt.getSDKAppID(),str_user_id:s.userID,uint32_scene:s.conversationType,rpt_upload_object:[{uint32_file_id:1,uint32_file_type:s.fileType,str_file_name:s.fileName}]}:{file_type:s.fileType,file_name:s.fileName,upload_method:s.uploadMethod,Duration:s.duration}}_uploadFile(s){return mA(this,void 0,void 0,function*(){return new Promise((r,g)=>{this.httpRequest.request(s,(u,E)=>{u&&this.uploadFileTryCount=3e4}_syncSystemClock(s){var r,g,u;const E=((r=s.headers)===null||r===void 0?void 0:r.date)||((g=s.headers)===null||g===void 0?void 0:g.Date)||((u=s.error)===null||u===void 0?void 0:u.ServerTime);if(E){const m=Date.now(),D=Date.parse(E);this.systemClockOffset=D-m}}_getRawOrUploadProxyUrl(s){const r=xt.getFileUploadProxy();let g=s;return r&&(g=s.replace(/^https:\/\/[^/]+/,r)),g}_isC2CConversation(s){return s.slice(0,3)==="C2C"}};const U=2108,sA=2251,b=2252,x=2253,iA=["jpg","jpeg","gif","png","bmp","image","webp"],uA={JPG:1,JPEG:1,GIF:2,PNG:3,BMP:4,UNKNOWN:255},_A=1,ee=2;class fe{constructor(r,g){this.instanceID=Lr(9999999),this.sizeType=r.type||0,this.type=0,this.size=r.size||0,this.width=r.width||0,this.height=r.height||0,this.imageUrl=xt.addAuthToUrl(r.imageUrl||r.url||""),this.url=xt.addAuthToUrl(r.url||g)}setSizeType(r){this.sizeType=r}setType(r){this.type=r}setImageUrl(r){r&&(this.imageUrl=xt.addAuthToUrl(r))}getImageUrl(){return this.imageUrl}}function p(s){const{originUrl:r,originWidth:g,originHeight:u,min:E=198}=s,m=parseInt(g)||0,D=parseInt(u)||0,M={url:void 0,width:0,height:0};if((m<=D?m:D)<=E)M.url=r,M.width=m,M.height=D;else{D<=m?(M.width=Math.ceil(m*E/D),M.height=E):(M.width=E,M.height=Math.ceil(D*E/m));const T=r&&r.indexOf("?")>-1?`${r}&`:`${r}?`;M.url=E===198?`${T}imageView2/3/w/198/h/198`:`${T}imageView2/3/w/720/h/720`}if(r===void 0){const{url:T}=M;return So(M,["url"])}return M}class B{constructor(r){this._imageMemoryURL="",this._percent=0,this.type=ic;const{uuid:g,file:u,imageFormat:E,imageInfoArray:m=[],isCustomUpload:D=!1}=r;this._imageMemoryURL=this.createImageDataAsURL(u),this.content={imageFormat:E,uuid:g,imageInfoArray:[]},this[Jr]=D,this.initImageInfoArray(m),this.autoFixUrl()}static parseServerPushElement(r){const{MsgContent:g}=r,{ImageFormat:u,ImageInfoArray:E,UUID:m}=g,D=function(M){return M.map(T=>({size:T.Size,type:T.Type,width:T.Width,height:T.Height,url:T.URL}))}(E);return new B({imageFormat:u,imageInfoArray:D,uuid:m})}createImageDataAsURL(r){let g="";const{IN_MINI_APP:u,IN_RN_APP:E,IN_BROWSER:m}=xt.getPlatformFlags();return r&&((u||E)&&(g=r.url),m&&(g=window.URL.createObjectURL(r))),g}initImageInfoArray(r=[]){const g={type:0,size:0,width:0,height:0,url:""};for(let u=0;u<3;u++){const E=r[u]||Object.assign({},g),m=new fe(E,this._imageMemoryURL);m.setSizeType(u+1),m.setType(u),this.addImageInfo(m)}this.updateAccessSideImageInfoArray()}autoFixUrl(){const r=["http","https"];this.content.imageInfoArray.forEach(g=>{if(!g.url||g.imageUrl==="")return;const[u,...E]=g.imageUrl.split("://"),m=E.join("://");r.includes(u)||g.setImageUrl(`https://${m}`)})}updatePercent(r){this._percent=Math.min(r,1)}updateImageFormat(r){this.content.imageFormat=uA[r.toUpperCase()]||uA.UNKNOWN}addImageInfo(r){this.content.imageInfoArray.length>=3||this.content.imageInfoArray.push(r)}updateImageInfoArray(r){const g=this.content.imageInfoArray.length;let u;for(let E=0;E({InstanceId:g.instanceID,Type:g.sizeType,MsgType:g.type,Size:g.size,Width:g.width,Height:g.height,URL:xt.removeAuthToUrl(g.imageUrl)}))}}const v=new class{init(s){this.core=s}},G={[ou]:"i",[cl]:"a",[Ba]:"v",[PE]:"f"};let O=null,z=null;function X(s){var r;const{store:g,utils:{isNumber:u,safeStringify:E},ssoLog:m}=v.core;try{const D=((r=g.get("cloudConfig"))===null||r===void 0?void 0:r.upload_size_limit)||"";D!==z&&(z=D,O=JSON.parse(D)||{});const M=O?.[G[s]];if(u(M))return 1024*M*1024}catch(D){m.debug("getCloudControlUploadSizeLimit",E(D))}return null}var rA=new class{constructor(){this._messageOptionsMap=new Map}init(s){var r;this._core=s;const{notificationCenter:g,helper:u,InnerEvent:E,message:m}=s;u.registerApi({apiName:"createImageMessage",context:this}),u.registerExperimentalAPI("createImageMessage",this,"createCustomUploadImageMessage"),(r=m?.messageFactory)===null||r===void 0||r.registerElementClass(ic,B),g.subscribeInnerEvent(E.DESTROY,this._dispose,this)}createImageMessage(s){var r,g,u;try{const E=(r=this._core.store.get("login"))===null||r===void 0?void 0:r.userId,m=(u=(g=this._core)===null||g===void 0?void 0:g.message.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:E})),D=this._processImage(s);s.payload.file=D;const M={imageFormat:uA.UNKNOWN,uuid:xt.generateUUID(D),file:D,imageInfoArray:[]},T=new B(M);return m.setElement(T),this._messageOptionsMap.set(m.clientSequence,s),m}catch(E){throw E}}createCustomUploadImageMessage(s){var r,g,u,E;const{store:m,utils:{isEmpty:D}}=this._core,M=(r=m.get("login"))===null||r===void 0?void 0:r.userId,T=(u=(g=this._core)===null||g===void 0?void 0:g.message.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:M})),{largeImageUuid:P,largeFileSize:W,largeImageWidth:oA,largeImageHeight:EA,largeImageUrl:wA,originImageUuid:kA,originFileSize:xA,originImageWidth:LA,originImageHeight:SA,originImageUrl:OA,thumbImageUuid:qA,thumbFileSize:Ie,thumbImageWidth:le,thumbImageHeight:bi,thumbImageUrl:ki}=((E=s?.payload)===null||E===void 0?void 0:E.file)||{};if(D(OA)||D(kA))throw new Error("createImageMessageExperimental originImageUrl or originImageUuid is empty");const Ot=new B({imageFormat:uA.UNKNOWN,uuid:kA,imageInfoArray:[{instanceID:kA,size:xA,width:LA,height:SA,imageUrl:OA,url:OA},{instanceID:P,size:W,width:oA,height:EA,imageUrl:wA,url:wA},{instanceID:qA,size:Ie,width:le,height:bi,imageUrl:ki,url:ki}],isCustomUpload:!0});return T.setElement(Ot),this._messageOptionsMap.set(T.clientSequence,s),T._skipUpload=!0,T}upload(s){return mA(this,void 0,void 0,function*(){const r=s.getElements()[0],{file:g}=this._messageOptionsMap.get(s.clientSequence).payload;this._validateBeforeUploadImage(g);const u=yield this._performImageUpload(r,s,g),E=this._generateImageInfo(u);return r.updateImageFormat(u?.fileType),r.updateImageInfoArray(E),this._updateImageType(r.content.imageInfoArray),s})}_performImageUpload(s,r,g){return mA(this,void 0,void 0,function*(){const{to:u}=r,E={uploadFileType:ou,file:g,to:u,message:r,onProgress:M=>{var T,P;s.updatePercent(M),(P=(T=this._messageOptionsMap.get(r.clientSequence))===null||T===void 0?void 0:T.onProgress)===null||P===void 0||P.call(T,M)}},{uploadOptions:m,response:D}=yield K.uploadToCOS(E);return this._parseResponse(m,D)})}_generateImageInfo(s){const{location:r,fileSize:g,width:u,height:E,smallImageUrl:m,smallImageWidth:D,smallImageHeight:M,largeImageUrl:T,largeImageWidth:P,largeImageHeight:W,imageInfoArray:oA}=s,EA=xt.addAuthToUrl(r),wA={size:g,url:EA,width:u,height:E};return oA?.length>0?this._processImageInfoArray(oA,g):m&&T?[Object.assign({},wA),{largeImageUrl:T,largeImageWidth:P,largeImageHeight:W},{smallImageUrl:m,smallImageWidth:D,smallImageHeight:M}]:[Object.assign({},wA),this._generateThumbInfo(EA,u,E,720),this._generateThumbInfo(EA,u,E,198)]}_generateThumbInfo(s,r,g,u){return p({originUrl:s,originWidth:r,originHeight:g,min:u})}_processImageInfoArray(s,r){let g,u,E;for(const m of s)m.type===1?(u=m,u.size=r):m.type===2?(E=m,E.size=r):(g=m,g.size=r);return[Object.assign({},g),Object.assign({},E),Object.assign({},u)]}_parseResponse(s,r){return mA(this,void 0,void 0,function*(){try{const{thumbUrl:g,largeUrl:u,downloadUrl:E}=s;if(g&&u&&(yield this._getImageInfoByUrl(g,r,"thumb"),yield this._getImageInfoByUrl(u,r,"large")),xt.isSimpleCos()&&!xt.isPrivateNetWork()&&(yield this._getImageInfoArray(E,r),r?.uploadIP)){const m=this._extractDomainFromUrl(E);m&&(yield this._getDownloadIP(m,r))}return r}catch(g){throw g}})}_extractDomainFromUrl(s){var r;try{const g=s.match(/:\/\/([^\/]+)/);return g?g[1]:null}catch(g){return(r=this._core)===null||r===void 0||r.ssoLog.warn("_extractDomainFromUrl",`Failed to extract domain from URL:${g.message}`),null}}_getImageInfoByUrl(s,r,g){return mA(this,void 0,void 0,function*(){var u;try{const E=xt.addAuthToUrl(s),{width:m=0,height:D=0}=yield xt.probeImageWidthHeight(E);r.width=m,r.height=D,g==="thumb"?(r.smallImageUrl=s,r.smallImageWidth=m,r.smallImageHeight=D):(r.largeImageUrl=s,r.largeImageWidth=m,r.largeImageHeight=D)}catch(E){(u=this._core)===null||u===void 0||u.ssoLog.warn("_getImageInfoByUrl",`Failed to get ${g} image info:${E.message}`)}})}_validateBeforeUploadImage(s){var r;const{ChatError:g}=(r=this._core)===null||r===void 0?void 0:r.helper;if(!s)throw new g({code:sA});this._checkImageType(s),this._checkImageSize(s)}_processImage(s){var r;try{const{IN_MINI_APP:g}=(r=this._core)===null||r===void 0?void 0:r.utils;let{file:u}=s.payload;return u=g?this._processMiniAppImageFile(u):this._processWebImageFile(u),u}catch(g){throw g}}_processMiniAppImageFile(s){gl(s)&&console.warn("FileUnsupportedInMiniApp","createImageMessage");const r=s.tempFiles[0].path||s.tempFiles[0].tempFilePath;return{url:r,name:r.slice(r.lastIndexOf("/")+1),size:s.tempFiles&&s.tempFiles[0].size||1,type:r.slice(r.lastIndexOf(".")+1).toLowerCase()}}_processWebImageFile(s){var r;const{ChatError:g}=(r=this._core)===null||r===void 0?void 0:r.helper,u=xt.extractFileFromInput(s);if(!u)throw new g({message:"Invalid file. Pass either `e.target` (from file input) or a File object"});return u}_getDownloadIP(s,r){return mA(this,void 0,void 0,function*(){const g=`${ha} getDownloadIP domainName: ${s}`;try{const u=yield function(m,D){return mA(this,void 0,void 0,function*(){try{const{helper:M,channel:T}=D,P="im_cos_msg.get_final_ip",W={str_domain:m},oA=M.generateProtocolData({servcmd:P,data:W}),EA=`${oA.head.seq}${P}`;return yield T.sendPacket(oA,{requestId:EA})}catch(M){throw console.warn("getFinalIP error:",M),M}})}(s,this._core);if(!u||!u.str_final_ip)return;console.log(`${g} ok. downloadIP:${u}`);const E=r.location.split("/");E[0]=u.str_final_ip,r.location=E.join("/")}catch(u){console.warn(u)}})}_getImageInfoArray(s,r){return mA(this,void 0,void 0,function*(){try{const g=yield function(u,E){return mA(this,void 0,void 0,function*(){try{const{helper:m,channel:D}=E,M="im_cos_msg.get_imageinfo",T={str_image_url:u},P=m.generateProtocolData({servcmd:M,data:T}),W=`${P.head.seq}${M}`;return yield D.sendPacket(P,{requestId:W})}catch(m){throw console.warn("getImageInfo error:",m),m}})}(s,this._core);return r.imageInfoArray=this._processImageInfoResponse(g),r}catch(g){throw r.imageInfoArray=void 0,g}})}_processImageInfoResponse(s){if(!s)return[];const{rpt_msg_image_info:r}=s;return r.map(g=>({type:g.uint32_image_type,url:g.str_url,width:g.uint32_width,height:g.uint32_height,imageFormat:g.str_image_format}))}_checkImageType(s){const{utils:r,helper:g}=this._core;let u="";if(r.IN_MINI_APP&&(u=s.url.slice(s.url.lastIndexOf(".")+1)),r.IN_BROWSER&&(u=s.name.slice(s.name.lastIndexOf(".")+1)),iA.indexOf(u.toLowerCase())<0)throw new g.ChatError({code:b})}_checkImageSize(s){const{utils:r,helper:g,store:u}=this._core;let E=0;if(E=(r.IN_MINI_APP,s.size),E===0)throw new g.ChatError({code:U});if(E>=(X(ou)||20971520))throw new g.ChatError({code:x})}_updateImageType(s){s[1].type=ee,s[2].type=_A}_reset(){this._messageOptionsMap.clear()}_dispose(){this._reset();const{notificationCenter:s,InnerEvent:r}=this._core;s.unSubscribeInnerEvent(r.DESTROY,this._dispose,this)}};const DA=2108,GA=2401,JA=2402,ne="2.5.0",he="1.18.0";function Ze(s,r){const g=s.split("."),u=r.split("."),E=Math.max(g.length,u.length);for(;g.lengthM)return 1;if(D0;return{isValid:r,error:r?null:{message:"content can not be empty"}}}transformToServerFormat(r){const{isMergerMessage:g=!1}=r||{},u=g?this.payload:this.content,{uuid:E,downloadFlag:m,fileUrl:D,fileName:M,fileSize:T}=u;return{MsgType:this.type,MsgContent:{Download_Flag:m,Url:xt.removeAuthToUrl(D),FileName:M,FileSize:T,UUID:E}}}_getFileInfo(r){const{utils:{IN_UNI_NATIVE_APP:g}}=v.core;if(r.fileName&&r.fileSize)return{size:r.fileSize,name:r.fileName};const{file:u}=r;return u?(g&&this._processNativeAppFile(u),{size:u.size,name:u.name}):{size:0,name:""}}_processNativeAppFile(r){if(r.path&&r.path.includes(".")){const g=r.path.slice(r.path.lastIndexOf(".")+1).toLowerCase();r.type=g,r.name||(r.name=`${Lr(999999)}.${g}`)}r.name||(r.type="",r.name=r.path.slice(r.path.lastIndexOf("/")+1).toLowerCase()),r.suffix&&(r.type=r.suffix),r.url||(r.url=r.path)}}st=Jr;var Ft=new class{constructor(){this._messageOptionsMap=new Map}init(s){var r;this._core=s;const{notificationCenter:g,helper:u,InnerEvent:E,message:m}=s;u.registerApi({apiName:"createFileMessage",context:this}),u.registerExperimentalAPI("createFileMessage",this,"createCustomUploadFileMessage"),(r=m?.messageFactory)===null||r===void 0||r.registerElementClass(Ya,at),g.subscribeInnerEvent(E.DESTROY,this._dispose,this)}createFileMessage(s){var r,g,u;try{this._checkVersion();const E=this._processFile(s.payload.file);s.payload.file=E;const m=(r=this._core.store.get("login"))===null||r===void 0?void 0:r.userId,D=(u=(g=this._core)===null||g===void 0?void 0:g.message.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:m})),M={uuid:xt.generateUUID(E),file:E},T=new at(M);return D.setElement(T),this._messageOptionsMap.set(D.clientSequence,s),D}catch(E){throw E}}createCustomUploadFileMessage(s){var r,g,u;try{const{store:E,message:m,utils:{isEmpty:D}}=this._core,M=(r=E.get("login"))===null||r===void 0?void 0:r.userId,{url:T,uuid:P,fileSize:W,fileName:oA=""}=((g=s?.payload)===null||g===void 0?void 0:g.file)||{};if(D(T))throw new Error("url is required");const EA=(u=m.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:M})),wA=new at({url:T,uuid:P,file:{size:W,name:oA},isCustomUpload:!0});return EA.setElement(wA),EA}catch(E){throw E}}upload(s){return mA(this,void 0,void 0,function*(){const{file:r}=this._messageOptionsMap.get(s.clientSequence).payload;this._validateBeforeUploadFile(r);const g=s.getElements()[0],u=yield this._performFileUpload(g,s,r),E=xt.addAuthToUrl(u?.location);return g.updateFileUrl(E),s})}_validateBeforeUploadFile(s){const{helper:{ChatError:r}}=this._core;if(!s)throw new r({code:GA});const g=X(PE)||104857600;if(s.size>g)throw new r({code:JA});if(s.size===0)throw new r({code:DA})}_performFileUpload(s,r,g){return mA(this,void 0,void 0,function*(){const{to:u}=r,E={uploadFileType:PE,file:g,to:u,message:r,onProgress:D=>{var M,T;s.updatePercent(D),(T=(M=this._messageOptionsMap.get(r.clientSequence))===null||M===void 0?void 0:M.onProgress)===null||T===void 0||T.call(M,D)}},{response:m}=yield K.uploadToCOS(E);return m})}_processFile(s){var r,g;const{IN_BROWSER:u,IN_RN_APP:E,IN_WX_MINI_APP:m,IN_QQ_MINI_APP:D,IN_UNI_NATIVE_APP:M}=(r=this._core)===null||r===void 0?void 0:r.utils,{ChatError:T}=(g=this._core)===null||g===void 0?void 0:g.helper;if(u||M){const P=xt.extractFileFromInput(s);if(!P)throw new T({message:"Invalid file. Pass either `e.target` (from file input) or a File object"});return P}if(m||D){const{tempFiles:P}=s;return Object.assign(Object.assign({},P[0]),{url:P[0].path})}return E?Object.assign(Object.assign({},s),{url:s.uri}):s}_checkVersion(){var s,r;const{MINI_APP_NAMESPACE:g,IN_MINI_APP:u,IN_WX_MINI_APP:E,IN_QQ_MINI_APP:m,IN_UNI_NATIVE_APP:D}=(s=this._core)===null||s===void 0?void 0:s.utils,{ChatError:M}=(r=this._core)===null||r===void 0?void 0:r.helper;if(u){if(!(E||m||D))throw new M({message:"Unsupported mini app environment"});const T=g.getSystemInfoSync().SDKVersion;if(E&&Ze(T,ne)<0)throw new M({message:`WXChooseMessageFile requires SDK version ${ne} or higher`});if(m&&Ze(T,he)<0)throw new M({message:`QQChooseMessageFile requires SDK version ${he} or higher`})}}_reset(){this._messageOptionsMap.clear()}_dispose(){this._reset();const{notificationCenter:s,InnerEvent:r}=this._core;s.unSubscribeInnerEvent(r.DESTROY,this._dispose,this)}};const Ht=2108,Pi=2351,co=2352,Xi=["mp4","quicktime","mov","video"];var di;class xo{constructor(r){this.type=Ol,this.uploadProgress=0,this[di]=!1;const g=typeof r?.videoSecond=="number"?r?.videoSecond:0;this[Jr]=r.isCustomUpload||!1,this.content={remoteVideoUrl:xt.addAuthToUrl(r.remoteVideoUrl||r.videoUrl||""),videoFormat:r.videoFormat,videoSecond:parseInt(g?.toString(),10),videoSize:r.videoSize,videoUrl:xt.addAuthToUrl(r.videoUrl),videoDownloadFlag:2,videoUUID:r.videoUUID,thumbUUID:r.thumbUUID,thumbFormat:r.thumbFormat,thumbWidth:r.thumbWidth,snapshotWidth:r.thumbWidth,thumbHeight:r.thumbHeight,snapshotHeight:r.thumbHeight,thumbSize:r.thumbSize,snapshotSize:r.thumbSize,thumbDownloadFlag:2,thumbUrl:xt.addAuthToUrl(r.thumbUrl),snapshotUrl:xt.addAuthToUrl(r.thumbUrl)}}static parseServerPushElement(r){const{MsgContent:g}=r,{VideoUrl:u,VideoFormat:E,VideoSecond:m,VideoSize:D,VideoDownloadFlag:M,VideoUUID:T,ThumbUUID:P,ThumbFormat:W,ThumbWidth:oA,SnapshotWidth:EA,ThumbHeight:wA,SnapshotHeight:kA,ThumbSize:xA,SnapshotSize:LA,ThumbDownloadFlag:SA,ThumbUrl:OA,SnapshotUrl:qA}=g;return new xo({videoUrl:u,videoFormat:E,videoSecond:m,videoSize:D,videoDownloadFlag:M,videoUUID:T,thumbUUID:P,thumbFormat:W,thumbWidth:oA,snapshotWidth:EA,thumbHeight:wA,snapshotHeight:kA,thumbSize:xA,snapshotSize:LA,thumbDownloadFlag:SA,thumbUrl:OA,snapshotUrl:qA})}updatePercent(r){this.uploadProgress=Math.min(r,1)}updateVideoUrl(r){r&&(this.content.remoteVideoUrl=r)}updateSnapshotInfo(r){const{snapshotUrl:g,snapshotWidth:u,snapshotHeight:E}=r;xt.isEmpty(g)||(this.content.thumbUrl=this.content.snapshotUrl=g),xt.isEmpty(u)||(this.content.thumbWidth=this.content.snapshotWidth=Number(u)),xt.isEmpty(E)||(this.content.thumbHeight=this.content.snapshotHeight=Number(E))}validateBeforeSend(){if(this[Jr])return{isValid:!0};const r=this.content.remoteVideoUrl!=="";return{isValid:r,error:r?null:{message:"content can not be empty"}}}transformToServerFormat(r){const{isMergerMessage:g=!1}=r||{},u=g?this.payload:this.content,{remoteVideoUrl:E,videoFormat:m,videoSecond:D,videoSize:M,videoDownloadFlag:T,videoUUID:P,thumbUUID:W,thumbFormat:oA,thumbWidth:EA,snapshotWidth:wA,thumbHeight:kA,snapshotHeight:xA,thumbSize:LA,snapshotSize:SA,thumbDownloadFlag:OA,thumbUrl:qA,snapshotUrl:Ie}=u;return{MsgType:this.type,MsgContent:{VideoUrl:xt.removeAuthToUrl(E),VideoFormat:m,VideoSecond:D,VideoSize:M,VideoDownloadFlag:T,VideoUUID:P,ThumbUUID:W,ThumbFormat:oA,ThumbWidth:EA,SnapshotWidth:wA,ThumbHeight:kA,SnapshotHeight:xA,ThumbSize:LA,SnapshotSize:SA,ThumbDownloadFlag:OA,ThumbUrl:xt.removeAuthToUrl(qA),SnapshotUrl:xt.removeAuthToUrl(Ie)}}}}di=Jr;var ts,mi=new class{constructor(){this._messageOptionsMap=new Map}init(s){var r;this._core=s;const{notificationCenter:g,helper:u,InnerEvent:E,message:m}=s;u.registerApi({apiName:"createVideoMessage",context:this}),u.registerExperimentalAPI("createVideoMessage",this,"createCustomUploadVideoMessage"),(r=m?.messageFactory)===null||r===void 0||r.registerElementClass(Ol,xo),g.subscribeInnerEvent(E.DESTROY,this._dispose,this)}createVideoMessage(s){var r,g,u;try{const E=this._processVideo(s);s.payload.file=E;const m=(r=this._core.store.get("login"))===null||r===void 0?void 0:r.userId,D=(u=(g=this._core)===null||g===void 0?void 0:g.message.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:m})),M={videoFormat:E.videoFile.type,videoSecond:lr(E.videoFile.second,0),videoSize:E.videoFile.size,remoteVideoUrl:"",videoUrl:E.videoFile.url,videoUUID:xt.generateUUID(E.videoFile),thumbUUID:xt.generateUUID(E.videoFile,"jpg"),thumbWidth:E.width||200,thumbHeight:E.height||200,thumbUrl:E.thumbUrl,thumbSize:E.thumbSize,thumbFormat:"jpg"},T=new xo(M);return D.setElement(T),this._messageOptionsMap.set(D.clientSequence,s),D}catch(E){throw E}}createCustomUploadVideoMessage(s){var r,g,u;try{const{store:E,message:m}=this._core;this._validateCustomUploadVideoMessage(s);const D=(r=E.get("login"))===null||r===void 0?void 0:r.userId,{videoUrl:M,videoUuid:T,duration:P,snapshotUrl:W,snapshotUuid:oA,videoFileSize:EA,videoType:wA,snapshotWidth:kA,snapshotHeight:xA,snapshotFileSize:LA,snapshotType:SA="jpg"}=((g=s?.payload)===null||g===void 0?void 0:g.file)||{},OA=(u=m.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:D})),qA=new xo({videoFormat:wA,videoSecond:P||0,videoSize:EA,remoteVideoUrl:M,videoUrl:M,videoUUID:T,thumbUUID:oA,thumbWidth:kA||200,thumbHeight:xA||200,thumbUrl:W,thumbSize:LA,thumbFormat:SA,isCustomUpload:!0});return OA.setElement(qA),this._messageOptionsMap.set(OA.clientSequence,s),OA}catch(E){throw E}}upload(s){return mA(this,void 0,void 0,function*(){const r=s.getElements()[0],{file:g}=this._messageOptionsMap.get(s.clientSequence).payload;this._validateBeforeUploadVideo(g);const u=yield this._performVideoUpload(r,s,g),{location:E,snapshotInfo:m}=u,D=xt.addAuthToUrl(E);return r.updateVideoUrl(D),xt.isEmpty(m)||r.updateSnapshotInfo(m),s})}_validateBeforeUploadVideo(s){const{helper:{ChatError:r}}=this._core,g=X(Ba)||104857600;if(s.videoFile.size>g)throw new r({code:Pi});if(s.videoFile.size===0)throw new r({code:Ht});if(Xi.indexOf(s.videoFile.type)===-1)throw new r({code:co})}_validateCustomUploadVideoMessage(s){var r;const{utils:{isEmpty:g,isNumber:u}}=this._core,{videoUrl:E,videoUuid:m,duration:D,snapshotUrl:M,snapshotUuid:T}=((r=s?.payload)===null||r===void 0?void 0:r.file)||{};if(g(E)||g(m)||!u(D)||g(M)||g(T))throw new Error("Invalid video message options: missing required fields (videoUrl, videoUuid, duration, snapshotUrl, snapshotUuid)")}_performVideoUpload(s,r,g){return mA(this,void 0,void 0,function*(){const{to:u}=r,E={uploadFileType:Ba,file:g,to:u,message:r,onProgress:M=>{var T,P;s.updatePercent(M),(P=(T=this._messageOptionsMap.get(r.clientSequence))===null||T===void 0?void 0:T.onProgress)===null||P===void 0||P.call(T,M)}},{response:m,uploadOptions:D}=yield K.uploadToCOS(E);return{snapshotInfo:yield this._getSnapshotInfoByUrl(D.requestSnapshotUrl),location:m.location}})}_processVideo(s){var r,g;try{const{ChatError:u}=(r=this._core)===null||r===void 0?void 0:r.helper,{IN_MINI_APP:E,IN_BROWSER:m}=(g=this._core)===null||g===void 0?void 0:g.utils;let{file:D}=s.payload,M={};if(E&&(M=this._processMiniVideoFile(D),D.name=M.name,D.url=M.url,D.type=M.type),m){const T=xt.extractFileFromInput(D);if(!T)throw new u({message:"Invalid file. Pass either `e.target` (from file input) or a File object"});D=T,M=this._processWebVideoFile(D)}return D.videoFile=M,D.thumbUrl="",D.thumbSize=0,D}catch(u){throw console.warn(`${ha} _processFile error:`,u),u}}_processMiniVideoFile(s){const{utils:{IN_UNI_NATIVE_APP:r},helper:{ChatError:g}}=this._core;if(gl(s))throw new g({message:"FileUnsupportedInMiniApp"});Array.isArray(s.tempFiles)&&(s=s.tempFiles[0]);let u=s.tempFilePath.slice(s.tempFilePath.lastIndexOf(".")+1).toLowerCase();return r&&(u=s.fileType||u),{url:s.tempFilePath,name:s.tempFilePath.slice(s.tempFilePath.lastIndexOf("/")+1),size:s.size||1,second:s.duration||0,type:u}}_processWebVideoFile(s){const{name:r,size:g=1,duration:u=0,type:E}=s,m=E.split("/")[1];return{url:window.URL.createObjectURL(s),name:r,size:g,second:u,type:m}}_getSnapshotInfoByUrl(s){return mA(this,void 0,void 0,function*(){const{ssoLog:r}=this._core;try{r.debug("_getSnapshotInfoByUrl",`${ha} _getSnapshotInfoByUrl url:${s}`);const g={version:1,platform:xt.getPlatform(),cover_name:Ig(Lr(99999)),snapshot_url:s},u=yield function(T,P){return mA(this,void 0,void 0,function*(){try{const W="im_cos_msg.video_cover",{helper:oA,channel:EA}=P,wA=oA.generateCosSpecifiedData({servcmd:W,data:T}),kA=`${wA.head.seq}${W}`;return yield EA.sendPacket(wA,{requestId:kA})}catch(W){throw console.warn("getSnapshotInfo error:",W),W}})}(g,this._core),{download_url:E}=u||{};if(r.debug("_getSnapshotInfoByUrl",`${ha} _getSnapshotInfoByUrl OK snapshotUrl:${E}`),xt.isEmpty(E))return{};const m=xt.addAuthToUrl(E),{width:D=0,height:M=0}=yield xt.probeImageWidthHeight(m);return{snapshotUrl:m,snapshotWidth:D,snapshotHeight:M}}catch(g){throw g}})}_reset(){this._messageOptionsMap.clear()}_dispose(){this._reset();const{notificationCenter:s,InnerEvent:r}=this._core;s.unSubscribeInnerEvent(r.DESTROY,this._dispose,this)}};class zi{constructor(r){this.uploadProgress=0,this.type=Fg,this[ts]=!1,this[Jr]=r.isCustomUpload||!1,this.content={downloadFlag:2,second:r.second,size:r.size,url:xt.generateURL(r.url,{needAddAuthToUrl:!this[Jr]}),remoteAudioUrl:xt.addAuthToUrl(r.url||""),uuid:r.uuid}}static parseServerPushElement(r){const{MsgContent:g}=r,{Url:u,Download_Flag:E,Second:m,Size:D,UUID:M}=g;return new zi({url:u,downloadFlag:E,second:m,size:D,uuid:M})}updatePercent(r){this.uploadProgress=Math.min(r,1)}updateAudioUrl(r){this.content.remoteAudioUrl=r}validateBeforeSend(){if(this[Jr])return{isValid:!0};const r=this.content.remoteAudioUrl!=="";return{isValid:r,error:r?null:{message:"content can not be empty"}}}transformToServerFormat(r){const{isMergerMessage:g=!1}=r||{},u=g?this.payload:this.content,{uuid:E,downloadFlag:m,remoteAudioUrl:D,size:M,second:T}=u;return{MsgType:this.type,MsgContent:{Url:xt.removeAuthToUrl(D),Download_Flag:m,Second:T,Size:M,UUID:E}}}}ts=Jr;const Ws=2108,Ne=2300,Tt=2301;var FA=new class{constructor(){this._messageOptionsMap=new Map}init(s){var r;this._core=s;const{notificationCenter:g,helper:u,InnerEvent:E,message:m}=s;u.registerApi({apiName:"createAudioMessage",context:this}),u.registerExperimentalAPI("createAudioMessage",this,"createCustomUploadAudioMessage"),(r=m?.messageFactory)===null||r===void 0||r.registerElementClass(Fg,zi),g.subscribeInnerEvent(E.DESTROY,this._dispose,this)}createAudioMessage(s){var r,g,u;try{let{file:E}=s.payload;E=this._processAudioFile(s.payload.file),s.payload.file=E;const m=(r=this._core.store.get("login"))===null||r===void 0?void 0:r.userId,D=(u=(g=this._core)===null||g===void 0?void 0:g.message.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:m})),M={second:Math.max(1,Math.round((E.duration||E.second)/1e3)),size:E.fileSize||E.size||1,url:E.tempFilePath||E.uri||E.url,uuid:xt.generateUUID(E)},T=new zi(M);return D.setElement(T),this._messageOptionsMap.set(D.clientSequence,s),D}catch(E){throw E}}createCustomUploadAudioMessage(s){var r,g,u;try{this._validateCustomUploadOptions(s);const{store:E,message:m}=this._core,D=(r=E.get("login"))===null||r===void 0?void 0:r.userId,{url:M,uuid:T,duration:P,fileSize:W}=((g=s?.payload)===null||g===void 0?void 0:g.file)||{},oA=(u=m.messageFactory)===null||u===void 0?void 0:u.createMessage(Object.assign(Object.assign({},s),{from:D})),EA=new zi({second:P,size:W||1,url:M,uuid:T,isCustomUpload:!0});return oA.setElement(EA),this._messageOptionsMap.set(oA.clientSequence,s),oA}catch(E){throw E}}upload(s){return mA(this,void 0,void 0,function*(){const{ssoLog:r,utils:{safeStringify:g}}=this._core;r.debug("upload",`${ha} uploadAudio message:${g(s)}`);const{file:u}=this._messageOptionsMap.get(s.clientSequence).payload;this._validateBeforeUploadAudio(u);const E=s.getElements()[0],m=yield this._performAudioUpload(E,s,u),D=xt.addAuthToUrl(m?.location);return E.updateAudioUrl(D),s})}_validateBeforeUploadAudio(s){const{helper:{ChatError:r},store:g}=this._core;if(!s)throw new r({code:Ne});const u=X(cl)||20971520;if(s.size>u)throw new r({code:Tt});if(s.size===0)throw new r({code:Ws})}_performAudioUpload(s,r,g){return mA(this,void 0,void 0,function*(){const{to:u}=r,E={uploadFileType:cl,file:g,to:u,message:r,onProgress:D=>{var M,T;s.updatePercent(D),(T=(M=this._messageOptionsMap.get(r.clientSequence))===null||M===void 0?void 0:M.onProgress)===null||T===void 0||T.call(M,D)}},{response:m}=yield K.uploadToCOS(E);return m})}_processAudioFile(s){var r;const{IN_MINI_APP:g,IN_BROWSER:u}=(r=this._core)===null||r===void 0?void 0:r.utils;return g?this._processMiniFile(s):u?this._processWebFile(s):void 0}_processMiniFile(s){return{url:s.tempFilePath,name:s.tempFilePath.slice(s.tempFilePath.lastIndexOf("/")+1),size:s.fileSize,second:s.duration,type:s.tempFilePath.slice(s.tempFilePath.lastIndexOf(".")+1).toLowerCase()}}_processWebFile(s){if(s.tempFilePath||s.uri)return s;const r=URL.createObjectURL(s);return s.tempFilePath=r,s}_validateCustomUploadOptions(s){var r;const{utils:{isEmpty:g}}=this._core,{url:u,uuid:E,duration:m}=((r=s?.payload)===null||r===void 0?void 0:r.file)||{};if(g(u)||g(E)||g(m))throw new Error("Invalid audio message options")}_reset(){this._messageOptionsMap.clear()}_dispose(){this._reset();const{notificationCenter:s,InnerEvent:r}=this._core;s.unSubscribeInnerEvent(r.DESTROY,this._dispose,this)}};const Ai={to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1},payload:{required:!0,rules:["object"],allowEmpty:!1},cloudCustomData:{required:!1,rules:["string"],allowEmpty:!1},priority:{required:!1,rules:["string"],allowEmpty:!1},customModerationConfigurationID:{required:!1,rules:["string"],allowEmpty:!1},onProgress:{required:!1,rules:["function"],allowEmpty:!1}},En={createImageMessage:Ai,createAudioMessage:Ai,createVideoMessage:Ai,createFileMessage:Ai},ii={createImageMessage:!0,createAudioMessage:!0,createVideoMessage:!0,createFileMessage:!0},us={[ic]:rA,[Ya]:Ft,[Ol]:mi,[Fg]:FA};var wi=new class{constructor(){this.name="RichMediaMessage"}install(s){this._core=s;const{constants:{OuterConstant:{MSG_AUDIO:r,MSG_FILE:g,MSG_IMAGE:u,MSG_VIDEO:E}}}=s;v.init(s),rA.init(s),Ft.init(s),mi.init(s),FA.init(s),K.init(s),xt.init(s),s.helper.registerApi({apiName:"sendMessage",context:this,matcher:m=>[r,g,u,E].includes(m[0].type)}),s.helper.registerValidateConfig({auth:ii,params:En})}sendMessage(s,r){return mA(this,void 0,void 0,function*(){var g,u,E;try{return this._isCustomUpload(s)||(yield this._upload(s)),yield(E=(u=(g=this._core)===null||g===void 0?void 0:g.message)===null||u===void 0?void 0:u.messageSender)===null||E===void 0?void 0:E.sendMessage(s,r)}catch(m){throw m}})}_upload(s){return mA(this,void 0,void 0,function*(){const{ssoLog:r,utils:{safeStringify:g}}=this._core;if(r.debug("_upload",` uploadFile message:${g(s)}`),s._relayFlag!==!0)try{const u=us[s.type];u&&(yield u.upload(s),r.info("_upload",` type:${s.type}`))}catch(u){throw s.status=su.FAIL,u instanceof Error&&(u.data={message:s}),this._core.message.messageDataHandler.storeConversationMessage(s),u}})}_isCustomUpload(s){var r,g;return((g=(r=s._elements)===null||r===void 0?void 0:r[0])===null||g===void 0?void 0:g[Jr])===!0}};const Bo=new class{init(s){this.core=s}};class Bt{constructor(r){this.conversationID=r.conversationID||"",this.unreadCount=r.unreadCount||0,this.type=r.type||"",this.lastMessage=Bo.core.common.buildLastMessage(r.lastMessage),this.peerReadTime=r.peerReadTime||0,this.groupAtInfoList=[],this.remark=r.remark||"",this.isPinned=r.isPinned||!1,this.messageRemindType=r.messageRemindType,this.markList=r.markList||[],this.customData=r.customData||"",this.conversationGroupList=r.conversationGroupList||[],this.draftText=r.draftText||"",this.userProfile=r.userProfile,this.groupProfile=r.groupProfile,this.subType=r.subType||"",this._isInfoCompleted=!1,this._init()}_init(){var r;const{core:{OuterConstant:g,utils:{isUndefined:u}}}=Bo;u(this.userProfile)&&this.type===g.CONV_C2C?this.userProfile={userID:this.conversationID.replace(g.CONV_C2C,"")}:this.type===g.CONV_GROUP&&(!this.subType&&(!((r=this.groupProfile)===null||r===void 0)&&r.type)&&(this.subType=this.groupProfile.type),u(this.groupProfile)&&(this.groupProfile={groupID:this.conversationID.replace(g.CONV_GROUP,""),selfInfo:{},lastMessage:{},type:this.subType}))}updateUnreadCount(r){var g;const{core:{OuterConstant:u,utils:{isUndefined:E},store:m}}=Bo,{nextUnreadCount:D,isFromGetConversations:M,isUnreadC2CMessage:T}=r;if(E(D))return;if(this.subType===u.GRP_AVCHATROOM)return void(this.unreadCount=0);if(M&&this.type===u.CONV_GROUP)return void(this.unreadCount=D);if(T&&this.type===u.CONV_C2C)return void(this.unreadCount=D);const P=((g=m.get("cloudConfig"))===null||g===void 0?void 0:g.support_unread_count_for_meeting)==="1";this.subType!==u.GRP_MEETING||P?this.unreadCount+=D:this.unreadCount=0}updateLastMessage(r){this.lastMessage=Bo.core.common.buildLastMessage(r)}reduceUnreadCount(){return this.unreadCount>=1&&(this.unreadCount-=1,!0)}isLastMessageRevoked(r){const{core:{OuterConstant:g}}=Bo,{sequence:u,time:E}=r;return this.type===g.CONV_C2C&&u===this.lastMessage.lastSequence&&E===this.lastMessage.lastTime||this.type===g.CONV_GROUP&&u===this.lastMessage.lastSequence}setLastMessageRevoked(r){this.lastMessage.isRevoked=r}setLastMessageRevoker(r){this.lastMessage.revoker=r}setDraftText(r){this.draftText=r}updateGroupAtInfoList(r){const{core:{common:{updateGroupAtInfo:g}}}=Bo;g(r,this.groupAtInfoList)}clearGroupAtInfoList(){this.groupAtInfoList.length=0}getProfileCompleted(){return this._isInfoCompleted}setProfileCompleted(){this._isInfoCompleted=!0}}const mt=s=>{const{core:{OuterConstant:r,utils:{isString:g}}}=Bo;return g(s)&&s.slice(0,3)===r.CONV_C2C},ug=s=>{const{core:{OuterConstant:r,utils:{isString:g}}}=Bo;return g(s)&&s.slice(0,5)===r.CONV_GROUP},Ls=s=>{const{core:{OuterConstant:r,utils:{isString:g}}}=Bo;return g(s)&&s===r.CONV_SYSTEM};function Zi(s){const{OuterConstant:r}=Bo.core;let g="";return s===0?g=r.MSG_REMIND_ACPT_AND_NOTE:s===1?g=r.MSG_REMIND_DISCARD:s===2?g=r.MSG_REMIND_ACPT_NOT_NOTE:s===3&&(g=r.NOT_RECEIVE_OFFLINE_PUSH_EXCEPT_AT),g}function Hr(s){const{OuterConstant:r}=Bo.core;let g;return s.startsWith(r.CONV_C2C)&&(g=s.replace(r.CONV_C2C,"")),g==="@TLS#ERROR"||g==="@TLS#NOT_FOUND"}function oc(s,r){const{helper:g}=Bo.core,u=new g.ChatError({functionName:s,code:r?.errorCode||r?.code,message:r?.errorInfo||r?.message});throw console.error(`${s} fail:`,u),u}var os,ca;(function(s){s[s.OFF=0]="OFF",s[s.ON=1]="ON"})(os||(os={})),function(s){s[s.ONLY_CONVERSATIONID=1]="ONLY_CONVERSATIONID"}(ca||(ca={}));var Qa;(function(s){s[s.CONV_NOT_FOUND=2500]="CONV_NOT_FOUND",s[s.USER_OR_GRP_NOT_FOUND=2501]="USER_OR_GRP_NOT_FOUND",s[s.CONV_UN_RECORDED_TYPE=2502]="CONV_UN_RECORDED_TYPE"})(Qa||(Qa={}));const ta=0,H=1;var QA=new class{constructor(){this._name="GetC2CMessageRemindType"}init(s){this._core=s}get(s){return mA(this,void 0,void 0,function*(){try{const{common:r}=this._core,g=yield function(E,m){return mA(this,void 0,void 0,function*(){const{toAccount:D,userIDList:M}=E,T={To_Account:D,Peer_Account:M};return m.common.buildAndSendPacket({servcmd:"openim.get_c2c_peer_mute_notifications",data:T})})}({toAccount:r.getCurrentUserID(),userIDList:s},this._core),{MuteNotificationsList:u=[]}=g||{};u.forEach(E=>{const{Peer_Account:m,MuteNotifications:D}=E,M=`${this._core.OuterConstant.CONV_C2C}${m}`,T=Zi(D);NA.patchMessageRemindType([M],T)})}catch(r){console.error(`${this._name}.get fail:`,r)}})}},yA=new class{constructor(){this._name="GetGroupMessageRemindType"}init(s){this._core=s}get(s){return mA(this,void 0,void 0,function*(){if(s.length!==0)try{const r=yield function(u,E){return mA(this,void 0,void 0,function*(){const{groupIDList:m,responseFilter:D}=u,M={GroupIdList:m,ResponseFilter:D};return E.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_group_self_member_info",data:M})})}({groupIDList:s,responseFilter:{MemberInfoFilter:["MsgFlag"]}},this._core),{GroupInfo:g=[]}=r||{};g.forEach(u=>{var E;const{GroupId:m,MemberList:D}=u,M=((E=D[0])===null||E===void 0?void 0:E.MsgFlag)||"",T=`${this._core.OuterConstant.CONV_GROUP}${m}`;NA.patchMessageRemindType([T],M)})}catch(r){console.error(`${this._name}.get fail:`,r)}})}},NA=new class{constructor(){this._name="ConversationDataHandler",this._totalUnreadCount=0,this._groupAtTipsList=[]}init(s){this._core=s;const{helper:r,notificationCenter:g,appStore:{conversationStore:u},constants:{WORKFLOW_NAME:E,WORKFLOW_STEP:m},InnerEvent:{SYNC_CONVERSATION_LIST:D,MESSAGE_PUSH:M,NEW_MESSAGE:T,MESSAGE_DELETED:P,MESSAGE_REVOKED:W,MESSAGE_MODIFIED:oA,CONVERSATION_UPDATED:EA,LOGOUT:wA,DESTROY:kA},InnerEventSubType:{C2C_MESSAGE_PEER_READ:xA}}=s;this._conversationStore=u,r.registerWorkflowStep(E.SYNC_SERVER_INFO_AFTER_LOGIN,m.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,this._handleUnreadSyncFinished,this),r.registerWorkflowStep(E.SYNC_SERVER_INFO_AFTER_LOGIN,m.CONVERSATION_UPDATE_AFTER_GROUP_LIST_SYNC_FINISHED,this._handleGroupListSyncFinished,this),r.registerWorkflowStep(E.RECEIVE_C2C_NEW_MESSAGE,m.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,this._handleNewMessage,this),r.registerWorkflowStep(E.RECEIVE_C2C_NEW_MESSAGE,m.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,this._handleUnreadSyncFinished,this),r.registerWorkflowStep(E.RECEIVE_GROUP_NEW_MESSAGE,m.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,this._handleNewMessage,this),r.registerWorkflowStep(E.SYNC_SERVER_INFO_AFTER_RE_ONLINE,m.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,this._handleUnreadSyncFinished,this),r.registerWorkflowStep(E.RECEIVE_GROUP_TIPS_NOTIFICATION,m.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,this._handleNewMessage,this);const{InnerEventSubType:{GROUP_AT_TIPS:LA}}=g;g.subscribeInnerEvent(D,this._handleConversationSynced,this),g.subscribeInnerEvent(T,this._handleNewMessage,this),g.subscribeInnerEvent(M,LA,this._handleNewGroupAtTips,this),g.subscribeInnerEvent(P,this._handleMessageDeleted,this),g.subscribeInnerEvent(W,this._handleMessageRevoked,this),g.subscribeInnerEvent(oA,this._handleMessageModified,this),g.subscribeInnerEvent(EA,this._handleConversationUpdated,this),g.subscribeInnerEvent(M,xA,this._handleMessageRead,this),g.subscribeInnerEvent(wA,this._reset,this),g.subscribeInnerEvent(kA,this._dispose,this),s.ssoLog.debug(`${this._name}.init`)}_handleConversationSynced(s){this.updateLocalConversationList({conversationUpdateFieldList:s.conversationUpdateFieldList||[],isFromGetConversations:!0,updateUnreadCount:!0}),this.emitConversationListUpdate()}_handleUnreadSyncFinished(s){const{constants:{WORKFLOW_STEP:r}}=this._core,{conversationUpdateFieldList:g=[],groupTipList:u=[],isUnreadC2CMessage:E}=s.result[r.UNREAD_MESSAGE_SYNC]||{};let m=!1;g.forEach(D=>{const{conversationID:M,unreadCount:T}=D,P=this.getLocalConversation(M);P&&P.unreadCount!==T&&(P.updateUnreadCount({nextUnreadCount:T,isUnreadC2CMessage:E}),m=!0)}),m&&this.emitConversationListUpdate(),this._handleGroupAtTipsSynced(u)}_handleGroupAtTipsSynced(s){var r;for(let g=0;g0&&this._handleNewGroupAtTips({GroupTips:M._groupAtInfoList}),m=!0}m&&this.emitConversationListUpdate()}_handleNewMessage(s){const{conversationUpdateFieldList:r=[],isInstantMessage:g=!0,isUnreadC2CMessage:u=!1,updateUnreadCount:E=!0}=s.result||{};if(r.length===0)return;const{common:{isTopic:m}}=this._core;m(r[0].conversationID)||(this.updateLocalConversationList({conversationUpdateFieldList:r,isInstantMessage:g,isUnreadC2CMessage:u,isFromGetConversations:!1,updateUnreadCount:E}),r.filter(D=>this._isConversationNeedShow(D.conversationID)).length>0&&this.emitConversationListUpdate())}_handleNewGroupAtTips(s){const{GroupTips:r=[]}=s;r.forEach(g=>{const{GroupAtTips:u,MsgBody:E,MsgRandom:m,ClientSeq:D}=g;let M={};u?M=this._convertGroupAtTipsKey(u):E?M=Object.assign({},this._convertGroupAtTipsKey(E)):g.groupAtType&&(M=Object.assign({},g)),M.__random=m,M.__sequence=D,this._groupAtTipsList.push(M)}),console.log(`${this._name}._handleNewGroupAtTips groupAtTipsList: ${JSON.stringify(this._groupAtTipsList)}`),this._updateGroupAtInfoList()}_convertGroupAtTipsKey(s){const{From_Account:r,GroupId:g,MsgSeq:u,GroupAtType:E}=s;return{from:r,groupID:g,sequence:u,groupAtType:E}}_updateGroupAtInfoList(){if(this._groupAtTipsList.length===0)return;const{common:s,OuterConstant:r}=this._core,g=s.getCurrentUserID();let u=!1;this._groupAtTipsList.forEach(E=>{const{groupID:m,from:D}=E;if(D!==g){const M=this.getLocalConversation(`${r.CONV_GROUP}${m}`);M&&(M.updateGroupAtInfoList(E),u=!0)}}),u&&this.emitConversationListUpdate(),this._groupAtTipsList.length=0}_handleMessageDeleted(s){var r,g;console.log(`${this._name}._handleMessageDeleted, conversationID:`,s);const{message:{messageDataHandler:u},OuterConstant:E}=this._core,m=u?.getLocalMessageList(s)||[];let D={};for(let P=(m.length||0)-1;P>=0;P--)if(!m[P].isDeleted&&m[P]._isExcludedFromLastMessage!==!0){D=m[P];break}const M=this.getLocalConversation(s);if(!M)return;let T=!1;M.lastMessage.lastSequence===D.sequence&&M.lastMessage.lastTime===D.time||(!((g=(r=this._core)===null||r===void 0?void 0:r.helper)===null||g===void 0)&&g.isEmpty(D)&&(D=void 0),M.updateLastMessage(D),T=!0),s.startsWith(E.CONV_C2C)&&this.updateUnreadCount(s),T&&(this.emitConversationListUpdate(),console.log(`${this._name}._handleMessageDeleted. update conversationID:${s} with lastMessage:`,M.lastMessage))}_handleMessageRevoked(s){const{messageList:r=[],updateUnreadCount:g=!0}=s;if(console.log(`${this._name}._handleMessageRevoked messageList:${r.length}`),r.length===0)return;let u=null,E=!1;r.forEach(m=>{u=this.getLocalConversation(m.conversationID),u&&(g&&u.reduceUnreadCount()&&(E=!0),u.isLastMessageRevoked({sequence:m.sequence,time:m.time})&&(u.setLastMessageRevoked(!0),u.setLastMessageRevoker(m.revoker),E=!0))}),E&&this.emitConversationListUpdate()}_handleMessageModified(s){const{utils:{isEmpty:r},common:{getMessagePreviewText:g},ssoLog:u}=this._core;u.debug(`${this._name}._handleMessageModified`,JSON.stringify(s));const{conversationID:E,messageList:m}=s,D=this.getLocalConversation(E);if(r(D))return;const{lastMessage:M}=D;if(M){const T=m?.[0]||{};M.lastTime===T.time&&M.lastSequence===T.sequence&&M.version!==T.version&&(M.type=T.type,M.payload=T.payload,M.messageForShow=g(T.type,T.payload),M.cloudCustomData=T.cloudCustomData,M.version=T.version,this.emitConversationListUpdate(),console.log(`${this._name} conversationID:${E} lastMessage updated`))}}_handleConversationUpdated(s){this.emitConversationListUpdate(s?.needSort)}updateLocalConversationList(s){const{isFromGetConversations:r}=s,{newConversationList:g}=this._getTmpConversationListMapping(s);this._sortConversationList(),r||this._updateNewConversationProfile(g),this._core.ssoLog.debug("updateLocalConversationList",` newConversationList: ${g.length}`)}_getTmpConversationListMapping(s){const{OuterConstant:r}=this._core,{conversationUpdateFieldList:g,isFromGetConversations:u,isInstantMessage:E,isUnreadC2CMessage:m=!1,updateUnreadCount:D}=s,M=[],T=g?.length;for(let P=0;P{M[1].isPinned===!0?s(M[1].lastMessage.lastTime)?u.push(M):g.push(M):s(M[1].lastMessage.lastTime)?m.push(M):E.push(M)});const D=g.sort((M,T)=>T[1].lastMessage.lastTime-M[1].lastMessage.lastTime).concat(u).concat(E.sort((M,T)=>T[1].lastMessage.lastTime-M[1].lastMessage.lastTime)).concat(m);this._updateConversationMapFromList(D)}_updateNewConversationProfile(s){if(s.length===0)return;const r=[],g=[],{OuterConstant:{CONV_GROUP:u,CONV_C2C:E}}=this._core;s.forEach(m=>{const{conversationID:D,type:M}=m;if(M===E){const T=D.replace(E,"");r.push(T)}else if(M===u){const T=D.replace(u,"");g.push(T)}}),r.length>0&&this._updateC2CConversation(r),g.length>0&&this._updateGroupConversation(g)}_updateC2CConversation(s){var r;const{OuterConstant:{CONV_C2C:g},appStore:{userStore:u},user:E}=this._core;let m=!1;(r=E.userProfile)===null||r===void 0||r.getUserProfile({userIDList:s}).then(D=>{(D?.data||[]).forEach(M=>{var T;const{userID:P}=M,W=this.getLocalConversation(`${g}${P}`);if(W){const oA=((T=u.getFriend(P))===null||T===void 0?void 0:T.remark)||"";W.remark=oA,W.userProfile=M,m=!0}}),m&&this.emitConversationListUpdate()}).catch(D=>{}),QA.get(s)}_updateGroupConversation(s){return mA(this,void 0,void 0,function*(){const{OuterConstant:{CONV_GROUP:r},appStore:{groupStore:g},utils:{safeStringify:u},ssoLog:E,apiMap:{getGroupProfile:m}}=this._core;let D=!1;try{yield Promise.all(s.map(M=>mA(this,void 0,void 0,function*(){const T=g.getGroup(M),P=this.getLocalConversation(`${r}${M}`);T&&P&&(P.groupProfile=T,D=!0),P&&!P.getProfileCompleted()&&typeof m=="function"&&(yield m({groupID:M}))}))),yA.get(s),D&&this.emitConversationListUpdate()}catch(M){E.debug("_updateGroupConversation",u(M))}})}_handleMessageRead(s){const{OuterConstant:{CONV_C2C:r}}=this._core,{C2cNotifyMsgArray:g=[]}=s||{};g.forEach(u=>{const{To_Account:E,UinPairReadArray:m=[]}=u?.C2cReadedReceipt||{};m?.forEach(D=>{const{LastReadTime:M}=D,T=`${r}${E}`;this._updateConversationReadInfo({conversationID:T,peerReadTime:M}),this._updateMessageListPeerRead({conversationID:T,peerReadTime:M})})})}_updateConversationReadInfo(s){const{appStore:r,utils:{isEmpty:g},common:{getCurrentUserID:u}}=this._core,{conversationID:E,peerReadTime:m}=s,D=r.conversationStore.getConversationMap();if(D.has(E)){const M=D.get(E);M.peerReadTime=m;const T=M?.lastMessage;g(T)||T.fromAccount===u()&&T.lastTime<=m&&!T.isPeerRead&&(T.isPeerRead=!0,r.conversationStore.updateConversation(E,{lastMessage:T}))}}_updateMessageListPeerRead(s){const{notificationCenter:r,OuterEvent:g,message:u}=this._core,{conversationID:E,peerReadTime:m}=s,D=u.messageDataHandler.getLocalMessageList(E),M=u.messageDataHandler.getSparseMessageList(E),T=[];D.forEach(P=>{P.time<=m&&!P.isPeerRead&&P.flow==="out"&&(P.isPeerRead=!0,T.push(P))}),M.forEach(P=>{P.time<=m&&!P.isPeerRead&&P.flow==="out"&&(P.isPeerRead=!0,T.push(P))}),r.emitOuterEvent(g.MESSAGE_READ_BY_PEER,{name:g.MESSAGE_READ_BY_PEER,data:T})}_isConversationNeedShow(s){var r,g;const{OuterConstant:{CONV_GROUP:u,GRP_ROOM:E,GRP_LIVE:m},utils:{isUndefined:D}}=this._core,M=this.getLocalConversation(s);if(D(M))return!0;const T=M.type===u&&((r=M.groupProfile)===null||r===void 0?void 0:r.type)===E,P=M.type===u&&((g=M.groupProfile)===null||g===void 0?void 0:g.type)===m;return!(T||P)}updateUnreadCount(s,r=!0){var g,u;let E=!1;const m=this.getLocalConversation(s),D=(u=(g=this._core)===null||g===void 0?void 0:g.message.messageDataHandler)===null||u===void 0?void 0:u.getLocalMessageList(s);if(!m)return E;const M=m.unreadCount,T=D?.filter(P=>!P.isRead&&!P._onlineOnlyFlag&&!P.isDeleted).length;return console.log(`${this._name}._updateUnreadCount conversationID:${s} currentUnreadCount:${M} newUnreadCount:${T}`),M!==T&&(m.unreadCount=T,E=!0,r===!0&&this.emitConversationListUpdate()),E}emitConversationListUpdate(s=!1){var r,g;s&&this._sortConversationList();const{OuterEvent:{CONVERSATION_LIST_UPDATED:u},conversation:E}=this._core,m=this.getLocalConversationList();this._emitEvent({name:u,data:m,isSyncCompleted:(g=(r=E?.syncConversationHandler)===null||r===void 0?void 0:r.isSyncCompleted)===null||g===void 0?void 0:g.call(r)}),this._emitTotalUnreadCountUpdate()}_emitTotalUnreadCountUpdate(){var s;const r=this.getTotalUnreadMessageCount();this._totalUnreadCount!==r&&(this._core.ssoLog.debug("_emitTotalUnreadCountUpdate",` from ${this._totalUnreadCount} to ${r}`),this._totalUnreadCount=r,this._emitEvent({name:(s=this._core)===null||s===void 0?void 0:s.OuterEvent.TOTAL_UNREAD_MESSAGE_COUNT_UPDATED,data:r}))}_emitEvent(s){var r;(r=this._core)===null||r===void 0||r.notificationCenter.emitOuterEvent(s.name,s)}getTotalUnreadMessageCount(){const{OuterConstant:s,utils:{isEmpty:r}}=this._core,g=this.getLocalConversationList();let u=0;return g.forEach(E=>{E.type!==s.CONV_SYSTEM&&(r(E.messageRemindType)||E.messageRemindType===s.MSG_REMIND_ACPT_AND_NOTE)&&(u+=E.unreadCount)}),u}getLocalConversationList(){return[...this._conversationStore.getConversationMap().values()].filter(s=>this._isConversationNeedShow(s.conversationID))}hasLocalConversation(s){return this._conversationStore.getConversationMap().has(s)}getLocalConversation(s){return this._conversationStore.getConversationMap().get(s)}setLocalConversation(s,r){return this._conversationStore.getConversationMap().set(s,r)}deleteLocalConversation(s){this._conversationStore.getConversationMap().delete(s)}_updateConversationMapFromList(s){this._clearConversationMap();for(const[r,g]of s)this.setLocalConversation(r,g)}_clearConversationMap(){this._conversationStore.getConversationMap().clear()}patchMessageRemindType(s,r){let g=!1;s.forEach(u=>{const E=this.getLocalConversation(u);E?.messageRemindType!==r&&(E.messageRemindType=r,g=!0)}),console.log(`${this._name}.patchMessageRemindType conversationIDList:${s} messageRemindType:${r} hasUpdated:${g}`),g&&this.emitConversationListUpdate()}markMessageAsRead(s){const{message:{messageDataHandler:r}}=this._core,{conversationID:g,lastReadTime:u=0,lastReadSequence:E=0}=s,m=r?.getLocalMessageList(g);if(m.length===0)return;const{length:D}=m;for(let M=D-1;M>=0;M--){const T=m[M],P=u&&T.time>u,W=E&&T.sequence>E;if(!P&&!W){if(T.flow==="in"&&T.isRead)break;T.setIsRead(!0)}}}appendToPinnedConversation(s){const r=[...this._conversationStore.getConversationMap().entries()],g=r.findIndex(u=>u[1].isPinned===!1);r.splice(g,0,[s.conversationID,s]),this._updateConversationMapFromList(r),this.emitConversationListUpdate()}_reset(){this._clearConversationMap(),this._totalUnreadCount=0,this._groupAtTipsList=[]}_dispose(){const{notificationCenter:s,InnerEvent:{NEW_MESSAGE:r,MESSAGE_DELETED:g,MESSAGE_REVOKED:u,MESSAGE_MODIFIED:E,CONVERSATION_UPDATED:m,LOGOUT:D,DESTROY:M,SYNC_CONVERSATION_LIST:T}}=this._core,{InnerEventSubType:{GROUP_AT_TIPS:P}}=s;s.unSubscribeInnerEvent(r,this._handleNewMessage,this),s.unSubscribeInnerEvent(r,P,this._handleNewGroupAtTips,this),s.unSubscribeInnerEvent(g,this._handleMessageDeleted,this),s.unSubscribeInnerEvent(u,this._handleMessageRevoked,this),s.unSubscribeInnerEvent(E,this._handleMessageModified,this),s.unSubscribeInnerEvent(m,this._handleConversationUpdated,this),s.unSubscribeInnerEvent(T,this._handleConversationSynced,this),s.unSubscribeInnerEvent(D,this._reset,this),s.unSubscribeInnerEvent(M,this._dispose,this)}},XA=new class{constructor(){this._name="GetConversationList"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"getConversationList",context:this})}getConversationList(s){return mA(this,void 0,void 0,function*(){return{code:0,data:{conversationList:this._getConversationList(s),isSyncCompleted:this._core.conversation.syncConversationHandler.isSyncCompleted()}}})}_getConversationList(s){const{utils:{isUndefined:r,isArray:g,isPlainObject:u}}=this._core;if(r(s))return NA.getLocalConversationList();if(g(s))return s.length===0?[]:NA.getLocalConversationList().filter(E=>s.includes(E.conversationID));if(u(s)){const{type:E,markType:m,groupName:D,hasUnreadCount:M,hasGroupAtInfo:T}=s;return NA.getLocalConversationList().filter(P=>this._filterType(P,E)&&this._filterMarkType(P,m)&&this._filterGroupName(P,D)&&this._filterUnreadCount(P,M)&&this._filterGroupAtInfo(P,T))}return[]}_filterType(s,r){const{OuterConstant:g}=this._core;return r!==g.CONV_C2C&&r!==g.CONV_GROUP||s.type===r}_filterGroupName(s,r){const{utils:{isString:g}}=this._core;return!g(r)||(r===""?s.conversationGroupList.length===0:s.conversationGroupList.includes(r))}_filterMarkType(s,r){const{utils:{isNumber:g}}=this._core;return!g(r)||(r===0?s.markList.length===0:s.markList.includes(r))}_filterUnreadCount(s,r){let g=!0;return r===!0?g=s.unreadCount>=1:r===!1&&(g=s.unreadCount===0),g}_filterGroupAtInfo(s,r){let g=!0;return r===!0?g=s.groupAtInfoList.length>=1:r===!1&&(g=s.groupAtInfoList.length===0),g}},Te=new class{constructor(){this._name="GetConversationProfile"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"getConversationProfile",context:this})}getConversationProfile(s){return mA(this,void 0,void 0,function*(){const{OuterConstant:{CONV_C2C:r,CONV_GROUP:g,GRP_AVCHATROOM:u},appStore:{groupStore:E},utils:{isEmpty:m}}=this._core,D={code:0,data:{}};let M=NA.getLocalConversation(s);if(Ls(s))return D.data.conversation=M,D;let T=!1;const P=mt(s)?r:g;if(m(M)&&(T=!0,M=new Bt({conversationID:s,type:P})),console.log(`${this._name}.getConversationProfile conversationID:${s} isNewConversation:${T}`),D.data.conversation=M,M?.getProfileCompleted())return D;if(P===r){const W=s.replace(r,"");yield this._handleC2CConversation(M,W),T&&(yield QA.get([W]))}if(P===g){const W=s.replace(g,"");if(!E.getGroup(W))return D;yield this._handleGroupConversation(M,W),T&&M.groupProfile.type!==u&&(yield yA.get([W]))}return D})}_handleC2CConversation(s,r){return mA(this,void 0,void 0,function*(){var g,u;const{user:E,helper:m,utils:{isEmpty:D},appStore:{conversationStore:M,userStore:T}}=this._core,{conversationID:P}=s,W=yield(g=E.userProfile)===null||g===void 0?void 0:g.getUserProfile({userIDList:[r]});if(W?.data.length===0)throw new m.ChatError({code:Qa.USER_OR_GRP_NOT_FOUND});s.userProfile=W?.data[0];const oA=(u=T.getFriend(r))===null||u===void 0?void 0:u.remark;D(oA)||s.remark===oA||(s.remark=oA),s.setProfileCompleted();const EA=NA.hasLocalConversation(P);console.log(`${this._name}._handleC2CConversation conversationID:${P} hasLocalConversation: ${EA}`),EA?M.updateConversation(P,s):NA.appendToPinnedConversation(s)})}_handleGroupConversation(s,r){return mA(this,void 0,void 0,function*(){const{apiMap:{getGroupProfile:g},appStore:{conversationStore:u}}=this._core,{conversationID:E}=s,m=yield g({groupID:r});s.groupProfile=m?.data.group,s.setProfileCompleted();const D=NA.hasLocalConversation(E);console.log(`${this._name}._handleGroupConversation conversationID:${E} hasLocalConversation: ${D}`),D?u.updateConversation(E,s):NA.appendToPinnedConversation(s)})}},de=new class{init(s){const{helper:r}=s;r.registerApi({apiName:"getTotalUnreadMessageCount",context:this})}getTotalUnreadMessageCount(){return NA.getTotalUnreadMessageCount()}},ke=new class{constructor(){this._serverGroupConversationLastReadSeqMap=new Map,this._name="SetMessageRead"}init(s){this._core=s;const{helper:r,common:{isTopic:g},notificationCenter:u,InnerEvent:{MESSAGE_PUSH:E},InnerEventSubType:{ALL_MESSAGE_READ:m}}=s;r.registerApi({apiName:"setMessageRead",context:this,matcher:D=>!g(D[0].conversationID)}),r.registerApi({apiName:"setAllMessageRead",context:this}),u.subscribeInnerEvent(E,m,this._handleAllMessageRead,this)}handleC2CMessageReadSync(s){const{helper:{isEmpty:r},OuterConstant:g}=this._core;s.forEach(u=>{const{ReadC2cMsgNotify:E}=u;if(!r(E)){const{UinPairReadArray:m=[]}=E;m.forEach(D=>{const{From_Account:M,LastReadTime:T}=D,P=`${g.CONV_C2C}${M}`;console.log(`${this._name}.handleC2CMessageReadSync conversationID:${P} lastReadTime:${T}`),NA.markMessageAsRead({conversationID:P,lastReadTime:T}),NA.updateUnreadCount(P)})}})}handleGroupMessageReadSync(s){const{OuterConstant:r,utils:{isUndefined:g}}=this._core;s.forEach(u=>{const{GroupReadInfoArray:E}=u.MsgBody;g(E)||E.forEach(m=>{const{GroupId:D,LastReadMsgSeq:M}=m,T=`${r.CONV_GROUP}${D}`;console.log(`${this._name}.handleGroupMessageReadSync conversationID:${T} lastReadSequence:${M}`),NA.markMessageAsRead({conversationID:T,lastReadSequence:M}),NA.updateUnreadCount(T),this._clearGroupAtInfoList(T)})})}setMessageRead(s){return mA(this,void 0,void 0,function*(){var r,g;const{OuterConstant:u}=this._core,{conversationID:E}=s,m={code:0,data:{}},D=NA.getLocalConversation(E);let M=`${this._name}.setMessageRead conversationID:${E} unreadCount:${D?.unreadCount||0}`;if(m.successLog={message:M},!D)return m;const T=!(!((g=(r=this._core)===null||r===void 0?void 0:r.helper)===null||g===void 0)&&g.isEmpty(D.groupAtInfoList));if(D.type===u.CONV_GROUP&&T&&this._deleteGroupAtTips(E),D.unreadCount===0)return m;const{helper:{ChatError:P}}=this._core;try{if(D.type===u.CONV_C2C){const W=this._getLocalMessageMaxTime(D);M+=`lastMessageTime:${W}`,yield this._setC2CMessageRead(E,W)}if(D.type===u.CONV_GROUP){const W=this._getLocalMessageMaxSequence(D);M+=`lastMessageSequence:${W}`,yield this._setGroupMessageRead(E,W)}}catch(W){const{errorCode:oA,errorInfo:EA}=W;throw new P({functionName:"setMessageRead",code:oA,message:EA,moreMessage:M})}return D.type===u.CONV_SYSTEM&&(D.unreadCount=0),NA.emitConversationListUpdate(),Object.assign(Object.assign({},m),{successLog:{message:M}})})}setAllMessageRead(){return mA(this,arguments,void 0,function*(s={}){const{OuterConstant:{READ_ALL_MSG:r},utils:{safeStringify:g}}=this._core;let u=`scope:${s.scope}`;s.scope||(s.scope=r);const{scope:E}=s,m=this._generateSetAllMessageReadRequestData(E);if(m.allC2CMessageReadStatus===ta&&m.groupMessageReadInfoList.length===0)return{code:0};try{const D=yield function(M){return mA(this,void 0,void 0,function*(){const{allC2CMessageReadStatus:T,groupMessageReadInfoList:P}=M,W={C2CReadAllMsg:T,GroupReadInfo:P};return Bo.core.common.buildAndSendPacket({servcmd:"openim.read_all_unread_msg",data:W})})}(m);if(D){const{GroupReadInfoArray:M,C2CReadAllMsg:T}=D,P=this._parseGroupReadInfo(M);this._updateAllConversationReadStatus({allC2CMessageReadStatus:T})>0&&NA.emitConversationListUpdate(),u+=`failureGroupInfoList:${g(P)}`}return{code:0,successLog:{message:u}}}catch(D){const{errorCode:M}=D;throw new this._core.helper.ChatError({functionName:"setAllMessageRead",code:M,moreMessage:u})}})}_handleAllMessageRead(s){const{GroupReadInfoArray:r,C2CReadAllMsg:g}=s;this._parseGroupReadInfo(r),this._updateAllConversationReadStatus({allC2CMessageReadStatus:g})>0&&NA.emitConversationListUpdate()}_updateAllConversationReadStatus(s){const{OuterConstant:{CONV_C2C:r,CONV_GROUP:g},appStore:u}=this._core,E=u.conversationStore.getConversationMap(),{allC2CMessageReadStatus:m}=s;let D=0;for(const[M,T]of E)if(T.unreadCount>=1){if(m===H&&T.type===r){const P=this._getLocalMessageMaxTime(T);NA.markMessageAsRead({conversationID:M,lastReadTime:P})}else if(T.type===g){const P=M.replace(g,"");if(this._serverGroupConversationLastReadSeqMap.has(P)){const W=this._serverGroupConversationLastReadSeqMap.get(P);NA.markMessageAsRead({conversationID:M,lastReadSequence:W})}}NA.updateUnreadCount(M,!1)&&(D+=1)}return D}_generateSetAllMessageReadRequestData(s){const{OuterConstant:{CONV_C2C:r,CONV_GROUP:g,READ_ALL_C2C_MSG:u},appStore:E}=this._core,m={allC2CMessageReadStatus:ta,groupMessageReadInfoList:[]},D=E.conversationStore.getConversationMap();for(const[,M]of D){const{type:T,unreadCount:P}=M;if(this._shouldSetAllMessageRead({scope:s,type:T,unreadCount:P})){if(T===r&&m.allC2CMessageReadStatus===ta){if(m.allC2CMessageReadStatus=H,s===u)break}else if(T===g){const W=this._getLocalMessageMaxSequence(M),{groupID:oA}=M.groupProfile;m.groupMessageReadInfoList.push({GroupId:oA,MsgSeq:W})}}}return m}_parseGroupReadInfo(s){const{utils:{isUndefined:r}}=this._core,g=[];return s?.forEach(u=>{const{GroupId:E,MsgSeq:m,RetCode:D,LastReadMsgSeq:M}=u;r(D)?this._serverGroupConversationLastReadSeqMap.set(E,M):(this._serverGroupConversationLastReadSeqMap.set(E,m),D!==0&&g.push(`${E}-${m}-${D}`))}),g}_deleteGroupAtTips(s){return mA(this,void 0,void 0,function*(){console.log(`${this._name}._deleteGroupAtTips conversationID:${s}`);const r=NA.getLocalConversation(s);if(!r)return;const g=r?.groupAtInfoList||[];if(g.length!==0)try{const{common:{getCurrentUserID:u,isCommunity:E},OuterConstant:{CONV_GROUP:m,CONV_AT_ALL:D}}=this._core;let M=[...g];if(E({groupID:s.replace(m,"")})&&(M=g.filter(P=>!P.atTypeArray.includes(D)),M.length===0))return void this._clearGroupAtInfoList(s,!1);const T=M.map(P=>({From_Account:P.from,To_Account:u(),MsgSeq:P.__sequence,MsgRandom:P.__random,GroupId:P.groupID}));yield function(P,W){return mA(this,void 0,void 0,function*(){const{messageListToDelete:oA}=P,EA={DelMsgList:oA};return W.common.buildAndSendPacket({servcmd:"openim.deletemsg",data:EA})})}({messageListToDelete:T},this._core),console.log(`${this._name}._deleteGroupAtTips ok. count:${g.length}`),this._clearGroupAtInfoList(s)}catch(u){console.error(`${this._name}._deleteGroupAtTips fail:`,u)}})}_clearGroupAtInfoList(s,r=!0){const g=NA.getLocalConversation(s);g&&(g.groupAtInfoList.length>0&&(g.clearGroupAtInfoList(),console.log(`${this._name}._clearGroupAtInfoList conversationID:${s} needEmitConversationUpdate:${r}`)),r&&NA.emitConversationListUpdate())}_getLocalMessageMaxTime(s){var r;const{conversationID:g}=s,u=this._core.message.messageDataHandler.getLocalMessageList(g),E=Math.max(...u.map(D=>D.time));let m=((r=s?.lastMessage)===null||r===void 0?void 0:r.lastTime)||0;return E>m&&(console.log(`${this._name}._getLocalMessageMaxTime update lastMessageTime from ${m} to ${E}`),m=E),m}_getLocalMessageMaxSequence(s){var r;const{conversationID:g}=s,u=this._core.message.messageDataHandler.getLocalMessageList(g),E=Math.max(...u.map(D=>D.sequence));let m=((r=s?.lastMessage)===null||r===void 0?void 0:r.lastSequence)||0;return E>m&&(console.log(`${this._name}._getLocalMessageMaxSequence update lastMessageSequence from ${m} to ${E}`),m=E),m}_setC2CMessageRead(s,r){return mA(this,void 0,void 0,function*(){try{yield function(g,u){return mA(this,void 0,void 0,function*(){return u.common.buildAndSendPacket({servcmd:"openim.msgreaded",data:g})})}({C2CMsgReaded:{Cookie:"",C2CMsgReadedItem:[{To_Account:s.replace("C2C",""),LastedMsgTime:r,Receipt:1}]}},this._core),console.log(`${this._name}._setC2CMessageRead ok, lastReadTime:${r}`),NA.markMessageAsRead({conversationID:s,lastReadTime:r}),NA.updateUnreadCount(s)}catch(g){throw console.warn(`${this._name}._setC2CMessageRead fail:`,g),g}})}_setGroupMessageRead(s,r){return mA(this,void 0,void 0,function*(){try{yield function(g,u){return mA(this,void 0,void 0,function*(){const{groupID:E,lastMessageSequence:m}=g,D={GroupId:E,MsgReadedSeq:m};return u.common.buildAndSendPacket({servcmd:"group_open_http_svc.msg_read_report",data:D})})}({groupID:s.replace("GROUP",""),lastMessageSequence:r},this._core),console.log(`${this._name}._setGroupMessageRead ok, lastReadSequence:${r}`),NA.markMessageAsRead({conversationID:s,lastReadSequence:r}),NA.updateUnreadCount(s)}catch(g){throw console.warn(`${this._name}._setGroupMessageRead fail:`,g),g}})}_shouldSetAllMessageRead(s){const{OuterConstant:{CONV_C2C:r,CONV_GROUP:g,READ_ALL_MSG:u,READ_ALL_C2C_MSG:E,READ_ALL_GROUP_MSG:m}}=this._core,{type:D,scope:M,unreadCount:T}=s;return!(T<=0)&&(!(D!==r||![u,E].includes(M))||!(D!==g||![u,m].includes(M)))}},ue=new class{constructor(){this._name="PinConversation"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"pinConversation",context:this})}handleConversationPinned(s,r){const{utils:{isArray:g}}=this._core;if(!g(s))return;const{OuterConstant:u}=this._core;let E=!1;s.forEach(m=>{const{Type:D,Peer_Account:M,GroupId:T}=m;let P;D===1?P=NA.getLocalConversation(`${u.CONV_C2C}${M}`):D===2&&(P=NA.getLocalConversation(`${u.CONV_GROUP}${T}`)),P&&(console.log(`${this._name}.handleConversationPinned conversationID:${P.conversationID} localPinned:${P.isPinned} remotePinned:${r}`),r&&!P.isPinned&&(P.isPinned=!0,E=!0),!r&&P.isPinned&&(P.isPinned=!1,E=!0))}),E&&NA.emitConversationListUpdate(!0)}pinConversation(s){return mA(this,void 0,void 0,function*(){const{OuterConstant:r,common:g,helper:{ChatError:u}}=this._core,{conversationID:E,isPinned:m}=s,D={code:0,data:{conversationID:E}},M=NA.getLocalConversation(E);if(M&&M.isPinned===m)return D;if(Ls(E))return M&&(M.isPinned=m),NA.emitConversationListUpdate(!0),D;const T=`conversationID:${E} isPinned:${m}`;try{let P=null;if(mt(E)?P={Type:1,To_Account:E.replace(r.CONV_C2C,"")}:ug(E)&&(P={Type:2,GroupId:E.replace(r.CONV_GROUP,"")}),yield function(oA,EA){return mA(this,void 0,void 0,function*(){const{fromAccount:wA,operationType:kA,itemList:xA}=oA,LA={From_Account:wA,OperationType:kA,RecentContactItem:xA};return EA.common.buildAndSendPacket({servcmd:"recentcontact.top",data:LA})})}({fromAccount:g.getCurrentUserID(),operationType:m===!0?1:2,itemList:[P]},this._core)){if(M)M.isPinned!==m&&(M.isPinned=m);else{const oA=new Bt({conversationID:E,type:mt(E)?r.CONV_C2C:r.CONV_GROUP,isPinned:m});NA.setLocalConversation(E,oA)}NA.emitConversationListUpdate(!0)}return Object.assign(Object.assign({},D),{successLog:{message:T}})}catch(P){const{errorCode:W,errorInfo:oA}=P;throw new u({functionName:"pinConversation",code:W,message:oA,moreMessage:T})}})}},Oe=new class{constructor(){this._name="DeleteConversation"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"deleteConversation",context:this})}handleConversationDeleted(s){const{utils:{isArray:r}}=this._core;if(!r(s))return;const{OuterConstant:g}=this._core,u=[];s.forEach(E=>{const{Type:m,Peer_Account:D,GroupId:M}=E;m===1&&u.push(`${g.CONV_C2C}${D}`),m===2&&u.push(`${g.CONV_GROUP}${M}`)}),console.log(`${this._name}.handleConversationDeleted conversationIDList:${u}`),this._deleteLocalConversationList(u)}deleteConversation(s){return mA(this,void 0,void 0,function*(){const{utils:{isString:r}}=this._core;if(r(s))return this._deleteConversation({conversationIDList:[s],flag:ca.ONLY_CONVERSATIONID});const g=Object.assign({},s);return g.conversationIDList.length>100&&(g.conversationIDList=g.conversationIDList.slice(0,100)),this._deleteConversation(g)})}_deleteConversation(s){return mA(this,void 0,void 0,function*(){const{conversationIDList:r,clearHistoryMessage:g=!0,flag:u=0}=s,{helper:{ChatError:E}}=this._core,m=`conversationIDList:${r} clearHistoryMessage:${g}`;try{const D=yield Promise.all([this._deleteConversationFromLocal(r),this._deleteConversationFromServer(r,g)]),M=[...D[0],...D[1]];if(M.length===0)throw new this._core.helper.ChatError({code:Qa.CONV_NOT_FOUND});return{code:0,data:u===ca.ONLY_CONVERSATIONID?{conversationID:M[0]}:{conversationIDList:M},successLog:{message:m}}}catch(D){const{errorCode:M,errorInfo:T}=D;throw new E({code:M,message:T,moreMessage:m})}})}_deleteConversationFromLocal(s){const{OuterConstant:r}=this._core;return s.filter(g=>{var u;if(!NA.hasLocalConversation(g))return!1;const E=(u=NA.getLocalConversation(g))===null||u===void 0?void 0:u.type;return E!==r.CONV_GROUP||this._hasLocalGroup(g)?E===r.CONV_SYSTEM&&(this._deleteLocalConversation(g),!0):(this._deleteLocalConversation(g),!0)})}_deleteConversationFromServer(s,r){return mA(this,void 0,void 0,function*(){const{OuterConstant:g,common:u}=this._core,E={fromAccount:u.getCurrentUserID(),conversationList:[],clearHistoryMessage:r?1:0};if(s.forEach(D=>{var M;if(NA.hasLocalConversation(D)){const T=((M=NA.getLocalConversation(D))===null||M===void 0?void 0:M.type)||"",P=D.replace(T,"");T===g.CONV_C2C?E.conversationList.push({To_Account:P,Type:1}):T===g.CONV_GROUP&&this._hasLocalGroup(D)&&E.conversationList.push({ToGroupid:P,Type:2})}}),E.conversationList.length===0)return[];const m=yield function(D,M){return mA(this,void 0,void 0,function*(){const{fromAccount:T,conversationList:P,clearHistoryMessage:W}=D,oA={From_Account:T,ContactItem:P,ClearRamble:W};return M.common.buildAndSendPacket({servcmd:"recentcontact.batch_delete",data:oA})})}(E,this._core);if(m){const{ResultItem:D=[]}=m,M=[];return D.length>0&&D.forEach(T=>{if(T.ResultCode===0){const P=T.Type===1?`${g.CONV_C2C}${T.To_Account}`:`${g.CONV_GROUP}${T.ToGroupid}`;M.push(P)}}),this._deleteLocalConversationList(M),M}return[]})}_deleteLocalConversationList(s){let r=!1;s.forEach(g=>{NA.hasLocalConversation(g)&&(this._deleteLocalConversation(g,!1),r=!0)}),console.log(`${this._name}._deleteLocalConversationList isUpdate:${r}`),r&&NA.emitConversationListUpdate()}_deleteLocalConversation(s,r=!0){const g=NA.hasLocalConversation(s);console.log(`${this._name}._deleteLocalConversation conversationID:${s} has:${g}`),g&&(NA.deleteLocalConversation(s),this._deleteConversationLocalMessage(s),r&&NA.emitConversationListUpdate())}_hasLocalGroup(s){const{OuterConstant:{CONV_GROUP:r},appStore:{groupStore:g}}=this._core,u=s.replace(r,"");return!!g.getGroup(u)}_deleteConversationLocalMessage(s){console.log(`${this._name}._deleteConversationLocalMessage conversationID:${s}`),this._core.message.messageDataHandler.deleteConversationMessageList(s),this._core.message.messageHistory.completedHistoryConversations.delete(s)}},Rt=new class{constructor(){this._name="SetConversationDraft"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"setConversationDraft",context:this})}setConversationDraft(s){return mA(this,void 0,void 0,function*(){const{conversationID:r,draftText:g}=s;if(console.log(`${this._name} conversationID:${r} draftText:${g}`),!NA.hasLocalConversation(r))throw new this._core.helper.ChatError({code:Qa.CONV_NOT_FOUND});const u=NA.getLocalConversation(r);return u?.setDraftText(g),NA.emitConversationListUpdate(),{code:0,data:{conversation:u}}})}},Xt=new class{constructor(){this._name="SetC2CMessageRemindType"}init(s){this._core=s}set(s,r){return mA(this,void 0,void 0,function*(){s.length>30&&(console.warn(`${this._name}.set userIDList length:${s.length} exceeds limit 30`),s.splice(30));const g=function(){const{MSG_REMIND_ACPT_AND_NOTE:P,MSG_REMIND_DISCARD:W,MSG_REMIND_ACPT_NOT_NOTE:oA}=Bo.core.OuterConstant;return{[P]:0,[W]:1,[oA]:2}}()[r],u=yield function(P,W){return mA(this,void 0,void 0,function*(){const{userIDList:oA,receiveMessageOption:EA}=P,wA={Peer_Account:oA,Mute_Notifications:EA};return W.common.buildAndSendPacket({servcmd:"openim.set_c2c_peer_mute_notifications",data:wA})})}({userIDList:s,receiveMessageOption:g},this._core),{ErrorList:E=[]}=u||{},m=[];E.forEach(P=>{const{Peer_Account:W,ErrorCode:oA}=P;m.push({userID:W,code:oA});const EA=s.indexOf(W);EA>-1&&s.splice(EA,1)});const D=[],M=[],{OuterConstant:T}=this._core;return s.forEach(P=>{M.push(`${T.CONV_C2C}${P}`),D.push({userID:P})}),NA.patchMessageRemindType(M,r),{code:0,data:{successUserIDList:D,failureUserIDList:m}}})}},li=new class{constructor(){this._name="SetGroupMessageRemindType"}init(s){this._core=s}set(s,r){return mA(this,void 0,void 0,function*(){const{common:{getCurrentUserID:g,isTopic:u},OuterConstant:E}=this._core;if(yield function(m,D){return mA(this,void 0,void 0,function*(){const{groupID:M,userID:T,receiveMessageOption:P}=m,W={GroupId:M,Member_Account:T,MsgFlag:P};return D.common.buildAndSendPacket({servcmd:"group_open_http_svc.modify_group_member_info",data:W})})}({groupID:s,userID:g(),receiveMessageOption:r},this._core),!u(s)){const m=`${E.CONV_GROUP}${s}`;NA.patchMessageRemindType([m],r)}return{code:0,data:{groupID:s,messageRemindType:r}}})}},Mt=new class{constructor(){this._name="SetMessageRemindType"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"setMessageRemindType",context:this})}handleC2CMessageRemindTypeSync(s){const{helper:{isEmpty:r},OuterConstant:g,ssoLog:u}=this._core;s.forEach(E=>{const{MuteNotificationsSync:m}=E;if(!r(m)){const{To_Account:D,MuteNotifications:M}=m,T=D.map(W=>`${g.CONV_C2C}${W}`),P=Zi(M);u.debug(`${this._name}.handleC2CMessageRemindTypeSync conversationIDList:${T} messageRemindType:${P}`),NA.patchMessageRemindType(T,P)}})}setMessageRemindType(s){return mA(this,void 0,void 0,function*(){const r="setMessageRemindType",{groupID:g,userIDList:u,messageRemindType:E}=s,{helper:m,utils:{isUndefined:D},ssoLog:M}=this._core;try{if(!D(g))return M.debug(`${this._name}.${r} groupID:${g} messageRemindType:${E}`),yield li.set(g,E);if(!D(u))return M.debug(`${this._name}.${r} userIDList:${u} messageRemindType:${E}`),yield Xt.set(u,E);throw new m.ChatError({functionName:r,message:"userIDList or groupID is required"})}catch(T){throw new m.ChatError({functionName:r,code:T?.errorCode,message:T?.errorInfo,moreMessage:`groupID:${g} userIDList:${u} messageRemindType:${E}`})}})}},pi=new class{init(s){s.ssoLog.debug("ConversationAction.init"),this._core=s,XA.init(s),Te.init(s),de.init(s),ke.init(s),ue.init(s),Oe.init(s),Rt.init(s),Mt.init(s);const{notificationCenter:r,InnerEvent:{MESSAGE_PUSH:g,DESTROY:u}}=this._core,{InnerEventSubType:{CONV_MODIFIED:E,C2C_MESSAGE_READ_SYNC:m,GROUP_MESSAGE_READ_SYNC:D,C2C_REMIND_TYPE_SYNC:M}}=r;r.subscribeInnerEvent(g,E,this._onConversationModified,this),r.subscribeInnerEvent(g,m,this._onC2CMessageReadSync,this),r.subscribeInnerEvent(g,M,this._onC2CMessageRemindTypeSync,this),r.subscribeInnerEvent(g,D,this._onGroupMessageReadSync,this),r.subscribeInnerEvent(u,this._dispose,this)}_onConversationModified(s){const{constants:{ConvModifyPushType:r}}=this._core,{RecentContactMod:g=[]}=s;g.forEach(u=>{const{PushType:E}=u;if(E===r.CONV_DELETED){const{RecentContactList:m}=u.RecentContactDeleteItem;Oe.handleConversationDeleted(m)}if(E===r.CONV_PINED){const{RecentContactList:m}=u.RecentContactTopItem;ue.handleConversationPinned(m,!0)}if(E===r.CONV_UNPINED){const{RecentContactList:m}=u.RecentContactTopItem;ue.handleConversationPinned(m,!1)}})}_onC2CMessageReadSync(s){const{C2cNotifyMsgArray:r=[]}=s;ke.handleC2CMessageReadSync(r)}_onC2CMessageRemindTypeSync(s){const{C2cNotifyMsgArray:r=[]}=s;Mt.handleC2CMessageRemindTypeSync(r)}_onGroupMessageReadSync(s){const{GroupTips:r=[]}=s;ke.handleGroupMessageReadSync(r)}_dispose(){const{notificationCenter:s,InnerEvent:{MESSAGE_PUSH:r,DESTROY:g}}=this._core,{InnerEventSubType:{CONV_MODIFIED:u,C2C_MESSAGE_READ_SYNC:E,GROUP_MESSAGE_READ_SYNC:m,C2C_REMIND_TYPE_SYNC:D}}=s;s.unSubscribeInnerEvent(r,u,this._onConversationModified,this),s.unSubscribeInnerEvent(r,E,this._onC2CMessageReadSync,this),s.unSubscribeInnerEvent(r,D,this._onC2CMessageRemindTypeSync,this),s.unSubscribeInnerEvent(r,m,this._onGroupMessageReadSync,this),s.unSubscribeInnerEvent(g,this._dispose,this)}},io=new class{init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"setAllReceiveMessageOpt",context:this})}setAllReceiveMessageOpt(s){return mA(this,void 0,void 0,function*(){try{const{OuterConstant:{MSG_REMIND_ACPT_NOT_NOTE:r}}=this._core,{messageRemindType:g=r,isRepeated:u=!0}=s,{startTime:E=0,endTime:m=0}=this._calcStartAndEndTime(s),D=yield function(M){return mA(this,void 0,void 0,function*(){const{common:T}=Bo.core,{startTime:P,endTime:W,isRepeated:oA,messageRemindType:EA}=M,wA={StartTime:P,EndTime:W,IsRepeated:oA,Level:EA};return T.buildAndSendPacket({servcmd:"im_msg_db_logic.ws_set_do_not_disturb",data:wA})})}({messageRemindType:this._getType(g),startTime:E,endTime:m,isRepeated:u?os.ON:os.OFF});return{code:0,data:{errorCode:D.ErrorCode,errorInfo:D.ErrorInfo}}}catch(r){oc("setAllReceiveMessageOpt",r)}})}_calcStartAndEndTime(s){const{startHour:r=0,startMinute:g=0,startSecond:u=0,duration:E=0,isRepeated:m=!0}=s,D=new Date,M=new Date(D.getFullYear(),D.getMonth(),D.getDate(),r,g,u),T=Math.round(M.getTime()/1e3);let P=T+E;return m&&E>=86400&&(P=T+86400),{startTime:T,endTime:P}}_getType(s){const{OuterConstant:r}=this._core;return{[r.MSG_REMIND_ACPT_AND_NOTE]:0,[r.MSG_REMIND_DISCARD]:1,[r.MSG_REMIND_ACPT_NOT_NOTE]:2}[s]}},Is=new class{init(s){this._core=s;const{helper:r,notificationCenter:g,InnerEvent:u}=s;r.registerApi({apiName:"getAllReceiveMessageOpt",context:this}),g.subscribeInnerEvent(u.MESSAGE_PUSH,g.InnerEventSubType.ALL_RECEIVE_MESSAGE_OPTION,this.onAllReceiveMsgOptionNotify,this)}onAllReceiveMsgOptionNotify(s){const r=this._handleResult(s),{notificationCenter:g,OuterEvent:{ALL_RECEIVE_MESSAGE_OPT_UPDATED:u}}=this._core;g.emitOuterEvent(u,{name:u,data:r})}getAllReceiveMessageOpt(){return mA(this,void 0,void 0,function*(){try{const s=yield function(){return mA(this,void 0,void 0,function*(){const{common:r}=Bo.core,g={To_Account:r.getCurrentUserID()};return r.buildAndSendPacket({servcmd:"im_msg_db_logic.ws_get_do_not_disturb",data:g})})}();return{code:0,data:this._handleResult(s)}}catch(s){oc("getAllReceiveMessageOpt",s)}})}_handleResult(s){const{OuterConstant:r}=this._core,{MSG_REMIND_ACPT_AND_NOTE:g,MSG_REMIND_DISCARD:u,MSG_REMIND_ACPT_NOT_NOTE:E}=r,m={0:g,1:u,2:E},{Level:D,StartTime:M,EndTime:T,IsRepeated:P}=s;return{messageRemindType:m[D]||g,startTime:M,endTime:T,isRepeated:P===os.ON}}},Fo=new class{init(s){s.ssoLog.debug("ReceiveMessageOptions.init"),this._core=s,Xt.init(s),li.init(s),QA.init(s),yA.init(s),io.init(s),Is.init(s)}};const ni=s=>!mt(s)&&!ug(s)&&!Ls(s),Fr={getConversationProfile:[{key:"conversationID",required:!0,rules:["string"],allowEmpty:!1,customValidator:s=>!ni(s)||"conversationID is invalid."}],setMessageRead:{conversationID:{required:!0,rules:["string"],allowEmpty:!1,customValidator:s=>!ni(s)||"conversationID is invalid."}},pinConversation:{conversationID:{required:!0,rules:["string"],allowEmpty:!1,customValidator:s=>!ni(s)||"conversationID is invalid."},isPinned:{required:!0,rules:["boolean"],allowEmpty:!1}},deleteConversation:[{key:"options",required:!0,rules:["string","object"],allowEmpty:!1,customValidator:s=>{const{core:{utils:{isArray:r,isObject:g,isString:u}}}=Bo;if(!u(s)&&!g(s))return"options is String or Object.";if(u(s)&&ni(s))return"conversationID is invalid.";if(g(s)){if(!r(s.conversationIDList))return"conversationIDList is not Array.";if(s.conversationIDList.length===0)return"conversationIDList is empty.";if(s.conversationIDList.some(E=>{if(ni(E))return!0}))return"conversationIDList includes invalid conversationID.";if(s.clearHistoryMessage&&typeof s.clearHistoryMessage!="boolean")return"clearHistoryMessage is not Boolean."}return!0}}],setConversationDraft:{conversationID:{required:!0,rules:["string"],allowEmpty:!1,customValidator:s=>!(!mt(s)&&!ug(s))||"conversationID is invalid."},draftText:{required:!0,rules:["string"],allowEmpty:!0}},setAllReceiveMessageOpt:{messageRemindType:{required:!1,rules:["string"],allowEmpty:!0},startHour:{required:!1,rules:["number"],allowEmpty:!0},startMinute:{required:!1,rules:["number"],allowEmpty:!0},startSecond:{required:!1,rules:["number"],allowEmpty:!0},duration:{required:!1,rules:["number"],allowEmpty:!0},isRepeated:{required:!1,rules:["boolean"],allowEmpty:!0}}},Zo={getConversationList:!0,getConversationProfile:!0,getTotalUnreadCount:!0,setMessageRead:!0,pinConversation:!0,deleteConversation:!0,setConversationDraft:!0,setMessageRemindType:!0,getAllReceiveMessageOpt:!0,setAllReceiveMessageOpt:!0};var zn=new class{constructor(){this.name="Conversation"}install(s){Bo.init(s),pi.init(s),Fo.init(s),NA.init(s),s.helper.registerValidateConfig({auth:Zo,params:Fr})}};const Zn=new class{init(s){this.core=s}},ia="AVChatRoom",qr="AV_HISTORY_MSG",sc="GRP_COUNTER",ju="Set",Dm="Increase",_i="Decrease",ri=0,Do=1,on=2,ss=["Type","Name","Introduction","Notification","FaceUrl","Owner_Account","CreateTime","InfoSeq","LastInfoTime","LastMsgTime","MemberNum","MaxMemberNum","ApplyJoinOption","NextMsgSeq","ShutUpAllMember","InviteJoinOption","LastRecallTime"],Eg=["Type","Name","Introduction","Notification","FaceUrl","CreateTime","Owner_Account","LastInfoTime","LastMsgTime","NextMsgSeq","MemberNum","MaxMemberNum","ApplyJoinOption","InviteJoinOption"],Pl=["Role","JoinTime","MsgFlag","MsgSeq"],fd=["Role","JoinTime","MsgSeq","MsgFlag","NameCard"],Lc=0,Rr=1,MI="notStart",ru="resolved",Og="rejected",au=10018,vI=11e3,Uc=2,Wu=["Owner","Admin","Member"],Sm=["Role","JoinTime","NameCard","ShutUpUntil","OnlineStatus"],Mm=0,vm=1,Rm=2,uD=4,ED=1,xv=2,dD=3,CD=4,Yv=5,DT=1,yd=0,ST=4,hD=6,MT=400,BD=300,vT={from:!0,groupID:!0,groupName:!0,to:!0},Vv={from:!0,groupID:!0,groupName:!0,to:!0,type:!0},RT=2,Jv=4,wT=5,_T=7,QD=8,pD=15,bQ=20,wm=21,_m=2600,Dd=2602,TT=2603,NT=2620,Tm=2621,mD=2623,dh=2660,GT=2661,bT=2681,Nm=2683,Hv=2684,fD=2685,Gm=2687,qv=3122,kT=10018,LT={0:"DisableInvite",1:"NeedPermission",2:"FreeAccess"},Kv=s=>s===Zn.core.OuterConstant.GRP_PUBLIC,Sd=s=>s===Zn.core.OuterConstant.GRP_AVCHATROOM,bm=(s,r)=>{const{isArray:g}=Zn.core.utils;if(!g(s)||!g(r))return!1;let u=!1;return r.forEach(({key:E,value:m})=>{const D=s.find(M=>M.key===E);D?D.value!==m&&(D.value=m,u=!0):(s.push({key:E,value:m}),u=!0)}),u},Md=s=>{const r=[];if(!s)return r;for(let g=0,u=s.length;g{const r=[];for(let g=0,u=s.length;g0&&M.members.forEach(T=>{T.userID===this.selfInfo.userID&&D(this.selfInfo,T,["sequence"])})}updateSelfInfo(r){const{nameCard:g,joinTime:u,role:E,messageRemindType:m,readedSequence:D,excludedUnreadSequenceList:M}=r,{common:{deepMerge:T}}=Zn.core;T(this.selfInfo,{nameCard:g,joinTime:u,role:E,messageRemindType:m,readedSequence:D,excludedUnreadSequenceList:M},[],["",null,void 0,0,NaN])}setSelfNameCard(r){this.selfInfo.nameCard=r}}var Ji=new class{constructor(){this._name="GroupDataHandler"}init(s){this._core=s;const{appStore:{groupStore:r}}=s;this._groupMap=r.getGroupMap()}hasLocalGroup(s){return this._groupMap.has(s)}getLocalGroup(s){return this._groupMap.get(s)}updateLocalGroup(s){const{common:{getCurrentUserID:r}}=this._core;let g;s.forEach(E=>{var m;g=E.groupID,this.hasLocalGroup(g)?(m=this.getLocalGroup(g))===null||m===void 0||m.updateGroup(E):(this._groupMap.set(g,new zu(E)),this._clearGroupLocalMessage(g))});const u=r();for(const[,E]of this._groupMap)E.selfInfo.userID=u,E.selfInfo.role==="Owner"&&(E.ownerID=u)}deleteLocalGroup(s){this._groupMap.delete(s)}getLocalGroupList(){const{OuterConstant:{GRP_ROOM:s,GRP_LIVE:r}}=this._core;return[...this._groupMap.values()].filter(g=>{const{type:u}=g;return u!==s&&u!==r})}clearLocalGroup(){this._groupMap.clear()}emitGroupListUpdate(){const s=this.getLocalGroupList(),{OuterEvent:{GROUP_LIST_UPDATED:r},notificationCenter:g}=this._core;g.emitOuterEvent(r,{name:r,data:s})}updateConversationGroupProfile(s){const{appStore:{conversationStore:r},OuterConstant:{CONV_GROUP:g}}=this._core,u=`${g}${s}`,E=r.getConversation(u);if(E){const m=this.getLocalGroup(s);E.setProfileCompleted(),r.updateConversation(u,{groupProfile:m})}}reset(){this.clearLocalGroup()}_clearGroupLocalMessage(s){const{message:{messageHistory:r,messageDataHandler:g},OuterConstant:{CONV_GROUP:u},ssoLog:E}=this._core;E.debug("_clearGroupLocalMessage",`groupID:${s}`);const m=`${u}${s}`;r.completedHistoryConversations.delete(m),g.deleteConversationMessageList(m)}};function Lm(s,r){return mA(this,void 0,void 0,function*(){const{type:g,limit:u,offset:E,supportTopic:m=0,memberAccount:D,responseFilter:M}=s,T={Type:g,Limit:u,Offset:E,Member_Account:D,ResponseFilter:M,SupportTopic:m,NeedAppDefineData:1};return r.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_joined_group_list",data:T})})}const dn=function(s,r){return{code:0,data:s||{},successLog:r}};var jv=new class{constructor(){this._name="GetGroupList",this._pagingStatus=MI,this.PAGING_GRP_COUNT_LIMIT=200}init(s){this._core=s;const{helper:r,constants:{WORKFLOW_NAME:g,WORKFLOW_STEP:u}}=s;r.registerApi({apiName:"getGroupList",context:this}),r.registerWorkflowStep(g.SYNC_SERVER_INFO_AFTER_LOGIN,u.GROUP_LIST_SYNC,this._syncGroupList,this)}getGroupList(){return mA(this,arguments,void 0,function*(s=!1){if(s){const g=[];return yield this._pagingGetJoinedCommunityList({limit:this.PAGING_GRP_COUNT_LIMIT,offset:0,groupList:g}),Ji.updateLocalGroup(g),Ji.getLocalGroupList()}if(this._core.ssoLog.debug("getGroupList",`${this._name}.getGroupList pagingStatus:${this._pagingStatus}`),this._pagingStatus===Og||this._pagingStatus===MI)return this._syncGroupList().then(()=>{const g=Ji.getLocalGroupList();return dn({groupList:g,isSyncCompleted:this._isSyncCompleted()})}).catch(g=>{throw g});const r=Ji.getLocalGroupList();return dn({groupList:r,isSyncCompleted:this._isSyncCompleted()},{message:`return group count:${r.length}`})})}_syncGroupList(){return mA(this,void 0,void 0,function*(){this._pagingStatus===MI&&Ji.clearLocalGroup();const s=this.PAGING_GRP_COUNT_LIMIT,r=[];try{yield this._pagingGetGroupList({limit:s,offset:0,groupList:r}),this._pagingStatus=ru,this._groupListTreeShaking(r),Ji.updateLocalGroup(r);const g=Ji.getLocalGroupList();return this._core.ssoLog.debug("_syncGroupList",`${this._name}._syncGroupList ok, count:${g.length}`),Ji.emitGroupListUpdate(),g}catch(g){throw this._pagingStatus=Og,g}})}_pagingGetGroupList(s){return mA(this,void 0,void 0,function*(){const{ssoLog:r}=this._core,{isCommunityRelay:g=!1,groupList:u}=s;let E,{limit:m,offset:D}=s;const M=[...ss];g&&(E=this._core.OuterConstant.GRP_COMMUNITY,M.push("AtInfoList"));try{const T=yield Lm({type:E,limit:m,offset:D,memberAccount:this._core.store.get("login").userId,responseFilter:{GroupBaseInfoFilter:M,SelfInfoFilter:[...Pl]}},this._core),{GroupIdList:P=[],TotalCount:W=0}=T||{},oA=this._convertGroupKey(P);u.push(...oA);const EA=D+m,wA=!(W>EA),kA=`offset:${D} limit:${m} total:${W} isCompleted:${wA} current:${u.length} isCommunityRelay:${g}`;return r.debug("_pagingGetGroupList",`${this._name}._pagingGetGroupList ok. ${kA}`),g?wA?u:(D=EA,this._pagingGetGroupList({isCommunityRelay:!0,limit:m,offset:D,groupList:u})):wA?(r.debug("_pagingGetGroupList",`${this._name}._pagingGetGroupList start to get community list`),D=0,this._pagingGetGroupList({isCommunityRelay:!0,limit:m,offset:D,groupList:u})):(D=EA,this._pagingGetGroupList({limit:m,offset:D,groupList:u}))}catch(T){if(T.ErrorCode===au)return r.warn("_pagingGetGroupList",`${this._name}._pagingGetGroupList response size exceeds the limit, request count:${m}`),m=50,this._pagingGetGroupList({isCommunityRelay:g,limit:m,offset:D,groupList:u});if(g)return T.code===vI&&r.debug("_pagingGetGroupList",`${this._name}._pagingGetGroupList ok. community unavailable`),u;throw T}})}_pagingGetJoinedCommunityList(s){return mA(this,void 0,void 0,function*(){const{common:{getCurrentUserID:r},OuterConstant:g,ssoLog:u}=this._core,{groupList:E}=s;let{limit:m,offset:D}=s;try{const M=yield Lm({limit:m,offset:D,type:g.GRP_COMMUNITY,memberAccount:r(),supportTopic:1,responseFilter:{GroupBaseInfoFilter:[...ss],SelfInfoFilter:[...Pl]}},this._core),{GroupIdList:T=[],TotalCount:P=0}=M||{},W=this._convertGroupKey(T);E.push(...W);const oA=D+m,EA=!(P>oA),wA=`offset:${D} limit:${m} total:${P} isCompleted:${EA} current:${E.length}`;return u.debug("_pagingGetJoinedCommunityList",`${this._name}._pagingGetJoinedCommunityList ok. ${wA}`),EA?E:(D=oA,this._pagingGetJoinedCommunityList({limit:m,offset:D,groupList:E}))}catch(M){if(M.code===kT)return u.warn("_pagingGetJoinedCommunityList",`${this._name}._pagingGetJoinedCommunityList response size exceeds the limit, request count:${m}`),m=50,this._pagingGetJoinedCommunityList({limit:m,offset:D,groupList:E});throw M}})}_groupListTreeShaking(s){const r=new Map([...Ji.getLocalGroupList()]);for(let u=0,E=s.length;u{const{AtFlagList:E,AtMsgSeq:m,From_Account:D}=u;g.push({groupID:s,groupAtType:E,sequence:m,from:D})}),g}},Zu=new class{constructor(){this._name="CreateGroup"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"createGroup",context:this})}createGroup(s){return mA(this,void 0,void 0,function*(){var r;this._preCheckParams(s);const{helper:{ChatError:g}}=this._core;try{const{utils:{isEmpty:u},common:{getCurrentUserID:E},OuterConstant:{GRP_AVCHATROOM:m}}=this._core,D=yield function(oA,EA){return mA(this,void 0,void 0,function*(){const{name:wA,type:kA,groupID:xA,introduction:LA,notification:SA,avatar:OA,maxMemberNum:qA,joinOption:Ie,inviteOption:le,memberList:bi,groupCustomField:ki,isSupportTopic:Ot}=oA;let Li,cs;bi&&(Li=bi.map(St=>{const{userID:UA,memberCustomField:ai}=St;return{Member_Account:UA,AppMemberDefinedData:ai?YE(ai):void 0}})),ki&&(cs=YE(ki));const Re={Name:wA,Type:kA,GroupId:xA,Introduction:LA,Notification:SA,FaceUrl:OA,MaxMemberCount:qA,ApplyJoinOption:Ie,InviteJoinOption:le,MemberList:Li,AppDefinedData:cs,SupportTopic:Ot,webPushFlag:1};return EA.common.buildAndSendPacket({servcmd:"group_open_http_svc.create_group",data:Re})})}(Object.assign(Object.assign({},s),{ownerID:E()}),this._core),{GroupId:M,OverJoinedGroupLimit_Account:T=[]}=D||{},P=`${this._name}.createGroup ok, type:${s.type} groupID:${M} overLimitUserIDList:${T}`;if(u(s.memberList)||u(T)||(s.memberList=(r=s.memberList)===null||r===void 0?void 0:r.filter(oA=>T.includes(oA.userID))),s.type===m)return dn({group:new zu(Object.assign(Object.assign({},s),{groupID:M}))},{message:P});Ji.updateLocalGroup([Object.assign(Object.assign({},s),{groupID:M})]);const W=Ji.getLocalGroup(M);return this._notNeedSendCustomMessage(s)||(this._sendCustomMessage(M,s.type),Ji.emitGroupListUpdate()),dn({group:W},{message:P})}catch(u){const{errorCode:E,errorInfo:m}=u;throw new g({functionName:"createGroup",code:E,message:m,moreMessage:` groupID:${s.groupID}`})}})}_preCheckParams(s){const{type:r,groupID:g}=s,{utils:{isEmpty:u,isUndefined:E},common:{isCommunity:m}}=this._core,D=!u(g);if(!(()=>{const{GRP_PUBLIC:M,GRP_WORK:T,GRP_MEETING:P,GRP_AVCHATROOM:W,GRP_COMMUNITY:oA}=Zn.core.OuterConstant;return[M,T,P,W,oA]})().includes(r))throw new this._core.helper.ChatError({code:_m});if(!m({type:r})){if(D&&m({groupID:g}))throw new this._core.helper.ChatError({code:Dd});E(s.isSupportTopic)||(s.isSupportTopic=void 0)}if(this._canIUseMemberList(r)||E(s.memberList)||(s.memberList=void 0),this._canIUseJoinOption(r)||E(s.joinOption)||(s.joinOption=void 0),m({type:r})){if(D&&!m({groupID:g}))throw new this._core.helper.ChatError({code:Dd});s.isSupportTopic=this._canIUseTopic(s)?1:0}}_canIUseMemberList(s){return!Sd(s)}_canIUseJoinOption(s){return Kv(s)||this._core.common.isCommunity({type:s})}_canIUseTopic(s){const{isSupportTopic:r}=s;return r===!0}_notNeedSendCustomMessage(s){const{type:r,isSupportTopic:g}=s,{OuterConstant:{GRP_AVCHATROOM:u,GRP_COMMUNITY:E}}=this._core;return r===u||r===E&&g===1}_sendCustomMessage(s,r){var g,u,E,m,D,M;const{OuterConstant:T,common:{t:P}}=this._core;let W=P("CREATE_GROUP"),oA=Lc;r===T.GRP_COMMUNITY&&(W=P("CREATE_COMMUNITY"),oA=Rr);const EA={to:s,conversationType:"GROUP",payload:{data:JSON.stringify({businessID:"group_create",content:W,cmd:oA,opUser:this._core.store.get("login").userId,version:4})}},wA=(E=(u=(g=this._core)===null||g===void 0?void 0:g.message)===null||u===void 0?void 0:u.messageFactory)===null||E===void 0?void 0:E.createCustomMessage(EA);(M=(D=(m=this._core)===null||m===void 0?void 0:m.message)===null||D===void 0?void 0:D.messageSender)===null||M===void 0||M.sendMessage(wA,{})}},zs=new class{constructor(){this._name="AttributesDataHandler",this._groupAttributesCache=new Map,this._groupAttributesCacheValuesCopy={}}init(s){this._core=s;const{helper:r,constants:g}=s;r.registerWorkflowStep(g.WORKFLOW_NAME.SYNC_SERVER_INFO_AFTER_RE_ONLINE,g.WORKFLOW_STEP.GROUP_ATTRIBUTE_CACHE_CLEAR,this.clearLocalMainSequence,this)}clearLocalMainSequence(){this._groupAttributesCache.forEach(s=>{s.localMainSequence=0})}isGroupAttributesUpdated(s){const{elements:{newGroupProfile:r}}=s,{utils:{isEmpty:g,isUndefined:u}}=this._core;return!u(r)&&!g(r.groupAttributeOption)}handleGroupAttributesUpdated(s){const{groupID:r,groupAttributeOption:g}=s,{serverMainSequence:u,groupAttributeList:E=[],operation:m}=g;this._core.ssoLog.debug("handleGroupAttributesUpdated",`${this._name}.handleGroupAttributesUpdated groupID:${r} operation:${m}`);const{utils:{isUndefined:D}}=this._core;D(m)||(this.refreshGroupAttributesCache({groupID:r,serverMainSequence:u,groupAttributeList:E,operation:m}),this.emitGroupAttributesUpdated(r))}initGroupAttributesCache(s){const{groupID:r,avChatRoomKey:g}=s;this._groupAttributesCache.set(r,{lastUpdateTime:0,localMainSequence:0,serverMainSequence:0,avChatRoomKey:g,values:new Map}),this._core.ssoLog.debug("initGroupAttributesCache",`${this._name}.initGroupAttributesCache. groupID:${r} avChatRoomKey:${g}`)}hasGroupAttributesCache(s){return this._groupAttributesCache.has(s)}getGroupAttributesCache(s){return this.hasGroupAttributesCache(s)||this.initGroupAttributesCache({groupID:s}),this._groupAttributesCache.get(s)}deleteGroupAttributesCache(s){this.hasGroupAttributesCache(s)&&this._groupAttributesCache.delete(s)}refreshGroupAttributesCache(s){const{groupID:r,serverMainSequence:g,groupAttributeList:u,operation:E}=s;if(this.hasGroupAttributesCache(r)){const m=this.getGroupAttributesCache(r),{localMainSequence:D}=m;E!==Yv&&g-D!==1||(m.serverMainSequence=g,m.localMainSequence=g,m.lastUpdateTime=Date.now(),this._updateGroupAttributesCacheValues({groupAttributes:m,groupAttributeList:u,operation:E})),g-D>1&&(m.serverMainSequence=g),this._groupAttributesCache.set(r,m),this._core.ssoLog.debug("refreshGroupAttributesCache",`${this._name}.refreshGroupAttributesCache. operation:${E} localMainSequence:${D} serverMainSequence:${g}`)}}_updateGroupAttributesCacheValues(s){const{groupAttributes:r,groupAttributeList:g=[],operation:u}=s;u!==dD?u!==CD?(u===ED&&r.values.clear(),g.forEach(E=>{const{key:m,value:D,sequence:M}=E;r.values.set(m,{value:D,sequence:M})})):g.forEach(E=>{r.values.delete(E.key)}):r.values.clear()}getGroupAttributesCacheValues(s){var r;const{groupID:g,keyList:u=[]}=s,E={};if(this.hasGroupAttributesCache(g)){const{values:m}=this.getGroupAttributesCache(g);if(u.length===0){for(const D of m.keys())E[D]=((r=m.get(D))===null||r===void 0?void 0:r.value)||"";return E}return u.forEach(D=>{var M;m.has(D)&&(E[D]=((M=m.get(D))===null||M===void 0?void 0:M.value)||"")}),E}return E}saveGroupAttributesCacheValuesCopy(s){this._groupAttributesCacheValuesCopy=this.getGroupAttributesCacheValues({groupID:s})}emitGroupAttributesUpdated(s){var r,g;const{OuterConstant:{GRP_ROOM:u,GRP_LIVE:E}}=this._core,m=this.getGroupAttributesCacheValues({groupID:s}),D=this._core.appStore.groupStore.getGroup(s),{updatedKeyList:M,deletedKeyList:T}=this._computeValuesChangedData(m);M.length===0&&T.length===0||([u,E].includes(D.type)?(this._core.ssoLog.debug("RICH_STATUS_CHANGED",`${this._name}.emitRichStatusChanged update count:${M.length}, delete count:${T.length}`),this._emitEvent({name:(r=this._core)===null||r===void 0?void 0:r.OuterEvent.RICH_STATUS_CHANGED,data:{groupID:s,richStatus:m,updatedKeyList:M,deletedKeyList:T}})):(this._core.ssoLog.debug("emitGroupAttributesUpdated",`${this._name}.emitGroupAttributesUpdated update count:${M.length}, delete count:${T.length}`),this._emitEvent({name:(g=this._core)===null||g===void 0?void 0:g.OuterEvent.GROUP_ATTRIBUTES_UPDATED,data:{groupID:s,groupAttributes:m,updatedKeyList:M,deletedKeyList:T}})))}_computeValuesChangedData(s){const{utils:{isUndefined:r}}=this._core,g=[],u=[];return Object.keys(s).forEach(E=>{s[E]!==this._groupAttributesCacheValuesCopy[E]&&g.push(E)}),Object.keys(this._groupAttributesCacheValuesCopy).forEach(E=>{r(s[E])&&u.push(E)}),this._groupAttributesCacheValuesCopy={},{updatedKeyList:g,deletedKeyList:u}}_emitEvent(s){var r;(r=this._core)===null||r===void 0||r.notificationCenter.emitOuterEvent(s.name,s)}convertKeyValueMapToList(s){const r=[];return Object.keys(s).forEach(g=>{r.push({key:g,value:s[g]})}),r}reset(){this._groupAttributesCache.clear(),this._groupAttributesCacheValuesCopy={}}},hh=new class{constructor(){this._name="DismissGroup"}init(s,r){this._core=s;const{helper:g}=s;g.registerApi({apiName:"dismissGroup",context:this,matcher:()=>!r.getInstalledSubPlugins().includes(ia)})}dismissGroup(s){return mA(this,void 0,void 0,function*(){const{helper:{ChatError:r}}=this._core;try{yield function(u,E){return mA(this,void 0,void 0,function*(){const m={GroupId:u};return E.common.buildAndSendPacket({servcmd:"group_open_http_svc.destroy_group",data:m})})}(s,this._core);const{type:g}=Ji.getLocalGroup(s);return Ji.deleteLocalGroup(s),Ji.emitGroupListUpdate(),zs.deleteGroupAttributesCache(s),dn({groupID:s,type:g},{message:s})}catch(g){const{errorCode:u,errorInfo:E}=g;throw new r({functionName:"dismissGroup",code:u,message:E})}})}},xl=new class{constructor(){this._name="GetGroupProfile"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"getGroupProfile",context:this})}getGroupProfile(s){return mA(this,void 0,void 0,function*(){const{groupID:r,groupCustomFieldFilter:g}=s,u={groupIDList:[r],responseFilter:{GroupBaseInfoFilter:[...ss],AppDefinedDataFilter_Group:g,MemberInfoFilter:[...fd]}},{helper:{ChatError:E}}=this._core;try{const m=yield this.getGroupProfileAdvance(u),{successGroupList:D,failureGroupList:M}=m;if(M.length>0)throw M[0];let T;return!Ji.hasLocalGroup(r)&&Sd(D[0].type)?T=new zu(D[0]):(Ji.updateLocalGroup(D),T=Ji.getLocalGroup(r)),T.isSupportTopic||Ji.updateConversationGroupProfile(r),dn({group:T},{message:`groupID:${r}`})}catch(m){const{code:D,message:M}=m;throw new E({functionName:"getGroupProfile",code:D,message:M})}})}getGroupProfileAdvance(s){return mA(this,void 0,void 0,function*(){const{groupIDList:r}=s,{common:{isCommunity:g}}=this._core,u=r.filter(T=>!g({groupID:T})),E=r.filter(T=>g({groupID:T}));u.length>50&&(u.length=50),E.length>50&&(E.length=50);const m=yield Promise.all([this._getGroupProfileAdvance(Object.assign(Object.assign({},s),{groupIDList:u})),this._getGroupProfileAdvance(Object.assign(Object.assign({},s),{groupIDList:E,isCommunityProfile:!0}))]),D=[],M=[];return m.forEach(T=>{D.push(...T.successGroupList),M.push(...T.failureGroupList)}),{successGroupList:D,failureGroupList:M}})}_getGroupProfileAdvance(s){return mA(this,void 0,void 0,function*(){const{ssoLog:r,utils:{isUndefined:g}}=this._core,{isCommunityProfile:u=!1}=s,E=So(s,["isCommunityProfile"]);if(E.groupIDList.length===0)return{successGroupList:[],failureGroupList:[]};try{const m=yield function(W,oA){return mA(this,void 0,void 0,function*(){const{groupIDList:EA,responseFilter:wA}=W,kA={GroupIdList:EA,ResponseFilter:wA};return oA.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_group_self_member_info",data:kA})})}(E,this._core),{GroupInfo:D=[]}=m||{},M=this._convertGroupProfileKey(D),T=M.filter(W=>g(W.errorCode)||W.errorCode===0),P=M.filter(W=>W.errorCode&&W.errorCode!==0).map(W=>({code:W.errorCode,message:W.errorInfo,data:{groupID:W.groupID}}));return r.debug("_getGroupProfileAdvance",`${this._name}._getGroupProfileAdvance ok, groupID:${E.groupIDList.join(",")}`),{successGroupList:T,failureGroupList:P}}catch(m){if(u)return{successGroupList:[],failureGroupList:[]};throw m}})}_convertGroupProfileKey(s){const r=[];for(let g=0,u=s.length;g0&&u{const{Key:T,Value:P=0}=M;E.set(T,P)}),this._groupCountersMap.set(r,{lastUpdateTime:Date.now(),groupCounterSeq:u,counters:E,avChatRoomKey:m})}}initGroupCountersCache(s){const{groupID:r,avChatRoomKey:g}=s;this._groupCountersMap.set(r,{lastUpdateTime:0,groupCounterSeq:0,counters:new Map,avChatRoomKey:g})}getLocalCounters(s,r){const g={};if(!this._hasLocalGroupCounters(s))return g;const{counters:u}=this.getLocalGroupCounters(s);if(r.length>0)r.forEach(E=>{u.has(E)&&(g[E]=u.get(E))});else for(const E of u.keys())g[E]=u.get(E);return g}deleteLocalGroupCounters(s){const{groupID:r,counterList:g=[],groupCounterSeq:u}=s;if(this._hasLocalGroupCounters(r)){const{counters:E,avChatRoomKey:m}=this.getLocalGroupCounters(r);g.forEach(D=>{E.delete(D.key)}),this._groupCountersMap.set(r,{lastUpdateTime:Date.now(),groupCounterSeq:u,counters:E,avChatRoomKey:m})}}setGroupCounters(s,r){if(!this._hasLocalGroupCounters(s))return;const g=this.getLocalGroupCounters(s),{counters:u}=g;let E=!1;Object.entries(r).forEach(([m,D])=>{u.has(m)&&u.get(m)!==D&&(u.set(m,D),E=!0)}),E&&this._groupCountersMap.set(s,Object.assign(Object.assign({},g),{lastUpdateTime:Date.now(),counters:u}))}_hasLocalGroupCounters(s){return this._groupCountersMap.has(s)}reset(){this._groupCountersMap.clear()}},VE=new class{constructor(){this._name="JoinGroup"}init(s,r){this._core=s;const{helper:g}=s;g.registerApi({apiName:"joinGroup",context:this,matcher:()=>!r.getInstalledSubPlugins().includes(ia)})}joinGroup(s){return mA(this,void 0,void 0,function*(){const{groupID:r}=s,{helper:{ChatError:g},OuterConstant:u,ssoLog:E}=this._core;try{if(Ji.hasLocalGroup(r))try{return yield xl.getGroupProfile({groupID:r}),dn({status:u.JOIN_STATUS_ALREADY_IN_GROUP,group:Ji.getLocalGroup(r)},{message:`groupID:${r} joinedStatus:${u.JOIN_STATUS_ALREADY_IN_GROUP}`})}catch{return E.warn("joinGroup",`${this._name}.joinGroup ${r} was unjoined, start to join!`),Ji.deleteLocalGroup(r),yield this._applyJoinGroup(s)}return yield this._applyJoinGroup(s)}catch(m){const{errorCode:D,errorInfo:M}=m;throw new g({functionName:"joinGroup",code:D,message:M,moreMessage:`groupID:${r}`})}})}_applyJoinGroup(s){return mA(this,void 0,void 0,function*(){const{OuterConstant:r,helper:g,ssoLog:u}=this._core,{groupID:E}=s,m=Object.assign({},s),D=g.checkBusinessCapabilityBits(qr);D&&(m.historyMessageFlag=1);const M=yield function(SA,OA){return mA(this,void 0,void 0,function*(){const{groupID:qA,applyMessage:Ie,historyMessageFlag:le}=SA,bi={GroupId:qA,ApplyMsg:Ie,HugeGroupHistoryMsgFlag:le};return OA.common.buildAndSendPacket({servcmd:"group_open_http_svc.apply_join_group",data:bi})})}(m,this._core),{Type:T,JoinedStatus:P,LongPollingKey:W,StartSeq:oA,HugeGroupFlag:EA,AVChatRoomKey:wA,RspMsgList:kA=[]}=M||{},xA=`groupID:${E} joinedStatus:${P} longPollingKey:${W} startSeq:${oA} avChatRoomFlag:${EA} canGetAVChatRoomHistoryMsg:${D}, historyMessageCount:${kA.length}`;u.debug("_applyJoinGroup",`${this._name}._applyJoinGroup ok, ${xA}`);let LA=new zu({groupID:E,type:T});if(P===r.JOIN_STATUS_WAIT_APPROVAL)return dn({status:r.JOIN_STATUS_WAIT_APPROVAL,group:LA});if(P===r.JOIN_STATUS_SUCCESS){try{LA=(yield xl.getGroupProfile({groupID:E})).data.group}catch(SA){u.warn("_applyJoinGroup",`${this._name}._applyJoinGroup getGroupProfile failed, groupID: ${E}, errorCode:${SA?.code}`)}return this._handleJoinResult({group:LA,avChatRoomFlag:EA,longPollingKey:W,startSequence:oA,avChatRoomKey:wA,historyMessageList:kA})}throw new this._core.helper.ChatError({code:dh})})}_handleJoinResult(s){const{group:r,avChatRoomFlag:g,avChatRoomKey:u}=s;return g===1?(zs.initGroupAttributesCache({groupID:r.groupID,avChatRoomKey:u}),nc.initGroupCountersCache({groupID:r.groupID,avChatRoomKey:u}),dn(s)):(Ji.updateLocalGroup([r]),Ji.emitGroupListUpdate(),dn({status:this._core.OuterConstant.JOIN_STATUS_SUCCESS,group:r},{message:`groupID:${r.groupID}`}))}},kQ=new class{constructor(){this._name="QuitGroup"}init(s,r){this._core=s;const{helper:g}=s;g.registerApi({apiName:"quitGroup",context:this,matcher:()=>!r.getInstalledSubPlugins().includes(ia)})}quitGroup(s){return mA(this,void 0,void 0,function*(){if(!Ji.hasLocalGroup(s))throw new this._core.helper.ChatError({code:mD});const{helper:{ChatError:r}}=this._core;try{yield function(u,E){return mA(this,void 0,void 0,function*(){const m={GroupId:u};return E.common.buildAndSendPacket({servcmd:"group_open_http_svc.quit_group",data:m})})}(s,this._core);const{type:g}=Ji.getLocalGroup(s);return Ji.deleteLocalGroup(s),Ji.emitGroupListUpdate(),zs.deleteGroupAttributesCache(s),dn({groupID:s,type:g},{message:`groupID:${s}`})}catch(g){const{errorCode:u,errorInfo:E}=g;throw new r({functionName:"quitGroup",code:u,message:E,moreMessage:`groupID:${s}`})}})}},uB=new class{constructor(){this._name="SearchGroup"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"searchGroupByID",context:this})}searchGroupByID(s){return mA(this,void 0,void 0,function*(){try{const r=yield function(OA,qA){return mA(this,void 0,void 0,function*(){const Ie={GroupIdList:[OA],GroupBasePublicInfoFilter:[...Eg]};return qA.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_group_public_info",data:Ie})})}(s,this._core),{GroupInfo:g=[]}=r||{},{AppDefinedData:u=[],ApplyJoinOption:E,CreateTime:m,FaceUrl:D,Introduction:M,InviteJoinOption:T,MaxMemberNum:P,MemberNum:W,Name:oA,Owner_Account:EA,Type:wA,ErrorCode:kA,ErrorInfo:xA}=g[0];if(kA!==0)throw new this._core.helper.ChatError({code:kA,message:xA});const LA=Md(u),SA=new zu({groupID:s,name:oA,avatar:D,introduction:M,joinOption:E,inviteOption:T,maxMemberCount:P,memberCount:W,type:wA,ownerID:EA,createTime:m,groupCustomField:LA});return dn({group:SA})}catch(r){const{errorCode:g,errorInfo:u}=r;throw new this._core.helper.ChatError({functionName:"searchGroupByID",code:g,message:u})}})}},UT=new class{constructor(){this._name="UpdateGroupProfile"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"updateGroupProfile",context:this})}updateGroupProfile(s){return mA(this,void 0,void 0,function*(){const{groupID:r}=s,{utils:{isUndefined:g,safeStringify:u},ssoLog:E,helper:m}=this._core;let D=Ji.getLocalGroup(r);if(D){const{type:M}=D;this._canIUseJoinOption(M)||g(s.joinOption)||(E.warn("updateGroupProfile",`${this._name}.updateGroupProfile groupID:${r} joinOption is unavailable for Work/Meeting/AVChatRoom`),s.joinOption=void 0)}g(s.muteAllMembers)||(s.muteAllMembers=s.muteAllMembers===!0?"On":"Off");try{return yield function(M,T){return mA(this,void 0,void 0,function*(){const{groupID:P,name:W,avatar:oA,introduction:EA,notification:wA,muteAllMembers:kA,joinOption:xA,inviteOption:LA,groupCustomField:SA}=M,OA={GroupId:P,Name:W,FaceUrl:oA,Introduction:EA,Notification:wA,ShutUpAllMember:kA,ApplyJoinOption:xA,InviteJoinOption:LA,AppDefinedData:SA?YE(SA):void 0};return T.common.buildAndSendPacket({servcmd:"group_open_http_svc.modify_group_base_info",data:OA})})}(s,this._core),D?(D.updateGroup(s),Ji.emitGroupListUpdate()):D=new zu(s),dn({group:D},{message:`groupID:${r}`})}catch(M){const{errorCode:T,errorInfo:P}=M;throw new m.ChatError({code:T,message:P,moreMessage:`options:${u(s)}`})}})}_canIUseJoinOption(s){return Kv(s)||this._core.common.isCommunity({type:s})}},FT=new class{constructor(){this._name="ChangeGroupOwner"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"changeGroupOwner",context:this})}changeGroupOwner(s){return mA(this,void 0,void 0,function*(){const r="changeGroupOwner",{groupID:g,newOwnerID:u}=s,E=Ji.getLocalGroup(g),{helper:m,OuterConstant:D,common:{getCurrentUserID:M}}=this._core;if(E?.type===D.GRP_AVCHATROOM)throw new m.ChatError({functionName:r,code:NT});if(u===M())throw new m.ChatError({functionName:r,code:Tm});try{return yield function(T,P){return mA(this,void 0,void 0,function*(){const{groupID:W,newOwnerID:oA}=T,EA={GroupId:W,NewOwner_Account:oA};return P.common.buildAndSendPacket({servcmd:"group_open_http_svc.change_group_owner",data:EA})})}(s,this._core),E.ownerID=u,Ji.emitGroupListUpdate(),dn({group:E})}catch(T){throw new m.ChatError({functionName:r,code:T?.errorCode,message:T?.errorInfo})}})}},LQ=new class{constructor(){this._name="GetGroupOnlineMemberCount",this._onlineMemberCountMap=new Map}init(s,r){this._core=s;const{helper:g}=s;g.registerApi({apiName:"getGroupOnlineMemberCount",context:this,matcher:()=>!r.getInstalledSubPlugins().includes(ia)})}getGroupOnlineMemberCount(s){return mA(this,void 0,void 0,function*(){const r="getGroupOnlineMemberCount";if(!Ji.hasLocalGroup(s))return dn({memberCount:0});const g=Date.now();if(this._onlineMemberCountMap.has(s)){const u=this._onlineMemberCountMap.get(s),{lastReqTime:E=0,memberCount:m=0}=u||{};if(g-E<=6e4)return dn({memberCount:m})}try{const u=yield function(D,M){return mA(this,void 0,void 0,function*(){const T={GroupId:D};return M.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_online_member_num",data:T})})}(s,this._core),{OnlineMemberNum:E=0}=u||{};this._onlineMemberCountMap.set(s,{lastReqTime:Date.now(),memberCount:E});const m=`${this._name}.${r} ok. groupID:${s} memberCount:${E}`;return dn({memberCount:E},{message:m})}catch(u){throw new this._core.helper.ChatError({functionName:r,code:u?.errorCode,message:u?.errorInfo})}})}},UQ=new class{init(s,r){s.ssoLog.debug("GroupAction.init"),jv.init(s),Zu.init(s),hh.init(s,r),VE.init(s,r),kQ.init(s,r),uB.init(s),xl.init(s),UT.init(s),FT.init(s),LQ.init(s,r)}dismissGroup(s){return hh.dismissGroup(s)}joinGroup(s){return VE.joinGroup(s)}quitGroup(s){return kQ.quitGroup(s)}getGroupOnlineMemberCount(s){return LQ.getGroupOnlineMemberCount(s)}},Wv=new class{constructor(){this._name="GetGroupApplicationList"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"getGroupApplicationList",context:this})}getGroupApplicationList(){return mA(this,void 0,void 0,function*(){const s="getGroupApplicationList";try{const r=yield Promise.all([this._getGroupApplicationList(),this._getGroupApplicationList({type:this._core.OuterConstant.GRP_COMMUNITY})]);this._core.ssoLog.debug("getGroupApplicationList",`${this._name}.${s} ok.`);const g=this._handleGroupApplicationResult([...r[0],...r[1]]);return dn({applicationList:g})}catch(r){throw new this._core.helper.ChatError({functionName:s,code:r?.errorCode,message:r?.errorInfo})}})}_getGroupApplicationList(s){return mA(this,void 0,void 0,function*(){const{type:r,startTime:g=0,limit:u=20}=s||{},{common:E}=this._core;let m;try{m=yield function(P,W){return mA(this,void 0,void 0,function*(){const{type:oA,startTime:EA,limit:wA,handleAccount:kA}=P,xA={Type:oA,StartTime:EA,Limit:wA,Handle_Account:kA};return W.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_pendency",data:xA})})}({type:r,startTime:g,limit:u,handleAccount:E.getCurrentUserID()},this._core)}catch(P){if(P?.errorCode!==11e3)throw P;m={}}const{NextStartTime:D=0,PendencyList:M=[]}=m||{};if(D===0)return M;const T=yield this._getGroupApplicationList(Object.assign(Object.assign({},s),{startTime:D}));return[...M,...T]})}_handleGroupApplicationResult(s){const r=[];return s.forEach(g=>{const u=this._convertApplicationData(g),{handled:E}=u,m=So(u,["handled"]);E===0&&r.push(m)}),r}_convertApplicationData(s){const{Handled:r,AddTime:g,ApplyInviteMsg:u,Authentication:E,FromUserNickName:m,From_Account:D,GroupId:M,GroupName:T,PendencyType:P,To_Account:W}=s;return{handled:r,messageKey:g,applicant:D,applicantNick:m,groupID:M,groupName:T,authentication:E,applicationType:P,userID:W,note:u,addTime:g}}},zv=new class{constructor(){this._name="HandleGroupApplication"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"handleGroupApplication",context:this})}handleGroupApplication(s){return mA(this,void 0,void 0,function*(){const{application:r}=s,g=this._handleParams(s);try{r?.applicationType===Uc?yield function(E,m){return mA(this,void 0,void 0,function*(){const{groupID:D,handleAction:M,handleMessage:T,applicant:P,authentication:W,invitee:oA}=E,EA={GroupId:D,HandleMsg:M,ApprovalMsg:T,Applicant_Account:P,Authentication:W,Invited_Account:oA};return m.common.buildAndSendPacket({servcmd:"group_open_http_svc.handle_invite_join_permission_group",data:EA})})}(g,this._core):yield function(E,m){return mA(this,void 0,void 0,function*(){const{groupID:D,handleAction:M,handleMessage:T,applicant:P,authentication:W,messageKey:oA}=E,EA={GroupId:D,HandleMsg:M,ApprovalMsg:T,Applicant_Account:P,Authentication:W,MsgKey:oA};return m.common.buildAndSendPacket({servcmd:"group_open_http_svc.handle_apply_join_group",data:EA})})}(g,this._core);const u=Ji.getLocalGroup(g.groupID);return dn({group:u})}catch(u){throw new this._core.helper.ChatError({functionName:"handleGroupApplication",code:u?.errorCode,message:u?.errorInfo})}})}_handleParams(s){var r;const{handleAction:g,handleMessage:u,message:E,application:m}=s;let D,M,T,P,W;if(E){const{payload:oA}=E||{};D=oA.operatorID,M=(r=oA.groupProfile)===null||r===void 0?void 0:r.groupID,T=oA.authentication,P=oA.messageKey}else D=m?.applicant||"",M=m?.groupID||"",T=m?.authentication||"",P=m?.messageKey||0;return m?.applicationType===Uc&&(W=m.userID),{handleAction:g,handleMessage:u,applicant:D,invitee:W,groupID:M,authentication:T,messageKey:P}}},yD=new class{init(s){s.ssoLog.debug("GroupApplication.init"),Wv.init(s),zv.init(s)}};let vC=class{constructor(s){this.userID="",this.avatar="",this.nick="",this.role="",this.joinTime="",this.nameCard="",this.muteUntil=0,this.memberCustomField=[],this.isOnline=!1,this.updateMember(s)}updateMember(s){const{core:{utils:{isUndefined:r},common:{deepMerge:g}}}=Zn;r(s.muteTime)||(this.muteUntil=Math.floor((Date.now()+1e3*s.muteTime)/1e3)),r(s.onlineStatus)||(this.isOnline=s.onlineStatus==="Online");const u=[null,void 0,"",0,NaN];s.memberCustomField&&bm(this.memberCustomField,s.memberCustomField),g(this,s,["memberCustomField","marks","onlineStatus","muteTime"],u)}};function EB(s,r){return mA(this,void 0,void 0,function*(){const{groupID:g,userID:u,muteTime:E,role:m,nameCard:D,memberCustomField:M}=s;let T;M&&(T=YE(M));const P={GroupId:g,Member_Account:u,ShutUpTime:E,Role:m,NameCard:D,AppMemberDefinedData:T};return r.common.buildAndSendPacket({servcmd:"group_open_http_svc.modify_group_member_info",data:P})})}var DD=new class{constructor(){this._name="GetGroupMemberList"}init(s,r){this._core=s;const{helper:g}=s;g.registerApi({apiName:"getGroupMemberList",context:this,matcher:()=>!r.getInstalledSubPlugins().includes(ia)})}getGroupMemberList(s){return mA(this,void 0,void 0,function*(){const r="getGroupMemberList",{groupID:g,offset:u=0,count:E=100,role:m="",filter:D=""}=s,M=Ji.getLocalGroup(g),T=E>100?100:E,P={groupID:g,offset:u,limit:T,memberRoleFilter:Wu.includes(m)?[m]:void 0,memberInfoFilter:Sm};try{const W=yield function(le,bi){return mA(this,void 0,void 0,function*(){const{isCommunity:ki}=bi.common,{groupID:Ot,offset:Li,limit:cs,memberRoleFilter:Re,memberInfoFilter:St}=le,UA={GroupId:Ot,Limit:cs,MemberRoleFilter:Re,MemberInfoFilter:St};return ki({groupID:Ot})?UA.Next=String(Li):UA.Offset=Li,bi.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_group_member_info",data:UA})})}(P,this._core),{MemberList:oA,MemberNum:EA,Next:wA}=W||{},kA=`${this._name}.${r} ok, totalMemberCount:${EA} next:${wA}`,{utils:{isArray:xA,isEmpty:LA},common:{isCommunity:SA}}=this._core;if(M&&(M.memberCount=EA),!xA(oA)||oA.length===0)return dn({memberList:[],offset:0},{message:kA});let OA=u+T;SA({groupID:g})&&(OA=LA(wA)?0:wA),oA.lengthD.userID),u=yield(r=this._core.user.userProfile)===null||r===void 0?void 0:r.getUserProfile({userIDList:g}),E=u?.data||[],m=new Map(E.map(D=>[D.userID,D]));return s.forEach(D=>{if(m.has(D.userID)){const{nick:M="",avatar:T=""}=m.get(D.userID);D.nick=M,D.avatar=T}}),s})}_generateGroupMember(s){const r=[];for(let g=0,u=s.length;g50&&(T.warn("getGroupMemberProfile",`${this._name}.${r} userIDList length:${u.length} exceeds limit 50`),u.splice(50));const P=`userIDList length:${u.length} groupID:${g}`;try{const W=yield function(kA,xA){return mA(this,void 0,void 0,function*(){const{groupID:LA,userIDList:SA,memberInfoFilter:OA,memberCustomFieldFilter:qA}=kA,Ie={GroupId:LA,Member_List_Account:SA,MemberInfoFilter:OA,AppDefinedDataFilter_GroupMember:qA};return xA.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_specified_group_member_info",data:Ie})})}({groupID:g,userIDList:u,memberCustomFieldFilter:E,memberInfoFilter:[...Sm]},this._core),{MemberList:oA}=W||{};if(!M(oA)||oA.length===0)return dn({memberList:[]});let EA=this._convertMemberInfo(oA);EA=yield this._getMemberAvatarAndNick(EA);const wA=this._generateGroupMember(EA);return dn({memberList:wA},{message:P})}catch(W){throw new D.ChatError({functionName:r,code:W?.errorCode,message:W?.errorInfo,moreMessage:P})}})}_convertMemberInfo(s){const r=[];for(let g=0,u=s.length;gD.userID),u=yield(r=this._core.user.userProfile)===null||r===void 0?void 0:r.getUserProfile({userIDList:g}),E=u?.data||[],m=new Map(E.map(D=>[D.userID,D]));return s.forEach(D=>{if(m.has(D.userID)){const{nick:M="",avatar:T=""}=m.get(D.userID);D.nick=M,D.avatar=T}}),s})}_generateGroupMember(s){const r=[];for(let g=0,u=s.length;g({Member_Account:M}));try{const M=yield function(wA,kA){return mA(this,void 0,void 0,function*(){const{groupID:xA,userIDList:LA}=wA,SA={GroupId:xA,MemberList:LA};return kA.common.buildAndSendPacket({servcmd:"group_open_http_svc.add_group_member",data:SA})})}({groupID:g,userIDList:D},this._core),{MemberList:T=[]}=M||{},{failureUserIDList:P,successUserIDList:W,existedUserIDList:oA,overLimitUserIDList:EA}=this._handleResult(T);return dn({failureUserIDList:P,successUserIDList:W,existedUserIDList:oA,overLimitUserIDList:EA,group:E},{message:` groupID:${g} successUserIDList:${W} failureUserIDList:${P} existedUserIDList:${oA} overLimitUserIDList:${EA}`})}catch(M){throw new m.ChatError({functionName:r,code:M?.errorCode,message:M?.errorInfo})}})}_handleResult(s){const r=[],g=[],u=[],E=[];return s.forEach(m=>{const{Result:D,Member_Account:M}=m;D===Mm?r.push(M):D===vm?g.push(M):D===Rm?u.push(M):D===uD&&E.push(M)}),{failureUserIDList:r,successUserIDList:g,existedUserIDList:u,overLimitUserIDList:E}}},Rd=new class{constructor(){this._name="DeleteGroupMember"}init(s,r){this._core=s;const{helper:g}=s;g.registerApi({apiName:"deleteGroupMember",context:this,matcher:()=>!r.getInstalledSubPlugins().includes(ia)})}deleteGroupMember(s){return mA(this,void 0,void 0,function*(){const r="deleteGroupMember",{groupID:g,userIDList:u}=s,E=Ji.getLocalGroup(g),{helper:m,utils:{isUndefined:D},ssoLog:M}=this._core;if(D(E))throw new m.ChatError({functionName:r,code:TT});u.length>20&&(M.warn("deleteGroupMember",`${this._name}.${r} userIDList length:${u.length} exceeds limit 20`),u.splice(20));try{return yield function(T,P){return mA(this,void 0,void 0,function*(){const{groupID:W,userIDList:oA,reason:EA}=T,wA={GroupId:W,MemberToDel_Account:oA,Reason:EA};return P.common.buildAndSendPacket({servcmd:"group_open_http_svc.delete_group_member",data:wA})})}({groupID:g,userIDList:u},this._core),dn({group:E,userIDList:u},{message:`groupID:${g} userIDList length:${u.length}`})}catch(T){throw new m.ChatError({functionName:r,code:T?.errorCode,message:T?.errorInfo})}})}},Zv=new class{constructor(){this._name="SetGroupMemberMuteTime"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"setGroupMemberMuteTime",context:this})}setGroupMemberMuteTime(s){return mA(this,void 0,void 0,function*(){const{helper:r}=this._core,{groupID:g,userID:u,muteTime:E}=s,m=` groupID:${g} userID:${u} muteTime:${E}`;this._preCheckSettingMuteParams(s);try{yield EB(s,this._core);const D=Ji.getLocalGroup(g),M=new vC({userID:u,muteTime:E});return dn({group:D,member:M},{message:m})}catch(D){throw new r.ChatError({functionName:"setGroupMemberMuteTime",code:D?.errorCode,message:D?.errorInfo,moreMessage:m})}})}_preCheckSettingMuteParams(s){const{userID:r}=s,{store:g,helper:u}=this._core;if(r===g.get("login").userId)throw new u.ChatError({functionName:"setGroupMemberMuteTime",code:fD})}},OQ=new class{constructor(){this._name="SetGroupMemberRole"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"setGroupMemberRole",context:this})}setGroupMemberRole(s){return mA(this,void 0,void 0,function*(){const r="setGroupMemberRole",{helper:g}=this._core,{groupID:u,userID:E,role:m}=s,D=`${this._name}.${r} ok, groupID:${u} userID:${E} role:${m}`;this._preCheckSettingRoleParams(s);try{yield EB(s,this._core);const M=Ji.getLocalGroup(u),T=new vC({userID:E,role:m});return dn({group:M,member:T},{message:D})}catch(M){throw new g.ChatError({functionName:r,code:M?.errorCode,message:M?.errorInfo,moreMessage:D})}})}_preCheckSettingRoleParams(s){var r;const{groupID:g,userID:u,role:E}=s,{store:m,helper:D,OuterConstant:M,common:{isCommunity:T}}=this._core,P=Ji.getLocalGroup(g);if(((r=P?.selfInfo)===null||r===void 0?void 0:r.role)!==M.GRP_MBR_ROLE_OWNER)throw new D.ChatError({functionName:"setGroupMemberRole",code:bT});if(u===m.get("login").userId)throw new D.ChatError({functionName:"setGroupMemberRole",code:Hv});const W=[...Wu];if(T({groupID:g})&&W.push(M.GRP_MBR_ROLE_CUSTOM),!W.includes(E))throw new D.ChatError({functionName:"setGroupMemberRole",code:Nm})}},SD=new class{constructor(){this._name="SetGroupMemberNameCard"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"setGroupMemberNameCard",context:this})}setGroupMemberNameCard(s){return mA(this,void 0,void 0,function*(){var r;const g="setGroupMemberNameCard",{helper:u,common:{getCurrentUserID:E}}=this._core,{groupID:m,userID:D=E(),nameCard:M}=s,T=`${this._name}.${g} ok, groupID:${m} userID:${D} nameCard:${M}`;this._preCheckSettingNameCardParams(s);try{yield EB({groupID:m,userID:D,nameCard:M},this._core);const W=Ji.getLocalGroup(m);D===((r=W?.selfInfo)===null||r===void 0?void 0:r.userID)&&(W.updateSelfInfo({nameCard:M}),Ji.emitGroupListUpdate(),Ji.updateConversationGroupProfile(m));const oA=new vC({userID:D,nameCard:M});return dn({group:W,member:oA},{message:T})}catch(P){throw new u.ChatError({functionName:g,code:P?.errorCode,message:P?.errorInfo,moreMessage:T})}})}_preCheckSettingNameCardParams(s){const{groupID:r}=s,{helper:g}=this._core,u=Ji.getLocalGroup(r);if(Sd(u?.type))throw new g.ChatError({functionName:"setGroupMemberNameCard",code:Gm})}},Um=new class{constructor(){this._name="SetGroupMemberCustomField"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"setGroupMemberCustomField",context:this})}setGroupMemberCustomField(s){return mA(this,void 0,void 0,function*(){const r="setGroupMemberCustomField",{helper:g,common:{getCurrentUserID:u}}=this._core;this._preCheckSettingCustomFiledParams(s);const{groupID:E,userID:m=u(),memberCustomField:D}=s,M=`${this._name}.${r} ok, groupID:${E}userID:${m} memberCustomField:${JSON.stringify(D)}`;try{yield EB({groupID:E,userID:m,memberCustomField:D},this._core);const P=Ji.getLocalGroup(E),W=new vC({userID:m,memberCustomField:D});return dn({group:P,member:W},{message:M})}catch(T){throw new g.ChatError({functionName:r,code:T?.errorCode,message:T?.errorInfo,moreMessage:M})}})}_preCheckSettingCustomFiledParams(s){const{groupID:r}=s,{helper:g}=this._core,u=Ji.getLocalGroup(r);if(Sd(u?.type))throw new g.ChatError({functionName:"setGroupMemberCustomField",code:Gm})}},Xv=new class{init(s,r){s.ssoLog.debug("GroupMember.init"),DD.init(s,r),FQ.init(s),vd.init(s),Rd.init(s,r),Zv.init(s),OQ.init(s),SD.init(s),Um.init(s)}getGroupMemberList(s){return DD.getGroupMemberList(s)}deleteGroupMember(s){return Rd.deleteGroupMember(s)}},OT=new class{init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"getGroupCounters",context:this})}getGroupCounters(s){return mA(this,void 0,void 0,function*(){const r="getGroupCounters";try{km(r,sc);const{groupID:g,keyList:u=[]}=s,{avChatRoomKey:E,lastUpdateTime:m}=nc.getLocalGroupCounters(g);if(!(Date.now()-m>=this._getExpireTime()))return{code:0,data:{counters:nc.getLocalCounters(g,u)}};const D=yield function(P){return mA(this,void 0,void 0,function*(){const{groupID:W,GroupCounterKeys:oA,avChatRoomKey:EA}=P,{common:wA}=Zn.core,kA={GroupId:W,keyList:oA,BytesKey:EA};return wA.buildAndSendPacket({servcmd:"group_open_http_svc.get_group_counter",data:kA})})}({groupID:g,keyList:u,avChatRoomKey:E}),{GroupCounter:M=[],GroupCounterSeq:T}=D;return nc.updateLocalGroupCounters({groupID:g,counterList:M,groupCounterSeq:T}),{code:0,data:{counters:nc.getLocalCounters(g,u)}}}catch(g){MC(r,g)}})}_getExpireTime(){const{store:s,utils:{isUndefined:r}}=this._core,g=s.get("cloudConfig")||{},{grp_counter_expire_time:u}=g;return r(u)?3e4:Number(u)}},Fm=new class{init(s){const{helper:r}=s;r.registerApi({apiName:"setGroupCounters",context:this}),r.registerApi({apiName:"increaseGroupCounter",context:this}),r.registerApi({apiName:"decreaseGroupCounter",context:this})}setGroupCounters(s){return mA(this,void 0,void 0,function*(){return this._handleCounterOperation(ju,s)})}increaseGroupCounter(s){return mA(this,void 0,void 0,function*(){return this._handleCounterOperation(Dm,s)})}decreaseGroupCounter(s){return mA(this,void 0,void 0,function*(){return this._handleCounterOperation(_i,s)})}_handleCounterOperation(s,r){return mA(this,void 0,void 0,function*(){const g=`${s}GroupCounter`;try{km(g,sc);const{groupID:u,key:E,value:m=0}=r,{avChatRoomKey:D}=nc.getLocalGroupCounters(u),M=s===ju?this._convertObjectToList(r.counters):[{Key:E,Value:m}],T=yield this._updateGroupCounters({groupID:u,counterList:M,avChatRoomKey:D,mode:s});return nc.setGroupCounters(u,T),{code:0,data:{counters:T}}}catch(u){MC(g,u)}})}_updateGroupCounters(s){return mA(this,void 0,void 0,function*(){const r=yield function(E){const{groupID:m,counterList:D,mode:M,avChatRoomKey:T}=E,{common:P}=Zn.core,W={GroupId:m,GroupCounter:D,Mode:M,BytesKey:T};return P.buildAndSendPacket({servcmd:"group_open_http_svc.update_group_counter",data:W})}(s),{GroupCounter:g=[]}=r,u={};return g.forEach(E=>{const{Key:m,Value:D=0}=E;u[m]=D}),u})}_convertObjectToList(s){return Object.entries(s).map(([r,g])=>({Key:r,Value:g||0}))}},dB=new class{init(s){this._core=s,OT.init(s),Fm.init(s)}isGroupCounterUpdated(s){const{elements:{groupCounterInfo:r}}=s,{utils:{isEmpty:g}}=this._core;return!g(r)}handleGroupCounterUpdated(s){const{to:r,elements:{groupCounterInfo:g}}=s;g.forEach(u=>{const{type:E,groupCounterSeq:m,counterList:D=[]}=u;E!==ri&&E!==on||this._processAndNotifyCounterUpdate(r,m,D),E===Do&&nc.deleteLocalGroupCounters({groupID:r,groupCounterSeq:m,counterList:D})})}_processAndNotifyCounterUpdate(s,r,g){const{OuterEvent:u,notificationCenter:E}=this._core;nc.updateLocalGroupCounters({groupID:s,groupCounterSeq:r,counterList:g}),g.forEach(({Key:m,Value:D=0})=>{E.emitOuterEvent(u.GROUP_COUNTER_UPDATED,{name:u.GROUP_COUNTER_UPDATED,data:{groupID:s,key:m,value:D}})})}reset(){nc.reset()}},Om=new class{constructor(){this._name="InitGroupAttributes"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"initGroupAttributes",context:this})}initGroupAttributes(s){return mA(this,void 0,void 0,function*(){const{groupID:r,groupAttributes:g}=s,{serverMainSequence:u,avChatRoomKey:E}=zs.getGroupAttributesCache(r),m=zs.convertKeyValueMapToList(g);try{const D=yield function(W,oA){return mA(this,void 0,void 0,function*(){const{groupID:EA,mainSequence:wA,groupAttributeList:kA,avChatRoomKey:xA}=W,LA={GroupId:EA,AttrMainSeq:wA,GroupAttr:kA,BytesKey:xA,AttrControl:["RaceConflict"]};return oA.common.buildAndSendPacket({servcmd:"group_open_http_svc.set_group_attr",data:LA})})}({groupID:r,avChatRoomKey:E,groupAttributeList:m,mainSequence:u},this._core),{AttrMainSeq:M,GroupAttr:T}=D||{},P=T.map(W=>{const{Key:oA,seq:EA}=W;return{key:oA,value:g[oA],sequence:EA}});return zs.saveGroupAttributesCacheValuesCopy(r),zs.refreshGroupAttributesCache({groupID:r,serverMainSequence:M,groupAttributeList:P,operation:ED}),zs.emitGroupAttributesUpdated(r),dn({groupAttributes:g},{message:` groupID:${r} serverMainSequence:${M}`})}catch(D){throw new this._core.helper.ChatError({functionName:"initGroupAttributes",code:D?.errorCode,message:D?.errorInfo})}})}},PT=new class{constructor(){this._name="SetGroupAttributes"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"setGroupAttributes",context:this}),r.registerExperimentalAPI("setRichStatus",this)}setGroupAttributes(s){return mA(this,void 0,void 0,function*(){const{groupID:r,groupAttributes:g,richStatusMode:u}=s,{serverMainSequence:E,avChatRoomKey:m,values:D}=zs.getGroupAttributesCache(r),M=zs.convertKeyValueMapToList(g).map(T=>{var P;const{key:W,value:oA}=T;return{key:W,value:oA,seq:((P=D.get(T.key))===null||P===void 0?void 0:P.sequence)||0}});try{const T=yield function(EA,wA){return mA(this,void 0,void 0,function*(){const{groupID:kA,mainSequence:xA,groupAttributeList:LA,avChatRoomKey:SA,richStatusMode:OA}=EA,qA={GroupId:kA,AttrMainSeq:xA,GroupAttr:LA,BytesKey:SA,AttrControl:["RaceConflict"],AllowRoomEngineOpt:OA};return wA.common.buildAndSendPacket({servcmd:"group_open_http_svc.modify_group_attr",data:qA})})}({groupID:r,avChatRoomKey:m,groupAttributeList:M,mainSequence:E,richStatusMode:u},this._core),{AttrMainSeq:P,GroupAttr:W}=T||{},oA=W.map(EA=>{const{Key:wA,seq:kA}=EA;return{key:wA,value:g[wA],sequence:kA}});return zs.saveGroupAttributesCacheValuesCopy(r),zs.refreshGroupAttributesCache({groupID:r,serverMainSequence:P,groupAttributeList:oA,operation:xv}),zs.emitGroupAttributesUpdated(r),dn({groupAttributes:g},{message:` groupID:${r} serverMainSequence:${P}`})}catch(T){throw new this._core.helper.ChatError({functionName:"setGroupAttributes",code:T?.errorCode,message:T?.errorInfo})}})}setRichStatus(s){return mA(this,void 0,void 0,function*(){const{groupID:r,richStatus:g}=s;return this.setGroupAttributes({groupID:r,groupAttributes:g,richStatusMode:!0})})}},MD=new class{constructor(){this._name="DeleteGroupAttributes"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"deleteGroupAttributes",context:this}),r.registerExperimentalAPI("deleteRichStatus",this)}deleteGroupAttributes(s){return mA(this,void 0,void 0,function*(){const r="deleteGroupAttributes",{groupID:g,keyList:u=[],richStatusMode:E}=s;try{let m;m=u.length===0?yield this._clearGroupAttributes(g,{richStatusMode:E}):yield this._deleteGroupAttributes(g,{keyList:u,richStatusMode:E});const{resultList:D,serverMainSequence:M,operation:T,groupAttributeList:P}=m||{},W=`${this._name}.${r} ok. groupID:${g} operation: ${T}`;return zs.saveGroupAttributesCacheValuesCopy(g),zs.refreshGroupAttributesCache({groupID:g,serverMainSequence:M,groupAttributeList:P,operation:T}),zs.emitGroupAttributesUpdated(g),dn({keyList:D},{message:W})}catch(m){throw new this._core.helper.ChatError({functionName:r,code:m?.errorCode,message:m?.errorInfo})}})}deleteRichStatus(s){return mA(this,void 0,void 0,function*(){return this.deleteGroupAttributes(Object.assign(Object.assign({},s),{richStatusMode:!0}))})}_deleteGroupAttributes(s,r){return mA(this,void 0,void 0,function*(){const{serverMainSequence:g,avChatRoomKey:u,values:E}=zs.getGroupAttributesCache(s),{keyList:m,richStatusMode:D}=r,M=[],T=[];m.forEach(oA=>{if(E.has(oA)){const{sequence:EA=0}=E.get(oA)||{};T.push({key:oA,seq:EA}),M.push(oA)}});const P=yield function(oA,EA){return mA(this,void 0,void 0,function*(){const{groupID:wA,mainSequence:kA,groupAttributeList:xA,avChatRoomKey:LA,richStatusMode:SA}=oA,OA={GroupId:wA,AttrMainSeq:kA,GroupAttr:xA,BytesKey:LA,AttrControl:["RaceConflict"],AllowRoomEngineOpt:SA};return EA.common.buildAndSendPacket({servcmd:"group_open_http_svc.delete_group_attr",data:OA})})}({groupID:s,avChatRoomKey:u,groupAttributeList:T,mainSequence:g,richStatusMode:D},this._core),{AttrMainSeq:W}=P||{};return{resultList:M,serverMainSequence:W,groupAttributeList:T,operation:CD}})}_clearGroupAttributes(s,r){return mA(this,void 0,void 0,function*(){const{serverMainSequence:g,avChatRoomKey:u,values:E}=zs.getGroupAttributesCache(s),{richStatusMode:m}=r||{},D=[...E.keys()],M=yield function(P,W){return mA(this,void 0,void 0,function*(){const{groupID:oA,mainSequence:EA,avChatRoomKey:wA,richStatusMode:kA}=P,xA={GroupId:oA,AttrMainSeq:EA,BytesKey:wA,AttrControl:["RaceConflict"],AllowRoomEngineOpt:kA};return W.common.buildAndSendPacket({servcmd:"group_open_http_svc.clear_group_attr",data:xA})})}({groupID:s,avChatRoomKey:u,mainSequence:g,richStatusMode:m},this._core),{AttrMainSeq:T}=M||{};return{resultList:D,serverMainSequence:T,operation:dD}})}},vD=new class{constructor(){this._name="GetGroupAttributes"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"getGroupAttributes",context:this}),r.registerExperimentalAPI("getRichStatus",this,"getGroupAttributes")}getGroupAttributes(s){return mA(this,void 0,void 0,function*(){const{groupID:r}=s,{avChatRoomKey:g,lastUpdateTime:u,localMainSequence:E,serverMainSequence:m}=zs.getGroupAttributesCache(r),{helper:{ChatError:D}}=this._core,M=`groupID:${r} localMainSequence:${E} serverMainSequence:${m} keyList:${s.keyList}`;if(Date.now()-u>=3e4||E{const{key:oA,value:EA,seq:wA}=W;return{key:oA,value:EA,sequence:wA}});return zs.refreshGroupAttributesCache({groupID:u,serverMainSequence:M,groupAttributeList:P,operation:Yv}),{serverGroupAttributeList:T}})}},PQ=new class{init(s){s.ssoLog.debug("GroupAttribute.init"),Om.init(s),PT.init(s),MD.init(s),vD.init(s),zs.init(s)}isGroupAttributesUpdated(s){return zs.isGroupAttributesUpdated(s)}handleGroupAttributesUpdated(s){const{to:r,elements:{newGroupProfile:g}}=s,{groupAttributeOption:u}=g,{serverMainSequence:E,withChangedAttributeInfo:m}=u,{localMainSequence:D}=zs.getGroupAttributesCache(r),M=E-D;if(console.log(`GroupAttribute.handleGroupAttributesUpdated groupID:${r} withChangedAttributeInfo:${m} diffSequence:${M}`),M!==0)if(zs.saveGroupAttributesCacheValuesCopy(r),m!==1||M!==1){if(zs.hasGroupAttributesCache(r)){const{avChatRoomKey:T}=zs.getGroupAttributesCache(r);vD.getGroupAttributesFromServer({groupID:r,avChatRoomKey:T}).then(()=>{zs.emitGroupAttributesUpdated(r)}).catch(()=>{})}}else zs.handleGroupAttributesUpdated({groupID:r,groupAttributeOption:u})}reset(){zs.reset()}};function JE(s,r="tips"){const{ClientSeq:g,From_Account:u,MsgClientTime:E,MsgPriority:m,MsgRandom:D,MsgSeq:M,MsgTimeStamp:T,TinyId:P,ToGroupId:W,GroupInfo:oA,MsgBody:EA}=s,wA=function(kA){const{GroupCode:xA,GroupId:LA,GroupName:SA,GroupType:OA,MsgFrom_AccountExtraInfo:qA,From_Account:Ie,To_Account:le}=kA;return{groupCode:xA,groupID:LA,groupName:SA,type:OA,messageFromAccountExtraInformation:qA,from:Ie,to:le}}(oA);return{clientSequence:g,from:u,clientTime:E,priority:m,random:D,sequence:M,time:T,tinyID:P,to:W,groupProfile:wA,elements:r==="tips"?Xu(EA):Bh(EA)}}function Xu(s){const r={};return Object.keys(s).forEach(g=>{var u,E;switch(g){case"MemberNum":r.memberCount=s[g];break;case"OpType":r.operationType=s[g];break;case"Operator_Account":r.operatorID=s[g];break;case"List_Account":r.userIDList=s[g];break;case"MsgMemberExtraInfo":r.memberInfoList=(u=s[g])===null||u===void 0?void 0:u.map(m=>RD(m));break;case"MsgOperatorMemberExtraInfo":r.operatorInfo=RD(s[g]);break;case"MsgGroupNewInfo":r.newGroupProfile=function(m){const D={};return Object.keys(m).forEach(M=>{switch(M){case"GroupIntroduction":D.introduction=m[M];break;case"GroupName":D.groupName=m[M];break;case"GroupFaceUrl":D.avatar=m[M];break;case"GroupNotification":D.notification=m[M];break;case"ApplyJoinOption":D.joinOption=m[M];break;case"InviteJoinOption":D.inviteOption=m[M];break;case"ShutupAll":D.muteAllMembers=m[M];break;case"Owner_Account":D.ownerID=m[M];break;case"GroupAttrOption":D.groupAttributeOption=function(P){const{BytesChangedKeys:W,GroupAttrSeq:oA,OpType:EA,PushChangedAttrValFlag:wA,GroupAttrInfo:kA}=P,xA=kA.map(LA=>{const{Key:SA,Val:OA,SubKeySeq:qA}=LA;return{key:SA,value:OA,sequence:qA}});return{changedKeyList:W,groupAttributeList:xA,serverMainSequence:oA,operation:EA,withChangedAttributeInfo:wA}}(m[M]);break;case"MsgAppDefinedData":D.groupCustomField=(T=m[M])==null?void 0:T.map(P=>({key:P.Key,value:P.Value}));break;case"InviteOption":D.inviteOption=LT[m[M]]||m[M]}var T}),D}(s[g]);break;case"MsgMemberInfo":r.msgMemberInfo=(E=s[g])===null||E===void 0?void 0:E.map(m=>function(D){const{ShutupTime:M,User_Account:T}=D;return{muteTime:M,userID:T}}(m));break;case"OnlineMemberInfo":r.onlineMemberInfo=function(m){const{ExpireTime:D,OnlineMemberNum:M}=m;return{expireTime:D,onlineMemberNum:M}}(s[g]);break;case"GroupCounterInfo":r.groupCounterInfo=function(m){return m.map(D=>{const{GroupCounterSeq:M,GroupCounter:T,Type:P}=D;return{type:P,groupCounterSeq:M,counterList:T}})}(s[g])}}),r}function RD(s){const{ImageUrl:r,NickName:g,Role:u,UserId:E}=s;return{avatar:r,nick:g,role:u,userID:E}}function Bh(s){const r={};return Object.keys(s).forEach(g=>{switch(g){case"MsgKey":r.messageKey=s[g];break;case"Operator_Account":r.operatorID=s[g];break;case"ReportType":r.operationType=s[g];break;case"Authentication":r.authentication=s[g];break;case"MsgFlag":r.messageRemindType=s[g];break;case"UserDefinedField":r.userDefinedField=s[g];break;case"RemarkInfo":r.remarkInfo=s[g];break;case"BanDuration":r.duration=s[g];break;case"MuteTime":r.muteTime=s[g];break;case"MsgMemberExtraInfoList":r.inviteeInfoList=(u=s[g]||[])==null?void 0:u.map(E=>{const{UserId:m,ImageUrl:D,NickName:M}=E;return{userID:m,avatar:D,nick:M}});break;case"MemberList_Account":r.inviteeList=s[g]}var u}),r}class Pm{constructor(r){this.type=Zn.core.OuterConstant.MSG_GRP_TIP,this.content={},this._initContent(r)}static parseServerPushElement(r){const g=Xu(r);return new Pm(g)}_initContent(r){Object.keys(r).forEach(g=>{switch(g){case"groupProfile":this._initGroupProfile(r[g]);break;case"operatorInfo":this._initOperatorInfo(r[g]);break;case"memberInfoList":case"msgMemberInfo":this._updateMemberList(r[g]);break;case"newGroupProfile":this._initNewGroupProfile(r[g]);break;case"memberExtraInfo":case"remarkInfo":case"onlineMemberInfo":break;default:this.content[g]=r[g]}}),this.content.userIDList||(this.content.userIDList=[this.content.operatorID])}_initGroupProfile(r){this.content.groupProfile={};const g=Object.keys(r);for(let u=0;u{r.forEach(u=>{g.userID===u.userID&&Object.assign(g,u)})}):this.content.memberList=r}_initNewGroupProfile(r){this.content.newGroupProfile={};const g=Object.keys(r);for(let u=0;u0&&this._handleGroupTipMessage(g),{conversationUpdateFieldList:u,messageList:g}}_emitGroupTipsEvent(s){var r;const{constants:{WORKFLOW_STEP:g}}=this._core,{messageList:u=[]}=((r=s?.result)===null||r===void 0?void 0:r[g.HANDLE_GROUP_TIPS_NOTIFICATION])||{};if(u.length>0){const{notificationCenter:E,OuterEvent:m}=this._core;E.emitOuterEvent(m.MESSAGE_RECEIVED,{name:m.MESSAGE_RECEIVED,data:u})}}_handleGroupTips(s,r=!0){const{Event:g,GroupTips:u}=s,E=new Map,m=[],D=[];for(let M=0,T=u.length;M{const{operationType:u}=g.payload;switch(u){case r.JOINED:this._handleNewMemberJoined(g);break;case r.QUITTED:this._handleMemberQuitted(g);break;case r.KICKED:this._handleMemberKicked(g);break;case r.GROUP_PROFILE_UPDATED:this._handleGroupProfileUpdated(g);break;case r.ADMIN_SET:this._handleMemberGrantAdmin(g);break;case r.ADMIN_CANCELED:this._handleMemberRevokeAdmin(g)}})}_handleNewMemberJoined(s){this._handleGroupMemberCountUpdated(s)}_handleMemberQuitted(s){this._handleGroupMemberCountUpdated(s)}_handleMemberKicked(s){this._handleGroupMemberCountUpdated(s)}_handleGroupProfileUpdated(s){var r;const{newGroupProfile:g,groupProfile:u,operatorInfo:E}=s.payload,{groupID:m}=u,D=Ji.getLocalGroup(m);Object.keys(g).forEach(T=>{switch(T){case"ownerID":this._handleGroupOwnerChanged(m,g);break;case"groupName":D.name=g[T];break;case"groupCustomField":Array.isArray(D[T])&&Array.isArray(g[T])?bm(D[T],g[T]):D[T]=g[T];break;default:D[T]=g[T]}});const{utils:{isUndefined:M}}=this._core;M(E)||((r=D?.selfInfo)===null||r===void 0?void 0:r.userID)!==E.userID||Object.keys(E).forEach(T=>{T==="nameCard"&&D.updateSelfInfo({nameCard:E[T]}),T==="role"&&this._updateSelfRole(D,E[T])}),Ji.emitGroupListUpdate(),Ji.updateConversationGroupProfile(m)}_handleGroupOwnerChanged(s,r){const{common:g,OuterConstant:u}=this._core,E=Ji.getLocalGroup(s),m=g.getCurrentUserID(),{ownerID:D}=r;m===D&&E.updateGroup({ownerID:D,selfInfo:{role:u.GRP_MBR_ROLE_OWNER}})}_updateSelfRole(s,r){const{OuterConstant:g}=this._core;let u=g.GRP_MBR_ROLE_MEMBER;r===MT?u=g.GRP_MBR_ROLE_OWNER:r===BD&&(u=g.GRP_MBR_ROLE_ADMIN),s.updateSelfInfo({role:u})}_handleGroupMemberCountUpdated(s){const{memberCount:r,groupProfile:{groupID:g}}=s.payload,u=Ji.getLocalGroup(g),{utils:{isNumber:E}}=this._core;u&&E(r)&&u.memberCount!==r&&(u.memberCount=r,Ji.emitGroupListUpdate(),Ji.updateConversationGroupProfile(g))}_handleGroupTipsRecover(s){const{utils:{isArray:r}}=this._core,{groupTipList:g}=s?.result||{};r(g)&&g.forEach(u=>{const{messageList:E}=this._handleGroupTips({Event:u.Event,GroupTips:[u]},!1);this._handleGroupTipMessage(E)})}_handleMemberGrantAdmin(s){const{OuterConstant:r}=this._core,{groupProfile:g,userIDList:u}=s.payload,E=this._core.common.getCurrentUserID(),{groupID:m}=g,D=Ji.getLocalGroup(m);D&&u.includes(E)&&(D.updateSelfInfo({role:r.GRP_MBR_ROLE_ADMIN}),Ji.emitGroupListUpdate(),Ji.updateConversationGroupProfile(m))}_handleMemberRevokeAdmin(s){const{OuterConstant:r}=this._core,{groupProfile:g,userIDList:u}=s.payload,E=this._core.common.getCurrentUserID(),{groupID:m}=g,D=Ji.getLocalGroup(m);D&&u.includes(E)&&(D.updateSelfInfo({role:r.GRP_MBR_ROLE_MEMBER}),Ji.emitGroupListUpdate(),Ji.updateConversationGroupProfile(m))}};class xQ{constructor(r){this.type=Zn.core.OuterConstant.MSG_GRP_SYS_NOTICE,this.content={},this._initContent(r)}static parseServerPushElement(r){const g=Bh(r);return new xQ(g)}_initContent(r){Object.keys(r).forEach(g=>{switch(g){case"remarkInfo":this.content.handleMessage=r[g];break;case"groupProfile":this._initGroupProfile(r[g]);break;case"memberInfoList":break;default:this.content[g]=r[g]}})}_initGroupProfile(r){this.content.groupProfile={};const g=Object.keys(r);for(let u=0;u0&&this._handleGroupSysTemMessage(g,E),g===!0&&E.length>0&&m.emitOuterEvent(D.MESSAGE_RECEIVED,{name:D.MESSAGE_RECEIVED,data:E})}_handleGroupSystemNotification(s,r){const g=[];let u={};for(let E=0;E0?[u]:[],messageList:g}}_assembleMessage(s){const{message:{messageFactory:r},OuterConstant:g,utils:{randomInt:u}}=this._core;s.flow="in",s.conversationType=g.CONV_SYSTEM,s.conversationSubType=s.groupProfile.type,s.conversationID=g.CONV_SYSTEM;const E=r.createMessage(s),m=new xQ(Object.assign(Object.assign({},s.elements),{groupProfile:Object.assign({},s.groupProfile)}));E.setElement(m),E.isSystemMessage=!0;const D=E.sequence===1&&E.random===1,M=E.sequence===2&&E.random===2;return(D||M)&&(E.sequence=u(),E.random=u(),E.generateMessageID()),E}_handleConversationOptions(s,r){const{OuterConstant:g}=this._core,u={conversationID:g.CONV_SYSTEM,unreadCount:0,type:g.CONV_SYSTEM,subType:s.conversationSubType,lastMessage:null};return r&&u.unreadCount++,u}_handleGroupSysTemMessage(s,r){s&&r.forEach(g=>{const{operationType:u}=g.payload;switch(u){case RT:this._handleGroupJoinResult(g);break;case Jv:this._handleMemberKicked(g);break;case wT:this._handleGroupDismissed(g);break;case _T:this._handleGroupInvitedResult(g);break;case QD:this._handleGroupQuitResult(g);break;case bQ:this._handleMessageRemindTypeSynced(g);break;case wm:this._handleAVChatRoomMemberBanned(g)}})}_handleGroupJoinResult(s){const{groupProfile:r}=s.payload,{groupID:g,type:u}=r,E=Ji.hasLocalGroup(g);this._core.ssoLog.debug("_handleGroupJoinResult",` groupID:${g} type:${u} hasLocalGroup:${E}`),E||Sd(u)||(Ji.updateLocalGroup([Object.assign({},r)]),Ji.emitGroupListUpdate())}_handleMemberKicked(s){const{groupProfile:{groupID:r,type:g}}=s.payload;Ji.hasLocalGroup(r)&&this._deleteLocalGroup(r,g),this._updateConversationProfile(r,{unreadCount:0})}_handleGroupDismissed(s){const{groupProfile:{groupID:r,type:g}}=s.payload;Ji.hasLocalGroup(r)&&this._deleteLocalGroup(r,g),this._updateConversationProfile(r,{unreadCount:0})}_handleGroupInvitedResult(s){const{groupProfile:r}=s.payload,{groupID:g}=r,u=Ji.hasLocalGroup(g);this._core.ssoLog.debug("_handleGroupInvitedResult",` groupID:${g} hasLocalGroup:${u}`),u||xl.getGroupProfile({groupID:g}).then(E=>{const{data:{group:m}}=E;Ji.updateLocalGroup([Object.assign({},m)]),Ji.emitGroupListUpdate()})}_handleGroupQuitResult(s){const{groupProfile:{groupID:r,type:g}}=s.payload,u=Ji.hasLocalGroup(r);this._core.ssoLog.debug("_handleGroupQuitResult",` groupID:${r} type:${g} hasLocalGroup:${u}`),u&&this._deleteLocalGroup(r,g),this._updateConversationProfile(r,{unreadCount:0})}_handleMessageRemindTypeSynced(s){const{groupProfile:{groupID:r},messageRemindType:g}=s.payload;this._updateConversationProfile(r,{messageRemindType:g})}_handleAVChatRoomMemberBanned(s){const{groupProfile:{groupID:r,type:g}}=s.payload;this._deleteLocalGroup(r,g)}_deleteLocalGroup(s,r){if(Sd(r)){const{appStore:{conversationStore:g},OuterConstant:{CONV_GROUP:u}}=this._core;g.deleteConversation(`${u}${s}`)}Ji.deleteLocalGroup(s),Ji.emitGroupListUpdate()}_updateConversationProfile(s,r){const{appStore:{conversationStore:g},OuterConstant:{CONV_GROUP:u}}=this._core,E=`${u}${s}`;g.getConversation(E)&&g.updateConversation(E,r)}},wD=new class{init(s){this._core=s,s.ssoLog.debug("GroupNotificationHandler.init"),$v.init(s),AR.init(s);const{notificationCenter:r,InnerEvent:g}=s,{InnerEventSubType:u}=r;r.subscribeInnerEvent(g.MESSAGE_PUSH,u.GROUP_TIPS_NOTIFICATION,this._onNewGroupTipsNotification,this),r.subscribeInnerEvent(g.MESSAGE_PUSH,u.GROUP_SYSTEM_NOTIFICATION,this._onNewGroupSystemNotification,this),r.subscribeInnerEvent(g.DESTROY,this._dispose,this)}_onNewGroupTipsNotification(s){const{common:{workflowManager:r},constants:{WORKFLOW_NAME:g}}=this._core;r.executeWorkflow(g.RECEIVE_GROUP_TIPS_NOTIFICATION,s)}_onNewGroupSystemNotification(s){AR.onNewGroupSystemNotification(s)}_dispose(){const{notificationCenter:s,InnerEvent:r}=this._core,{InnerEventSubType:g}=s;s.unSubscribeInnerEvent(r.MESSAGE_PUSH,g.GROUP_TIPS_NOTIFICATION,this._onNewGroupTipsNotification,this),s.unSubscribeInnerEvent(r.MESSAGE_PUSH,g.GROUP_SYSTEM_NOTIFICATION,this._onNewGroupSystemNotification,this)}};const vn={required:!0,rules:["string"],allowEmpty:!1},YQ={required:!0,rules:["number"],allowEmpty:!1},wd={required:!0,rules:["array"],allowEmpty:!1},_D={required:!0,rules:["object"],allowEmpty:!1},xT={createGroup:{name:vn,type:vn},dismissGroup:[Object.assign({key:"groupID"},vn)],joinGroup:{groupID:vn,applyMessage:{required:!1,rules:["string"],allowEmpty:!0}},quitGroup:[Object.assign({key:"groupID"},vn)],searchGroupByID:[Object.assign({key:"groupID"},vn)],getGroupProfile:{groupID:vn,groupCustomFieldFilter:{required:!1,rules:["array"],allowEmpty:!0}},updateGroupProfile:{groupID:vn,muteAllMembers:{required:!1,rules:["boolean"],allowEmpty:!1}},changeGroupOwner:{groupID:vn,newOwnerID:vn},getGroupOnlineMemberCount:[Object.assign({key:"groupID"},vn)],handleGroupApplication:{handleAction:vn},getGroupMemberList:{groupID:vn},getGroupMemberProfile:{groupID:vn,userIDList:wd,memberCustomFieldFilter:{required:!1,rules:["array"],allowEmpty:!0}},addGroupMember:{groupID:vn,userIDList:wd},deleteGroupMember:{groupID:vn,userIDList:wd},setGroupMemberMuteTime:{groupID:vn,userID:vn,muteTime:Object.assign(Object.assign({},YQ),{customValidator:s=>!(s<0)||"muteTime must be a non-negative number."})},setGroupMemberRole:{groupID:vn,userID:vn,role:vn},setGroupMemberNameCard:{groupID:vn,userID:{required:!1,rules:["string"],allowEmpty:!1},nameCard:vn},setGroupMemberCustomField:{groupID:vn,userID:{required:!1,rules:["string"],allowEmpty:!1},memberCustomField:wd},markGroupMemberList:{groupID:vn,markType:Object.assign(Object.assign({},YQ),{customValidator:s=>!(s<1e3)||"markType must be greater than or equal to 1000."}),enableMark:{required:!0,rules:["boolean"],allowEmpty:!1},userIDList:wd},initGroupAttributes:{groupID:vn,groupAttributes:_D},setGroupAttributes:{groupID:vn,groupAttributes:_D},deleteGroupAttributes:{groupID:vn,keyList:Object.assign(Object.assign({},wd),{allowEmpty:!0})},getGroupAttributes:{groupID:vn,keyList:Object.assign(Object.assign({},wd),{allowEmpty:!0})},getGroupCounters:{groupID:vn,keyList:{required:!1,rules:["array"],allowEmpty:!0}},setGroupCounters:{groupID:vn,counters:_D},increaseGroupCounter:{groupID:vn,key:vn,value:YQ},decreaseGroupCounter:{groupID:vn,key:vn,value:YQ}},YT={getGroupList:!0,createGroup:!0,dismissGroup:!0,joinGroup:!0,quitGroup:!0,searchGroupByID:!0,getGroupProfile:!0,updateGroupProfile:!0,changeGroupOwner:!0,getGroupOnlineMemberCount:!0,getGroupApplicationList:!0,handleGroupApplication:!0,getGroupMemberList:!0,getGroupMemberProfile:!0,addGroupMember:!0,deleteGroupMember:!0,setGroupMemberMuteTime:!0,setGroupMemberRole:!0,setGroupMemberNameCard:!0,setGroupMemberCustomField:!0,markGroupMemberList:!0,initGroupAttributes:!0,setGroupAttributes:!0,getGroupAttributes:!0,deleteGroupAttributes:!0,getGroupCounters:!0,setGroupCounters:!0,increaseGroupCounter:!0,decreaseGroupCounter:!0};var VT=new class{constructor(){this._installedSubPlugins=[],this.groupDataHandler=Ji,this.groupAction=UQ,this.groupAttribute=PQ,this.groupMember=Xv,this.groupCounter=dB,this.name="Group"}install(s,r=[]){this._core=s,Zn.init(s),Ji.init(s),UQ.init(s,this),Xv.init(s,this),yD.init(s),dB.init(s),PQ.init(s),wD.init(s),s.helper.registerValidateConfig({auth:YT,params:xT}),this._installSubPlugins(r);const{notificationCenter:g,InnerEvent:u}=s;g.subscribeInnerEvent(u.LOGOUT,this._reset,this),g.subscribeInnerEvent(u.DESTROY,this._dispose,this)}getInstalledSubPlugins(){return this._installedSubPlugins}_installSubPlugins(s){const{utils:{isArray:r}}=this._core;s&&r(s)&&s.forEach(g=>{var u;this._installedSubPlugins.includes(g.name)||((u=g.install)===null||u===void 0||u.call(g,this._core,this),this._installedSubPlugins.push(g.name))})}_reset(){Ji.reset(),PQ.reset(),dB.reset()}_dispose(){this._reset();const{notificationCenter:s,InnerEvent:r}=this._core;s.unSubscribeInnerEvent(r.LOGOUT,this._reset,this),s.unSubscribeInnerEvent(r.DESTROY,this._dispose,this)}};const CB=new class{init(s){this.core=s}},eR="AV_MBR_LIST",JT="AV_BAN_MBR",HE={NORMAL_MESSAGE:3,GROUP_TIPS_HAS_ROAMING:4,GROUP_SYSTEM_MESSAGE:5,GROUP_TIPS_HAS_NO_ROAMING:6,BROADCAST_MESSAGE:17,MESSAGE_REVOKED:20,MESSAGE_REACTION:21,LIVE_CUSTOM_DATA:100},Qh={GROUP_DISMISSED:5,QUIT_GROUP:8,AVCHATROOM_MEMBER_BANNED:21},TD=60,ND=2603,HT=2686,qT=2688,VQ=3122;class tR{constructor(r){const{core:g,manager:u,groupID:E,getRequestParams:m,onSuccess:D,onFail:M}=r;this._name="Polling",this._core=g,this._manager=u,this._timeoutID=-1,this._isRunning=!1,this._groupID=E,this._getRequestParams=m,this._onSuccess=D,this._onFail=M}start(){this._isRunning=!0,this._request(),console.log(`${this._name}.start pollingInterval:${this._manager.getCurrentPollingInterval(this._groupID)}`)}isRunning(){return this._isRunning}_request(){return mA(this,void 0,void 0,function*(){try{const r=this._getRequestParams(this._groupID),g=yield function(E,m){return mA(this,void 0,void 0,function*(){const{longPollingKey:D,startSequence:M,startBroadcastSeq:T,simplifiedMessage:P}=E,W={Key:D,StartSeq:M,StartBroadcastSeq:T,DownsizeFlag:P,USP:1,HoldTime:90};return m.common.buildAndSendPacket({servcmd:"group_open_long_polling_http_svc.get_msg",data:W})})}(r,this._core);this._onSuccess(this._groupID,g);const u=this._manager.getCurrentPollingInterval(this._groupID);this._runNextPolling(u)}catch(r){this._onFail(this._groupID,r),this._runNextPolling(2e3)}})}_runNextPolling(r){this.isRunning()&&(this._timeoutID>-1&&clearTimeout(this._timeoutID),this._timeoutID=setTimeout(this._request.bind(this),r))}stop(){console.log(`${this._name}.stop timerID:${this._timeoutID}`),this._timeoutID>-1&&(clearTimeout(this._timeoutID),this._timeoutID=-1),this._isRunning=!1}}class ph{constructor(r){this._maxLength=r,this._map=new Map}set(r){var g;if(this._map.size>=this._maxLength){const u=((g=this._map.entries().next().value)===null||g===void 0?void 0:g[0])||"";this._map.delete(u)}this._map.set(r,1)}has(r){return this._map.has(r)}delete(r){this.has(r)&&this._map.delete(r)}clear(){this._map.clear()}}const $u=s=>s===HE.GROUP_TIPS_HAS_NO_ROAMING||s===HE.GROUP_TIPS_HAS_ROAMING,JQ=s=>s===HE.GROUP_SYSTEM_MESSAGE;function xm(s){const r=function(g){const{E:u,MCT:E,MR:m,MP:D,MTS:M,GId:T,MS:P,CCD:W,F_Account:oA,IsSys:EA,GInf:wA,MsgBody:kA}=g,xA=So(g,["E","MCT","MR","MP","MTS","GId","MS","CCD","F_Account","IsSys","GInf","MsgBody"]);return Object.assign({Event:u,MsgClientTime:E,MsgRandom:m,MsgPriority:D,MsgTimeStamp:M,ToGroupId:T,MsgSeq:P,CloudCustomData:W,From_Account:oA,IsSystemMsg:EA,GroupInfo:GD(wA),MsgBody:KT(kA)},xA)}(s);return function(g){const{Event:u}=g;($u(u)||JQ(u))&&(g.From_Account=g.From_Account||"@TIM#SYSTEM"),E=u,(E===HE.BROADCAST_MESSAGE||(m=>m===HE.NORMAL_MESSAGE)(u))&&function(m){const{core:{OuterConstant:D}}=CB;m.CloudCustomData=m.CloudCustomData||"",m.MsgBody=m.MsgBody.map(M=>{if(M.MsgType===D.MSG_CUSTOM){const{content:T={}}=M;M.content=Object.assign({Data:"",Desc:"",Ext:""},T)}return M})}(g);var E;$u(u)&&function(m){const{GroupJoinType:D,MsgOperatorMemberExtraInfo:M={},MsgMemberExtraInfo:T,Operator_Account:P,List_Account:W,OpType:oA}=m.MsgBody||{};typeof D=="number"||oA!==1&&oA!==2||(m.MsgBody.GroupJoinType=oA===2?0:1),T||(m.MsgBody.MsgMemberExtraInfo=W?.map(EA=>({UserId:EA}))),oA!==1||T||(m.MsgBody.MsgMemberExtraInfo=[{UserId:M.UserId}]),m.MsgBody.MsgOperatorMemberExtraInfo=Object.assign({Operator_Account:P,ImageUrl:"",NickName:""},M)}(g),JQ(u)&&function(m){const{MsgOperatorMemberExtraInfo:D={},Operator_Account:M}=m.MsgBody||{};m.MsgBody.MsgMemberExtraInfo=Object.assign({UserId:M,ImageUrl:"",NickName:""},D),m.MsgBody=Object.assign({Authentication:"",RemarkInfo:"",MsgKey:1e3*m.MsgTimeStamp},m.MsgBody),m.MsgBody=Object.keys(m.MsgBody).filter(T=>T!=="MsgOperatorMemberExtraInfo").reduce((T,P)=>Object.assign(Object.assign({},T),{[P]:m.MsgBody[P]}),{})}(g)}(r),r}function GD(s){const r=s||{},{GN:g,GT:u,F_Hd:E,F_NN:m,F_Ll:D}=r,M=So(r,["GN","GT","F_Hd","F_NN","F_Ll"]),T=Object.assign({GroupName:g,GroupType:u},M);return E&&(T.From_AccountHeadurl=E),m&&(T.From_AccountNick=m),D&&(T.From_AccountLevel=D),T}function KT(s){let r=s;Array.isArray(s)||(r=[s]);const g=r.map(u=>{const{O_Account:E,Opt:m,L_Account:D,RT:M,UDF:T,OpInf:P,OnlineInf:W,MsgMemberExtraInfo:oA}=u,EA=So(u,["O_Account","Opt","L_Account","RT","UDF","OpInf","OnlineInf","MsgMemberExtraInfo"]),wA=Object.assign({Operator_Account:E,OpType:m,List_Account:D,ReportType:M,UserDefinedField:T},EA);return P&&(wA.MsgOperatorMemberExtraInfo=function(kA){const{Img:xA,NN:LA}=kA,SA=So(kA,["Img","NN"]);return Object.assign({ImageUrl:xA,NickName:LA},SA)}(P)),oA&&(wA.MsgMemberExtraInfo=function(kA){return kA?.map(xA=>{const{Img:LA,NN:SA}=xA,OA=So(xA,["Img","NN"]);return Object.assign({ImageUrl:LA,NickName:SA},OA)})}(oA)),W&&(wA.OnlineMemberInfo=function(kA){const{ET:xA,Num:LA}=kA;return{ExpireTime:xA,OnlineMemberNum:LA}}(W)),wA});return Array.isArray(s)?g:g[0]}var mh=new class{constructor(){this._name="MessageParser",this._sequenceList=new ph(200),this._messageIDList=new ph(100),this._broadcastMessageIDMap=new Map,this._reportMessageStackedCount=0}init(s,r){this._core=s,this._avChatRoomHandler=r}onMessageReceived(s,r,g=!1){this._sortServerMessageList({groupID:s,serverMessageList:r,isHistoryMessage:g});const u=this._handleMessageList(s,r);if(u.length===0)return;if(!g){const{appStore:{conversationStore:T},OuterConstant:{CONV_GROUP:P},common:{buildLastMessage:W}}=this._core,oA=W(u[u.length-1]);T.updateConversation(`${P}${s}`,{lastMessage:oA})}this._checkMessageStacked(u);const E=u.filter(T=>T.isModified===!0),m=u.filter(T=>T.isModified===!1),{OuterEvent:{MESSAGE_RECEIVED:D,MESSAGE_MODIFIED:M}}=this._core;E.length>0&&this._emitEvent({name:M,data:E}),m.length>0&&this._emitEvent({name:D,data:m})}_sortServerMessageList(s){const{groupID:r,serverMessageList:g,isHistoryMessage:u}=s;let E=[];this._avChatRoomHandler.isPollingSimplifiedMessage()&&!u?(g.sort((m,D)=>m.MS-D.MS),E=g.map(m=>m.MS)):(g.sort((m,D)=>m.MsgSeq-D.MsgSeq),E=g.map(m=>m.MsgSeq)),console.log(`${this._name}._sortServerMessageList groupID:${r} count:${E.length} sequenceList:${E}`),E.length=0}_handleMessageList(s,r){var g;const{message:{messageDataHandler:u,messageHelper:E}}=this._core,m=this._avChatRoomHandler.isPollingSimplifiedMessage(),D=[],M=r.length;for(let T=0;Tg===HE.MESSAGE_REVOKED)(r)?(this._handleMessageRevoked(s),null):(g=>g===HE.LIVE_CUSTOM_DATA)(r)?(this._onLiveCustomData(s),null):(g=>g===HE.MESSAGE_REACTION)(r)?null:s:(console.warn(`${this._name}.onMessageReceived unknown event:${r}`),null)}_createMessage(s){const{message:{messageFactory:r},OuterConstant:g}=this._core;let u=g.CONV_GROUP;s.elements.type===g.MSG_GRP_SYS_NOTICE&&(u=g.CONV_SYSTEM);const E=!!s.isSystemMessage,m=r.createMessage(Object.assign(Object.assign({},s),{conversationType:u,isSystemMessage:E,flow:"in"}));return m.setElement(s.elements),m}_filterDuplicateMessage(s){const{common:r}=this._core;if(!r.isUnlimitedAVChatRoom()){if(this._sequenceList.has(s.sequence))return null;this._sequenceList.set(s.sequence)}const g=this._messageIDList.has(s.ID);return g?(console.warn(`${this._name}_filterDuplicateMessageItem ID:${s.ID} has:${g}`),null):(this._messageIDList.set(s.ID),s)}_handleMessageRevoked(s){const{OuterConstant:r,OuterEvent:{MESSAGE_REVOKED:g}}=this._core,{ToGroupId:u,MsgBody:{RevokeMsgList:E},RevokerInfo:{Revoker_Account:m,Reason:D=""}}=s,M=[];E.forEach(T=>{const{TinyId:P,MsgClientTime:W,Random:oA,MsgSeq:EA}=T,wA={conversationID:`${r.CONV_GROUP}${u}`,ID:`${P}-${W}-${oA}`,revoker:m,revokeReason:D,revokerInfo:{userID:m,nick:"",avatar:""},sequence:EA};M.push(wA)}),M.length!==0&&this._emitEvent({name:g,data:M})}_onLiveCustomData(s){const{OuterEvent:{ROOM_CUSTOM_DATA_RECEIVED:r}}=this._core,{ToGroupId:g,MsgSeq:u,MsgTimeStamp:E,MsgBody:m}=s,D=m?.Content||m?.MsgContent||"";this._emitEvent({name:r,data:D}),console.log(`${this._name}._onLiveCustomData groupID:${g} sequence:${u} time:${E} data:${D}`)}_onGroupDismissed(s){this._avChatRoomHandler.reset(s)}_checkMessageStacked(s){const{length:r}=s;if(r>=100&&this._reportMessageStackedCount<5){const g=this._avChatRoomHandler.getJoinedGroups();this._core.ssoLog.info("MessageStacked",`count:${r} groupID:${g.join(",")}`),this._reportMessageStackedCount+=1}}_emitEvent(s){this._core.notificationCenter.emitOuterEvent(s.name,s)}onBroadcastMessageReceived(s){const{message:{messageHelper:r},OuterEvent:{MESSAGE_RECEIVED:g}}=this._core,u=this._avChatRoomHandler.isPollingSimplifiedMessage(),E=[],m=s.length;for(let D=0;D0&&this._emitEvent({name:g,data:E})}_updateLocalOnlineMemberCountFromTips(s){const{utils:{isEmpty:r}}=this._core,{ToGroupId:g,MsgBody:{OnlineMemberInfo:u}}=s;if(r(u))return;const{OnlineMemberNum:E=0,ExpireTime:m=TD}=u,D=Date.now();let M=this._avChatRoomHandler.getLocalOnlineMemberCount(g);r(M)?M={lastReqTime:0,lastSyncTime:0,latestUpdateTime:D,memberCount:E,expireTime:m}:(M.latestUpdateTime=D,M.memberCount=E),this._avChatRoomHandler.updateLocalOnlineMemberCount(g,M)}reset(){this._reportMessageStackedCount=0,this._sequenceList.clear(),this._messageIDList.clear(),this._broadcastMessageIDMap.clear()}};const hB=s=>{const{core:{store:r}}=CB;return(r.get("cloudConfig")||{})[s]},fh=s=>{const{core:{utils:{isUndefined:r}}}=CB;return!r(s)},HQ=()=>{const s=hB("polling_interval");return fh(s)?parseInt(s,10):300},BB=()=>{const s=hB("polling_simplified_msg");return fh(s)?parseInt(s,10):0};var iR=new class{constructor(){this._name="GetAVChatRoomOnlineMemberCount"}init(s,r){this._core=s,this._parentPlugin=r;const{helper:g}=s;g.registerApi({apiName:"getGroupOnlineMemberCount",context:this,matcher:()=>r.getInstalledSubPlugins().length>0})}getGroupOnlineMemberCount(s){return mA(this,void 0,void 0,function*(){const{appStore:{groupStore:r},OuterConstant:g}=this._core,u=r.getGroup(s);return u?u.type===g.GRP_AVCHATROOM?this._getOnlineMemberCount(s):this._parentPlugin.groupAction.getGroupOnlineMemberCount(s):{code:0,data:{memberCount:0}}})}_getOnlineMemberCount(s){return mA(this,void 0,void 0,function*(){const r="_getOnlineMemberCount",{utils:{isEmpty:g}}=this._core,u=Pg.getLocalOnlineMemberCount(s);if(g(u)||this._isExpired(s)){const{memberCount:E=0}=yield this._getOnlineMemberCountFromServer(s);return console.log(`${this._name}.${r} ok, groupID:${s} memberCount:${E} from server.`),{code:0,data:{memberCount:E}}}return console.log(`${this._name}.${r} ok, groupID:${s} memberCount:${u.memberCount} from local.`),{code:0,data:{memberCount:u.memberCount}}})}_isExpired(s){const r=Pg.getLocalOnlineMemberCount(s),g=Date.now(),u=g-r.lastSyncTime>1e3*r.expireTime,E=g-r.latestUpdateTime>1e4,m=g-r.lastReqTime>3e3;return u&&E&&m}_getOnlineMemberCountFromServer(s){return mA(this,void 0,void 0,function*(){const r="_getOnlineMemberCountFromServer";try{const g=yield function(M,T){return mA(this,void 0,void 0,function*(){const P={GroupId:M};return T.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_online_member_num",data:P})})}(s,this._core),{OnlineMemberNum:u=0,ExpireTime:E=TD}=g||{},m=Date.now(),D={lastSyncTime:m,latestUpdateTime:m,lastReqTime:m,memberCount:u,expireTime:E};return Pg.updateLocalOnlineMemberCount(s,D),{memberCount:u}}catch(g){const u=new this._core.helper.ChatError({functionName:r,code:g?.errorCode,message:g?.errorInfo});throw console.error(`${this._name}.${r} fail:`,u),u}})}},Pg=new class{constructor(){this._name="AVChatRoomHandler",this._joinedGroupMap=new Map,this._pollingRequestInfoMap=new Map,this._pollingInstanceMap=new Map,this._onlineMemberCountMap=new Map,this._pollingIntervalMap=new Map,this._pollingNoMessageCountMap=new Map,this._membersReqInfoMap=new Map,this._startBroadcastSequence=1}init(s,r){this._core=s,this._parentPlugin=r,mh.init(s,this),s.ssoLog.debug("AVChatRoomHandler.init")}onAVChatRoomSystemNotification(s){const{OuterConstant:{GRP_AVCHATROOM:r}}=this._core,{GroupTips:g=[]}=s;for(let u=0;u0&&(r=[...this._joinedGroupMap.values()].filter(g=>g.type===s)),r}handleJoinGroupResult(s){return mA(this,void 0,void 0,function*(){const{utils:{isUndefined:r},OuterConstant:{CONV_GROUP:g},apiMap:{getConversationProfile:u},OuterConstant:E}=this._core,{longPollingKey:m,group:D,historyMessageList:M=[]}=s,{groupID:T}=D;return yield this._preCheck(D),this._joinedGroupMap.set(T,D),this._parentPlugin.groupDataHandler.updateLocalGroup([D]),this._parentPlugin.groupDataHandler.emitGroupListUpdate(),u(`${g}${T}`),iR.getGroupOnlineMemberCount(T),M.length>0&&mh.onMessageReceived(T,M,!0),r(m)?{code:0,data:{status:E.JOIN_STATUS_SUCCESS,group:D}}:{code:0,data:this.startMessageLongPolling(s)}})}isGroupCounterUpdated(s){return this._parentPlugin.groupCounter.isGroupCounterUpdated(s)}handleGroupCounterUpdated(s){this._parentPlugin.groupCounter.handleGroupCounterUpdated(s)}_preCheck(s){return mA(this,void 0,void 0,function*(){const{common:r,OuterConstant:g,helper:u,apiMap:{quitGroup:E},ssoLog:m}=this._core;if(r.isUnlimitedAVChatRoom()){if(this._pollingInstanceMap.size>(()=>{const T=hB("polling_count_limit");return fh(T)&&T>0?parseInt(T,10):20})())throw new u.ChatError({code:qT,message:"the count of longPolling exceeds the max limit"});return}if(this._joinedAVChatRoomCount()===0||s.type===g.GRP_LIVE)return;const[D,M]=this._joinedGroupMap.entries().next().value;if(M.selfInfo.role===g.GRP_MBR_ROLE_OWNER)this._parentPlugin.groupDataHandler.deleteLocalGroup(D);else try{yield E(D)}catch(T){m.debug("quitGroup",`${this._name}._preCheck quitGroup failed, groupID:${D} info:`,T)}this.reset(D)})}startMessageLongPolling(s){const{OuterConstant:r}=this._core,{longPollingKey:g,startSequence:u=1,group:E}=s,{groupID:m}=E;return this._pollingRequestInfoMap.set(m,{longPollingKey:g,startSequence:u}),this._pollingIntervalMap.set(m,HQ()),this._startPolling(m),this._reportLongPollingCount(),{status:r.JOIN_STATUS_SUCCESS,group:E}}_startPolling(s){if(this._core.ssoLog.debug("_startPolling",`${this._name}._startPolling groupID:${s}`),this._pollingInstanceMap.has(s)){const g=this._pollingInstanceMap.get(s);return void(g?.isRunning()||g==null||g.start())}const r=new tR({core:this._core,manager:this,groupID:s,getRequestParams:this._handleRequestParams.bind(this),onSuccess:this._handleSuccess.bind(this),onFail:this._handleFailure.bind(this)});r.start(),this._pollingInstanceMap.set(s,r)}_handleRequestParams(s){const{longPollingKey:r,startSequence:g}=this._pollingRequestInfoMap.get(s)||{};return s===[...this._pollingInstanceMap.keys()][0]?{longPollingKey:r,startSequence:g,startBroadcastSeq:this._startBroadcastSequence,simplifiedMessage:BB()}:{longPollingKey:r,startSequence:g,simplifiedMessage:BB()}}_handleSuccess(s,r){const{ErrorCode:g}=r;if(g!==0){const{longPollingKey:u,startSequence:E}=this._pollingRequestInfoMap.get(s)||{};return void console.warn(`${this._name}._handleSuccess groupID:${s} key:${u} startSeq:${E} errorCode:${g}`)}this._hasJoinedAVChatRoom(s)&&this._handleResponseData(s,r)}_handleResponseData(s,r){const{Key:g,NextSeq:u,NextBroadcastSeq:E,RspMsgList:m=[],RspBroadcastMsgList:D=[]}=r;if(g&&u&&this._pollingRequestInfoMap.set(s,{longPollingKey:g,startSequence:u}),E&&E>this._startBroadcastSequence&&(this._startBroadcastSequence=E),m.length>0)this._getPollingNoMessageCount(s)!==0&&(this._updatePollingNoMessageCount(s,0),this._pollingIntervalMap.set(s,HQ())),mh.onMessageReceived(s,m);else{let M=this._getPollingNoMessageCount(s);if(M+=1,this._updatePollingNoMessageCount(s,M),M===(()=>{const T=hB("polling_no_msg_count");return fh(T)?parseInt(T,10):20})()){const T=HQ()+(()=>{const P=hB("polling_interval_plus");return fh(P)?parseInt(P,10):2e3})();this._pollingIntervalMap.set(s,T)}}D.length>0&&mh.onBroadcastMessageReceived(D)}_handleFailure(s,r){const{ssoLog:g,utils:{safeStringify:u}}=this._core;g.warn("polling",`${this._name}._handleFailure groupID:${s} error: ${u(r)}`)}_joinedAVChatRoomCount(){const{OuterConstant:s}=this._core;let r=[];return this._joinedGroupMap.size>0&&(r=this.getJoinedGroups().filter(g=>g.type===s.GRP_AVCHATROOM)),r.length}_hasJoinedAVChatRoom(s){return this._joinedGroupMap.has(s)}getJoinedGroups(){return[...this._joinedGroupMap.values()]}updateLocalLiveGroup(s,r){this._joinedGroupMap.set(s,r),this._parentPlugin.groupDataHandler.updateLocalGroup([r])}handleLiveHistoryMessages(s,r){mh.onMessageReceived(s,r,!0)}isOverFrequencyLimit(s){if(!this._membersReqInfoMap.has(s))return this._membersReqInfoMap.set(s,{startTime:Date.now(),requestCount:1}),!1;let{startTime:r,requestCount:g}=this._membersReqInfoMap.get(s);const{interval:u,count:E}=(()=>{const m=hB("av_members_freq_limit");if(fh(m)){const{interval:D,count:M}=JSON.parse(m);if(M>0&&D>0)return{interval:D,count:M}}return{interval:30,count:4}})();return Date.now()-r>1e3*u?(this._membersReqInfoMap.set(s,{startTime:Date.now(),requestCount:1}),!1):(g+=1,this._membersReqInfoMap.set(s,{startTime:r,requestCount:g}),g>E)}_stopPolling(s){if(this._core.ssoLog.debug("_stopPolling",`${this._name}._stopPolling groupID:${s}`),s){const{appStore:{conversationStore:r},OuterConstant:{CONV_GROUP:g}}=this._core;r.deleteConversation(`${g}${s}`);const u=this._pollingInstanceMap.get(s);return u?.stop(),this._parentPlugin.groupDataHandler.deleteLocalGroup(s),this._pollingInstanceMap.delete(s),this._pollingRequestInfoMap.delete(s),this._joinedGroupMap.delete(s),this._onlineMemberCountMap.delete(s),this._pollingIntervalMap.delete(s),this._pollingNoMessageCountMap.delete(s),void this._membersReqInfoMap.delete(s)}for(const r of this._pollingInstanceMap.values())r?.stop();this._pollingInstanceMap.clear(),this._pollingRequestInfoMap.clear(),this._joinedGroupMap.clear(),this._onlineMemberCountMap.clear(),this._pollingIntervalMap.clear(),this._pollingNoMessageCountMap.clear(),this._membersReqInfoMap.clear()}_updatePollingNoMessageCount(s,r){this._pollingNoMessageCountMap.set(s,r)}_getPollingNoMessageCount(s){return this._pollingNoMessageCountMap.get(s)||0}_reportLongPollingCount(){const s=this._joinedGroupMap.size;if(s>1){const{common:r,OuterConstant:g,ssoLog:u}=this._core,E=r.isUnlimitedAVChatRoom()?1:0,m=[],D=[];Array.from(this._joinedGroupMap.values()).forEach(({groupID:M,type:T})=>{T===g.GRP_LIVE?D.push(M):m.push(M)}),u.info("longPollingCount",String(s),{moreMessage:`av:${m.join(",")} live:${D.join(",")} code: ${E}`,eventType:29})}}reset(s){this._stopPolling(s),this._startBroadcastSequence=1,mh.reset()}},oR=new class{init(s,r){this._core=s,this._parentPlugin=r;const{helper:g}=s;g.registerApi({apiName:"joinGroup",context:this,matcher:()=>r.getInstalledSubPlugins().length>0})}joinGroup(s){return mA(this,void 0,void 0,function*(){const{OuterConstant:r}=this._core,g=yield this._parentPlugin.groupAction.joinGroup(s),{data:{status:u,group:{type:E}}}=g;return E===r.GRP_AVCHATROOM?u===r.JOIN_STATUS_ALREADY_IN_GROUP?g:Pg.handleJoinGroupResult(g.data):g})}},jT=new class{init(s,r){this._core=s,this._parentPlugin=r;const{helper:g}=s;g.registerApi({apiName:"quitGroup",context:this,matcher:()=>r.getInstalledSubPlugins().length>0})}quitGroup(s){return mA(this,void 0,void 0,function*(){const{OuterConstant:r}=this._core,g=yield this._parentPlugin.groupAction.quitGroup(s),{data:{type:u}}=g;return u===r.GRP_AVCHATROOM&&Pg.reset(s),g})}},sR=new class{init(s,r){this._core=s,this._parentPlugin=r;const{helper:g}=s;g.registerApi({apiName:"dismissGroup",context:this,matcher:()=>r.getInstalledSubPlugins().length>0})}dismissGroup(s){return mA(this,void 0,void 0,function*(){const{OuterConstant:r}=this._core,g=yield this._parentPlugin.groupAction.dismissGroup(s),{data:{type:u}}=g;return u===r.GRP_AVCHATROOM&&Pg.reset(s),g})}},Ym=new class{constructor(){this._name="GetAVChatRoomMemberList"}init(s,r){this._core=s,this._parentPlugin=r;const{helper:g}=s;g.registerApi({apiName:"getGroupMemberList",context:this,matcher:()=>r.getInstalledSubPlugins().length>0})}getGroupMemberList(s){return mA(this,void 0,void 0,function*(){const{appStore:{groupStore:r},helper:g,OuterConstant:u}=this._core,{groupID:E}=s,m=r.getGroup(E);if(m?.type===u.GRP_AVCHATROOM&&g.checkBusinessCapabilityBits(eR)){if(Pg.isOverFrequencyLimit(E))throw{code:2996,message:`Over frequency limit: get_members-${E}`};return this._getGroupMemberList(s)}return this._parentPlugin.groupMember.getGroupMemberList(s)})}_getGroupMemberList(s){return mA(this,void 0,void 0,function*(){const r="_getGroupMemberList",{helper:g}=this._core;try{const u=yield function(M,T){return mA(this,void 0,void 0,function*(){const{groupID:P,offset:W=0}=M,oA={GroupId:P,Timestamp:W};return T.common.buildAndSendPacket({servcmd:"group_open_avchatroom_http_svc.get_members",data:oA})})}(s,this._core),{MemberList:E=[],NextTimestamp:m=0}=u||{},D=this._handleMemberList(E);return console.log(`${this._name}.${r} ok, groupID:${s.groupID} count:${D.length} nextOffset:${m}`),{code:0,data:{memberList:D,offset:m}}}catch(u){const E=new g.ChatError({functionName:r,code:u?.errorCode,message:u?.errorInfo});throw console.error(`${this._name}.${r} fail:`,E),E}})}_handleMemberList(s){return s.map(r=>{const{Member_Account:g,NickName:u="",Avatar:E="",Remark:m="",JoinTime:D=0,Marks:M=[]}=r;return{userID:g,nick:u,avatar:E,remark:m,joinTime:D,marks:M,isOnline:!0}})}},Vm=new class{constructor(){this._name="DeleteAVChatRoomMember"}init(s,r){this._core=s,this._parentPlugin=r;const{helper:g}=s;g.registerApi({apiName:"deleteGroupMember",context:this,matcher:()=>r.getInstalledSubPlugins().length>0})}deleteGroupMember(s){return mA(this,void 0,void 0,function*(){const r="deleteGroupMember",{appStore:{groupStore:g},utils:{isUndefined:u},helper:E,OuterConstant:m}=this._core,{groupID:D}=s,M=g.getGroup(D);if(u(M))throw new E.ChatError({functionName:r,code:ND});if(M.type===m.GRP_AVCHATROOM){if(E.checkBusinessCapabilityBits(JT))return this._deleteGroupMember(s);throw new E.ChatError({functionName:r,code:VQ})}return this._parentPlugin.groupMember.deleteGroupMember(s)})}_deleteGroupMember(s){return mA(this,void 0,void 0,function*(){const r="_deleteGroupMember",{appStore:{groupStore:g},helper:u,ssoLog:E}=this._core,{groupID:m,duration:D=0,userIDList:M}=s;if(D===0)throw new u.ChatError({functionName:r,code:HT});try{return yield function(T,P){return mA(this,void 0,void 0,function*(){const{groupID:W,userIDList:oA,duration:EA,reason:wA}=T,kA={GroupId:W,Members_Account:oA,Duration:EA,Description:wA};return P.common.buildAndSendPacket({servcmd:"group_open_http_svc.ban_group_member",data:kA})})}(s,this._core),E.debug(r,`${this._name}.${r} ok, groupID:${m}`),{code:0,data:{group:g.getGroup(m),userIDList:M}}}catch(T){throw new u.ChatError({functionName:r,code:T?.errorCode,message:T?.errorInfo})}})}},_d=new class{constructor(){this._name="MarkAVChatRoomMember"}init(s){this._core=s;const{helper:r}=s;r.registerApi({apiName:"markGroupMemberList",context:this})}markGroupMemberList(s){return mA(this,void 0,void 0,function*(){const r="markGroupMemberList",{groupID:g,markType:u,enableMark:E,userIDList:m=[]}=s,D=this._generateRequestData(s);try{const M=yield function(oA,EA){return mA(this,void 0,void 0,function*(){const{groupID:wA,operationType:kA,memberList:xA}=oA,LA={GroupId:wA,CommandType:kA,MemberList:xA};return EA.common.buildAndSendPacket({servcmd:"group_open_avchatroom_http_svc.modify_user_info",data:LA})})}(D,this._core),{MemberList:T=[]}=M||{},{successUserIDList:P,failureUserIDList:W}=this._handleResult(T,m);return{code:0,data:{successUserIDList:P,failureUserIDList:W},successLog:{message:`${this._name}.${r} ok, groupID:${g} markType:${u} enableMark:${E} success:${P.length} fail:${W.length}`}}}catch(M){throw new this._core.helper.ChatError({functionName:r,code:M?.errorCode,message:M?.errorInfo})}})}_generateRequestData(s){const{groupID:r,markType:g,enableMark:u,userIDList:E=[]}=s,m=u===!0?1:2,D=[...E];return D.length>500&&console.warn(`${this._name}._generateRequestData, the length of userIDList cannot exceed 500`),{groupID:r,operationType:m,memberList:D.map(M=>({Member_Account:M,Marks:[g]}))}}_handleResult(s,r){const g=[],u=[];return s.length===r.length?(g.push(...r),{successUserIDList:g,failureUserIDList:u}):(r.forEach(E=>{s.find(m=>m.Member_Account===E)?g.push(E):u.push(E)}),{successUserIDList:g,failureUserIDList:u})}},nR=new class{init(s,r){s.ssoLog.debug("AVChatRoomAction.init"),oR.init(s,r),jT.init(s,r),sR.init(s,r),Ym.init(s,r),iR.init(s,r),Vm.init(s,r),_d.init(s)}},rR=new class{constructor(){this._name="LiveHandler"}init(s){this._core=s;const{helper:r,ssoLog:g}=s;r.registerExperimentalAPI("startMessageLongPolling",this),r.registerExperimentalAPI("stopMessageLongPolling",this),g.debug("LiveHandler.init")}startMessageLongPolling(s){const{common:r,utils:{isEmpty:g},OuterConstant:u,ssoLog:E}=this._core,{groupID:m,longPollingKey:D,longPollingSequence:M=1}=s;if(g(D))return E.warn("startMessageLongPolling",`${this._name}.startMessageLongPolling longPollingKey is empty.`),Promise.resolve({});Pg.hasPollingInstance(m)&&this.stopMessageLongPolling({groupID:m});const T=Pg.getJoinedLiveList(),P=r.isUnlimitedAVChatRoom();!P&&T.length>0&&this.stopMessageLongPolling({groupID:T[0].groupID}),E.debug("startMessageLongPolling",`${this._name}.startMessageLongPolling isUnlimited:${P} groupID:${m} longPollingKey:${D} longPollingSequence:${M}`);const W={groupID:m,type:u.GRP_LIVE};return Pg.updateLocalLiveGroup(m,W),this._getLiveHistoryMessages({groupID:m,longPollingKey:D,startSequence:M}),Pg.startMessageLongPolling({group:W,longPollingKey:D,startSequence:M})}stopMessageLongPolling(s){const{groupID:r}=s;return Pg.reset(r),this._core.ssoLog.debug("stopMessageLongPolling",`${this._name}.stopMessageLongPolling ok, groupID:${r}`),Promise.resolve({groupID:r})}_getLiveHistoryMessages(s){return mA(this,void 0,void 0,function*(){const{ssoLog:r}=this._core,{groupID:g}=s;try{const u=yield function(m,D){return mA(this,void 0,void 0,function*(){const{groupID:M,longPollingKey:T,startSequence:P}=m,W={GroupId:M,LongPollingKey:T,PullPreSeq:P};return D.common.buildAndSendPacket({servcmd:"group_open_http_svc.get_huge_group_msg",data:W})})}(s,this._core),{RspMsgList:E=[]}=u||{};r.debug("_getLiveHistoryMessages",`${this._name}._getLiveHistoryMessages ok, groupID:${g} count:${E.length}`),E.length>0&&Pg.handleLiveHistoryMessages(g,E)}catch(u){r.debug("_getLiveHistoryMessages",`${this._name}._getLiveHistoryMessages failed, groupID:${g} info:${u.message}`)}})}},Jm=new class{constructor(){this.name="AVChatRoom"}install(s,r){this._core=s,CB.init(s),Pg.init(s,r),nR.init(s,r),rR.init(s);const{notificationCenter:g,InnerEvent:u}=s,{InnerEventSubType:E}=g;g.subscribeInnerEvent(u.MESSAGE_PUSH,E.GROUP_SYSTEM_NOTIFICATION,this._onAVChatRoomSystemNotification,this),g.subscribeInnerEvent(u.LOGOUT,this._reset,this),g.subscribeInnerEvent(u.DESTROY,this._dispose,this)}_onAVChatRoomSystemNotification(s){Pg.onAVChatRoomSystemNotification(s)}_reset(){Pg.reset()}_dispose(){this._reset();const{notificationCenter:s,InnerEvent:r}=this._core,{InnerEventSubType:g}=s;s.unSubscribeInnerEvent(r.MESSAGE_PUSH,g.GROUP_SYSTEM_NOTIFICATION,this._onAVChatRoomSystemNotification,this),s.unSubscribeInnerEvent(r.LOGOUT,this._reset,this),s.unSubscribeInnerEvent(r.DESTROY,this._dispose,this)}};const Ag=new class{init(s){this.core=s}},Hm="message",QB="user",pB={OR:"or",AND:"and"},RI=20,WT=20,aR=20,yh={required:!1,rules:["array"],allowEmpty:!0,customValidator:s=>!s||!!(Array.isArray(s)&&s.length<=5)||"keywordList should be an array and length <= 5"},qm={required:!1,rules:["string"],allowEmpty:!0,customValidator:s=>!s||!![pB.OR,pB.AND].includes(s)||"keywordListMatchType should be OR or AND"},RC={required:!1,rules:["number"],allowEmpty:!0,customValidator:s=>typeof s=="number"&&s>=1&&s<=100||"count must be a number between 1 and 100"},qQ={required:!1,rules:["string"],allowEmpty:!0},gR={required:!1,rules:["array"],allowEmpty:!0,customValidator:s=>{const{OuterConstant:r}=Ag.core;if(!Array.isArray(s))return"groupTypeList should be an array";const g=[r.GRP_PUBLIC,r.GRP_COMMUNITY,r.GRP_WORK,r.GRP_MEETING];let u=!1;for(let E=0;E{const{OuterConstant:r}=Ag.core,g=[r.MSG_TEXT,r.MSG_IMAGE,r.MSG_AUDIO,r.MSG_FILE,r.MSG_VIDEO,r.MSG_LOCATION,r.MSG_CUSTOM,r.MSG_MERGER];let u=!1;for(let E=0;E{const{OuterConstant:r}=Ag.core;return!(!s?.startsWith(r.CONV_C2C)&&!s?.startsWith(r.CONV_GROUP)&&s!==r.CONV_SYSTEM)||"conversationID is invalid"}},Km=s=>({required:!1,rules:["number"],allowEmpty:!0,customValidator:r=>typeof r=="number"&&r>=0||`${s} should be a number >= 0';`}),bD={required:!1,rules:["string"],allowEmpty:!0,customValidator:s=>{const{OuterConstant:r}=Ag.core;return!![r.GENDER_FEMALE,r.GENDER_MALE].includes(s)||"gender is invalid"}},jm={searchCloudMessages:{keywordList:yh,keywordListMatchType:qm,cursor:qQ,senderUserIDList:{required:!1,rules:["array"],allowEmpty:!0,customValidator:s=>!!(Array.isArray(s)&&s.length<=5)||"senderUserIDList should be an array and length <= 5"},messageTypeList:cR,conversationID:lR,timePosition:Km("timePosition"),timePeriod:Km("timePeriod")},searchCloudUsers:{keywordList:yh,keywordListMatchType:qm,cursor:qQ,count:RC,miniBirthday:Km("miniBirthday"),maxBirthday:Km("maxBirthday"),gender:bD},searchCloudGroupMembers:{keywordList:yh,keywordListMatchType:qm,cursor:qQ,count:RC,groupTypeList:gR,groupIDList:{required:!1,rules:["array"],allowEmpty:!0}},searchCloudGroups:{keywordList:yh,keywordListMatchType:qm,cursor:qQ,count:RC,groupTypeList:gR}},kD={searchCloudMessages:!0,searchCloudUsers:!0,searchCloudGroupMembers:!0,searchCloudGroups:!0};var LD=new class{constructor(){this.name="CloudSearch"}install(s){this._core=s,Ag.init(s),s.helper.registerApi({apiName:"searchCloudMessages",context:this}),s.helper.registerApi({apiName:"searchCloudUsers",context:this}),s.helper.registerApi({apiName:"searchCloudGroupMembers",context:this}),s.helper.registerApi({apiName:"searchCloudGroups",context:this}),s.helper.registerValidateConfig({auth:kD,params:jm})}searchCloudMessages(s){return mA(this,void 0,void 0,function*(){try{const{OuterConstant:r,helper:g}=this._core,{conversationID:u,timePeriod:E,timePosition:m}=s,D=So(s,["conversationID","timePeriod","timePosition"]),M=Object.assign({count:100},D);u&&(u.startsWith(r.CONV_C2C)?M.account=u.replace(r.CONV_C2C,""):u.startsWith(r.CONV_GROUP)&&(M.groupID=u.replace(r.CONV_GROUP,""))),this._setTimeRangeParams(M,{timePeriod:E,timePosition:m});const T=yield function(LA){return mA(this,void 0,void 0,function*(){const{count:SA,keywordList:OA,keywordListMatchType:qA,senderUserIDList:Ie,messageTypeList:le,endTime:bi,startTime:ki,cursor:Ot,account:Li,groupID:cs}=LA,Re={Count:SA,KeywordList:OA,MatchType:qA,SendUserIDList:Ie,MsgTypeList:le,EndTime:bi,StartTime:ki,Cursor:Ot,PeerAccount:Li,GroupID:cs};return Ag.core.common.buildAndSendPacket({servcmd:"message_search.query",data:Re})})}(M);if(!T)return{code:0,data:{}};const{ErrorCode:P,ErrorInfo:W,TotalCount:oA,Cursor:EA="",ConversationMsgs:wA=[]}=T;if(P!==0)throw{errorCode:P,errorInfo:W};const kA=`keywordList:${s.keywordList} keywordListMatchType:${s.keywordListMatchType} cursor:${s.cursor} res: totalCount:${oA}`;return{code:0,data:{searchResultList:wA.map(LA=>{const{MsgList:SA,Count:OA,GroupID:qA,UserID:Ie}=LA,le=qA?`${r.CONV_GROUP}${qA}`:`${r.CONV_C2C}${Ie}`;if(this._isSearchingAllConversations(s)&&OA>1)return{conversationID:le,messageCount:OA,messageList:[]};const bi=SA.map(ki=>g.isEmpty(qA)?function(Ot,Li){const cs=Li.OuterConstant.CONV_C2C,Re=Li.message.messageHelper.parseServerPushMessage(Ot),St=Li.message.messageFactory.createMessage(Object.assign(Object.assign({},Re),{conversationType:cs,flow:"in"}));return St.setElement(Re.elements),St}(ki,this._core):function(Ot,Li){const cs=Li.OuterConstant.CONV_GROUP,Re=Li.message.messageHelper.parseServerGroupMessage(Ot),St=Li.message.messageFactory.createMessage(Object.assign(Object.assign({},Re),{conversationType:cs,flow:"in"}));return St.setElement(Re.elements),St}(ki,this._core));return{conversationID:le,messageCount:OA,messageList:bi}}),cursor:EA,totalCount:oA},successLog:{message:kA}}}catch(r){const{errorCode:g,errorInfo:u}=r||{};this._handleError({errorCode:g,errorInfo:u,searchType:Hm,functionName:"searchCloudMessages"})}})}searchCloudUsers(s){return mA(this,void 0,void 0,function*(){var r;try{const{keywordListMatchType:g,count:u=WT}=s,E=So(s,["keywordListMatchType","count"]),m=Object.assign({count:u,keywordListMatchType:g===pB.AND?1:0},E);this._setBirthdayRangeParams(m,s);const D=yield function(kA){return mA(this,void 0,void 0,function*(){const{count:xA,keywordList:LA,keywordListMatchType:SA,miniBirthday:OA,maxBirthday:qA,cursor:Ie,gender:le}=kA,bi={Count:xA,Keywords:LA,KeywordMatchType:SA,Cursor:Ie,UserBirthStart:OA,UserBirthEnd:qA,Gender:le};return Ag.core.common.buildAndSendPacket({servcmd:"user_search.query",data:bi})})}(m);if(!D)return{error:0,data:{}};const{ErrorCode:M,ErrorInfo:T,TotalCount:P,Cursor:W="",Users:oA=[]}=D;if(M!==0)throw{errorCode:M,errorInfo:T};const EA=`keywordList:${s.keywordList} keywordListMatchType:${s.keywordListMatchType} cursor:${s.cursor} count:${s.count} res: totalCount:${P}`,wA=[];for(let kA=0,xA=oA.length;kA({tag:Ie.Tag,value:Ie.StrValue})),qA=(r=this._core.user.userProfile)===null||r===void 0?void 0:r.createProfile(LA,OA);wA.push(qA)}return{code:0,data:{searchResultList:wA,cursor:W,totalCount:P},successLog:{message:EA}}}catch(g){const{errorCode:u,errorInfo:E}=g||{};this._handleError({errorCode:u,errorInfo:E,searchType:QB,functionName:"searchCloudUsers"})}})}searchCloudGroupMembers(s){return mA(this,void 0,void 0,function*(){try{const{count:r=aR,keywordListMatchType:g}=s,u=So(s,["count","keywordListMatchType"]),E=Object.assign({count:r,keywordListMatchType:g===pB.AND?1:0},u),m=yield function(wA){return mA(this,void 0,void 0,function*(){const{count:kA,keywordList:xA,keywordListMatchType:LA,groupTypeList:SA,cursor:OA,groupIDList:qA}=wA,Ie={Count:kA,Keywords:xA,KeywordMatchType:LA,Cursor:OA,GroupType:SA,GroupIdList:qA};return Ag.core.common.buildAndSendPacket({servcmd:"group_member_search.query",data:Ie})})}(E);if(!m)return{code:0,data:{}};const{ErrorCode:D,ErrorInfo:M,GroupMembers:T=[],Cursor:P,TotalCount:W}=m;if(D!==0)throw{errorCode:D,errorInfo:M};const oA=`keywordList:${s.keywordList} keywordListMatchType:${s.keywordListMatchType} cursor:${s.cursor} count:${s.count} res: totalCount:${W}`,EA=new Map;return T.forEach(wA=>{const{GroupID:kA,GroupName:xA,GroupType:LA,GroupFaceUrl:SA,GroupMemberUserName:OA,GroupMemberUserID:qA,GroupMemberNameCard:Ie,GroupMemberAvatar:le=""}=wA,bi={groupID:kA,name:xA,type:LA,avatar:SA},ki={userID:qA,nick:OA,nameCard:Ie,avatar:le};if(EA.has(kA)){const Ot=EA.get(kA);Ot.memberList.push(ki),EA.set(kA,Ot)}else EA.set(kA,{groupInfo:bi,memberList:[ki]})}),{code:0,data:{searchResultList:[...EA.values()],cursor:P,totalCount:W},successLog:{message:oA}}}catch(r){const{errorCode:g,errorInfo:u}=r||{};this._handleError({errorCode:g,errorInfo:u,searchType:QB,functionName:"searchCloudGroupMembers"})}})}searchCloudGroups(s){return mA(this,void 0,void 0,function*(){try{const{count:r=RI,keywordListMatchType:g}=s,u=So(s,["count","keywordListMatchType"]),E=Object.assign({count:r,keywordListMatchType:g===pB.AND?1:0},u),m=yield function(EA){return mA(this,void 0,void 0,function*(){const{count:wA,keywordList:kA,keywordListMatchType:xA,groupTypeList:LA,cursor:SA}=EA,OA={Count:wA,Keywords:kA,KeywordMatchType:xA,Cursor:SA,GroupType:LA};return Ag.core.common.buildAndSendPacket({servcmd:"group_search.query",data:OA})})}(E);if(!m)return{code:0,data:{}};const{ErrorCode:D,ErrorInfo:M,Groups:T,Cursor:P,TotalCount:W}=m;if(D!==0)throw{errorCode:D,errorInfo:M};const oA=`keywordList:${s.keywordList} keywordListMatchType:${s.keywordListMatchType} cursor:${s.cursor} count:${s.count} res: totalCount:${W}`;return{code:0,data:{searchResultList:T?.map(EA=>function(wA){const{GroupFaceUrl:kA,GroupID:xA,GroupIntroduction:LA,GroupMemberNum:SA,GroupName:OA,GroupOwnerTinyID:qA,GroupOwnerUserID:Ie,GroupOwnerUserName:le,GroupType:bi,GroupAddOption:ki,GroupInviteOption:Ot}=wA;return{avatar:kA,groupID:xA,introduction:LA,memberCount:SA,name:OA,ownerTinyID:qA,ownerID:Ie,ownerNick:le,type:bi,joinOption:ki,inviteOption:Ot}}(EA))||[],cursor:P,totalCount:W},successLog:{message:oA}}}catch(r){const{errorCode:g,errorInfo:u}=r||{};this._handleError({errorCode:g,errorInfo:u,searchType:QB,functionName:"searchCloudGroups"})}})}_setTimeRangeParams(s,{timePeriod:r,timePosition:g}){r&&r>0&&(s.startTime=g&&g>0?g-r:this._core.helper.timeManager.getServerTimeSeconds()-r),s.startTime&&s.startTime<0&&(s.startTime=void 0),g&&g>0&&(s.endTime=g)}_handleError({errorCode:s,errorMessage:r,searchType:g}){const{helper:u}=this._core;let E=s;throw s===60020?E="SearchUnable":g!==Hm&&s===27003?E="SearchParamsError":g!==Hm&&s===60018&&(E="SearchOverLimit"),new u.ChatError({code:E,message:r})}_isSearchingAllConversations(s){return this._core.helper.isEmpty(s.conversationID)}_setBirthdayRangeParams(s,r){const{miniBirthday:g,maxBirthday:u}=r;g!==void 0&&(s.miniBirthday=g,u===void 0&&(s.maxBirthday=4294967295)),u!==void 0&&(s.maxBirthday=u)}};function Dh(s,r){return Math.round(Number(s)*Math.pow(10,r))/Math.pow(10,r)}const IR="qualityStat",UD="im-ssolog-quality-stat";var FD;(function(s){s[s.ONLINE=8]="ONLINE"})(FD||(FD={}));const Wm="networkRTT",Sh="messageE2EDelay",mB="sendMessageC2C",Mh="sendMessageGroup",vh="sendMessageGroupAV",fB="sendMessageRichMedia",yB="cosUpload",wC="messageReceivedGroup",KQ="messageReceivedGroupAVPush",jQ="messageReceivedGroupAVPull",zT={[Wm]:2,[Sh]:3,[mB]:4,[Mh]:5,[vh]:6,[fB]:7,[wC]:8,[KQ]:9,[jQ]:10,[yB]:11},uR=[mB,Mh,vh,fB,yB],Rh=[wC,KQ,jQ],DB=[Wm,Sh,mB,Mh,vh,fB,yB,wC,KQ,jQ],OD={ERR_SVR_COMM_SENSITIVE_TEXT:80001,ERR_SVR_COMM_BODY_SIZE_LIMIT:80002,OPEN_SERVICE_OVERLOAD_ERROR:60022,ERR_SVR_MSG_PKG_PARSE_FAILED:20001,ERR_SVR_MSG_INTERNAL_AUTH_FAILED:20002,ERR_SVR_MSG_INVALID_ID:20003,ERR_SVR_MSG_PUSH_DENY:20006,ERR_SVR_MSG_IN_PEER_BLACKLIST:20007,ERR_SVR_MSG_BOTH_NOT_FRIEND:20009,ERR_SVR_MSG_NOT_PEER_FRIEND:20010,ERR_SVR_MSG_NOT_SELF_FRIEND:20011,ERR_SVR_MSG_SHUTUP_DENY:20012,ERR_SVR_GROUP_INVALID_PARAMETERS:10004,ERR_SVR_GROUP_PERMISSION_DENY:10007,ERR_SVR_GROUP_NOT_FOUND:10010,ERR_SVR_GROUP_INVALID_GROUPID:10015,ERR_SVR_GROUP_REJECT_FROM_THIRDPARTY:10016,ERR_SVR_GROUP_SHUTUP_DENY:10017,MSG_SEND_FAIL:2100,OVER_FREQUENCY_LIMIT:2996},zm="quality_stat";var WQ=new class{constructor(){this._messageStatsMap=new Map,this._userSideErrorCodes=new Set(Object.values(OD))}init(s){this._core=s,Object.values(uR).forEach(r=>{this._messageStatsMap.set(r,{totalCount:0,successCount:0,failedCountOfUserSide:0,costSum:0,costCount:0,fileSizeSum:0})})}dispatchSendStats(s){const{name:r,message:g,error:u,startTs:E}=s,{SEND_MESSAGE_STAT:m}=this._core.constants;switch(r){case m.TOTAL_COUNT:this._handleTotalCount(g);break;case m.SUCCESS_COUNT:this._handleSuccessCount(g);break;case m.FAILED_COUNT:this._handleFailedCount(g,u);break;case m.SEND_COST:this._handleSendCost(g,E)}}getStatResult(s){const r=this._messageStatsMap.get(s);if(!r||r.totalCount===0)return null;const{totalCount:g,successCount:u,failedCountOfUserSide:E}=r,m=Dh(u/g*100,2),D=u+E,M=Dh(D/g*100,2),T=this._calcAverageValue(r,s);return this._resetStat(s),{total_count:g,success_count_business:u,percent_business:m,success_count_platform:D,percent_platform:M,average_value:T}}_handleTotalCount(s){const r=this._getSendMessageSpecifiedKey(s),g=r&&this._messageStatsMap.get(r);g&&g.totalCount++}_handleSuccessCount(s){const r=this._getSendMessageSpecifiedKey(s),g=r&&this._messageStatsMap.get(r);g&&g.successCount++}_handleFailedCount(s,r){var g;const u=(g=r?.code)!==null&&g!==void 0?g:r?.errorCode;if(this._isUserSideError(u)){const E=this._getSendMessageSpecifiedKey(s),m=E&&this._messageStatsMap.get(E);m&&m.failedCountOfUserSide++}}_handleSendCost(s,r){const g=this._getSendMessageSpecifiedKey(s),u=g&&this._messageStatsMap.get(g);u&&(u.costSum+=Date.now()-r,u.costCount++)}_isUserSideError(s){return this._userSideErrorCodes.has(s)||s>=120001&&s<=13e4||s>=10100&&s<=10200}_getSendMessageSpecifiedKey(s){const{MSG_IMAGE:r,MSG_AUDIO:g,MSG_VIDEO:u,MSG_FILE:E,CONV_C2C:m,CONV_GROUP:D,GRP_AVCHATROOM:M}=this._core.OuterConstant;if([r,g,u,E].includes(s.type))return fB;if(s.conversationType===m)return mB;if(s.conversationType===D){const{groupStore:T}=this._core.appStore,P=T.getGroup(s.to);if(!P)return;const{type:W}=P;return W===M?vh:Mh}}_calcAverageValue(s,r){return s.costCount===0?0:Math.round(r===yB?1e3*s.fileSizeSum/s.costSum:s.costSum/s.costCount)}_resetStat(s){const r=this._messageStatsMap.get(s);r&&(r.totalCount=0,r.successCount=0,r.failedCountOfUserSide=0,r.costSum=0,r.costCount=0,r.fileSizeSum=0)}},zQ=new class{constructor(){this._lastCycleStats=new Map,this._currentCycleStats=new Map}init(s){this._core=s;const{OuterEvent:r,notificationCenter:g}=s;this._initStatsMap(),g.subscribeOuterEvent(r.MESSAGE_RECEIVED,this._onMessageReceived,this)}addMessageSequence(s){const r=this._getReceivedMessageSpecifiedKey(s),{utils:{isUndefined:g},OuterConstant:{CONV_GROUP:u},ssoLog:E}=this._core;if(g(r)||!this._currentCycleStats.has(r))return void E.debug("addMessageSequence",`${IR}.addMessageSequence invalid key:${r}`);const{conversationID:m,sequence:D}=s,M=m.replace(u,""),T=this._lastCycleStats.get(r);if(T.size===0||!T.has(M))return void this._addToCurrentCycle(r,M,D);const P=T.get(M);D>P.minSeq&&D{const{sortedSequences:m,minSeq:D,maxSeq:M}=E;m.length>0&&(u+=m.length,g+=M-D+1)}),g===0?null:(this._transferCycleDataOptimized(s),{total_count:g,success_count_business:u,percent_business:Dh(u/g*100,2)})}reset(){this._lastCycleStats.clear(),this._currentCycleStats.clear()}dispose(){const{notificationCenter:s,OuterEvent:{MESSAGE_RECEIVED:r}}=this._core;s.unSubscribeOuterEvent(r,this._onMessageReceived,this),this.reset()}_initStatsMap(){Object.values(Rh).forEach(s=>{this._lastCycleStats.set(s,new Map),this._currentCycleStats.set(s,new Map)})}_onMessageReceived(s){const{data:r=[]}=s;r.forEach(g=>{this.addMessageSequence(g)})}_transferCycleDataOptimized(s){const r=this._currentCycleStats.get(s);if(!r)return;const g=new Map;r.forEach((u,E)=>{const m=u.dirty?[...u.sortedSequences].sort((D,M)=>D-M):u.sortedSequences;g.set(E,{sortedSequences:m,minSeq:u.minSeq,maxSeq:u.maxSeq,dirty:!1})}),this._lastCycleStats.set(s,g),this._currentCycleStats.set(s,new Map)}_getReceivedMessageSpecifiedKey(s){const{OuterConstant:{CONV_GROUP:r,GRP_AVCHATROOM:g}}=this._core;if(s.conversationType===r&&s?._onlineOnlyFlag!==!0){const{groupStore:u}=this._core.appStore,E=u.getGroup(s.to);if(!E)return null;const{type:m}=E;return m===g?jQ:wC}}_insertToLastCycle(s,r){r.dirty&&(r.sortedSequences.sort((u,E)=>u-E),r.dirty=!1);const g=this._findInsertPos(r.sortedSequences,s);r.sortedSequences.splice(g,0,s),r.minSeq=Math.min(r.minSeq,s),r.maxSeq=Math.max(r.maxSeq,s)}_findInsertPos(s,r){let g=0,u=s.length-1;for(;g<=u;){const E=Math.floor((g+u)/2);if(s[E]===r)return E;s[E]0&&(this._totalDelay+=g,this._totalCount++,g<=1?this._countLessThan1s++:g<=3&&this._countLessThan3s++)}getStatResult(){if(this._totalCount===0)return null;const s={total_count:this._totalCount,success_count_business:this._countLessThan1s,success_count_platform:this._countLessThan3s,percent_business:this._calculatePercentage(this._countLessThan1s,this._totalCount),percent_platform:this._calculatePercentage(this._countLessThan3s,this._totalCount),average_value:this._calculateAverageDelay(this._totalCount)};return this.reset(),s}reset(){this._totalDelay=0,this._totalCount=0,this._countLessThan1s=0,this._countLessThan3s=0}dispose(){const{notificationCenter:s,OuterEvent:{MESSAGE_RECEIVED:r}}=this._core;s.unSubscribeOuterEvent(r,this._onMessageReceived,this),this.reset()}_onMessageReceived(s){const{data:r=[]}=s,{OuterConstant:{MSG_GRP_TIP:g,MSG_GRP_SYS_NOTICE:u}}=this._core,E=[g,u];r.forEach(m=>{!E.includes(m.type)&&m.clientTime>0&&this.addMessageDelay(m.clientTime)})}_calculateAverageDelay(s){return s===0?0:Dh(this._totalDelay/s,1)}_calculatePercentage(s,r){return Dh(s/r*100,2)}},ER=new class{init(s){this.core=s}},ZT=new class{constructor(){this.name="MessageQualityStat",this._reportIndex=0,this._wholePeriod=!1,this._pendingReports=[],this._failedLogsCache=new Map}install(s){this._core=s;const{helper:r,notificationCenter:g,InnerEvent:{QUALITY_STAT:u,LOGOUT:E,DESTROY:m},constants:{WORKFLOW_NAME:D,WORKFLOW_STEP:M}}=s;ER.init(s),WQ.init(s),zQ.init(s),ZQ.init(s),r.registerWorkflowStep(D.SYNC_SERVER_INFO_AFTER_LOGIN,M.QUALITY_REPORT,this.handleLoginSuccess,this),g.subscribeInnerEvent(u,this._handleQualityStat,this),g.subscribeInnerEvent(E,this._reset,this),g.subscribeInnerEvent(m,this._dispose,this)}handleLoginSuccess(){const{store:s,helper:r,utils:{isUndefined:g}}=this._core,u=s.get("cloudConfig")||{},{q_rpt_interval:E}=u,m=g(E)?12e4:Number(E);r.taskScheduler.addTask({id:zm,intervalMs:m,callback:this.report,context:this})}report(){this._wholePeriod=!0;const s=[...DB.map(r=>{const g=this._buildQualityReportItem(r);return g?Object.assign(Object.assign({},g),{report_index:this._reportIndex,whole_period:this._wholePeriod}):null}).filter(Boolean),...this._pendingReports];this._pendingReports=[],this._needSkipReport()||this._uploadQualityReports(s)}_handleQualityStat(s){const{constants:{QUALITY_METRICS:r}}=this._core,{label:g,data:u}=s;g===r.MESSAGE_SEND_SUCCESS_RATE&&WQ.dispatchSendStats(u)}_needSkipReport(){return this._isSDKAppIDInBlacklist()&&!this._isTinyIDInWhitelist()}_isSDKAppIDInBlacklist(){const{store:s,utils:r}=this._core,g=s.get("cloudConfig")||{},u=s.get("instance")||{},{sdkAppId:E}=u,{q_rpt_sdkappid_bl:m=[]}=g;if(!r.isEmpty(m))return m.split(",").map(D=>Number(D)).includes(E)}_isTinyIDInWhitelist(){const{store:s,utils:r}=this._core,g=s.get("cloudConfig")||{},u=s.get("login")||{},E=Number(u.tinyID),{q_rpt_tinyid_wl:m=[]}=g;if(!r.isEmpty(m))return m.split(",").includes(E)}_buildQualityReportItem(s){const r=this._getStatResultByKey(s);if(r===null)return null;const g={quality_type:zT[s],timestamp:Date.now(),network_type:FD.ONLINE,extension:""};return Object.assign(Object.assign({},g),r)}_getStatResultByKey(s){switch(s){case Sh:return ZQ.getStatResult();case mB:case Mh:case vh:case fB:case yB:return WQ.getStatResult(s);case wC:case KQ:case jQ:return zQ.getStatResult(s);default:return null}}_uploadQualityReports(s){return mA(this,void 0,void 0,function*(){try{const r={header:this._core.common.getCommonHead(),quality:s};yield function(g){const{common:u,channel:E}=ER.core,m="imopenstat.tim_web_report_v2",D=u.generateSSOLogProtocolData({servcmd:m,data:g}),M=`${D.head.seq}${m}`;return E.sendPacket(D,{requestId:M})}(r),this._reportIndex++,this._wholePeriod=!1}catch(r){console.warn("doReport failed. error:",r),this._pendingReports=this._pendingReports.concat(s),this._cacheFailedLogs()}})}_cacheFailedLogs(){const s=this._pendingReports,r=`${IR}._cacheFailedLogs`;let g=[...this._failedLogsCache.get(UD)||[],...s];g.length>10&&(g=g.slice(g.length-10),console.log(`${r} logs overflow, keeping last 10 items`)),this._failedLogsCache.set(UD,g),console.log(`${r} count: ${g.length}`),this._pendingReports=[]}_reset(){const{helper:s}=this._core;s.taskScheduler.removeTask(zm)}_dispose(){const{notificationCenter:s,InnerEvent:{QUALITY_STAT:r,LOGOUT:g,DESTROY:u}}=this._core;s.unSubscribeInnerEvent(r,this._handleQualityStat,this),s.unSubscribeInnerEvent(g,this._reset,this),s.unSubscribeInnerEvent(u,this._dispose,this),this._reset(),ZQ.dispose(),zQ.dispose()}};const ll=new class{init(s){this.core=s}};function dR(s){return mA(this,void 0,void 0,function*(){var r;const{message:g,user:u,appStore:E,constants:{OuterConstant:m}}=ll.core,D=E.conversationStore.getConversationMap();if(D.has(s)){const T=(r=D.get(s))===null||r===void 0?void 0:r.userProfile;if(T&&s.startsWith(m.CONV_C2C)){const{avatar:P,nick:W}=T;ll.core.message.messageDataHandler.updateNickAndAvatarOfSentMessage({conversationID:s,latestAvatar:P,latestNick:W,isSentByMe:!1})}}const{data:M}=(yield u.userProfile.getMyProfile())||{};if(M){const{avatar:T,nick:P}=M;g.messageDataHandler.updateNickAndAvatarOfSentMessage({conversationID:s,latestAvatar:T,latestNick:P,isSentByMe:!0})}})}function CR(s){return mA(this,void 0,void 0,function*(){const r=s.map(g=>g.revoker);try{const g=yield function(u){return mA(this,void 0,void 0,function*(){var E,m;const D=yield(E=ll.core.user.userProfile)===null||E===void 0?void 0:E.getUserProfile({userIDList:u});return D?.data?(m=D.data)===null||m===void 0?void 0:m.reduce((M,{userID:T,nick:P,avatar:W})=>(M[T]={nick:P||"",avatar:W||""},M),{}):null})}(r);g&&s.forEach(u=>{const{revoker:E}=u;g[E]&&(u.revokerInfo.nick=g[E].nick||"",u.revokerInfo.avatar=g[E].avatar||"",u.revokerInfo.userID=E)})}catch(g){console.debug(g)}})}const PD=1,hR=2,wh=20,XQ=2500,BR=1,_h=300;function $Q(s){return mA(this,void 0,void 0,function*(){var r,g;const{appStore:u,utils:{isEmpty:E},common:{getCurrentUserID:m},notificationCenter:D,OuterEvent:M,OuterConstant:{CONV_C2C:T}}=ll.core,{messageList:P,conversationID:W}=s,oA=u.conversationStore.getConversationMap();let EA=(r=oA.get(W))===null||r===void 0?void 0:r.peerReadTime;if(!EA){const kA=W.replace(T,""),xA=yield function(LA){return mA(this,void 0,void 0,function*(){const SA={To_Account:LA};return ll.core.common.buildAndSendPacket({servcmd:"openim.get_peer_read_time",data:SA})})}([kA]);if(xA){const{ReadTime:LA}=xA;EA=LA?.[0],oA.has(W)&&(oA.get(W).peerReadTime=EA)}}if(oA.has(W)){const kA=(g=oA.get(W))===null||g===void 0?void 0:g.lastMessage;E(kA)||kA.fromAccount===m()&&kA.lastTime<=EA&&!kA.isPeerRead&&(kA.isPeerRead=!0,u.conversationStore.updateConversation(W,{lastMessage:kA}))}const wA=[];P.forEach(kA=>{kA.time<=EA&&!kA.isPeerRead&&kA.flow==="out"&&(kA.isPeerRead=!0,wA.push(kA))}),wA.length>0&&D.emitOuterEvent(M.MESSAGE_READ_BY_PEER,{name:M.MESSAGE_READ_BY_PEER,data:wA})})}var QR=new class{init(s){this._core=s,s.helper.registerApi({apiName:"getMessageList",context:this}),s.helper.registerApi({apiName:"getMessageListHopping",context:this}),s.helper.registerApi({apiName:"clearHistoryMessage",context:this})}getMessageList(s){return mA(this,void 0,void 0,function*(){try{const{message:r,OuterConstant:{Direction:g,CONV_C2C:u,CONV_GROUP:E},InnerEvent:{HISTORY_MESSAGE_FETCHED:m},notificationCenter:D}=this._core,{conversationID:M,nextReqMessageID:T}=s,P=wh;if(M==="@TIM#SYSTEM")return{code:0,data:{messageList:[],isCompleted:!1,nextMessageSeq:""}};const W=this._getAvailableLocalMessagesCount({conversationID:M,nextReqMessageID:T});if(this._needFetchHistoryMessageList({conversationID:M,availableLocalMessagesCount:W,targetCount:P})){let oA=null;if(M.startsWith(E)?oA=yield r.messageHistory.getGroupRoamingMessagesByAnchor({conversationID:M,sequence:Number(T),count:P,direction:g.FORWARD,shouldMarkCompleted:!0}):M.startsWith(u)&&(oA=yield r.messageHistory.getC2CRoamingMessagesByAnchor({conversationID:M,messageID:T,count:P,direction:g.FORWARD,shouldMarkCompleted:!0})),oA){const{nextReqMessageIDFromServer:EA,hasNoMoreHistoryMessage:wA,messageList:kA}=oA,xA=r.messageDataHandler.prependLocalMessageList({messageList:kA,conversationID:M});(function(Ie){const{appStore:le,message:bi,OuterConstant:ki}=ll.core,Ot=le.conversationStore.getConversation(Ie),Li=bi.messageDataHandler.getLocalMessageList(Ie);if(!Ot||Li.length===0||Ie===ki.CONV_SYSTEM)return;const cs=[];for(let St=0;StUA.isRevoked).length;Re=cs.length-Ot.unreadCount-St}else Re=cs.length-Ot.unreadCount;for(let St=0;StIe.isRevoked);yield CR(SA),D.emitInnerEvent(m,xA);const OA={nextReqMessageID:wA?"":String(EA),messageList:LA,isCompleted:wA},qA=LA.map(Ie=>Ie.sequence);return{code:0,data:OA,successLog:{message:`conversationID: ${M} nextReqMessageID: ${T} availableLocalMessagesCount: ${W} sequenceList: ${JSON.stringify(qA)}`}}}return{code:0,data:{messageList:[],isCompleted:!1,nextReqMessageID:""}}}return{code:0,data:yield this._getMessageListFromMemory({conversationID:M,nextReqMessageID:T,count:P}),successLog:{message:`conversationID: ${M} nextReqMessageID: ${T} availableLocalMessagesCount: ${W}}`}}}catch(r){const{code:g,message:u}=r||{};throw new this._core.helper.ChatError({code:g,message:u,moreMessage:`options: ${this._core.utils.safeStringify(s)}`})}})}getMessageListHopping(s){return mA(this,void 0,void 0,function*(){var r,g;const{OuterConstant:{Direction:u,CONV_C2C:E,CONV_GROUP:m},utils:{safeStringify:D}}=this._core,{conversationID:M,sequence:T,time:P,direction:W=u.FORWARD}=s,{utils:{isEmpty:oA},message:EA,notificationCenter:wA,InnerEvent:{HISTORY_MESSAGE_FETCHED:kA}}=this._core;if(![u.BACKWARD,u.FORWARD].includes(W))throw new this._core.helper.ChatError({message:"direction must be 0 or 1",moreMessage:`options: ${D(s)}`});let{count:xA=wh}=s;xA=xA>wh?wh:xA;let LA=null;if(M.startsWith(m)){if(LA=yield EA.messageHistory.getGroupRoamingMessagesByAnchor({conversationID:M,sequence:T,count:xA,direction:W}),LA){const{nextReqMessageIDFromServer:SA,hasNoMoreHistoryMessage:OA,messageList:qA,invisibleSequenceList:Ie}=LA;if(this._core.message.messageDataHandler.storeSparseMessageList(qA),wA.emitInnerEvent(kA,qA),W===u.FORWARD){const le=OA&&SA<1;return{code:0,data:{messageList:qA,isCompleted:le,nextMessageSeq:le?"":SA}}}if(W===u.BACKWARD){if(oA(qA)&&oA(Ie))return{code:0,data:{messageList:[],isCompleted:!0,nextMessageSeq:""}};const le=((r=qA?.[qA.length-1])===null||r===void 0?void 0:r.sequence)||0,bi=((g=Ie?.[Ie.length-1])===null||g===void 0?void 0:g.sequence)||0;return{code:0,data:{messageList:qA.filter(ki=>ki.sequence>=T),isCompleted:!OA,nextMessageSeq:OA?Math.max(le,bi)+1:""}}}return{code:0,data:LA}}}else if(M.startsWith(E)&&(LA=yield EA.messageHistory.getC2CRoamingMessagesByAnchor({conversationID:M,count:xA+1,time:P,direction:W}),LA)){const{messageList:SA,lastMessageTime:OA,hasNoMoreHistoryMessage:qA}=LA;return wA.emitInnerEvent(kA,SA),qA||(W===u.FORWARD?SA.shift():SA.pop()),EA.messageDataHandler.storeSparseMessageList(SA),yield $Q({messageList:SA,conversationID:M}),{code:0,data:{messageList:SA,isCompleted:qA,nextMessageTime:qA?"":OA}}}})}clearHistoryMessage(s){return mA(this,void 0,void 0,function*(){var r;const{appStore:g,common:{ChatError:u,getCurrentUserID:E},OuterConstant:{CONV_C2C:m,CONV_GROUP:D},apiMap:M,message:T}=this._core,P=g.conversationStore.getConversation(s);if(!P)throw new u({code:XQ});const W={fromAccount:E()},{type:oA}=P;oA===m?(W.type=PD,W.toAccount=s.replace(m,"")):oA===D&&(W.type=hR,W.toGroupID=s.replace(D,""));try{return yield(r=M?.setMessageRead)===null||r===void 0?void 0:r.call(M,{conversationID:s}),(yield function(wA){return mA(this,void 0,void 0,function*(){const{fromAccount:kA,type:xA,toAccount:LA,toGroupID:SA}=wA,OA={From_Account:kA,Type:xA,To_Account:LA,ToGroupid:SA};return ll.core.common.buildAndSendPacket({servcmd:"recentcontact.clear_msg",data:OA})})}(W))&&(T.messageDataHandler.deleteConversationMessageList(s),T.messageHistory.completedHistoryConversations.delete(s),T.messageHistory.clearHistoryMessageListFetchAnchors(s),this._updateConversationLastMessage(s)),{code:0,data:{conversationID:s},successLog:{message:`convID:${s}`}}}catch(EA){const{errorCode:wA}=EA;throw new this._core.helper.ChatError({functionName:"clearHistoryMessage",code:wA,moreMessage:`convID:${s}`})}})}_updateConversationLastMessage(s){const{appStore:r}=this._core;r.conversationStore.updateConversation(s,{lastMessage:this._generateLastMessage()},{needSort:!0})}_getAvailableLocalMessagesCount({conversationID:s,nextReqMessageID:r}){const{OuterConstant:{CONV_C2C:g,CONV_GROUP:u}}=this._core,E=this._core.message.messageDataHandler.getLocalMessageList(s),{length:m}=E;if(!r)return m;let D=-1;return s?.startsWith(g)?D=E.findIndex(M=>M.ID===r):s?.startsWith(u)&&(D=E.findIndex(M=>r.includes("-")?M.ID===r:String(M.sequence)===r)),D===-1?0:D}_needFetchHistoryMessageList({conversationID:s,availableLocalMessagesCount:r,targetCount:g}){const{message:u}=this._core;return rr.startsWith(E)?EA.ID===g:String(EA.sequence)===g),W=oA>u?oA-u:0,T=oA):W=M>u?M-u:0,P.messageList=D.slice(W,oA),P.isCompleted=T<=u&&m.messageHistory.completedHistoryConversations.has(r),P.isCompleted?P.nextReqMessageID="":P.nextReqMessageID=this._generateNextReqMessageID({conversationID:r,targetIndex:W}),r.startsWith(E)&&(yield dR(r),yield $Q({messageList:P.messageList,conversationID:r})),P})}_generateNextReqMessageID({conversationID:s,targetIndex:r}){const g=this._core.message.messageDataHandler.getLocalMessageList(s);return s.startsWith("C2C")?g[r].ID:String(g[r].sequence)}_generateLastMessage(){return{lastTime:0,lastSequence:0,fromAccount:"",messageForShow:"",payload:null,type:"",isRevoked:!1,cloudCustomData:"",onlineOnlyFlag:!1,nick:"",nameCard:"",version:0,isPeerRead:!1,revoker:null}}},SB=new class{constructor(){this._lastMessageSequenceMapOnDisconnect=new Map,this._lastMessageTimeMapOnDisconnect=new Map}init(s){this._core=s;const{common:{workflowManager:r},constants:{WORKFLOW_NAME:g,WORKFLOW_STEP:u,InnerEvent:E}}=s;r.registerWorkflowStep(g.SYNC_SERVER_INFO_AFTER_RE_ONLINE,u.HISTORY_MESSAGE_RECOVER,this._syncGroupOfflineMessage,this),r.registerWorkflowStep(g.SYNC_SERVER_INFO_AFTER_RE_ONLINE,u.C2C_HISTORY_MESSAGE_RECOVER,this._syncC2COfflineMessage,this),s.notificationCenter.subscribeInnerEvent(E.SOCKET_DISCONNECTED,this._updateLastMessageSequenceMapOnDisconnect,this)}_syncGroupOfflineMessage(s){const{conversationList:r}=s?.result||{},{OuterConstant:g,utils:{isArray:u}}=this._core;if(u(r)){const E=r.filter(m=>m.type===g.CONV_GROUP&&m.groupProfile.type!==g.GRP_AVCHATROOM);return this._recoverGroupHistoryMessage(E)}}_recoverGroupHistoryMessage(s){return mA(this,void 0,void 0,function*(){const{OuterConstant:r}=this._core,g=[],u=[];return yield Promise.all(s?.map(E=>mA(this,void 0,void 0,function*(){const{groupProfile:{groupID:m}={},lastMessage:{lastSequence:D}={}}=E,M=`${r.CONV_GROUP}${m}`;let T=this._getLocalLastMessageSequence(M);this._shouldRecoverHistory({localLastMessageSequence:T,serverLastMessageSequence:D})&&(yield this._recoverGroupHistoryForConversation({conversationID:M,localLastMessageSequence:T,serverLastMessageSequence:D,groupTipList:u})),g.push(M.replace(r.CONV_GROUP,""))}))),{recoverRevokeNoticeGroupIDList:g,groupTipList:u}})}_recoverGroupHistoryForConversation(s){return mA(this,arguments,void 0,function*({conversationID:r,localLastMessageSequence:g,serverLastMessageSequence:u,groupTipList:E}){try{const{utils:{isArray:m,isObject:D,isEmpty:M},OuterEvent:T,OuterConstant:P,notificationCenter:W,message:oA,appStore:EA,common:{getMessagePreviewText:wA,buildLastMessage:kA}}=this._core,xA=u-g,LA=Math.min(20,xA),SA={},OA=yield oA.messageHistory.getGroupRoamingMessagesByAnchor({conversationID:r,sequence:g+LA,direction:P.Direction.FORWARD,count:LA}),{nextReqMessageIDFromServer:qA,hasNoMoreHistoryMessage:Ie,messageList:le,serverGroupTipList:bi}=OA;m(bi)&&E.push(...bi);const ki=Ie&&qA<0,Ot=[];if(m(le)&&(le.forEach(Li=>{oA.messageReceiver.groupMessageReceiver.updateMessageProfile(Li),Li.from===P.CONV_SYSTEM&&(Li.isSystemMessage=!1),oA.messageDataHandler.storeConversationMessage(Li)&&!M(Li.payload)&&(Ot.push(Li),Li._isExcludedFromLastMessage||(SA.lastMessage=kA(Li)))}),Ot.length>0&&W.emitOuterEvent(T.MESSAGE_RECEIVED,{name:T.MESSAGE_RECEIVED,data:Ot})),!ki&&le.length>0){const Li=le[le.length-1].sequence;yield this._recoverGroupHistoryForConversation({conversationID:r,localLastMessageSequence:Li,serverLastMessageSequence:u,groupTipList:E})}D(SA.lastMessage)&&(SA.lastMessage.messageForShow=wA(SA.lastMessage.type,SA.lastMessage.payload),EA.conversationStore.updateConversation(r,SA))}catch(m){this._core.ssoLog.error("_recoverGroupHistoryForConversation",`Recovery failed for conversation:${r}`,{error:m})}})}_updateLastMessageSequenceMapOnDisconnect(){const{message:s}=this._core,r=s.messageDataHandler.getContinuousMessagesByConversation();for(const[g,u]of r){const E=Array.from(u.values());if(E?.length>0){const m=E[E.length-1];g.startsWith("C2C")?this._lastMessageTimeMapOnDisconnect.set(g,m.time):g.startsWith("GROUP")&&this._lastMessageSequenceMapOnDisconnect.set(g,m.sequence)}}}_getLocalLastMessageSequence(s){const{message:r}=this._core;if(this._lastMessageSequenceMapOnDisconnect.has(s))return this._lastMessageSequenceMapOnDisconnect.get(s);const g=r.messageDataHandler.getLocalMessageList(s),u=g[g.length-1];return u?.sequence}_shouldRecoverHistory(s){const{localLastMessageSequence:r,serverLastMessageSequence:g}=s;if(typeof r!="number"||typeof g!="number")return!1;const u=g-r;return g!==0&&r>0&&u>=BR&&u<_h}_syncC2COfflineMessage(s){const{conversationList:r}=s?.result||{},{OuterConstant:g,utils:{isArray:u}}=this._core;if(u(r)){const E=[];return r.forEach(m=>{m.type===g.CONV_C2C&&E.push(m)}),this._recoverC2CHistoryMessage(E)}}_recoverC2CHistoryMessage(s){return mA(this,void 0,void 0,function*(){yield Promise.all(s?.map(r=>mA(this,void 0,void 0,function*(){const{conversationID:g,lastMessage:{lastTime:u}={}}=r,E=this._getLocalLastMessageTime(g);this._shouldRecoverC2CHistory({localLastMessageTime:E,serverLastMessageTime:u})&&(yield this._recoverHistoryForC2CConversation({conversationID:g,localLastMessageTime:E,serverLastMessageTime:u}))})))})}_shouldRecoverC2CHistory(s){const{localLastMessageTime:r,serverLastMessageTime:g}=s,u=g-r;return r>0&&u>=1&&u<=600}_recoverHistoryForC2CConversation(s){return mA(this,void 0,void 0,function*(){var r;const{conversationID:g,localLastMessageTime:u,serverLastMessageTime:E}=s,{utils:{isArray:m,isObject:D,isEmpty:M,safeStringify:T},OuterEvent:P,OuterConstant:W,notificationCenter:oA,message:EA,appStore:wA,common:{getMessagePreviewText:kA,buildLastMessage:xA}}=this._core;try{const LA={},SA=yield EA.messageHistory.getC2CRoamingMessagesByAnchor({conversationID:g,direction:W.Direction.BACKWARD,time:u,count:20});if(M(SA))return;const{hasNoMoreHistoryMessage:OA,messageList:qA}=SA,Ie=[];m(qA)&&(qA.forEach(bi=>{EA.messageDataHandler.storeConversationMessage(bi)&&!M(bi.payload)&&(Ie.push(bi),bi._isExcludedFromLastMessage||(LA.lastMessage=xA(bi)))}),Ie.length>0&&oA.emitOuterEvent(P.MESSAGE_RECEIVED,{name:P.MESSAGE_RECEIVED,data:Ie}));const le=(r=qA[qA.length-1])===null||r===void 0?void 0:r.time;!OA&&le>E&&(yield this._recoverHistoryForC2CConversation({conversationID:g,localLastMessageTime:le,serverLastMessageTime:E})),D(LA.lastMessage)&&(LA.lastMessage.messageForShow=kA(LA.lastMessage.type,LA.lastMessage.payload),wA.conversationStore.updateConversation(g,LA))}catch(LA){this._core.ssoLog.error("_recoverHistoryForC2CConversation",`Recovery failed for conversation:${g} error: ${T(LA)}`)}})}_getLocalLastMessageTime(s){const{message:r}=this._core;if(this._lastMessageTimeMapOnDisconnect.has(s))return this._lastMessageTimeMapOnDisconnect.get(s);const g=r.messageDataHandler.getLocalMessageList(s),u=g[g.length-1];return u?.time}reset(){this._lastMessageSequenceMapOnDisconnect.clear(),this._lastMessageTimeMapOnDisconnect.clear()}dispose(){this.reset()}},MB=new class{constructor(){this.name="HistoryMessage"}install(s){this._core=s,ll.init(s),QR.init(s),SB.init(s),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.LOGOUT,this._reset,this),s.notificationCenter.subscribeInnerEvent(s.InnerEvent.DESTROY,this.dispose,this)}dispose(){const{notificationCenter:s,InnerEvent:r}=this._core;s.unSubscribeInnerEvent(r.LOGOUT,this._reset,this),s.unSubscribeInnerEvent(r.DESTROY,this.dispose,this),SB.dispose()}_reset(){SB.reset()}},xD=new class{init(s){this.core=s}},_C=new class{constructor(){this._reportedAtomicStoreIDs=new Set}init(s){const{helper:{registerExperimentalAPI:r}}=s;this._core=s,r("reportModalView",this),r("reportTUIFeatureUsage",this),r("reportRoomEngineEvent",this)}reportModalView(s){const{ssoLog:r,utils:{safeStringify:g,isString:u}}=this._core;try{if(!u(s))throw new Error("reportModalView data is not a string");r.createSSOLogData({method:"reportModalView",message:s,eventType:30}).end(!0)}catch(E){r.debug(`reportModalView Report failed: ${g(E)}`)}}reportTUIFeatureUsage(s){const{ssoLog:r,utils:{safeStringify:g,isEmpty:u}}=this._core,{atomicStoreID:E}=s;try{u(E)||this._reportedAtomicStoreIDs.has(E)||(this._core.ssoLog.info("reportTUIFeatureUsage",`atomicStoreID: ${s.atomicStoreID}`,{method:"reportTUIFeatureUsage",eventType:31,code:E}),this._reportedAtomicStoreIDs.add(E))}catch(m){r.debug(`reportTUIFeatureUsage Report failed: ${g(m)}`)}}reportRoomEngineEvent(s){const{utils:{safeStringify:r},ssoLog:g}=this._core;try{g.debug(`reportRoomEngineEvent Report: ${r(s)}`);const{eventId:u,eventCode:E,eventResult:m,eventMessage:D,moreMessage:M,extensionMessage:T}=s;g.createSSOLogData({method:T,code:u,message:D,eventType:30,costTime:E,uiPlatform:m,moreMessage:M}).end(!0)}catch(u){g.debug(`reportRoomEngineEvent Report failed: ${r(u)}`)}}reset(){this._reportedAtomicStoreIDs.clear()}dispose(){this.reset()}},Ap=new class{constructor(){this.name="DataReport"}install(s){this._core=s;const{notificationCenter:r,InnerEvent:{LOGOUT:g,DESTROY:u}}=s;xD.init(s),_C.init(s),r.subscribeInnerEvent(g,this._reset,this),r.subscribeInnerEvent(u,this._dispose,this)}_reset(){_C.reset()}_dispose(){const{notificationCenter:s,InnerEvent:{LOGOUT:r,DESTROY:g}}=this._core;s.unSubscribeInnerEvent(r,this._reset,this),s.unSubscribeInnerEvent(g,this._dispose,this),_C.dispose()}};let Zm=gr.STANDARD,vB=[];Zm=gr.STANDARD,vB=[lh,dC,CC,hC,Rc,ZT,MB,Ap,OE,wi,zn,VT,Jm,LD,$I];function RB(s,r){const{operationType:g,memberInfoList:u,operatorInfo:E}=s||{};let m={};if(Rs(u)?Rs(E)||(m=E):g!==Tg.JOINED&&g!==Tg.KICKED&&g!==Tg.ADMIN_SET&&g!==Tg.ADMIN_CANCELED||(m=Object.assign({},u[0])),!Rs(m)){const{nick:D="",avatar:M=""}=m;r.nick=D,r.avatar=M}}const ep=s=>({lastTime:s?.time||s?.lastTime||0,lastSequence:s?.sequence||s?.lastSequence||0,fromAccount:s?.from||s?.fromAccount||"",messageForShow:Zc(s?.type,s?.payload),payload:s?.payload||null,type:s?.type||"",isRevoked:s?.isRevoked||!1,cloudCustomData:s?.cloudCustomData||"",onlineOnlyFlag:s?._onlineOnlyFlag||!1,nick:s?.nick||"",nameCard:s?.nameCard||"",version:s?.version||0,isPeerRead:s?.isPeerRead||!1,revoker:s?.revoker||null});var tp=Object.freeze({__proto__:null,ChatError:gs,WorkflowManager:ws,buildAndSendPacket:gg,buildLastMessage:ep,get builtInPlugins(){return vB},checkBusinessCapabilityBits:tn,deepMerge:Cd,getCurrentUserID:ir,getErrorMessage:rs,getMessagePreviewText:Zc,isC2CConv:s=>c(s)&&s.slice(0,3)===ka.CONV_C2C,isCommunity:$r,isGroupConv:s=>c(s)&&s.slice(0,5)===ka.CONV_GROUP,isInternational:_l,isTopic:zc,isUnlimitedAVChatRoom:function(){var s;return!!(!((s=De.store.get("instance"))===null||s===void 0)&&s.unlimitedAVChatRoom)},liteChatInstanceMap:Ca,registerInterceptor:Mc,registerValidateConfig:Wc,requireAuth:ud,get sdkEdition(){return Zm},setGroupTipsUserInfo:RB,t:Lu,updateGroupAtInfo:(s,r)=>{const{CONV_AT_ME:g,CONV_AT_ALL:u,CONV_AT_ALL_AT_ME:E}=Uo;if(function(M,T){const{CONV_AT_ME:P,CONV_AT_ALL:W,CONV_AT_ALL_AT_ME:oA}=Uo,{groupID:EA,sequence:wA}=M;let kA=!1;return $r({groupID:EA})&&T.forEach(xA=>{xA.messageSequence===wA&&(xA.atTypeArray.includes(P)&&M.groupAtType.includes(W)&&(xA.atTypeArray=[oA]),xA.atTypeArray.includes(W)&&M.groupAtType.includes(P)&&(xA.atTypeArray=[oA],xA.__random=M.__random,xA.__sequence=M.__sequence),kA=!0)}),kA}(s,r))return;let m=[...s.groupAtType];m.includes(g)&&m.includes(u)&&(m=[E]);const D={from:s.from,groupID:s.groupID,topicID:s.topicID,messageSequence:s.sequence,atTypeArray:m,__random:s.__random,__sequence:s.__sequence};r.push(D)},validateAndExecute:vr,validateParameters:uI});class gu{constructor(){this._builtInPlugins=new Set,this._externalPlugins=new Set}static getInstance(){return gu._instance||(gu._instance=new gu),gu._instance}static setInstance(r){gu._instance=r}installBuiltInPlugin(r){r&&this._installPlugin(r,this._builtInPlugins)}installExternalPlugin(r){r&&this._installPlugin(r,this._externalPlugins)}clear(){this._builtInPlugins=new Set,this._externalPlugins=new Set}_installPlugin(r,g){let u=[];u=C(r)?r:[r];const E=u.findIndex(D=>D?.name==="AVChatRoom"),m=E>-1?u.splice(E,1):[];u.forEach(D=>{this._isPluginInstalled(D.name)||(D&&vg(D.install)?(g.add(D.name),vg(D.getInstalledSubPlugins)?(m?.forEach(M=>g.add(M?.name)),D.install(pr.getInstance().exposeApiForPlugin(),m)):D.install(pr.getInstance().exposeApiForPlugin()),vg(D.handleLoginSuccess)&&this._isLoggedIn()&&D.handleLoginSuccess()):vg(D)?(g.add(D.name),D(pr.getInstance().exposeApiForPlugin()),vg(D.handleLoginSuccess)&&this._isLoggedIn()&&D.handleLoginSuccess()):console.warn('A plugin must either be a function or an object with an "install" function.'))})}_isPluginInstalled(r){return this._builtInPlugins.has(r)||this._externalPlugins.has(r)}_isLoggedIn(){var r;return((r=De.store.get("login"))===null||r===void 0?void 0:r.isLoggedIn)===!0}}var wB=new class{constructor(){this._conversationMap=new Map}getConversationMap(){return this._conversationMap}getConversation(s){return this._conversationMap.get(s)}updateConversation(s,r,g){const{emit:u=!0,needSort:E=!1}=g||{},m=this._conversationMap.get(s);m&&!Rs(r)&&(Object.keys(r).forEach(D=>{m[D]=r[D]}),u&&De.notificationCenter.emitInnerEvent(ro.CONVERSATION_UPDATED,{needSort:E}))}deleteConversation(s){this._conversationMap.has(s)&&(this._conversationMap.delete(s),De.notificationCenter.emitInnerEvent(ro.CONVERSATION_UPDATED))}},ip=new class{constructor(){this._groupMap=new Map}getGroupMap(){return this._groupMap}getGroup(s){return this._groupMap.get(s)}updateGroup(s,r){const g=this._groupMap.get(s);g&&!Rs(r)&&Object.keys(r).forEach(u=>{g[u]=r[u]})}},op=new class{constructor(){this._messagesByConversation=new Map}updateMessage(s,r,g){var u;const{operation:E,updateUnreadCount:m=!0}=g,D=So(g,["operation","updateUnreadCount"]),M=[];for(const T of r){const P=(u=this._messagesByConversation.get(s))===null||u===void 0?void 0:u.get(T);if(!P)return!1;Object.keys(D).forEach(W=>{P[W]=D[W]}),M.push(P)}return this._emitMessageStoreOperationEvent(E,{conversationID:s,messageList:M,updateUnreadCount:m}),M}getMessagesByConversation(s){var r;return[...((r=this._messagesByConversation.get(s))===null||r===void 0?void 0:r.values())||[]]}getMessages(){return this._messagesByConversation}_emitMessageStoreOperationEvent(s,r){const{conversationID:g}=r;zc(g)?De.notificationCenter.emitInnerEvent(Tu[s],r):De.notificationCenter.emitInnerEvent(s,r)}},rc=new class{constructor(){this.userProfileMap=new Map,this.friendMap=new Map}getUserProfileMap(){return this.userProfileMap}getFriendMap(){return this.friendMap}getUserProfile(s){return this.userProfileMap.get(s)}getFriend(s){return this.friendMap.get(s)}},YD=Object.freeze({__proto__:null,conversationStore:wB,groupStore:ip,messageStore:op,userStore:rc});class pr{static getInstance(){return pr._instance||(pr._instance=new pr),pr._instance}static setInstance(r){pr._instance=r}constructor(){this._experimentalApiMap={statTUIKeyFeatures:this.statKeyFeatureUsage.bind(this),setApplicationID:this.setApplicationID.bind(this)},this._apiHandlersMap={},this._apiMap={on:De.notificationCenter.subscribeOuterEvent.bind(De.notificationCenter),off:De.notificationCenter.unSubscribeOuterEvent.bind(De.notificationCenter),destroy:this.destroy.bind(this),callExperimentalAPI:this.callExperimentalAPI.bind(this),use:gu.getInstance().installExternalPlugin.bind(gu.getInstance()),registerPlugin:this.registerPlugin.bind(this),setLogLevel:this.setLogLevel.bind(this)}}registerPlugin(r){De.ssoLog.debug("registerPlugin",r)}statKeyFeatureUsage(r){De.ssoLog.debug("statTUIKeyFeatures",r)}setLogLevel(r){De.ssoLog.debug("setLogLevel",r),De.ssoLog.setLogLevel(r)}setApplicationID(r){De.store.set("instance",{applicationID:r})}getApiMap(){return this._apiMap}setApiMap(r){this._apiMap=r}registerApi(r){const{common:{timeManager:g},utils:{safeStringify:u}}=De,{apiName:E,context:m,methodName:D=E,matcher:M}=r;this._apiHandlersMap[E]||(this._apiHandlersMap[E]=[]),this._apiHandlersMap[E].push({context:m,methodName:D,matcher:M}),this._apiMap[E]&&this._apiHandlersMap[E].length!==1||(this._apiMap[E]=(...T)=>{const P=g.getServerTimeMs();let W=0;E==="login"&&(W=4),KI.includes(E)&&De.ssoLog.debug(E,`${E} start params: ${u(T)}`),vr(D,T);const oA=this._apiHandlersMap[E];for(const EA of oA)if(!EA.matcher||EA.matcher(T))try{const wA=EA.context[EA.methodName].bind(EA.context)(...T);return this._isPromiseLike(wA)?this._handleAsyncResult(wA,E,W,P):(this._reportApiSuccessLog({result:wA,apiName:E,eventType:W,startTime:P}),wA)}catch(wA){throw De.ssoLog.error(E,`${E} fail ${wA?.message||wA?.errorMessage})`,{error:wA,costTime:g.getServerTimeMs()-P,eventType:W,method:E}),wA}})}registerExperimentalAPI(r,g,u){const E=u||r;this._experimentalApiMap[r]=g[E].bind(g)}destroy(){return mA(this,void 0,void 0,function*(){var r,g;try{!((r=De.store.get("login"))===null||r===void 0)&&r.isLogin&&(yield this._apiMap.logout()),De.notificationCenter.emitInnerEvent(ro.DESTROY)}catch(u){console.debug("destroy error: ",u)}finally{De.notificationCenter.emitOuterEvent(Mr.SDK_DESTROY,{SDKAppID:(g=De.store.get("instance"))===null||g===void 0?void 0:g.sdkAppId}),Ca.clear(),gu.getInstance().clear(),ws.getInstance().destroy(),De.destroy()}})}exposeApiForClient(){return this._apiMap}exposeApiForPlugin(){return Object.assign(Object.assign({InnerEvent:ro,InnerEventSubType:De.notificationCenter.InnerEventSubType,OuterEvent:Mr,OuterConstant:Uo,SignalingEvent:qc,helper:Object.assign(Object.assign(Object.assign({},De.utils),De.common),{registerApi:this.registerApi.bind(this),registerExperimentalAPI:this.registerExperimentalAPI.bind(this),registerInterceptor:Mc,registerValidateConfig:Wc,checkBusinessCapabilityBits:tn,registerWorkflowStep:ws.getInstance().registerWorkflowStep.bind(ws.getInstance()),ChatError:gs}),apiMap:this._apiMap},De),{constants:Object.assign(Object.assign({},za),De.constants),common:Object.assign(Object.assign(Object.assign({},tp),De.common),{workflowManager:ws.getInstance()}),utils:De.utils,appStore:YD})}callExperimentalAPI(r,g){return De.ssoLog.debug(`callExperimentalAPI.${r} start params: ${De.utils.safeStringify(g)}`),this._experimentalApiMap[r]?this._experimentalApiMap[r](g):(De.ssoLog.error("callExperimentalAPI",`callExperimentalAPI.${r} not found, params: ${De.utils.safeStringify(g)}`),Promise.reject(new gs({code:da.INVALID_OPERATION})))}_isPromiseLike(r){return r!==null&&typeof r=="object"&&typeof r.then=="function"}_handleAsyncResult(r,g,u,E){return r.then(m=>(this._reportApiSuccessLog({result:m,apiName:g,eventType:u,startTime:E}),m)).catch(m=>{throw De.ssoLog.error(g,`${g} fail ${m?.message||m?.errorMessage})`,{error:m,costTime:De.common.timeManager.getServerTimeMs()-E,eventType:u,method:g,startTime:E}),m})}_reportApiSuccessLog(r){let{result:g,apiName:u,startTime:E,eventType:m}=r;const{timeManager:D}=De.common,{successLog:{message:M,moreMessage:T}={message:"",moreMessage:""}}=g||{},P=D.getServerTimeMs();u==="login"&&(E+=D.getTimeOffsetWithServer()),KI.includes(u)&&De.ssoLog.info(u,`${u} success ${M} ${T}`,{costTime:P-E,eventType:m,message:M,moreMessage:T,startTime:E}),g?.successLog&&delete g.successLog}}class pR{constructor(){this._latestLoginAt=0,this._latestSendOnlinePresenceRequestTime=0,this._helloInterval=120,this._customLoginInfo=""}init(){const{notificationCenter:r,store:g}=De;g.set("login",{isReady:!1}),pr.getInstance().registerApi({apiName:"login",context:this}),pr.getInstance().registerApi({apiName:"logout",context:this}),pr.getInstance().registerApi({apiName:"getLoginUser",context:this}),pr.getInstance().registerApi({apiName:"isReady",context:this}),pr.getInstance().registerApi({apiName:"getServerTime",context:this}),pr.getInstance().registerExperimentalAPI("setCustomLoginInfo",this),r.subscribeInnerEvent(ro.RECONNECTED,this._reLogin,this),De.notificationCenter.subscribeInnerEvent(ro.DESTROY,this._dispose,this)}login(r){return mA(this,void 0,void 0,function*(){var g;const{sdkEdition:u}=De.store.get("instance")||{};try{if(this._isLoginIn())return this._createRepeatLoginResponse();if(this._isLoginFrequencyExceeded())throw new gs({functionName:"login",code:da.REPEAT_LOGIN});const E=yield this._performLogin(r);this._validateAfterLogin(E),this._handleLoginSuccess(E),yield this._ensureAsyncComplete(),this._updateAndEmitSDKReady(),this._latestLoginAt=0;const m=(g=De.channel.getSocketAdapter())===null||g===void 0?void 0:g.getId(),{appId:D,href:M}=De.store.get("instance")||{},{instanceID:T,customStatus:P}=E||{};return{code:0,data:E,successLog:{message:u,moreMessage:`socketID:${m} instanceID:${T} customStatus:${P} href: ${M} appId: ${D}`}}}catch(E){const{errorCode:m}=E;m!==da.REPEAT_LOGIN&&(this._latestLoginAt=0);const D=new gs({functionName:"login",code:m});throw console.error(D),D}})}_reLogin(){return mA(this,void 0,void 0,function*(){var r;try{if(!this._isLoginIn())return;const g=yield ku(this._customLoginInfo);if(g){const{instanceID:u,customStatus:E}=g;De.store.set("login",{statusInstanceId:u}),ws.getInstance().executeWorkflow(Jt.SYNC_SERVER_INFO_AFTER_RE_ONLINE,{customStatus:E,statusType:DE.USER_STATUS_ONLINE});const m=(r=De.channel.getSocketAdapter())===null||r===void 0?void 0:r.getId();De.ssoLog.info("reLogin",`socketId:${m} instanceId:${u}`)}}catch(g){console.warn(g)}})}logout(){return mA(this,arguments,void 0,function*(r=ra.USER_INITIATED){const{ssoLog:g}=De;g.debug("logout",`logout start logoutReason: ${r}`);try{yield this._performLogout(r),g.info("logout","logout success"),De.ssoLog.uploadSSOLogData()}catch(u){const{errorCode:E}=u;throw new gs({functionName:"logout",code:E})}finally{this.handleLogoutCompleted()}return{code:0,data:{}}})}getLoginUser(){return this._isLoginIn()?ir():""}isReady(){var r;return(r=De.store.get("login"))===null||r===void 0?void 0:r.isReady}setCustomLoginInfo(r=""){this._customLoginInfo=r}handleLogoutCompleted(){this._updateAndEmitSDKNotReady(),this._reset(),ws.getInstance().reset(),De.notificationCenter.emitInnerEvent("logout")}getServerTime(){const{timeManager:r}=De.common;return r.getServerTimeMs()}_updateAndEmitSDKReady(){De.store.set("login",{isReady:!0}),setTimeout(()=>{De.notificationCenter.emitOuterEvent(Mr.SDK_READY,{name:Mr.SDK_READY})},1)}_updateAndEmitSDKNotReady(){De.store.set("login",{isReady:!1}),De.notificationCenter.emitOuterEvent(Mr.SDK_NOT_READY,{name:Mr.SDK_NOT_READY})}_validateAfterLogin(r){const g="login";if(!r)throw new gs({functionName:g,message:"login response is empty"});const{tinyID:u,a2Key:E}=r||{};if(!u)throw new gs({functionName:g,code:da.NO_TINYID});if(!E)throw new gs({functionName:g,code:da.NO_A2KEY})}_createRepeatLoginResponse(){var r;return{code:0,data:{actionStatus:"OK",errorCode:0,errorInfo:rs({code:"RepeatLogin",replacement1:(r=De.store.get("login"))===null||r===void 0?void 0:r.userId}),repeatLogin:!0}}}_performLogin(r){return mA(this,void 0,void 0,function*(){const{userID:g,userSig:u}=r;return De.store.set("login",{userId:g,userSig:u}),this._latestLoginAt=Date.now(),ku(this._customLoginInfo)})}_ensureAsyncComplete(){return mA(this,void 0,void 0,function*(){yield new Promise(r=>{setTimeout(()=>r(null),1)})})}_handleLoginSuccess(r){const{timeManager:g}=De.common,{helloInterval:u,timeStamp:E,customStatus:m,purchaseBits:D}=r,M=1e3*E;g.calculateTimeOffsetWithServer(this._latestLoginAt,M),this._helloInterval=u||120,this._updateLoginStore(r),De.user.userStatus.setCustomStatus(m),ws.getInstance().executeWorkflow(Jt.SYNC_SERVER_INFO_AFTER_LOGIN,{purchaseBits:D}),De.common.taskScheduler.addTask({id:Gg,intervalMs:1e3*this._helloInterval,callback:this._sendOnlinePresenceRequest,context:this})}_performLogout(r){return function(g){return mA(this,void 0,void 0,function*(){const{logoutReason:u}=g,E="im_open_status.wslogout",m=De.common.generateProtocolData({servcmd:E,data:{wslogout_type:u,isWebUniapp:0}}),D=`${m.head.seq}${E}`;return yield De.channel.sendPacket(m,{requestId:D})})}({logoutReason:r})}_updateLoginStore(r){const{a2Key:g,tinyID:u,instanceID:E,authKey:m}=r;De.store.set("login",{a2Key:g,tinyID:u,statusInstanceId:E,authKey:m,isLoggedIn:!0})}_sendOnlinePresenceRequest(){return mA(this,void 0,void 0,function*(){this._latestSendOnlinePresenceRequestTime=Date.now();try{yield function(){const r="im_open_status.wshello",g=De.common.generateProtocolData({servcmd:r,data:{isWebUniapp:0}}),u=`${g.head.seq}${r}`;return De.channel.sendPacket(g,{requestId:u})}()}catch(r){De.ssoLog.warn("_sendOnlinePresenceRequest",` error:${r.message}`)}})}_isLoginIn(){var r;return((r=De.store.get("login"))===null||r===void 0?void 0:r.isLoggedIn)===!0}_isLoginFrequencyExceeded(){return Date.now()-this._latestLoginAt<=15e3}_reset(){De.common.taskScheduler.removeTask(Gg),this._helloInterval=120,this._latestSendOnlinePresenceRequestTime=0,this._latestLoginAt=0,this._customLoginInfo="",De.store.clear("login"),De.store.set("login",{isReady:!1}),De.store.set("instance",{applicationID:0})}_dispose(){this._reset();const{notificationCenter:r}=De;r.unSubscribeInnerEvent(ro.RECONNECTED,this._reLogin,this),r.unSubscribeInnerEvent(ro.DESTROY,this._dispose,this)}}const mR={login:{userID:{required:!0,rules:["string"],allowEmpty:!1},userSig:{required:!0,rules:["string"],allowEmpty:!1}}},XT={logout:!0};class Th{constructor(){this.loginAction=new pR,this.kickedOutHandler=new bu,this.loginAction.init(),this.kickedOutHandler.init(),Wc({auth:XT,params:mR})}}var Kr,AE,qE;(function(s){s.CONV_C2C="C2C",s.CONV_GROUP="GROUP",s.CONV_TOPIC="TOPIC",s.CONV_SYSTEM="@TIM#SYSTEM"})(Kr||(Kr={})),function(s){s.MSG_PRIORITY_HIGH="High",s.MSG_PRIORITY_NORMAL="Normal",s.MSG_PRIORITY_LOW="Low",s.MSG_PRIORITY_LOWEST="Lowest"}(AE||(AE={})),function(s){s.MSG_TEXT="TIMTextElem",s.MSG_CUSTOM="TIMCustomElem",s.MSG_LOCATION="TIMLocationElem",s.MSG_FACE="TIMFaceElem",s.MSG_IMAGE="TIMImageElem",s.MSG_AUDIO="TIMSoundElem",s.MSG_FILE="TIMFileElem",s.MSG_VIDEO="TIMVideoFileElem",s.MSG_GRP_TIP="TIMGroupTipElem",s.MSG_GRP_SYS_NOTICE="TIMGroupSystemNoticeElem",s.MSG_MERGER="TIMRelayElem"}(qE||(qE={}));const VD={1:AE.MSG_PRIORITY_HIGH,2:AE.MSG_PRIORITY_NORMAL,3:AE.MSG_PRIORITY_LOW,4:AE.MSG_PRIORITY_LOWEST},JD=0,fR=1;var eE;(function(s){s.IN="in",s.OUT="out"})(eE||(eE={}));const yR=2,sp={};function cu(s){if(!s)return 0;if(sp[s]===void 0){const r=new Date,g=`3${r.getHours()}`.slice(-2),u=`0${r.getMinutes()}`.slice(-2),E=`0${r.getSeconds()}`.slice(-2);sp[s]=parseInt([g,u,E,"0001"].join(""),10),console.log(`autoIncrementIndex start index:${sp[s]}`)}else sp[s]+=1;return sp[s]}class KE{constructor(r){this.ID="",this.random=0,this.sequence=0,this.nameCard="",this.isRead=!1,this.isPeerRead=!1,this.isDeleted=!1,this.isResend=!1,this.hasRiskContent=!1,this._onlineOnlyFlag=!1,this.atUserList=[],this._groupAtInfoList=[],this.isBroadcastMessage=!1,this.priority=AE.MSG_PRIORITY_NORMAL,this._relayFlag=!1;const{clientTime:g=De.common.timeManager.getServerTimeSeconds()||0,senderTinyID:u,currentUser:E,needReadReceipt:m,isSupportExtension:D,customModerationConfigurationId:M,to:T,from:P,nick:W="",avatar:oA="",time:EA,messageControlInfo:wA,tinyID:kA,cloudCustomData:xA="",messageLifeTime:LA,messageVersion:SA=0,conversationType:OA,sequence:qA,checkResult:Ie=0,isPlaceMessage:le=0,messageFlagBits:bi,receiverList:ki,isSystemMessage:Ot=!1,status:Li=Yr.SUCCESS,revokeReason:cs="",conversationSubType:Re,clientSequence:St,protocol:UA="JSON",revokerInfo:ai={userID:"",nick:"",avatar:""},readReceiptInfo:_s={readCount:void 0,unreadCount:void 0,isPeerRead:void 0,timestamp:0},random:Ui,groupProfile:Or,atUserList:Vi,flow:Ir,isRead:Nt=!1,priority:Gt=AE.MSG_PRIORITY_NORMAL,onlineOnlyFlag:iE=!1,nameCard:ln="",quoteInfo:Qo}=r;var Il;this.clientTime=g,this.senderTinyID=u||kA,this.needReadReceipt=m===!0||m===1,this.isSupportExtension=D===!0||D===1,this._cmConfigID=M,this.to=T,this.nick=W,this.avatar=oA,this.protocol=UA,this.random=Ui===void 0?(Il=Il||99999999,Math.round(Math.random()*Il)):Ui,this.time=EA||Math.ceil(Date.now()/1e3),this._isExcludedFromLastMessage=!!wA?.excludedFromLastMessage,this._isExcludedFromUnreadCount=!!wA?.excludedFromUnreadCount,this.isModified=!!SA,this.cloudCustomData=xA,this.messageLifeTime=LA,this.from=P||null,this.sequence=qA||0,this.conversationType=OA||Kr.CONV_C2C,this.hasRiskContent=Ie>1,this.version=SA,this.isPlaceMessage=le,this.isRevoked=le===2||bi===8,this.isSystemMessage=Ot,this.readReceiptInfo=_s,this.revokeReason=cs,this.revokerInfo=ai,this._receiverList=ki,this.conversationSubType=Re,this.revoker=ai?.revoker||"",this.clientSequence=St||qA||0,this.status=Li,this.atUserList=Vi||[],this.flow=Ir,this.isRead=Nt,this.priority=Gt,this._onlineOnlyFlag=iE,this.nameCard=ln,this.quoteInfo=Qo,this.reInitialize(E),this._initC2CReadReceiptInfo(r),this._extractGroupInfo(Or)}getElements(){return this._elements}isOnlineMessage(){return this.messageLifeTime===0}setElement(r){Array.isArray(r)?this._elements=r:this._elements=[r],this._updatePayloadAndType()}transformElementsToServerFormat(){return this._elements?Array.isArray(this._elements)?this._elements.map(r=>r.transformToServerFormat()):this._elements.transformToServerFormat():null}setRelayFlag(r){this._relayFlag=r}validateBeforeSend(){var r,g,u;return this._relayFlag?{isValid:!0}:((r=this._elements)===null||r===void 0?void 0:r.length)>0?(u=(g=this._elements[0])===null||g===void 0?void 0:g.validateBeforeSend)===null||u===void 0?void 0:u.call(g):{isValid:!1}}_updatePayloadAndType(){this._elements[0]&&(this.payload=this._elements[0].content,this.type=this._elements[0].type)}_initC2CReadReceiptInfo(r){const{readReceiptSentByPeer:g,timestamp:u=0}=r;this.conversationType===Kr.CONV_C2C&&this.needReadReceipt===!0&&(this.readReceiptInfo.isPeerRead=g===1,this.readReceiptInfo.timestamp=u)}_extractGroupInfo(r){if(!r)return;const{From_AccountNick:g,From_AccountHeadurl:u,MsgFrom_AccountExtraInfo:E,GroupType:m}=r,{NameCard:D}=E||{};typeof g=="string"&&(this.nick=g),typeof u=="string"&&(this.avatar=u),typeof D=="string"&&(this.nameCard=D),this.conversationSubType=m}reInitialize(r){r===this.from&&(this.isRead=!0),this._initSequence(r),this._concatConversationID(r),this.generateMessageID()}_concatConversationID(r){let g="";const u=this.conversationType;u!==Kr.CONV_SYSTEM?(g=u===Kr.CONV_C2C?r===this.from?this.to:this.from:this.to,this.conversationID=g?`${u}${g}`:null):this.conversationID=Kr.CONV_SYSTEM}_initSequence(r){this.clientSequence===0&&r&&(this.clientSequence=cu(r)),this.sequence===0&&this.conversationType===Kr.CONV_C2C&&(this.sequence=this.clientSequence)}generateMessageID(){this.from===Kr.CONV_SYSTEM&&(this.senderTinyID="144115198244471703"),this.ID=`${this.senderTinyID}-${this.clientTime}-${this.random}`}setIsRead(r){this.isRead=r}}class Td{static parseServerPushElement(r){const{MsgContent:g={}}=r,{Data:u,Ext:E,Desc:m}=g;return new Td({data:u,description:m,extension:E})}constructor(r){this.type=qE.MSG_CUSTOM;const{data:g="",description:u="",extension:E=""}=r;this.content={data:g,description:u,extension:E}}transformToServerFormat(r){const{isMergerMessage:g=!1}=r||{},u=g?this.payload:this.content,{data:E,description:m,extension:D}=u;return{MsgType:this.type,MsgContent:{Data:E,Ext:D,Desc:m}}}validateBeforeSend(){const{isEmpty:r}=De.utils,g=[this.content.data,this.content.description,this.content.extension].some(u=>!r(u));return{isValid:g,error:g?null:{message:"content can not be empty"}}}}class Nd{static parseServerPushElement(r){const{MsgContent:g={Text:""}}=r,{Text:u}=g;return new Nd({text:u})}constructor(r){this.type=wg.MSG_TEXT,this.content={text:r.text||""}}validateBeforeSend(){var r,g;return((g=(r=this.content)===null||r===void 0?void 0:r.text)===null||g===void 0?void 0:g.length)>0?{isValid:!0}:{isValid:!1,error:{message:"content can not be empty"}}}transformToServerFormat(r){const{isMergerMessage:g=!1}=r||{},u=g?this.payload:this.content,{text:E}=u;return{MsgType:this.type,MsgContent:{Text:E}}}}var Xm=new class{constructor(){this._elementClassMap={[qE.MSG_CUSTOM]:Td,[qE.MSG_TEXT]:Nd}}init(){pr.getInstance().registerApi({apiName:"createCustomMessage",context:this}),pr.getInstance().registerApi({apiName:"createTextMessage",context:this})}registerElementClass(s,r){var g;(g=r).prototype!==void 0&&"constructor"in g.prototype&&(this._elementClassMap[s]=r)}getElementClass(s){return this._elementClassMap[s]}createMessage(s){const{from:r,flow:g=eE.OUT}=s,{userId:u}=De.store.get("login")||{};this._isSendByCurrentInstance({from:r,flow:g,currentUser:u})?this._updateWithSenderInfo(s):this._isMultiEndpointSyncMessage({from:r,flow:g,currentUser:u})&&(s.flow=eE.OUT);const E=Object.assign(Object.assign({},s),{currentUser:u});return new KE(E)}createCustomMessage(s){const r=ir(),g=this.createMessage(Object.assign(Object.assign({},s),{from:r})),u=this._elementClassMap[qE.MSG_CUSTOM];if(!g)return null;if(u){const E=new u(s.payload);g.setElement(E)}return g}createTextMessage(s){var r;if(!s)return null;const g=typeof s.payload=="string"?s.payload:((r=s?.payload)===null||r===void 0?void 0:r.text)||"",u=new Nd({text:g}),E=ir(),m=De.message.messageFactory.createMessage(Object.assign(Object.assign({},s),{from:E}));return m.setElement(u),m}_updateWithSenderInfo(s){var r,g;const{nick:u,avatar:E,conversationType:m,to:D}=s,{userId:M,tinyID:T}=De.store.get("login")||{},P=rc.getUserProfile(M);return s.nick=u||P?.nick||"",s.avatar=E||P?.avatar||"",s.tinyID=s.tinyID||T||"",s.from=M,s.status=Yr.UNSENT,s.flow=eE.OUT,m===ka.CONV_GROUP&&(s.nameCard=(g=(r=ip.getGroup(D))===null||r===void 0?void 0:r.selfInfo)===null||g===void 0?void 0:g.nameCard),s}_isMultiEndpointSyncMessage(s){const{from:r,flow:g,currentUser:u}=s;return r===u&&g===eE.IN}_isSendByCurrentInstance(s){const{from:r,flow:g,currentUser:u}=s;return r===u&&g===eE.OUT}};const DR={PushFlag:0,Title:"",Desc:"",Ext:"",ApnsInfo:{Sound:"",BadgeMode:0,IsVoipPush:void 0,Image:"",InterruptionLevel:"active",ContentAvailable:0},AndroidInfo:{Sound:"",XiaoMiChannelID:"",OPPOChannelID:"",GoogleChannelID:"",VIVOClassification:1,VIVOCategory:"",HuaWeiCategory:"",OPPOCategory:"",HuaWeiImage:"",HonorImage:"",GoogleImage:"",HonorImportance:"",MeizuNotifyType:void 0}},Gd={HonorImportance:{range:["LOW","NORMAL"],defaultValue:void 0},MeizuNotifyType:{range:[0,1],defaultValue:void 0}},HD={enableIOSBackgroundNotification:{range:[!0,!1],defaultValue:!1},interruptionLevel:{range:["passive","active","time-sensitive","critical"],defaultValue:"active"}};function SR(s,r){return Object.keys(r).forEach(g=>{const{range:u,defaultValue:E}=r[g];s[g]=u.includes(s[g])?s[g]:E}),s}function np(s){const r=s.lastIndexOf(".");return r===-1?s:s.slice(0,r)}function MR(s){const{androidInfo:r={},androidOPPOChannelID:g=""}=s,u=r.OPPOChannelID||g,E=SR(r,Gd),{sound:m="",FCMChannelID:D=""}=E,M=So(E,["sound","FCMChannelID"]);return Object.assign(Object.assign({},M),{Sound:np(m),OPPOChannelID:u,GoogleChannelID:D})}function vR(s){const{apnsInfo:r={},ignoreIOSBadge:g=!1,disableVoipPush:u}=s,E=SR(r,HD),{ignoreIOSBadge:m,disableVoipPush:D,enableIOSBackgroundNotification:M}=E,T=So(E,["ignoreIOSBadge","disableVoipPush","enableIOSBackgroundNotification"]),P=m===!0||g===!0?1:0;let W;return n(u)||(W=u===!1?1:0),n(D)||(W=D===!1?1:0),Object.assign(Object.assign({},T),{BadgeMode:P,IsVoipPush:W,ContentAvailable:M?1:0})}function qD(s){return De.utils.isPlainObject(s)?{PushFlag:s.disablePush===!0?1:0,Title:s.title||"",Desc:s.description||"",Ext:s.extension||"",ApnsInfo:vR(s),AndroidInfo:MR(s)}:DR}function $m(s){const{From_AccountHeadurl:r,From_AccountNick:g,IsNeedReadReceipt:u,IsPeerRead:E,IsSyncMsg:m,MsgBody:D,MsgClientTime:M,MsgLifeTime:T,MsgRandom:P,MsgSeq:W,MsgTimeStamp:oA,SendMsgControl:EA,SupportMessageExtension:wA,TinyId:kA,MsgCheckResult:xA,CloudCustomData:LA,MsgVersion:SA,MsgFlagBits:OA,RevokerInfo:qA,InnerSdkCustomData:Ie}=s;let le,{From_Account:bi,To_Account:ki}=s;if(m===1){const Ot=ki;ki=bi,bi=Ot}if(qA){const{Reason:Ot,Revoker_Account:Li,Revoker_FromUin:cs}=qA;le={reason:Ot,revoker:Li,revokerFromUin:cs,userID:Li}}return{from:bi,avatar:r,nick:g,needReadReceipt:u===1,isSyncMessage:m,clientTime:M,messageLifeTime:T,random:P,sequence:W,time:oA,messageControlInfo:{excludedFromLastMessage:EA?.NoLastMsg===1,excludedFromUnreadCount:EA?.NoUnread===1},isSupportExtension:wA,to:ki,tinyID:kA,checkResult:xA,cloudCustomData:LA,revokerInfo:le,messageVersion:SA,messageFlagBits:OA,readReceiptSentByPeer:E,elements:TC(D),onlineOnlyFlag:T===0,quoteInfo:rp(Ie)}}function Af(s){const{From_Account:r,MsgBody:g,MsgClientTime:u,MsgRandom:E,MsgSeq:m,MsgTimeStamp:D,To_Account:M,MsgVersion:T,CloudCustomData:P,MsgCheckResult:W}=s;return{from:r,clientTime:u,random:E,sequence:m,time:D,to:M,elements:TC(g),messageVersion:T,cloudCustomData:P,checkResult:W}}function KD(s){const{ClientSeq:r,From_Account:g,GroupInfo:u,MsgBody:E,MsgClientTime:m,MsgRandom:D,MsgSeq:M,MsgTimeStamp:T,SendMsgControl:P,SupportMessageExtension:W,TinyId:oA,CloudCustomData:EA,MsgVersion:wA,MsgCheckResult:kA,NeedReadReceipt:xA,IsPlaceMsg:LA,RevokerInfo:SA,GroupAtInfo:OA,OnlineOnlyFlag:qA,InnerSdkCustomData:Ie}=s;let le,bi=AE.MSG_PRIORITY_NORMAL;if(Object.keys(VD).includes(String(s.MsgPriority))&&(bi=VD[s.MsgPriority]),SA){const{Reason:Ot,Revoker_Account:Li,Revoker_FromUin:cs}=SA;le={reason:Ot,revoker:Li,revokerFromUin:cs,userID:Li}}const ki=function(Ot){const Li=[];return Array.isArray(Ot)&&Ot.forEach(cs=>{cs.GroupAtAllFlag===JD?Li.push(cs.GroupAt_Account):cs.GroupAtAllFlag===fR&&Li.push(Uo.MSG_AT_ALL)}),Li}(OA);return{clientSequence:r,from:g,groupProfile:u,clientTime:m,priority:bi,random:D,sequence:M,time:T,messageControlInfo:{excludedFromLastMessage:P?.NoLastMsg===1,excludedFromUnreadCount:P?.NoUnread===1},isSupportExtension:W,tinyID:oA,cloudCustomData:EA,messageVersion:wA,checkResult:kA,needReadReceipt:xA,isPlaceMessage:LA,revokerInfo:le,atUserList:ki,elements:TC(E),to:$T(s),onlineOnlyFlag:qA===1,quoteInfo:rp(Ie)}}function $T(s){const{utils:{isEmpty:r},constants:{IS_TOPIC_MESSAGE:g}}=De,{ToGroupId:u,GroupInfo:{MillionGroupFlag:E=0,TopicId:m}={}}=s;return E!==g||r(m)?u:m}function TC(s){if(!s)return null;if(Array.isArray(s))return s.map(g=>{const u=De.message.messageFactory.getElementClass(g.MsgType);return u?.parseServerPushElement(g)});const r=De.message.messageFactory.getElementClass(s.MsgType);return r?.parseServerPushElement(s)}function jD(s){const{From_Account:r,MsgBody:g,MsgClientTime:u,MsgRandom:E,MsgSeq:m,MsgTimeStamp:D,GroupId:M,TopicId:T,MsgVersion:P,CloudCustomData:W,MsgCheckResult:oA}=s;return{from:r,clientTime:u,random:E,sequence:m,time:D,groupID:M,topicID:T,elements:TC(g),messageVersion:P,cloudCustomData:W,checkResult:oA}}function rp(s){const{utils:{isString:r,safeStringify:g},ssoLog:u}=De;if(!r(s))return null;try{const{messageID:E,messageTime:m,messageSequence:D}=JSON.parse(s).businessQuote;return{msgID:E,messageTime:m,messageSequence:D}}catch(E){return u.debug("_parseServerQuoteInfo",g(E)),null}}function ap({conversationUpdateFields:s,message:r}){const{conversationID:g,conversationType:u,conversationSubType:E,flow:m,_isExcludedFromUnreadCount:D,_isExcludedFromLastMessage:M}=r,T=M?"":ep(r),P=!D&&m===eE.IN;s.has(g)?(s.get(g).lastMessage=T,P&&s.get(g).unreadCount++):s.set(g,{conversationID:g,type:u,subType:E,unreadCount:P?1:0,lastMessage:T})}function _B(s){return s.filter(r=>{const g=!Rs(r?._elements),u=r?.isPlaceMessage===1;return g||De.ssoLog.error("emptyMessageBody",`from:${r.from} to:${r.to} sequence:${r.sequence}`),g&&!u})}function TB(s){const{messageDataHandler:r}=De.message;return!r.isInMessageList(s)&&!r.isMessageSentByCurrentInstance(s)}var RR=Object.freeze({__proto__:null,autoIncrementIndex:cu,createAndroidPushInfo:MR,createApnsPushInfo:vR,createOfflinePushInfo:qD,filterValidMessages:_B,getAndroidSoundName:np,parseServerGroupMessage:KD,parseServerPushC2CModifyMessage:Af,parseServerPushGroupModifyMessage:jD,parseServerPushMessage:$m,parseServerPushMessageElement:TC,shouldStoreMessage:TB,updateConversationFields:ap});const{isPlainObject:wR}=De.utils;function gp(s,r={}){const{onlineUserOnly:g,messageControlInfo:u}=r;let{offlinePushInfo:E}=r;s.conversationType===Kr.CONV_C2C&&g===!0&&(E?E.disablePush=!0:E={disablePush:!0});let m="";typeof s.cloudCustomData=="string"&&s.cloudCustomData.length>0&&(m=s.cloudCustomData);const D=[];if(u&&wR(u)){const{excludedFromUnreadCount:M,excludedFromLastMessage:T,excludedFromContentModeration:P}=u;M===!0&&D.push("NoUnread"),T===!0&&D.push("NoLastMsg"),P===!0&&D.push("NoMsgCheck")}return{onlineUserOnly:g,cloudCustomData:m,messageControlInfo:D,offlinePushInfo:E}}function WD(s){const{webhookInfo:{disableCloudMessagePreHook:r=!1,disableCloudMessagePostHook:g=!1}={}}=s||{};if(!r&&!g)return;const u=[];return r&&u.push("ForbidBeforeSendMsgCallback"),g&&u.push("ForbidAfterSendMsgCallback"),u}function Nh(s,r){return mA(this,void 0,void 0,function*(){const g=s.conversationType===Kr.CONV_GROUP?function(E,m){var D;const M=gp(E,m),{onlineUserOnly:T,cloudCustomData:P,messageControlInfo:W,offlinePushInfo:oA}=M,EA=JSON.parse(JSON.stringify(E.transformElementsToServerFormat()));let wA;return C(E._receiverList)&&E._receiverList.length>0&&(wA=E._receiverList,E._receiverList.length>50&&(wA=E._receiverList.slice(0,50),console.warn("ReceiverListLimit"))),{servcmd:"group_open_http_svc.send_group_msg",data:{From_Account:(D=De.store.get("login"))===null||D===void 0?void 0:D.userId,GroupId:E.to,MsgBody:EA,CloudCustomData:P,Random:E.random,MsgPriority:E.priority,ClientSeq:E.clientSequence,GroupAtInfo:E._groupAtInfoList,OnlineOnlyFlag:T?1:0,MsgClientTime:E.clientTime,OfflinePushInfo:qD(oA),SendMsgControl:T?void 0:W,NeedReadReceipt:E.needReadReceipt===!0?1:0,To_Account:wA,SupportMessageExtension:E.isSupportExtension===!0?1:0,IsRelayMsg:E._relayFlag===!0?1:0,CustomModerationConfigID:E._cmConfigID,ForbidCallbackControl:WD(m),InnerSdkCustomData:GB(E)}}}(s,r):function(E,m){var D;const M=gp(E,m),{onlineUserOnly:T,cloudCustomData:P,messageControlInfo:W,offlinePushInfo:oA}=M,EA=T===!0?0:void 0,wA=JSON.parse(JSON.stringify(E.transformElementsToServerFormat()));return{servcmd:"openim.sendmsg",data:{From_Account:(D=De.store.get("login"))===null||D===void 0?void 0:D.userId,To_Account:E.to,MsgBody:wA,CloudCustomData:P,MsgSeq:E.sequence,MsgRandom:E.random,MsgLifeTime:EA,From_AccountNick:E.nick,From_AccountHeadurl:E.avatar,SendMsgControl:EA!==0?W:void 0,MsgClientTime:E.clientTime,IsNeedReadReceipt:E.needReadReceipt===!0?1:0,SupportMessageExtension:E.isSupportExtension===!0?1:0,IsRelayMsg:E._relayFlag===!0?1:0,CustomModerationConfigID:E._cmConfigID,OfflinePushInfo:qD(oA),ForbidCallbackControl:WD(m),InnerSdkCustomData:GB(E)}}}(s,r),u=yield gg(g);return u?{time:u.MsgTime,messageDropReason:u.MsgDropReason,sequence:u.MsgSeq}:null})}function Gh(s){return mA(this,void 0,void 0,function*(){const{from:r,to:g,version:u=0,sequence:E,random:m,time:D,type:M,cloudCustomData:T}=s,P={From_Account:r,To_Account:g,MsgVersion:u,MsgSeq:E,MsgRandom:m,MsgTime:D,MsgType:M,MsgBody:s.transformElementsToServerFormat(),CloudCustomData:T},W=yield gg({servcmd:"openim.modify_c2c_msg",data:P});if(W){const{MsgBody:oA,MsgVersion:EA,CloudCustomData:wA}=W;return{elements:TC(oA),messageVersion:EA,cloudCustomData:wA}}})}function NB(s){return mA(this,void 0,void 0,function*(){const{to:r,version:g=0,sequence:u,cloudCustomData:E}=s,m={GroupId:r,MsgVersion:g,MsgSeq:u,MsgBody:s.transformElementsToServerFormat(),CloudCustomData:E},D=yield gg({servcmd:"openim.modify_group_msg",data:m});if(D){const{MsgBody:M,MsgVersion:T,CloudCustomData:P}=D;return{elements:TC(M),messageVersion:T,cloudCustomData:P}}})}function bh(s){return mA(this,void 0,void 0,function*(){const{groupID:r,count:g,messageSequence:u,messageSequenceList:E,getType:m}=s,D={GroupId:r,ReqMsgNumber:g,WithRecalledMsg:1,Version:1,GetType:m};return u&&(D.ReqMsgSeq=u),C(E)&&E.length>0&&(D.ReqMsgSeqList=E),yield gg({servcmd:"group_open_http_svc.group_msg_get",data:D})})}function ef(s){return mA(this,void 0,void 0,function*(){const{peerAccount:r,count:g,lastMessageTime:u,messageKey:E,direction:m}=s;return gg({servcmd:"openim.getroammsg",data:{Peer_Account:r,MaxCnt:g,WithRecalledMsg:1,LastMsgTime:u,MsgKey:E,GetDirection:m}})})}function GB(s){if(De.utils.isObject(s.quoteInfo)){const{msgID:r,messageSequence:g,messageTime:u}=s.quoteInfo;return JSON.stringify({businessQuote:{messageID:r,messageSequence:g,messageTime:u}})}}var zD=Object.freeze({__proto__:null,createMessagePackOptions:gp,generateForbidCallbackControl:WD,getC2CRoamingMessagesByAnchor:ef,getGroupRoamingMessagesByAnchor:bh,getRoamingMessages:function(s){return mA(this,void 0,void 0,function*(){const{peerAccount:r,count:g,lastMessageTime:u,messageKey:E}=s;return(yield gg({servcmd:"openim.getroammsg",data:{Peer_Account:r,MaxCnt:g||15,LastMsgTime:u||0,MsgKey:E,GetDirection:0,WithRecalledMsg:1}}))||[]})},modifyC2CMessage:Gh,modifyGroupMessage:NB,sendMessage:Nh});const{isPlainObject:AN}=De.utils,{MSG_AUDIO:ZD,MSG_FILE:XD,MSG_IMAGE:_R,MSG_VIDEO:TR,MSG_MERGER:NR}=Uo;class tf{constructor(){this._sendProtocolMap=new Map}init(){pr.getInstance().registerApi({apiName:"sendMessage",context:this,matcher:r=>![ZD,XD,_R,TR,NR].includes(r[0].type)})}registerSendProtocol(r,g,u){this._sendProtocolMap.set(r,g.bind(u))}sendMessage(r,g){return mA(this,void 0,void 0,function*(){const{TOTAL_COUNT:u,SEND_COST:E,SUCCESS_COUNT:m,FAILED_COUNT:D}=cr;if(!(r instanceof KE))throw new gs({code:da.MSG_INSTANCE_REQUIRED});const M=r.validateBeforeSend();if(!M.isValid){const{code:W,message:oA=""}=M.error||{};throw new gs({code:W,message:oA})}this._reportMessageSendQuality({name:u,message:r});let T=!1;const{messageDataHandler:P}=De.message||{};try{const{messageControlInfo:W}=g||{};let oA=null;P.addRandomOfSentMessage(r.random);const EA=Date.now(),wA=this._getSendProtocol(r);if(r.conversationType===Kr.CONV_C2C?(T=g?.onlineUserOnly===!0,oA=yield wA(r,g)):r.conversationType===Kr.CONV_GROUP&&(yield this._validateBeforeSendGroupMessage(r),oA=yield wA(r,g)),oA){const{messageDropReason:kA,sequence:xA,time:LA}=oA;if(this._updateNickAndAvatarOfSentMessageByMe(r),kA&&this._logRateLimitInfo(r,xA,kA),this._reportMessageSendQuality({name:m,message:r}),this._reportMessageSendQuality({name:E,message:r,startTs:EA}),r.isResend===!0){const SA=P.findMessage(r.ID);SA&&(De.ssoLog.debug("sendMessage",`sendMessage resend ok. ID:${SA.ID}`),P.deleteConversationMessage(SA))}return r.status=Yr.SUCCESS,r.time=LA,r.conversationType===Kr.CONV_GROUP&&(r.sequence=xA),T?r._onlineOnlyFlag=!0:(P.storeConversationMessage(r),this._applySentMessageControlInfo(r,W),this._emitOnlineMessageSent(r)),r.type===wg.MSG_STREAM?{code:0,data:{message:r,streamMessageID:oA.streamMessageID}}:{code:0,data:{message:r}}}}catch(W){r.status=Yr.FAIL,P.removeRandomOfSentMessage(r.random);let{errorCode:oA}=W||{},EA=W?.errorInfo||W?.message||"";throw this._hasRiskContent(oA)&&(r.hasRiskContent=!0),T||this._isRejectedByRestApi(oA)||P.storeConversationMessage(r),this._reportMessageSendQuality({name:D,message:r,error:W}),new gs({code:oA,message:EA,data:{message:r},moreMessage:`type:${r.type} from:${r.from} to:${r.to}`})}})}_hasRiskContent(r){return r===80001||r===80004}_isRejectedByRestApi(r){return r>=10100&&r<=10200||r>=120001&&r<=13e4}_emitOnlineMessageSent(r){const g=r._isExcludedFromLastMessage?"":r,{conversationID:u,conversationType:E}=r,m=zc(u)?ro.TOPIC_NEW_MESSAGE:ro.NEW_MESSAGE;De.notificationCenter.emitInnerEvent(m,{result:{conversationUpdateFieldList:[{conversationID:u,type:E,message:r,lastMessage:g,unreadCount:0}]}})}_applySentMessageControlInfo(r,g){g&&AN(g)&&(g.excludedFromLastMessage===!0&&(r._isExcludedFromLastMessage=!0),g.excludedFromUnreadCount===!0&&(r._isExcludedFromUnreadCount=!0))}_logRateLimitInfo(r,g,u){const E=`from:${r.from} to:${r.to} sequence:${g} messageDropReason:${u}`;De.ssoLog.warn("messageDropReason",E)}_updateNickAndAvatarOfSentMessageByMe(r){const{messageDataHandler:g}=De.message||{};let u=!1;const{conversationID:E}=r,m=g.getLatestMsgSentByMe(E);if(m){const{nick:D,avatar:M}=m;D===r.nick&&M===r.avatar||(u=!0),u&&g.updateNickAndAvatarOfSentMessage({conversationID:E,latestNick:r.nick,latestAvatar:r.avatar,isSentByMe:!0})}}_validateBeforeSendGroupMessage(r){return mA(this,void 0,void 0,function*(){var g,u,E;const{to:m,from:D}=r;let M=m,T=ip.getGroup(M);if($r({groupID:M})&&T?.isSupportTopic)throw new gs({code:da.MSG_SEND_GRP_WITH_TOPIC_FAIL});if(zc(m)&&([M]=m.split(na.TOPIC),T=ip.getGroup(M)),!T&&typeof((g=pr.getInstance().getApiMap())===null||g===void 0?void 0:g.getGroupProfile)=="function"){const P=yield pr.getInstance().getApiMap().getGroupProfile({groupID:M});if(((E=(u=P?.data)===null||u===void 0?void 0:u.group)===null||E===void 0?void 0:E.type)===Uo.GRP_AVCHATROOM){const W=rs({code:da.MSG_SEND_FAIL_NOT_IN_AV,replacement1:D,replacement2:M});throw new gs({code:da.MSG_SEND_FAIL_NOT_IN_AV,message:W})}}return!0})}_reportMessageSendQuality(r){De.notificationCenter.emitInnerEvent(ro.QUALITY_STAT,{label:lI.MESSAGE_SEND_SUCCESS_RATE,data:r})}_getSendProtocol(r){return this._sendProtocolMap.get(r.type)||Nh}}var eN=new class{constructor(){this._sparseMessagesByConversation=new Map,this._latestMessageSentByPeerMap=new Map,this._latestMessageSentByMeMap=new Map,this._randomOfSentMessageList=new Set}init(){De.notificationCenter.subscribeInnerEvent(ro.LOGOUT,this._reset,this),De.notificationCenter.subscribeInnerEvent(ro.DESTROY,this._dispose,this)}get _messagesByConversation(){return op.getMessages()}storeConversationMessage(s,r=!1){if(an)return!0;const{conversationID:g}=s;if(!g||(this._messagesByConversation.has(g)||this._messagesByConversation.set(g,new Map),this._shouldSkipStoreMessage(s,r)))return!1;const u=this._getUniqueIdOfMessage(s);return this._messagesByConversation.get(g).set(u,s),this._updateLatestMessageMap(s),!0}_updateLatestMessageMap(s){const{conversationID:r}=s;s.flow==="out"?this._setLatestMsgSentByMe(r,s):r.startsWith("C2C")&&this._setLatestMsgSentByPeer(r,s)}_shouldSkipStoreMessage(s,r){const g=this._getUniqueIdOfMessage(s),u=this._messagesByConversation.get(s.conversationID);if(u?.has(g)){const E=u?.get(g);if(!r||E?.isModified===!0)return!0}return!1}deleteConversationMessage(s){var r;const{conversationID:g=""}=s,u=this._getUniqueIdOfMessage(s);this._messagesByConversation.has(g)&&((r=this._messagesByConversation.get(g))===null||r===void 0||r.delete(u))}modifyConversationMessage(s,r){var g;if(!this._messagesByConversation.has(s)&&!this._sparseMessagesByConversation.has(s))return{isUpdated:!1,message:null};const u=this._getUniqueIdOfMessage(r),E=this._getMessageFromLocalMessage(s,u);if(E){const{messageVersion:m,elements:D,cloudCustomData:M,checkResult:T=0}=r,P=T>1;if(De.ssoLog.debug("modifyConversationMessage",`conversationToMessageMap modifyConversationMessage localVersion:${E.version} remoteVersion:${m}`),E.versionE.ID===s)||null,r)break;if(!r){const u=Array.from(this._sparseMessagesByConversation.values());for(const E of u)if(r=E.get(s)||null,r)break}return r}deleteConversationMessageList(s){this._messagesByConversation.has(s)&&(this._messagesByConversation.delete(s),this._latestMessageSentByMeMap.delete(s),this._latestMessageSentByPeerMap.delete(s)),this._sparseMessagesByConversation.has(s)&&this._sparseMessagesByConversation.delete(s)}revokeMessage({conversationID:s,sequence:r,random:g,revoker:u}){const E=this._messagesByConversation.get(s);let m=null;if(E){const D=Array.from(E.values());if(m=this._findMessageBySequenceAndRandom({messageList:D,random:g,sequence:r}),m){const M=this._getUniqueIdOfMessage(m);return op.updateMessage(s,[M],{isRevoked:!0,revoker:u,operation:yc.revoke}),m}}if(this._sparseMessagesByConversation.has(s)){const D=Array.from(this._sparseMessagesByConversation.get(s).values());if(m=this._findMessageBySequenceAndRandom({messageList:D,random:g,sequence:r}),m)return m.isRevoked=!0,m.revoker=u,m}}_findMessageBySequenceAndRandom({messageList:s,sequence:r,random:g}){for(let u=0;u0){const D=new Map([...E,...m.entries()]);this._messagesByConversation.set(g,D),this._updateLatestMessageSentByMe(g),this._updateLatestMessageSentByPeer(g)}return u}storeSparseMessageList(s){if(s.length===0)return;const{conversationID:r}=s[0],g=s.length;this._sparseMessagesByConversation.has(r)||this._sparseMessagesByConversation.set(r,new Map);const u=this._sparseMessagesByConversation.get(r);for(let E=0;E=0;u--)if(g[u].flow==="out"){this._setLatestMsgSentByMe(s,g[u]);break}}}_updateLatestMessageSentByPeer(s){var r;const g=Array.from(((r=this._messagesByConversation.get(s))===null||r===void 0?void 0:r.values())||[]);if(g.length!==0&&s.startsWith("C2C")){for(let u=g.length-1;u>=0;u--)if(g[u].flow==="in"){this._setLatestMsgSentByPeer(s,g[u]);break}}}_getUniqueIdOfMessage(s){const{from:r,to:g,random:u,sequence:E,time:m}=s;return`${r}-${g}-${u}-${E}-${m}`}_setLatestMsgSentByPeer(s,r){this._latestMessageSentByPeerMap.set(s,r)}_setLatestMsgSentByMe(s,r){this._latestMessageSentByMeMap.set(s,r)}getLatestMsgSentByPeer(s){return this._latestMessageSentByPeerMap.get(s)}getLatestMsgSentByMe(s){return this._latestMessageSentByMeMap.get(s)}addRandomOfSentMessage(s){this._randomOfSentMessageList.add(s)}removeRandomOfSentMessage(s){this._randomOfSentMessageList.delete(s)}updateNickAndAvatarOfSentMessage(s){const{conversationID:r="",latestAvatar:g,latestNick:u,isSentByMe:E=!0}=s,m=this._messagesByConversation.get(r);if(!m)return;const D=Array.from(m.values()),M=E?"out":"in";D.forEach(T=>{const{nick:P,avatar:W,flow:oA}=T;oA===M&&(P!==u&&(T.nick=u),W!==g&&(T.avatar=g))})}isInMessageList(s){var r;const{conversationID:g}=s;if(!g||!this._messagesByConversation.has(g))return!1;const u=this._getUniqueIdOfMessage(s);return(r=this._messagesByConversation.get(g))===null||r===void 0?void 0:r.has(u)}isMessageSentByCurrentInstance(s){const{random:r}=s;return this._randomOfSentMessageList.has(r)}getContinuousMessagesByConversation(){return this._messagesByConversation}getLocalMessageList(s){const r=this._messagesByConversation.get(s);return r?[...r.values()]:[]}getSparseMessageList(s){const r=this._sparseMessagesByConversation.get(s);return r?[...r.values()]:[]}_reset(){this._messagesByConversation.clear(),this._latestMessageSentByPeerMap.clear(),this._latestMessageSentByMeMap.clear(),this._randomOfSentMessageList.clear()}_dispose(){this._reset(),De.notificationCenter.unSubscribeInnerEvent(ro.LOGOUT,this._reset,this),De.notificationCenter.unSubscribeInnerEvent(ro.DESTROY,this._dispose,this)}};function of(s,r){const g=wB.getConversation(s);if(g?.lastMessage){const{lastMessage:u}=g,{lastTime:E,lastSequence:m,version:D}=u,{time:M,sequence:T,messageVersion:P,elements:W,cloudCustomData:oA}=r;E===M&&m===T&&D!==P&&(u.type=W[0].type,u.payload=W[0].content,u.messageForShow=Zc(u.type,u.payload),u.cloudCustomData=oA,u.version=P,wB.updateConversation(s,{lastMessage:u}))}}class GR{init(){pr.getInstance().registerApi({apiName:"modifyMessage",context:this})}modifyMessage(r){return mA(this,void 0,void 0,function*(){const{to:g,payload:u,sequence:E,conversationType:m,random:D,time:M,from:T,type:P}=r;if(this._canModifyMessageElement(P)){const W=r?._elements||[];W.length>=1&&(W[0].type=P,W[0].content=u)}try{let W=null,oA=null;if(m===Kr.CONV_C2C?W=yield Gh(r):m===Kr.CONV_GROUP&&(W=yield NB(r)),W){let EA=`${m}${g}`;return g===ir()&&m===Kr.CONV_C2C&&(EA=`${m}${T}`),oA={conversationType:m,from:T,to:g,time:M,random:D,sequence:E,elements:W?.elements,cloudCustomData:W?.cloudCustomData,messageVersion:W?.messageVersion,conversationID:EA},this._handleModifyMessageSuccess(oA),{code:0,data:{message:r},successLog:{message:`to:${g}`}}}}catch(W){const{errorCode:oA}=W||{};throw new gs({functionName:"modifyMessage",code:oA,moreMessage:`to:${g}`})}})}_handleModifyMessageSuccess(r){const{conversationID:g}=r,{isUpdated:u,message:E}=De.message.messageDataHandler.modifyConversationMessage(g,r);u===!0&&De.notificationCenter.emitOuterEvent(Mr.MESSAGE_MODIFIED,{name:Mr.MESSAGE_MODIFIED,data:[E]}),De.notificationCenter.emitInnerEvent(ro.MESSAGE_MODIFIED,{conversationID:g,message:E}),of(g,r)}_canModifyMessageElement(r){return[qE.MSG_TEXT,qE.MSG_CUSTOM,qE.MSG_LOCATION,qE.MSG_FACE].includes(r)}}class kh{init(){const{notificationCenter:r}=De,{InnerEventSubType:g}=r;ws.getInstance().registerWorkflowStep(Jt.RECEIVE_C2C_NEW_MESSAGE,Wt.HANDLE_C2C_NEW_MESSAGE,this._handleC2CMessagePush,this),ws.getInstance().registerWorkflowStep(Jt.RECEIVE_C2C_NEW_MESSAGE,Wt.EMIT_C2C_MESSAGE_EVENT,this._emitMessageEventsAfterReceiveNewMessage,this),ws.getInstance().registerWorkflowStep(Jt.SYNC_SERVER_INFO_AFTER_RE_ONLINE,Wt.EMIT_C2C_MESSAGE_EVENT,this._emitMessageEventsAfterSyncUnreadMessage,this),r.subscribeInnerEvent(ro.MESSAGE_PUSH,g.C2C_REALTIME_MESSAGE,this._executeReceiverNewMessageWorkFlow,this),r.subscribeInnerEvent(ro.MESSAGE_PUSH,g.C2C_MESSAGE_MODIFIED,this._handleC2CMessageModify,this),r.subscribeInnerEvent(ro.DESTROY,this._dispose,this)}_executeReceiverNewMessageWorkFlow(r){ws.getInstance().executeWorkflow(Jt.RECEIVE_C2C_NEW_MESSAGE,r)}_handleC2CMessagePush(r){const g=r.data||{},{messageDataHandler:u}=De.message||{},E=[],m=new Map;return g.C2cMsgArray.forEach(D=>{const M=this._generateC2CMessage(D);this._updateMessageProfile(M);let T=M.isModified===1;u.isMessageSentByCurrentInstance(M)?M.isModified=T:T=!1,M._onlineOnlyFlag?u.isMessageSentByCurrentInstance(M)||E.push(M):TB(M)&&(u.storeConversationMessage(M)&&ap({conversationUpdateFields:m,message:M}),u.isMessageSentByCurrentInstance(M)&&!T||E.push(M))}),{conversationUpdateFieldList:[...m.values()],messages:E}}_emitMessageEventsAfterReceiveNewMessage(r){var g;const{messages:u=[]}=((g=r.result)===null||g===void 0?void 0:g[Wt.HANDLE_C2C_NEW_MESSAGE])||{};this._emitMessageEvents(u)}_emitMessageEventsAfterSyncUnreadMessage(r){var g;const{messages:u=[]}=((g=r.result)===null||g===void 0?void 0:g[Wt.UNREAD_MESSAGE_SYNC])||{};this._emitMessageEvents(u)}_emitMessageEvents(r){const g=r?.filter(E=>E?.isModified===!0)||[];g.length>0&&De.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:g});const u=r?.filter(E=>!E?.isModified);u.length>0&&De.notificationCenter.emitOuterEvent("onMessageReceived",{name:"onMessageReceived",data:u})}_generateC2CMessage(r){const g=Kr.CONV_C2C,u=$m(r),E=De.message.messageFactory.createMessage(Object.assign(Object.assign({},u),{conversationType:g,flow:eE.IN})),{elements:m}=u;return E.setElement(m),E}_updateMessageProfile(r){var g;const{messageDataHandler:u}=De.message||{},E=(g=De.store.get("login"))===null||g===void 0?void 0:g.userId,{from:m,nick:D,avatar:M,conversationID:T=""}=r;if(m!==E){const P=u.getLatestMsgSentByPeer(T);if(P){const{nick:W,avatar:oA}=P;n(D)||n(M)?(r.nick=c(W)?W:r.nick,r.avatar=c(oA)?oA:r.avatar):D===W&&M===oA||(u.updateNickAndAvatarOfSentMessage({conversationID:T,latestNick:D,latestAvatar:M,isSentByMe:!1}),this._updateConversationUserProfile({conversationID:T,nick:D,avatar:M}))}}else{const P=u.getLatestMsgSentByMe(T);!P||D===P.nick&&M===P.avatar||u.updateNickAndAvatarOfSentMessage({conversationID:T,latestNick:D,latestAvatar:M,isSentByMe:!0})}}_updateConversationUserProfile(r){const{conversationID:g,nick:u,avatar:E}=r,m=wB.getConversation(g),{userProfile:D={}}=m||{};D.avatar===E&&D.nick===u||wB.updateConversation(g,{userProfile:Object.assign(Object.assign({},D),{nick:u,avatar:E})})}_updateMessageListDueToModify(r){const{conversationID:g}=r,{isUpdated:u,message:E}=De.message.messageDataHandler.modifyConversationMessage(g,r);u===!0&&De.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:[E]}),De.notificationCenter.emitInnerEvent("ModifyMessageSuccess",r),of(g,r)}_handleC2CMessageModify(r){r.C2cMsgModNotifys.forEach(g=>{var u;const E=Kr.CONV_C2C;let m=Af(g);const{to:D,from:M}=m;let T=`${E}${D}`;D===((u=De.store.get("login"))===null||u===void 0?void 0:u.userId)&&(T=`${E}${M}`),m=Object.assign({conversationType:E,conversationID:T},m),this._updateMessageListDueToModify(m)})}_dispose(){const{notificationCenter:r}=De,{InnerEventSubType:g}=r;De.notificationCenter.unSubscribeInnerEvent(ro.MESSAGE_PUSH,g.C2C_REALTIME_MESSAGE,this._handleC2CMessagePush,this),De.notificationCenter.unSubscribeInnerEvent(ro.MESSAGE_PUSH,g.C2C_MESSAGE_MODIFIED,this._handleC2CMessageModify,this),De.notificationCenter.unSubscribeInnerEvent(ro.DESTROY,this._dispose,this)}}class Lh{init(){const{notificationCenter:r}=De,{InnerEventSubType:g}=r;ws.getInstance().registerWorkflowStep(Jt.RECEIVE_GROUP_NEW_MESSAGE,Wt.HANDLE_GROUP_NEW_MESSAGE,this._handleGroupMessagePush,this),ws.getInstance().registerWorkflowStep(Jt.RECEIVE_GROUP_NEW_MESSAGE,Wt.EMIT_GROUP_MESSAGE_EVENT,this._emitMessageEvents,this),r.subscribeInnerEvent(ro.MESSAGE_PUSH,g.GROUP_REALTIME_MESSAGE,this._executeReceiverNewMessageWorkFlow,this),r.subscribeInnerEvent(ro.MESSAGE_PUSH,g.GROUP_MESSAGE_MODIFIED,this._handleGroupMessageModify,this),r.subscribeInnerEvent(ro.DESTROY,this._dispose,this)}_executeReceiverNewMessageWorkFlow(r){this._canExecuteReceiverNewMessageWorkFlow(r)&&ws.getInstance().executeWorkflow(Jt.RECEIVE_GROUP_NEW_MESSAGE,r)}_handleGroupMessagePush(r){const g=r.data||{},{messageDataHandler:u}=De.message,E=[],m=new Map,D=g?.GroupMsgArray;return D?.forEach(M=>{if(M.GroupInfo.NotVisible===1)return;const T=this._generateGroupMessage(M);this.updateMessageProfile(T);let P=T.isModified===1;u.isMessageSentByCurrentInstance(T)?T.isModified=P:P=!1,T._onlineOnlyFlag?u.isMessageSentByCurrentInstance(T)||E.push(T):TB(T)&&u.storeConversationMessage(T)&&(E.push(T),ap({conversationUpdateFields:m,message:T}))}),{conversationUpdateFieldList:[...m.values()],messages:E}}_emitMessageEvents(r){var g;const{messages:u}=((g=r.result)===null||g===void 0?void 0:g[Wt.HANDLE_GROUP_NEW_MESSAGE])||{},E=u?.filter(D=>D?.isModified===!0)||[];E.length>0&&De.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:E});const m=u?.filter(D=>!D?.isModified)||[];m.length>0&&De.notificationCenter.emitOuterEvent("onMessageReceived",{name:"onMessageReceived",data:m})}_generateGroupMessage(r){const g=Kr.CONV_GROUP,u=KD(r),E=De.message.messageFactory.createMessage(Object.assign(Object.assign({},u),{conversationType:g,flow:eE.IN})),{elements:m}=u;return E.setElement(m),E}updateMessageProfile(r){var g;const{messageDataHandler:u}=De.message||{},E=(g=De.store.get("login"))===null||g===void 0?void 0:g.userId,{from:m,nick:D,avatar:M,conversationID:T="",_elements:P}=r;if(m===E){const W=u.getLatestMsgSentByMe(T);!W||D===W.nick&&M===W.avatar||u.updateNickAndAvatarOfSentMessage({conversationID:T,latestNick:D,latestAvatar:M,isSentByMe:!0})}else if(m===Uo.CONV_SYSTEM){const{operationType:W,memberInfoList:oA,operatorInfo:EA}=P;let wA={};if(Rs(oA)?Rs(EA)||(wA=EA):[Tg.JOINED,Tg.KICKED,Tg.ADMIN_SET,Tg.ADMIN_CANCELED].includes(W)&&(wA=Object.assign({},oA[0])),!Rs(wA)){const{nick:kA="",avatar:xA=""}=wA;r.nick=kA,r.avatar=xA}}}_updateMessageListDueToModify(r){const{conversationID:g}=r,{isUpdated:u,message:E}=De.message.messageDataHandler.modifyConversationMessage(g,r);u===!0&&De.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:[E]}),of(g,r)}_handleGroupMessageModify(r){r.GroupMsgModNotifys.forEach(g=>{const u=Kr.CONV_GROUP;let E=jD(g);const{topicID:m,groupID:D}=E,M=m||D,T=`${u}${M}`;E=Object.assign({conversationType:u,conversationID:T,to:M},E),this._updateMessageListDueToModify(E)})}_dispose(){const{notificationCenter:r}=De,{InnerEventSubType:{GROUP_REALTIME_MESSAGE:g,GROUP_MESSAGE_MODIFIED:u}}=r;r.unSubscribeInnerEvent(ro.MESSAGE_PUSH,g,this._handleGroupMessagePush,this),r.unSubscribeInnerEvent(ro.MESSAGE_PUSH,u,this._handleGroupMessageModify,this),r.unSubscribeInnerEvent(ro.DESTROY,this._dispose,this)}_canExecuteReceiverNewMessageWorkFlow(r){var g,u;const{GroupId:E,GroupType:m}=((u=(g=r?.GroupMsgArray)===null||g===void 0?void 0:g[0])===null||u===void 0?void 0:u.GroupInfo)||{},D=m===La.GRP_AVCHATROOM;return!(!ip.getGroup(E)&&D)}}var $D=new class{constructor(){this.c2cMessageReceiver=new kh,this.groupMessageReceiver=new Lh}init(){this.c2cMessageReceiver.init(),this.groupMessageReceiver.init()}};const bR={createCustomMessage:{to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1},payload:{required:!0,rules:["object"],allowEmpty:!1},cloudCustomData:{required:!1,rules:["string"],allowEmpty:!1},priority:{required:!1,rules:["string"],allowEmpty:!1},customModerationConfigurationID:{required:!1,rules:["string"],allowEmpty:!1}},sendMessage:[{key:"message",required:!0,rules:["object"],allowEmpty:!1},{key:"options",required:!1,rules:["object"],allowEmpty:!1}],createTextMessage:{to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1,customValidator:s=>!(!s.startsWith("C2C")&&!s.startsWith("GROUP"))||"conversationType is invalid."},payload:{required:!0,rules:["object"],allowEmpty:!1,customValidator:s=>function(r){var g;return typeof r?.text!="string"||typeof r.text=="string"&&((g=r?.text)===null||g===void 0?void 0:g.length)===0?"payload.text must be a string":!0}(s)}}},tN={createCustomMessage:!0,sendMessage:!0,modifyMessage:!0};var iN=new class{constructor(){this._historyMessageListFetchAnchors=new Map,this.completedHistoryConversations=new Set}getGroupRoamingMessagesByAnchor(s){return mA(this,void 0,void 0,function*(){try{const{conversationID:r,count:g,direction:u,sequence:E,messageSequenceList:m,shouldMarkCompleted:D=!1,getType:M}=s,T=r.replace(ka.CONV_GROUP,""),P=[];let W=E;if(u===Kc.BACKWARD){if(typeof E!="number")return{messageList:[],hasNoMoreHistoryMessage:!1,nextReqMessageIDFromServer:""};W=E+g-1}const oA=yield bh({groupID:T,count:g,messageSequence:W,messageSequenceList:m,getType:M});if(oA){const{RspMsgList:EA=[],NextReqMsgSeq:wA=0,IsFinished:kA,InvisibleMsgSeq:xA}=oA,LA=`groupID:${T} sequence:${E} reqSeq:${W} direction:${u} complete:${kA} nextSequence:${wA} remoteMsgCount:${EA.length} invisibleSequenceList:${xA}`,SA=[];for(let Ie=0;Ie=E),OA&&D&&this.completedHistoryConversations.add(r);const qA=_B(SA);return De.ssoLog.info("getGroupRoamingMessagesByAnchor",LA),{messageList:qA,invisibleSequenceList:xA,nextReqMessageIDFromServer:wA,hasNoMoreHistoryMessage:OA,serverGroupTipList:P}}}catch(r){const{errorCode:g,errorInfo:u}=r||{};throw new gs({code:g,message:u})}})}clearHistoryMessageListFetchAnchors(s){this._historyMessageListFetchAnchors.delete(s)}isHistoryMessageFetchCompleted(s){return this.completedHistoryConversations.has(s)}_parseMessage(s){var r;const g=ka.CONV_GROUP;s.Event===4&&(s.MsgBody.MsgType=Uo.MSG_GRP_TIP);const u=KD(s),E=Xm.createMessage(Object.assign(Object.assign({},u),{conversationType:g,flow:"in"}));return RB(((r=u.elements)===null||r===void 0?void 0:r.content)||{},E),E.setElement(u.elements),E}getC2CRoamingMessagesByAnchor(s){return mA(this,void 0,void 0,function*(){var r;try{const{conversationID:g,count:u,messageID:E,time:m,direction:D,shouldMarkCompleted:M=!1}=s;let T=m,P="";if(!m){const EA=E?De.message.messageDataHandler.findMessage(E):null;if(T=EA?.time||0,E&&this._historyMessageListFetchAnchors.has(g)){const wA=this._historyMessageListFetchAnchors.get(g);T=wA.lastMessageTime,P=wA.messageKey}}const W=g.replace(ka.CONV_C2C,""),oA=yield ef({count:u,lastMessageTime:T,messageKey:P,peerAccount:W,direction:D});if(oA){const{MsgList:EA=[],Complete:wA,MsgKey:kA,LastMsgTime:xA}=oA;this._historyMessageListFetchAnchors.set(g,{messageKey:kA,lastMessageTime:xA});const LA=[];for(let Ie=0;Ie{const{tag:E,value:m}=u;E&&E.indexOf(eS)>-1?g.profileCustomField.push({key:E,value:m}):bd.has(E)&&(g[bd.get(E)]=m)}),Object.assign(Object.assign({},sf),g)}parseProfileItem(s=[]){const r=[];return s.forEach(g=>{r.push({tag:g.Tag,value:g.Value})}),r}parseProfileList(s=[]){const r=[];return s.forEach(g=>{r.push({tag:g.Tag,value:g.ValueBytes})}),r}convertParamsToProfile(s){const r=[];return Object.keys(s).forEach(g=>{g!==tS&&r.push({tag:Yl[g.toUpperCase()],value:s[g]})}),s.profileCustomField&&C(s.profileCustomField)&&s.profileCustomField.forEach(g=>{r.push({tag:g.key,value:g.value})}),r}normalizeProfileFields(s){const r={},g=[];return s.forEach(u=>{const{tag:E,value:m}=u;if(E&&E.indexOf(eS)>-1&&g.push({key:E,value:m}),bd.has(E)&&m!==void 0){const D=bd.get(E);r[D]=m}}),g.length>0&&(r.profileCustomField=g),r}};const{generateProtocolData:LR}=De.common;function UR(s){return mA(this,void 0,void 0,function*(){const r="profile.portrait_get_all",g={From_Account:ir(),UserItem:[]};s.forEach(D=>{g.UserItem.push({CustomSequence:0,StandardSequence:0,To_Account:D})});const u=LR({servcmd:r,data:g}),E=`${u.head.seq}${r}`,m=yield De.channel.sendPacket(u,{requestId:E});if(m)return function(D){const{ActionStatus:M,ErrorCode:T,ErrorDisplay:P,ErrorInfo:W,UserProfileItem:oA}=D,EA=[];return oA.map(wA=>{const{To_Account:kA,CustomSequence:xA,ResultCode:LA,ResultInfo:SA,StandardSequence:OA,ProfileItem:qA}=wA,Ie=tE.parseProfileItem(qA);EA.push({userId:kA,customSequence:xA,resultCode:LA,resultInfo:SA,standardSequence:OA,profileItem:Ie})}),{actionStatus:M,errorCode:T,errorDisplay:P,errorInfo:W,userProfile:EA}}(m)})}function jE(s){return rc.getFriendMap().has(s)}const{isEmpty:iS}=De.utils;class nf{constructor(){this._strangerProfileMap=new Map}init(){pr.getInstance().registerApi({apiName:"getMyProfile",context:this}),pr.getInstance().registerApi({apiName:"getUserProfile",context:this}),pr.getInstance().registerApi({apiName:"updateMyProfile",context:this}),this.createProfile=tE.createProfile.bind(tE);const{notificationCenter:r}=De;ws.getInstance().registerWorkflowStep(Jt.SYNC_SERVER_INFO_AFTER_LOGIN,Wt.USER_PROFILE_SYNC,this.getMyProfileCacheThenServer,this),r.subscribeInnerEvent(ro.MESSAGE_PUSH,r.InnerEventSubType.PROFILE_MODIFIED,this._onProfileDataModify,this),r.subscribeInnerEvent(ro.LOGOUT,this._reset,this),r.subscribeInnerEvent(ro.DESTROY,this._dispose,this)}getMyProfile(){return mA(this,void 0,void 0,function*(){try{const r=ir(),g=yield UR([r]);if(g){const u=this._handleProfileFormResponse(g)[0];return rc.getUserProfileMap().set(r,u),{code:0,data:u}}}catch(r){const{errorCode:g,errorInfo:u}=r;throw new gs({functionName:"getMyProfile",code:g,message:u})}})}getUserProfile(r){return mA(this,void 0,void 0,function*(){try{let{userIDList:g}=r;const{userIdListToRequest:u,profileFromCache:E}=this._filterRequestAndCacheUsers(g);if(u.length===0)return{code:0,data:E,successLog:{message:`userIDList.length:${g.length}`}};u.length>kR&&(De.ssoLog.warn("getUserProfile","userIdListToRequest.length > 1000"),u.length=kR);const{data:m,error:D}=yield this._batchFetchUserProfiles(u),M=u.length,T=m.length,P=M-T;if(E.length===0&&M===P&&!iS(D))throw D;if(C(m))return m.forEach(oA=>{jE(oA.userID)?rc.getUserProfileMap().set(oA.userID,oA):this._strangerProfileMap.set(oA.userID,oA)}),{code:0,data:m.concat(E),successLog:{message:`getUserProfile query:${M} success:${T} fail:${P} from cache:${E.length}`}}}catch(g){throw new gs(g)}})}getMyProfileCacheThenServer(){return mA(this,void 0,void 0,function*(){const r=ir(),g=rc.getUserProfileMap().has(r);return g?{code:0,data:g}:this.getMyProfile()})}updateMyProfile(r){return mA(this,void 0,void 0,function*(){const g=ir(),u={};for(const m in r)r[m]!==void 0&&(u[m]=r[m]);const E=tE.convertParamsToProfile(u);try{yield function(P){return mA(this,void 0,void 0,function*(){const W="profile.portrait_set",oA=LR({servcmd:W,data:P}),EA=`${oA.head.seq}${W}`,wA=yield De.channel.sendPacket(oA,{requestId:EA});if(wA){const{ActionStatus:kA,ErrorCode:xA,ErrorDisplay:LA,ErrorInfo:SA}=wA;return{actionStatus:kA,errorCode:xA,errorDisplay:LA,errorInfo:SA}}})}({From_Account:g,ProfileItem:E});const D=rc.getUserProfile(g);let M;M=D?Object.assign(Object.assign({},D),u):tE.createProfile(g,E);const T=!rg(D,M,["lastUpdatedTime"]);return M.lastUpdatedTime=Date.now(),rc.getUserProfileMap().set(g,M),T&&this._emitProfileUpdated(M),{code:0,data:M,successLog:{message:`profileArray: ${De.utils.safeStringify(E)}`}}}catch(m){const{errorCode:D,errorInfo:M}=m;throw new gs({functionName:"updateMyProfile",code:D,message:M,moreMessage:`params: ${De.utils.safeStringify(r)}`})}})}updateMyNickAndAvatar(r){return mA(this,void 0,void 0,function*(){const g=ir(),u=Date.now(),E=rc.getUserProfile(g);let m={};m=E?Object.assign(E,r):tE.createProfile(g,r),m.lastUpdatedTime=u,rc.getUserProfileMap().set(g,m)})}_onProfileDataModify(r){const g=function(m){const{Profile_Account:D,PushType:M,ProfileList:T}=m;return{userId:D,pushType:M,profileList:tE.parseProfileList(T)}}(r.ProfileDataMod[0]);if(iS(g))return;const{isProfileUpdated:u,profile:E}=this._handleProfileModified(g);u&&this._emitProfileUpdated(E)}_emitProfileUpdated(r){De.notificationCenter.emitInnerEvent(ro.PROFILE_UPDATE,{name:ro.PROFILE_UPDATE,data:[r]}),De.notificationCenter.emitOuterEvent(Mr.PROFILE_UPDATED,{name:Mr.PROFILE_UPDATED,data:[r]}),wB.updateConversation(`C2C${r?.userID}`,{userProfile:r})}_dispose(){const{notificationCenter:r}=De;r.unSubscribeInnerEvent(ro.LOGOUT,this._reset,this),r.unSubscribeInnerEvent(ro.MESSAGE_PUSH,r.InnerEventSubType.PROFILE_MODIFIED,this._onProfileDataModify,this),r.unSubscribeInnerEvent(ro.DESTROY,this._dispose,this),this._reset()}_handleProfileModified(r){const{userId:g,profileList:u}=r,E=rc.getUserProfile(g);if(!(ir()===g||jE(g)&&E))return{isProfileUpdated:!1,profile:null};const m=tE.normalizeProfileFields(u),D=Object.keys(m).some(W=>W===tS?this._isCustomFieldChanged(E.profileCustomField,m.profileCustomField):E[W]!==m[W]);if(!D)return{isProfileUpdated:!1,profile:E};const M=Date.now(),T=Object.prototype.hasOwnProperty.call(m,tS)?this._mergeProfileCustomField(E.profileCustomField,m.profileCustomField):E.profileCustomField,P=Object.assign(Object.assign(Object.assign({},E),m),{profileCustomField:T,lastUpdatedTime:M});return rc.getUserProfileMap().set(g,P),{isProfileUpdated:D,profile:P}}_filterRequestAndCacheUsers(r){const g=[],u=[];return r.forEach(E=>{const m=rc.getUserProfileMap().has(E);jE(E)&&m?u.push(rc.getUserProfile(E)):this._isStrangerAndProfileValid(E)?u.push(this._strangerProfileMap.get(E)):g.push(E)}),{userIdListToRequest:g,profileFromCache:u}}_handleProfileFormResponse(r){const{userProfile:g}=r;if(!Array.isArray(g))return[];const u=g.filter(m=>m.userId!=="@TLS#NOT_FOUND"&&m.userId!==""&&!iS(m.profileItem)),E=Date.now();return u.map(m=>{const D=tE.createProfile(m.userId,m.profileItem);return D.lastUpdatedTime=E,D})}_isStrangerAndProfileValid(r){var g;if(!jE(r)){const{lastUpdatedTime:u=0}=this._strangerProfileMap.get(r)||{},E=((g=De.store.get("cloudConfig"))===null||g===void 0?void 0:g.stranger_profile_expiration_time)||6e5;return Date.now()-u<=E}return!1}_chunkUserIDList(r,g){return Array.from({length:Math.ceil(r.length/g)},(u,E)=>r.slice(E*g,(E+1)*g))}_batchFetchUserProfiles(r){return mA(this,void 0,void 0,function*(){const g=[],u=[];let E={};return this._chunkUserIDList(r,100).forEach(m=>{g.push(UR(m))}),(yield Promise.allSettled(g)).forEach(m=>{if(m.status==="fulfilled"){const D=m.value,M=this._handleProfileFormResponse(D);C(M)&&u.push(...M)}else if(m.status==="rejected"){const{code:D,message:M}=m.reason||{};E={errorCode:D,message:M}}}),{data:u,error:E}})}_isCustomFieldChanged(r=[],g=[]){if(!C(g)||g.length===0)return!1;if(!C(r)||r.length===0)return!0;const u=new Map(r.map(E=>[E.key,E.value]));return g.some(E=>u.get(E.key)!==E.value)}_mergeProfileCustomField(r=[],g=[]){const u=C(r)?r.map(E=>Object.assign({},E)):[];return C(g)&&g.length!==0&&g.forEach(({key:E,value:m})=>{const D=u.find(M=>M.key===E);D?D.value=m:u.push({key:E,value:m})}),u}_reset(){rc.getUserProfileMap().clear(),this._strangerProfileMap.clear()}}const rf=new Map,oS=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];for(let s=0,r=oS.length;s>(-2*m&6)):0)E="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(E);try{return decodeURIComponent(escape(g))}catch(u){return console.warn(u),""}}const{isEmpty:sN}=De.utils,{generateProtocolData:af}=De.common;function FR(s){return mA(this,void 0,void 0,function*(){const r="im_open_status.ws_get_user_status",g=af({servcmd:r,data:{To_Account:s}}),u=`${g.head.seq}${r}`,E=yield De.channel.sendPacket(g,{requestId:u});if(E)return function(m){const{ErrorCode:D,ErrorInfo:M,ErrorList:T=[],UserStatusList:P=[]}=m,W=P.map(EA=>{const{To_Account:wA,Status:kA,CustomStatus:xA,Detail:LA=[]}=EA;return{userID:wA,statusType:kA,customStatus:cp(xA),onlineDevices:nN(LA)}}),oA=T.map(EA=>{const{To_Account:wA,Invalid_Account:kA,ErrorCode:xA,ErrorInfo:LA}=EA;return{userID:sN(kA)?wA:kA,code:xA,message:LA}});return{errorCode:D,errorInfo:M,successUserList:W,failureUserList:oA}}(E)})}function nN(s){const r=[];return s?.forEach(g=>{const{Platform:u,Status:E}=g;E==="Online"&&r.push(u)}),r}class rN{constructor(){this._customStatus=""}init(){const{notificationCenter:r}=De;pr.getInstance().registerApi({apiName:"getUserStatus",context:this}),pr.getInstance().registerApi({apiName:"setSelfStatus",context:this}),pr.getInstance().registerApi({apiName:"subscribeUserStatus",context:this}),pr.getInstance().registerApi({apiName:"unsubscribeUserStatus",context:this}),ws.getInstance().registerWorkflowStep(Jt.SYNC_SERVER_INFO_AFTER_RE_ONLINE,Wt.USER_STATUS_UPDATE,this._onReOnline,this),r.subscribeInnerEvent(ro.MESSAGE_PUSH,r.InnerEventSubType.USER_STATUS_UPDATE,this._onUserStatusUpdate,this),r.subscribeInnerEvent(ro.LOGOUT,this._reset,this),r.subscribeInnerEvent(ro.DESTROY,this._dispose,this)}setSelfStatus(r){return mA(this,void 0,void 0,function*(){const g=ir(),{customStatus:u}=r;try{return yield function(E){return mA(this,void 0,void 0,function*(){const m="im_open_status.ws_set_custom_status",D=af({servcmd:m,data:{CustomStatus:E}}),M=`${D.head.seq}${m}`,T=yield De.channel.sendPacket(D,{requestId:M});if(T){const{ErrorCode:P,ErrorInfo:W}=T;return{errorCode:P,errorInfo:W}}})}(u),this._customStatus=u,{code:0,data:{userID:g,statusType:Uh,customStatus:u},successLog:{message:`customStatus: ${u}`}}}catch(E){const{errorCode:m,errorInfo:D}=E;throw new gs({functionName:"setSelfStatus",code:m,message:D})}})}getUserStatus(r){return mA(this,void 0,void 0,function*(){const{userIDList:g=[]}=r;if(this._isOnlyMeInArray(g))return this._getMyStatus();const u=yield this._getUserStatus(g);return Object.assign(Object.assign({},u),{successLog:{message:`userIDList length: ${g.length}`}})})}setCustomStatus(r){const g=cp(r);this._customStatus=g}subscribeUserStatus(r){return mA(this,void 0,void 0,function*(){try{const{userIDList:g=[]}=r;this._checkBusinessCapabilityBits("subscribeUserStatus");const u=this._getMaxUserCount("subscribe"),E=this._sliceUserIDList(g,u),m=yield function(M){return mA(this,void 0,void 0,function*(){const{channel:T}=De,P="im_open_status.ws_status_subscribe",W=af({servcmd:P,data:{To_Account:M}}),oA=`${W.head.seq}${P}`;return yield T.sendPacket(W,{requestId:oA})})}(E),D=this._parseResponse(m);return{code:0,data:{failureUserList:D},successLog:{message:`userID length:${g.length} failCount: ${D.length}`}}}catch(g){const{errorCode:u}=g;throw new gs({functionName:"subscribeUserStatus",code:u})}})}unsubscribeUserStatus(r){return mA(this,void 0,void 0,function*(){try{this._checkBusinessCapabilityBits("unsubscribeUserStatus");const{userIDList:g=[]}=r,u=this._getMaxUserCount("unsubscribe"),E=this._sliceUserIDList(g,u),m=yield function(M){return mA(this,void 0,void 0,function*(){const{channel:T}=De,P="im_open_status.ws_status_unsubscribe";let W={};W=M.length===0?{UnsubscribeAll:1}:{To_Account:M};const oA=af({servcmd:P,data:W}),EA=`${oA.head.seq}${P}`;return yield T.sendPacket(oA,{requestId:EA})})}(E),D=this._parseResponse(m);return{code:0,data:{failureUserList:D},successLog:{message:`userID length:${g.length} failCount: ${D.length}`}}}catch(g){const{errorCode:u}=g;throw new gs({functionName:"unsubscribeUserStatus",code:u})}})}_onUserStatusUpdate(r){const{UserStatusList:g=[]}=r||{},u=g.map(E=>{const{To_Account:m,Status:D,CustomStatus:M,Platform:T}=E,P={userID:m,statusType:D,customStatus:cp(M)};return T&&(P.onlineDevices=T),P});this._emitUserStatusUpdatedEvent(u)}_onReOnline(r){const g=cp(r.data.customStatus);if(this._customStatus===g)return;this._customStatus=g;const u={userID:ir(),statusType:Uh,customStatus:g};this._emitUserStatusUpdatedEvent(u)}_emitUserStatusUpdatedEvent(r){De.notificationCenter.emitOuterEvent(Mr.USER_STATUS_UPDATED,{name:Mr.USER_STATUS_UPDATED,data:r})}_sliceUserIDList(r,g){return r.slice(0,g)}_parseResponse(r){const{ErrorList:g=[]}=r;return g.map(u=>{const{To_Account:E,Invalid_Account:m,ErrorCode:D,ErrorInfo:M}=u;return{userID:De.utils.isEmpty(m)?E:m,code:D,message:M}})}_checkBusinessCapabilityBits(r){if(!De.store.get("commercialConfig").get(oN))throw new gs({functionName:r,code:da.NO_USE,replacement1:r})}_getMaxUserCount(r){const g=De.store.get("cloudConfig")||{},u={query:{key:"status_query_count",default:500},subscribe:{key:"status_sub_count",default:100},unsubscribe:{key:"status_unsub_count",default:100}},{key:E,default:m}=u[r],D=g[E]||m;return parseInt(D,10)}_getMyStatus(){return{code:0,data:{successUserList:[{userID:ir(),statusType:Uh,customStatus:this._customStatus}],failureUserList:[]}}}_getUserStatus(r){return mA(this,void 0,void 0,function*(){try{this._checkBusinessCapabilityBits("getUserStatus");const g=this._getMaxUserCount("query"),u=this._sliceUserIDList(r,g),E=yield FR(u),{successUserList:m,failureUserList:D}=E||{};return{code:0,data:{successUserList:m,failureUserList:D}}}catch(g){const{errorCode:u}=g;throw new gs({functionName:"getUserStatus",code:u})}})}_isOnlyMeInArray(r){const g=ir();return r.length===1&&r.indexOf(g)>-1}_dispose(){const{notificationCenter:r}=De;r.unSubscribeInnerEvent(ro.MESSAGE_PUSH,r.InnerEventSubType.USER_STATUS_UPDATE,this._onUserStatusUpdate,this),r.unSubscribeInnerEvent(ro.DESTROY,this._dispose,this),r.unSubscribeInnerEvent(ro.LOGOUT,this._reset,this),this._reset()}_reset(){this._customStatus=""}}const sS={getUserProfile:{userIDList:{required:!0,rules:["array"],allowEmpty:!1}},updateMyProfile:{nick:{required:!1,rules:["string"],allowEmpty:!0},avatar:{required:!1,rules:["string"],allowEmpty:!0},gender:{required:!1,rules:["string"],allowEmpty:!0},selfSignature:{required:!1,rules:["string"],allowEmpty:!0},allowType:{required:!1,rules:["string"],allowEmpty:!0},birthday:{required:!1,rules:["number"],allowEmpty:!1},language:{required:!1,rules:["string"],allowEmpty:!0},messageSettings:{required:!1,rules:["string"],allowEmpty:!0},adminForbidType:{required:!1,rules:["string"],allowEmpty:!0},level:{required:!1,rules:["number"],allowEmpty:!1},role:{required:!1,rules:["number"],allowEmpty:!0},profileCustomField:{required:!1,rules:["array"],allowEmpty:!0,customValidator:function(s){for(const r of s){if(typeof r!="object")return"Each item in profileCustomField must be an object";if(typeof r?.key!="string")return"Each item.key in profileCustomField must be a string";if(!r?.key.startsWith(eS))return'Each item.key in profileCustomField must start with "Tag_Profile_Custom"'}return!0}}},setSelfStatus:{customStatus:{required:!0,rules:["string"],allowEmpty:!0}},getUserStatus:{userIDList:{required:!0,rules:["array"],allowEmpty:!1}},subscribeUserStatus:{userIDList:{required:!0,rules:["array"],allowEmpty:!1}},unsubscribeUserStatus:{userIDList:{required:!1,rules:["array"],allowEmpty:!0}}},aN={getMyProfile:!0,getUserProfile:!0,updateMyProfile:!0,setSelfStatus:!0,getUserStatus:!0,subscribeUserStatus:!0,unsubscribeUserStatus:!0};class gN{constructor(){this.userProfile=new nf,this.userStatus=new rN,this.userProfile.init(),this.userStatus.init(),Wc({auth:aN,params:sS})}}function nS(s){const r=[];if(!c(s))return r;const g=s.length;if(g===0)return r;for(let u=g-1;u>=0;u--)s[u]==="1"&&r.push(2**(g-u-1));return r}var kd,NC,Ld;(function(s){s.NOT_START="notStart",s.PENDING="pending",s.RESOLVED="resolved",s.REJECTED="rejected"})(kd||(kd={})),function(s){s[s.C2C=1]="C2C",s[s.GROUP=2]="GROUP"}(NC||(NC={})),function(s){s[s.C2C=8]="C2C",s[s.GROUP=2]="GROUP"}(Ld||(Ld={}));class rS{constructor(){this._name="SyncConversationHandler",this._pagingStatus=kd.NOT_START,this._pagingTimeStamp=0,this._pagingStartIndex=0,this._pagingPinnedTimeStamp=0,this._pagingPinnedStartIndex=0}init(){const{notificationCenter:r}=De;ws.getInstance().registerWorkflowStep(Jt.SYNC_SERVER_INFO_AFTER_RE_ONLINE,Wt.CONVERSATION_RECOVER,this._syncConversationList,this),ws.getInstance().registerWorkflowStep(Jt.SYNC_SERVER_INFO_AFTER_LOGIN,Wt.CONVERSATION_LIST_SYNC,this._syncConversationListAfterLogin,this),r.subscribeInnerEvent(ro.LOGOUT,this._reset,this),r.subscribeInnerEvent(ro.DESTROY,this._dispose,this),De.ssoLog.debug(`${this._name}.init`)}isSyncCompleted(){return this._pagingStatus===kd.RESOLVED}_syncConversationListAfterLogin(){return mA(this,void 0,void 0,function*(){return this._pagingStatus=kd.NOT_START,this._pagingTimeStamp=0,this._pagingStartIndex=0,this._pagingPinnedTimeStamp=0,this._pagingPinnedStartIndex=0,this._syncConversationList()})}_syncConversationList(){return mA(this,void 0,void 0,function*(){const{ssoLog:r,utils:{safeStringify:g}}=De;r.debug("_syncConversationList","start");try{const u=yield this._pagingGetConversationList(!0);this._pagingStatus=kd.RESOLVED;const{conversationList:E=[]}=u||{};return r.info("_syncConversationList",`success count:${E.length}`),u}catch(u){const E=new gs(u);r.error("_syncConversationList",`fail ${g(u)}`,{error:E})}})}_pagingGetConversationList(r){return mA(this,void 0,void 0,function*(){try{const g=[];this._pagingStatus=kd.PENDING;const u=yield function(oA){return mA(this,void 0,void 0,function*(){const{fromAccount:EA,pagingTimeStamp:wA,pagingStartIndex:kA,pagingPinnedTimeStamp:xA,pagingPinnedStartIndex:LA}=oA;return gg({servcmd:"recentcontact.page_get",data:{AssistFlags:31,MsgAssistFlags:15,OrderType:1,From_Account:EA,StartIndex:kA,TimeStamp:wA,TopStartIndex:LA,TopTimeStamp:xA}})})}({fromAccount:ir(),pagingTimeStamp:r?this._pagingTimeStamp:0,pagingStartIndex:r?this._pagingStartIndex:0,pagingPinnedTimeStamp:r?this._pagingPinnedTimeStamp:0,pagingPinnedStartIndex:r?this._pagingPinnedStartIndex:0}),{CompleteFlag:E,SessionItem:m=[],TimeStamp:D,StartIndex:M,TopTimeStamp:T,TopStartIndex:P}=u||{};let W=[];if(E===1&&(this._pagingStatus=kd.RESOLVED),m.length>0&&(W=this._getConversationOptions(m),g.push(...W)),De.notificationCenter.emitInnerEvent(ro.SYNC_CONVERSATION_LIST,{conversationUpdateFieldList:W}),this._pagingTimeStamp=D,this._pagingStartIndex=M,this._pagingPinnedTimeStamp=T,this._pagingPinnedStartIndex=P,E!==1){const{conversationList:oA}=yield this._pagingGetConversationList(r);g.push(...oA)}return{conversationList:g}}catch(g){throw g}})}_getConversationOptions(r){const{utils:{isUndefined:g}}=De,u=this._convertConversationKey(r);return this._filterValidConversations(u).map(E=>(g(E.lastMsg)&&(E.lastMsg={elements:[]}),E.type===NC.C2C?this._assembleC2COption(E):this._assembleGroupOption(E)))}_filterValidConversations(r){return r.filter(({type:g,userID:u})=>g===NC.C2C&&!function(E){let m;return E.startsWith(Uo.CONV_C2C)&&(m=E.replace(Uo.CONV_C2C,"")),m==="@TLS#ERROR"||m==="@TLS#NOT_FOUND"}(u)||g===2)}_assembleC2COption(r){var g,u,E,m,D,M,T,P;const W=this._createUserprofile(r);return{conversationID:`${Uo.CONV_C2C}${r.userID}`,type:Uo.CONV_C2C,lastMessage:{lastTime:r.time,lastSequence:r.sequence,fromAccount:r.lastC2CMsgFromAccount,type:!((g=r.lastMsg)===null||g===void 0)&&g.elements[0]?(u=r.lastMsg)===null||u===void 0?void 0:u.elements[0].type:null,payload:!((E=r.lastMsg)===null||E===void 0)&&E.elements[0]?this._amendLayersOverLimitProp(r.lastMsg.elements[0].content):null,cloudCustomData:((M=(D=(m=r.lastMsg)===null||m===void 0?void 0:m.elements)===null||D===void 0?void 0:D[0])===null||M===void 0?void 0:M.cloudCustomData)||"",isRevoked:r.lastMessageFlag===Ld.C2C,onlineOnlyFlag:!1,nick:"",nameCard:"",version:0,isPeerRead:this._computeIsPeerRead(r),revoker:((P=(T=r.lastMsg)===null||T===void 0?void 0:T.revokerInfo)===null||P===void 0?void 0:P.revoker)||null},unreadCount:0,userProfile:W,peerReadTime:r.peerReadTime,isPinned:r.isPinned===1,customData:r.customMark||"",markList:nS(r.standardMark),conversationGroupList:[],remark:r.friendRemark||"",messageRemindType:this._transMsgRemindType(r.messageRemindType)}}_createUserprofile(r){var g;const{userID:u,nick:E,peerAvatar:m}=r,D=[{tag:"Tag_Profile_IM_Nick",value:E},{tag:"Tag_Profile_IM_Image",value:m}];return(g=De.user.userProfile)===null||g===void 0?void 0:g.createProfile(u,D)}_computeIsPeerRead(r){const g=ir(),{lastC2CMsgFromAccount:u,time:E,c2cPeerReadTime:m}=r;return u===g&&E<=m}_assembleGroupOption(r){var g,u,E,m,D;return{conversationID:`${Uo.CONV_GROUP}${r.groupID}`,type:Uo.CONV_GROUP,lastMessage:Object.assign(Object.assign({lastTime:r.time,lastSequence:r.sequence,fromAccount:r.msgGroupFromAccount},this._patchTypeAndPayload(r)),{cloudCustomData:((E=(u=(g=r.lastMsg)===null||g===void 0?void 0:g.elements)===null||u===void 0?void 0:u[0])===null||E===void 0?void 0:E.cloudCustomData)||"",isRevoked:r.lastMessageFlag===Ld.GROUP,onlineOnlyFlag:!1,nick:r.msgGroupFromNickName||"",nameCard:r.msgGroupFromCardName||"",revoker:((D=(m=r.lastMsg)===null||m===void 0?void 0:m.revokerInfo)===null||D===void 0?void 0:D.revoker)||null}),groupProfile:{groupID:r.groupID,name:r.groupNick,avatar:r.groupImage,type:r.groupType,nextMessageSeq:r.nextMessageSeq},unreadCount:this._computeGroupUnreadCount(r),peerReadTime:0,isPinned:r.isPinned===1,version:0,customData:r.customMark||"",markList:nS(r.standardMark),conversationGroupList:[],messageRemindType:this._transMsgRemindType(r.messageRemindType),subType:r.groupType}}_convertConversationKey(r){return r.map(g=>({type:g.Type,userID:g.To_Account,nick:g.C2cNick,peerAvatar:g.C2cImage,time:g.MsgTimeStamp,sequence:g.MsgSeq,lastC2CMsgFromAccount:g.LastC2cMsgFrom_Account,lastMsg:this._convertLastMsgKey(g.LastMsg),lastMessageFlag:g.LastMsgFlags,c2cPeerReadTime:g.C2cPeerReadTime,peerReadTime:g.C2cPeerReadTime,friendRemark:g.C2cRemark,isPinned:g.TopFlags,standardMark:g.StandardMark,customMark:g.CustomMark,messageRemindType:g.MsgRecvOption,groupID:g.ToAccount,groupNick:g.GroupNick,groupImage:g.GroupImage,groupType:g.GroupType,nextMessageSeq:g.GroupNextMsgSeq,msgGroupFromAccount:g.MsgGroupFrom_Account,msgGroupFromNickName:g.MsgGroupFromNickName,msgGroupFromCardName:g.MsgGroupFromCardName,unreadCount:g.UnreadMsgCount,noUnreadCount:g.GroupIgnoredUnreadSeqCount}))}_convertLastMsgKey(r){var g,u,E;const{utils:{isEmpty:m}}=De;if(m(r))return null;let D="",M=null;if(!m(r.GroupTips)){const{From_Account:T,GroupName:P}=((g=r.GroupTips)===null||g===void 0?void 0:g.GroupInfo)||{};D=Uo.MSG_GRP_TIP,M=Object.assign(Object.assign({},this._parseContent(D,r.GroupTips.MsgBody)),{groupProfile:{from:T,groupName:P}})}return r.MsgBody&&(D=(u=r.MsgBody[0])===null||u===void 0?void 0:u.MsgType,M=this._parseContent(D,r.MsgBody[0])),{event:r.Event,elements:[{type:D,content:M,cloudCustomData:r.CloudCustomData}],revokerInfo:{revoker:(E=r.RevokerInfo)===null||E===void 0?void 0:E.Revoker_Account}}}_parseContent(r,g){var u;if(!g)return g;const E=De.message.messageFactory.getElementClass(r);return E?(u=E.parseServerPushElement(g))===null||u===void 0?void 0:u.content:g}_amendLayersOverLimitProp(r){const{LayersOverLimit:g}=r;return So(r,["LayersOverLimit"]).layersOverLimit=g===1,r}_transMsgRemindType(r){let g="";return r===0?g=Uo.MSG_REMIND_ACPT_AND_NOTE:r===1?g=Uo.MSG_REMIND_DISCARD:r===2?g=Uo.MSG_REMIND_ACPT_NOT_NOTE:r===3&&(g=Uo.NOT_RECEIVE_OFFLINE_PUSH_EXCEPT_AT),g}_patchTypeAndPayload(r){var g;const{utils:{isUndefined:u}}=De,{event:E,elements:m=[]}=r.lastMsg||{};return u(E)?{type:m[0]?m[0].type:null,payload:m[0]?this._amendLayersOverLimitProp(m[0].content):null}:{type:Uo.MSG_GRP_TIP,payload:((g=m?.[0])===null||g===void 0?void 0:g.content)||{}}}_computeGroupUnreadCount(r){const{unreadCount:g=0,noUnreadCount:u=0}=r,E=g-u;return E>0?E:0}_reset(){this._pagingStatus=kd.NOT_START,this._pagingTimeStamp=0,this._pagingStartIndex=0,this._pagingPinnedTimeStamp=0,this._pagingPinnedStartIndex=0}_dispose(){this._reset();const{notificationCenter:r}=De;r.unSubscribeInnerEvent(ro.LOGOUT,this._reset,this),r.unSubscribeInnerEvent(ro.DESTROY,this._dispose,this)}}class aS{constructor(){this.syncConversationHandler=new rS,this.syncConversationHandler.init()}}console.log(`TencentCloudLiteChat.VERSION:${Xr}`);var gS={create:function(s){var r,g;const{SDKAppID:u,testEnv:E=!1,devMode:m=!1,unlimitedAVChatRoom:D=!1,scene:M="",oversea:T=!1,instance:P,disableIndependentDomain:W=!1,proxyServer:oA=""}=s;let EA=u;if(!function(kA){if(typeof kA=="number")return!0;const xA=Number(kA);return!Number.isNaN(xA)}(EA))return console.error("Create SDK instance failed. Failed to parse the SDKAppID, please check the arguments"),null;if(EA=Number(EA),Ca.has(EA))return Ca.get(EA);let wA=null;if(P)wA=P,wA._workflowManager&&ws.setInstance(wA._workflowManager),wA._pluginManager&&wA._pluginManager.installBuiltInPlugin(vB),P.isReady()&&((g=(r=ws.getInstance()).executeWorkflow)===null||g===void 0||g.call(r,Jt.SYNC_SERVER_INFO_AFTER_LOGIN));else{const kA=function(){function Ie(){return(65536*(1+Math.random())|0).toString(16).substring(1)}return`${Ie()+Ie()}${Ie()}${Ie()}${Ie()}${Ie()}${Ie()}${Ie()}`}();De.init({sdkAppId:EA,instanceId:kA,testEnv:E,devMode:m,unlimitedAVChatRoom:D,disableIndependentDomain:W,scene:M,oversea:T,sdkEdition:Zm,version:Xr,proxyServer:oA}),ws.getInstance().init(),De.message=new AS,De.user=new gN,De.login=new Th,De.conversation=new aS,gu.getInstance().installBuiltInPlugin(vB),wA=pr.getInstance().exposeApiForClient(),wA._workflowManager=ws.getInstance(),wA._pluginManager=gu.getInstance();const{utils:{IS_WORKER_AVAILABLE:xA,USER_AGENT:LA,getPlatformType:SA,isIOSWebView:OA}}=De,qA=`instanceID:${kA} SDKAppID:${u} platform:${VA} host:${SA()} isIOSWebView:${OA} workerAvailable:${xA} UserAgent:${LA}`;De.ssoLog.info("sdkConstruct",qA)}return Ca.set(EA,wA),wA},TSignaling:qc,EVENT:Mr,VERSION:Xr,TYPES:Uo};return gS})}(aY)),aY.exports}var fsA=msA();const ig=HW(fsA);var gY={exports:{}},ysA=gY.exports,T8;function DsA(){return T8||(T8=1,function(t,i){(function(n,c){t.exports=c()})(ysA,function(){function n(ce,Ve){if(!(ce instanceof Ve))throw new TypeError("Cannot call a class as a function")}function c(ce,Ve){for(var Dt=0;Dt"u"&&typeof uni.requireNativePlugin=="function",HA=RA&&uni.getDeviceInfo().platform.toLocaleLowerCase()==="ios",ZA=(RA&&uni.getDeviceInfo().platform.toLocaleLowerCase(),lA||tA||BA||IA||gA||RA),KA=L!==void 0&&(L.nativeModuleProxy!==void 0||L.ReactNative!==void 0),me=tA?qq:BA?tt:IA?swan:gA?my:lA?wx:RA?uni:{},ae=function(ce){if(N(ce)!=="object"||ce===null)return!1;var Ve=Object.getPrototypeOf(ce);if(Ve===null)return!0;for(var Dt=Ve;Object.getPrototypeOf(Dt)!==null;)Dt=Object.getPrototypeOf(Dt);return Ve===Dt};function gt(ce){if(ce==null)return!0;if(typeof ce=="boolean")return!1;if(typeof ce=="number")return ce===0;if(typeof ce=="string"||typeof ce=="function"||Array.isArray(ce))return ce.length===0;if(ce instanceof Error)return ce.message==="";if(ae(ce)){for(var Ve in ce)if(Object.prototype.hasOwnProperty.call(ce,Ve))return!1;return!0}return!1}var dt=function(){return I(function ce(){n(this,ce),this._n="WebRequest"},[{key:"request",value:function(ce,Ve){var Dt=this,ti="".concat(this._n,".request"),Pt=ce.downloadUrl||"",oi=(ce.method||"PUT").toUpperCase(),Ni=ce.url;if(console.log("%c tim-upload-plugin %c","background:#0abf5b; padding:1px; border-radius:3px; color: #fff","background:transparent","".concat(ti," URL:").concat(Ni)),ce.qs){var Co=function(Gi){var As=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"&",Lo=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"=";return gt(Gi)?"":ae(Gi)?Object.keys(Gi).map(function($i){var zt=encodeURIComponent($i)+Lo;return Array.isArray(Gi[$i])?Gi[$i].map(function(Ao){return zt+encodeURIComponent(Ao)}).join(As):zt+encodeURIComponent(Gi[$i])}).filter(Boolean).join(As):void 0}(ce.qs);Co&&(Ni+="".concat(Ni.indexOf("?")===-1?"?":"&").concat(Co))}var to=new XMLHttpRequest;to.open(oi,Ni,!0),to.responseType=ce.dataType||"text";var so=ce.headers||{};if(ce.uploadByIP&&(so=w(w({},so),{},{host:ce.uploadIP})),!gt(so))for(var ks in so)so.hasOwnProperty(ks)&&ks.toLowerCase()!=="content-length"&&ks.toLowerCase()!=="user-agent"&&ks.toLowerCase()!=="origin"&&ks.toLowerCase()!=="host"&&to.setRequestHeader(ks,so[ks]);return to.onload=function(){if(to.status===200)Ve(null,Dt._xhrRes(to,Dt._xhrBody(to,Pt,ce.uploadByIP&&ce.uploadIP),so));else{if(ce.uploadIP&&ce.url.indexOf(ce.uploadIP)===-1)return ce.url=function(As,Lo){return As.replace(/^http(s)?:\/\/(.*?)\//,"https://".concat(Lo,"/"))}(ce.url,ce.uploadIP),ce.uploadByIP=!0,Dt.request(ce,Ve);var Gi={code:to.status,message:JSON.stringify(to.responseText)};Ve(Gi,Dt._xhrRes(to,Dt._xhrBody(to,Pt,ce.uploadByIP&&ce.uploadIP),so))}},to.onerror=function(Gi){var As=Dt._xhrBody(to,Pt,ce.uploadByIP&&ce.uploadIP),Lo={code:to.status,message:JSON.stringify(to.responseText)};As||to.statusText||to.status!==0||(Gi.message="CORS blocked or network error"),Ve(Lo,Dt._xhrRes(to,As)),Lo=null},ce.onProgress&&to.upload&&(to.upload.onprogress=function(Gi){var As=Gi.total,Lo=Gi.loaded,$i=Math.floor(100*Lo/As);ce.onProgress({total:As,loaded:Lo,percent:($i>=100?100:$i)/100})}),to.send(ce.resources),to}},{key:"_xhrRes",value:function(ce,Ve){var Dt={};return ce.getAllResponseHeaders().trim().split(` +`).forEach(function(ti){if(ti){var Pt=ti.indexOf(":"),oi=ti.substr(0,Pt).trim().toLowerCase(),Ni=ti.substr(Pt+1).trim();Dt[oi]=Ni}}),{statusCode:ce.status,statusMessage:ce.statusText,headers:Dt,data:Ve}}},{key:"_xhrBody",value:function(ce,Ve,Dt){return ce.status===200&&Ve?{location:Ve,uploadIP:Dt}:{response:ce.responseText,uploadIP:Dt}}}])}(),We=["unknown","image","video","audio","log"],lt=["name"],wt=function(){return I(function ce(){n(this,ce)},[{key:"request",value:function(ce,Ve){var Dt=this,ti=ce.resources,Pt=ti===void 0?"":ti,oi=ce.headers,Ni=oi===void 0?{}:oi,Co=ce.url,to=ce.downloadUrl,so=to===void 0?"":to,ks=Co,Gi=null,As=so.match(/^(https?:\/\/[^/]+\/)([^/]*\/?)(.*)$/),Lo=decodeURIComponent(As[3]),$i=Lo.indexOf("?")>-1?Lo.split("?")[0]:Lo,zt={key:ce.fileKey?ce.fileKey:$i,success_action_status:200,"Content-Type":""},Ao={};if(HA){var Ri=Co.split("?sign=");if(Ri.length>1){var Es=Ri[1];ks="".concat(Ri[0],"?sign=").concat(encodeURIComponent("".concat(Es))),Ao.sign=decodeURIComponent(Es),Ao.signature=decodeURIComponent(Es)}}var VA={url:ks,header:Ni,name:"file",filePath:Pt,formData:w(w({},zt),Ao),timeout:ce.timeout||3e5};if(gA){var Ee=VA;Ee.name,VA=w(w({},function(Je,Ut){if(Je==null)return{};var ot,ut,$t=function(Ge,Xe){if(Ge==null)return{};var se={};for(var ve in Ge)if({}.hasOwnProperty.call(Ge,ve)){if(Xe.includes(ve))continue;se[ve]=Ge[ve]}return se}(Je,Ut);if(Object.getOwnPropertySymbols){var Zt=Object.getOwnPropertySymbols(Je);for(ut=0;ut=3e4&&(this.systemClockOffset=Co-Ni,Ve=!0)}else Math.floor(ce.statusCode/100)===5&&(Ve=!0)}return Ve}}],[{key:"getVersion",value:function(){return"1.4.3"}}])}()})}(gY)),gY.exports}var SsA=DsA();const MsA=HW(SsA);/** * @vue/shared v3.5.13 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function DW(t){const i=Object.create(null);for(const r of t.split(","))i[r]=1;return r=>r in i}const Da={},H_=[],RQ=()=>{},XoA=()=>!1,$Y=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97),SW=t=>t.startsWith("onUpdate:"),sI=Object.assign,MW=(t,i)=>{const r=t.indexOf(i);r>-1&&t.splice(r,1)},$oA=Object.prototype.hasOwnProperty,Wr=(t,i)=>$oA.call(t,i),Ms=Array.isArray,q_=t=>AV(t)==="[object Map]",Q6=t=>AV(t)==="[object Set]",$s=t=>typeof t=="function",fg=t=>typeof t=="string",Cm=t=>typeof t=="symbol",Na=t=>t!==null&&typeof t=="object",p6=t=>(Na(t)||$s(t))&&$s(t.then)&&$s(t.catch),m6=Object.prototype.toString,AV=t=>m6.call(t),AsA=t=>AV(t).slice(8,-1),f6=t=>AV(t)==="[object Object]",vW=t=>fg(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t,jL=DW(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),eV=t=>{const i=Object.create(null);return r=>i[r]||(i[r]=t(r))},esA=/-(\w)/g,sh=eV(t=>t.replace(esA,(i,r)=>r?r.toUpperCase():"")),tsA=/\B([A-Z])/g,rD=eV(t=>t.replace(tsA,"-$1").toLowerCase()),tV=eV(t=>t.charAt(0).toUpperCase()+t.slice(1)),Dj=eV(t=>t?`on${tV(t)}`:""),Wy=(t,i)=>!Object.is(t,i),X1=(t,...i)=>{for(let r=0;r{Object.defineProperty(t,i,{configurable:!0,enumerable:!1,writable:l,value:r})},p3=t=>{const i=parseFloat(t);return isNaN(i)?t:i},isA=t=>{const i=fg(t)?Number(t):NaN;return isNaN(i)?t:i};let g8;const iV=()=>g8||(g8=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Br(t){if(Ms(t)){const i={};for(let r=0;r{if(r){const l=r.split(ssA);l.length>1&&(i[l[0].trim()]=l[1].trim())}}),i}function qi(t){let i="";if(fg(t))i=t;else if(Ms(t))for(let r=0;r!!(t&&t.__v_isRef===!0),oi=t=>fg(t)?t:t==null?"":Ms(t)||Na(t)&&(t.toString===m6||!$s(t.toString))?S6(t)?oi(t.value):JSON.stringify(t,M6,2):String(t),M6=(t,i)=>S6(i)?M6(t,i.value):q_(i)?{[`Map(${i.size})`]:[...i.entries()].reduce((r,[l,I],h)=>(r[Sj(l,h)+" =>"]=I,r),{})}:Q6(i)?{[`Set(${i.size})`]:[...i.values()].map(r=>Sj(r))}:Cm(i)?Sj(i):Na(i)&&!Ms(i)&&!f6(i)?String(i):i,Sj=(t,i="")=>{var r;return Cm(t)?`Symbol(${(r=t.description)!=null?r:i})`:t};/** +**//*! #__NO_SIDE_EFFECTS__ */function qW(t){const i=Object.create(null);for(const n of t.split(","))i[n]=1;return n=>n in i}const Da={},j_=[],TQ=()=>{},vsA=()=>!1,uV=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97),KW=t=>t.startsWith("onUpdate:"),nI=Object.assign,jW=(t,i)=>{const n=t.indexOf(i);n>-1&&t.splice(n,1)},RsA=Object.prototype.hasOwnProperty,Wr=(t,i)=>RsA.call(t,i),vs=Array.isArray,W_=t=>EV(t)==="[object Map]",V6=t=>EV(t)==="[object Set]",$s=t=>typeof t=="function",fg=t=>typeof t=="string",Qm=t=>typeof t=="symbol",Na=t=>t!==null&&typeof t=="object",J6=t=>(Na(t)||$s(t))&&$s(t.then)&&$s(t.catch),H6=Object.prototype.toString,EV=t=>H6.call(t),wsA=t=>EV(t).slice(8,-1),q6=t=>EV(t)==="[object Object]",WW=t=>fg(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t,tU=qW(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),dV=t=>{const i=Object.create(null);return n=>i[n]||(i[n]=t(n))},_sA=/-(\w)/g,gh=dV(t=>t.replace(_sA,(i,n)=>n?n.toUpperCase():"")),TsA=/\B([A-Z])/g,cD=dV(t=>t.replace(TsA,"-$1").toLowerCase()),CV=dV(t=>t.charAt(0).toUpperCase()+t.slice(1)),Oj=dV(t=>t?`on${CV(t)}`:""),zy=(t,i)=>!Object.is(t,i),cY=(t,...i)=>{for(let n=0;n{Object.defineProperty(t,i,{configurable:!0,enumerable:!1,writable:c,value:n})},L3=t=>{const i=parseFloat(t);return isNaN(i)?t:i},NsA=t=>{const i=fg(t)?Number(t):NaN;return isNaN(i)?t:i};let N8;const hV=()=>N8||(N8=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Cr(t){if(vs(t)){const i={};for(let n=0;n{if(n){const c=n.split(bsA);c.length>1&&(i[c[0].trim()]=c[1].trim())}}),i}function xi(t){let i="";if(fg(t))i=t;else if(vs(t))for(let n=0;n!!(t&&t.__v_isRef===!0),Kt=t=>fg(t)?t:t==null?"":vs(t)||Na(t)&&(t.toString===H6||!$s(t.toString))?W6(t)?Kt(t.value):JSON.stringify(t,z6,2):String(t),z6=(t,i)=>W6(i)?z6(t,i.value):W_(i)?{[`Map(${i.size})`]:[...i.entries()].reduce((n,[c,I],C)=>(n[Pj(c,C)+" =>"]=I,n),{})}:V6(i)?{[`Set(${i.size})`]:[...i.values()].map(n=>Pj(n))}:Qm(i)?Pj(i):Na(i)&&!vs(i)&&!q6(i)?String(i):i,Pj=(t,i="")=>{var n;return Qm(t)?`Symbol(${(n=t.description)!=null?n:i})`:t};/** * @vue/reactivity v3.5.13 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let iC;class lsA{constructor(i=!1){this.detached=i,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=iC,!i&&iC&&(this.index=(iC.scopes||(iC.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let i,r;if(this.scopes)for(i=0,r=this.scopes.length;i0)return;if(zL){let i=zL;for(zL=void 0;i;){const r=i.next;i.next=void 0,i.flags&=-9,i=r}}let t;for(;WL;){let i=WL;for(WL=void 0;i;){const r=i.next;if(i.next=void 0,i.flags&=-9,i.flags&1)try{i.trigger()}catch(l){t||(t=l)}i=r}}if(t)throw t}function _6(t){for(let i=t.deps;i;i=i.nextDep)i.version=-1,i.prevActiveLink=i.dep.activeLink,i.dep.activeLink=i}function T6(t){let i,r=t.depsTail,l=r;for(;l;){const I=l.prevDep;l.version===-1?(l===r&&(r=I),_W(l),usA(l)):i=l,l.dep.activeLink=l.prevActiveLink,l.prevActiveLink=void 0,l=I}t.deps=i,t.depsTail=r}function m3(t){for(let i=t.deps;i;i=i.nextDep)if(i.dep.version!==i.version||i.dep.computed&&(N6(i.dep.computed)||i.dep.version!==i.version))return!0;return!!t._dirty}function N6(t){if(t.flags&4&&!(t.flags&16)||(t.flags&=-17,t.globalVersion===dU))return;t.globalVersion=dU;const i=t.dep;if(t.flags|=2,i.version>0&&!t.isSSR&&t.deps&&!m3(t)){t.flags&=-3;return}const r=_a,l=sB;_a=t,sB=!0;try{_6(t);const I=t.fn(t._value);(i.version===0||Wy(I,t._value))&&(t._value=I,i.version++)}catch(I){throw i.version++,I}finally{_a=r,sB=l,T6(t),t.flags&=-3}}function _W(t,i=!1){const{dep:r,prevSub:l,nextSub:I}=t;if(l&&(l.nextSub=I,t.prevSub=void 0),I&&(I.prevSub=l,t.nextSub=void 0),r.subs===t&&(r.subs=l,!l&&r.computed)){r.computed.flags&=-5;for(let h=r.computed.deps;h;h=h.nextDep)_W(h,!0)}!i&&!--r.sc&&r.map&&r.map.delete(r.key)}function usA(t){const{prevDep:i,nextDep:r}=t;i&&(i.nextDep=r,t.prevDep=void 0),r&&(r.prevDep=i,t.nextDep=void 0)}let sB=!0;const G6=[];function aD(){G6.push(sB),sB=!1}function gD(){const t=G6.pop();sB=t===void 0?!0:t}function c8(t){const{cleanup:i}=t;if(t.cleanup=void 0,i){const r=_a;_a=void 0;try{i()}finally{_a=r}}}let dU=0;class EsA{constructor(i,r){this.sub=i,this.dep=r,this.version=r.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class TW{constructor(i){this.computed=i,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(i){if(!_a||!sB||_a===this.computed)return;let r=this.activeLink;if(r===void 0||r.sub!==_a)r=this.activeLink=new EsA(_a,this),_a.deps?(r.prevDep=_a.depsTail,_a.depsTail.nextDep=r,_a.depsTail=r):_a.deps=_a.depsTail=r,b6(r);else if(r.version===-1&&(r.version=this.version,r.nextDep)){const l=r.nextDep;l.prevDep=r.prevDep,r.prevDep&&(r.prevDep.nextDep=l),r.prevDep=_a.depsTail,r.nextDep=void 0,_a.depsTail.nextDep=r,_a.depsTail=r,_a.deps===r&&(_a.deps=l)}return r}trigger(i){this.version++,dU++,this.notify(i)}notify(i){RW();try{for(let r=this.subs;r;r=r.prevSub)r.sub.notify()&&r.sub.dep.notify()}finally{wW()}}}function b6(t){if(t.dep.sc++,t.sub.flags&4){const i=t.dep.computed;if(i&&!t.dep.subs){i.flags|=20;for(let l=i.deps;l;l=l.nextDep)b6(l)}const r=t.dep.subs;r!==t&&(t.prevSub=r,r&&(r.nextSub=t)),t.dep.subs=t}}const CY=new WeakMap,Qv=Symbol(""),f3=Symbol(""),CU=Symbol("");function pu(t,i,r){if(sB&&_a){let l=CY.get(t);l||CY.set(t,l=new Map);let I=l.get(r);I||(l.set(r,I=new TW),I.map=l,I.key=r),I.track()}}function lm(t,i,r,l,I,h){const f=CY.get(t);if(!f){dU++;return}const w=_=>{_&&_.trigger()};if(RW(),i==="clear")f.forEach(w);else{const _=Ms(t),G=_&&vW(r);if(_&&r==="length"){const U=Number(l);f.forEach((j,lA)=>{(lA==="length"||lA===CU||!Cm(lA)&&lA>=U)&&w(j)})}else switch((r!==void 0||f.has(void 0))&&w(f.get(r)),G&&w(f.get(CU)),i){case"add":_?G&&w(f.get("length")):(w(f.get(Qv)),q_(t)&&w(f.get(f3)));break;case"delete":_||(w(f.get(Qv)),q_(t)&&w(f.get(f3)));break;case"set":q_(t)&&w(f.get(Qv));break}}wW()}function dsA(t,i){const r=CY.get(t);return r&&r.get(i)}function f_(t){const i=br(t);return i===t?i:(pu(i,"iterate",CU),th(t)?i:i.map(mu))}function oV(t){return pu(t=br(t),"iterate",CU),t}const CsA={__proto__:null,[Symbol.iterator](){return vj(this,Symbol.iterator,mu)},concat(...t){return f_(this).concat(...t.map(i=>Ms(i)?f_(i):i))},entries(){return vj(this,"entries",t=>(t[1]=mu(t[1]),t))},every(t,i){return im(this,"every",t,i,void 0,arguments)},filter(t,i){return im(this,"filter",t,i,r=>r.map(mu),arguments)},find(t,i){return im(this,"find",t,i,mu,arguments)},findIndex(t,i){return im(this,"findIndex",t,i,void 0,arguments)},findLast(t,i){return im(this,"findLast",t,i,mu,arguments)},findLastIndex(t,i){return im(this,"findLastIndex",t,i,void 0,arguments)},forEach(t,i){return im(this,"forEach",t,i,void 0,arguments)},includes(...t){return Rj(this,"includes",t)},indexOf(...t){return Rj(this,"indexOf",t)},join(t){return f_(this).join(t)},lastIndexOf(...t){return Rj(this,"lastIndexOf",t)},map(t,i){return im(this,"map",t,i,void 0,arguments)},pop(){return QL(this,"pop")},push(...t){return QL(this,"push",t)},reduce(t,...i){return l8(this,"reduce",t,i)},reduceRight(t,...i){return l8(this,"reduceRight",t,i)},shift(){return QL(this,"shift")},some(t,i){return im(this,"some",t,i,void 0,arguments)},splice(...t){return QL(this,"splice",t)},toReversed(){return f_(this).toReversed()},toSorted(t){return f_(this).toSorted(t)},toSpliced(...t){return f_(this).toSpliced(...t)},unshift(...t){return QL(this,"unshift",t)},values(){return vj(this,"values",mu)}};function vj(t,i,r){const l=oV(t),I=l[i]();return l!==t&&!th(t)&&(I._next=I.next,I.next=()=>{const h=I._next();return h.value&&(h.value=r(h.value)),h}),I}const hsA=Array.prototype;function im(t,i,r,l,I,h){const f=oV(t),w=f!==t&&!th(t),_=f[i];if(_!==hsA[i]){const j=_.apply(t,h);return w?mu(j):j}let G=r;f!==t&&(w?G=function(j,lA){return r.call(this,mu(j),lA,t)}:r.length>2&&(G=function(j,lA){return r.call(this,j,lA,t)}));const U=_.call(f,G,l);return w&&I?I(U):U}function l8(t,i,r,l){const I=oV(t);let h=r;return I!==t&&(th(t)?r.length>3&&(h=function(f,w,_){return r.call(this,f,w,_,t)}):h=function(f,w,_){return r.call(this,f,mu(w),_,t)}),I[i](h,...l)}function Rj(t,i,r){const l=br(t);pu(l,"iterate",CU);const I=l[i](...r);return(I===-1||I===!1)&&bW(r[0])?(r[0]=br(r[0]),l[i](...r)):I}function QL(t,i,r=[]){aD(),RW();const l=br(t)[i].apply(t,r);return wW(),gD(),l}const BsA=DW("__proto__,__v_isRef,__isVue"),k6=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!=="arguments"&&t!=="caller").map(t=>Symbol[t]).filter(Cm));function QsA(t){Cm(t)||(t=String(t));const i=br(this);return pu(i,"has",t),i.hasOwnProperty(t)}class L6{constructor(i=!1,r=!1){this._isReadonly=i,this._isShallow=r}get(i,r,l){if(r==="__v_skip")return i.__v_skip;const I=this._isReadonly,h=this._isShallow;if(r==="__v_isReactive")return!I;if(r==="__v_isReadonly")return I;if(r==="__v_isShallow")return h;if(r==="__v_raw")return l===(I?h?wsA:P6:h?O6:F6).get(i)||Object.getPrototypeOf(i)===Object.getPrototypeOf(l)?i:void 0;const f=Ms(i);if(!I){let _;if(f&&(_=CsA[r]))return _;if(r==="hasOwnProperty")return QsA}const w=Reflect.get(i,r,iI(i)?i:l);return(Cm(r)?k6.has(r):BsA(r))||(I||pu(i,"get",r),h)?w:iI(w)?f&&vW(r)?w:w.value:Na(w)?I?PI(w):dv(w):w}}class U6 extends L6{constructor(i=!1){super(!1,i)}set(i,r,l,I){let h=i[r];if(!this._isShallow){const _=Tv(h);if(!th(l)&&!Tv(l)&&(h=br(h),l=br(l)),!Ms(i)&&iI(h)&&!iI(l))return _?!1:(h.value=l,!0)}const f=Ms(i)&&vW(r)?Number(r)t,_1=t=>Reflect.getPrototypeOf(t);function DsA(t,i,r){return function(...l){const I=this.__v_raw,h=br(I),f=q_(h),w=t==="entries"||t===Symbol.iterator&&f,_=t==="keys"&&f,G=I[t](...l),U=r?y3:i?D3:mu;return!i&&pu(h,"iterate",_?f3:Qv),{next(){const{value:j,done:lA}=G.next();return lA?{value:j,done:lA}:{value:w?[U(j[0]),U(j[1])]:U(j),done:lA}},[Symbol.iterator](){return this}}}}function T1(t){return function(...i){return t==="delete"?!1:t==="clear"?void 0:this}}function SsA(t,i){const r={get(I){const h=this.__v_raw,f=br(h),w=br(I);t||(Wy(I,w)&&pu(f,"get",I),pu(f,"get",w));const{has:_}=_1(f),G=i?y3:t?D3:mu;if(_.call(f,I))return G(h.get(I));if(_.call(f,w))return G(h.get(w));h!==f&&h.get(I)},get size(){const I=this.__v_raw;return!t&&pu(br(I),"iterate",Qv),Reflect.get(I,"size",I)},has(I){const h=this.__v_raw,f=br(h),w=br(I);return t||(Wy(I,w)&&pu(f,"has",I),pu(f,"has",w)),I===w?h.has(I):h.has(I)||h.has(w)},forEach(I,h){const f=this,w=f.__v_raw,_=br(w),G=i?y3:t?D3:mu;return!t&&pu(_,"iterate",Qv),w.forEach((U,j)=>I.call(h,G(U),G(j),f))}};return sI(r,t?{add:T1("add"),set:T1("set"),delete:T1("delete"),clear:T1("clear")}:{add(I){!i&&!th(I)&&!Tv(I)&&(I=br(I));const h=br(this);return _1(h).has.call(h,I)||(h.add(I),lm(h,"add",I,I)),this},set(I,h){!i&&!th(h)&&!Tv(h)&&(h=br(h));const f=br(this),{has:w,get:_}=_1(f);let G=w.call(f,I);G||(I=br(I),G=w.call(f,I));const U=_.call(f,I);return f.set(I,h),G?Wy(h,U)&&lm(f,"set",I,h):lm(f,"add",I,h),this},delete(I){const h=br(this),{has:f,get:w}=_1(h);let _=f.call(h,I);_||(I=br(I),_=f.call(h,I)),w&&w.call(h,I);const G=h.delete(I);return _&&lm(h,"delete",I,void 0),G},clear(){const I=br(this),h=I.size!==0,f=I.clear();return h&&lm(I,"clear",void 0,void 0),f}}),["keys","values","entries",Symbol.iterator].forEach(I=>{r[I]=DsA(I,t,i)}),r}function NW(t,i){const r=SsA(t,i);return(l,I,h)=>I==="__v_isReactive"?!t:I==="__v_isReadonly"?t:I==="__v_raw"?l:Reflect.get(Wr(r,I)&&I in l?r:l,I,h)}const MsA={get:NW(!1,!1)},vsA={get:NW(!1,!0)},RsA={get:NW(!0,!1)};const F6=new WeakMap,O6=new WeakMap,P6=new WeakMap,wsA=new WeakMap;function _sA(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function TsA(t){return t.__v_skip||!Object.isExtensible(t)?0:_sA(AsA(t))}function dv(t){return Tv(t)?t:GW(t,!1,msA,MsA,F6)}function NsA(t){return GW(t,!1,ysA,vsA,O6)}function PI(t){return GW(t,!0,fsA,RsA,P6)}function GW(t,i,r,l,I){if(!Na(t)||t.__v_raw&&!(i&&t.__v_isReactive))return t;const h=I.get(t);if(h)return h;const f=TsA(t);if(f===0)return t;const w=new Proxy(t,f===2?l:r);return I.set(t,w),w}function K_(t){return Tv(t)?K_(t.__v_raw):!!(t&&t.__v_isReactive)}function Tv(t){return!!(t&&t.__v_isReadonly)}function th(t){return!!(t&&t.__v_isShallow)}function bW(t){return t?!!t.__v_raw:!1}function br(t){const i=t&&t.__v_raw;return i?br(i):t}function GsA(t){return!Wr(t,"__v_skip")&&Object.isExtensible(t)&&y6(t,"__v_skip",!0),t}const mu=t=>Na(t)?dv(t):t,D3=t=>Na(t)?PI(t):t;function iI(t){return t?t.__v_isRef===!0:!1}function ze(t){return bsA(t,!1)}function bsA(t,i){return iI(t)?t:new ksA(t,i)}class ksA{constructor(i,r){this.dep=new TW,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=r?i:br(i),this._value=r?i:mu(i),this.__v_isShallow=r}get value(){return this.dep.track(),this._value}set value(i){const r=this._rawValue,l=this.__v_isShallow||th(i)||Tv(i);i=l?i:br(i),Wy(i,r)&&(this._rawValue=i,this._value=l?i:mu(i),this.dep.trigger())}}function aA(t){return iI(t)?t.value:t}const LsA={get:(t,i,r)=>i==="__v_raw"?t:aA(Reflect.get(t,i,r)),set:(t,i,r,l)=>{const I=t[i];return iI(I)&&!iI(r)?(I.value=r,!0):Reflect.set(t,i,r,l)}};function x6(t){return K_(t)?t:new Proxy(t,LsA)}function Gs(t){const i=Ms(t)?new Array(t.length):{};for(const r in t)i[r]=Y6(t,r);return i}class UsA{constructor(i,r,l){this._object=i,this._key=r,this._defaultValue=l,this.__v_isRef=!0,this._value=void 0}get value(){const i=this._object[this._key];return this._value=i===void 0?this._defaultValue:i}set value(i){this._object[this._key]=i}get dep(){return dsA(br(this._object),this._key)}}class FsA{constructor(i){this._getter=i,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function wj(t,i,r){return iI(t)?t:$s(t)?new FsA(t):Na(t)&&arguments.length>1?Y6(t,i,r):ze(t)}function Y6(t,i,r){const l=t[i];return iI(l)?l:new UsA(t,i,r)}class OsA{constructor(i,r,l){this.fn=i,this.setter=r,this._value=void 0,this.dep=new TW(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=dU-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!r,this.isSSR=l}notify(){if(this.flags|=16,!(this.flags&8)&&_a!==this)return w6(this,!0),!0}get value(){const i=this.dep.track();return N6(this),i&&(i.version=this.dep.version),this._value}set value(i){this.setter&&this.setter(i)}}function PsA(t,i,r=!1){let l,I;return $s(t)?l=t:(l=t.get,I=t.set),new OsA(l,I,r)}const N1={},hY=new WeakMap;let av;function xsA(t,i=!1,r=av){if(r){let l=hY.get(r);l||hY.set(r,l=[]),l.push(t)}}function YsA(t,i,r=Da){const{immediate:l,deep:I,once:h,scheduler:f,augmentJob:w,call:_}=r,G=Ce=>I?Ce:th(Ce)||I===!1||I===0?Im(Ce,1):Im(Ce);let U,j,lA,sA,mA=!1,IA=!1;if(iI(t)?(j=()=>t.value,mA=th(t)):K_(t)?(j=()=>G(t),mA=!0):Ms(t)?(IA=!0,mA=t.some(Ce=>K_(Ce)||th(Ce)),j=()=>t.map(Ce=>{if(iI(Ce))return Ce.value;if(K_(Ce))return G(Ce);if($s(Ce))return _?_(Ce,2):Ce()})):$s(t)?i?j=_?()=>_(t,2):t:j=()=>{if(lA){aD();try{lA()}finally{gD()}}const Ce=av;av=U;try{return _?_(t,3,[sA]):t(sA)}finally{av=Ce}}:j=RQ,i&&I){const Ce=j,xe=I===!0?1/0:I;j=()=>Im(Ce(),xe)}const cA=IsA(),TA=()=>{U.stop(),cA&&cA.active&&MW(cA.effects,U)};if(h&&i){const Ce=i;i=(...xe)=>{Ce(...xe),TA()}}let WA=IA?new Array(t.length).fill(N1):N1;const ue=Ce=>{if(!(!(U.flags&1)||!U.dirty&&!Ce))if(i){const xe=U.run();if(I||mA||(IA?xe.some((Qe,ut)=>Wy(Qe,WA[ut])):Wy(xe,WA))){lA&&lA();const Qe=av;av=U;try{const ut=[xe,WA===N1?void 0:IA&&WA[0]===N1?[]:WA,sA];_?_(i,3,ut):i(...ut),WA=xe}finally{av=Qe}}}else U.run()};return w&&w(ue),U=new v6(j),U.scheduler=f?()=>f(ue,!1):ue,sA=Ce=>xsA(Ce,!1,U),lA=U.onStop=()=>{const Ce=hY.get(U);if(Ce){if(_)_(Ce,4);else for(const xe of Ce)xe();hY.delete(U)}},i?l?ue(!0):WA=U.run():f?f(ue.bind(null,!0),!0):U.run(),TA.pause=U.pause.bind(U),TA.resume=U.resume.bind(U),TA.stop=TA,TA}function Im(t,i=1/0,r){if(i<=0||!Na(t)||t.__v_skip||(r=r||new Set,r.has(t)))return t;if(r.add(t),i--,iI(t))Im(t.value,i,r);else if(Ms(t))for(let l=0;l{Im(l,i,r)});else if(f6(t)){for(const l in t)Im(t[l],i,r);for(const l of Object.getOwnPropertySymbols(t))Object.prototype.propertyIsEnumerable.call(t,l)&&Im(t[l],i,r)}return t}/** +**/let iC;class PsA{constructor(i=!1){this.detached=i,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=iC,!i&&iC&&(this.index=(iC.scopes||(iC.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let i,n;if(this.scopes)for(i=0,n=this.scopes.length;i0)return;if(oU){let i=oU;for(oU=void 0;i;){const n=i.next;i.next=void 0,i.flags&=-9,i=n}}let t;for(;iU;){let i=iU;for(iU=void 0;i;){const n=i.next;if(i.next=void 0,i.flags&=-9,i.flags&1)try{i.trigger()}catch(c){t||(t=c)}i=n}}if(t)throw t}function A9(t){for(let i=t.deps;i;i=i.nextDep)i.version=-1,i.prevActiveLink=i.dep.activeLink,i.dep.activeLink=i}function e9(t){let i,n=t.depsTail,c=n;for(;c;){const I=c.prevDep;c.version===-1?(c===n&&(n=I),XW(c),YsA(c)):i=c,c.dep.activeLink=c.prevActiveLink,c.prevActiveLink=void 0,c=I}t.deps=i,t.depsTail=n}function U3(t){for(let i=t.deps;i;i=i.nextDep)if(i.dep.version!==i.version||i.dep.computed&&(t9(i.dep.computed)||i.dep.version!==i.version))return!0;return!!t._dirty}function t9(t){if(t.flags&4&&!(t.flags&16)||(t.flags&=-17,t.globalVersion===DU))return;t.globalVersion=DU;const i=t.dep;if(t.flags|=2,i.version>0&&!t.isSSR&&t.deps&&!U3(t)){t.flags&=-3;return}const n=_a,c=aB;_a=t,aB=!0;try{A9(t);const I=t.fn(t._value);(i.version===0||zy(I,t._value))&&(t._value=I,i.version++)}catch(I){throw i.version++,I}finally{_a=n,aB=c,e9(t),t.flags&=-3}}function XW(t,i=!1){const{dep:n,prevSub:c,nextSub:I}=t;if(c&&(c.nextSub=I,t.prevSub=void 0),I&&(I.prevSub=c,t.nextSub=void 0),n.subs===t&&(n.subs=c,!c&&n.computed)){n.computed.flags&=-5;for(let C=n.computed.deps;C;C=C.nextDep)XW(C,!0)}!i&&!--n.sc&&n.map&&n.map.delete(n.key)}function YsA(t){const{prevDep:i,nextDep:n}=t;i&&(i.nextDep=n,t.prevDep=void 0),n&&(n.prevDep=i,t.nextDep=void 0)}let aB=!0;const i9=[];function lD(){i9.push(aB),aB=!1}function ID(){const t=i9.pop();aB=t===void 0?!0:t}function G8(t){const{cleanup:i}=t;if(t.cleanup=void 0,i){const n=_a;_a=void 0;try{i()}finally{_a=n}}}let DU=0;class VsA{constructor(i,n){this.sub=i,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class $W{constructor(i){this.computed=i,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(i){if(!_a||!aB||_a===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==_a)n=this.activeLink=new VsA(_a,this),_a.deps?(n.prevDep=_a.depsTail,_a.depsTail.nextDep=n,_a.depsTail=n):_a.deps=_a.depsTail=n,o9(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const c=n.nextDep;c.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=c),n.prevDep=_a.depsTail,n.nextDep=void 0,_a.depsTail.nextDep=n,_a.depsTail=n,_a.deps===n&&(_a.deps=c)}return n}trigger(i){this.version++,DU++,this.notify(i)}notify(i){zW();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{ZW()}}}function o9(t){if(t.dep.sc++,t.sub.flags&4){const i=t.dep.computed;if(i&&!t.dep.subs){i.flags|=20;for(let c=i.deps;c;c=c.nextDep)o9(c)}const n=t.dep.subs;n!==t&&(t.prevSub=n,n&&(n.nextSub=t)),t.dep.subs=t}}const RY=new WeakMap,fv=Symbol(""),F3=Symbol(""),SU=Symbol("");function mu(t,i,n){if(aB&&_a){let c=RY.get(t);c||RY.set(t,c=new Map);let I=c.get(n);I||(c.set(n,I=new $W),I.map=c,I.key=n),I.track()}}function Em(t,i,n,c,I,C){const f=RY.get(t);if(!f){DU++;return}const w=_=>{_&&_.trigger()};if(zW(),i==="clear")f.forEach(w);else{const _=vs(t),N=_&&WW(n);if(_&&n==="length"){const L=Number(c);f.forEach((q,lA)=>{(lA==="length"||lA===SU||!Qm(lA)&&lA>=L)&&w(q)})}else switch((n!==void 0||f.has(void 0))&&w(f.get(n)),N&&w(f.get(SU)),i){case"add":_?N&&w(f.get("length")):(w(f.get(fv)),W_(t)&&w(f.get(F3)));break;case"delete":_||(w(f.get(fv)),W_(t)&&w(f.get(F3)));break;case"set":W_(t)&&w(f.get(fv));break}}ZW()}function JsA(t,i){const n=RY.get(t);return n&&n.get(i)}function S_(t){const i=br(t);return i===t?i:(mu(i,"iterate",SU),nh(t)?i:i.map(fu))}function BV(t){return mu(t=br(t),"iterate",SU),t}const HsA={__proto__:null,[Symbol.iterator](){return Yj(this,Symbol.iterator,fu)},concat(...t){return S_(this).concat(...t.map(i=>vs(i)?S_(i):i))},entries(){return Yj(this,"entries",t=>(t[1]=fu(t[1]),t))},every(t,i){return nm(this,"every",t,i,void 0,arguments)},filter(t,i){return nm(this,"filter",t,i,n=>n.map(fu),arguments)},find(t,i){return nm(this,"find",t,i,fu,arguments)},findIndex(t,i){return nm(this,"findIndex",t,i,void 0,arguments)},findLast(t,i){return nm(this,"findLast",t,i,fu,arguments)},findLastIndex(t,i){return nm(this,"findLastIndex",t,i,void 0,arguments)},forEach(t,i){return nm(this,"forEach",t,i,void 0,arguments)},includes(...t){return Vj(this,"includes",t)},indexOf(...t){return Vj(this,"indexOf",t)},join(t){return S_(this).join(t)},lastIndexOf(...t){return Vj(this,"lastIndexOf",t)},map(t,i){return nm(this,"map",t,i,void 0,arguments)},pop(){return SL(this,"pop")},push(...t){return SL(this,"push",t)},reduce(t,...i){return b8(this,"reduce",t,i)},reduceRight(t,...i){return b8(this,"reduceRight",t,i)},shift(){return SL(this,"shift")},some(t,i){return nm(this,"some",t,i,void 0,arguments)},splice(...t){return SL(this,"splice",t)},toReversed(){return S_(this).toReversed()},toSorted(t){return S_(this).toSorted(t)},toSpliced(...t){return S_(this).toSpliced(...t)},unshift(...t){return SL(this,"unshift",t)},values(){return Yj(this,"values",fu)}};function Yj(t,i,n){const c=BV(t),I=c[i]();return c!==t&&!nh(t)&&(I._next=I.next,I.next=()=>{const C=I._next();return C.value&&(C.value=n(C.value)),C}),I}const qsA=Array.prototype;function nm(t,i,n,c,I,C){const f=BV(t),w=f!==t&&!nh(t),_=f[i];if(_!==qsA[i]){const q=_.apply(t,C);return w?fu(q):q}let N=n;f!==t&&(w?N=function(q,lA){return n.call(this,fu(q),lA,t)}:n.length>2&&(N=function(q,lA){return n.call(this,q,lA,t)}));const L=_.call(f,N,c);return w&&I?I(L):L}function b8(t,i,n,c){const I=BV(t);let C=n;return I!==t&&(nh(t)?n.length>3&&(C=function(f,w,_){return n.call(this,f,w,_,t)}):C=function(f,w,_){return n.call(this,f,fu(w),_,t)}),I[i](C,...c)}function Vj(t,i,n){const c=br(t);mu(c,"iterate",SU);const I=c[i](...n);return(I===-1||I===!1)&&t4(n[0])?(n[0]=br(n[0]),c[i](...n)):I}function SL(t,i,n=[]){lD(),zW();const c=br(t)[i].apply(t,n);return ZW(),ID(),c}const KsA=qW("__proto__,__v_isRef,__isVue"),s9=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!=="arguments"&&t!=="caller").map(t=>Symbol[t]).filter(Qm));function jsA(t){Qm(t)||(t=String(t));const i=br(this);return mu(i,"has",t),i.hasOwnProperty(t)}class n9{constructor(i=!1,n=!1){this._isReadonly=i,this._isShallow=n}get(i,n,c){if(n==="__v_skip")return i.__v_skip;const I=this._isReadonly,C=this._isShallow;if(n==="__v_isReactive")return!I;if(n==="__v_isReadonly")return I;if(n==="__v_isShallow")return C;if(n==="__v_raw")return c===(I?C?onA:c9:C?g9:a9).get(i)||Object.getPrototypeOf(i)===Object.getPrototypeOf(c)?i:void 0;const f=vs(i);if(!I){let _;if(f&&(_=HsA[n]))return _;if(n==="hasOwnProperty")return jsA}const w=Reflect.get(i,n,oI(i)?i:c);return(Qm(n)?s9.has(n):KsA(n))||(I||mu(i,"get",n),C)?w:oI(w)?f&&WW(n)?w:w.value:Na(w)?I?Ql(w):Bv(w):w}}class r9 extends n9{constructor(i=!1){super(!1,i)}set(i,n,c,I){let C=i[n];if(!this._isShallow){const _=bv(C);if(!nh(c)&&!bv(c)&&(C=br(C),c=br(c)),!vs(i)&&oI(C)&&!oI(c))return _?!1:(C.value=c,!0)}const f=vs(i)&&WW(n)?Number(n)t,P1=t=>Reflect.getPrototypeOf(t);function $sA(t,i,n){return function(...c){const I=this.__v_raw,C=br(I),f=W_(C),w=t==="entries"||t===Symbol.iterator&&f,_=t==="keys"&&f,N=I[t](...c),L=n?O3:i?P3:fu;return!i&&mu(C,"iterate",_?F3:fv),{next(){const{value:q,done:lA}=N.next();return lA?{value:q,done:lA}:{value:w?[L(q[0]),L(q[1])]:L(q),done:lA}},[Symbol.iterator](){return this}}}}function x1(t){return function(...i){return t==="delete"?!1:t==="clear"?void 0:this}}function AnA(t,i){const n={get(I){const C=this.__v_raw,f=br(C),w=br(I);t||(zy(I,w)&&mu(f,"get",I),mu(f,"get",w));const{has:_}=P1(f),N=i?O3:t?P3:fu;if(_.call(f,I))return N(C.get(I));if(_.call(f,w))return N(C.get(w));C!==f&&C.get(I)},get size(){const I=this.__v_raw;return!t&&mu(br(I),"iterate",fv),Reflect.get(I,"size",I)},has(I){const C=this.__v_raw,f=br(C),w=br(I);return t||(zy(I,w)&&mu(f,"has",I),mu(f,"has",w)),I===w?C.has(I):C.has(I)||C.has(w)},forEach(I,C){const f=this,w=f.__v_raw,_=br(w),N=i?O3:t?P3:fu;return!t&&mu(_,"iterate",fv),w.forEach((L,q)=>I.call(C,N(L),N(q),f))}};return nI(n,t?{add:x1("add"),set:x1("set"),delete:x1("delete"),clear:x1("clear")}:{add(I){!i&&!nh(I)&&!bv(I)&&(I=br(I));const C=br(this);return P1(C).has.call(C,I)||(C.add(I),Em(C,"add",I,I)),this},set(I,C){!i&&!nh(C)&&!bv(C)&&(C=br(C));const f=br(this),{has:w,get:_}=P1(f);let N=w.call(f,I);N||(I=br(I),N=w.call(f,I));const L=_.call(f,I);return f.set(I,C),N?zy(C,L)&&Em(f,"set",I,C):Em(f,"add",I,C),this},delete(I){const C=br(this),{has:f,get:w}=P1(C);let _=f.call(C,I);_||(I=br(I),_=f.call(C,I)),w&&w.call(C,I);const N=C.delete(I);return _&&Em(C,"delete",I,void 0),N},clear(){const I=br(this),C=I.size!==0,f=I.clear();return C&&Em(I,"clear",void 0,void 0),f}}),["keys","values","entries",Symbol.iterator].forEach(I=>{n[I]=$sA(I,t,i)}),n}function A4(t,i){const n=AnA(t,i);return(c,I,C)=>I==="__v_isReactive"?!t:I==="__v_isReadonly"?t:I==="__v_raw"?c:Reflect.get(Wr(n,I)&&I in c?n:c,I,C)}const enA={get:A4(!1,!1)},tnA={get:A4(!1,!0)},inA={get:A4(!0,!1)};const a9=new WeakMap,g9=new WeakMap,c9=new WeakMap,onA=new WeakMap;function snA(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function nnA(t){return t.__v_skip||!Object.isExtensible(t)?0:snA(wsA(t))}function Bv(t){return bv(t)?t:e4(t,!1,zsA,enA,a9)}function rnA(t){return e4(t,!1,XsA,tnA,g9)}function Ql(t){return e4(t,!0,ZsA,inA,c9)}function e4(t,i,n,c,I){if(!Na(t)||t.__v_raw&&!(i&&t.__v_isReactive))return t;const C=I.get(t);if(C)return C;const f=nnA(t);if(f===0)return t;const w=new Proxy(t,f===2?c:n);return I.set(t,w),w}function z_(t){return bv(t)?z_(t.__v_raw):!!(t&&t.__v_isReactive)}function bv(t){return!!(t&&t.__v_isReadonly)}function nh(t){return!!(t&&t.__v_isShallow)}function t4(t){return t?!!t.__v_raw:!1}function br(t){const i=t&&t.__v_raw;return i?br(i):t}function anA(t){return!Wr(t,"__v_skip")&&Object.isExtensible(t)&&K6(t,"__v_skip",!0),t}const fu=t=>Na(t)?Bv(t):t,P3=t=>Na(t)?Ql(t):t;function oI(t){return t?t.__v_isRef===!0:!1}function xe(t){return gnA(t,!1)}function gnA(t,i){return oI(t)?t:new cnA(t,i)}class cnA{constructor(i,n){this.dep=new $W,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?i:br(i),this._value=n?i:fu(i),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(i){const n=this._rawValue,c=this.__v_isShallow||nh(i)||bv(i);i=c?i:br(i),zy(i,n)&&(this._rawValue=i,this._value=c?i:fu(i),this.dep.trigger())}}function aA(t){return oI(t)?t.value:t}const lnA={get:(t,i,n)=>i==="__v_raw"?t:aA(Reflect.get(t,i,n)),set:(t,i,n,c)=>{const I=t[i];return oI(I)&&!oI(n)?(I.value=n,!0):Reflect.set(t,i,n,c)}};function l9(t){return z_(t)?t:new Proxy(t,lnA)}function Gs(t){const i=vs(t)?new Array(t.length):{};for(const n in t)i[n]=I9(t,n);return i}class InA{constructor(i,n,c){this._object=i,this._key=n,this._defaultValue=c,this.__v_isRef=!0,this._value=void 0}get value(){const i=this._object[this._key];return this._value=i===void 0?this._defaultValue:i}set value(i){this._object[this._key]=i}get dep(){return JsA(br(this._object),this._key)}}class unA{constructor(i){this._getter=i,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Jj(t,i,n){return oI(t)?t:$s(t)?new unA(t):Na(t)&&arguments.length>1?I9(t,i,n):xe(t)}function I9(t,i,n){const c=t[i];return oI(c)?c:new InA(t,i,n)}class EnA{constructor(i,n,c){this.fn=i,this.setter=n,this._value=void 0,this.dep=new $W(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=DU-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=c}notify(){if(this.flags|=16,!(this.flags&8)&&_a!==this)return $6(this,!0),!0}get value(){const i=this.dep.track();return t9(this),i&&(i.version=this.dep.version),this._value}set value(i){this.setter&&this.setter(i)}}function dnA(t,i,n=!1){let c,I;return $s(t)?c=t:(c=t.get,I=t.set),new EnA(c,I,n)}const Y1={},wY=new WeakMap;let lv;function CnA(t,i=!1,n=lv){if(n){let c=wY.get(n);c||wY.set(n,c=[]),c.push(t)}}function hnA(t,i,n=Da){const{immediate:c,deep:I,once:C,scheduler:f,augmentJob:w,call:_}=n,N=KA=>I?KA:nh(KA)||I===!1||I===0?dm(KA,1):dm(KA);let L,q,lA,tA,BA=!1,IA=!1;if(oI(t)?(q=()=>t.value,BA=nh(t)):z_(t)?(q=()=>N(t),BA=!0):vs(t)?(IA=!0,BA=t.some(KA=>z_(KA)||nh(KA)),q=()=>t.map(KA=>{if(oI(KA))return KA.value;if(z_(KA))return N(KA);if($s(KA))return _?_(KA,2):KA()})):$s(t)?i?q=_?()=>_(t,2):t:q=()=>{if(lA){lD();try{lA()}finally{ID()}}const KA=lv;lv=L;try{return _?_(t,3,[tA]):t(tA)}finally{lv=KA}}:q=TQ,i&&I){const KA=q,me=I===!0?1/0:I;q=()=>dm(KA(),me)}const gA=xsA(),RA=()=>{L.stop(),gA&&gA.active&&jW(gA.effects,L)};if(C&&i){const KA=i;i=(...me)=>{KA(...me),RA()}}let HA=IA?new Array(t.length).fill(Y1):Y1;const ZA=KA=>{if(!(!(L.flags&1)||!L.dirty&&!KA))if(i){const me=L.run();if(I||BA||(IA?me.some((ae,gt)=>zy(ae,HA[gt])):zy(me,HA))){lA&&lA();const ae=lv;lv=L;try{const gt=[me,HA===Y1?void 0:IA&&HA[0]===Y1?[]:HA,tA];_?_(i,3,gt):i(...gt),HA=me}finally{lv=ae}}}else L.run()};return w&&w(ZA),L=new Z6(q),L.scheduler=f?()=>f(ZA,!1):ZA,tA=KA=>CnA(KA,!1,L),lA=L.onStop=()=>{const KA=wY.get(L);if(KA){if(_)_(KA,4);else for(const me of KA)me();wY.delete(L)}},i?c?ZA(!0):HA=L.run():f?f(ZA.bind(null,!0),!0):L.run(),RA.pause=L.pause.bind(L),RA.resume=L.resume.bind(L),RA.stop=RA,RA}function dm(t,i=1/0,n){if(i<=0||!Na(t)||t.__v_skip||(n=n||new Set,n.has(t)))return t;if(n.add(t),i--,oI(t))dm(t.value,i,n);else if(vs(t))for(let c=0;c{dm(c,i,n)});else if(q6(t)){for(const c in t)dm(t[c],i,n);for(const c of Object.getOwnPropertySymbols(t))Object.prototype.propertyIsEnumerable.call(t,c)&&dm(t[c],i,n)}return t}/** * @vue/runtime-core v3.5.13 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/function LU(t,i,r,l){try{return l?t(...l):t()}catch(I){sV(I,i,r)}}function rB(t,i,r,l){if($s(t)){const I=LU(t,i,r,l);return I&&p6(I)&&I.catch(h=>{sV(h,i,r)}),I}if(Ms(t)){const I=[];for(let h=0;h>>1,I=pE[l],h=hU(I);h=hU(r)?pE.push(t):pE.splice(JsA(i),0,t),t.flags|=1,J6()}}function J6(){BY||(BY=V6.then(q6))}function HsA(t){Ms(t)?j_.push(...t):Ly&&t.id===-1?Ly.splice(v_+1,0,t):t.flags&1||(j_.push(t),t.flags|=1),J6()}function I8(t,i,r=QQ+1){for(;rhU(r)-hU(l));if(j_.length=0,Ly){Ly.push(...i);return}for(Ly=i,v_=0;v_t.id==null?t.flags&2?-1:1/0:t.id;function q6(t){try{for(QQ=0;QQ{l._d&&M8(-1);const h=QY(i);let f;try{f=t(...I)}finally{QY(h),l._d&&M8(1)}return f};return l._n=!0,l._c=!0,l._d=!0,l}function Ta(t,i){if(tI===null)return t;const r=lV(tI),l=t.dirs||(t.dirs=[]);for(let I=0;It.__isTeleport,ZL=t=>t&&(t.disabled||t.disabled===""),u8=t=>t&&(t.defer||t.defer===""),E8=t=>typeof SVGElement<"u"&&t instanceof SVGElement,d8=t=>typeof MathMLElement=="function"&&t instanceof MathMLElement,S3=(t,i)=>{const r=t&&t.to;return fg(r)?i?i(r):null:r},W6={name:"Teleport",__isTeleport:!0,process(t,i,r,l,I,h,f,w,_,G){const{mc:U,pc:j,pbc:lA,o:{insert:sA,querySelector:mA,createText:IA,createComment:cA}}=G,TA=ZL(i.props);let{shapeFlag:WA,children:ue,dynamicChildren:Ce}=i;if(t==null){const xe=i.el=IA(""),Qe=i.anchor=IA("");sA(xe,r,l),sA(Qe,r,l);const ut=(je,Mt)=>{WA&16&&(I&&I.isCE&&(I.ce._teleportTarget=je),U(ue,je,Mt,I,h,f,w,_))},ft=()=>{const je=i.target=S3(i.props,mA),Mt=z6(je,i,IA,sA);je&&(f!=="svg"&&E8(je)?f="svg":f!=="mathml"&&d8(je)&&(f="mathml"),TA||(ut(je,Mt),$1(i,!1)))};TA&&(ut(r,Qe),$1(i,!0)),u8(i.props)?BE(()=>{ft(),i.el.__isMounted=!0},h):ft()}else{if(u8(i.props)&&!t.el.__isMounted){BE(()=>{W6.process(t,i,r,l,I,h,f,w,_,G),delete t.el.__isMounted},h);return}i.el=t.el,i.targetStart=t.targetStart;const xe=i.anchor=t.anchor,Qe=i.target=t.target,ut=i.targetAnchor=t.targetAnchor,ft=ZL(t.props),je=ft?r:Qe,Mt=ft?xe:ut;if(f==="svg"||E8(Qe)?f="svg":(f==="mathml"||d8(Qe))&&(f="mathml"),Ce?(lA(t.dynamicChildren,Ce,je,I,h,f,w),FW(t,i,!0)):_||j(t,i,je,Mt,I,h,f,w,!1),TA)ft?i.props&&t.props&&i.props.to!==t.props.to&&(i.props.to=t.props.to):G1(i,r,xe,G,1);else if((i.props&&i.props.to)!==(t.props&&t.props.to)){const jt=i.target=S3(i.props,mA);jt&&G1(i,jt,null,G,0)}else ft&&G1(i,Qe,ut,G,1);$1(i,TA)}},remove(t,i,r,{um:l,o:{remove:I}},h){const{shapeFlag:f,children:w,anchor:_,targetStart:G,targetAnchor:U,target:j,props:lA}=t;if(j&&(I(G),I(U)),h&&I(_),f&16){const sA=h||!ZL(lA);for(let mA=0;mA{t.isMounted=!0}),LW(()=>{t.isUnmounting=!0}),t}const JC=[Function,Array],Z6={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:JC,onEnter:JC,onAfterEnter:JC,onEnterCancelled:JC,onBeforeLeave:JC,onLeave:JC,onAfterLeave:JC,onLeaveCancelled:JC,onBeforeAppear:JC,onAppear:JC,onAfterAppear:JC,onAppearCancelled:JC},X6=t=>{const i=t.subTree;return i.component?X6(i.component):i},WsA={name:"BaseTransition",props:Z6,setup(t,{slots:i}){const r=HnA(),l=jsA();return()=>{const I=i.default&&e9(i.default(),!0);if(!I||!I.length)return;const h=$6(I),f=br(t),{mode:w}=f;if(l.isLeaving)return _j(h);const _=C8(h);if(!_)return _j(h);let G=M3(_,f,l,r,j=>G=j);_.type!==mE&&BU(_,G);let U=r.subTree&&C8(r.subTree);if(U&&U.type!==mE&&!cv(_,U)&&X6(r).type!==mE){let j=M3(U,f,l,r);if(BU(U,j),w==="out-in"&&_.type!==mE)return l.isLeaving=!0,j.afterLeave=()=>{l.isLeaving=!1,r.job.flags&8||r.update(),delete j.afterLeave,U=void 0},_j(h);w==="in-out"&&_.type!==mE?j.delayLeave=(lA,sA,mA)=>{const IA=A9(l,U);IA[String(U.key)]=U,lA[Uy]=()=>{sA(),lA[Uy]=void 0,delete G.delayedLeave,U=void 0},G.delayedLeave=()=>{mA(),delete G.delayedLeave,U=void 0}}:U=void 0}else U&&(U=void 0);return h}}};function $6(t){let i=t[0];if(t.length>1){for(const r of t)if(r.type!==mE){i=r;break}}return i}const zsA=WsA;function A9(t,i){const{leavingVNodes:r}=t;let l=r.get(i.type);return l||(l=Object.create(null),r.set(i.type,l)),l}function M3(t,i,r,l,I){const{appear:h,mode:f,persisted:w=!1,onBeforeEnter:_,onEnter:G,onAfterEnter:U,onEnterCancelled:j,onBeforeLeave:lA,onLeave:sA,onAfterLeave:mA,onLeaveCancelled:IA,onBeforeAppear:cA,onAppear:TA,onAfterAppear:WA,onAppearCancelled:ue}=i,Ce=String(t.key),xe=A9(r,t),Qe=(je,Mt)=>{je&&rB(je,l,9,Mt)},ut=(je,Mt)=>{const jt=Mt[1];Qe(je,Mt),Ms(je)?je.every(Et=>Et.length<=1)&&jt():je.length<=1&&jt()},ft={mode:f,persisted:w,beforeEnter(je){let Mt=_;if(!r.isMounted)if(h)Mt=cA||_;else return;je[Uy]&&je[Uy](!0);const jt=xe[Ce];jt&&cv(t,jt)&&jt.el[Uy]&&jt.el[Uy](),Qe(Mt,[je])},enter(je){let Mt=G,jt=U,Et=j;if(!r.isMounted)if(h)Mt=TA||G,jt=WA||U,Et=ue||j;else return;let re=!1;const qe=je[b1]=yt=>{re||(re=!0,yt?Qe(Et,[je]):Qe(jt,[je]),ft.delayedLeave&&ft.delayedLeave(),je[b1]=void 0)};Mt?ut(Mt,[je,qe]):qe()},leave(je,Mt){const jt=String(t.key);if(je[b1]&&je[b1](!0),r.isUnmounting)return Mt();Qe(lA,[je]);let Et=!1;const re=je[Uy]=qe=>{Et||(Et=!0,Mt(),qe?Qe(IA,[je]):Qe(mA,[je]),je[Uy]=void 0,xe[jt]===t&&delete xe[jt])};xe[jt]=t,sA?ut(sA,[je,re]):re()},clone(je){const Mt=M3(je,i,r,l,I);return I&&I(Mt),Mt}};return ft}function _j(t){if(rV(t))return t=eD(t),t.children=null,t}function C8(t){if(!rV(t))return j6(t.type)&&t.children?$6(t.children):t;const{shapeFlag:i,children:r}=t;if(r){if(i&16)return r[0];if(i&32&&$s(r.default))return r.default()}}function BU(t,i){t.shapeFlag&6&&t.component?(t.transition=i,BU(t.component.subTree,i)):t.shapeFlag&128?(t.ssContent.transition=i.clone(t.ssContent),t.ssFallback.transition=i.clone(t.ssFallback)):t.transition=i}function e9(t,i=!1,r){let l=[],I=0;for(let h=0;h1)for(let h=0;hpY(mA,i&&(Ms(i)?i[IA]:i),r,l,I));return}if(W_(l)&&!I){l.shapeFlag&512&&l.type.__asyncResolved&&l.component.subTree.component&&pY(t,i,r,l.component.subTree);return}const h=l.shapeFlag&4?lV(l.component):l.el,f=I?null:h,{i:w,r:_}=t,G=i&&i.r,U=w.refs===Da?w.refs={}:w.refs,j=w.setupState,lA=br(j),sA=j===Da?()=>!1:mA=>Wr(lA,mA);if(G!=null&&G!==_&&(fg(G)?(U[G]=null,sA(G)&&(j[G]=null)):iI(G)&&(G.value=null)),$s(_))LU(_,w,12,[f,U]);else{const mA=fg(_),IA=iI(_);if(mA||IA){const cA=()=>{if(t.f){const TA=mA?sA(_)?j[_]:U[_]:_.value;I?Ms(TA)&&MW(TA,h):Ms(TA)?TA.includes(h)||TA.push(h):mA?(U[_]=[h],sA(_)&&(j[_]=U[_])):(_.value=[h],t.k&&(U[t.k]=_.value))}else mA?(U[_]=f,sA(_)&&(j[_]=f)):IA&&(_.value=f,t.k&&(U[t.k]=f))};f?(cA.id=-1,BE(cA,r)):cA()}}}iV().requestIdleCallback;iV().cancelIdleCallback;const W_=t=>!!t.type.__asyncLoader,rV=t=>t.type.__isKeepAlive;function ZsA(t,i){i9(t,"a",i)}function XsA(t,i){i9(t,"da",i)}function i9(t,i,r=xI){const l=t.__wdc||(t.__wdc=()=>{let I=r;for(;I;){if(I.isDeactivated)return;I=I.parent}return t()});if(aV(i,l,r),r){let I=r.parent;for(;I&&I.parent;)rV(I.parent.vnode)&&$sA(l,i,r,I),I=I.parent}}function $sA(t,i,r,l){const I=aV(i,t,l,!0);Kg(()=>{MW(l[i],I)},r)}function aV(t,i,r=xI,l=!1){if(r){const I=r[t]||(r[t]=[]),h=i.__weh||(i.__weh=(...f)=>{aD();const w=UU(r),_=rB(i,r,t,f);return w(),gD(),_});return l?I.unshift(h):I.push(h),h}}const hm=t=>(i,r=xI)=>{(!mU||t==="sp")&&aV(t,(...l)=>i(...l),r)},AnA=hm("bm"),hc=hm("m"),enA=hm("bu"),tnA=hm("u"),LW=hm("bum"),Kg=hm("um"),inA=hm("sp"),onA=hm("rtg"),snA=hm("rtc");function nnA(t,i=xI){aV("ec",t,i)}const rnA="components";function anA(t,i){return cnA(rnA,t,!0,i)||t}const gnA=Symbol.for("v-ndc");function cnA(t,i,r=!0,l=!1){const I=tI||xI;if(I){const h=I.type;{const w=znA(h,!1);if(w&&(w===i||w===sh(i)||w===tV(sh(i))))return h}const f=h8(I[t]||h[t],i)||h8(I.appContext[t],i);return!f&&l?h:f}}function h8(t,i){return t&&(t[i]||t[sh(i)]||t[tV(sh(i))])}function yE(t,i,r,l){let I;const h=r,f=Ms(t);if(f||fg(t)){const w=f&&K_(t);let _=!1;w&&(_=!th(t),t=oV(t)),I=new Array(t.length);for(let G=0,U=t.length;Gi(w,_,void 0,h));else{const w=Object.keys(t);I=new Array(w.length);for(let _=0,G=w.length;_pU(i)?!(i.type===mE||i.type===vr&&!o9(i.children)):!0)?t:null}const v3=t=>t?y9(t)?lV(t):v3(t.parent):null,XL=sI(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>v3(t.parent),$root:t=>v3(t.root),$host:t=>t.ce,$emit:t=>t.emit,$options:t=>n9(t),$forceUpdate:t=>t.f||(t.f=()=>{kW(t.update)}),$nextTick:t=>t.n||(t.n=Vy.bind(t.proxy)),$watch:t=>TnA.bind(t)}),Tj=(t,i)=>t!==Da&&!t.__isScriptSetup&&Wr(t,i),lnA={get({_:t},i){if(i==="__v_skip")return!0;const{ctx:r,setupState:l,data:I,props:h,accessCache:f,type:w,appContext:_}=t;let G;if(i[0]!=="$"){const sA=f[i];if(sA!==void 0)switch(sA){case 1:return l[i];case 2:return I[i];case 4:return r[i];case 3:return h[i]}else{if(Tj(l,i))return f[i]=1,l[i];if(I!==Da&&Wr(I,i))return f[i]=2,I[i];if((G=t.propsOptions[0])&&Wr(G,i))return f[i]=3,h[i];if(r!==Da&&Wr(r,i))return f[i]=4,r[i];R3&&(f[i]=0)}}const U=XL[i];let j,lA;if(U)return i==="$attrs"&&pu(t.attrs,"get",""),U(t);if((j=w.__cssModules)&&(j=j[i]))return j;if(r!==Da&&Wr(r,i))return f[i]=4,r[i];if(lA=_.config.globalProperties,Wr(lA,i))return lA[i]},set({_:t},i,r){const{data:l,setupState:I,ctx:h}=t;return Tj(I,i)?(I[i]=r,!0):l!==Da&&Wr(l,i)?(l[i]=r,!0):Wr(t.props,i)||i[0]==="$"&&i.slice(1)in t?!1:(h[i]=r,!0)},has({_:{data:t,setupState:i,accessCache:r,ctx:l,appContext:I,propsOptions:h}},f){let w;return!!r[f]||t!==Da&&Wr(t,f)||Tj(i,f)||(w=h[0])&&Wr(w,f)||Wr(l,f)||Wr(XL,f)||Wr(I.config.globalProperties,f)},defineProperty(t,i,r){return r.get!=null?t._.accessCache[i]=0:Wr(r,"value")&&this.set(t,i,r.value,null),Reflect.defineProperty(t,i,r)}};function B8(t){return Ms(t)?t.reduce((i,r)=>(i[r]=null,i),{}):t}let R3=!0;function InA(t){const i=n9(t),r=t.proxy,l=t.ctx;R3=!1,i.beforeCreate&&Q8(i.beforeCreate,t,"bc");const{data:I,computed:h,methods:f,watch:w,provide:_,inject:G,created:U,beforeMount:j,mounted:lA,beforeUpdate:sA,updated:mA,activated:IA,deactivated:cA,beforeDestroy:TA,beforeUnmount:WA,destroyed:ue,unmounted:Ce,render:xe,renderTracked:Qe,renderTriggered:ut,errorCaptured:ft,serverPrefetch:je,expose:Mt,inheritAttrs:jt,components:Et,directives:re,filters:qe}=i;if(G&&unA(G,l,null),f)for(const Oe in f){const gt=f[Oe];$s(gt)&&(l[Oe]=gt.bind(r))}if(I){const Oe=I.call(r,r);Na(Oe)&&(t.data=dv(Oe))}if(R3=!0,h)for(const Oe in h){const gt=h[Oe],Fi=$s(gt)?gt.bind(r,r):$s(gt.get)?gt.get.bind(r,r):RQ,To=!$s(gt)&&$s(gt.set)?gt.set.bind(r):RQ,io=Tt({get:Fi,set:To});Object.defineProperty(l,Oe,{enumerable:!0,configurable:!0,get:()=>io.value,set:Eo=>io.value=Eo})}if(w)for(const Oe in w)s9(w[Oe],l,r,Oe);if(_){const Oe=$s(_)?_.call(r):_;Reflect.ownKeys(Oe).forEach(gt=>{cd(gt,Oe[gt])})}U&&Q8(U,t,"c");function Me(Oe,gt){Ms(gt)?gt.forEach(Fi=>Oe(Fi.bind(r))):gt&&Oe(gt.bind(r))}if(Me(AnA,j),Me(hc,lA),Me(enA,sA),Me(tnA,mA),Me(ZsA,IA),Me(XsA,cA),Me(nnA,ft),Me(snA,Qe),Me(onA,ut),Me(LW,WA),Me(Kg,Ce),Me(inA,je),Ms(Mt))if(Mt.length){const Oe=t.exposed||(t.exposed={});Mt.forEach(gt=>{Object.defineProperty(Oe,gt,{get:()=>r[gt],set:Fi=>r[gt]=Fi})})}else t.exposed||(t.exposed={});xe&&t.render===RQ&&(t.render=xe),jt!=null&&(t.inheritAttrs=jt),Et&&(t.components=Et),re&&(t.directives=re),je&&t9(t)}function unA(t,i,r=RQ){Ms(t)&&(t=w3(t));for(const l in t){const I=t[l];let h;Na(I)?"default"in I?h=JI(I.from||l,I.default,!0):h=JI(I.from||l):h=JI(I),iI(h)?Object.defineProperty(i,l,{enumerable:!0,configurable:!0,get:()=>h.value,set:f=>h.value=f}):i[l]=h}}function Q8(t,i,r){rB(Ms(t)?t.map(l=>l.bind(i.proxy)):t.bind(i.proxy),i,r)}function s9(t,i,r,l){let I=l.includes(".")?B9(r,l):()=>r[l];if(fg(t)){const h=i[t];$s(h)&&Rr(I,h)}else if($s(t))Rr(I,t.bind(r));else if(Na(t))if(Ms(t))t.forEach(h=>s9(h,i,r,l));else{const h=$s(t.handler)?t.handler.bind(r):i[t.handler];$s(h)&&Rr(I,h,t)}}function n9(t){const i=t.type,{mixins:r,extends:l}=i,{mixins:I,optionsCache:h,config:{optionMergeStrategies:f}}=t.appContext,w=h.get(i);let _;return w?_=w:!I.length&&!r&&!l?_=i:(_={},I.length&&I.forEach(G=>mY(_,G,f,!0)),mY(_,i,f)),Na(i)&&h.set(i,_),_}function mY(t,i,r,l=!1){const{mixins:I,extends:h}=i;h&&mY(t,h,r,!0),I&&I.forEach(f=>mY(t,f,r,!0));for(const f in i)if(!(l&&f==="expose")){const w=EnA[f]||r&&r[f];t[f]=w?w(t[f],i[f]):i[f]}return t}const EnA={data:p8,props:m8,emits:m8,methods:wL,computed:wL,beforeCreate:dE,created:dE,beforeMount:dE,mounted:dE,beforeUpdate:dE,updated:dE,beforeDestroy:dE,beforeUnmount:dE,destroyed:dE,unmounted:dE,activated:dE,deactivated:dE,errorCaptured:dE,serverPrefetch:dE,components:wL,directives:wL,watch:CnA,provide:p8,inject:dnA};function p8(t,i){return i?t?function(){return sI($s(t)?t.call(this,this):t,$s(i)?i.call(this,this):i)}:i:t}function dnA(t,i){return wL(w3(t),w3(i))}function w3(t){if(Ms(t)){const i={};for(let r=0;r1)return r&&$s(i)?i.call(l&&l.proxy):i}}const a9={},g9=()=>Object.create(a9),c9=t=>Object.getPrototypeOf(t)===a9;function QnA(t,i,r,l=!1){const I={},h=g9();t.propsDefaults=Object.create(null),l9(t,i,I,h);for(const f in t.propsOptions[0])f in I||(I[f]=void 0);r?t.props=l?I:NsA(I):t.type.props?t.props=I:t.props=h,t.attrs=h}function pnA(t,i,r,l){const{props:I,attrs:h,vnode:{patchFlag:f}}=t,w=br(I),[_]=t.propsOptions;let G=!1;if((l||f>0)&&!(f&16)){if(f&8){const U=t.vnode.dynamicProps;for(let j=0;j{_=!0;const[lA,sA]=I9(j,i,!0);sI(f,lA),sA&&w.push(...sA)};!r&&i.mixins.length&&i.mixins.forEach(U),t.extends&&U(t.extends),t.mixins&&t.mixins.forEach(U)}if(!h&&!_)return Na(t)&&l.set(t,H_),H_;if(Ms(h))for(let U=0;Ut[0]==="_"||t==="$stable",UW=t=>Ms(t)?t.map(fQ):[fQ(t)],fnA=(t,i,r)=>{if(i._n)return i;const l=Li((...I)=>UW(i(...I)),r);return l._c=!1,l},E9=(t,i,r)=>{const l=t._ctx;for(const I in t){if(u9(I))continue;const h=t[I];if($s(h))i[I]=fnA(I,h,l);else if(h!=null){const f=UW(h);i[I]=()=>f}}},d9=(t,i)=>{const r=UW(i);t.slots.default=()=>r},C9=(t,i,r)=>{for(const l in i)(r||l!=="_")&&(t[l]=i[l])},ynA=(t,i,r)=>{const l=t.slots=g9();if(t.vnode.shapeFlag&32){const I=i._;I?(C9(l,i,r),r&&y6(l,"_",I,!0)):E9(i,l)}else i&&d9(t,i)},DnA=(t,i,r)=>{const{vnode:l,slots:I}=t;let h=!0,f=Da;if(l.shapeFlag&32){const w=i._;w?r&&w===1?h=!1:C9(I,i,r):(h=!i.$stable,E9(i,I)),f=i}else i&&(d9(t,i),f={default:1});if(h)for(const w in I)!u9(w)&&f[w]==null&&delete I[w]},BE=FnA;function SnA(t){return MnA(t)}function MnA(t,i){const r=iV();r.__VUE__=!0;const{insert:l,remove:I,patchProp:h,createElement:f,createText:w,createComment:_,setText:G,setElementText:U,parentNode:j,nextSibling:lA,setScopeId:sA=RQ,insertStaticContent:mA}=t,IA=(HA,ce,Ve,Ot=null,nt=null,It=null,ei=void 0,ti=null,be=!!ce.dynamicChildren)=>{if(HA===ce)return;HA&&!cv(HA,ce)&&(Ot=Ao(HA),Eo(HA,nt,It,!0),HA=null),ce.patchFlag===-2&&(be=!1,ce.dynamicChildren=null);const{type:Ze,ref:wt,shapeFlag:Nt}=ce;switch(Ze){case cV:cA(HA,ce,Ve,Ot);break;case mE:TA(HA,ce,Ve,Ot);break;case Gj:HA==null&&WA(ce,Ve,Ot,ei);break;case vr:Et(HA,ce,Ve,Ot,nt,It,ei,ti,be);break;default:Nt&1?xe(HA,ce,Ve,Ot,nt,It,ei,ti,be):Nt&6?re(HA,ce,Ve,Ot,nt,It,ei,ti,be):(Nt&64||Nt&128)&&Ze.process(HA,ce,Ve,Ot,nt,It,ei,ti,be,bi)}wt!=null&&nt&&pY(wt,HA&&HA.ref,It,ce||HA,!ce)},cA=(HA,ce,Ve,Ot)=>{if(HA==null)l(ce.el=w(ce.children),Ve,Ot);else{const nt=ce.el=HA.el;ce.children!==HA.children&&G(nt,ce.children)}},TA=(HA,ce,Ve,Ot)=>{HA==null?l(ce.el=_(ce.children||""),Ve,Ot):ce.el=HA.el},WA=(HA,ce,Ve,Ot)=>{[HA.el,HA.anchor]=mA(HA.children,ce,Ve,Ot,HA.el,HA.anchor)},ue=({el:HA,anchor:ce},Ve,Ot)=>{let nt;for(;HA&&HA!==ce;)nt=lA(HA),l(HA,Ve,Ot),HA=nt;l(ce,Ve,Ot)},Ce=({el:HA,anchor:ce})=>{let Ve;for(;HA&&HA!==ce;)Ve=lA(HA),I(HA),HA=Ve;I(ce)},xe=(HA,ce,Ve,Ot,nt,It,ei,ti,be)=>{ce.type==="svg"?ei="svg":ce.type==="math"&&(ei="mathml"),HA==null?Qe(ce,Ve,Ot,nt,It,ei,ti,be):je(HA,ce,nt,It,ei,ti,be)},Qe=(HA,ce,Ve,Ot,nt,It,ei,ti)=>{let be,Ze;const{props:wt,shapeFlag:Nt,transition:Oi,dirs:po}=HA;if(be=HA.el=f(HA.type,It,wt&&wt.is,wt),Nt&8?U(be,HA.children):Nt&16&&ft(HA.children,be,null,Ot,nt,Nj(HA,It),ei,ti),po&&ev(HA,null,Ot,"created"),ut(be,HA,HA.scopeId,ei,Ot),wt){for(const so in wt)so!=="value"&&!jL(so)&&h(be,so,null,wt[so],It,Ot);"value"in wt&&h(be,"value",null,wt.value,It),(Ze=wt.onVnodeBeforeMount)&&BQ(Ze,Ot,HA)}po&&ev(HA,null,Ot,"beforeMount");const No=vnA(nt,Oi);No&&Oi.beforeEnter(be),l(be,ce,Ve),((Ze=wt&&wt.onVnodeMounted)||No||po)&&BE(()=>{Ze&&BQ(Ze,Ot,HA),No&&Oi.enter(be),po&&ev(HA,null,Ot,"mounted")},nt)},ut=(HA,ce,Ve,Ot,nt)=>{if(Ve&&sA(HA,Ve),Ot)for(let It=0;It{for(let Ze=be;Ze{const ti=ce.el=HA.el;let{patchFlag:be,dynamicChildren:Ze,dirs:wt}=ce;be|=HA.patchFlag&16;const Nt=HA.props||Da,Oi=ce.props||Da;let po;if(Ve&&tv(Ve,!1),(po=Oi.onVnodeBeforeUpdate)&&BQ(po,Ve,ce,HA),wt&&ev(ce,HA,Ve,"beforeUpdate"),Ve&&tv(Ve,!0),(Nt.innerHTML&&Oi.innerHTML==null||Nt.textContent&&Oi.textContent==null)&&U(ti,""),Ze?Mt(HA.dynamicChildren,Ze,ti,Ve,Ot,Nj(ce,nt),It):ei||gt(HA,ce,ti,null,Ve,Ot,Nj(ce,nt),It,!1),be>0){if(be&16)jt(ti,Nt,Oi,Ve,nt);else if(be&2&&Nt.class!==Oi.class&&h(ti,"class",null,Oi.class,nt),be&4&&h(ti,"style",Nt.style,Oi.style,nt),be&8){const No=ce.dynamicProps;for(let so=0;so{po&&BQ(po,Ve,ce,HA),wt&&ev(ce,HA,Ve,"updated")},Ot)},Mt=(HA,ce,Ve,Ot,nt,It,ei)=>{for(let ti=0;ti{if(ce!==Ve){if(ce!==Da)for(const It in ce)!jL(It)&&!(It in Ve)&&h(HA,It,ce[It],null,nt,Ot);for(const It in Ve){if(jL(It))continue;const ei=Ve[It],ti=ce[It];ei!==ti&&It!=="value"&&h(HA,It,ti,ei,nt,Ot)}"value"in Ve&&h(HA,"value",ce.value,Ve.value,nt)}},Et=(HA,ce,Ve,Ot,nt,It,ei,ti,be)=>{const Ze=ce.el=HA?HA.el:w(""),wt=ce.anchor=HA?HA.anchor:w("");let{patchFlag:Nt,dynamicChildren:Oi,slotScopeIds:po}=ce;po&&(ti=ti?ti.concat(po):po),HA==null?(l(Ze,Ve,Ot),l(wt,Ve,Ot),ft(ce.children||[],Ve,wt,nt,It,ei,ti,be)):Nt>0&&Nt&64&&Oi&&HA.dynamicChildren?(Mt(HA.dynamicChildren,Oi,Ve,nt,It,ei,ti),(ce.key!=null||nt&&ce===nt.subTree)&&FW(HA,ce,!0)):gt(HA,ce,Ve,wt,nt,It,ei,ti,be)},re=(HA,ce,Ve,Ot,nt,It,ei,ti,be)=>{ce.slotScopeIds=ti,HA==null?ce.shapeFlag&512?nt.ctx.activate(ce,Ve,Ot,ei,be):qe(ce,Ve,Ot,nt,It,ei,be):yt(HA,ce,be)},qe=(HA,ce,Ve,Ot,nt,It,ei)=>{const ti=HA.component=JnA(HA,Ot,nt);if(rV(HA)&&(ti.ctx.renderer=bi),qnA(ti,!1,ei),ti.asyncDep){if(nt&&nt.registerDep(ti,Me,ei),!HA.el){const be=ti.subTree=Lt(mE);TA(null,be,ce,Ve)}}else Me(ti,HA,ce,Ve,nt,It,ei)},yt=(HA,ce,Ve)=>{const Ot=ce.component=HA.component;if(LnA(HA,ce,Ve))if(Ot.asyncDep&&!Ot.asyncResolved){Oe(Ot,ce,Ve);return}else Ot.next=ce,Ot.update();else ce.el=HA.el,Ot.vnode=ce},Me=(HA,ce,Ve,Ot,nt,It,ei)=>{const ti=()=>{if(HA.isMounted){let{next:Nt,bu:Oi,u:po,parent:No,vnode:so}=HA;{const an=h9(HA);if(an){Nt&&(Nt.el=so.el,Oe(HA,Nt,ei)),an.asyncDep.then(()=>{HA.isUnmounted||ti()});return}}let Go=Nt,An;tv(HA,!1),Nt?(Nt.el=so.el,Oe(HA,Nt,ei)):Nt=so,Oi&&X1(Oi),(An=Nt.props&&Nt.props.onVnodeBeforeUpdate)&&BQ(An,No,Nt,so),tv(HA,!0);const rn=D8(HA),Es=HA.subTree;HA.subTree=rn,IA(Es,rn,j(Es.el),Ao(Es),HA,nt,It),Nt.el=rn.el,Go===null&&UnA(HA,rn.el),po&&BE(po,nt),(An=Nt.props&&Nt.props.onVnodeUpdated)&&BE(()=>BQ(An,No,Nt,so),nt)}else{let Nt;const{el:Oi,props:po}=ce,{bm:No,m:so,parent:Go,root:An,type:rn}=HA,Es=W_(ce);tv(HA,!1),No&&X1(No),!Es&&(Nt=po&&po.onVnodeBeforeMount)&&BQ(Nt,Go,ce),tv(HA,!0);{An.ce&&An.ce._injectChildStyle(rn);const an=HA.subTree=D8(HA);IA(null,an,Ve,Ot,HA,nt,It),ce.el=an.el}if(so&&BE(so,nt),!Es&&(Nt=po&&po.onVnodeMounted)){const an=ce;BE(()=>BQ(Nt,Go,an),nt)}(ce.shapeFlag&256||Go&&W_(Go.vnode)&&Go.vnode.shapeFlag&256)&&HA.a&&BE(HA.a,nt),HA.isMounted=!0,ce=Ve=Ot=null}};HA.scope.on();const be=HA.effect=new v6(ti);HA.scope.off();const Ze=HA.update=be.run.bind(be),wt=HA.job=be.runIfDirty.bind(be);wt.i=HA,wt.id=HA.uid,be.scheduler=()=>kW(wt),tv(HA,!0),Ze()},Oe=(HA,ce,Ve)=>{ce.component=HA;const Ot=HA.vnode.props;HA.vnode=ce,HA.next=null,pnA(HA,ce.props,Ot,Ve),DnA(HA,ce.children,Ve),aD(),I8(HA),gD()},gt=(HA,ce,Ve,Ot,nt,It,ei,ti,be=!1)=>{const Ze=HA&&HA.children,wt=HA?HA.shapeFlag:0,Nt=ce.children,{patchFlag:Oi,shapeFlag:po}=ce;if(Oi>0){if(Oi&128){To(Ze,Nt,Ve,Ot,nt,It,ei,ti,be);return}else if(Oi&256){Fi(Ze,Nt,Ve,Ot,nt,It,ei,ti,be);return}}po&8?(wt&16&&jo(Ze,nt,It),Nt!==Ze&&U(Ve,Nt)):wt&16?po&16?To(Ze,Nt,Ve,Ot,nt,It,ei,ti,be):jo(Ze,nt,It,!0):(wt&8&&U(Ve,""),po&16&&ft(Nt,Ve,Ot,nt,It,ei,ti,be))},Fi=(HA,ce,Ve,Ot,nt,It,ei,ti,be)=>{HA=HA||H_,ce=ce||H_;const Ze=HA.length,wt=ce.length,Nt=Math.min(Ze,wt);let Oi;for(Oi=0;Oiwt?jo(HA,nt,It,!0,!1,Nt):ft(ce,Ve,Ot,nt,It,ei,ti,be,Nt)},To=(HA,ce,Ve,Ot,nt,It,ei,ti,be)=>{let Ze=0;const wt=ce.length;let Nt=HA.length-1,Oi=wt-1;for(;Ze<=Nt&&Ze<=Oi;){const po=HA[Ze],No=ce[Ze]=be?Fy(ce[Ze]):fQ(ce[Ze]);if(cv(po,No))IA(po,No,Ve,null,nt,It,ei,ti,be);else break;Ze++}for(;Ze<=Nt&&Ze<=Oi;){const po=HA[Nt],No=ce[Oi]=be?Fy(ce[Oi]):fQ(ce[Oi]);if(cv(po,No))IA(po,No,Ve,null,nt,It,ei,ti,be);else break;Nt--,Oi--}if(Ze>Nt){if(Ze<=Oi){const po=Oi+1,No=poOi)for(;Ze<=Nt;)Eo(HA[Ze],nt,It,!0),Ze++;else{const po=Ze,No=Ze,so=new Map;for(Ze=No;Ze<=Oi;Ze++){const Jn=ce[Ze]=be?Fy(ce[Ze]):fQ(ce[Ze]);Jn.key!=null&&so.set(Jn.key,Ze)}let Go,An=0;const rn=Oi-No+1;let Es=!1,an=0;const Do=new Array(rn);for(Ze=0;Ze=rn){Eo(Jn,nt,It,!0);continue}let Qr;if(Jn.key!=null)Qr=so.get(Jn.key);else for(Go=No;Go<=Oi;Go++)if(Do[Go-No]===0&&cv(Jn,ce[Go])){Qr=Go;break}Qr===void 0?Eo(Jn,nt,It,!0):(Do[Qr-No]=Ze+1,Qr>=an?an=Qr:Es=!0,IA(Jn,ce[Qr],Ve,null,nt,It,ei,ti,be),An++)}const pA=Es?RnA(Do):H_;for(Go=pA.length-1,Ze=rn-1;Ze>=0;Ze--){const Jn=No+Ze,Qr=ce[Jn],ds=Jn+1{const{el:It,type:ei,transition:ti,children:be,shapeFlag:Ze}=HA;if(Ze&6){io(HA.component.subTree,ce,Ve,Ot);return}if(Ze&128){HA.suspense.move(ce,Ve,Ot);return}if(Ze&64){ei.move(HA,ce,Ve,bi);return}if(ei===vr){l(It,ce,Ve);for(let Nt=0;Ntti.enter(It),nt);else{const{leave:Nt,delayLeave:Oi,afterLeave:po}=ti,No=()=>l(It,ce,Ve),so=()=>{Nt(It,()=>{No(),po&&po()})};Oi?Oi(It,No,so):so()}else l(It,ce,Ve)},Eo=(HA,ce,Ve,Ot=!1,nt=!1)=>{const{type:It,props:ei,ref:ti,children:be,dynamicChildren:Ze,shapeFlag:wt,patchFlag:Nt,dirs:Oi,cacheIndex:po}=HA;if(Nt===-2&&(nt=!1),ti!=null&&pY(ti,null,Ve,HA,!0),po!=null&&(ce.renderCache[po]=void 0),wt&256){ce.ctx.deactivate(HA);return}const No=wt&1&&Oi,so=!W_(HA);let Go;if(so&&(Go=ei&&ei.onVnodeBeforeUnmount)&&BQ(Go,ce,HA),wt&6)ns(HA.component,Ve,Ot);else{if(wt&128){HA.suspense.unmount(Ve,Ot);return}No&&ev(HA,null,ce,"beforeUnmount"),wt&64?HA.type.remove(HA,ce,Ve,bi,Ot):Ze&&!Ze.hasOnce&&(It!==vr||Nt>0&&Nt&64)?jo(Ze,ce,Ve,!1,!0):(It===vr&&Nt&384||!nt&&wt&16)&&jo(be,ce,Ve),Ot&&Vs(HA)}(so&&(Go=ei&&ei.onVnodeUnmounted)||No)&&BE(()=>{Go&&BQ(Go,ce,HA),No&&ev(HA,null,ce,"unmounted")},Ve)},Vs=HA=>{const{type:ce,el:Ve,anchor:Ot,transition:nt}=HA;if(ce===vr){ki(Ve,Ot);return}if(ce===Gj){Ce(HA);return}const It=()=>{I(Ve),nt&&!nt.persisted&&nt.afterLeave&&nt.afterLeave()};if(HA.shapeFlag&1&&nt&&!nt.persisted){const{leave:ei,delayLeave:ti}=nt,be=()=>ei(Ve,It);ti?ti(HA.el,It,be):be()}else It()},ki=(HA,ce)=>{let Ve;for(;HA!==ce;)Ve=lA(HA),I(HA),HA=Ve;I(ce)},ns=(HA,ce,Ve)=>{const{bum:Ot,scope:nt,job:It,subTree:ei,um:ti,m:be,a:Ze}=HA;y8(be),y8(Ze),Ot&&X1(Ot),nt.stop(),It&&(It.flags|=8,Eo(ei,HA,ce,Ve)),ti&&BE(ti,ce),BE(()=>{HA.isUnmounted=!0},ce),ce&&ce.pendingBranch&&!ce.isUnmounted&&HA.asyncDep&&!HA.asyncResolved&&HA.suspenseId===ce.pendingId&&(ce.deps--,ce.deps===0&&ce.resolve())},jo=(HA,ce,Ve,Ot=!1,nt=!1,It=0)=>{for(let ei=It;ei{if(HA.shapeFlag&6)return Ao(HA.component.subTree);if(HA.shapeFlag&128)return HA.suspense.next();const ce=lA(HA.anchor||HA.el),Ve=ce&&ce[K6];return Ve?lA(Ve):ce};let Zt=!1;const oo=(HA,ce,Ve)=>{HA==null?ce._vnode&&Eo(ce._vnode,null,null,!0):IA(ce._vnode||null,HA,ce,null,null,null,Ve),ce._vnode=HA,Zt||(Zt=!0,I8(),H6(),Zt=!1)},bi={p:IA,um:Eo,m:io,r:Vs,mt:qe,mc:ft,pc:gt,pbc:Mt,n:Ao,o:t};return{render:oo,hydrate:void 0,createApp:BnA(oo)}}function Nj({type:t,props:i},r){return r==="svg"&&t==="foreignObject"||r==="mathml"&&t==="annotation-xml"&&i&&i.encoding&&i.encoding.includes("html")?void 0:r}function tv({effect:t,job:i},r){r?(t.flags|=32,i.flags|=4):(t.flags&=-33,i.flags&=-5)}function vnA(t,i){return(!t||t&&!t.pendingBranch)&&i&&!i.persisted}function FW(t,i,r=!1){const l=t.children,I=i.children;if(Ms(l)&&Ms(I))for(let h=0;h>1,t[r[w]]0&&(i[l]=r[h-1]),r[h]=l)}}for(h=r.length,f=r[h-1];h-- >0;)r[h]=f,f=i[f];return r}function h9(t){const i=t.subTree.component;if(i)return i.asyncDep&&!i.asyncResolved?i:h9(i)}function y8(t){if(t)for(let i=0;iJI(wnA);function ET(t,i){return OW(t,null,i)}function Rr(t,i,r){return OW(t,i,r)}function OW(t,i,r=Da){const{immediate:l,deep:I,flush:h,once:f}=r,w=sI({},r),_=i&&l||!i&&h!=="post";let G;if(mU){if(h==="sync"){const sA=_nA();G=sA.__watcherHandles||(sA.__watcherHandles=[])}else if(!_){const sA=()=>{};return sA.stop=RQ,sA.resume=RQ,sA.pause=RQ,sA}}const U=xI;w.call=(sA,mA,IA)=>rB(sA,U,mA,IA);let j=!1;h==="post"?w.scheduler=sA=>{BE(sA,U&&U.suspense)}:h!=="sync"&&(j=!0,w.scheduler=(sA,mA)=>{mA?sA():kW(sA)}),w.augmentJob=sA=>{i&&(sA.flags|=4),j&&(sA.flags|=2,U&&(sA.id=U.uid,sA.i=U))};const lA=YsA(t,i,w);return mU&&(G?G.push(lA):_&&lA()),lA}function TnA(t,i,r){const l=this.proxy,I=fg(t)?t.includes(".")?B9(l,t):()=>l[t]:t.bind(l,l);let h;$s(i)?h=i:(h=i.handler,r=i);const f=UU(this),w=OW(I,h.bind(l),r);return f(),w}function B9(t,i){const r=i.split(".");return()=>{let l=t;for(let I=0;Ii==="modelValue"||i==="model-value"?t.modelModifiers:t[`${i}Modifiers`]||t[`${sh(i)}Modifiers`]||t[`${rD(i)}Modifiers`];function GnA(t,i,...r){if(t.isUnmounted)return;const l=t.vnode.props||Da;let I=r;const h=i.startsWith("update:"),f=h&&NnA(l,i.slice(7));f&&(f.trim&&(I=r.map(U=>fg(U)?U.trim():U)),f.number&&(I=r.map(p3)));let w,_=l[w=Dj(i)]||l[w=Dj(sh(i))];!_&&h&&(_=l[w=Dj(rD(i))]),_&&rB(_,t,6,I);const G=l[w+"Once"];if(G){if(!t.emitted)t.emitted={};else if(t.emitted[w])return;t.emitted[w]=!0,rB(G,t,6,I)}}function Q9(t,i,r=!1){const l=i.emitsCache,I=l.get(t);if(I!==void 0)return I;const h=t.emits;let f={},w=!1;if(!$s(t)){const _=G=>{const U=Q9(G,i,!0);U&&(w=!0,sI(f,U))};!r&&i.mixins.length&&i.mixins.forEach(_),t.extends&&_(t.extends),t.mixins&&t.mixins.forEach(_)}return!h&&!w?(Na(t)&&l.set(t,null),null):(Ms(h)?h.forEach(_=>f[_]=null):sI(f,h),Na(t)&&l.set(t,f),f)}function gV(t,i){return!t||!$Y(i)?!1:(i=i.slice(2).replace(/Once$/,""),Wr(t,i[0].toLowerCase()+i.slice(1))||Wr(t,rD(i))||Wr(t,i))}function D8(t){const{type:i,vnode:r,proxy:l,withProxy:I,propsOptions:[h],slots:f,attrs:w,emit:_,render:G,renderCache:U,props:j,data:lA,setupState:sA,ctx:mA,inheritAttrs:IA}=t,cA=QY(t);let TA,WA;try{if(r.shapeFlag&4){const Ce=I||l,xe=Ce;TA=fQ(G.call(xe,Ce,U,j,sA,lA,mA)),WA=w}else{const Ce=i;TA=fQ(Ce.length>1?Ce(j,{attrs:w,slots:f,emit:_}):Ce(j,null)),WA=i.props?w:bnA(w)}}catch(Ce){$L.length=0,sV(Ce,t,1),TA=Lt(mE)}let ue=TA;if(WA&&IA!==!1){const Ce=Object.keys(WA),{shapeFlag:xe}=ue;Ce.length&&xe&7&&(h&&Ce.some(SW)&&(WA=knA(WA,h)),ue=eD(ue,WA,!1,!0))}return r.dirs&&(ue=eD(ue,null,!1,!0),ue.dirs=ue.dirs?ue.dirs.concat(r.dirs):r.dirs),r.transition&&BU(ue,r.transition),TA=ue,QY(cA),TA}const bnA=t=>{let i;for(const r in t)(r==="class"||r==="style"||$Y(r))&&((i||(i={}))[r]=t[r]);return i},knA=(t,i)=>{const r={};for(const l in t)(!SW(l)||!(l.slice(9)in i))&&(r[l]=t[l]);return r};function LnA(t,i,r){const{props:l,children:I,component:h}=t,{props:f,children:w,patchFlag:_}=i,G=h.emitsOptions;if(i.dirs||i.transition)return!0;if(r&&_>=0){if(_&1024)return!0;if(_&16)return l?S8(l,f,G):!!f;if(_&8){const U=i.dynamicProps;for(let j=0;jt.__isSuspense;function FnA(t,i){i&&i.pendingBranch?Ms(t)?i.effects.push(...t):i.effects.push(t):HsA(t)}const vr=Symbol.for("v-fgt"),cV=Symbol.for("v-txt"),mE=Symbol.for("v-cmt"),Gj=Symbol.for("v-stc"),$L=[];let oC=null;function ie(t=!1){$L.push(oC=t?null:[])}function OnA(){$L.pop(),oC=$L[$L.length-1]||null}let QU=1;function M8(t,i=!1){QU+=t,t<0&&oC&&i&&(oC.hasOnce=!0)}function m9(t){return t.dynamicChildren=QU>0?oC||H_:null,OnA(),QU>0&&oC&&oC.push(t),t}function $e(t,i,r,l,I,h){return m9(ne(t,i,r,l,I,h,!0))}function Qi(t,i,r,l,I){return m9(Lt(t,i,r,l,I,!0))}function pU(t){return t?t.__v_isVNode===!0:!1}function cv(t,i){return t.type===i.type&&t.key===i.key}const f9=({key:t})=>t??null,AY=({ref:t,ref_key:i,ref_for:r})=>(typeof t=="number"&&(t=""+t),t!=null?fg(t)||iI(t)||$s(t)?{i:tI,r:t,k:i,f:!!r}:t:null);function ne(t,i=null,r=null,l=0,I=null,h=t===vr?0:1,f=!1,w=!1){const _={__v_isVNode:!0,__v_skip:!0,type:t,props:i,key:i&&f9(i),ref:i&&AY(i),scopeId:nV,slotScopeIds:null,children:r,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:h,patchFlag:l,dynamicProps:I,dynamicChildren:null,appContext:null,ctx:tI};return w?(PW(_,r),h&128&&t.normalize(_)):r&&(_.shapeFlag|=fg(r)?8:16),QU>0&&!f&&oC&&(_.patchFlag>0||h&6)&&_.patchFlag!==32&&oC.push(_),_}const Lt=PnA;function PnA(t,i=null,r=null,l=0,I=null,h=!1){if((!t||t===gnA)&&(t=mE),pU(t)){const w=eD(t,i,!0);return r&&PW(w,r),QU>0&&!h&&oC&&(w.shapeFlag&6?oC[oC.indexOf(t)]=w:oC.push(w)),w.patchFlag=-2,w}if(ZnA(t)&&(t=t.__vccOpts),i){i=xnA(i);let{class:w,style:_}=i;w&&!fg(w)&&(i.class=qi(w)),Na(_)&&(bW(_)&&!Ms(_)&&(_=sI({},_)),i.style=Br(_))}const f=fg(t)?1:p9(t)?128:j6(t)?64:Na(t)?4:$s(t)?2:0;return ne(t,i,r,l,I,f,h,!0)}function xnA(t){return t?bW(t)||c9(t)?sI({},t):t:null}function eD(t,i,r=!1,l=!1){const{props:I,ref:h,patchFlag:f,children:w,transition:_}=t,G=i?T3(I||{},i):I,U={__v_isVNode:!0,__v_skip:!0,type:t.type,props:G,key:G&&f9(G),ref:i&&i.ref?r&&h?Ms(h)?h.concat(AY(i)):[h,AY(i)]:AY(i):h,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:w,target:t.target,targetStart:t.targetStart,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:i&&t.type!==vr?f===-1?16:f|16:f,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:_,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&eD(t.ssContent),ssFallback:t.ssFallback&&eD(t.ssFallback),el:t.el,anchor:t.anchor,ctx:t.ctx,ce:t.ce};return _&&l&&BU(U,_.clone(U)),U}function Ia(t=" ",i=0){return Lt(cV,null,t,i)}function zt(t="",i=!1){return i?(ie(),Qi(mE,null,t)):Lt(mE,null,t)}function fQ(t){return t==null||typeof t=="boolean"?Lt(mE):Ms(t)?Lt(vr,null,t.slice()):pU(t)?Fy(t):Lt(cV,null,String(t))}function Fy(t){return t.el===null&&t.patchFlag!==-1||t.memo?t:eD(t)}function PW(t,i){let r=0;const{shapeFlag:l}=t;if(i==null)i=null;else if(Ms(i))r=16;else if(typeof i=="object")if(l&65){const I=i.default;I&&(I._c&&(I._d=!1),PW(t,I()),I._c&&(I._d=!0));return}else{r=32;const I=i._;!I&&!c9(i)?i._ctx=tI:I===3&&tI&&(tI.slots._===1?i._=1:(i._=2,t.patchFlag|=1024))}else $s(i)?(i={default:i,_ctx:tI},r=32):(i=String(i),l&64?(r=16,i=[Ia(i)]):r=8);t.children=i,t.shapeFlag|=r}function T3(...t){const i={};for(let r=0;rxI||tI;let fY,N3;{const t=iV(),i=(r,l)=>{let I;return(I=t[r])||(I=t[r]=[]),I.push(l),h=>{I.length>1?I.forEach(f=>f(h)):I[0](h)}};fY=i("__VUE_INSTANCE_SETTERS__",r=>xI=r),N3=i("__VUE_SSR_SETTERS__",r=>mU=r)}const UU=t=>{const i=xI;return fY(t),t.scope.on(),()=>{t.scope.off(),fY(i)}},v8=()=>{xI&&xI.scope.off(),fY(null)};function y9(t){return t.vnode.shapeFlag&4}let mU=!1;function qnA(t,i=!1,r=!1){i&&N3(i);const{props:l,children:I}=t.vnode,h=y9(t);QnA(t,l,h,i),ynA(t,I,r);const f=h?KnA(t,i):void 0;return i&&N3(!1),f}function KnA(t,i){const r=t.type;t.accessCache=Object.create(null),t.proxy=new Proxy(t.ctx,lnA);const{setup:l}=r;if(l){aD();const I=t.setupContext=l.length>1?WnA(t):null,h=UU(t),f=LU(l,t,0,[t.props,I]),w=p6(f);if(gD(),h(),(w||t.sp)&&!W_(t)&&t9(t),w){if(f.then(v8,v8),i)return f.then(_=>{R8(t,_)}).catch(_=>{sV(_,t,0)});t.asyncDep=f}else R8(t,f)}else D9(t)}function R8(t,i,r){$s(i)?t.type.__ssrInlineRender?t.ssrRender=i:t.render=i:Na(i)&&(t.setupState=x6(i)),D9(t)}function D9(t,i,r){const l=t.type;t.render||(t.render=l.render||RQ);{const I=UU(t);aD();try{InA(t)}finally{gD(),I()}}}const jnA={get(t,i){return pu(t,"get",""),t[i]}};function WnA(t){const i=r=>{t.exposed=r||{}};return{attrs:new Proxy(t.attrs,jnA),slots:t.slots,emit:t.emit,expose:i}}function lV(t){return t.exposed?t.exposeProxy||(t.exposeProxy=new Proxy(x6(GsA(t.exposed)),{get(i,r){if(r in i)return i[r];if(r in XL)return XL[r](t)},has(i,r){return r in i||r in XL}})):t.proxy}function znA(t,i=!0){return $s(t)?t.displayName||t.name:t.name||i&&t.__name}function ZnA(t){return $s(t)&&"__vccOpts"in t}const Tt=(t,i)=>PsA(t,i,mU);function XnA(t,i,r){const l=arguments.length;return l===2?Na(i)&&!Ms(i)?pU(i)?Lt(t,null,[i]):Lt(t,i):Lt(t,null,i):(l>3?r=Array.prototype.slice.call(arguments,2):l===3&&pU(r)&&(r=[r]),Lt(t,i,r))}const G3="3.5.13";/** +**/function qU(t,i,n,c){try{return c?t(...c):t()}catch(I){QV(I,i,n)}}function cB(t,i,n,c){if($s(t)){const I=qU(t,i,n,c);return I&&J6(I)&&I.catch(C=>{QV(C,i,n)}),I}if(vs(t)){const I=[];for(let C=0;C>>1,I=mE[c],C=MU(I);C=MU(n)?mE.push(t):mE.splice(QnA(i),0,t),t.flags|=1,E9()}}function E9(){_Y||(_Y=u9.then(C9))}function pnA(t){vs(t)?Z_.push(...t):Oy&&t.id===-1?Oy.splice(__+1,0,t):t.flags&1||(Z_.push(t),t.flags|=1),E9()}function k8(t,i,n=fQ+1){for(;nMU(n)-MU(c));if(Z_.length=0,Oy){Oy.push(...i);return}for(Oy=i,__=0;__t.id==null?t.flags&2?-1:1/0:t.id;function C9(t){try{for(fQ=0;fQ{c._d&&W8(-1);const C=TY(i);let f;try{f=t(...I)}finally{TY(C),c._d&&W8(1)}return f};return c._n=!0,c._c=!0,c._d=!0,c}function Ta(t,i){if(iI===null)return t;const n=SV(iI),c=t.dirs||(t.dirs=[]);for(let I=0;It.__isTeleport,sU=t=>t&&(t.disabled||t.disabled===""),L8=t=>t&&(t.defer||t.defer===""),U8=t=>typeof SVGElement<"u"&&t instanceof SVGElement,F8=t=>typeof MathMLElement=="function"&&t instanceof MathMLElement,x3=(t,i)=>{const n=t&&t.to;return fg(n)?i?i(n):null:n},Q9={name:"Teleport",__isTeleport:!0,process(t,i,n,c,I,C,f,w,_,N){const{mc:L,pc:q,pbc:lA,o:{insert:tA,querySelector:BA,createText:IA,createComment:gA}}=N,RA=sU(i.props);let{shapeFlag:HA,children:ZA,dynamicChildren:KA}=i;if(t==null){const me=i.el=IA(""),ae=i.anchor=IA("");tA(me,n,c),tA(ae,n,c);const gt=(We,lt)=>{HA&16&&(I&&I.isCE&&(I.ce._teleportTarget=We),L(ZA,We,lt,I,C,f,w,_))},dt=()=>{const We=i.target=x3(i.props,BA),lt=p9(We,i,IA,tA);We&&(f!=="svg"&&U8(We)?f="svg":f!=="mathml"&&F8(We)&&(f="mathml"),RA||(gt(We,lt),lY(i,!1)))};RA&&(gt(n,ae),lY(i,!0)),L8(i.props)?QE(()=>{dt(),i.el.__isMounted=!0},C):dt()}else{if(L8(i.props)&&!t.el.__isMounted){QE(()=>{Q9.process(t,i,n,c,I,C,f,w,_,N),delete t.el.__isMounted},C);return}i.el=t.el,i.targetStart=t.targetStart;const me=i.anchor=t.anchor,ae=i.target=t.target,gt=i.targetAnchor=t.targetAnchor,dt=sU(t.props),We=dt?n:ae,lt=dt?me:gt;if(f==="svg"||U8(ae)?f="svg":(f==="mathml"||F8(ae))&&(f="mathml"),KA?(lA(t.dynamicChildren,KA,We,I,C,f,w),s4(t,i,!0)):_||q(t,i,We,lt,I,C,f,w,!1),RA)dt?i.props&&t.props&&i.props.to!==t.props.to&&(i.props.to=t.props.to):V1(i,n,me,N,1);else if((i.props&&i.props.to)!==(t.props&&t.props.to)){const wt=i.target=x3(i.props,BA);wt&&V1(i,wt,null,N,0)}else dt&&V1(i,ae,gt,N,1);lY(i,RA)}},remove(t,i,n,{um:c,o:{remove:I}},C){const{shapeFlag:f,children:w,anchor:_,targetStart:N,targetAnchor:L,target:q,props:lA}=t;if(q&&(I(N),I(L)),C&&I(_),f&16){const tA=C||!sU(lA);for(let BA=0;BA{t.isMounted=!0}),nU(()=>{t.isUnmounting=!0}),t}const KC=[Function,Array],m9={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:KC,onEnter:KC,onAfterEnter:KC,onEnterCancelled:KC,onBeforeLeave:KC,onLeave:KC,onAfterLeave:KC,onLeaveCancelled:KC,onBeforeAppear:KC,onAppear:KC,onAfterAppear:KC,onAppearCancelled:KC},f9=t=>{const i=t.subTree;return i.component?f9(i.component):i},DnA={name:"BaseTransition",props:m9,setup(t,{slots:i}){const n=prA(),c=ynA();return()=>{const I=i.default&&S9(i.default(),!0);if(!I||!I.length)return;const C=y9(I),f=br(t),{mode:w}=f;if(c.isLeaving)return Hj(C);const _=O8(C);if(!_)return Hj(C);let N=Y3(_,f,c,n,q=>N=q);_.type!==fE&&vU(_,N);let L=n.subTree&&O8(n.subTree);if(L&&L.type!==fE&&!uv(_,L)&&f9(n).type!==fE){let q=Y3(L,f,c,n);if(vU(L,q),w==="out-in"&&_.type!==fE)return c.isLeaving=!0,q.afterLeave=()=>{c.isLeaving=!1,n.job.flags&8||n.update(),delete q.afterLeave,L=void 0},Hj(C);w==="in-out"&&_.type!==fE?q.delayLeave=(lA,tA,BA)=>{const IA=D9(c,L);IA[String(L.key)]=L,lA[Py]=()=>{tA(),lA[Py]=void 0,delete N.delayedLeave,L=void 0},N.delayedLeave=()=>{BA(),delete N.delayedLeave,L=void 0}}:L=void 0}else L&&(L=void 0);return C}}};function y9(t){let i=t[0];if(t.length>1){for(const n of t)if(n.type!==fE){i=n;break}}return i}const SnA=DnA;function D9(t,i){const{leavingVNodes:n}=t;let c=n.get(i.type);return c||(c=Object.create(null),n.set(i.type,c)),c}function Y3(t,i,n,c,I){const{appear:C,mode:f,persisted:w=!1,onBeforeEnter:_,onEnter:N,onAfterEnter:L,onEnterCancelled:q,onBeforeLeave:lA,onLeave:tA,onAfterLeave:BA,onLeaveCancelled:IA,onBeforeAppear:gA,onAppear:RA,onAfterAppear:HA,onAppearCancelled:ZA}=i,KA=String(t.key),me=D9(n,t),ae=(We,lt)=>{We&&cB(We,c,9,lt)},gt=(We,lt)=>{const wt=lt[1];ae(We,lt),vs(We)?We.every(ct=>ct.length<=1)&&wt():We.length<=1&&wt()},dt={mode:f,persisted:w,beforeEnter(We){let lt=_;if(!n.isMounted)if(C)lt=gA||_;else return;We[Py]&&We[Py](!0);const wt=me[KA];wt&&uv(t,wt)&&wt.el[Py]&&wt.el[Py](),ae(lt,[We])},enter(We){let lt=N,wt=L,ct=q;if(!n.isMounted)if(C)lt=RA||N,wt=HA||L,ct=ZA||q;else return;let ce=!1;const Ve=We[J1]=Dt=>{ce||(ce=!0,Dt?ae(ct,[We]):ae(wt,[We]),dt.delayedLeave&&dt.delayedLeave(),We[J1]=void 0)};lt?gt(lt,[We,Ve]):Ve()},leave(We,lt){const wt=String(t.key);if(We[J1]&&We[J1](!0),n.isUnmounting)return lt();ae(lA,[We]);let ct=!1;const ce=We[Py]=Ve=>{ct||(ct=!0,lt(),Ve?ae(IA,[We]):ae(BA,[We]),We[Py]=void 0,me[wt]===t&&delete me[wt])};me[wt]=t,tA?gt(tA,[We,ce]):ce()},clone(We){const lt=Y3(We,i,n,c,I);return I&&I(lt),lt}};return dt}function Hj(t){if(mV(t))return t=oD(t),t.children=null,t}function O8(t){if(!mV(t))return B9(t.type)&&t.children?y9(t.children):t;const{shapeFlag:i,children:n}=t;if(n){if(i&16)return n[0];if(i&32&&$s(n.default))return n.default()}}function vU(t,i){t.shapeFlag&6&&t.component?(t.transition=i,vU(t.component.subTree,i)):t.shapeFlag&128?(t.ssContent.transition=i.clone(t.ssContent),t.ssFallback.transition=i.clone(t.ssFallback)):t.transition=i}function S9(t,i=!1,n){let c=[],I=0;for(let C=0;C1)for(let C=0;CNY(BA,i&&(vs(i)?i[IA]:i),n,c,I));return}if(X_(c)&&!I){c.shapeFlag&512&&c.type.__asyncResolved&&c.component.subTree.component&&NY(t,i,n,c.component.subTree);return}const C=c.shapeFlag&4?SV(c.component):c.el,f=I?null:C,{i:w,r:_}=t,N=i&&i.r,L=w.refs===Da?w.refs={}:w.refs,q=w.setupState,lA=br(q),tA=q===Da?()=>!1:BA=>Wr(lA,BA);if(N!=null&&N!==_&&(fg(N)?(L[N]=null,tA(N)&&(q[N]=null)):oI(N)&&(N.value=null)),$s(_))qU(_,w,12,[f,L]);else{const BA=fg(_),IA=oI(_);if(BA||IA){const gA=()=>{if(t.f){const RA=BA?tA(_)?q[_]:L[_]:_.value;I?vs(RA)&&jW(RA,C):vs(RA)?RA.includes(C)||RA.push(C):BA?(L[_]=[C],tA(_)&&(q[_]=L[_])):(_.value=[C],t.k&&(L[t.k]=_.value))}else BA?(L[_]=f,tA(_)&&(q[_]=f)):IA&&(_.value=f,t.k&&(L[t.k]=f))};f?(gA.id=-1,QE(gA,n)):gA()}}}hV().requestIdleCallback;hV().cancelIdleCallback;const X_=t=>!!t.type.__asyncLoader,mV=t=>t.type.__isKeepAlive;function MnA(t,i){v9(t,"a",i)}function vnA(t,i){v9(t,"da",i)}function v9(t,i,n=xI){const c=t.__wdc||(t.__wdc=()=>{let I=n;for(;I;){if(I.isDeactivated)return;I=I.parent}return t()});if(fV(i,c,n),n){let I=n.parent;for(;I&&I.parent;)mV(I.parent.vnode)&&RnA(c,i,n,I),I=I.parent}}function RnA(t,i,n,c){const I=fV(i,t,c,!0);Kg(()=>{jW(c[i],I)},n)}function fV(t,i,n=xI,c=!1){if(n){const I=n[t]||(n[t]=[]),C=i.__weh||(i.__weh=(...f)=>{lD();const w=KU(n),_=cB(i,n,t,f);return w(),ID(),_});return c?I.unshift(C):I.push(C),C}}const pm=t=>(i,n=xI)=>{(!_U||t==="sp")&&fV(t,(...c)=>i(...c),n)},wnA=pm("bm"),hc=pm("m"),_nA=pm("bu"),TnA=pm("u"),nU=pm("bum"),Kg=pm("um"),NnA=pm("sp"),GnA=pm("rtg"),bnA=pm("rtc");function knA(t,i=xI){fV("ec",t,i)}const LnA="components";function UnA(t,i){return OnA(LnA,t,!0,i)||t}const FnA=Symbol.for("v-ndc");function OnA(t,i,n=!0,c=!1){const I=iI||xI;if(I){const C=I.type;{const w=SrA(C,!1);if(w&&(w===i||w===gh(i)||w===CV(gh(i))))return C}const f=P8(I[t]||C[t],i)||P8(I.appContext[t],i);return!f&&c?C:f}}function P8(t,i){return t&&(t[i]||t[gh(i)]||t[CV(gh(i))])}function JI(t,i,n,c){let I;const C=n,f=vs(t);if(f||fg(t)){const w=f&&z_(t);let _=!1;w&&(_=!nh(t),t=BV(t)),I=new Array(t.length);for(let N=0,L=t.length;Ni(w,_,void 0,C));else{const w=Object.keys(t);I=new Array(w.length);for(let _=0,N=w.length;_wU(i)?!(i.type===fE||i.type===tr&&!R9(i.children)):!0)?t:null}const V3=t=>t?K9(t)?SV(t):V3(t.parent):null,rU=nI(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>V3(t.parent),$root:t=>V3(t.root),$host:t=>t.ce,$emit:t=>t.emit,$options:t=>_9(t),$forceUpdate:t=>t.f||(t.f=()=>{i4(t.update)}),$nextTick:t=>t.n||(t.n=oC.bind(t.proxy)),$watch:t=>nrA.bind(t)}),qj=(t,i)=>t!==Da&&!t.__isScriptSetup&&Wr(t,i),PnA={get({_:t},i){if(i==="__v_skip")return!0;const{ctx:n,setupState:c,data:I,props:C,accessCache:f,type:w,appContext:_}=t;let N;if(i[0]!=="$"){const tA=f[i];if(tA!==void 0)switch(tA){case 1:return c[i];case 2:return I[i];case 4:return n[i];case 3:return C[i]}else{if(qj(c,i))return f[i]=1,c[i];if(I!==Da&&Wr(I,i))return f[i]=2,I[i];if((N=t.propsOptions[0])&&Wr(N,i))return f[i]=3,C[i];if(n!==Da&&Wr(n,i))return f[i]=4,n[i];J3&&(f[i]=0)}}const L=rU[i];let q,lA;if(L)return i==="$attrs"&&mu(t.attrs,"get",""),L(t);if((q=w.__cssModules)&&(q=q[i]))return q;if(n!==Da&&Wr(n,i))return f[i]=4,n[i];if(lA=_.config.globalProperties,Wr(lA,i))return lA[i]},set({_:t},i,n){const{data:c,setupState:I,ctx:C}=t;return qj(I,i)?(I[i]=n,!0):c!==Da&&Wr(c,i)?(c[i]=n,!0):Wr(t.props,i)||i[0]==="$"&&i.slice(1)in t?!1:(C[i]=n,!0)},has({_:{data:t,setupState:i,accessCache:n,ctx:c,appContext:I,propsOptions:C}},f){let w;return!!n[f]||t!==Da&&Wr(t,f)||qj(i,f)||(w=C[0])&&Wr(w,f)||Wr(c,f)||Wr(rU,f)||Wr(I.config.globalProperties,f)},defineProperty(t,i,n){return n.get!=null?t._.accessCache[i]=0:Wr(n,"value")&&this.set(t,i,n.value,null),Reflect.defineProperty(t,i,n)}};function x8(t){return vs(t)?t.reduce((i,n)=>(i[n]=null,i),{}):t}let J3=!0;function xnA(t){const i=_9(t),n=t.proxy,c=t.ctx;J3=!1,i.beforeCreate&&Y8(i.beforeCreate,t,"bc");const{data:I,computed:C,methods:f,watch:w,provide:_,inject:N,created:L,beforeMount:q,mounted:lA,beforeUpdate:tA,updated:BA,activated:IA,deactivated:gA,beforeDestroy:RA,beforeUnmount:HA,destroyed:ZA,unmounted:KA,render:me,renderTracked:ae,renderTriggered:gt,errorCaptured:dt,serverPrefetch:We,expose:lt,inheritAttrs:wt,components:ct,directives:ce,filters:Ve}=i;if(N&&YnA(N,c,null),f)for(const Pt in f){const oi=f[Pt];$s(oi)&&(c[Pt]=oi.bind(n))}if(I){const Pt=I.call(n,n);Na(Pt)&&(t.data=Bv(Pt))}if(J3=!0,C)for(const Pt in C){const oi=C[Pt],Ni=$s(oi)?oi.bind(n,n):$s(oi.get)?oi.get.bind(n,n):TQ,Co=!$s(oi)&&$s(oi.set)?oi.set.bind(n):TQ,to=yt({get:Ni,set:Co});Object.defineProperty(c,Pt,{enumerable:!0,configurable:!0,get:()=>to.value,set:so=>to.value=so})}if(w)for(const Pt in w)w9(w[Pt],c,n,Pt);if(_){const Pt=$s(_)?_.call(n):_;Reflect.ownKeys(Pt).forEach(oi=>{gd(oi,Pt[oi])})}L&&Y8(L,t,"c");function ti(Pt,oi){vs(oi)?oi.forEach(Ni=>Pt(Ni.bind(n))):oi&&Pt(oi.bind(n))}if(ti(wnA,q),ti(hc,lA),ti(_nA,tA),ti(TnA,BA),ti(MnA,IA),ti(vnA,gA),ti(knA,dt),ti(bnA,ae),ti(GnA,gt),ti(nU,HA),ti(Kg,KA),ti(NnA,We),vs(lt))if(lt.length){const Pt=t.exposed||(t.exposed={});lt.forEach(oi=>{Object.defineProperty(Pt,oi,{get:()=>n[oi],set:Ni=>n[oi]=Ni})})}else t.exposed||(t.exposed={});me&&t.render===TQ&&(t.render=me),wt!=null&&(t.inheritAttrs=wt),ct&&(t.components=ct),ce&&(t.directives=ce),We&&M9(t)}function YnA(t,i,n=TQ){vs(t)&&(t=H3(t));for(const c in t){const I=t[c];let C;Na(I)?"default"in I?C=HI(I.from||c,I.default,!0):C=HI(I.from||c):C=HI(I),oI(C)?Object.defineProperty(i,c,{enumerable:!0,configurable:!0,get:()=>C.value,set:f=>C.value=f}):i[c]=C}}function Y8(t,i,n){cB(vs(t)?t.map(c=>c.bind(i.proxy)):t.bind(i.proxy),i,n)}function w9(t,i,n,c){let I=c.includes(".")?Y9(n,c):()=>n[c];if(fg(t)){const C=i[t];$s(C)&&Hn(I,C)}else if($s(t))Hn(I,t.bind(n));else if(Na(t))if(vs(t))t.forEach(C=>w9(C,i,n,c));else{const C=$s(t.handler)?t.handler.bind(n):i[t.handler];$s(C)&&Hn(I,C,t)}}function _9(t){const i=t.type,{mixins:n,extends:c}=i,{mixins:I,optionsCache:C,config:{optionMergeStrategies:f}}=t.appContext,w=C.get(i);let _;return w?_=w:!I.length&&!n&&!c?_=i:(_={},I.length&&I.forEach(N=>GY(_,N,f,!0)),GY(_,i,f)),Na(i)&&C.set(i,_),_}function GY(t,i,n,c=!1){const{mixins:I,extends:C}=i;C&&GY(t,C,n,!0),I&&I.forEach(f=>GY(t,f,n,!0));for(const f in i)if(!(c&&f==="expose")){const w=VnA[f]||n&&n[f];t[f]=w?w(t[f],i[f]):i[f]}return t}const VnA={data:V8,props:J8,emits:J8,methods:kL,computed:kL,beforeCreate:CE,created:CE,beforeMount:CE,mounted:CE,beforeUpdate:CE,updated:CE,beforeDestroy:CE,beforeUnmount:CE,destroyed:CE,unmounted:CE,activated:CE,deactivated:CE,errorCaptured:CE,serverPrefetch:CE,components:kL,directives:kL,watch:HnA,provide:V8,inject:JnA};function V8(t,i){return i?t?function(){return nI($s(t)?t.call(this,this):t,$s(i)?i.call(this,this):i)}:i:t}function JnA(t,i){return kL(H3(t),H3(i))}function H3(t){if(vs(t)){const i={};for(let n=0;n1)return n&&$s(i)?i.call(c&&c.proxy):i}}const N9={},G9=()=>Object.create(N9),b9=t=>Object.getPrototypeOf(t)===N9;function jnA(t,i,n,c=!1){const I={},C=G9();t.propsDefaults=Object.create(null),k9(t,i,I,C);for(const f in t.propsOptions[0])f in I||(I[f]=void 0);n?t.props=c?I:rnA(I):t.type.props?t.props=I:t.props=C,t.attrs=C}function WnA(t,i,n,c){const{props:I,attrs:C,vnode:{patchFlag:f}}=t,w=br(I),[_]=t.propsOptions;let N=!1;if((c||f>0)&&!(f&16)){if(f&8){const L=t.vnode.dynamicProps;for(let q=0;q{_=!0;const[lA,tA]=L9(q,i,!0);nI(f,lA),tA&&w.push(...tA)};!n&&i.mixins.length&&i.mixins.forEach(L),t.extends&&L(t.extends),t.mixins&&t.mixins.forEach(L)}if(!C&&!_)return Na(t)&&c.set(t,j_),j_;if(vs(C))for(let L=0;Lt[0]==="_"||t==="$stable",o4=t=>vs(t)?t.map(SQ):[SQ(t)],ZnA=(t,i,n)=>{if(i._n)return i;const c=Oi((...I)=>o4(i(...I)),n);return c._c=!1,c},F9=(t,i,n)=>{const c=t._ctx;for(const I in t){if(U9(I))continue;const C=t[I];if($s(C))i[I]=ZnA(I,C,c);else if(C!=null){const f=o4(C);i[I]=()=>f}}},O9=(t,i)=>{const n=o4(i);t.slots.default=()=>n},P9=(t,i,n)=>{for(const c in i)(n||c!=="_")&&(t[c]=i[c])},XnA=(t,i,n)=>{const c=t.slots=G9();if(t.vnode.shapeFlag&32){const I=i._;I?(P9(c,i,n),n&&K6(c,"_",I,!0)):F9(i,c)}else i&&O9(t,i)},$nA=(t,i,n)=>{const{vnode:c,slots:I}=t;let C=!0,f=Da;if(c.shapeFlag&32){const w=i._;w?n&&w===1?C=!1:P9(I,i,n):(C=!i.$stable,F9(i,I)),f=i}else i&&(O9(t,i),f={default:1});if(C)for(const w in I)!U9(w)&&f[w]==null&&delete I[w]},QE=urA;function ArA(t){return erA(t)}function erA(t,i){const n=hV();n.__VUE__=!0;const{insert:c,remove:I,patchProp:C,createElement:f,createText:w,createComment:_,setText:N,setElementText:L,parentNode:q,nextSibling:lA,setScopeId:tA=TQ,insertStaticContent:BA}=t,IA=(VA,Ee,Je,Ut=null,ot=null,ut=null,$t=void 0,Zt=null,Ge=!!Ee.dynamicChildren)=>{if(VA===Ee)return;VA&&!uv(VA,Ee)&&(Ut=$i(VA),so(VA,ot,ut,!0),VA=null),Ee.patchFlag===-2&&(Ge=!1,Ee.dynamicChildren=null);const{type:Xe,ref:se,shapeFlag:ve}=Ee;switch(Xe){case DV:gA(VA,Ee,Je,Ut);break;case fE:RA(VA,Ee,Je,Ut);break;case jj:VA==null&&HA(Ee,Je,Ut,$t);break;case tr:ct(VA,Ee,Je,Ut,ot,ut,$t,Zt,Ge);break;default:ve&1?me(VA,Ee,Je,Ut,ot,ut,$t,Zt,Ge):ve&6?ce(VA,Ee,Je,Ut,ot,ut,$t,Zt,Ge):(ve&64||ve&128)&&Xe.process(VA,Ee,Je,Ut,ot,ut,$t,Zt,Ge,Ri)}se!=null&&ot&&NY(se,VA&&VA.ref,ut,Ee||VA,!Ee)},gA=(VA,Ee,Je,Ut)=>{if(VA==null)c(Ee.el=w(Ee.children),Je,Ut);else{const ot=Ee.el=VA.el;Ee.children!==VA.children&&N(ot,Ee.children)}},RA=(VA,Ee,Je,Ut)=>{VA==null?c(Ee.el=_(Ee.children||""),Je,Ut):Ee.el=VA.el},HA=(VA,Ee,Je,Ut)=>{[VA.el,VA.anchor]=BA(VA.children,Ee,Je,Ut,VA.el,VA.anchor)},ZA=({el:VA,anchor:Ee},Je,Ut)=>{let ot;for(;VA&&VA!==Ee;)ot=lA(VA),c(VA,Je,Ut),VA=ot;c(Ee,Je,Ut)},KA=({el:VA,anchor:Ee})=>{let Je;for(;VA&&VA!==Ee;)Je=lA(VA),I(VA),VA=Je;I(Ee)},me=(VA,Ee,Je,Ut,ot,ut,$t,Zt,Ge)=>{Ee.type==="svg"?$t="svg":Ee.type==="math"&&($t="mathml"),VA==null?ae(Ee,Je,Ut,ot,ut,$t,Zt,Ge):We(VA,Ee,ot,ut,$t,Zt,Ge)},ae=(VA,Ee,Je,Ut,ot,ut,$t,Zt)=>{let Ge,Xe;const{props:se,shapeFlag:ve,transition:pt,dirs:mo}=VA;if(Ge=VA.el=f(VA.type,ut,se&&se.is,se),ve&8?L(Ge,VA.children):ve&16&&dt(VA.children,Ge,null,Ut,ot,Kj(VA,ut),$t,Zt),mo&&ov(VA,null,Ut,"created"),gt(Ge,VA,VA.scopeId,$t,Ut),se){for(const no in se)no!=="value"&&!tU(no)&&C(Ge,no,null,se[no],ut,Ut);"value"in se&&C(Ge,"value",null,se.value,ut),(Xe=se.onVnodeBeforeMount)&&mQ(Xe,Ut,VA)}mo&&ov(VA,null,Ut,"beforeMount");const No=trA(ot,pt);No&&pt.beforeEnter(Ge),c(Ge,Ee,Je),((Xe=se&&se.onVnodeMounted)||No||mo)&&QE(()=>{Xe&&mQ(Xe,Ut,VA),No&&pt.enter(Ge),mo&&ov(VA,null,Ut,"mounted")},ot)},gt=(VA,Ee,Je,Ut,ot)=>{if(Je&&tA(VA,Je),Ut)for(let ut=0;ut{for(let Xe=Ge;Xe{const Zt=Ee.el=VA.el;let{patchFlag:Ge,dynamicChildren:Xe,dirs:se}=Ee;Ge|=VA.patchFlag&16;const ve=VA.props||Da,pt=Ee.props||Da;let mo;if(Je&&sv(Je,!1),(mo=pt.onVnodeBeforeUpdate)&&mQ(mo,Je,Ee,VA),se&&ov(Ee,VA,Je,"beforeUpdate"),Je&&sv(Je,!0),(ve.innerHTML&&pt.innerHTML==null||ve.textContent&&pt.textContent==null)&&L(Zt,""),Xe?lt(VA.dynamicChildren,Xe,Zt,Je,Ut,Kj(Ee,ot),ut):$t||oi(VA,Ee,Zt,null,Je,Ut,Kj(Ee,ot),ut,!1),Ge>0){if(Ge&16)wt(Zt,ve,pt,Je,ot);else if(Ge&2&&ve.class!==pt.class&&C(Zt,"class",null,pt.class,ot),Ge&4&&C(Zt,"style",ve.style,pt.style,ot),Ge&8){const No=Ee.dynamicProps;for(let no=0;no{mo&&mQ(mo,Je,Ee,VA),se&&ov(Ee,VA,Je,"updated")},Ut)},lt=(VA,Ee,Je,Ut,ot,ut,$t)=>{for(let Zt=0;Zt{if(Ee!==Je){if(Ee!==Da)for(const ut in Ee)!tU(ut)&&!(ut in Je)&&C(VA,ut,Ee[ut],null,ot,Ut);for(const ut in Je){if(tU(ut))continue;const $t=Je[ut],Zt=Ee[ut];$t!==Zt&&ut!=="value"&&C(VA,ut,Zt,$t,ot,Ut)}"value"in Je&&C(VA,"value",Ee.value,Je.value,ot)}},ct=(VA,Ee,Je,Ut,ot,ut,$t,Zt,Ge)=>{const Xe=Ee.el=VA?VA.el:w(""),se=Ee.anchor=VA?VA.anchor:w("");let{patchFlag:ve,dynamicChildren:pt,slotScopeIds:mo}=Ee;mo&&(Zt=Zt?Zt.concat(mo):mo),VA==null?(c(Xe,Je,Ut),c(se,Je,Ut),dt(Ee.children||[],Je,se,ot,ut,$t,Zt,Ge)):ve>0&&ve&64&&pt&&VA.dynamicChildren?(lt(VA.dynamicChildren,pt,Je,ot,ut,$t,Zt),(Ee.key!=null||ot&&Ee===ot.subTree)&&s4(VA,Ee,!0)):oi(VA,Ee,Je,se,ot,ut,$t,Zt,Ge)},ce=(VA,Ee,Je,Ut,ot,ut,$t,Zt,Ge)=>{Ee.slotScopeIds=Zt,VA==null?Ee.shapeFlag&512?ot.ctx.activate(Ee,Je,Ut,$t,Ge):Ve(Ee,Je,Ut,ot,ut,$t,Ge):Dt(VA,Ee,Ge)},Ve=(VA,Ee,Je,Ut,ot,ut,$t)=>{const Zt=VA.component=QrA(VA,Ut,ot);if(mV(VA)&&(Zt.ctx.renderer=Ri),mrA(Zt,!1,$t),Zt.asyncDep){if(ot&&ot.registerDep(Zt,ti,$t),!VA.el){const Ge=Zt.subTree=kt(fE);RA(null,Ge,Ee,Je)}}else ti(Zt,VA,Ee,Je,ot,ut,$t)},Dt=(VA,Ee,Je)=>{const Ut=Ee.component=VA.component;if(lrA(VA,Ee,Je))if(Ut.asyncDep&&!Ut.asyncResolved){Pt(Ut,Ee,Je);return}else Ut.next=Ee,Ut.update();else Ee.el=VA.el,Ut.vnode=Ee},ti=(VA,Ee,Je,Ut,ot,ut,$t)=>{const Zt=()=>{if(VA.isMounted){let{next:ve,bu:pt,u:mo,parent:No,vnode:no}=VA;{const an=x9(VA);if(an){ve&&(ve.el=no.el,Pt(VA,ve,$t)),an.asyncDep.then(()=>{VA.isUnmounted||Zt()});return}}let Go=ve,An;sv(VA,!1),ve?(ve.el=no.el,Pt(VA,ve,$t)):ve=no,pt&&cY(pt),(An=ve.props&&ve.props.onVnodeBeforeUpdate)&&mQ(An,No,ve,no),sv(VA,!0);const rn=K8(VA),ds=VA.subTree;VA.subTree=rn,IA(ds,rn,q(ds.el),$i(ds),VA,ot,ut),ve.el=rn.el,Go===null&&IrA(VA,rn.el),mo&&QE(mo,ot),(An=ve.props&&ve.props.onVnodeUpdated)&&QE(()=>mQ(An,No,ve,no),ot)}else{let ve;const{el:pt,props:mo}=Ee,{bm:No,m:no,parent:Go,root:An,type:rn}=VA,ds=X_(Ee);sv(VA,!1),No&&cY(No),!ds&&(ve=mo&&mo.onVnodeBeforeMount)&&mQ(ve,Go,Ee),sv(VA,!0);{An.ce&&An.ce._injectChildStyle(rn);const an=VA.subTree=K8(VA);IA(null,an,Je,Ut,VA,ot,ut),Ee.el=an.el}if(no&&QE(no,ot),!ds&&(ve=mo&&mo.onVnodeMounted)){const an=Ee;QE(()=>mQ(ve,Go,an),ot)}(Ee.shapeFlag&256||Go&&X_(Go.vnode)&&Go.vnode.shapeFlag&256)&&VA.a&&QE(VA.a,ot),VA.isMounted=!0,Ee=Je=Ut=null}};VA.scope.on();const Ge=VA.effect=new Z6(Zt);VA.scope.off();const Xe=VA.update=Ge.run.bind(Ge),se=VA.job=Ge.runIfDirty.bind(Ge);se.i=VA,se.id=VA.uid,Ge.scheduler=()=>i4(se),sv(VA,!0),Xe()},Pt=(VA,Ee,Je)=>{Ee.component=VA;const Ut=VA.vnode.props;VA.vnode=Ee,VA.next=null,WnA(VA,Ee.props,Ut,Je),$nA(VA,Ee.children,Je),lD(),k8(VA),ID()},oi=(VA,Ee,Je,Ut,ot,ut,$t,Zt,Ge=!1)=>{const Xe=VA&&VA.children,se=VA?VA.shapeFlag:0,ve=Ee.children,{patchFlag:pt,shapeFlag:mo}=Ee;if(pt>0){if(pt&128){Co(Xe,ve,Je,Ut,ot,ut,$t,Zt,Ge);return}else if(pt&256){Ni(Xe,ve,Je,Ut,ot,ut,$t,Zt,Ge);return}}mo&8?(se&16&&Lo(Xe,ot,ut),ve!==Xe&&L(Je,ve)):se&16?mo&16?Co(Xe,ve,Je,Ut,ot,ut,$t,Zt,Ge):Lo(Xe,ot,ut,!0):(se&8&&L(Je,""),mo&16&&dt(ve,Je,Ut,ot,ut,$t,Zt,Ge))},Ni=(VA,Ee,Je,Ut,ot,ut,$t,Zt,Ge)=>{VA=VA||j_,Ee=Ee||j_;const Xe=VA.length,se=Ee.length,ve=Math.min(Xe,se);let pt;for(pt=0;ptse?Lo(VA,ot,ut,!0,!1,ve):dt(Ee,Je,Ut,ot,ut,$t,Zt,Ge,ve)},Co=(VA,Ee,Je,Ut,ot,ut,$t,Zt,Ge)=>{let Xe=0;const se=Ee.length;let ve=VA.length-1,pt=se-1;for(;Xe<=ve&&Xe<=pt;){const mo=VA[Xe],No=Ee[Xe]=Ge?xy(Ee[Xe]):SQ(Ee[Xe]);if(uv(mo,No))IA(mo,No,Je,null,ot,ut,$t,Zt,Ge);else break;Xe++}for(;Xe<=ve&&Xe<=pt;){const mo=VA[ve],No=Ee[pt]=Ge?xy(Ee[pt]):SQ(Ee[pt]);if(uv(mo,No))IA(mo,No,Je,null,ot,ut,$t,Zt,Ge);else break;ve--,pt--}if(Xe>ve){if(Xe<=pt){const mo=pt+1,No=mopt)for(;Xe<=ve;)so(VA[Xe],ot,ut,!0),Xe++;else{const mo=Xe,No=Xe,no=new Map;for(Xe=No;Xe<=pt;Xe++){const qn=Ee[Xe]=Ge?xy(Ee[Xe]):SQ(Ee[Xe]);qn.key!=null&&no.set(qn.key,Xe)}let Go,An=0;const rn=pt-No+1;let ds=!1,an=0;const So=new Array(rn);for(Xe=0;Xe=rn){so(qn,ot,ut,!0);continue}let mr;if(qn.key!=null)mr=no.get(qn.key);else for(Go=No;Go<=pt;Go++)if(So[Go-No]===0&&uv(qn,Ee[Go])){mr=Go;break}mr===void 0?so(qn,ot,ut,!0):(So[mr-No]=Xe+1,mr>=an?an=mr:ds=!0,IA(qn,Ee[mr],Je,null,ot,ut,$t,Zt,Ge),An++)}const mA=ds?irA(So):j_;for(Go=mA.length-1,Xe=rn-1;Xe>=0;Xe--){const qn=No+Xe,mr=Ee[qn],Cs=qn+1{const{el:ut,type:$t,transition:Zt,children:Ge,shapeFlag:Xe}=VA;if(Xe&6){to(VA.component.subTree,Ee,Je,Ut);return}if(Xe&128){VA.suspense.move(Ee,Je,Ut);return}if(Xe&64){$t.move(VA,Ee,Je,Ri);return}if($t===tr){c(ut,Ee,Je);for(let ve=0;veZt.enter(ut),ot);else{const{leave:ve,delayLeave:pt,afterLeave:mo}=Zt,No=()=>c(ut,Ee,Je),no=()=>{ve(ut,()=>{No(),mo&&mo()})};pt?pt(ut,No,no):no()}else c(ut,Ee,Je)},so=(VA,Ee,Je,Ut=!1,ot=!1)=>{const{type:ut,props:$t,ref:Zt,children:Ge,dynamicChildren:Xe,shapeFlag:se,patchFlag:ve,dirs:pt,cacheIndex:mo}=VA;if(ve===-2&&(ot=!1),Zt!=null&&NY(Zt,null,Je,VA,!0),mo!=null&&(Ee.renderCache[mo]=void 0),se&256){Ee.ctx.deactivate(VA);return}const No=se&1&&pt,no=!X_(VA);let Go;if(no&&(Go=$t&&$t.onVnodeBeforeUnmount)&&mQ(Go,Ee,VA),se&6)As(VA.component,Je,Ut);else{if(se&128){VA.suspense.unmount(Je,Ut);return}No&&ov(VA,null,Ee,"beforeUnmount"),se&64?VA.type.remove(VA,Ee,Je,Ri,Ut):Xe&&!Xe.hasOnce&&(ut!==tr||ve>0&&ve&64)?Lo(Xe,Ee,Je,!1,!0):(ut===tr&&ve&384||!ot&&se&16)&&Lo(Ge,Ee,Je),Ut&&ks(VA)}(no&&(Go=$t&&$t.onVnodeUnmounted)||No)&&QE(()=>{Go&&mQ(Go,Ee,VA),No&&ov(VA,null,Ee,"unmounted")},Je)},ks=VA=>{const{type:Ee,el:Je,anchor:Ut,transition:ot}=VA;if(Ee===tr){Gi(Je,Ut);return}if(Ee===jj){KA(VA);return}const ut=()=>{I(Je),ot&&!ot.persisted&&ot.afterLeave&&ot.afterLeave()};if(VA.shapeFlag&1&&ot&&!ot.persisted){const{leave:$t,delayLeave:Zt}=ot,Ge=()=>$t(Je,ut);Zt?Zt(VA.el,ut,Ge):Ge()}else ut()},Gi=(VA,Ee)=>{let Je;for(;VA!==Ee;)Je=lA(VA),I(VA),VA=Je;I(Ee)},As=(VA,Ee,Je)=>{const{bum:Ut,scope:ot,job:ut,subTree:$t,um:Zt,m:Ge,a:Xe}=VA;q8(Ge),q8(Xe),Ut&&cY(Ut),ot.stop(),ut&&(ut.flags|=8,so($t,VA,Ee,Je)),Zt&&QE(Zt,Ee),QE(()=>{VA.isUnmounted=!0},Ee),Ee&&Ee.pendingBranch&&!Ee.isUnmounted&&VA.asyncDep&&!VA.asyncResolved&&VA.suspenseId===Ee.pendingId&&(Ee.deps--,Ee.deps===0&&Ee.resolve())},Lo=(VA,Ee,Je,Ut=!1,ot=!1,ut=0)=>{for(let $t=ut;$t{if(VA.shapeFlag&6)return $i(VA.component.subTree);if(VA.shapeFlag&128)return VA.suspense.next();const Ee=lA(VA.anchor||VA.el),Je=Ee&&Ee[h9];return Je?lA(Je):Ee};let zt=!1;const Ao=(VA,Ee,Je)=>{VA==null?Ee._vnode&&so(Ee._vnode,null,null,!0):IA(Ee._vnode||null,VA,Ee,null,null,null,Je),Ee._vnode=VA,zt||(zt=!0,k8(),d9(),zt=!1)},Ri={p:IA,um:so,m:to,r:ks,mt:Ve,mc:dt,pc:oi,pbc:lt,n:$i,o:t};return{render:Ao,hydrate:void 0,createApp:KnA(Ao)}}function Kj({type:t,props:i},n){return n==="svg"&&t==="foreignObject"||n==="mathml"&&t==="annotation-xml"&&i&&i.encoding&&i.encoding.includes("html")?void 0:n}function sv({effect:t,job:i},n){n?(t.flags|=32,i.flags|=4):(t.flags&=-33,i.flags&=-5)}function trA(t,i){return(!t||t&&!t.pendingBranch)&&i&&!i.persisted}function s4(t,i,n=!1){const c=t.children,I=i.children;if(vs(c)&&vs(I))for(let C=0;C>1,t[n[w]]0&&(i[c]=n[C-1]),n[C]=c)}}for(C=n.length,f=n[C-1];C-- >0;)n[C]=f,f=i[f];return n}function x9(t){const i=t.subTree.component;if(i)return i.asyncDep&&!i.asyncResolved?i:x9(i)}function q8(t){if(t)for(let i=0;iHI(orA);function pT(t,i){return n4(t,null,i)}function Hn(t,i,n){return n4(t,i,n)}function n4(t,i,n=Da){const{immediate:c,deep:I,flush:C,once:f}=n,w=nI({},n),_=i&&c||!i&&C!=="post";let N;if(_U){if(C==="sync"){const tA=srA();N=tA.__watcherHandles||(tA.__watcherHandles=[])}else if(!_){const tA=()=>{};return tA.stop=TQ,tA.resume=TQ,tA.pause=TQ,tA}}const L=xI;w.call=(tA,BA,IA)=>cB(tA,L,BA,IA);let q=!1;C==="post"?w.scheduler=tA=>{QE(tA,L&&L.suspense)}:C!=="sync"&&(q=!0,w.scheduler=(tA,BA)=>{BA?tA():i4(tA)}),w.augmentJob=tA=>{i&&(tA.flags|=4),q&&(tA.flags|=2,L&&(tA.id=L.uid,tA.i=L))};const lA=hnA(t,i,w);return _U&&(N?N.push(lA):_&&lA()),lA}function nrA(t,i,n){const c=this.proxy,I=fg(t)?t.includes(".")?Y9(c,t):()=>c[t]:t.bind(c,c);let C;$s(i)?C=i:(C=i.handler,n=i);const f=KU(this),w=n4(I,C.bind(c),n);return f(),w}function Y9(t,i){const n=i.split(".");return()=>{let c=t;for(let I=0;Ii==="modelValue"||i==="model-value"?t.modelModifiers:t[`${i}Modifiers`]||t[`${gh(i)}Modifiers`]||t[`${cD(i)}Modifiers`];function arA(t,i,...n){if(t.isUnmounted)return;const c=t.vnode.props||Da;let I=n;const C=i.startsWith("update:"),f=C&&rrA(c,i.slice(7));f&&(f.trim&&(I=n.map(L=>fg(L)?L.trim():L)),f.number&&(I=n.map(L3)));let w,_=c[w=Oj(i)]||c[w=Oj(gh(i))];!_&&C&&(_=c[w=Oj(cD(i))]),_&&cB(_,t,6,I);const N=c[w+"Once"];if(N){if(!t.emitted)t.emitted={};else if(t.emitted[w])return;t.emitted[w]=!0,cB(N,t,6,I)}}function V9(t,i,n=!1){const c=i.emitsCache,I=c.get(t);if(I!==void 0)return I;const C=t.emits;let f={},w=!1;if(!$s(t)){const _=N=>{const L=V9(N,i,!0);L&&(w=!0,nI(f,L))};!n&&i.mixins.length&&i.mixins.forEach(_),t.extends&&_(t.extends),t.mixins&&t.mixins.forEach(_)}return!C&&!w?(Na(t)&&c.set(t,null),null):(vs(C)?C.forEach(_=>f[_]=null):nI(f,C),Na(t)&&c.set(t,f),f)}function yV(t,i){return!t||!uV(i)?!1:(i=i.slice(2).replace(/Once$/,""),Wr(t,i[0].toLowerCase()+i.slice(1))||Wr(t,cD(i))||Wr(t,i))}function K8(t){const{type:i,vnode:n,proxy:c,withProxy:I,propsOptions:[C],slots:f,attrs:w,emit:_,render:N,renderCache:L,props:q,data:lA,setupState:tA,ctx:BA,inheritAttrs:IA}=t,gA=TY(t);let RA,HA;try{if(n.shapeFlag&4){const KA=I||c,me=KA;RA=SQ(N.call(me,KA,L,q,tA,lA,BA)),HA=w}else{const KA=i;RA=SQ(KA.length>1?KA(q,{attrs:w,slots:f,emit:_}):KA(q,null)),HA=i.props?w:grA(w)}}catch(KA){aU.length=0,QV(KA,t,1),RA=kt(fE)}let ZA=RA;if(HA&&IA!==!1){const KA=Object.keys(HA),{shapeFlag:me}=ZA;KA.length&&me&7&&(C&&KA.some(KW)&&(HA=crA(HA,C)),ZA=oD(ZA,HA,!1,!0))}return n.dirs&&(ZA=oD(ZA,null,!1,!0),ZA.dirs=ZA.dirs?ZA.dirs.concat(n.dirs):n.dirs),n.transition&&vU(ZA,n.transition),RA=ZA,TY(gA),RA}const grA=t=>{let i;for(const n in t)(n==="class"||n==="style"||uV(n))&&((i||(i={}))[n]=t[n]);return i},crA=(t,i)=>{const n={};for(const c in t)(!KW(c)||!(c.slice(9)in i))&&(n[c]=t[c]);return n};function lrA(t,i,n){const{props:c,children:I,component:C}=t,{props:f,children:w,patchFlag:_}=i,N=C.emitsOptions;if(i.dirs||i.transition)return!0;if(n&&_>=0){if(_&1024)return!0;if(_&16)return c?j8(c,f,N):!!f;if(_&8){const L=i.dynamicProps;for(let q=0;qt.__isSuspense;function urA(t,i){i&&i.pendingBranch?vs(t)?i.effects.push(...t):i.effects.push(t):pnA(t)}const tr=Symbol.for("v-fgt"),DV=Symbol.for("v-txt"),fE=Symbol.for("v-cmt"),jj=Symbol.for("v-stc"),aU=[];let sC=null;function te(t=!1){aU.push(sC=t?null:[])}function ErA(){aU.pop(),sC=aU[aU.length-1]||null}let RU=1;function W8(t,i=!1){RU+=t,t<0&&sC&&i&&(sC.hasOnce=!0)}function H9(t){return t.dynamicChildren=RU>0?sC||j_:null,ErA(),RU>0&&sC&&sC.push(t),t}function Ye(t,i,n,c,I,C){return H9(Ae(t,i,n,c,I,C,!0))}function Qi(t,i,n,c,I){return H9(kt(t,i,n,c,I,!0))}function wU(t){return t?t.__v_isVNode===!0:!1}function uv(t,i){return t.type===i.type&&t.key===i.key}const q9=({key:t})=>t??null,IY=({ref:t,ref_key:i,ref_for:n})=>(typeof t=="number"&&(t=""+t),t!=null?fg(t)||oI(t)||$s(t)?{i:iI,r:t,k:i,f:!!n}:t:null);function Ae(t,i=null,n=null,c=0,I=null,C=t===tr?0:1,f=!1,w=!1){const _={__v_isVNode:!0,__v_skip:!0,type:t,props:i,key:i&&q9(i),ref:i&&IY(i),scopeId:pV,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:C,patchFlag:c,dynamicProps:I,dynamicChildren:null,appContext:null,ctx:iI};return w?(r4(_,n),C&128&&t.normalize(_)):n&&(_.shapeFlag|=fg(n)?8:16),RU>0&&!f&&sC&&(_.patchFlag>0||C&6)&&_.patchFlag!==32&&sC.push(_),_}const kt=drA;function drA(t,i=null,n=null,c=0,I=null,C=!1){if((!t||t===FnA)&&(t=fE),wU(t)){const w=oD(t,i,!0);return n&&r4(w,n),RU>0&&!C&&sC&&(w.shapeFlag&6?sC[sC.indexOf(t)]=w:sC.push(w)),w.patchFlag=-2,w}if(MrA(t)&&(t=t.__vccOpts),i){i=CrA(i);let{class:w,style:_}=i;w&&!fg(w)&&(i.class=xi(w)),Na(_)&&(t4(_)&&!vs(_)&&(_=nI({},_)),i.style=Cr(_))}const f=fg(t)?1:J9(t)?128:B9(t)?64:Na(t)?4:$s(t)?2:0;return Ae(t,i,n,c,I,f,C,!0)}function CrA(t){return t?t4(t)||b9(t)?nI({},t):t:null}function oD(t,i,n=!1,c=!1){const{props:I,ref:C,patchFlag:f,children:w,transition:_}=t,N=i?K3(I||{},i):I,L={__v_isVNode:!0,__v_skip:!0,type:t.type,props:N,key:N&&q9(N),ref:i&&i.ref?n&&C?vs(C)?C.concat(IY(i)):[C,IY(i)]:IY(i):C,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:w,target:t.target,targetStart:t.targetStart,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:i&&t.type!==tr?f===-1?16:f|16:f,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:_,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&oD(t.ssContent),ssFallback:t.ssFallback&&oD(t.ssFallback),el:t.el,anchor:t.anchor,ctx:t.ctx,ce:t.ce};return _&&c&&vU(L,_.clone(L)),L}function zr(t=" ",i=0){return kt(DV,null,t,i)}function Lt(t="",i=!1){return i?(te(),Qi(fE,null,t)):kt(fE,null,t)}function SQ(t){return t==null||typeof t=="boolean"?kt(fE):vs(t)?kt(tr,null,t.slice()):wU(t)?xy(t):kt(DV,null,String(t))}function xy(t){return t.el===null&&t.patchFlag!==-1||t.memo?t:oD(t)}function r4(t,i){let n=0;const{shapeFlag:c}=t;if(i==null)i=null;else if(vs(i))n=16;else if(typeof i=="object")if(c&65){const I=i.default;I&&(I._c&&(I._d=!1),r4(t,I()),I._c&&(I._d=!0));return}else{n=32;const I=i._;!I&&!b9(i)?i._ctx=iI:I===3&&iI&&(iI.slots._===1?i._=1:(i._=2,t.patchFlag|=1024))}else $s(i)?(i={default:i,_ctx:iI},n=32):(i=String(i),c&64?(n=16,i=[zr(i)]):n=8);t.children=i,t.shapeFlag|=n}function K3(...t){const i={};for(let n=0;nxI||iI;let bY,j3;{const t=hV(),i=(n,c)=>{let I;return(I=t[n])||(I=t[n]=[]),I.push(c),C=>{I.length>1?I.forEach(f=>f(C)):I[0](C)}};bY=i("__VUE_INSTANCE_SETTERS__",n=>xI=n),j3=i("__VUE_SSR_SETTERS__",n=>_U=n)}const KU=t=>{const i=xI;return bY(t),t.scope.on(),()=>{t.scope.off(),bY(i)}},z8=()=>{xI&&xI.scope.off(),bY(null)};function K9(t){return t.vnode.shapeFlag&4}let _U=!1;function mrA(t,i=!1,n=!1){i&&j3(i);const{props:c,children:I}=t.vnode,C=K9(t);jnA(t,c,C,i),XnA(t,I,n);const f=C?frA(t,i):void 0;return i&&j3(!1),f}function frA(t,i){const n=t.type;t.accessCache=Object.create(null),t.proxy=new Proxy(t.ctx,PnA);const{setup:c}=n;if(c){lD();const I=t.setupContext=c.length>1?DrA(t):null,C=KU(t),f=qU(c,t,0,[t.props,I]),w=J6(f);if(ID(),C(),(w||t.sp)&&!X_(t)&&M9(t),w){if(f.then(z8,z8),i)return f.then(_=>{Z8(t,_)}).catch(_=>{QV(_,t,0)});t.asyncDep=f}else Z8(t,f)}else j9(t)}function Z8(t,i,n){$s(i)?t.type.__ssrInlineRender?t.ssrRender=i:t.render=i:Na(i)&&(t.setupState=l9(i)),j9(t)}function j9(t,i,n){const c=t.type;t.render||(t.render=c.render||TQ);{const I=KU(t);lD();try{xnA(t)}finally{ID(),I()}}}const yrA={get(t,i){return mu(t,"get",""),t[i]}};function DrA(t){const i=n=>{t.exposed=n||{}};return{attrs:new Proxy(t.attrs,yrA),slots:t.slots,emit:t.emit,expose:i}}function SV(t){return t.exposed?t.exposeProxy||(t.exposeProxy=new Proxy(l9(anA(t.exposed)),{get(i,n){if(n in i)return i[n];if(n in rU)return rU[n](t)},has(i,n){return n in i||n in rU}})):t.proxy}function SrA(t,i=!0){return $s(t)?t.displayName||t.name:t.name||i&&t.__name}function MrA(t){return $s(t)&&"__vccOpts"in t}const yt=(t,i)=>dnA(t,i,_U);function vrA(t,i,n){const c=arguments.length;return c===2?Na(i)&&!vs(i)?wU(i)?kt(t,null,[i]):kt(t,i):kt(t,null,i):(c>3?n=Array.prototype.slice.call(arguments,2):c===3&&wU(n)&&(n=[n]),kt(t,i,n))}const W3="3.5.13";/** * @vue/runtime-dom v3.5.13 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let b3;const w8=typeof window<"u"&&window.trustedTypes;if(w8)try{b3=w8.createPolicy("vue",{createHTML:t=>t})}catch{}const S9=b3?t=>b3.createHTML(t):t=>t,$nA="http://www.w3.org/2000/svg",ArA="http://www.w3.org/1998/Math/MathML",am=typeof document<"u"?document:null,_8=am&&am.createElement("template"),erA={insert:(t,i,r)=>{i.insertBefore(t,r||null)},remove:t=>{const i=t.parentNode;i&&i.removeChild(t)},createElement:(t,i,r,l)=>{const I=i==="svg"?am.createElementNS($nA,t):i==="mathml"?am.createElementNS(ArA,t):r?am.createElement(t,{is:r}):am.createElement(t);return t==="select"&&l&&l.multiple!=null&&I.setAttribute("multiple",l.multiple),I},createText:t=>am.createTextNode(t),createComment:t=>am.createComment(t),setText:(t,i)=>{t.nodeValue=i},setElementText:(t,i)=>{t.textContent=i},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>am.querySelector(t),setScopeId(t,i){t.setAttribute(i,"")},insertStaticContent(t,i,r,l,I,h){const f=r?r.previousSibling:i.lastChild;if(I&&(I===h||I.nextSibling))for(;i.insertBefore(I.cloneNode(!0),r),!(I===h||!(I=I.nextSibling)););else{_8.innerHTML=S9(l==="svg"?`${t}`:l==="mathml"?`${t}`:t);const w=_8.content;if(l==="svg"||l==="mathml"){const _=w.firstChild;for(;_.firstChild;)w.appendChild(_.firstChild);w.removeChild(_)}i.insertBefore(w,r)}return[f?f.nextSibling:i.firstChild,r?r.previousSibling:i.lastChild]}},_y="transition",pL="animation",fU=Symbol("_vtc"),M9={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},trA=sI({},Z6,M9),irA=t=>(t.displayName="Transition",t.props=trA,t),orA=irA((t,{slots:i})=>XnA(zsA,srA(t),i)),iv=(t,i=[])=>{Ms(t)?t.forEach(r=>r(...i)):t&&t(...i)},T8=t=>t?Ms(t)?t.some(i=>i.length>1):t.length>1:!1;function srA(t){const i={};for(const Et in t)Et in M9||(i[Et]=t[Et]);if(t.css===!1)return i;const{name:r="v",type:l,duration:I,enterFromClass:h=`${r}-enter-from`,enterActiveClass:f=`${r}-enter-active`,enterToClass:w=`${r}-enter-to`,appearFromClass:_=h,appearActiveClass:G=f,appearToClass:U=w,leaveFromClass:j=`${r}-leave-from`,leaveActiveClass:lA=`${r}-leave-active`,leaveToClass:sA=`${r}-leave-to`}=t,mA=nrA(I),IA=mA&&mA[0],cA=mA&&mA[1],{onBeforeEnter:TA,onEnter:WA,onEnterCancelled:ue,onLeave:Ce,onLeaveCancelled:xe,onBeforeAppear:Qe=TA,onAppear:ut=WA,onAppearCancelled:ft=ue}=i,je=(Et,re,qe,yt)=>{Et._enterCancelled=yt,ov(Et,re?U:w),ov(Et,re?G:f),qe&&qe()},Mt=(Et,re)=>{Et._isLeaving=!1,ov(Et,j),ov(Et,sA),ov(Et,lA),re&&re()},jt=Et=>(re,qe)=>{const yt=Et?ut:WA,Me=()=>je(re,Et,qe);iv(yt,[re,Me]),N8(()=>{ov(re,Et?_:h),om(re,Et?U:w),T8(yt)||G8(re,l,IA,Me)})};return sI(i,{onBeforeEnter(Et){iv(TA,[Et]),om(Et,h),om(Et,f)},onBeforeAppear(Et){iv(Qe,[Et]),om(Et,_),om(Et,G)},onEnter:jt(!1),onAppear:jt(!0),onLeave(Et,re){Et._isLeaving=!0;const qe=()=>Mt(Et,re);om(Et,j),Et._enterCancelled?(om(Et,lA),L8()):(L8(),om(Et,lA)),N8(()=>{Et._isLeaving&&(ov(Et,j),om(Et,sA),T8(Ce)||G8(Et,l,cA,qe))}),iv(Ce,[Et,qe])},onEnterCancelled(Et){je(Et,!1,void 0,!0),iv(ue,[Et])},onAppearCancelled(Et){je(Et,!0,void 0,!0),iv(ft,[Et])},onLeaveCancelled(Et){Mt(Et),iv(xe,[Et])}})}function nrA(t){if(t==null)return null;if(Na(t))return[bj(t.enter),bj(t.leave)];{const i=bj(t);return[i,i]}}function bj(t){return isA(t)}function om(t,i){i.split(/\s+/).forEach(r=>r&&t.classList.add(r)),(t[fU]||(t[fU]=new Set)).add(i)}function ov(t,i){i.split(/\s+/).forEach(l=>l&&t.classList.remove(l));const r=t[fU];r&&(r.delete(i),r.size||(t[fU]=void 0))}function N8(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let rrA=0;function G8(t,i,r,l){const I=t._endId=++rrA,h=()=>{I===t._endId&&l()};if(r!=null)return setTimeout(h,r);const{type:f,timeout:w,propCount:_}=arA(t,i);if(!f)return l();const G=f+"end";let U=0;const j=()=>{t.removeEventListener(G,lA),h()},lA=sA=>{sA.target===t&&++U>=_&&j()};setTimeout(()=>{U<_&&j()},w+1),t.addEventListener(G,lA)}function arA(t,i){const r=window.getComputedStyle(t),l=mA=>(r[mA]||"").split(", "),I=l(`${_y}Delay`),h=l(`${_y}Duration`),f=b8(I,h),w=l(`${pL}Delay`),_=l(`${pL}Duration`),G=b8(w,_);let U=null,j=0,lA=0;i===_y?f>0&&(U=_y,j=f,lA=h.length):i===pL?G>0&&(U=pL,j=G,lA=_.length):(j=Math.max(f,G),U=j>0?f>G?_y:pL:null,lA=U?U===_y?h.length:_.length:0);const sA=U===_y&&/\b(transform|all)(,|$)/.test(l(`${_y}Property`).toString());return{type:U,timeout:j,propCount:lA,hasTransform:sA}}function b8(t,i){for(;t.lengthk8(r)+k8(t[l])))}function k8(t){return t==="auto"?0:Number(t.slice(0,-1).replace(",","."))*1e3}function L8(){return document.body.offsetHeight}function grA(t,i,r){const l=t[fU];l&&(i=(i?[i,...l]:[...l]).join(" ")),i==null?t.removeAttribute("class"):r?t.setAttribute("class",i):t.className=i}const yY=Symbol("_vod"),v9=Symbol("_vsh"),Ka={beforeMount(t,{value:i},{transition:r}){t[yY]=t.style.display==="none"?"":t.style.display,r&&i?r.beforeEnter(t):mL(t,i)},mounted(t,{value:i},{transition:r}){r&&i&&r.enter(t)},updated(t,{value:i,oldValue:r},{transition:l}){!i!=!r&&(l?i?(l.beforeEnter(t),mL(t,!0),l.enter(t)):l.leave(t,()=>{mL(t,!1)}):mL(t,i))},beforeUnmount(t,{value:i}){mL(t,i)}};function mL(t,i){t.style.display=i?t[yY]:"none",t[v9]=!i}const crA=Symbol(""),lrA=/(^|;)\s*display\s*:/;function IrA(t,i,r){const l=t.style,I=fg(r);let h=!1;if(r&&!I){if(i)if(fg(i))for(const f of i.split(";")){const w=f.slice(0,f.indexOf(":")).trim();r[w]==null&&eY(l,w,"")}else for(const f in i)r[f]==null&&eY(l,f,"");for(const f in r)f==="display"&&(h=!0),eY(l,f,r[f])}else if(I){if(i!==r){const f=l[crA];f&&(r+=";"+f),l.cssText=r,h=lrA.test(r)}}else i&&t.removeAttribute("style");yY in t&&(t[yY]=h?l.display:"",t[v9]&&(l.display="none"))}const U8=/\s*!important$/;function eY(t,i,r){if(Ms(r))r.forEach(l=>eY(t,i,l));else if(r==null&&(r=""),i.startsWith("--"))t.setProperty(i,r);else{const l=urA(t,i);U8.test(r)?t.setProperty(rD(l),r.replace(U8,""),"important"):t[l]=r}}const F8=["Webkit","Moz","ms"],kj={};function urA(t,i){const r=kj[i];if(r)return r;let l=sh(i);if(l!=="filter"&&l in t)return kj[i]=l;l=tV(l);for(let I=0;ILj||(hrA.then(()=>Lj=0),Lj=Date.now());function QrA(t,i){const r=l=>{if(!l._vts)l._vts=Date.now();else if(l._vts<=r.attached)return;rB(prA(l,r.value),i,5,[l])};return r.value=t,r.attached=BrA(),r}function prA(t,i){if(Ms(i)){const r=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{r.call(t),t._stopped=!0},i.map(l=>I=>!I._stopped&&l&&l(I))}else return i}const J8=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123,mrA=(t,i,r,l,I,h)=>{const f=I==="svg";i==="class"?grA(t,l,f):i==="style"?IrA(t,r,l):$Y(i)?SW(i)||drA(t,i,r,l,h):(i[0]==="."?(i=i.slice(1),!0):i[0]==="^"?(i=i.slice(1),!1):frA(t,i,l,f))?(x8(t,i,l),!t.tagName.includes("-")&&(i==="value"||i==="checked"||i==="selected")&&P8(t,i,l,f,h,i!=="value")):t._isVueCE&&(/[A-Z]/.test(i)||!fg(l))?x8(t,sh(i),l,h,i):(i==="true-value"?t._trueValue=l:i==="false-value"&&(t._falseValue=l),P8(t,i,l,f))};function frA(t,i,r,l){if(l)return!!(i==="innerHTML"||i==="textContent"||i in t&&J8(i)&&$s(r));if(i==="spellcheck"||i==="draggable"||i==="translate"||i==="form"||i==="list"&&t.tagName==="INPUT"||i==="type"&&t.tagName==="TEXTAREA")return!1;if(i==="width"||i==="height"){const I=t.tagName;if(I==="IMG"||I==="VIDEO"||I==="CANVAS"||I==="SOURCE")return!1}return J8(i)&&fg(r)?!1:i in t}const H8=t=>{const i=t.props["onUpdate:modelValue"]||!1;return Ms(i)?r=>X1(i,r):i};function yrA(t){t.target.composing=!0}function q8(t){const i=t.target;i.composing&&(i.composing=!1,i.dispatchEvent(new Event("input")))}const Uj=Symbol("_assign"),DrA={created(t,{modifiers:{lazy:i,trim:r,number:l}},I){t[Uj]=H8(I);const h=l||I.props&&I.props.type==="number";R_(t,i?"change":"input",f=>{if(f.target.composing)return;let w=t.value;r&&(w=w.trim()),h&&(w=p3(w)),t[Uj](w)}),r&&R_(t,"change",()=>{t.value=t.value.trim()}),i||(R_(t,"compositionstart",yrA),R_(t,"compositionend",q8),R_(t,"change",q8))},mounted(t,{value:i}){t.value=i??""},beforeUpdate(t,{value:i,oldValue:r,modifiers:{lazy:l,trim:I,number:h}},f){if(t[Uj]=H8(f),t.composing)return;const w=(h||t.type==="number")&&!/^0\d/.test(t.value)?p3(t.value):t.value,_=i??"";w!==_&&(document.activeElement===t&&t.type!=="range"&&(l&&i===r||I&&t.value.trim()===_)||(t.value=_))}},SrA=["ctrl","shift","alt","meta"],MrA={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,i)=>SrA.some(r=>t[`${r}Key`]&&!i.includes(r))},DE=(t,i)=>{const r=t._withMods||(t._withMods={}),l=i.join(".");return r[l]||(r[l]=(I,...h)=>{for(let f=0;f{const r=t._withKeys||(t._withKeys={}),l=i.join(".");return r[l]||(r[l]=I=>{if(!("key"in I))return;const h=rD(I.key);if(i.some(f=>f===h||vrA[f]===h))return t(I)})},RrA=sI({patchProp:mrA},erA);let K8;function w9(){return K8||(K8=SnA(RrA))}const pv=(...t)=>{w9().render(...t)},wrA=(...t)=>{const i=w9().createApp(...t),{mount:r}=i;return i.mount=l=>{const I=TrA(l);if(!I)return;const h=i._component;!$s(h)&&!h.render&&!h.template&&(h.template=I.innerHTML),I.nodeType===1&&(I.textContent="");const f=r(I,!1,_rA(I));return I instanceof Element&&(I.removeAttribute("v-cloak"),I.setAttribute("data-v-app","")),f},i};function _rA(t){if(t instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&t instanceof MathMLElement)return"mathml"}function TrA(t){return fg(t)?document.querySelector(t):t}function NrA(t){throw new Error('Could not dynamically require "'+t+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var _L={exports:{}},tY={exports:{}},GrA=tY.exports,j8;function _9(){return j8||(j8=1,function(t,i){(function(r,l){t.exports=l()})(GrA,function(){const r=p=>p===void 0,l=p=>typeof p=="string",I=p=>{var B;return(B=Object.prototype.toString.call(p).match(/^\[object (.*)\]$/))===null||B===void 0?void 0:B[1].toLowerCase()},h=p=>typeof Array.isArray=="function"?Array.isArray(p):I(p)==="array",f=p=>p!==null&&typeof p=="object",w=p=>h(p)||f(p),_=p=>{if(typeof p!="string")return!1;const B=p[0];return!/[^a-zA-Z0-9]/.test(B)},G=p=>{if(typeof p!="object"||p===null)return!1;const B=Object.getPrototypeOf(p);if(B===null)return!0;let v=B;for(;Object.getPrototypeOf(v)!==null;)v=Object.getPrototypeOf(v);return B===v};function U(p=99999999){return Math.round(Math.random()*p)}const j=(p,B,v,N)=>{if(!w(p)||!w(B))return 0;let O=0;const z=Object.keys(B);let X;for(let rA=0,DA=z.length;rA"u"&&typeof uni.requireNativePlugin=="function",io=Et&&typeof wx.miniapp=="object",Eo=typeof uni<"u",Vs=yt&&typeof tt.enterChat=="function",ki=Et||qe||yt||Oe||gt||To||Fi,ns=typeof window>"u"&&!ki&&typeof mg<"u"&&mg.NativeScriptGlobals!==void 0,jo=typeof mg<"u"&&(mg.nativeModuleProxy!==void 0||mg.ReactNative!==void 0),Ao=typeof wx<"u"&&typeof wx.getAccountInfoSync=="function"&&!!wx.getAccountInfoSync().plugin,Zt=typeof uni<"u"?!ki:typeof window<"u"&&!ki&&!jo,oo=qe?qq:yt?tt:Oe?swan:gt?my:Et?wx:To?uni:Fi?jd:{},bi=Zt&&window&&window.navigator&&window.navigator.userAgent||"",vs=/(micromessenger|webbrowser)/i.test(bi),HA=function(){let p="WEB";return vs?p="WEB":qe?p="QQ_MP":yt?p="TT_MP":Oe?p="BAIDU_MP":gt?p="ALI_MP":Et?p=io?"DONUT_NATIVE_APP":"WX_MP":To?p="UNI_NATIVE_APP":ns?p="NS_NATIVE_APP":jo&&(p="RN_NATIVE_APP"),sA[p]}(),ce=/iPad/i.test(bi),Ve=/iPhone/i.test(bi)&&!ce,Ot=/iPod/i.test(bi),nt=Ve||ce||Ot,It=function(){const p=bi.match(/OS (\d+)_/i);return p&&p[1]?p[1]:null}(),ei=/Android/i.test(bi),ti=function(){const p=bi.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);if(!p)return null;const B=p[1]&&parseFloat(p[1]),v=p[2]&&parseFloat(p[2]);return B&&v?parseFloat(`${p[1]}.${p[2]}`):B||null}(),be=/Firefox/i.test(bi),Ze=/Edge/i.test(bi),wt=!Ze&&/Chrome/i.test(bi),Nt=/MSIE/.test(bi)||bi.indexOf("Trident")>-1&&bi.indexOf("rv:11.0")>-1,Oi=function(){const p=/MSIE\s(\d+)\.\d/.exec(bi);let B=p&&parseFloat(p[1]);return!B&&/Trident\/7.0/i.test(bi)&&/rv:11.0/.test(bi)&&(B=11),B}(),po=/Safari/i.test(bi)&&!wt&&!ei&&!Ze,No=/Windows/i.test(bi),so=/MAC OS X/i.test(bi),Go=Zt&&typeof Worker<"u"&&!Nt,An=ei||nt,rn=function(){if(typeof window>"u"||window.navigator===void 0)return!1;const{standalone:p}=window.navigator;return!(!nt||p||po)}();function Es(){let p="unknown";if(so&&(p="mac"),No&&(p="windows"),nt&&(p="ios"),ei&&(p="android"),ki)try{const{platform:B}=oo.getSystemInfoSync();B!==void 0&&(p=B)}catch(B){console.error(B)}return p}const an=typeof process<"u"&&process.versions!==void 0&&process.versions.node!==void 0&&typeof window>"u";function Do(p,B){var v={};for(var N in p)Object.prototype.hasOwnProperty.call(p,N)&&B.indexOf(N)<0&&(v[N]=p[N]);if(p!=null&&typeof Object.getOwnPropertySymbols=="function"){var O=0;for(N=Object.getOwnPropertySymbols(p);O{oo.request({url:v,data:N,method:B,timeout:O,header:{"content-type":zr},success:rA=>z(rA.data),fail:()=>X(new Error(`{"message":"Network error","code":${Jn}}`))})}):an?void 0:new Promise((z,X)=>{const rA=new XMLHttpRequest,DA=setTimeout(()=>{rA.abort(),X(new Error(`{"message":"Request timeout","code":${Qr}}`))},O);rA.onreadystatechange=function(){if(rA.readyState===4)if(clearTimeout(DA),rA.status===200||rA.status===304)try{z(rA.responseText?JSON.parse(rA.responseText):null)}catch{z(rA.responseText)}else X(new Error(`{"message":"Network error","code":${Jn}}`))},rA.open(B,v,!0),rA.setRequestHeader("Content-type",zr),rA.send(N||null)})})}function Rs(p){if(p==null)return!0;if(typeof p=="boolean")return!1;if(typeof p=="number")return p===0;if(typeof p=="string"||typeof p=="function"||Array.isArray(p))return p.length===0;if(p instanceof Error)return p.message==="";if(G(p)){for(const B in p)if(Object.prototype.hasOwnProperty.call(p,B))return!1;return!0}return(Object.prototype.toString.call(p)==="[object Map]"||Object.prototype.toString.call(p)==="[object Set]"||Object.prototype.toString.call(p)==="[object File]")&&p.size===0}function or(p,B){if(p===null||typeof p!="object")return p;const v=B||new WeakMap;if(v.has(p))return v.get(p);if(p instanceof Date)return new Date(p.getTime());if(p instanceof RegExp)return new RegExp(p.source,p.flags);if(p instanceof Map){const z=new Map;return v.set(p,z),p.forEach((X,rA)=>{z.set(or(rA,v),or(X,v))}),z}if(p instanceof Set){const z=new Set;return v.set(p,z),p.forEach(X=>{z.add(or(X,v))}),z}if(Array.isArray(p)){const z=[];return v.set(p,z),p.forEach(X=>{z.push(or(X,v))}),z}const N=Object.getPrototypeOf(p),O=Object.create(N);return v.set(p,O),[...Object.getOwnPropertyNames(p),...Object.getOwnPropertySymbols(p)].forEach(z=>{if(z==="__ob__"||z==="__v_skip"||z==="__v_isRef"||z==="__v_isReadonly")return;const X=Object.getOwnPropertyDescriptor(p,z);X&&(X.get||X.set?Object.defineProperty(O,z,X):O[z]=or(p[z],v))}),O}function en(p,B,v){const N=new WeakSet,O=(z,X)=>{if(B&&(X=B(z,X)),X===void 0)return"undefined";if(X===null)return null;if(Number.isNaN(X))return"NaN";if(X===1/0)return"Infinity";if(X===-1/0)return"-Infinity";if(typeof X=="function")return`[Function: ${X.name||"anonymous"}]`;if(typeof X=="symbol")return X.toString();if(typeof X=="bigint")return`${X.toString()}n`;if(typeof X=="object"&&X!==null){if(N.has(X))return"[Circular]";N.add(X)}return X instanceof Date?X.toISOString():X instanceof Error?{name:X.name,message:X.message}:X instanceof Map?{dataType:"Map",value:Array.from(X.entries())}:X instanceof Set?{dataType:"Set",value:Array.from(X.values())}:X};try{return JSON.stringify(p,O,v)}catch(z){return console.error("Failed to stringify:",z),""}}function wn(){let p,B;return{promise:new Promise((v,N)=>{p=v,B=N}),resolve:p,reject:B}}var qt,yg=Object.freeze({__proto__:null,ANDROID_VERSION:ti,IE_VERSION:Oi,IN_ALIPAY_MINI_APP:gt,IN_BAIDU_MINI_APP:Oe,IN_BROWSER:Zt,IN_DONUT_NATIVE_APP:io,IN_FEISHU_MINI_APP:Vs,IN_JD_MINI_APP:Fi,IN_MINI_APP:ki,IN_NODE:an,IN_NS_NATIVE_APP:ns,IN_QQ_MINI_APP:qe,IN_RN_APP:jo,IN_TT_MINI_APP:yt,IN_TT_MINI_GAME:Me,IN_UNI_APP:Eo,IN_UNI_NATIVE_APP:To,IN_WX_MINI_APP:Et,IN_WX_MINI_APP_DESK:jt,IN_WX_MINI_GAME:re,IN_WX_MINI_PLUGIN:Ao,IOS_VERSION:It,IS_ANDROID:ei,IS_CHROME:wt,IS_EDGE:Ze,IS_FIREFOX:be,IS_IE:Nt,IS_IOS:nt,IS_IPAD:ce,IS_IPHONE:Ve,IS_IPOD:Ot,IS_MAC:so,IS_SAFARI:po,IS_WECHAT:vs,IS_WIN:No,IS_WORKER_AVAILABLE:Go,MINI_APP_NAMESPACE:oo,USER_AGENT:bi,base16EncodeBinaryString:lA,deepCopyWithMethods:or,deepMerge:j,generatePromise:wn,getPlatformType:Es,getType:I,httpRequest:Pi,isArray:h,isArrayOrObject:w,isEmpty:Rs,isH5:An,isIOSWebView:rn,isNumber:p=>p!==null&&(typeof p=="number"&&!Number.isNaN(p-0)||typeof p=="object"&&p.constructor===Number),isObject:f,isPlainObject:G,isString:l,isUndefined:r,isUniIOSApp:function(){return To&&uni.getDeviceInfo().platform.toLocaleLowerCase()==="ios"},isValidRequestKey:_,platform:HA,randomInt:U,randomString:function(){const p="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";let B="";for(let v=32;v>0;--v)B+=p[Math.floor(62*Math.random())];return B},safeStringify:en});class On{constructor(){this.listeners={}}on(B,v,N){this.listeners[B]||(this.listeners[B]=[]),this.listeners[B].push({fn:v,context:N})}off(B,v,N){var O;v&&(this.listeners[B]=(O=this.listeners[B])===null||O===void 0?void 0:O.filter(z=>{const X=z.fn===v,rA=!N||z.context===N;return!(X&&rA)}))}emit(B,...v){const N=this.listeners[B];N&&N.forEach(O=>{const{fn:z,context:X}=O;try{z.apply(X,v)}catch(rA){console.warn(`Error in event handler for ${B} error: ${en(rA)}`)}})}once(B,v,N){const O=(...z)=>{v.apply(N,z),this.off(B,O)};this.on(B,O)}}(function(p){p.BUSINESS_COMMAND="business_command",p.C2C_REALTIME_MESSAGE="c2c_realtime_message",p.C2C_MESSAGE_MODIFIED="c2c_message_modified",p.C2C_REVOKED_MESSAGE="c2c_message_revoked",p.GROUP_REALTIME_MESSAGE="group_realtime_message",p.GROUP_MESSAGE_MODIFIED="group_message_modified",p.GROUP_MESSAGE_REVOKED="group_message_revoked",p.C2C_MESSAGE_READ_RECEIPT="c2c_message_read_receipt",p.MESSAGE_REACTION_UPDATED="message_reaction_updated",p.MESSAGE_REACTION_UPDATED_SYNC="message_reaction_updated_sync",p.GROUP_AT_TIPS="group_at_tips",p.USER_STATUS_UPDATE="user_status_update",p.FRIEND_LIST_MODIFIED="friend_list_modified",p.PROFILE_MODIFIED="profile_modified",p.CONV_MODIFIED="conversation_modified",p.GROUP_TIPS_NOTIFICATION="group_tips_notification",p.GROUP_MESSAGE_READ_RECEIPT="group_message_read_receipt",p.GROUP_MESSAGE_READ_SYNC="group_message_read_sync",p.GROUP_SYSTEM_NOTIFICATION="group_system_notification",p.C2C_MESSAGE_PEER_READ="c2c_message_peer_read",p.C2C_MESSAGE_READ_SYNC="c2c_message_read_sync",p.C2C_REMIND_TYPE_SYNC="c2c_remind_type_sync",p.FOLLOW_LIST_UPDATED="follow_list_updated",p.MESSAGE_EXTENSIONS_UPDATED="message_extensions_updated",p.ALL_MESSAGE_READ="all_message_read",p.CONVERSATION_MARK_UPDATED="conversation_mark_updated",p.CONVERSATION_GROUP_ADD="conversation_group_add",p.CONVERSATION_GROUP_DELETED="conversation_group_deleted",p.CONVERSATION_GROUP_UPDATED="conversation_group_updated",p.ALL_RECEIVE_MESSAGE_OPTION="all_receive_message_option",p.TOPIC_AT_TIPS="topic_at_tips",p.TOPIC_TIPS_NOTIFICATION="topic_tips_notification",p.TOPIC_SYSTEM_NOTIFICATION="topic_system_notification",p.TOPIC_MESSAGE_READ_SYNC="topic_message_read_sync",p.TOPIC_LATEST_MESSAGE="topic_latest_message",p.GROUP_MESSAGE_PINNED="group_message_pinned"})(qt||(qt={}));const Gn=[16,17];function Js(p){var B;const v=[];return(B=p?.GroupTips)===null||B===void 0||B.forEach(N=>{var O;N.GroupInfo.MillionGroupFlag===2?v.push(qt.TOPIC_TIPS_NOTIFICATION):Gn.includes((O=N?.MsgBody)===null||O===void 0?void 0:O.OpType)?v.push(qt.GROUP_MESSAGE_PINNED):v.push(qt.GROUP_TIPS_NOTIFICATION)}),v}const pr=[{conditions:[{type:"event",value:100}],subType:qt.BUSINESS_COMMAND},{conditions:[{type:"event",value:24}],subType:qt.ALL_RECEIVE_MESSAGE_OPTION},{conditions:[{type:"event",value:26}],subType:qt.TOPIC_LATEST_MESSAGE},{conditions:[{type:"hasKey",value:"C2cMsgArray"}],subType:qt.C2C_REALTIME_MESSAGE},{conditions:[{type:"hasKey",value:"C2cMsgModNotifys"}],subType:qt.C2C_MESSAGE_MODIFIED},{conditions:[{type:"hasKey",value:"ProfileDataMod"}],subType:qt.PROFILE_MODIFIED},{conditions:[{type:"hasKey",value:"UserStatusList"}],subType:qt.USER_STATUS_UPDATE},{conditions:[{type:"hasKey",value:"FriendListMod"}],subType:qt.FRIEND_LIST_MODIFIED},{conditions:[{type:"hasKey",value:"GroupMsgArray"}],subType:qt.GROUP_REALTIME_MESSAGE},{conditions:[{type:"hasKey",value:"GroupMsgModNotifys"}],subType:qt.GROUP_MESSAGE_MODIFIED},{conditions:[{type:"hasKey",value:"C2cNotifyMsgArray"}],subTypeParser:function(p){var B;const v=[];return(B=p?.C2cNotifyMsgArray)===null||B===void 0||B.forEach(N=>{N.WithdrawC2cMsgNotify&&v.push(qt.C2C_REVOKED_MESSAGE),N.C2cReadedReceipt&&v.push(qt.C2C_MESSAGE_PEER_READ),N.ReadC2cMsgNotify&&v.push(qt.C2C_MESSAGE_READ_SYNC),N.MuteNotificationsSync&&v.push(qt.C2C_REMIND_TYPE_SYNC)}),v}},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:4}],subTypeParser:Js},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:5}],subTypeParser:function(p){var B;const v=[];return(B=p?.GroupTips)===null||B===void 0||B.forEach(N=>{Array.isArray(N.MsgBody.GroupWithdrawInfoArray)?v.push(qt.GROUP_MESSAGE_REVOKED):Array.isArray(N.MsgBody.GroupMsgReceiptList)?v.push(qt.GROUP_MESSAGE_READ_RECEIPT):Array.isArray(N.MsgBody.GroupReadInfoArray)?N.MsgBody.GroupReadInfoArray[0].TopicId?v.push(qt.TOPIC_MESSAGE_READ_SYNC):v.push(qt.GROUP_MESSAGE_READ_SYNC):N.GroupInfo.MillionGroupFlag===2?v.push(qt.TOPIC_SYSTEM_NOTIFICATION):v.push(qt.GROUP_SYSTEM_NOTIFICATION)}),v}},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:6}],subTypeParser:Js},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:12}],subTypeParser:function(p){var B;const v=[];return(B=p?.GroupTips)===null||B===void 0||B.forEach(N=>{const{GroupAtTips:{TopicId:O}}=N;O?v.push(qt.TOPIC_AT_TIPS):v.push(qt.GROUP_AT_TIPS)}),v}},{conditions:[{type:"hasKey",value:"RecentContactMod"}],subTypeParser:function(p){var B;const v=[];return(B=p?.RecentContactMod)===null||B===void 0||B.forEach(N=>{switch(N.PushType){case je.CONV_MARK_UPDATED:v.push(qt.CONVERSATION_MARK_UPDATED);break;case je.CONV_GROUP_ADDED:v.push(qt.CONVERSATION_GROUP_ADD);break;case je.CONV_GROUP_DELETED:v.push(qt.CONVERSATION_GROUP_DELETED);break;case je.CONV_GROUP_UPDATED:v.push(qt.CONVERSATION_GROUP_UPDATED);break;default:v.push(qt.CONV_MODIFIED)}}),v}},{conditions:[{type:"hasKey",value:"MsgReactionNotifyList"}],subType:qt.MESSAGE_REACTION_UPDATED},{conditions:[{type:"hasKey",value:"MsgReactionNotify"}],subType:qt.MESSAGE_REACTION_UPDATED_SYNC},{conditions:[{type:"hasKey",value:"C2cMsgInfo"}],subType:qt.C2C_MESSAGE_READ_RECEIPT},{conditions:[{type:"hasKey",value:"FollowChangeList"}],subType:qt.FOLLOW_LIST_UPDATED},{conditions:[{type:"hasKey",value:"MsgExtensionNotify"}],subType:qt.MESSAGE_EXTENSIONS_UPDATED},{conditions:[{type:"hasKey",value:"C2CReadAllMsg"}],subType:qt.ALL_MESSAGE_READ}];var Pn;function mr(p){var B;const v=Array.isArray((B=p?.body)===null||B===void 0?void 0:B.EventArray)?p.body.EventArray:[],N=[];return v.forEach(O=>{O.Flag=p.body.Flag;const z=pr.find(rA=>rA.conditions.every(DA=>{switch(DA.type){case"event":return O.Event===DA.value;case"hasKey":return Object.prototype.hasOwnProperty.call(O,DA.value);default:return!1}}));if(!z)return null;let X=[];typeof z.subTypeParser=="function"?X=z.subTypeParser(O):z.subType&&(X=z.subType),Array.isArray(X)?X.forEach(rA=>{N.push({type:`${Pn.SERVER_PUSH_MESSAGE}:${rA}`,data:O})}):N.push({type:`${Pn.SERVER_PUSH_MESSAGE}:${X}`,data:O})}),N}(function(p){p.SERVER_PUSH_MESSAGE="im_open_push.msg_push",p.SERVER_PUSH_MESSAGE_MULTIPLE="im_open_push.multi_msg_push_ws",p.ERROR="error"})(Pn||(Pn={}));const mo={[Pn.SERVER_PUSH_MESSAGE]:mr,[Pn.SERVER_PUSH_MESSAGE_MULTIPLE]:mr,[Pn.ERROR]:function(p){const{errorCode:B}=p;return[{type:`error:${B}`,data:p}]}},gn=new class{constructor(){this._outerEventEmitter=null,this._innerEventEmitter=null,this._filteredCallbackMap=new Map,this._outerEventEmitter=new On,this._innerEventEmitter=new On,this.InnerEventSubType=qt}subscribeInnerEvent(p,B,v,N,O){var z;let X,rA,DA,GA;["string","number"].includes(typeof B)?(DA=`${p}:${B}`,GA=v,rA=N,X=O):(DA=p,GA=B,rA=v,X=typeof N=="function"?N:void 0),X?this._subscribeWithFilter(DA,GA,rA,X):(z=this._innerEventEmitter)===null||z===void 0||z.on(DA,GA,rA)}emitInnerEvent(p,B){var v,N;if((v=this._innerEventEmitter)===null||v===void 0||v.emit(p,B),Object.keys(mo).includes(p)){const O=(N=mo[p])===null||N===void 0?void 0:N.call(mo,B);O?.forEach(z=>{var X;z&&((X=this._innerEventEmitter)===null||X===void 0||X.emit(z.type,z.data))})}}subscribeOuterEvent(p,B,v){var N;(N=this._outerEventEmitter)===null||N===void 0||N.on(p,B,v)}unSubscribeOuterEvent(p,B,v){var N;(N=this._outerEventEmitter)===null||N===void 0||N.off(p,B,v)}unSubscribeInnerEvent(p,B,v,N){if(["string","number"].includes(typeof B)){const O=v,z=`${p}:${B}`;this._unsubscribeEvent(z,O,N)}else{const O=B;this._unsubscribeEvent(p,O,v)}}emitOuterEvent(p,B){var v;(v=this._outerEventEmitter)===null||v===void 0||v.emit(p,B)}getOuterEventEmitter(){return this._outerEventEmitter}rest(){this._outerEventEmitter=null,this._innerEventEmitter=null}_subscribeWithFilter(p,B,v,N){var O;const z=X=>{N.call(v,X)&&B.call(v,X)};this._filteredCallbackMap.has(p)||this._filteredCallbackMap.set(p,[]),this._filteredCallbackMap.get(p).push({originalCallback:B,filteredCallback:z,filter:N,context:v}),(O=this._innerEventEmitter)===null||O===void 0||O.on(p,z,v)}_unsubscribeEvent(p,B,v){var N,O;const z=this._filteredCallbackMap.get(p);if(z){const X=z.findIndex(rA=>rA.originalCallback===B&&rA.context===v);if(X!==-1){const{filteredCallback:rA}=z[X];return(N=this._innerEventEmitter)===null||N===void 0||N.off(p,rA,v),z.splice(X,1),void(z.length===0&&this._filteredCallbackMap.delete(p))}}(O=this._innerEventEmitter)===null||O===void 0||O.off(p,B,v)}};class Sl{constructor(){this._socket=null}connectSocket(B){return this._socket=new WebSocket(B),this._socket}send(B){var v,N;try{(v=this._socket)===null||v===void 0||v.send(B)}catch(O){(N=this._onSendFail)===null||N===void 0||N.call(this,O)}}bindSocketHandlers(B){const{onOpen:v,onMessage:N,onClose:O,onError:z,onSendFail:X}=B;this._socket&&(this._socket.binaryType="arraybuffer",this._socket.onopen=v,this._socket.onmessage=N,this._socket.onclose=O,this._socket.onerror=z,this._onSendFail=X)}unbindSocketHandlers(){this._socket&&(this._socket.onopen=null,this._socket.onmessage=null,this._socket.onclose=null,this._socket.onerror=null)}disconnect(){this._socket&&(this._socket.close(),this._socket=null)}}class cn{constructor(B){this._onError=B.onError}connectSocket(B){const v=this;return this._socket=oo.connectSocket({url:B,header:{"content-type":"application/json"},complete:()=>{},fail:N=>v._onError(N)}),this._socket}send(B){var v;(v=this._socket)===null||v===void 0||v.send({data:B,fail:this._onSendFail})}bindSocketHandlers(B){const{onOpen:v,onMessage:N,onClose:O,onError:z,onSendFail:X}=B;this._socket&&(this._socket.onClose(O),this._socket.onOpen(v),this._socket.onMessage(N),this._socket.onError(z),this._onSendFail=X)}unbindSocketHandlers(){this._socket&&(this._socket.onClose(()=>{}),this._socket.onOpen(()=>{}),this._socket.onMessage(()=>{}),this._socket.onError(()=>{}))}disconnect(){this._socket&&(this._socket.close(),this._socket=null)}}const fr="CONNECT",Ls="SEND",Jc="DISCONNECT",ms="OPEN",as="MESSAGE",Ru="CLOSE",Wa="ERROR",Cs="SEND_FAIL";class sg{constructor(){this._worker=null,this._blobUrl=null}connectSocket(B){const v=new Blob([` +**/let z3;const X8=typeof window<"u"&&window.trustedTypes;if(X8)try{z3=X8.createPolicy("vue",{createHTML:t=>t})}catch{}const W9=z3?t=>z3.createHTML(t):t=>t,RrA="http://www.w3.org/2000/svg",wrA="http://www.w3.org/1998/Math/MathML",lm=typeof document<"u"?document:null,$8=lm&&lm.createElement("template"),_rA={insert:(t,i,n)=>{i.insertBefore(t,n||null)},remove:t=>{const i=t.parentNode;i&&i.removeChild(t)},createElement:(t,i,n,c)=>{const I=i==="svg"?lm.createElementNS(RrA,t):i==="mathml"?lm.createElementNS(wrA,t):n?lm.createElement(t,{is:n}):lm.createElement(t);return t==="select"&&c&&c.multiple!=null&&I.setAttribute("multiple",c.multiple),I},createText:t=>lm.createTextNode(t),createComment:t=>lm.createComment(t),setText:(t,i)=>{t.nodeValue=i},setElementText:(t,i)=>{t.textContent=i},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>lm.querySelector(t),setScopeId(t,i){t.setAttribute(i,"")},insertStaticContent(t,i,n,c,I,C){const f=n?n.previousSibling:i.lastChild;if(I&&(I===C||I.nextSibling))for(;i.insertBefore(I.cloneNode(!0),n),!(I===C||!(I=I.nextSibling)););else{$8.innerHTML=W9(c==="svg"?`${t}`:c==="mathml"?`${t}`:t);const w=$8.content;if(c==="svg"||c==="mathml"){const _=w.firstChild;for(;_.firstChild;)w.appendChild(_.firstChild);w.removeChild(_)}i.insertBefore(w,n)}return[f?f.nextSibling:i.firstChild,n?n.previousSibling:i.lastChild]}},Gy="transition",ML="animation",TU=Symbol("_vtc"),z9={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},TrA=nI({},m9,z9),NrA=t=>(t.displayName="Transition",t.props=TrA,t),GrA=NrA((t,{slots:i})=>vrA(SnA,brA(t),i)),nv=(t,i=[])=>{vs(t)?t.forEach(n=>n(...i)):t&&t(...i)},AZ=t=>t?vs(t)?t.some(i=>i.length>1):t.length>1:!1;function brA(t){const i={};for(const ct in t)ct in z9||(i[ct]=t[ct]);if(t.css===!1)return i;const{name:n="v",type:c,duration:I,enterFromClass:C=`${n}-enter-from`,enterActiveClass:f=`${n}-enter-active`,enterToClass:w=`${n}-enter-to`,appearFromClass:_=C,appearActiveClass:N=f,appearToClass:L=w,leaveFromClass:q=`${n}-leave-from`,leaveActiveClass:lA=`${n}-leave-active`,leaveToClass:tA=`${n}-leave-to`}=t,BA=krA(I),IA=BA&&BA[0],gA=BA&&BA[1],{onBeforeEnter:RA,onEnter:HA,onEnterCancelled:ZA,onLeave:KA,onLeaveCancelled:me,onBeforeAppear:ae=RA,onAppear:gt=HA,onAppearCancelled:dt=ZA}=i,We=(ct,ce,Ve,Dt)=>{ct._enterCancelled=Dt,rv(ct,ce?L:w),rv(ct,ce?N:f),Ve&&Ve()},lt=(ct,ce)=>{ct._isLeaving=!1,rv(ct,q),rv(ct,tA),rv(ct,lA),ce&&ce()},wt=ct=>(ce,Ve)=>{const Dt=ct?gt:HA,ti=()=>We(ce,ct,Ve);nv(Dt,[ce,ti]),eZ(()=>{rv(ce,ct?_:C),rm(ce,ct?L:w),AZ(Dt)||tZ(ce,c,IA,ti)})};return nI(i,{onBeforeEnter(ct){nv(RA,[ct]),rm(ct,C),rm(ct,f)},onBeforeAppear(ct){nv(ae,[ct]),rm(ct,_),rm(ct,N)},onEnter:wt(!1),onAppear:wt(!0),onLeave(ct,ce){ct._isLeaving=!0;const Ve=()=>lt(ct,ce);rm(ct,q),ct._enterCancelled?(rm(ct,lA),sZ()):(sZ(),rm(ct,lA)),eZ(()=>{ct._isLeaving&&(rv(ct,q),rm(ct,tA),AZ(KA)||tZ(ct,c,gA,Ve))}),nv(KA,[ct,Ve])},onEnterCancelled(ct){We(ct,!1,void 0,!0),nv(ZA,[ct])},onAppearCancelled(ct){We(ct,!0,void 0,!0),nv(dt,[ct])},onLeaveCancelled(ct){lt(ct),nv(me,[ct])}})}function krA(t){if(t==null)return null;if(Na(t))return[Wj(t.enter),Wj(t.leave)];{const i=Wj(t);return[i,i]}}function Wj(t){return NsA(t)}function rm(t,i){i.split(/\s+/).forEach(n=>n&&t.classList.add(n)),(t[TU]||(t[TU]=new Set)).add(i)}function rv(t,i){i.split(/\s+/).forEach(c=>c&&t.classList.remove(c));const n=t[TU];n&&(n.delete(i),n.size||(t[TU]=void 0))}function eZ(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let LrA=0;function tZ(t,i,n,c){const I=t._endId=++LrA,C=()=>{I===t._endId&&c()};if(n!=null)return setTimeout(C,n);const{type:f,timeout:w,propCount:_}=UrA(t,i);if(!f)return c();const N=f+"end";let L=0;const q=()=>{t.removeEventListener(N,lA),C()},lA=tA=>{tA.target===t&&++L>=_&&q()};setTimeout(()=>{L<_&&q()},w+1),t.addEventListener(N,lA)}function UrA(t,i){const n=window.getComputedStyle(t),c=BA=>(n[BA]||"").split(", "),I=c(`${Gy}Delay`),C=c(`${Gy}Duration`),f=iZ(I,C),w=c(`${ML}Delay`),_=c(`${ML}Duration`),N=iZ(w,_);let L=null,q=0,lA=0;i===Gy?f>0&&(L=Gy,q=f,lA=C.length):i===ML?N>0&&(L=ML,q=N,lA=_.length):(q=Math.max(f,N),L=q>0?f>N?Gy:ML:null,lA=L?L===Gy?C.length:_.length:0);const tA=L===Gy&&/\b(transform|all)(,|$)/.test(c(`${Gy}Property`).toString());return{type:L,timeout:q,propCount:lA,hasTransform:tA}}function iZ(t,i){for(;t.lengthoZ(n)+oZ(t[c])))}function oZ(t){return t==="auto"?0:Number(t.slice(0,-1).replace(",","."))*1e3}function sZ(){return document.body.offsetHeight}function FrA(t,i,n){const c=t[TU];c&&(i=(i?[i,...c]:[...c]).join(" ")),i==null?t.removeAttribute("class"):n?t.setAttribute("class",i):t.className=i}const kY=Symbol("_vod"),Z9=Symbol("_vsh"),Ka={beforeMount(t,{value:i},{transition:n}){t[kY]=t.style.display==="none"?"":t.style.display,n&&i?n.beforeEnter(t):vL(t,i)},mounted(t,{value:i},{transition:n}){n&&i&&n.enter(t)},updated(t,{value:i,oldValue:n},{transition:c}){!i!=!n&&(c?i?(c.beforeEnter(t),vL(t,!0),c.enter(t)):c.leave(t,()=>{vL(t,!1)}):vL(t,i))},beforeUnmount(t,{value:i}){vL(t,i)}};function vL(t,i){t.style.display=i?t[kY]:"none",t[Z9]=!i}const OrA=Symbol(""),PrA=/(^|;)\s*display\s*:/;function xrA(t,i,n){const c=t.style,I=fg(n);let C=!1;if(n&&!I){if(i)if(fg(i))for(const f of i.split(";")){const w=f.slice(0,f.indexOf(":")).trim();n[w]==null&&uY(c,w,"")}else for(const f in i)n[f]==null&&uY(c,f,"");for(const f in n)f==="display"&&(C=!0),uY(c,f,n[f])}else if(I){if(i!==n){const f=c[OrA];f&&(n+=";"+f),c.cssText=n,C=PrA.test(n)}}else i&&t.removeAttribute("style");kY in t&&(t[kY]=C?c.display:"",t[Z9]&&(c.display="none"))}const nZ=/\s*!important$/;function uY(t,i,n){if(vs(n))n.forEach(c=>uY(t,i,c));else if(n==null&&(n=""),i.startsWith("--"))t.setProperty(i,n);else{const c=YrA(t,i);nZ.test(n)?t.setProperty(cD(c),n.replace(nZ,""),"important"):t[c]=n}}const rZ=["Webkit","Moz","ms"],zj={};function YrA(t,i){const n=zj[i];if(n)return n;let c=gh(i);if(c!=="filter"&&c in t)return zj[i]=c;c=CV(c);for(let I=0;IZj||(qrA.then(()=>Zj=0),Zj=Date.now());function jrA(t,i){const n=c=>{if(!c._vts)c._vts=Date.now();else if(c._vts<=n.attached)return;cB(WrA(c,n.value),i,5,[c])};return n.value=t,n.attached=KrA(),n}function WrA(t,i){if(vs(i)){const n=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{n.call(t),t._stopped=!0},i.map(c=>I=>!I._stopped&&c&&c(I))}else return i}const uZ=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123,zrA=(t,i,n,c,I,C)=>{const f=I==="svg";i==="class"?FrA(t,c,f):i==="style"?xrA(t,n,c):uV(i)?KW(i)||JrA(t,i,n,c,C):(i[0]==="."?(i=i.slice(1),!0):i[0]==="^"?(i=i.slice(1),!1):ZrA(t,i,c,f))?(cZ(t,i,c),!t.tagName.includes("-")&&(i==="value"||i==="checked"||i==="selected")&&gZ(t,i,c,f,C,i!=="value")):t._isVueCE&&(/[A-Z]/.test(i)||!fg(c))?cZ(t,gh(i),c,C,i):(i==="true-value"?t._trueValue=c:i==="false-value"&&(t._falseValue=c),gZ(t,i,c,f))};function ZrA(t,i,n,c){if(c)return!!(i==="innerHTML"||i==="textContent"||i in t&&uZ(i)&&$s(n));if(i==="spellcheck"||i==="draggable"||i==="translate"||i==="form"||i==="list"&&t.tagName==="INPUT"||i==="type"&&t.tagName==="TEXTAREA")return!1;if(i==="width"||i==="height"){const I=t.tagName;if(I==="IMG"||I==="VIDEO"||I==="CANVAS"||I==="SOURCE")return!1}return uZ(i)&&fg(n)?!1:i in t}const EZ=t=>{const i=t.props["onUpdate:modelValue"]||!1;return vs(i)?n=>cY(i,n):i};function XrA(t){t.target.composing=!0}function dZ(t){const i=t.target;i.composing&&(i.composing=!1,i.dispatchEvent(new Event("input")))}const Xj=Symbol("_assign"),$rA={created(t,{modifiers:{lazy:i,trim:n,number:c}},I){t[Xj]=EZ(I);const C=c||I.props&&I.props.type==="number";T_(t,i?"change":"input",f=>{if(f.target.composing)return;let w=t.value;n&&(w=w.trim()),C&&(w=L3(w)),t[Xj](w)}),n&&T_(t,"change",()=>{t.value=t.value.trim()}),i||(T_(t,"compositionstart",XrA),T_(t,"compositionend",dZ),T_(t,"change",dZ))},mounted(t,{value:i}){t.value=i??""},beforeUpdate(t,{value:i,oldValue:n,modifiers:{lazy:c,trim:I,number:C}},f){if(t[Xj]=EZ(f),t.composing)return;const w=(C||t.type==="number")&&!/^0\d/.test(t.value)?L3(t.value):t.value,_=i??"";w!==_&&(document.activeElement===t&&t.type!=="range"&&(c&&i===n||I&&t.value.trim()===_)||(t.value=_))}},AaA=["ctrl","shift","alt","meta"],eaA={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,i)=>AaA.some(n=>t[`${n}Key`]&&!i.includes(n))},cd=(t,i)=>{const n=t._withMods||(t._withMods={}),c=i.join(".");return n[c]||(n[c]=(I,...C)=>{for(let f=0;f{const n=t._withKeys||(t._withKeys={}),c=i.join(".");return n[c]||(n[c]=I=>{if(!("key"in I))return;const C=cD(I.key);if(i.some(f=>f===C||taA[f]===C))return t(I)})},oaA=nI({patchProp:zrA},_rA);let CZ;function X9(){return CZ||(CZ=ArA(oaA))}const yv=(...t)=>{X9().render(...t)},saA=(...t)=>{const i=X9().createApp(...t),{mount:n}=i;return i.mount=c=>{const I=raA(c);if(!I)return;const C=i._component;!$s(C)&&!C.render&&!C.template&&(C.template=I.innerHTML),I.nodeType===1&&(I.textContent="");const f=n(I,!1,naA(I));return I instanceof Element&&(I.removeAttribute("v-cloak"),I.setAttribute("data-v-app","")),f},i};function naA(t){if(t instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&t instanceof MathMLElement)return"mathml"}function raA(t){return fg(t)?document.querySelector(t):t}function aaA(t){throw new Error('Could not dynamically require "'+t+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var LL={exports:{}},EY={exports:{}},gaA=EY.exports,hZ;function $9(){return hZ||(hZ=1,function(t,i){(function(n,c){t.exports=c()})(gaA,function(){const n=p=>p===void 0,c=p=>typeof p=="string",I=p=>{var B;return(B=Object.prototype.toString.call(p).match(/^\[object (.*)\]$/))===null||B===void 0?void 0:B[1].toLowerCase()},C=p=>typeof Array.isArray=="function"?Array.isArray(p):I(p)==="array",f=p=>p!==null&&typeof p=="object",w=p=>C(p)||f(p),_=p=>{if(typeof p!="string")return!1;const B=p[0];return!/[^a-zA-Z0-9]/.test(B)},N=p=>{if(typeof p!="object"||p===null)return!1;const B=Object.getPrototypeOf(p);if(B===null)return!0;let v=B;for(;Object.getPrototypeOf(v)!==null;)v=Object.getPrototypeOf(v);return B===v};function L(p=99999999){return Math.round(Math.random()*p)}const q=(p,B,v,G)=>{if(!w(p)||!w(B))return 0;let O=0;const z=Object.keys(B);let X;for(let rA=0,DA=z.length;rA"u"&&typeof uni.requireNativePlugin=="function",to=ct&&typeof wx.miniapp=="object",so=typeof uni<"u",ks=Dt&&typeof tt.enterChat=="function",Gi=ct||Ve||Dt||Pt||oi||Co||Ni,As=typeof window>"u"&&!Gi&&typeof mg<"u"&&mg.NativeScriptGlobals!==void 0,Lo=typeof mg<"u"&&(mg.nativeModuleProxy!==void 0||mg.ReactNative!==void 0),$i=typeof wx<"u"&&typeof wx.getAccountInfoSync=="function"&&!!wx.getAccountInfoSync().plugin,zt=typeof uni<"u"?!Gi:typeof window<"u"&&!Gi&&!Lo,Ao=Ve?qq:Dt?tt:Pt?swan:oi?my:ct?wx:Co?uni:Ni?jd:{},Ri=zt&&window&&window.navigator&&window.navigator.userAgent||"",Es=/(micromessenger|webbrowser)/i.test(Ri),VA=function(){let p="WEB";return Es?p="WEB":Ve?p="QQ_MP":Dt?p="TT_MP":Pt?p="BAIDU_MP":oi?p="ALI_MP":ct?p=to?"DONUT_NATIVE_APP":"WX_MP":Co?p="UNI_NATIVE_APP":As?p="NS_NATIVE_APP":Lo&&(p="RN_NATIVE_APP"),tA[p]}(),Ee=/iPad/i.test(Ri),Je=/iPhone/i.test(Ri)&&!Ee,Ut=/iPod/i.test(Ri),ot=Je||Ee||Ut,ut=function(){const p=Ri.match(/OS (\d+)_/i);return p&&p[1]?p[1]:null}(),$t=/Android/i.test(Ri),Zt=function(){const p=Ri.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);if(!p)return null;const B=p[1]&&parseFloat(p[1]),v=p[2]&&parseFloat(p[2]);return B&&v?parseFloat(`${p[1]}.${p[2]}`):B||null}(),Ge=/Firefox/i.test(Ri),Xe=/Edge/i.test(Ri),se=!Xe&&/Chrome/i.test(Ri),ve=/MSIE/.test(Ri)||Ri.indexOf("Trident")>-1&&Ri.indexOf("rv:11.0")>-1,pt=function(){const p=/MSIE\s(\d+)\.\d/.exec(Ri);let B=p&&parseFloat(p[1]);return!B&&/Trident\/7.0/i.test(Ri)&&/rv:11.0/.test(Ri)&&(B=11),B}(),mo=/Safari/i.test(Ri)&&!se&&!$t&&!Xe,No=/Windows/i.test(Ri),no=/MAC OS X/i.test(Ri),Go=zt&&typeof Worker<"u"&&!ve,An=$t||ot,rn=function(){if(typeof window>"u"||window.navigator===void 0)return!1;const{standalone:p}=window.navigator;return!(!ot||p||mo)}();function ds(){let p="unknown";if(no&&(p="mac"),No&&(p="windows"),ot&&(p="ios"),$t&&(p="android"),Gi)try{const{platform:B}=Ao.getSystemInfoSync();B!==void 0&&(p=B)}catch(B){console.error(B)}return p}const an=typeof process<"u"&&process.versions!==void 0&&process.versions.node!==void 0&&typeof window>"u";function So(p,B){var v={};for(var G in p)Object.prototype.hasOwnProperty.call(p,G)&&B.indexOf(G)<0&&(v[G]=p[G]);if(p!=null&&typeof Object.getOwnPropertySymbols=="function"){var O=0;for(G=Object.getOwnPropertySymbols(p);O{Ao.request({url:v,data:G,method:B,timeout:O,header:{"content-type":Zr},success:rA=>z(rA.data),fail:()=>X(new Error(`{"message":"Network error","code":${qn}}`))})}):an?void 0:new Promise((z,X)=>{const rA=new XMLHttpRequest,DA=setTimeout(()=>{rA.abort(),X(new Error(`{"message":"Request timeout","code":${mr}}`))},O);rA.onreadystatechange=function(){if(rA.readyState===4)if(clearTimeout(DA),rA.status===200||rA.status===304)try{z(rA.responseText?JSON.parse(rA.responseText):null)}catch{z(rA.responseText)}else X(new Error(`{"message":"Network error","code":${qn}}`))},rA.open(B,v,!0),rA.setRequestHeader("Content-type",Zr),rA.send(G||null)})})}function Rs(p){if(p==null)return!0;if(typeof p=="boolean")return!1;if(typeof p=="number")return p===0;if(typeof p=="string"||typeof p=="function"||Array.isArray(p))return p.length===0;if(p instanceof Error)return p.message==="";if(N(p)){for(const B in p)if(Object.prototype.hasOwnProperty.call(p,B))return!1;return!0}return(Object.prototype.toString.call(p)==="[object Map]"||Object.prototype.toString.call(p)==="[object Set]"||Object.prototype.toString.call(p)==="[object File]")&&p.size===0}function rr(p,B){if(p===null||typeof p!="object")return p;const v=B||new WeakMap;if(v.has(p))return v.get(p);if(p instanceof Date)return new Date(p.getTime());if(p instanceof RegExp)return new RegExp(p.source,p.flags);if(p instanceof Map){const z=new Map;return v.set(p,z),p.forEach((X,rA)=>{z.set(rr(rA,v),rr(X,v))}),z}if(p instanceof Set){const z=new Set;return v.set(p,z),p.forEach(X=>{z.add(rr(X,v))}),z}if(Array.isArray(p)){const z=[];return v.set(p,z),p.forEach(X=>{z.push(rr(X,v))}),z}const G=Object.getPrototypeOf(p),O=Object.create(G);return v.set(p,O),[...Object.getOwnPropertyNames(p),...Object.getOwnPropertySymbols(p)].forEach(z=>{if(z==="__ob__"||z==="__v_skip"||z==="__v_isRef"||z==="__v_isReadonly")return;const X=Object.getOwnPropertyDescriptor(p,z);X&&(X.get||X.set?Object.defineProperty(O,z,X):O[z]=rr(p[z],v))}),O}function en(p,B,v){const G=new WeakSet,O=(z,X)=>{if(B&&(X=B(z,X)),X===void 0)return"undefined";if(X===null)return null;if(Number.isNaN(X))return"NaN";if(X===1/0)return"Infinity";if(X===-1/0)return"-Infinity";if(typeof X=="function")return`[Function: ${X.name||"anonymous"}]`;if(typeof X=="symbol")return X.toString();if(typeof X=="bigint")return`${X.toString()}n`;if(typeof X=="object"&&X!==null){if(G.has(X))return"[Circular]";G.add(X)}return X instanceof Date?X.toISOString():X instanceof Error?{name:X.name,message:X.message}:X instanceof Map?{dataType:"Map",value:Array.from(X.entries())}:X instanceof Set?{dataType:"Set",value:Array.from(X.values())}:X};try{return JSON.stringify(p,O,v)}catch(z){return console.error("Failed to stringify:",z),""}}function wn(){let p,B;return{promise:new Promise((v,G)=>{p=v,B=G}),resolve:p,reject:B}}var jt,yg=Object.freeze({__proto__:null,ANDROID_VERSION:Zt,IE_VERSION:pt,IN_ALIPAY_MINI_APP:oi,IN_BAIDU_MINI_APP:Pt,IN_BROWSER:zt,IN_DONUT_NATIVE_APP:to,IN_FEISHU_MINI_APP:ks,IN_JD_MINI_APP:Ni,IN_MINI_APP:Gi,IN_NODE:an,IN_NS_NATIVE_APP:As,IN_QQ_MINI_APP:Ve,IN_RN_APP:Lo,IN_TT_MINI_APP:Dt,IN_TT_MINI_GAME:ti,IN_UNI_APP:so,IN_UNI_NATIVE_APP:Co,IN_WX_MINI_APP:ct,IN_WX_MINI_APP_DESK:wt,IN_WX_MINI_GAME:ce,IN_WX_MINI_PLUGIN:$i,IOS_VERSION:ut,IS_ANDROID:$t,IS_CHROME:se,IS_EDGE:Xe,IS_FIREFOX:Ge,IS_IE:ve,IS_IOS:ot,IS_IPAD:Ee,IS_IPHONE:Je,IS_IPOD:Ut,IS_MAC:no,IS_SAFARI:mo,IS_WECHAT:Es,IS_WIN:No,IS_WORKER_AVAILABLE:Go,MINI_APP_NAMESPACE:Ao,USER_AGENT:Ri,base16EncodeBinaryString:lA,deepCopyWithMethods:rr,deepMerge:q,generatePromise:wn,getPlatformType:ds,getType:I,httpRequest:Yi,isArray:C,isArrayOrObject:w,isEmpty:Rs,isH5:An,isIOSWebView:rn,isNumber:p=>p!==null&&(typeof p=="number"&&!Number.isNaN(p-0)||typeof p=="object"&&p.constructor===Number),isObject:f,isPlainObject:N,isString:c,isUndefined:n,isUniIOSApp:function(){return Co&&uni.getDeviceInfo().platform.toLocaleLowerCase()==="ios"},isValidRequestKey:_,platform:VA,randomInt:L,randomString:function(){const p="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";let B="";for(let v=32;v>0;--v)B+=p[Math.floor(62*Math.random())];return B},safeStringify:en});class Pn{constructor(){this.listeners={}}on(B,v,G){this.listeners[B]||(this.listeners[B]=[]),this.listeners[B].push({fn:v,context:G})}off(B,v,G){var O;v&&(this.listeners[B]=(O=this.listeners[B])===null||O===void 0?void 0:O.filter(z=>{const X=z.fn===v,rA=!G||z.context===G;return!(X&&rA)}))}emit(B,...v){const G=this.listeners[B];G&&G.forEach(O=>{const{fn:z,context:X}=O;try{z.apply(X,v)}catch(rA){console.warn(`Error in event handler for ${B} error: ${en(rA)}`)}})}once(B,v,G){const O=(...z)=>{v.apply(G,z),this.off(B,O)};this.on(B,O)}}(function(p){p.BUSINESS_COMMAND="business_command",p.C2C_REALTIME_MESSAGE="c2c_realtime_message",p.C2C_MESSAGE_MODIFIED="c2c_message_modified",p.C2C_REVOKED_MESSAGE="c2c_message_revoked",p.GROUP_REALTIME_MESSAGE="group_realtime_message",p.GROUP_MESSAGE_MODIFIED="group_message_modified",p.GROUP_MESSAGE_REVOKED="group_message_revoked",p.C2C_MESSAGE_READ_RECEIPT="c2c_message_read_receipt",p.MESSAGE_REACTION_UPDATED="message_reaction_updated",p.MESSAGE_REACTION_UPDATED_SYNC="message_reaction_updated_sync",p.GROUP_AT_TIPS="group_at_tips",p.USER_STATUS_UPDATE="user_status_update",p.FRIEND_LIST_MODIFIED="friend_list_modified",p.PROFILE_MODIFIED="profile_modified",p.CONV_MODIFIED="conversation_modified",p.GROUP_TIPS_NOTIFICATION="group_tips_notification",p.GROUP_MESSAGE_READ_RECEIPT="group_message_read_receipt",p.GROUP_MESSAGE_READ_SYNC="group_message_read_sync",p.GROUP_SYSTEM_NOTIFICATION="group_system_notification",p.C2C_MESSAGE_PEER_READ="c2c_message_peer_read",p.C2C_MESSAGE_READ_SYNC="c2c_message_read_sync",p.C2C_REMIND_TYPE_SYNC="c2c_remind_type_sync",p.FOLLOW_LIST_UPDATED="follow_list_updated",p.MESSAGE_EXTENSIONS_UPDATED="message_extensions_updated",p.ALL_MESSAGE_READ="all_message_read",p.CONVERSATION_MARK_UPDATED="conversation_mark_updated",p.CONVERSATION_GROUP_ADD="conversation_group_add",p.CONVERSATION_GROUP_DELETED="conversation_group_deleted",p.CONVERSATION_GROUP_UPDATED="conversation_group_updated",p.ALL_RECEIVE_MESSAGE_OPTION="all_receive_message_option",p.TOPIC_AT_TIPS="topic_at_tips",p.TOPIC_TIPS_NOTIFICATION="topic_tips_notification",p.TOPIC_SYSTEM_NOTIFICATION="topic_system_notification",p.TOPIC_MESSAGE_READ_SYNC="topic_message_read_sync",p.TOPIC_LATEST_MESSAGE="topic_latest_message",p.GROUP_MESSAGE_PINNED="group_message_pinned"})(jt||(jt={}));const bn=[16,17];function Js(p){var B;const v=[];return(B=p?.GroupTips)===null||B===void 0||B.forEach(G=>{var O;G.GroupInfo.MillionGroupFlag===2?v.push(jt.TOPIC_TIPS_NOTIFICATION):bn.includes((O=G?.MsgBody)===null||O===void 0?void 0:O.OpType)?v.push(jt.GROUP_MESSAGE_PINNED):v.push(jt.GROUP_TIPS_NOTIFICATION)}),v}const fr=[{conditions:[{type:"event",value:100}],subType:jt.BUSINESS_COMMAND},{conditions:[{type:"event",value:24}],subType:jt.ALL_RECEIVE_MESSAGE_OPTION},{conditions:[{type:"event",value:26}],subType:jt.TOPIC_LATEST_MESSAGE},{conditions:[{type:"hasKey",value:"C2cMsgArray"}],subType:jt.C2C_REALTIME_MESSAGE},{conditions:[{type:"hasKey",value:"C2cMsgModNotifys"}],subType:jt.C2C_MESSAGE_MODIFIED},{conditions:[{type:"hasKey",value:"ProfileDataMod"}],subType:jt.PROFILE_MODIFIED},{conditions:[{type:"hasKey",value:"UserStatusList"}],subType:jt.USER_STATUS_UPDATE},{conditions:[{type:"hasKey",value:"FriendListMod"}],subType:jt.FRIEND_LIST_MODIFIED},{conditions:[{type:"hasKey",value:"GroupMsgArray"}],subType:jt.GROUP_REALTIME_MESSAGE},{conditions:[{type:"hasKey",value:"GroupMsgModNotifys"}],subType:jt.GROUP_MESSAGE_MODIFIED},{conditions:[{type:"hasKey",value:"C2cNotifyMsgArray"}],subTypeParser:function(p){var B;const v=[];return(B=p?.C2cNotifyMsgArray)===null||B===void 0||B.forEach(G=>{G.WithdrawC2cMsgNotify&&v.push(jt.C2C_REVOKED_MESSAGE),G.C2cReadedReceipt&&v.push(jt.C2C_MESSAGE_PEER_READ),G.ReadC2cMsgNotify&&v.push(jt.C2C_MESSAGE_READ_SYNC),G.MuteNotificationsSync&&v.push(jt.C2C_REMIND_TYPE_SYNC)}),v}},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:4}],subTypeParser:Js},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:5}],subTypeParser:function(p){var B;const v=[];return(B=p?.GroupTips)===null||B===void 0||B.forEach(G=>{Array.isArray(G.MsgBody.GroupWithdrawInfoArray)?v.push(jt.GROUP_MESSAGE_REVOKED):Array.isArray(G.MsgBody.GroupMsgReceiptList)?v.push(jt.GROUP_MESSAGE_READ_RECEIPT):Array.isArray(G.MsgBody.GroupReadInfoArray)?G.MsgBody.GroupReadInfoArray[0].TopicId?v.push(jt.TOPIC_MESSAGE_READ_SYNC):v.push(jt.GROUP_MESSAGE_READ_SYNC):G.GroupInfo.MillionGroupFlag===2?v.push(jt.TOPIC_SYSTEM_NOTIFICATION):v.push(jt.GROUP_SYSTEM_NOTIFICATION)}),v}},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:6}],subTypeParser:Js},{conditions:[{type:"hasKey",value:"GroupTips"},{type:"event",value:12}],subTypeParser:function(p){var B;const v=[];return(B=p?.GroupTips)===null||B===void 0||B.forEach(G=>{const{GroupAtTips:{TopicId:O}}=G;O?v.push(jt.TOPIC_AT_TIPS):v.push(jt.GROUP_AT_TIPS)}),v}},{conditions:[{type:"hasKey",value:"RecentContactMod"}],subTypeParser:function(p){var B;const v=[];return(B=p?.RecentContactMod)===null||B===void 0||B.forEach(G=>{switch(G.PushType){case We.CONV_MARK_UPDATED:v.push(jt.CONVERSATION_MARK_UPDATED);break;case We.CONV_GROUP_ADDED:v.push(jt.CONVERSATION_GROUP_ADD);break;case We.CONV_GROUP_DELETED:v.push(jt.CONVERSATION_GROUP_DELETED);break;case We.CONV_GROUP_UPDATED:v.push(jt.CONVERSATION_GROUP_UPDATED);break;default:v.push(jt.CONV_MODIFIED)}}),v}},{conditions:[{type:"hasKey",value:"MsgReactionNotifyList"}],subType:jt.MESSAGE_REACTION_UPDATED},{conditions:[{type:"hasKey",value:"MsgReactionNotify"}],subType:jt.MESSAGE_REACTION_UPDATED_SYNC},{conditions:[{type:"hasKey",value:"C2cMsgInfo"}],subType:jt.C2C_MESSAGE_READ_RECEIPT},{conditions:[{type:"hasKey",value:"FollowChangeList"}],subType:jt.FOLLOW_LIST_UPDATED},{conditions:[{type:"hasKey",value:"MsgExtensionNotify"}],subType:jt.MESSAGE_EXTENSIONS_UPDATED},{conditions:[{type:"hasKey",value:"C2CReadAllMsg"}],subType:jt.ALL_MESSAGE_READ}];var xn;function yr(p){var B;const v=Array.isArray((B=p?.body)===null||B===void 0?void 0:B.EventArray)?p.body.EventArray:[],G=[];return v.forEach(O=>{O.Flag=p.body.Flag;const z=fr.find(rA=>rA.conditions.every(DA=>{switch(DA.type){case"event":return O.Event===DA.value;case"hasKey":return Object.prototype.hasOwnProperty.call(O,DA.value);default:return!1}}));if(!z)return null;let X=[];typeof z.subTypeParser=="function"?X=z.subTypeParser(O):z.subType&&(X=z.subType),Array.isArray(X)?X.forEach(rA=>{G.push({type:`${xn.SERVER_PUSH_MESSAGE}:${rA}`,data:O})}):G.push({type:`${xn.SERVER_PUSH_MESSAGE}:${X}`,data:O})}),G}(function(p){p.SERVER_PUSH_MESSAGE="im_open_push.msg_push",p.SERVER_PUSH_MESSAGE_MULTIPLE="im_open_push.multi_msg_push_ws",p.ERROR="error"})(xn||(xn={}));const fo={[xn.SERVER_PUSH_MESSAGE]:yr,[xn.SERVER_PUSH_MESSAGE_MULTIPLE]:yr,[xn.ERROR]:function(p){const{errorCode:B}=p;return[{type:`error:${B}`,data:p}]}},gn=new class{constructor(){this._outerEventEmitter=null,this._innerEventEmitter=null,this._filteredCallbackMap=new Map,this._outerEventEmitter=new Pn,this._innerEventEmitter=new Pn,this.InnerEventSubType=jt}subscribeInnerEvent(p,B,v,G,O){var z;let X,rA,DA,GA;["string","number"].includes(typeof B)?(DA=`${p}:${B}`,GA=v,rA=G,X=O):(DA=p,GA=B,rA=v,X=typeof G=="function"?G:void 0),X?this._subscribeWithFilter(DA,GA,rA,X):(z=this._innerEventEmitter)===null||z===void 0||z.on(DA,GA,rA)}emitInnerEvent(p,B){var v,G;if((v=this._innerEventEmitter)===null||v===void 0||v.emit(p,B),Object.keys(fo).includes(p)){const O=(G=fo[p])===null||G===void 0?void 0:G.call(fo,B);O?.forEach(z=>{var X;z&&((X=this._innerEventEmitter)===null||X===void 0||X.emit(z.type,z.data))})}}subscribeOuterEvent(p,B,v){var G;(G=this._outerEventEmitter)===null||G===void 0||G.on(p,B,v)}unSubscribeOuterEvent(p,B,v){var G;(G=this._outerEventEmitter)===null||G===void 0||G.off(p,B,v)}unSubscribeInnerEvent(p,B,v,G){if(["string","number"].includes(typeof B)){const O=v,z=`${p}:${B}`;this._unsubscribeEvent(z,O,G)}else{const O=B;this._unsubscribeEvent(p,O,v)}}emitOuterEvent(p,B){var v;(v=this._outerEventEmitter)===null||v===void 0||v.emit(p,B)}getOuterEventEmitter(){return this._outerEventEmitter}rest(){this._outerEventEmitter=null,this._innerEventEmitter=null}_subscribeWithFilter(p,B,v,G){var O;const z=X=>{G.call(v,X)&&B.call(v,X)};this._filteredCallbackMap.has(p)||this._filteredCallbackMap.set(p,[]),this._filteredCallbackMap.get(p).push({originalCallback:B,filteredCallback:z,filter:G,context:v}),(O=this._innerEventEmitter)===null||O===void 0||O.on(p,z,v)}_unsubscribeEvent(p,B,v){var G,O;const z=this._filteredCallbackMap.get(p);if(z){const X=z.findIndex(rA=>rA.originalCallback===B&&rA.context===v);if(X!==-1){const{filteredCallback:rA}=z[X];return(G=this._innerEventEmitter)===null||G===void 0||G.off(p,rA,v),z.splice(X,1),void(z.length===0&&this._filteredCallbackMap.delete(p))}}(O=this._innerEventEmitter)===null||O===void 0||O.off(p,B,v)}};class Ml{constructor(){this._socket=null}connectSocket(B){return this._socket=new WebSocket(B),this._socket}send(B){var v,G;try{(v=this._socket)===null||v===void 0||v.send(B)}catch(O){(G=this._onSendFail)===null||G===void 0||G.call(this,O)}}bindSocketHandlers(B){const{onOpen:v,onMessage:G,onClose:O,onError:z,onSendFail:X}=B;this._socket&&(this._socket.binaryType="arraybuffer",this._socket.onopen=v,this._socket.onmessage=G,this._socket.onclose=O,this._socket.onerror=z,this._onSendFail=X)}unbindSocketHandlers(){this._socket&&(this._socket.onopen=null,this._socket.onmessage=null,this._socket.onclose=null,this._socket.onerror=null)}disconnect(){this._socket&&(this._socket.close(),this._socket=null)}}class cn{constructor(B){this._onError=B.onError}connectSocket(B){const v=this;return this._socket=Ao.connectSocket({url:B,header:{"content-type":"application/json"},complete:()=>{},fail:G=>v._onError(G)}),this._socket}send(B){var v;(v=this._socket)===null||v===void 0||v.send({data:B,fail:this._onSendFail})}bindSocketHandlers(B){const{onOpen:v,onMessage:G,onClose:O,onError:z,onSendFail:X}=B;this._socket&&(this._socket.onClose(O),this._socket.onOpen(v),this._socket.onMessage(G),this._socket.onError(z),this._onSendFail=X)}unbindSocketHandlers(){this._socket&&(this._socket.onClose(()=>{}),this._socket.onOpen(()=>{}),this._socket.onMessage(()=>{}),this._socket.onError(()=>{}))}disconnect(){this._socket&&(this._socket.close(),this._socket=null)}}const Dr="CONNECT",Us="SEND",Jc="DISCONNECT",fs="OPEN",as="MESSAGE",wu="CLOSE",Wa="ERROR",hs="SEND_FAIL";class sg{constructor(){this._worker=null,this._blobUrl=null}connectSocket(B){const v=new Blob([` let _socket = null; self.onmessage = (event) => { @@ -211,57 +211,57 @@ _socket = null; } } -`],{type:"application/javascript"});this._worker=new Worker(URL.createObjectURL(v)),this._worker.postMessage({type:fr,url:B})}send(B){var v,N;try{(v=this._worker)===null||v===void 0||v.postMessage({type:Ls,data:B})}catch(O){(N=this._onSendFail)===null||N===void 0||N.call(this,O)}}bindSocketHandlers(B){const{onOpen:v,onMessage:N,onClose:O,onError:z,onSendFail:X}=B;if(this._worker){const rA={[ms]:v,[as]:N,[Ru]:O,[Wa]:z,[Cs]:X};this._onSendFail=X,this._worker.onmessage=DA=>{var GA;const{type:VA}=DA?.data||{};typeof rA[VA]=="function"&&((GA=rA[VA])===null||GA===void 0||GA.call(rA,DA?.data))}}}unbindSocketHandlers(){this._worker&&(this._worker.onmessage=null)}disconnect(){this._worker&&(this._worker.postMessage({type:Jc}),this._worker.terminate(),this._worker=null),this._blobUrl&&(URL.revokeObjectURL(this._blobUrl),this._blobUrl=null)}}class HI{}var As,$i=new class{constructor(){this._store=new Map}get(p){return this._store.get(p)}getStorage(p){return ki?gt?my.getStorageSync({key:p}).data:oo.getStorageSync(p):this._canUseLocalStorage()?localStorage.getItem(p):{}}set(p,B){const v=this._store.get(p)||{};B instanceof Map?this._store.set(p,B):this._store.set(p,Object.assign(Object.assign({},v),B))}setStorage(p,B){ki?gt?my.setStorageSync({key:p,data:JSON.stringify(B)}):oo.setStorageSync(p,JSON.stringify(B)):this._canUseLocalStorage()&&localStorage.setItem(p,JSON.stringify(B))}clear(p){typeof p=="string"?this._store.set(p,{}):this._store.clear()}clearLocalStorage(p){this._canUseLocalStorage()&&(typeof p=="string"?localStorage.setItem(p,""):localStorage.clear())}reset(){this.clear()}_canUseLocalStorage(){return typeof window<"u"&&navigator&&navigator.cookieEnabled&&localStorage}};class pc{connectSocket(B){return this._socket=oo.connectSocket({url:B,header:{"content-type":"application/json"},multiple:!0,complete:()=>{}}),this._socket}send(B){var v;(v=this._socket)===null||v===void 0||v.send({data:B,fail:this._onSendFail})}bindSocketHandlers(B){const{onOpen:v,onMessage:N,onClose:O,onError:z,onSendFail:X}=B;this._socket&&(this._socket.onClose(O),this._socket.onOpen(v),this._socket.onMessage(rA=>N(rA?.data)),this._socket.onError(()=>z),this._onSendFail=X)}unbindSocketHandlers(){this._socket&&(this._socket.onClose(()=>{}),this._socket.onOpen(()=>{}),this._socket.onMessage(()=>{}),this._socket.onError(()=>{}))}disconnect(){this._socket&&(this._socket.close(),this._socket=null)}}(function(p){p[p.CONNECTED=0]="CONNECTED",p[p.CONNECTING=1]="CONNECTING",p[p.DISCONNECTED=2]="DISCONNECTED"})(As||(As={}));class ng{constructor(B){this._url="",this._readyState=As.DISCONNECTED,this._url=B,this._id=U(),this._emitter=new On,gt?this._socket=new pc:Et||To||yt||qe||Fi||Oe?this._socket=new cn({onError:this._onError.bind(this)}):an?this._socket=new HI:this._canUseWebWorker()?this._socket=new sg:this._socket=new Sl,this.connect()}connect(){this.doOpen(),this._bindSocketHandlers()}doOpen(){[As.CONNECTED,As.CONNECTING].includes(this._readyState)||(this._readyState=As.CONNECTING,this._ws=this._socket.connectSocket(this._url))}send(B){this._readyState!==As.CONNECTED?this.reconnect():this._socket.send(B)}reconnect(){[As.CONNECTED,As.CONNECTING].includes(this._readyState)||(this.disconnect(),this.doOpen())}getId(){return this._id}on(B,v,N){this._emitter.on(B,v,N)}off(B,v,N){this._emitter.off(B,v,N)}isConnected(){return this._readyState===As.CONNECTED}disconnect(){this._readyState=As.DISCONNECTED,this._unbindSocketHandlers(),this._socket.disconnect()}_onOpen(B){this._readyState===As.CONNECTING&&(this._readyState=As.CONNECTED,this._emitter.emit("connect",{socketId:this._id,event:B}))}_onMessage(B){this._emitter.emit("message",B)}_onClose(B){this._readyState=As.DISCONNECTED,this._emitter.emit("close",{socketId:this._id,event:B})}_onError(B){this._readyState=As.DISCONNECTED,this._emitter.emit("error",{socketId:this._id,error:B})}_onSendFail(B){this._readyState=As.DISCONNECTED,this._emitter.emit("sendFail",{socketId:this._id,error:B})}_bindSocketHandlers(){this._socket.bindSocketHandlers({onOpen:this._onOpen.bind(this),onMessage:this._onMessage.bind(this),onClose:this._onClose.bind(this),onError:this._onError.bind(this),onSendFail:this._onSendFail.bind(this)})}_unbindSocketHandlers(){this._socket.unbindSocketHandlers()}_canUseWebWorker(){const B=$i.get("cloudConfig")||{};return(r(B.isWorkerEnabled)||B.isWorkerEnabled==="1")&&Go}}const Dg={[ut.SINGAPORE]:[[2e7,3e7],[172e7,173e7]],[ut.KOREA]:[[3e7,4e7],[173e7,174e7]],[ut.GERMANY]:[[4e7,5e7],[174e7,175e7]],[ut.IND]:[[5e7,6e7],[175e7,176e7]],[ut.JPN]:[[6e7,7e7],[176e7,177e7]],[ut.USA]:[[7e7,8e7],[177e7,178e7]],[ut.INDONESIA]:[[8e7,9e7],[178e7,179e7]],[ut.KSA]:[[9e7,1e8],[179e7,18e8]]};function ua(p){var B;if(!((B=$i.get("instance"))===null||B===void 0)&&B.oversea)return ut.OVERSEA;for(const v of Object.keys(Dg))for(const[N,O]of Dg[v])if(p>=N&&p`${ee}=${VA[ee]}`).join("&"));var VA;return v?`${p}/binfo?${GA}&compress=gzip`:`${p}/info?${GA}`}function Hs(p){const B=$i.get("instance"),{sdkAppId:v,testEnv:N,proxyServer:O}=B,z=ua(v);if(N)return Hn(ft.TEST[z].DEFAULT,{isBinary:p});if(!Rs(O))return Hn(O,{isBinary:p});const X=ft.PRODUCTION[z],rA=Zt&&X.ANYCAST,DA=Zt,GA=!!X.BACKUP_CN;return Hn({[bo.INITIAL]:()=>(_o=bo.DEFAULT,X.DEFAULT),[bo.DEFAULT]:()=>(_o=bo.IPV6,X.IPV6),[bo.IPV6]:()=>(_o=bo.BACKUP,X.BACKUP),[bo.BACKUP]:()=>DA?(_o=bo.BACKUP_WEB_ONLY,function(VA){const ee=Math.floor(10001*Math.random())+1e4;return VA.replace("*",String(ee))}(X.BACKUP_WEB_ONLY)):GA?(_o=bo.BACKUP_CN,X.BACKUP_CN):rA?(_o=bo.ANYCAST,X.ANYCAST):X.DEFAULT,[bo.BACKUP_WEB_ONLY]:()=>GA?(_o=bo.BACKUP_CN,X.BACKUP_CN):rA?(_o=bo.ANYCAST,X.ANYCAST):X.DEFAULT,[bo.BACKUP_CN]:()=>(_o=rA?bo.ANYCAST:bo.DEFAULT,X[_o]),[bo.ANYCAST]:()=>(_o=bo.DEFAULT,X.ANYCAST="",X.DEFAULT)}[_o](),{isBinary:p})}var Sg=new class{constructor(){this._timeOffsetWithServer=0}getServerTimeMs(){return Date.now()+this._timeOffsetWithServer}getServerTimeSeconds(){return Math.floor(this.getServerTimeMs()/1e3)}getTimeOffsetWithServer(){return this._timeOffsetWithServer}calculateTimeOffsetWithServer(p,B){const v=Date.now(),N=v-p;this._timeOffsetWithServer=B+N-v}};const mc=16;var fn=new class{constructor(){this._tasks=[],this._timer=null,this._taskMap=new Map}_addTaskToScheduler(p){const{id:B}=p;this.removeTask(B),this._tasks.push(p),this._taskMap.set(B,p),this._sort(),this._scheduleNextTask()}_createTask(p){const{id:B,callback:v,context:N,isOnce:O=!1,intervalMs:z=mc}=p,X=Math.max(z,mc);return{id:B,nextExecuteTime:Date.now()+X,intervalMs:z,callback:v,context:N,isOnce:O}}addTask(p){const B=this._createTask(p);this._addTaskToScheduler(B)}addOnceTask(p){const B=this._createTask(Object.assign(Object.assign({},p),{isOnce:!0}));this._addTaskToScheduler(B)}removeTask(p){const B=this._tasks.findIndex(v=>v.id===p);B>-1&&(this._tasks.splice(B,1),this._taskMap.delete(p),this._scheduleNextTask())}updateTaskInterval(p,B){const v=this._taskMap.get(p);v&&(v.intervalMs=B,v.nextExecuteTime=Date.now()+B,this._sort(),this._scheduleNextTask())}clearAllTasks(){this._tasks=[],this._taskMap.clear(),this._timer&&(clearTimeout(this._timer),this._timer=null)}dispose(){this.clearAllTasks()}_sort(){this._tasks.sort((p,B)=>p.nextExecuteTime-B.nextExecuteTime)}_scheduleNextTask(){this._timer&&(clearTimeout(this._timer),this._timer=null);const p=this._tasks[0];if(p){const B=Math.max(0,p.nextExecuteTime-Date.now());this._timer=setTimeout(()=>this._execute(),B)}}_execute(){const p=Date.now();for(;this._tasks.length&&this._tasks[0].nextExecuteTime<=p;){const B=this._tasks[0];try{B.context?B.callback.call(B.context):B.callback(),B.isOnce?this.removeTask(B.id):(B.nextExecuteTime=p+B.intervalMs,this._sort())}catch(v){console.warn(`Task ${B.id} execution failed:`,v),B.isOnce&&this.removeTask(B.id)}}this._scheduleNextTask()}};function Ga(p){const B=[];for(let v=0;v=55296&&N<=56319){const O=p.charCodeAt(++v)-56320+(N-55296<<10)+65536;B.push(240|O>>18,128|O>>12&63,128|O>>6&63,128|63&O)}else N<=127?B.push(N):N<=2047?B.push(192|N>>6,128|63&N):B.push(224|N>>12,128|N>>6&63,128|63&N)}return new Uint8Array(B)}function In(p){const B=Array.isArray(p)?[]:Object.create(null);for(const v in p)Object.prototype.hasOwnProperty.call(p,v)&&_(v)&&p[v]!=null&&(p[v]===null||typeof p[v]!="object"?B[v]=p[v]:B[v]=In(p[v]));return B}function fs(p,B){if(mA.includes(p))return 0;const v=Ga(JSON.stringify(B));let N=4294967295;const{length:O}=v;for(let z=0;z>>=1:N=N>>>1^3988292384}return(4294967295^N)>>>0}function Ea(p){const{servcmd:B,data:v}=p,N=function(z){const X=$i.get("login")||{},rA=$i.get("instance")||{};return{servcmd:z,ver:"v4",platform:HA,websdkappid:537048168,websdkversion:"1.7.3",a2:X.a2Key||void 0,tinyid:X.tinyID||void 0,status_instid:X.statusInstanceId||0,sdkappid:rA.sdkAppId,contenttype:"json",reqtime:Math.floor(Date.now()/1e3),identifier:X.a2Key?void 0:X.userId,usersig:X.a2Key?void 0:X.userSig,sdkability:478343027,sdkability_ext:lA(""),cappid:rA.applicationID||0,tjgID:"",seq:Sa(),cs:0}}(B),O=In(v);return N.cs=fs(B,O),{head:N,body:O}}function yn(p){const{servcmd:B,data:v}=p,N=function(z){const X=$i.get("login")||{},rA=$i.get("instance")||{};return{servcmd:z,ver:"v4",platform:HA,websdkappid:537048168,websdkversion:"1.7.3",sdkappid:rA.sdkAppId,contenttype:"",reqtime:Math.floor(Date.now()/1e3),identifier:"",usersig:"",status_instid:X.statusInstanceId||0,sdkability:478343027,sdkability_ext:lA(""),cappid:rA.applicationID||0,seq:Sa(),cs:0}}(B),O=In(v);return N.cs=fs(B,O),{head:N,body:O}}let ba=U();function Sa(){return ba=ba<2415919103?ba+1:U(),ba}function $(){var p;const B=$i.get("login")||{},v=$i.get("instance")||{};return{sdk_type:30,sdk_app_id:v.sdkAppId,sdk_version:"1.6.18",tiny_id:Number(B.tinyID),user_id:B.userId||((p=$i.get("webPush"))===null||p===void 0?void 0:p.userId),platform:HA,instance_id:v.instanceId,trace_id:new Date().getTime()}}var K,vA=Object.freeze({__proto__:null,calcBodyCRC:fs,filterProtocolDataInvalidFields:In,generateCosSpecifiedData:function(p){const{servcmd:B,data:v}=p,N=function(z){const X=$i.get("login")||{},rA=$i.get("instance")||{};return{servcmd:z,ver:"v4",platform:HA,websdkappid:537048168,websdkversion:"1.7.3",sdkappid:rA.sdkAppId,contenttype:"json",reqtime:Math.floor(Date.now()/1e3),identifier:X.userId,usersig:X.userSig,status_instid:X.statusInstanceId||0,sdkability:478343027,sdkability_ext:lA(""),cappid:rA.applicationID||0,seq:Sa(),cs:0}}(B),O=In(v);return N.cs=fs(B,O),{head:N,body:O}},generateProtocolData:Ea,generateSSOLogProtocolData:yn,generateSequence:Sa,getCommonHead:$,getHostSite:ua,taskScheduler:fn,timeManager:Sg});(function(p){p[p.info=4]="info",p[p.warning=5]="warning",p[p.error=6]="error"})(K||(K={}));const qA={method:"extension",networkType:"network_type",eventType:"event_type",code:"error_code",message:"error_message",moreMessage:"more_message",duplicate:"duplicate",costTime:"cost_time",level:"level",uiPlatform:"ui_platform",timestamp:"timestamp"};class Ae{constructor(B){this.level=K.info,this._canSendLog=!0,this._logCreatedAt=Sg.getServerTimeMs(),this.timestamp=0,this.networkType=8,this.code=0,this.moreMessage="",this.method="",this.message="",this.costTime=0,this.duplicate=!1,this.eventType=0,this.uiPlatform=this._getUiPlatform(),this._sdkEdition=this._getSDKEdition();const{method:v,eventType:N=0,message:O="",costTime:z=0,error:X,uiPlatform:rA,moreMessage:DA="",code:GA=0,startTime:VA=0}=B||{};this.eventType=N,this.method=v,this.message=O,this.costTime=z,this.moreMessage=`${DA} startTime:${VA}`,this.code=GA,X&&this.setError(X),Rs(rA)||(this.uiPlatform=rA)}setMoreMessage(B){this.moreMessage=`${this.moreMessage} ${B}`}updateLogCreatedAtByTimeOffset(){this._logCreatedAt+=Sg.getTimeOffsetWithServer()}end(B=!1){this._canSendLog&&(this._canSendLog=!1,this.timestamp=Sg.getServerTimeMs(),this._ssoLogModule.pushToLogQueue(this._convertSSOLogDataKeyToServe()),B&&this._ssoLogModule.uploadSSOLogData())}setError(B){var v;return B instanceof Error?this._canSendLog?(!((v=$i.get("netWorkMonitor"))===null||v===void 0)&&v.isNetworkOnline&&(B.errorCode&&(this.code=B.errorCode),B.errorMessage&&this.setMoreMessage(B.errorMessage)),this.level=K.error,this):this:(console.warn("SSOLogData.setError value not instanceof Error, please check!"),this)}setLogInfo(B){return Object.keys(B).forEach(v=>{Object.keys(qA).includes(v)&&(this[v]=B[v])}),this}setSSOLogModule(B){this._ssoLogModule=B}_convertSSOLogDataKeyToServe(){const B={};return Object.keys(this).forEach(v=>{const N=v;qA[N]&&(B[qA[N]]=this[N])}),B}_getUiPlatform(){var B;const v=(B=$i.get("instance"))===null||B===void 0?void 0:B.scene;if(typeof v=="string"){const N=Number(v);return isNaN(N)?void 0:N}}_getSDKEdition(){var B;return(B=$i.get("instance"))===null||B===void 0?void 0:B.sdkEdition}}var me;(function(p){p.RECONNECTED="reconnected",p.CLOUD_CONFIG_UPDATE="cloud_config_update",p.SOCKET_DISCONNECTED="socket_disconnected"})(me||(me={}));var Pe=me;const Fe=20,rt=6e4,Ct=[4,5,6],Rt="report-logger";var Yt=new class{constructor(){this._sdkAppIdBlackList=[],this._tinyIdWhiteList=[],this._reportLevel=[4,5,6],this._minThreshold=Fe,this._maxThreshold=100,this._waitingTime=rt,this._lastReportAt=Date.now(),this._ssoLogMap=new Map,this._logLevel=IA.DEBUG,this._throttleConfig={global:{throttleTime:xe,maxCount:Qe},single:{throttleTime:ue,maxCount:Ce}},this._globalThrottle={count:0,startTime:Date.now()},this._singleThrottleMap=new Map,gn.subscribeInnerEvent(Pe.CLOUD_CONFIG_UPDATE,this._handleCloudConfigUpdate,this),fn.addTask({id:Rt,intervalMs:1e3,callback:this._checkAndReportIfDue,context:this}),this._logQueue=[],this._savePlatFormInfo()}_handleCloudConfigUpdate(p){const{evt_rpt_threshold:B=Fe,evt_rpt_waiting:v=rt,evt_rpt_level:N=Ct,evt_rpt_sdkappid_bl:O="",evt_rpt_tinyid_wl:z="",evt_rpt_global_throttle_time:X=xe,evt_rpt_global_throttle_count:rA=Qe,evt_rpt_single_throttle_time:DA=ue,evt_rpt_single_throttle_count:GA=Ce}=p||{};this._sdkAppIdBlackList=O.split(",").map(VA=>Number(VA)),this._waitingTime=Number(v),this._minThreshold=B,this._reportLevel=N,this._tinyIdWhiteList=z.split(","),this._throttleConfig={global:{throttleTime:X,maxCount:rA},single:{throttleTime:DA,maxCount:GA}}}createSSOLogData(p){const B=new Ae(p);return B.setSSOLogModule(this),this._ssoLogMap.set(p.method,B),B}getSSOLogData(p){return this._ssoLogMap.get(p)||{}}pushToLogQueue(p){p&&(this._logQueue.push(p),this._shouldUploadImmediately()&&this.uploadSSOLogData())}setLogLevel(p){[IA.DEBUG,IA.ERROR,IA.INFO,IA.NONE,IA.WARN].includes(p)&&(this._logLevel=p)}debug(p,B="",v){this._log(IA.DEBUG,p,B,v)}info(p,B="",v){this._log(IA.INFO,p,B,v)}warn(p,B="",v){this._log(IA.WARN,p,B,v)}error(p,B="",v){this._log(IA.ERROR,p,B,v)}_shouldUploadImmediately(){return this._logQueue.length>=this._minThreshold}_isReportDue(){return Date.now()>=this._lastReportAt+this._waitingTime}_checkAndReportIfDue(){this._isReportDue()&&this._logQueue.length>0&&this.uploadSSOLogData()}uploadSSOLogData(){return pA(this,void 0,void 0,function*(){if(this._logQueue.length===0)return;const p=this._logQueue.slice();this._logQueue=[];try{const B=this._filterLogs(p);if(B.length===0)return void(this._lastReportAt=Date.now());const v={Header:$(),Event:B};Rs(v.Header.user_id)||(yield function(N){const O="imopenstat.tim_web_report_v2",z=yn({servcmd:O,data:N}),X=`${z.head.seq}${O}`;return vl.sendPacket(z,{requestId:X})}(v))}catch(B){this._requeueFailedLogs(p),this.debug("uploadSSOLogData",en(B))}finally{this._lastReportAt=Date.now()}})}_requeueFailedLogs(p){this._logQueue=p.concat(this._logQueue);const B=this._logQueue.length-200;B>0&&(this._logQueue.splice(0,B),this.debug("uploadSSOLogData",`log queue overflow, dropped ${B} oldest logs`))}_savePlatFormInfo(){var p,B;if(Et){const v=(B=(p=wx.getAccountInfoSync)===null||p===void 0?void 0:p.call(wx))===null||B===void 0?void 0:B.miniProgram;if(v){const{appId:N,envVersion:O}=v;$i.set("instance",{appId:N,envVersion:O})}}else Zt&&$i.set("instance",{href:window.location.href})}_filterLogs(p){const{tinyID:B}=$i.get("login")||{},{sdkAppId:v}=$i.get("instance")||{};return this._sdkAppIdBlackList.includes(v)&&!this._tinyIdWhiteList.includes(B)?[]:p.filter(N=>this._reportLevel.includes(N.level))}_checkThrottle(p){return!!this._checkGlobalThrottle()||this._checkSingleThrottle(p)}_checkGlobalThrottle(){const p=Date.now();if(p-this._globalThrottle.startTime>=this._throttleConfig.global.throttleTime)this._globalThrottle.count=1,this._globalThrottle.startTime=p;else if(this._globalThrottle.count++,this._globalThrottle.count>this._throttleConfig.global.maxCount)return!0;return!1}_checkSingleThrottle(p){const B=Date.now(),v=this._singleThrottleMap.get(p);return v?B-v.startTime>=this._throttleConfig.single.throttleTime?(v.count=1,v.startTime=B,!1):v.count>=this._throttleConfig.single.maxCount||(v.count++,!1):(this._singleThrottleMap.set(p,{count:1,startTime:B}),!1)}_shouldLog(p){return p>=this._logLevel&&this._logLevel!==IA.NONE}_shouldReport(p){return this._reportLevel.includes(WA[p])}_formatLog(p,B,v,N){const O=new Date,z=`${O.getHours()}:${O.getMinutes()}:${O.getSeconds()}:${O.getMilliseconds()}`,X=`<${IA[p]}>`;return Nt||ki?[`${cA} [${z}] ${X} [${B}] ${v}`]:["%c%s%c%s","background:#0abf5b; padding:1px; border-radius:3px; color: #fff",cA,"",`[${z}] ${X} [${B}] ${v} params: ${en(N)}`]}_log(p,B,v,N){if(this._shouldLog(p)){const O=this._formatLog(p,B,v,N);TA[p].apply(console,O)}if(this._shouldReport(p)){const O=this._getThrottleKey(B,v,N);this._checkThrottle(O)||this.createSSOLogData(Object.assign(Object.assign({message:v},N),{method:B})).end()}}_getThrottleKey(p,B,v){const N=`${p}${B}${en(Object.assign(Object.assign({},v),{costTime:""}))}`,O=Ga(JSON.stringify(N));let z=4294967295;const{length:X}=O;for(let rA=0;rA>>=1:z=z>>>1^3988292384}return`${(4294967295^z)>>>0}`}reset(){console.log("SSO_LOG_MODULE.reset"),fn.removeTask(Rt),gn.unSubscribeInnerEvent(Pe.CLOUD_CONFIG_UPDATE,this._handleCloudConfigUpdate,this),this._lastReportAt=0,this.uploadSSOLogData(),this._sdkAppIdBlackList=[],this._tinyIdWhiteList=[],this._minThreshold=Fe,this._maxThreshold=100,this._waitingTime=rt,this._logQueue=[],this._logLevel=IA.DEBUG,this._globalThrottle={count:0,startTime:Date.now()},this._singleThrottleMap.clear()}};const Ii=15e3,ct="Channel",xt="channel_schedule_task",Ji="channel_reconnect_task",Ki="connected",qs="connecting",Mi="disconnected",zo=1e3,Mg="network_status_change",sr="activity_status_change",yr="send_fail",xn="reconnect_failed",Ml="socket_error",Ks="socket_close";function aI(p){return aI=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(B){return typeof B}:function(B){return B&&typeof Symbol=="function"&&B.constructor===Symbol&&B!==Symbol.prototype?"symbol":typeof B},aI(p)}function Wg(p){throw new Error('Could not dynamically require "'+p+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var fc,wu={exports:{}},Ma=(fc||(fc=1,function(p){p.exports=function B(v,N,O){function z(DA,GA){if(!N[DA]){if(!v[DA]){if(!GA&&Wg)return Wg(DA);if(X)return X(DA,!0);var VA=new Error("Cannot find module '"+DA+"'");throw VA.code="MODULE_NOT_FOUND",VA}var ee=N[DA]={exports:{}};v[DA][0].call(ee.exports,function(Ee){return z(v[DA][1][Ee]||Ee)},ee,ee.exports,B,v,N,O)}return N[DA].exports}for(var X=Wg,rA=0;rA>>6:(Ee<65536?ee[at++]=224|Ee>>>12:(ee[at++]=240|Ee>>>18,ee[at++]=128|Ee>>>12&63),ee[at++]=128|Ee>>>6&63),ee[at++]=128|63&Ee);return ee},N.buf2binstring=function(VA){return GA(VA,VA.length)},N.binstring2buf=function(VA){for(var ee=new O.Buf8(VA.length),Ee=0,We=ee.length;Ee>10&1023,Jt[We++]=56320|1023&ot)}return GA(Jt,We)},N.utf8border=function(VA,ee){var Ee;for((ee=ee||VA.length)>VA.length&&(ee=VA.length),Ee=ee-1;0<=Ee&&(192&VA[Ee])==128;)Ee--;return Ee<0||Ee===0?ee:Ee+rA[VA[Ee]]>ee?Ee:ee}},{"./common":1}],3:[function(B,v,N){v.exports=function(O,z,X,rA){for(var DA=65535&O,GA=O>>>16&65535,VA=0;X!==0;){for(X-=VA=2e3>>1:z>>>1;X[rA]=z}return X}();v.exports=function(z,X,rA,DA){var GA=O,VA=DA+rA;z^=-1;for(var ee=DA;ee>>8^GA[255&(z^X[ee])];return-1^z}},{}],6:[function(B,v,N){v.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],7:[function(B,v,N){v.exports=function(O,z){var X,rA,DA,GA,VA,ee,Ee,We,ot,at,Ut,Jt,Ui,go,Xi,Ei,Po,es,pi,ji,Ws,_e,_t,FA,Xt;X=O.state,rA=O.next_in,FA=O.input,DA=rA+(O.avail_in-5),GA=O.next_out,Xt=O.output,VA=GA-(z-O.avail_out),ee=GA+(O.avail_out-257),Ee=X.dmax,We=X.wsize,ot=X.whave,at=X.wnext,Ut=X.window,Jt=X.hold,Ui=X.bits,go=X.lencode,Xi=X.distcode,Ei=(1<>>=pi=es>>>24,Ui-=pi,(pi=es>>>16&255)==0)Xt[GA++]=65535&es;else{if(!(16&pi)){if(!(64&pi)){es=go[(65535&es)+(Jt&(1<>>=pi,Ui-=pi),Ui<15&&(Jt+=FA[rA++]<>>=pi=es>>>24,Ui-=pi,!(16&(pi=es>>>16&255))){if(!(64&pi)){es=Xi[(65535&es)+(Jt&(1<>>=pi,Ui-=pi,(pi=GA-VA)>3,Jt&=(1<<(Ui-=ji<<3))-1,O.next_in=rA,O.next_out=GA,O.avail_in=rA>>24&255)+(_e>>>8&65280)+((65280&_e)<<8)+((255&_e)<<24)}function Jt(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new O.Buf16(320),this.work=new O.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function Ui(_e){var _t;return _e&&_e.state?(_t=_e.state,_e.total_in=_e.total_out=_t.total=0,_e.msg="",_t.wrap&&(_e.adler=1&_t.wrap),_t.mode=We,_t.last=0,_t.havedict=0,_t.dmax=32768,_t.head=null,_t.hold=0,_t.bits=0,_t.lencode=_t.lendyn=new O.Buf32(ot),_t.distcode=_t.distdyn=new O.Buf32(at),_t.sane=1,_t.back=-1,ee):Ee}function go(_e){var _t;return _e&&_e.state?((_t=_e.state).wsize=0,_t.whave=0,_t.wnext=0,Ui(_e)):Ee}function Xi(_e,_t){var FA,Xt;return _e&&_e.state?(Xt=_e.state,_t<0?(FA=0,_t=-_t):(FA=1+(_t>>4),_t<48&&(_t&=15)),_t&&(_t<8||15<_t)?Ee:(Xt.window!==null&&Xt.wbits!==_t&&(Xt.window=null),Xt.wrap=FA,Xt.wbits=_t,go(_e))):Ee}function Ei(_e,_t){var FA,Xt;return _e?(Xt=new Jt,(_e.state=Xt).window=null,(FA=Xi(_e,_t))!==ee&&(_e.state=null),FA):Ee}var Po,es,pi=!0;function ji(_e){if(pi){var _t;for(Po=new O.Buf32(512),es=new O.Buf32(32),_t=0;_t<144;)_e.lens[_t++]=8;for(;_t<256;)_e.lens[_t++]=9;for(;_t<280;)_e.lens[_t++]=7;for(;_t<288;)_e.lens[_t++]=8;for(DA(GA,_e.lens,0,288,Po,0,_e.work,{bits:9}),_t=0;_t<32;)_e.lens[_t++]=5;DA(VA,_e.lens,0,32,es,0,_e.work,{bits:5}),pi=!1}_e.lencode=Po,_e.lenbits=9,_e.distcode=es,_e.distbits=5}function Ws(_e,_t,FA,Xt){var En,Ai=_e.state;return Ai.window===null&&(Ai.wsize=1<=Ai.wsize?(O.arraySet(Ai.window,_t,FA-Ai.wsize,Ai.wsize,0),Ai.wnext=0,Ai.whave=Ai.wsize):(Xt<(En=Ai.wsize-Ai.wnext)&&(En=Xt),O.arraySet(Ai.window,_t,FA-Xt,En,Ai.wnext),(Xt-=En)?(O.arraySet(Ai.window,_t,FA-Xt,Xt,0),Ai.wnext=Xt,Ai.whave=Ai.wsize):(Ai.wnext+=En,Ai.wnext===Ai.wsize&&(Ai.wnext=0),Ai.whave>>8&255,FA.check=X(FA.check,Ne,2,0),Qt=ht=0,FA.mode=2;break}if(FA.flags=0,FA.head&&(FA.head.done=!1),!(1&FA.wrap)||(((255&ht)<<8)+(ht>>8))%31){_e.msg="incorrect header check",FA.mode=30;break}if((15&ht)!=8){_e.msg="unknown compression method",FA.mode=30;break}if(Qt-=4,yA=8+(15&(ht>>>=4)),FA.wbits===0)FA.wbits=yA;else if(yA>FA.wbits){_e.msg="invalid window size",FA.mode=30;break}FA.dmax=1<>8&1),512&FA.flags&&(Ne[0]=255&ht,Ne[1]=ht>>>8&255,FA.check=X(FA.check,Ne,2,0)),Qt=ht=0,FA.mode=3;case 3:for(;Qt<32;){if(vi===0)break A;vi--,ht+=Xt[Ai++]<>>8&255,Ne[2]=ht>>>16&255,Ne[3]=ht>>>24&255,FA.check=X(FA.check,Ne,4,0)),Qt=ht=0,FA.mode=4;case 4:for(;Qt<16;){if(vi===0)break A;vi--,ht+=Xt[Ai++]<>8),512&FA.flags&&(Ne[0]=255&ht,Ne[1]=ht>>>8&255,FA.check=X(FA.check,Ne,2,0)),Qt=ht=0,FA.mode=5;case 5:if(1024&FA.flags){for(;Qt<16;){if(vi===0)break A;vi--,ht+=Xt[Ai++]<>>8&255,FA.check=X(FA.check,Ne,2,0)),Qt=ht=0}else FA.head&&(FA.head.extra=null);FA.mode=6;case 6:if(1024&FA.flags&&(vi<(Wi=FA.length)&&(Wi=vi),Wi&&(FA.head&&(yA=FA.head.extra_len-FA.length,FA.head.extra||(FA.head.extra=new Array(FA.head.extra_len)),O.arraySet(FA.head.extra,Xt,Ai,Wi,yA)),512&FA.flags&&(FA.check=X(FA.check,Xt,Wi,Ai)),vi-=Wi,Ai+=Wi,FA.length-=Wi),FA.length))break A;FA.length=0,FA.mode=7;case 7:if(2048&FA.flags){if(vi===0)break A;for(Wi=0;yA=Xt[Ai+Wi++],FA.head&&yA&&FA.length<65536&&(FA.head.name+=String.fromCharCode(yA)),yA&&Wi>9&1,FA.head.done=!0),_e.adler=FA.check=0,FA.mode=12;break;case 10:for(;Qt<32;){if(vi===0)break A;vi--,ht+=Xt[Ai++]<>>=7&Qt,Qt-=7&Qt,FA.mode=27;break}for(;Qt<3;){if(vi===0)break A;vi--,ht+=Xt[Ai++]<>>=1)){case 0:FA.mode=14;break;case 1:if(ji(FA),FA.mode=20,_t!==6)break;ht>>>=2,Qt-=2;break A;case 2:FA.mode=17;break;case 3:_e.msg="invalid block type",FA.mode=30}ht>>>=2,Qt-=2;break;case 14:for(ht>>>=7&Qt,Qt-=7&Qt;Qt<32;){if(vi===0)break A;vi--,ht+=Xt[Ai++]<>>16^65535)){_e.msg="invalid stored block lengths",FA.mode=30;break}if(FA.length=65535&ht,Qt=ht=0,FA.mode=15,_t===6)break A;case 15:FA.mode=16;case 16:if(Wi=FA.length){if(vi>>=5,Qt-=5,FA.ndist=1+(31&ht),ht>>>=5,Qt-=5,FA.ncode=4+(15&ht),ht>>>=4,Qt-=4,286>>=3,Qt-=3}for(;FA.have<19;)FA.lens[ge[FA.have++]]=0;if(FA.lencode=FA.lendyn,FA.lenbits=7,zA={bits:FA.lenbits},NA=DA(0,FA.lens,0,19,FA.lencode,0,FA.work,zA),FA.lenbits=zA.bits,NA){_e.msg="invalid code lengths set",FA.mode=30;break}FA.have=0,FA.mode=19;case 19:for(;FA.have>>16&255,Qa=65535&le,!((is=le>>>24)<=Qt);){if(vi===0)break A;vi--,ht+=Xt[Ai++]<>>=is,Qt-=is,FA.lens[FA.have++]=Qa;else{if(Qa===16){for(we=is+2;Qt>>=is,Qt-=is,FA.have===0){_e.msg="invalid bit length repeat",FA.mode=30;break}yA=FA.lens[FA.have-1],Wi=3+(3&ht),ht>>>=2,Qt-=2}else if(Qa===17){for(we=is+3;Qt>>=is)),ht>>>=3,Qt-=3}else{for(we=is+7;Qt>>=is)),ht>>>=7,Qt-=7}if(FA.have+Wi>FA.nlen+FA.ndist){_e.msg="invalid bit length repeat",FA.mode=30;break}for(;Wi--;)FA.lens[FA.have++]=yA}}if(FA.mode===30)break;if(FA.lens[256]===0){_e.msg="invalid code -- missing end-of-block",FA.mode=30;break}if(FA.lenbits=9,zA={bits:FA.lenbits},NA=DA(GA,FA.lens,0,FA.nlen,FA.lencode,0,FA.work,zA),FA.lenbits=zA.bits,NA){_e.msg="invalid literal/lengths set",FA.mode=30;break}if(FA.distbits=6,FA.distcode=FA.distdyn,zA={bits:FA.distbits},NA=DA(VA,FA.lens,FA.nlen,FA.ndist,FA.distcode,0,FA.work,zA),FA.distbits=zA.bits,NA){_e.msg="invalid distances set",FA.mode=30;break}if(FA.mode=20,_t===6)break A;case 20:FA.mode=21;case 21:if(6<=vi&&258<=ho){_e.next_out=us,_e.avail_out=ho,_e.next_in=Ai,_e.avail_in=vi,FA.hold=ht,FA.bits=Qt,rA(_e,ks),us=_e.next_out,En=_e.output,ho=_e.avail_out,Ai=_e.next_in,Xt=_e.input,vi=_e.avail_in,ht=FA.hold,Qt=FA.bits,FA.mode===12&&(FA.back=-1);break}for(FA.back=0;ga=(le=FA.lencode[ht&(1<>>16&255,Qa=65535&le,!((is=le>>>24)<=Qt);){if(vi===0)break A;vi--,ht+=Xt[Ai++]<>ea)])>>>16&255,Qa=65535&le,!(ea+(is=le>>>24)<=Qt);){if(vi===0)break A;vi--,ht+=Xt[Ai++]<>>=ea,Qt-=ea,FA.back+=ea}if(ht>>>=is,Qt-=is,FA.back+=is,FA.length=Qa,ga===0){FA.mode=26;break}if(32&ga){FA.back=-1,FA.mode=12;break}if(64&ga){_e.msg="invalid literal/length code",FA.mode=30;break}FA.extra=15&ga,FA.mode=22;case 22:if(FA.extra){for(we=FA.extra;Qt>>=FA.extra,Qt-=FA.extra,FA.back+=FA.extra}FA.was=FA.length,FA.mode=23;case 23:for(;ga=(le=FA.distcode[ht&(1<>>16&255,Qa=65535&le,!((is=le>>>24)<=Qt);){if(vi===0)break A;vi--,ht+=Xt[Ai++]<>ea)])>>>16&255,Qa=65535&le,!(ea+(is=le>>>24)<=Qt);){if(vi===0)break A;vi--,ht+=Xt[Ai++]<>>=ea,Qt-=ea,FA.back+=ea}if(ht>>>=is,Qt-=is,FA.back+=is,64&ga){_e.msg="invalid distance code",FA.mode=30;break}FA.offset=Qa,FA.extra=15&ga,FA.mode=24;case 24:if(FA.extra){for(we=FA.extra;Qt>>=FA.extra,Qt-=FA.extra,FA.back+=FA.extra}if(FA.offset>FA.dmax){_e.msg="invalid distance too far back",FA.mode=30;break}FA.mode=25;case 25:if(ho===0)break A;if(Wi=ks-ho,FA.offset>Wi){if((Wi=FA.offset-Wi)>FA.whave&&FA.sane){_e.msg="invalid distance too far back",FA.mode=30;break}Wi>FA.wnext?(Wi-=FA.wnext,Hr=FA.wsize-Wi):Hr=FA.wnext-Wi,Wi>FA.length&&(Wi=FA.length),oc=FA.window}else oc=En,Hr=us-FA.offset,Wi=FA.length;for(hoPo?(pi=Hr[oc+at[_t]],ji=Qt[ug+at[_t]]):(pi=96,ji=0),Jt=1<<_e-us,FA=Ui=1<>us)+(Ui-=Jt)]=es<<24|pi<<16|ji,Ui!==0;);for(Jt=1<<_e-1;ht&Jt;)Jt>>=1;if(Jt!==0?(ht&=Jt-1,ht+=Jt):ht=0,_t++,--ks[_e]==0){if(_e===Xt)break;_e=VA[ee+at[_t]]}if(En<_e&&(ht&Xi)!==go){for(us===0&&(us=En),Ei+=FA,vi=1<<(Ai=_e-us);Ai+us{const rA=new Uint8Array(X).slice(4);let DA;try{DA=Ma.inflate(rA,{to:"string"})}catch(GA){console.error("inflate error",GA)}return DA})(p.data):function(X){const rA=new Uint8Array(X);let DA="",GA=0;const{length:VA}=rA;for(;GA0)for(let ot=0;ot{var N;const{uplinkData:O,canResend:z,resolve:X,reject:rA,timeout:DA}=B;if(z){this._pendingRequests.set(v,{resolve:X,reject:rA,timestamp:Date.now(),uplinkData:O,timeout:DA,canResend:z});const GA=this._isBinarySupported?Ga(O).buffer:O;(N=this._socketAdapter)===null||N===void 0||N.send(GA)}else this._pendingRequests.delete(v)})}_onConnect(p){const{socketId:B,event:v={}}=p||{};this._connectionId=B,this._connectionEstablishedTime=Date.now();const N=Date.now()-this._connectionStartTime,O=`${ct}.onConnect cost:${N} ms. socketID:${B} res:${JSON.stringify(v)}`;if(this._ssoLog({method:"onConnect",message:O}),this._checkPendingRequestsAndResend(),this._sendHeartbeatIfReady(),this._isReconnecting){const z=`${ct}.reconnect success`;this._ssoLog({method:"reconnectSuccess",message:z}),gn.emitInnerEvent(Pe.RECONNECTED),this._isReconnecting=!1}this._resetReconnectDelay(),this._handleConnectStateChange({state:Ki,shouldEmitEvent:!0,shouldAttemptReconnect:!1})}_sendAck(p){const B=Ea({servcmd:"openim.ws_msg_push_ack",data:{SessionData:p}});this.sendPacket(B)}_executeScheduledTaskIfReady(){return pA(this,void 0,void 0,function*(){this._clearTimeoutRequest(),this._sendHeartbeatIfReady()})}_canSendHeartbeat(){var p;return((p=this._socketAdapter)===null||p===void 0?void 0:p.isConnected())&&Date.now()>=this._nextHeartbeatAt&&!this._isHeartbeatInProgress}_sendHeartbeat(){return pA(this,void 0,void 0,function*(){var p;const B=Ea({servcmd:"heartbeat.alive",data:{}});try{const v=`${B.head.seq}${B.head.servcmd}`;yield this.sendPacket(B,{requestId:v,timeout:3e3})}catch(v){const N=(p=$i.get("netWorkMonitor"))===null||p===void 0?void 0:p.isNetworkOnline,O=`${ct}.sendHeartbeat failed. isNetWorkOnline:${N} error: ${en(v)}`;this._ssoLog({method:"sendHeartbeatError",message:O}),this._handleConnectStateChange({state:Mi,shouldEmitEvent:!0,shouldAttemptReconnect:!0})}})}_sendHeartbeatIfReady(){return pA(this,void 0,void 0,function*(){this._canSendHeartbeat()&&(this._isHeartbeatInProgress=!0,yield this._sendHeartbeat(),this._isHeartbeatInProgress=!1)})}_updateHeartbeatTime(){this._nextHeartbeatAt=To?Date.now()+5e3:Date.now()+1e4}_handleNetworkStatusChange(p){const B=`${ct}.networkStatusChange ${JSON.stringify(p)}`;this._ssoLog({method:"networkStatusChange",message:B});const{isNetworkOnline:v,networkType:N}=p;v&&N!=="none"?this._handleConnectStateChange({state:Ki,shouldEmitEvent:!1,shouldAttemptReconnect:!0,reason:Mg}):this._handleConnectStateChange({state:Mi,shouldEmitEvent:!1,shouldAttemptReconnect:!0,reason:Mg})}isPrivateNetWork(){const p=$i.get("instance")||{};return p.proxyServer&&!p.fileDownloadProxy}_handleConnectStateChange(p){const{state:B,shouldAttemptReconnect:v,shouldEmitEvent:N,reason:O}=p,z=`${ct}._handleConnectStateChange currentConnectState: ${this._currentConnectState} shouldAttemptReconnect: ${v} shouldEmitEvent: ${N} reason: ${O}`;this._currentConnectState!==B&&(this._ssoLog({method:"handleConnectStateChange",message:z}),N&&(Yt.info("_handleConnectStateChange",` from ${this._currentConnectState} to ${B}`),gn.emitOuterEvent("netStateChange",{name:"netStateChange",data:{state:B}}),this._currentConnectState=B,B===Mi&&gn.emitInnerEvent(Pe.SOCKET_DISCONNECTED)),v&&(this._resetReconnectDelay(),fn.addTask({id:Ji,intervalMs:this._intendedDelay,callback:this._scheduleReconnectWithBackoff,context:this})))}_handleActivityStatusChange(p){var B,v;const N=(v=(B=this._socketAdapter)===null||B===void 0?void 0:B._ws)===null||v===void 0?void 0:v.readyState,O=`${ct}.activityStatusChange ${JSON.stringify(p)} readyState: ${N}`;Yt.debug("activityStatusChange",O),N===3&&this._handleConnectStateChange({state:Mi,shouldEmitEvent:!0,shouldAttemptReconnect:!0,reason:sr})}_resetReconnectDelay(){var p;Yt.debug(`${ct}._resetReconnectDelay`),fn.removeTask(Ji);const B=(p=$i.get("activityMonitor"))===null||p===void 0?void 0:p.isActive;this._intendedDelay=B?zo:1e3}_scheduleReconnectWithBackoff(){var p;const B=(p=$i.get("activityMonitor"))===null||p===void 0?void 0:p.isActive;this._intendedDelay=B?Math.min(5e3,Math.max(zo,1.5*this._intendedDelay)):Math.min(3e5,Math.max(1e3,1.5*this._intendedDelay));const v=new Date().toTimeString().slice(0,8),N=`${ct}.scheduleReconnectWithBackoff timeStr: ${v} intendedDelay: ${this._intendedDelay}`;Yt.debug(N),this.reconnect(),fn.updateTaskInterval(Ji,this._intendedDelay)}_ssoLog(p){const{method:B,message:v}=p;Yt.info(B,v)}_diagnose(){this.isPrivateNetWork()||(this._lastDiagnoseAt=Date.now(),function(p){pA(this,void 0,void 0,function*(){const B=p.split("/")[2];if(!B.startsWith("ws"))return;const v=`https://${B}/v3/netcheck/getconninfo?${p.slice(p.indexOf("info?")+5)}&reqtime=${Date.now()}`;try{yield Pi({method:"GET",url:v,data:{}})}catch(N){Yt.warn("diagnoseBySSO",`diagnoseBySSO failed. error:${N.message}`)}})}(this._url),function(p){pA(this,void 0,void 0,function*(){const B=`https://boce-cdn.my-imcloud.com/v3/netcheck/getconninfo?${p.slice(p.indexOf("info?")+5)}&reqtime=${Date.now()}`;try{yield Pi({method:"GET",url:B,data:{}})}catch(v){Yt.warn(`diagnoseByCDN', 'diagnoseByCDN failed. error:${v.message}`)}})}(this._url),this._beforeSendInterceptors=[])}_clearTimeoutRequest(){for(const[p,B]of this._pendingRequests.entries()){const{reject:v,timestamp:N,timeout:O}=B;Date.now()-N>=O&&(this._pendingRequests.delete(p),Date.now()-this._lastDiagnoseAt>=3e4&&this._diagnose(),v({errorCode:Qr,errorInfo:"NETWORK_TIMEOUT",data:{requestId:p}}))}}_updateIsBinarySupported(){var p;if(!((p=$i.get("instance"))===null||p===void 0)&&p.devMode)return void(this._isBinarySupported=!1);const B=Es();if((gt||Et&&B==="windows"||Vs)&&(this._isBinarySupported=!1),To){const{uniRuntimeVersion:v=""}=oo.getSystemInfoSync();(function(N){const O=N.split(".").map(Number),[z=0,X=0,rA=0]=O;return z>2||!(z<2)&&(X>2||!(X<2)&&rA>=6)})(v)||(this._isBinarySupported=!1)}}_isCompressedData(p){const B=new Uint8Array(p);return B[0]===67&&B[1]===79&&B[2]===77&&B[3]===80}};const ye={init:function(p){$i.set("instance",p),vl.init()},destroy:function(){vl.dispose(),$i.clear(),fn.dispose()},notificationCenter:gn,channel:vl,store:$i,ssoLog:Yt,utils:yg,common:vA,constants:Mt},fe=p=>typeof p=="function";function vg(p,B,v){const N=v||[];if(!p||!B)return!1;const O=Object.keys(p).filter(X=>!N.includes(X)),z=Object.keys(B).filter(X=>!N.includes(X));return O.length===z.length&&O.every(X=>!!B.hasOwnProperty(X)&&(typeof p[X]=="object"&&p[X]!==null?vg(p[X],B[X],v):p[X]===B[X]))}var rg;(function(p){p.SDK_READY="sdkStateReady",p.SDK_NOT_READY="sdkStateNotReady",p.SDK_DESTROY="sdkDestroy",p.MESSAGE_RECEIVED="onMessageReceived",p.ROOM_CUSTOM_DATA_RECEIVED="onRoomCustomDataReceived",p.MESSAGE_MODIFIED="onMessageModified",p.MESSAGE_REVOKED="onMessageRevoked",p.MESSAGE_READ_BY_PEER="onMessageReadByPeer",p.MESSAGE_READ_RECEIPT_RECEIVED="onMessageReadReceiptReceived",p.MESSAGE_EXTENSIONS_UPDATED="onMessageExtensionsUpdated",p.MESSAGE_EXTENSIONS_DELETED="onMessageExtensionsDeleted",p.MESSAGE_REACTIONS_UPDATED="onMessageReactionsUpdated",p.CONVERSATION_LIST_UPDATED="onConversationListUpdated",p.TOTAL_UNREAD_MESSAGE_COUNT_UPDATED="onTotalUnreadMessageCountUpdated",p.CONVERSATION_GROUP_LIST_UPDATED="onConversationGroupListUpdated",p.CONVERSATION_IN_GROUP_UPDATED="onConversationInGroupUpdated",p.GROUP_LIST_UPDATED="onGroupListUpdated",p.GROUP_ATTRIBUTES_UPDATED="groupAttributesUpdated",p.GROUP_COUNTER_UPDATED="onGroupCounterUpdated",p.TOPIC_CREATED="onTopicCreated",p.TOPIC_DELETED="onTopicDeleted",p.TOPIC_UPDATED="onTopicUpdated",p.PROFILE_UPDATED="onProfileUpdated",p.USER_STATUS_UPDATED="onUserStatusUpdated",p.BLACKLIST_UPDATED="blacklistUpdated",p.FRIEND_LIST_UPDATED="onFriendListUpdated",p.FRIEND_GROUP_LIST_UPDATED="onFriendGroupListUpdated",p.FRIEND_APPLICATION_LIST_UPDATED="onFriendApplicationListUpdated",p.MY_FOLLOWERS_LIST_UPDATED="onMyFollowersListUpdated",p.MY_FOLLOWING_LIST_UPDATED="onMyFollowingListUpdated",p.MUTUAL_FOLLOWERS_LIST_UPDATED="onMutualFollowersListUpdated",p.KICKED_OUT="kickedOut",p.ERROR="error",p.NET_STATE_CHANGE="netStateChange",p.ALL_RECEIVE_MESSAGE_OPT_UPDATED="onAllReceiveMessageOptUpdated",p.SERVER_CONFIG_UPDATED="onServerConfigUpdated",p.PINNED_GROUP_MESSAGE_UPDATED="onPinnedGroupMessageUpdated",p.WEB_PUSH_MESSAGE_RECEIVED="onWebPushMessageReceived",p.GROUP_ONLINE_MEMBER_COUNT_CHANGED="onGroupOnlineMemberCountChanged",p.RICH_STATUS_CHANGED="onRichStatusChanged"})(rg||(rg={}));var Rg,Dn=rg;(function(p){p.LOGOUT="logout",p.DESTROY="destroy",p.CLOUD_CONFIG_UPDATE="cloud_config_update",p.PROFILE_UPDATE="profile_updated",p.ERROR="error",p.RECONNECTED="reconnected",p.FORCE_OFFLINE="im_open_status.stat_forceoffline",p.COMMERCIAL_CONFIG_PUSH="im_sdk_config_mgr.push_imsdk_purchase_bitsv2",p.OVERLOAD_PUSH="OverLoadPush.notify2",p.NEW_MESSAGE="new_message",p.MESSAGE_PUSH="im_open_push.msg_push",p.MESSAGE_DELETED="message_deleted",p.MESSAGE_REVOKED="message_revoked",p.MESSAGE_MODIFIED="message_modified",p.SOCKET_DISCONNECTED="socket_disconnected",p.CONVERSATION_UPDATED="conversation_updated",p.TOPIC_MESSAGE_DELETED="topic_message_deleted",p.TOPIC_MESSAGE_REVOKED="topic_message_revoked",p.TOPIC_MESSAGE_MODIFIED="topic_message_modified",p.TOPIC_NEW_MESSAGE="topic_new_message",p.QUALITY_STAT="quality_stat",p.SYNC_CONVERSATION_LIST="sync_conversation_list",p.HISTORY_MESSAGE_FETCHED="history_message_fetched"})(Rg||(Rg={}));var Dr,ui=Rg;(function(p){p.NEW_INVITATION_RECEIVED="newInvitationReceived",p.INVITEE_ACCEPTED="ts_invitee_accepted",p.INVITEE_REJECTED="ts_invitee_rejected",p.INVITATION_CANCELLED="ts_invitation_cancelled",p.INVITATION_TIMEOUT="ts_invitation_timeout",p.INVITATION_MODIFIED="ts_invitation_modified"})(Dr||(Dr={}));var no=Dr;const qc=Object.assign({},{KICKED_OUT_MULT_ACCOUNT:"multipleAccount",KICKED_OUT_MULT_DEVICE:"multipleDevice",KICKED_OUT_USERSIG_EXPIRED:"userSigExpired",KICKED_OUT_REST_API:"REST_API_Kick"}),zg={MSG_TEXT:"TIMTextElem",MSG_IMAGE:"TIMImageElem",MSG_AUDIO:"TIMSoundElem",MSG_FILE:"TIMFileElem",MSG_FACE:"TIMFaceElem",MSG_VIDEO:"TIMVideoFileElem",MSG_LOCATION:"TIMLocationElem",MSG_GRP_TIP:"TIMGroupTipElem",MSG_GRP_SYS_NOTICE:"TIMGroupSystemNoticeElem",MSG_CUSTOM:"TIMCustomElem",MSG_MERGER:"TIMRelayElem",MSG_STREAM:"TIMStreamElem"};var wg;(function(p){p.UNSENT="unSend",p.SUCCESS="success",p.FAIL="fail"})(wg||(wg={}));const Yr={modify:ui.MESSAGE_MODIFIED,delete:ui.MESSAGE_DELETED,revoke:ui.MESSAGE_REVOKED};var yc;(function(p){p[p.FORWARD=0]="FORWARD",p[p.BACKWARD=1]="BACKWARD"})(yc||(yc={}));const Kc=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},zg),{MSG_PRIORITY_HIGH:"High",MSG_PRIORITY_NORMAL:"Normal",MSG_PRIORITY_LOW:"Low",MSG_PRIORITY_LOWEST:"Lowest"}),{RECEIVE_WITH_OFFLINE_PUSH_EXCEPT_AT:"AcceptNotNotifyExceptAt",NOT_RECEIVE_OFFLINE_PUSH_EXCEPT_AT:"AcceptNotNotifyExceptAt",NOT_RECEIVE_MSG_EXCEPT_AT:"NotReceiveMsgExceptAt",MSG_AT_ALL:"__kImSDK_MesssageAtALL__"}),{MSG_REMIND_ACPT_AND_NOTE:"AcceptAndNotify",MSG_REMIND_ACPT_NOT_NOTE:"AcceptNotNotify",MSG_REMIND_DISCARD:"Discard"}),{MessageStatus:wg,Direction:yc}),ag={[Yr.modify]:ui.TOPIC_MESSAGE_MODIFIED,[Yr.delete]:ui.TOPIC_MESSAGE_DELETED,[Yr.revoke]:ui.TOPIC_MESSAGE_REVOKED},_u={GENDER_UNKNOWN:"Gender_Type_Unknown",GENDER_FEMALE:"Gender_Type_Female",GENDER_MALE:"Gender_Type_Male",USER_STATUS_UNKNOWN:0,USER_STATUS_ONLINE:1,USER_STATUS_OFFLINE:2,USER_STATUS_UNLOGINED:3,USER_NOT_FOUND:"@TLS#NOT_FOUND"},SE=Object.assign({},_u),_g={CONV_C2C:"C2C",CONV_GROUP:"GROUP",CONV_TOPIC:"TOPIC",CONV_SYSTEM:"@TIM#SYSTEM"},ka=Object.assign(Object.assign(Object.assign(Object.assign({},_g),{CONV_AT_ME:1,CONV_AT_ALL:2,CONV_AT_ALL_AT_ME:3}),{CONV_MARK_TYPE_STAR:1,CONV_MARK_TYPE_UNREAD:2,CONV_MARK_TYPE_FOLD:4,CONV_MARK_TYPE_HIDE:8}),{READ_ALL_C2C_MSG:"readAllC2CMessage",READ_ALL_GROUP_MSG:"readAllGroupMessage",READ_ALL_MSG:"readAllMessage"}),Dc=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},{SNS_TYPE_NO_RELATION:"CheckResult_Type_NoRelation",SNS_TYPE_A_WITH_B:"CheckResult_Type_AWithB",SNS_TYPE_B_WITH_A:"CheckResult_Type_BWithA",SNS_TYPE_BOTH_WAY:"CheckResult_Type_BothWay"}),{ALLOW_TYPE_ALLOW_ANY:"AllowType_Type_AllowAny",ALLOW_TYPE_NEED_CONFIRM:"AllowType_Type_NeedConfirm",ALLOW_TYPE_DENY_ANY:"AllowType_Type_DenyAny"}),{SNS_ADD_TYPE_SINGLE:"Add_Type_Single",SNS_ADD_TYPE_BOTH:"Add_Type_Both"}),{SNS_DELETE_TYPE_SINGLE:"Delete_Type_Single",SNS_DELETE_TYPE_BOTH:"Delete_Type_Both"}),{SNS_APPLICATION_TYPE_BOTH:"Pendency_Type_Both",SNS_APPLICATION_SENT_TO_ME:"Pendency_Type_ComeIn",SNS_APPLICATION_SENT_BY_ME:"Pendency_Type_SendOut",SNS_APPLICATION_AGREE:"Response_Action_Agree",SNS_APPLICATION_AGREE_AND_ADD:"Response_Action_AgreeAndAdd"}),{SNS_CHECK_TYPE_BOTH:"CheckResult_Type_Both",SNS_CHECK_TYPE_SINGLE:"CheckResult_Type_Single"}),{FORBID_TYPE_NONE:"AdminForbid_Type_None",FORBID_TYPE_SEND_OUT:"AdminForbid_Type_SendOut"}),ME={GRP_WORK:"Private",GRP_PUBLIC:"Public",GRP_MEETING:"ChatRoom",GRP_AVCHATROOM:"AVChatRoom",GRP_COMMUNITY:"Community",GRP_ROOM:"Room",GRP_LIVE:"Live"},La={COMMUNITY:"@TGS#_",TOPIC:"@TOPIC#_"},sa={JOINED:1,QUITTED:2,KICKED:3,ADMIN_SET:4,ADMIN_CANCELED:5,GROUP_PROFILE_UPDATED:6,GROUP_MEMBER_PROFILE_UPDATED:7,TOPIC_PROFILE_UPDATED:8},Tg=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},ME),{GRP_MBR_ROLE_OWNER:"Owner",GRP_MBR_ROLE_ADMIN:"Admin",GRP_MBR_ROLE_MEMBER:"Member",GRP_MBR_ROLE_CUSTOM:"Custom"}),{GRP_TIP_MBR_JOIN:1,GRP_TIP_MBR_QUIT:2,GRP_TIP_MBR_KICKED_OUT:3,GRP_TIP_MBR_SET_ADMIN:4,GRP_TIP_MBR_CANCELED_ADMIN:5,GRP_TIP_GRP_PROFILE_UPDATED:6,GRP_TIP_MBR_PROFILE_UPDATED:7,GRP_TIP_BAN_AVCHATROOM_MEMBER:10,GRP_TIP_UNBAN_AVCHATROOM_MEMBER:11}),{JOIN_OPTIONS_FREE_ACCESS:"FreeAccess",JOIN_OPTIONS_NEED_PERMISSION:"NeedPermission",JOIN_OPTIONS_DISABLE_APPLY:"DisableApply",JOIN_STATUS_SUCCESS:"JoinedSuccess",JOIN_STATUS_ALREADY_IN_GROUP:"AlreadyInGroup",JOIN_STATUS_WAIT_APPROVAL:"WaitAdminApproval"}),{INVITE_OPTIONS_DISABLE_INVITE:"DisableInvite",INVITE_OPTIONS_NEED_PERMISSION:"NeedPermission",INVITE_OPTIONS_FREE_ACCESS:"FreeAccess"}),{GRP_PROFILE_OWNER_ID:"ownerID",GRP_PROFILE_CREATE_TIME:"createTime",GRP_PROFILE_LAST_INFO_TIME:"lastInfoTime",GRP_PROFILE_MEMBER_NUM:"memberNum",GRP_PROFILE_MAX_MEMBER_NUM:"maxMemberNum",GRP_PROFILE_JOIN_OPTION:"joinOption",GRP_PROFILE_INVITE_OPTION:"inviteOption",GRP_PROFILE_INTRODUCTION:"introduction",GRP_PROFILE_NOTIFICATION:"notification",GRP_PROFILE_MUTE_ALL_MBRS:"muteAllMembers"}),{GROUP_ID_PREFIX:La,GROUP_TIPS_OPERATION_TYPE:sa}),gI={IOS_OFFLINE_PUSH_NO_SOUND:"push.no_sound",IOS_OFFLINE_PUSH_DEFAULT_SOUND:"default"},hs=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},qc),Kc),SE),ka),Dc),Tg),gI),{NET_STATE_CONNECTING:"connecting",NET_STATE_DISCONNECTED:"disconnected",NET_STATE_CONNECTED:"connected"}),Lo={NO_SDKAPPID:2e3,NO_TINYID:2022,NO_A2KEY:2023,USER_NOT_LOGGED_IN:2024,REPEAT_LOGIN:2025,MSG_SEND_FAIL:2100,MSG_SEND_FAIL_NOT_IN_AV:2101,MSG_SEND_GRP_WITH_TOPIC_FAIL:2115,MSG_INSTANCE_REQUIRED:2105,MSG_INVALID_CONV_TYPE:2106,MSG_REVOKE_FAIL:2110,MSG_DELETE_FAIL:2111,MSG_UNREAD_ALL_FAIL:2112,READ_RECEIPT_MSG_LIST_EMPTY:2114,CANNOT_DELETE_GRP_SYSTEM_NOTICE:2116,NOT_MY_FRIEND:2700,NETWORK_ERROR:2800,NETWORK_TIMEOUT:2801,NO_NETWORK:2805,UNCAUGHT_ERROR:2903,INVALID_OPERATION:2905,SDK_IS_NOT_READY:2999,LOGGING_IN:3e3,LOGIN_FAILED:3001,KICKED_OUT_MULT_DEVICE:3002,KICKED_OUT_MULT_ACCOUNT:3003,KICKED_OUT_USERSIG_EXPIRED:3004,LOGGED_OUT:3005,KICKED_OUT_REST_API:3006,NO_USE:3122,OPTIONS_IS_EMPTY:3153,MSG_A2KEY_EXPIRED:20002,ACCOUNT_A2KEY_EXPIRED:70001,HELLO_ANSWER_KICKED_OUT:1002,OPEN_SERVICE_OVERLOAD_ERROR:60022},da={BASIC:"1",STANDARD:"2",PROFESSIONAL:"3",NODE:"4"},nr={SYNC_SERVER_INFO_AFTER_RE_ONLINE:"sync-server-info-after-re-online",SYNC_SERVER_INFO_AFTER_LOGIN:"sync-server-info-after-login",RECEIVE_C2C_NEW_MESSAGE:"receive-c2c-new-message",RECEIVE_GROUP_NEW_MESSAGE:"receive-group-new-message",RECEIVE_GROUP_TIPS_NOTIFICATION:"receive-group-tips-notification"},Vt={USER_STATUS_UPDATE:"user-status-update",CONVERSATION_RECOVER:"conversation-recover",HISTORY_MESSAGE_RECOVER:"history-message-recover",BLACKLIST_RECOVER:"blacklist-recover",FRIEND_RECOVER:"friend-recover",GROUP_ATTRIBUTE_CACHE_CLEAR:"group-attribute-cache-clear",UNREAD_MESSAGE_RECOVER:"unread-message-recover",HANDLE_NEW_MESSAGE:"handle-new-message",HANDLE_CONVERSATION_PROFILE_UPDATED:"handle-conversation-profile-updated",COMMERCIAL_CONFIG_UPDATE:"commercial-config-update",UNREAD_MESSAGE_SYNC:"unread-message-sync",FRIEND_AND_BLACKLIST_SYNC:"friend-and-blacklist-sync",SIGNALING_MESSAGE_RECOVER:"signaling-message-recover",GROUP_LIST_SYNC:"group-list-sync",CONVERSATION_LIST_SYNC:"conversation-list-sync",USER_PROFILE_SYNC:"user-profile-sync",CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED:"conversation-update-after-unread-sync-finished",CONVERSATION_UPDATE_AFTER_GROUP_LIST_SYNC_FINISHED:"conversation-update-after-group-list-sync-finished",HANDLE_C2C_NEW_MESSAGE:"handle-c2c-new-message",HANDLE_GROUP_NEW_MESSAGE:"handle-group-new-message",CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE:"create-or-update-conversation-by-receive-new-message",HANDLE_GROUP_TIPS_FROM_SYNC_UNREAD:"handle-group-tips-from-sync-unread",HANDLE_C2C_REVOKED_MESSAGE_FROM_SYNC_UNREAD:"handle-c2c-revoked-message-from-sync-unread",GROUP_REVOKED_NOTICE_RECOVER:"group-revoked-notice-recover",CLOUD_CONFIG_SYNC:"cloud-config-sync",UPDATE_GROUP_NEXT_SEQUENCE:"update-group-next-sequence",EMIT_C2C_MESSAGE_EVENT:"emit-c2c-message-event",EMIT_GROUP_MESSAGE_EVENT:"emit-group-message-event",CONVERSATION_GROUP_LIST_SYNC:"conversation-group-list-sync",CONVERSATION_GROUP_UPDATE:"conversation-group-update",UPDATE_TOPIC_AFTER_UNREAD_SYNC_FINISHED:"update-topic-after-unread-sync-finished",UPDATE_TOPIC_BY_RECEIVE_NEW_MESSAGE:"update-topic-by-received-new-message",TOPIC_REQUEST_INFO_RESET:"topic-request-info-reset",QUALITY_REPORT:"quality-report",GROUP_TIPS_RECOVER:"group-tips-recover",HANDLE_GROUP_TIPS_NOTIFICATION:"handle-group-tips-notification",C2C_HISTORY_MESSAGE_RECOVER:"c2c-history-message-recover",FRIEND_APPLICATION_LIST_RECOVER:"friend-application-list-recover",EMIT_GROUP_TIPS_EVENT:"emit-group-tips-event",STREAM_MESSAGE_RECOVER:"stream-message-recover"},Kt={[nr.SYNC_SERVER_INFO_AFTER_RE_ONLINE]:[{stepId:Vt.USER_STATUS_UPDATE},{stepId:Vt.GROUP_ATTRIBUTE_CACHE_CLEAR},{stepId:Vt.UNREAD_MESSAGE_SYNC,dependency:Vt.C2C_HISTORY_MESSAGE_RECOVER},{stepId:Vt.CONVERSATION_RECOVER},{stepId:Vt.HISTORY_MESSAGE_RECOVER,dependency:Vt.CONVERSATION_RECOVER},{stepId:Vt.BLACKLIST_RECOVER},{stepId:Vt.FRIEND_RECOVER},{stepId:Vt.FRIEND_APPLICATION_LIST_RECOVER},{stepId:Vt.GROUP_REVOKED_NOTICE_RECOVER,dependency:Vt.HISTORY_MESSAGE_RECOVER},{stepId:Vt.GROUP_TIPS_RECOVER,dependency:Vt.HISTORY_MESSAGE_RECOVER},{stepId:Vt.TOPIC_REQUEST_INFO_RESET},{stepId:Vt.HANDLE_C2C_REVOKED_MESSAGE_FROM_SYNC_UNREAD,dependency:Vt.UNREAD_MESSAGE_SYNC},{stepId:Vt.HANDLE_GROUP_TIPS_FROM_SYNC_UNREAD,dependency:Vt.UNREAD_MESSAGE_SYNC},{stepId:Vt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,dependency:[Vt.UNREAD_MESSAGE_SYNC,Vt.CONVERSATION_RECOVER]},{stepId:Vt.EMIT_C2C_MESSAGE_EVENT,dependency:[Vt.UNREAD_MESSAGE_SYNC,Vt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED],skipIfDependencyMissing:!1},{stepId:Vt.C2C_HISTORY_MESSAGE_RECOVER,dependency:Vt.CONVERSATION_RECOVER},{stepId:Vt.STREAM_MESSAGE_RECOVER}],[nr.SYNC_SERVER_INFO_AFTER_LOGIN]:[{stepId:Vt.COMMERCIAL_CONFIG_UPDATE},{stepId:Vt.CLOUD_CONFIG_SYNC},{stepId:Vt.USER_PROFILE_SYNC},{stepId:Vt.UNREAD_MESSAGE_SYNC},{stepId:Vt.FRIEND_AND_BLACKLIST_SYNC},{stepId:Vt.GROUP_LIST_SYNC},{stepId:Vt.CONVERSATION_LIST_SYNC},{stepId:Vt.SIGNALING_MESSAGE_RECOVER,dependency:Vt.UNREAD_MESSAGE_SYNC},{stepId:Vt.UPDATE_TOPIC_AFTER_UNREAD_SYNC_FINISHED,dependency:[Vt.UNREAD_MESSAGE_SYNC]},{stepId:Vt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,dependency:[Vt.UNREAD_MESSAGE_SYNC,Vt.CONVERSATION_LIST_SYNC]},{stepId:Vt.CONVERSATION_UPDATE_AFTER_GROUP_LIST_SYNC_FINISHED,dependency:[Vt.GROUP_LIST_SYNC,Vt.CONVERSATION_LIST_SYNC]},{stepId:Vt.CONVERSATION_GROUP_LIST_SYNC},{stepId:Vt.CONVERSATION_GROUP_UPDATE,dependency:[Vt.CONVERSATION_LIST_SYNC,Vt.CONVERSATION_GROUP_LIST_SYNC]},{stepId:Vt.QUALITY_REPORT}],[nr.RECEIVE_C2C_NEW_MESSAGE]:[{stepId:Vt.HANDLE_C2C_NEW_MESSAGE},{stepId:Vt.UNREAD_MESSAGE_SYNC},{stepId:Vt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,dependency:Vt.HANDLE_C2C_NEW_MESSAGE},{stepId:Vt.EMIT_C2C_MESSAGE_EVENT,dependency:[Vt.HANDLE_C2C_NEW_MESSAGE,Vt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE],skipIfDependencyMissing:!1},{stepId:Vt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,dependency:[Vt.UNREAD_MESSAGE_SYNC]}],[nr.RECEIVE_GROUP_NEW_MESSAGE]:[{stepId:Vt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Vt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,dependency:Vt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Vt.UPDATE_GROUP_NEXT_SEQUENCE,dependency:Vt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Vt.UPDATE_TOPIC_BY_RECEIVE_NEW_MESSAGE,dependency:Vt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Vt.EMIT_GROUP_MESSAGE_EVENT,dependency:[Vt.HANDLE_GROUP_NEW_MESSAGE,Vt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE],skipIfDependencyMissing:!1}],[nr.RECEIVE_GROUP_TIPS_NOTIFICATION]:[{stepId:Vt.HANDLE_GROUP_TIPS_NOTIFICATION},{stepId:Vt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,dependency:Vt.HANDLE_GROUP_TIPS_NOTIFICATION},{stepId:Vt.EMIT_GROUP_TIPS_EVENT,dependency:[Vt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,Vt.HANDLE_GROUP_TIPS_NOTIFICATION],skipIfDependencyMissing:!1}]},Ng={MESSAGE_SEND_SUCCESS_RATE:"messageSendSuccessRate"},cI={TOTAL_COUNT:"sendMessageTotalCount",SUCCESS_COUNT:"sendMessageSuccessCount",FAILED_COUNT:"sendMessageFailedCount",SEND_COST:"sendMessageCost"},rr=["login","getMyProfile","getUserProfile","updateMyProfile","setSelfStatus","getUserStatus","subscribeUserStatus","unsubscribeUserStatus","modifyMessage","deleteGroupMember","dismissGroup","getGroupMemberList","getGroupOnlineMemberCount","joinGroup","markGroupMemberList","quitGroup","searchCloudMessages","searchCloudGroups","searchCloudGroupMembers","searchCloudUsers","getMyFollowingList","getMyFollowersList","getMutualFollowersList","followUser","unfollowUser","getUserFollowInfo","checkFollowType","getFriendProfile","addFriend","deleteFriend","updateFriend","checkFriend","setFriendApplicationRead","createFriendGroup","deleteFriendGroup","addToFriendGroup","removeFromFriendGroup","renameFriendGroup","changeGroupOwner","createGroup","dismissGroup","getGroupList","getGroupOnlineMemberCount","getGroupProfile","searchGroupByID","updateGroupProfile","handleGroupApplication","deleteGroupAttributes","getGroupAttributes","initGroupAttributes","setGroupAttributes","addGroupMember","deleteGroupMember","getGroupMemberList","getGroupMemberProfile","setGroupMemberMuteTime","setGroupMemberNameCard","setGroupMemberRole","deleteMessage","revokeMessage","setMessageExtensions","getMessageExtensions","deleteMessageExtensions","getMessageList","addMessageReaction","removeMessageReaction","clearHistoryMessage","sendMessageReadReceipt","getMessageReadReceiptList","getGroupMessageReadMemberList","createMergerMessage","invite","accept","cancel","reject","modifyInvitation","deleteConversation","pinConversation","setMessageRead","setAllMessageRead","getConversationList","getTotalUnreadMessageCount","renameConversationGroup","deleteConversationGroup","markConversation","setConversationCustomData","deleteConversationsFromGroup","addConversationsToGroup","createConversationGroup"];var qI=Object.freeze({__proto__:null,ERROR_CODE:Lo,InnerEvent:ui,NEED_LOG_API:rr,OuterConstant:hs,OuterEvent:Dn,PUSH:gI,QUALITY_METRICS:Ng,SDK_EDITION:da,SDK_INFO:{VERSION:"1.7.3",APPID:537048168},SEND_MESSAGE_STAT:cI,SignalingEvent:no,WEB_PUSH_ACCOUNT_TYPE:1,WORKFLOW_DEFINITIONS:Kt,WORKFLOW_NAME:nr,WORKFLOW_STEP:Vt}),za,na,un;(function(p){p[p.USER_INITIATED=0]="USER_INITIATED",p[p.KICKED_OUT=1]="KICKED_OUT"})(za||(za={})),function(p){p[p.multipleAccount=1]="multipleAccount",p[p.multipleDevice=2]="multipleDevice",p[p.restApi=3]="restApi"}(na||(na={})),function(p){p[p.multipleDevice=3002]="multipleDevice",p[p.multipleAccount=3003]="multipleAccount",p[p.usersigExpired=70001]="usersigExpired",p[p.restApi=20002]="restApi"}(un||(un={}));const Sn={[na.multipleAccount]:"multipleAccount",[na.multipleDevice]:"multipleDevice",[na.restApi]:"REST_API_Kick",[un.multipleAccount]:"multipleAccount",[un.multipleDevice]:"multipleDevice",[un.restApi]:"REST_API_Kick",[un.usersigExpired]:"userSigExpired"},Tu="login_online_presence_task",{ERROR:Gg,DESTROY:Ua,FORCE_OFFLINE:jc}=ui,{KICKED_OUT_MULT_ACCOUNT:KI,KICKED_OUT_MULT_DEVICE:vE,KICKED_OUT_REST_API:lI,ACCOUNT_A2KEY_EXPIRED:Nu,MSG_A2KEY_EXPIRED:Rl}=Lo;class Sc{init(){const{notificationCenter:B}=ye;B.subscribeInnerEvent(jc,this._handleForceOfflineFromServerPush,this),B.subscribeInnerEvent(Gg,Rl,this._handleForceOfflineFromResponse,this,this._isChatLoginEvent),B.subscribeInnerEvent(Gg,Nu,this._handleForceOfflineFromResponse,this,this._isChatLoginEvent),B.subscribeInnerEvent(Gg,KI,this._handleForceOfflineFromResponse,this),B.subscribeInnerEvent(Gg,vE,this._handleForceOfflineFromResponse,this),B.subscribeInnerEvent(Gg,lI,this._handleForceOfflineFromResponse,this),B.subscribeInnerEvent(Ua,this._dispose,this)}_handleForceOfflineFromServerPush(B){var v;if(((v=ye.store.get("login"))===null||v===void 0?void 0:v.isLoggedIn)===!0){const{EventArray:N=[]}=B?.body||{};this._extractKickedOutMessages(N).forEach(O=>{const{KickoutMsgNotify:{KickType:z,NewInstInfo:X,Instid:rA}}=O;this._isCurrentInstanceKickedOut(rA)&&this._processKickedOutReasonInfo({kickedOutReasonCode:z,newInstanceInfo:X})})}}_extractKickedOutMessages(B){return B.reduce((v,N)=>[...v,...N.C2cNotifyMsgArray||[]],[]).filter(v=>{var N;return this._isKickedOut((N=v?.KickoutMsgNotify)===null||N===void 0?void 0:N.KickType)})}_handleForceOfflineFromResponse(B){const{errorCode:v}=B;this._processKickedOutReasonInfo({kickedOutReasonCode:v})}_processKickedOutReasonInfo(B){return pA(this,void 0,void 0,function*(){const{kickedOutReasonCode:v}=B,{ssoLog:N,utils:{safeStringify:O}}=ye;try{this._logKickedOutEvent(B),this._shouldLogoutAfterKickedOut(v)?yield ye.login.loginAction.logout(za.KICKED_OUT):ye.login.loginAction.handleLogoutCompleted()}catch(z){N.debug("_processKickedOutReasonInfo",` fail ${O(z)}`)}finally{ye.notificationCenter.emitOuterEvent(Dn.KICKED_OUT,{data:{type:Sn[v]},name:Dn.KICKED_OUT})}})}_logKickedOutEvent(B){const{kickedOutReasonCode:v,newInstanceInfo:N={}}=B,O=`type:${Sn[v]} newInstanceInfo: ${JSON.stringify(N)}`;ye.ssoLog.warn("kickedOut",O)}_isKickedOut(B){return[na.multipleAccount,na.multipleDevice,na.restApi].includes(B)}_isChatLoginEvent(B){const{requestHead:v}=B||{};return v?.idtype!==1}_shouldLogoutAfterKickedOut(B){return![un.usersigExpired,na.restApi].includes(B)}_isCurrentInstanceKickedOut(B){const{isLoggedIn:v,statusInstanceId:N}=ye.store.get("login")||{};return v===!0&&B===N}_dispose(){const{notificationCenter:B}=ye;B.unSubscribeInnerEvent(jc,this._handleForceOfflineFromServerPush,this),B.unSubscribeInnerEvent(Gg,Nu,this._handleForceOfflineFromResponse,this),B.unSubscribeInnerEvent(Gg,Rl,this._handleForceOfflineFromResponse,this),B.unSubscribeInnerEvent(Gg,KI,this._handleForceOfflineFromResponse,this),B.unSubscribeInnerEvent(Gg,vE,this._handleForceOfflineFromResponse,this),B.unSubscribeInnerEvent(Gg,lI,this._handleForceOfflineFromResponse,this),B.unSubscribeInnerEvent(Ua,this._dispose,this)}}function Gu(p){return pA(this,void 0,void 0,function*(){const B="im_open_status.wslogin",v=ye.common.generateProtocolData({servcmd:B,data:{State:"Online",is_web_uniapp:0,InstType:0,CustomInfo:p}}),N=`${v.head.seq}${B}`,O=yield ye.channel.sendPacket(v,{timeout:9e4,requestId:N});if(O){const{HelloInterval:z,InstId:X,TinyId:rA,TimeStamp:DA,CustomStatus:GA,PurchaseBits:VA,A2Key:ee,RichMsgAuthKey:Ee,ErrorCode:We,ErrorInfo:ot,ActionStatus:at}=O;return{helloInterval:z,instanceID:X,tinyID:rA,timeStamp:DA,customStatus:GA,purchaseBits:VA,a2Key:ee,authKey:Ee,errorCode:We,errorInfo:ot,actionStatus:at}}})}function bu(){const{store:p}=ye;return ua(p.get("instance").sdkAppId)!==ut.CHINA}function wl(p){var B;try{const v=$i.getStorage("errorMessage");if(!p||!v)return"";const N=((B=JSON.parse(v))===null||B===void 0?void 0:B.errorMessage)||{},{code:O,replacement1:z="",replacement2:X=""}=p;if(!O)return"";const rA=bu()?`${O}_en`:`${O}_cn`;let DA=N[N[rA]?rA:O]||"";return DA&&(z&&(DA=DA.replace("$replacement1",z)),X&&(DA=DA.replace("$replacement2",X))),DA}catch(v){return console.warn("Error parsing stored error messages:",v),""}}class rs extends Error{constructor(B={}){B.code=B.code||B.errorCode;let{functionName:v="Unknown",code:N,message:O="",data:z="",moreMessage:X="",errorMessage:rA=""}=B;rA=(N?wl(B):"")||rA||O;let DA=N?`${v} failed. error: {"message": ${rA}, "code": ${N}}`:`${v} failed. error: {"message": ${rA}}`;DA=`${DA} ${X}`,super(),this.code=N,this.errorCode=N,this.errorMessage=rA,this.message=DA,this.data=z}}function gs(p,B){var v;if(p&&((v=ye.store.get("login"))===null||v===void 0?void 0:v.isLoggedIn)!==!0)throw new rs({code:Lo.USER_NOT_LOGGED_IN,functionName:B})}function ud(p,B,v){if(Array.isArray(p))for(let N=0;N{return GA===(VA=N,Object.prototype.toString.call(VA).match(/^\[object (.*)\]$/)[1].toLowerCase());var VA})){for(let VA=0;VA{const{interceptor:O,context:z}=N;O.apply(z,[v])})}(p)}function Sr(p,B){uI.push({interceptor:p,context:B})}function Mc(p){const{params:B,auth:v}=p;B&&typeof B=="object"&&Object.assign(Ed,B),v&&typeof v=="object"&&Object.assign(RE,v)}function Wc(p){return ye.store.get("commercialConfig").get(p)}class tn{constructor(){this._handlers=new Map,this._activeWorkflows=new Map,this._stepStartTimes=new Map,this._logHandlers={start:(B,v)=>{const N=Date.now();v?(this._stepStartTimes.set(`${B}-${v}`,N),ye.ssoLog.debug("_executeWorkflowStep",`[Workflow ${B}] Step ${v} started at ${new Date(N).toISOString()}`)):(this._workflowStartTimes.set(B,N),ye.ssoLog.debug("_executeWorkflowStep",`[Workflow ${B}] started at ${new Date(N).toISOString()}`))},success:(B,v)=>{const N=Date.now();if(v){const O=this._stepStartTimes.get(`${B}-${v}`),z=O?N-O:0;this._stepStartTimes.delete(`${B}-${v}`),ye.ssoLog.debug("_executeWorkflowStep",`[Workflow ${B}] Step ${v} completed successfully at ${new Date(N).toISOString()} (${z}ms)`)}else{const O=this._workflowStartTimes.get(B),z=O?N-O:0;this._workflowStartTimes.delete(B),ye.ssoLog.debug("_executeWorkflowStep",`[Workflow ${B}] completed successfully at ${new Date(N).toISOString()} (${z}ms)`)}},error:(B,v,N)=>{const{ssoLog:O,utils:{safeStringify:z}}=ye,X=Date.now();if(v){const rA=this._stepStartTimes.get(`${B}-${v}`),DA=rA?X-rA:0;this._stepStartTimes.delete(`${B}-${v}`),O.error("_executeWorkflowStep",`[Workflow ${B}] Step ${v} failed at ${new Date(X).toISOString()} (${DA}ms) ${z(N)}`,{error:N})}else{const rA=this._workflowStartTimes.get(B),DA=rA?X-rA:0;this._workflowStartTimes.delete(B),O.error("_executeWorkflowStep",`[Workflow ${B}] failed at ${new Date(X).toISOString()} (${DA}ms) ${z(N)}`,{error:N})}}}}static getInstance(){return tn._instance||(tn._instance=new tn),tn._instance}static setInstance(B){tn._instance=B}init(){this._initializeWorkflows()}registerWorkflowStep(B,v,N,O){if(!this._handlers.has(B))return void ye.ssoLog.debug("registerWorkflowStep",`Workflow '${B}' not defined in core`);if(!Kt[B].find(X=>X.stepId===v))return void ye.ssoLog.debug("registerWorkflowStep",`Step '${v}' not defined in workflow '${B}'`);const z=this._handlers.get(B);z.has(v)||z.set(v,O?N.bind(O):N)}executeWorkflow(B,v){return pA(this,void 0,void 0,function*(){if(!this._validateWorkflow(B))return;ye.ssoLog.debug("executeWorkflow",`[Workflow ${B}] Started execution at ${new Date().toISOString()}`);const N=Kt[B],O={},z={cancelled:!1};this._activeWorkflows.set(B,{cancelToken:z});try{const X=new Map;N.forEach(DA=>{X.set(DA.stepId,DA)});const rA={workflowName:B,pendingSteps:new Set(N.map(DA=>DA.stepId)),completedSteps:new Set,runningSteps:new Set,stepMap:X,stepResults:O,data:v,cancelToken:z};yield new Promise((DA,GA)=>{const VA=()=>{if(z.cancelled)return void DA();this._getExecutableSteps({pendingSteps:rA.pendingSteps,completedSteps:rA.completedSteps,stepMap:rA.stepMap,workflowName:B}).filter(ee=>!rA.runningSteps.has(ee)).forEach(ee=>{rA.completedSteps.has(ee)||rA.runningSteps.has(ee)||this._executeWorkflowStep(ee,rA,{onComplete:()=>{if(rA.pendingSteps.size===0)return void DA();this._getExecutableSteps({pendingSteps:rA.pendingSteps,completedSteps:rA.completedSteps,stepMap:rA.stepMap,workflowName:B}).filter(Ee=>!rA.runningSteps.has(Ee)).length===0&&rA.runningSteps.size===0&&(ye.ssoLog.debug("executeWorkflow",`Workflow ${B} completed with some steps skipped due to dependency failures`),DA())},onError:GA,onStepComplete:VA})})};VA()}),ye.ssoLog.debug("executeWorkflow",`[Workflow ${B}] Completed execution at ${new Date().toISOString()}`)}catch(X){ye.ssoLog.error("executeWorkflow",`[Workflow ${B}] Failed execution at ${new Date().toISOString()}`,{error:X})}finally{this._activeWorkflows.delete(B)}})}_executeWorkflowStep(B,v,N){return pA(this,void 0,void 0,function*(){const{workflowName:O,runningSteps:z,stepMap:X,stepResults:rA,data:DA}=v;z.add(B),this._logWorkflowExecution(O,B,"start");try{const GA=X.get(B);let VA=null;GA?.dependency&&(l(GA.dependency)?VA=rA[GA.dependency]:Array.isArray(GA.dependency)&&(VA={},GA.dependency.forEach(Ee=>{VA[Ee]=rA[Ee]})));const ee=this._handlers.get(O).get(B);if(ee){const Ee=yield Promise.resolve(ee({data:DA,result:VA}));rA[B]=Ee,this._logWorkflowExecution(O,B,"success")}v.completedSteps.add(B)}catch(GA){const VA=`[Workflow].${O}.${B}`,{errorCode:ee,errorInfo:Ee=`${VA} failed`}=GA||{},We=new rs({functionName:VA,code:ee,message:Ee});ye.ssoLog.error(VA,Ee,{error:We}),this._logWorkflowExecution(O,B,"error",GA),N.onError(GA)}finally{z.delete(B),v.pendingSteps.delete(B),N.onStepComplete(),N.onComplete()}})}reset(){this._cancelAllWorkflows()}destroy(){this.reset(),this._handlers.clear()}_initializeWorkflows(){Object.keys(Kt).forEach(B=>{this._handlers.has(B)||this._handlers.set(B,new Map)})}_cancelWorkFlow(B){const v=this._activeWorkflows.get(B);if(!v)return;const{cancelToken:N}=v;N.cancelled=!0,this._activeWorkflows.delete(B)}_cancelAllWorkflows(){Object.keys(Kt).forEach(B=>{this._cancelWorkFlow(B)})}_validateWorkflow(B){return Kt[B]?!!this._handlers.get(B):!1}_getExecutableSteps(B){const{pendingSteps:v,completedSteps:N,stepMap:O,workflowName:z}=B;return Array.from(v).filter(X=>{const rA=O.get(X)||{},{dependency:DA,skipIfDependencyMissing:GA=!0}=rA;if(!DA)return!0;if(l(DA))return this._isStepRegistered({workflowName:z,stepId:DA})?N.has(DA):!GA;if(h(DA)){if(DA.filter(VA=>!this._isStepRegistered({workflowName:z,stepId:VA})).length>0&&GA)return!1;for(const VA of DA)if(!N.has(VA))return!1;return!0}return!1})}_isStepRegistered(B){var v;const{workflowName:N,stepId:O}=B;return(v=this._handlers.get(N))===null||v===void 0?void 0:v.has(O)}_logWorkflowExecution(B,v,N,O){this._logHandlers[N](B,v)}}const ws=new Map,Ca=({type:p,groupID:B})=>p===hs.GRP_COMMUNITY||`${B}`.startsWith(La.COMMUNITY)&&!`${B}`.includes(La.TOPIC),Xr=(p="")=>{const B=p.startsWith("GROUP")?p.replace("GROUP",""):p;return B.startsWith(La.COMMUNITY)&&`${B}`.includes(La.TOPIC)},zc="openim",dd="million_group_open_http_svc";function Zg(p){return pA(this,void 0,void 0,function*(){const{servcmd:B,data:v}=function(z){const{data:X}=z;return gg(X)||wE(X)}(p)?function(z){let{servcmd:X,data:rA}=z;return wE(rA)?function(DA){const{servcmd:GA,data:VA}=DA;let{GroupId:ee=""}=VA;const Ee=ee;return[ee]=Ee.split(La.TOPIC),{servcmd:Xg(GA),data:Object.assign(Object.assign({},VA),{GroupId:ee,TopicId:Ee})}}(z):(gg(rA)&&(X=Xg(X)),{servcmd:X,data:rA})}(p):p,N=ye.common.generateProtocolData({servcmd:B,data:v}),O=`${N.head.seq}${B}`;return ye.channel.sendPacket(N,{requestId:O,timeout:p.timeout})})}function gg(p){const{Type:B,GroupId:v,GroupIdList:N=[]}=p,O=v||N[0]||"";return Ca({type:B,groupID:O})}function wE(p){const{GroupId:B=""}=p;return Xr(B)}function Xg(p){if(p.includes(zc))return p;const B=p.split(".")[1];return`${dd}.${B}`}function qn(){var p;return(p=ye.store.get("login"))===null||p===void 0?void 0:p.userId}const Ar=p=>h(p)||f(p),Fa=(p,B,v,N)=>{if(!Ar(p)||!Ar(B))return 0;let O=0;const z=Object.keys(B);let X;for(let rA=0,DA=z.length;rA{if(r(B))return"";if(p===hs.MSG_TEXT)return B.text||"";const v=ku[p];return v?lC(v):""},Zc=[{cmd:"ws_get_user_status",interval:5,count:20},{cmd:"ws_status_subscribe",interval:5,count:20},{cmd:"ws_status_unsubscribe",interval:5,count:20},{cmd:"get_group_self_member_info",interval:5,count:20},{cmd:"modify_group_base_info",interval:1,count:8},{cmd:"get_pendency",interval:1,count:15},{cmd:"set_group_attr",interval:5,count:10},{cmd:"modify_group_attr",interval:5,count:10},{cmd:"delete_group_attr",interval:5,count:10},{cmd:"clear_group_attr",interval:5,count:10},{cmd:"get_group_attr",interval:5,count:20},{cmd:"update_group_counter",interval:5,count:20},{cmd:"get_group_counter",interval:5,count:20},{cmd:"get_topic",interval:1,count:10},{cmd:"read_all_unread_msg",interval:1,count:1},{cmd:"query",interval:5,count:20}],Xc="im_sdk_config_mgr.fetch_config",WI="im_sdk_config_mgr.push_configv2",EI="cloud-config",$c=2996,Al=new class{init(p){this.core=p}};function va(p){return pA(this,void 0,void 0,function*(){const{sdkAppId:B}=Al.core.store.get("instance")||{},v=Al.core.helper.generateProtocolData({servcmd:Xc,data:{uint32_sdkappid:B,uint64_version:p}}),N=`${v.head.seq}${Xc}`;return Al.core.channel.sendPacket(v,{requestId:N})})}var bg=new class{constructor(){this._core=null,this._expirationTime=0,this._version=0,this._isFetching=!1,this._cmdFrequencyLimitMap=new Map,this._methodCallFrequencyMap=new Map}install(p){this._core=p;const{notificationCenter:B,InnerEvent:v,helper:N,constants:{WORKFLOW_NAME:O,WORKFLOW_STEP:z},channel:X}=p;B.subscribeInnerEvent(WI,this._handlePushedConfig,this),N.registerWorkflowStep(O.SYNC_SERVER_INFO_AFTER_LOGIN,z.CLOUD_CONFIG_SYNC,this._handleLoginSuccess,this),B.subscribeInnerEvent(v.LOGOUT,this._reset,this),B.subscribeInnerEvent(v.DESTROY,this._dispose,this),N.registerExperimentalAPI("getServerConfig",this),this._updateCmdFreqLimitMap(Zc),X.registerBeforeSendInterceptor(this.checkMethodCallOverLimit,this)}getServerConfig(p){return pA(this,void 0,void 0,function*(){var B;const v={code:0,data:""};return p&&(v.data=((B=this._core.store.get("cloudConfig"))===null||B===void 0?void 0:B[p])||""),v})}checkMethodCallOverLimit(p){if(!this._cmdFrequencyLimitMap.has(p))return;if(!this._methodCallFrequencyMap.has(p))return void this._methodCallFrequencyMap.set(p,{startTime:Date.now(),methodCallCounter:1});const{count:B,interval:v}=this._cmdFrequencyLimitMap.get(p);let{startTime:N,methodCallCounter:O}=this._methodCallFrequencyMap.get(p);if(Date.now()-N>1e3*v)this._methodCallFrequencyMap.set(p,{startTime:Date.now(),methodCallCounter:1});else if(O+=1,this._methodCallFrequencyMap.set(p,{startTime:N,methodCallCounter:O}),O>B)throw new this._core.helper.ChatError({code:$c,replacement1:p})}_handlePushedConfig(p){return pA(this,void 0,void 0,function*(){const{ssoLog:B,utils:{safeStringify:v}}=this._core;B.info("_handlePushedConfig",v(p)),yield this._updateCloudConfig(p)})}_handleLoginSuccess(){return pA(this,void 0,void 0,function*(){const{ssoLog:p,utils:{safeStringify:B}}=this._core;try{if(this._canFetch()){const v=yield va(this._version);p.info("_fetchCloudConfigIfLogin",B(v)),yield this._updateCloudConfig(v)}this._core.helper.taskScheduler.addTask({id:EI,intervalMs:1e3,callback:this._fetchCloudConfigIfReady,context:this})}catch(v){p.debug("_fetchCloudConfigIfLogin",B(v))}})}_fetchCloudConfigIfReady(){return pA(this,void 0,void 0,function*(){const{ssoLog:p,utils:{safeStringify:B}}=this._core;if(this._canFetch())try{const v=yield va(this._version);p.info("_fetchCloudConfigIfReady",B(v)),yield this._updateCloudConfig(v)}catch(v){p.error("_fetchCloudConfigIfReady",B(v))}})}_updateCloudConfig(p){return pA(this,void 0,void 0,function*(){const B=this._parseCloudConfig(p);B&&(this._core.store.set("cloudConfig",B),yield this._parseCmdFreqLimit(),this._core.notificationCenter.emitInnerEvent(this._core.InnerEvent.CLOUD_CONFIG_UPDATE,B),this._core.notificationCenter.emitOuterEvent(this._core.OuterEvent.SERVER_CONFIG_UPDATED,{name:this._core.OuterEvent.SERVER_CONFIG_UPDATED,data:{config:B}}))})}_canFetch(){const{isLoggedIn:p}=this._core.store.get("login")||{};return p&&!this._isFetching&&Date.now()>=this._expirationTime}_parseCloudConfig(p){const{int32_error_code:B,str_error_message:v,str_json_config:N,uint32_expired_time:O,uint32_sdkappid:z,uint64_version:X}=p;let rA=null;if(B===0){if(this._version!==X)try{rA=JSON.parse(N),this._version=X}catch{}this._expirationTime=Date.now()+1e3*O}else this._expirationTime=B===void 0?Date.now()+36e5:Date.now()+12e4;return rA}_parseCmdFreqLimit(){return pA(this,void 0,void 0,function*(){var p;let B=(p=yield this.getServerConfig("cmd_frequency_limit"))===null||p===void 0?void 0:p.data;const{isEmpty:v}=this._core.utils;if(!v(B))try{B=JSON.parse(B),this._updateCmdFreqLimitMap(B)}catch(N){console.warn(N)}})}_updateCmdFreqLimitMap(p){p.forEach(B=>{this._cmdFrequencyLimitMap.set(B.cmd,{interval:B.interval,count:B.count})})}_reset(){this._core.helper.taskScheduler.removeTask(EI),this._core.store.clear("cloudConfig"),this._updateCmdFreqLimitMap(Zc),this._methodCallFrequencyMap.clear(),this._expirationTime=0,this._version=0,this._isFetching=!1}_dispose(){const{notificationCenter:p,InnerEvent:B}=this._core;p.unSubscribeInnerEvent(WI,this._handlePushedConfig,this),p.unSubscribeInnerEvent(B.LOGOUT,this._reset,this),p.unSubscribeInnerEvent(B.DESTROY,this._dispose,this),this._reset()}};class ys{constructor(B=0,v=0){this.high=B,this.low=v}equal(B){return B!==null&&this.low===B.low&&this.high===B.high}toString(){const B=Number(this.high).toString(16);let v=Number(this.low).toString(16);if(v.length<8){let N=8-v.length;for(;N;)v=`0${v}`,N--}return B+v}}const Kn={SEARCH_GRP_SNS:new ys(0,Math.pow(2,1)).toString(),AV_HISTORY_MSG:new ys(0,Math.pow(2,2)).toString(),GRP_COMMUNITY:new ys(0,Math.pow(2,3)).toString(),MSG_TO_SPECIFIED_GRP_MBR:new ys(0,Math.pow(2,4)).toString(),AV_MBR_LIST:new ys(0,Math.pow(2,6)).toString(),USER_STATUS:new ys(0,Math.pow(2,7)).toString(),CONV_MARK:new ys(0,Math.pow(2,9)).toString(),CONV_GROUP:new ys(0,Math.pow(2,10)).toString(),AV_BAN_MBR:new ys(0,Math.pow(2,11)).toString(),MSG_EXT:new ys(0,Math.pow(2,13)).toString(),GRP_COUNTER:new ys(0,Math.pow(2,15)).toString(),PLUGIN_TRANSLATE:new ys(Math.pow(2,6)).toString(),PLUGIN_VOICE_TO_TEXT:new ys(Math.pow(2,7)).toString(),PLUGIN_CS:new ys(Math.pow(2,8)).toString(),PLUGIN_PUSH:new ys(Math.pow(2,9)).toString(),PLUGIN_BOT:new ys(Math.pow(2,10)).toString(),MSG_REACTION:new ys(Math.pow(2,16)).toString(),FOLLOW:new ys(Math.pow(2,20)).toString()},vc="CommercialConfig",zI="commercial-config";var ZI=new class{constructor(){this._core=null,this._expirationTime=0,this._isFetching=!1,this._featureMap=new Map,this._methodKeyMap=new Map,this._purchaseBits="0"}install(p){this._core=p;const{helper:B,notificationCenter:v,constants:{WORKFLOW_NAME:N,WORKFLOW_STEP:O,InnerEvent:z}}=p;v.subscribeInnerEvent(z.COMMERCIAL_CONFIG_PUSH,this._handlePushedConfig,this),v.subscribeInnerEvent(z.LOGOUT,this._handleLogout,this),v.subscribeInnerEvent(z.DESTROY,this._dispose,this),B.registerWorkflowStep(N.SYNC_SERVER_INFO_AFTER_LOGIN,O.COMMERCIAL_CONFIG_UPDATE,this._syncCommercialConfig,this),p.helper.registerExperimentalAPI("isCommercialAbilityEnabled",this),p.helper.registerExperimentalAPI("queryCommercialAbility",this)}isCommercialAbilityEnabled(p){return pA(this,void 0,void 0,function*(){const B=parseInt(p,10).toString(2),{length:v}=B;let N,O=!0;for(let z=v-1,X=0;z>=0;z--,X++)if(B.charAt(z)==="1"&&(N=X<32?new ys(0,2**X).toString():new ys(2**(X-32),0).toString(),!this._featureMap.get(N))){O=!1;break}return this._core.ssoLog.debug("isFeatureEnabled",`${vc}.isFeatureEnabled decimalNumber:${p} key:${N} ret:${O}`),{code:0,data:{enabled:O}}})}queryCommercialAbility(){return this._purchaseBits}_fetchAndParseCommercialConfig(){return pA(this,void 0,void 0,function*(){var p;const{ssoLog:B,utils:{safeStringify:v},common:{buildAndSendPacket:N}}=this._core;try{this._isFetching=!0;const O=yield N({servcmd:"im_sdk_config_mgr.fetch_imsdk_purchase_bitsv2",data:{uint32_sdkappid:(p=this._core.store.get("instance"))===null||p===void 0?void 0:p.sdkAppId}});O&&(this._parseCommercialConfig(O),this._core.store.set("commercialConfig",this._methodKeyMap))}catch(O){B.error("_fetchAndParseCommercialConfig",v(O))}finally{this._isFetching=!1}})}_syncCommercialConfig(p){return pA(this,void 0,void 0,function*(){const{purchaseBits:B}=p?.data||{};B&&(this._parsePurchaseBits(B),this._core.store.set("commercialConfig",this._methodKeyMap)),this._canFetch()&&(yield this._fetchAndParseCommercialConfig()),this._core.helper.taskScheduler.addTask({id:zI,intervalMs:1e3,callback:this._fetchCommercialConfigIfReady,context:this})})}_canFetch(){var p;const B=(p=this._core.store.get("login"))===null||p===void 0?void 0:p.isLoggedIn,v=Date.now()>=this._expirationTime;return B&&!this._isFetching&&v}_handlePushedConfig(p){p?.body&&(this._parseCommercialConfig(p.body),this._core.store.set("commercialConfig",this._methodKeyMap))}_fetchCommercialConfigIfReady(){return pA(this,void 0,void 0,function*(){this._canFetch()&&(yield this._fetchAndParseCommercialConfig())})}_parseCommercialConfig(p){const{ssoLog:B}=this._core;if(typeof p!="object")return;const{int32_error_code:v,str_error_message:N,str_purchase_bits:O,uint32_expired_time:z}=p;v===0?(this._parsePurchaseBits(O),this._expirationTime=Date.now()+1e3*z):v===void 0?(B.warn("_parseCommercialConfig",`${vc}._parseCommercialConfig failed. Invalid message format:`,p),this._expirationTime=Date.now()+36e5):(B.warn("_parseCommercialConfig",`${vc}._parseCommercialConfig errorCode:${v} errorMessage:${N}`),this._expirationTime=Date.now()+12e4)}_isValidPurchaseBits(p){return p&&typeof p=="string"&&p.length>=1&&p.length<=64&&/[01]{1,64}/.test(p)}_parsePurchaseBits(p){const{ssoLog:B,utils:{safeStringify:v}}=this._core;if(this._isValidPurchaseBits(p)){this._purchaseBits=p,this._featureMap.clear(),this._methodKeyMap.clear();let N=null;for(let O=p.length-1,z=0;O>=0;O--,z++)if(N=z<32?new ys(0,2**z).toString():new ys(2**(z-32),0).toString(),p[O]==="1"){this._featureMap.set(N,!0);const X=this._getKeyByValue(Kn,N);X&&this._methodKeyMap.set(X,!0)}else{this._featureMap.set(N,!1);const X=this._getKeyByValue(Kn,N);X&&this._methodKeyMap.set(X,!1)}}else B.warn("_parsePurchaseBits",`${vc}.parsePurchaseBits invalid purchases:${v(p)}`)}_getKeyByValue(p,B){const v=Object.entries(p).find(([N,O])=>O===B);return v?v[0]:void 0}_handleLogout(){this._reset()}_dispose(){this._reset(),this._core.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.COMMERCIAL_CONFIG_PUSH,this._handlePushedConfig,this),this._core.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.LOGOUT,this._reset,this),this._core.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.DESTROY,this._dispose,this)}_reset(){this._core.helper.taskScheduler.removeTask(zI),this._core.store.set("commercialConfig",{}),this._expirationTime=0,this._isFetching=!1,this._featureMap.clear(),this._purchaseBits="0"}},_E=new class{constructor(){this._core=null,this._serverOverloadInfoMap=new Map}install(p){this._core=p;const{notificationCenter:B,InnerEvent:v,channel:N}=this._core;B.subscribeInnerEvent(v.OVERLOAD_PUSH,this._handleOverLoadPush,this),B.subscribeInnerEvent(v.LOGOUT,this._reset,this),B.subscribeInnerEvent(v.DESTROY,this._dispose,this),N.registerBeforeSendInterceptor(this.checkServerOverload,this)}checkServerOverload(p){if(!this._serverOverloadInfoMap.has(p))return;const{overloadStartTimestamp:B,delaySeconds:v}=this._serverOverloadInfoMap.get(p);if(Date.now()-B<=1e3*v)throw new this._core.helper.ChatError({functionName:p,message:"service is busy, please try again later"});this._serverOverloadInfoMap.delete(p)}_handleOverLoadPush(p){const{OverLoadServCmd:B,DelaySecs:v}=p;this._serverOverloadInfoMap.set(B,{overloadStartTimestamp:Date.now(),delaySeconds:v})}_reset(){this._serverOverloadInfoMap.clear()}_dispose(){this._reset();const{notificationCenter:p,InnerEvent:B}=this._core;p.unSubscribeInnerEvent(B.OVERLOAD_PUSH,this._handleOverLoadPush,this),p.unSubscribeInnerEvent(B.LOGOUT,this._reset,this),p.unSubscribeInnerEvent(B.DESTROY,this._dispose,this)}},rh=new class{constructor(){this.name="ConfigCenter"}install(p){Al.init(p),bg.install(p),ZI.install(p),_E.install(p)}},IC=new class{constructor(){this.name="ErrorMessage",this._core=null}install(p){return pA(this,void 0,void 0,function*(){if(this._core=p,this._canFetch()){const B=yield this._fetchErrorMessage();if(!B)return;const v=this._parseResponse(B);this._saveErrorMessage(v)}})}_canFetch(){const p=this._core.store.getStorage("errorMessage");return!p||this._isExpired(p)}_saveErrorMessage(p){this._core.store.setStorage("errorMessage",{errorMessage:p,errorMessageSavedTime:new Date().getTime()})}_fetchErrorMessage(){return pA(this,void 0,void 0,function*(){try{return yield this._core.helper.httpRequest({method:"GET",url:"https://web.sdk.qcloud.com/im/download/error-message/v3/0.0.6/tim-error-message.txt"})}catch(p){console.error(p)}})}_isExpired(p){if(!p)return!0;const{errorMessageSavedTime:B}=p;return B&&new Date().getTime()-B>=6048e5}_parseResponse(p){if(typeof p=="string"){const B=p.split(`; -`),v={},N=new RegExp(/'/g);for(let O=0;O{var go,Xi,Ei;const Po=function(es,pi){const{From_Account:ji,From_AccountHeadurl:Ws,From_AccountNick:_e,IsNeedReadReceipt:_t,MsgBody:FA,MsgClientTime:Xt,MsgRandom:En,MsgSeq:Ai,MsgTimeStamp:us,SendMsgControl:vi,SupportMessageExtension:ho,To_Account:ht,TinyId:Qt,MsgCheckResult:ug,CloudCustomData:ks,IsPeerRead:Wi,MsgFlagBits:Hr,MsgVersion:oc,EventArray:is}=es;return{from:ji,avatar:Ws,nick:_e,needReadReceipt:_t===1,readReceiptSentByPeer:Wi,clientTime:Xt,messageFlagBits:Hr,random:En,sequence:Ai,time:us,messageControlInfo:vi,isSupportExtension:ho,to:ht,tinyID:Qt,checkResult:ug,cloudCustomData:ks,messageVersion:oc,eventArray:is,elements:pi.message.messageHelper.parseServerPushMessageElement(FA)}}(Ui,at);if(!((Ei=(Xi=(go=Ui?.EventArray)===null||go===void 0?void 0:go[0])===null||Xi===void 0?void 0:Xi.hasOwnProperty)===null||Ei===void 0)&&Ei.call(Xi,"C2cNotifyMsgArray"))Jt.push(...function(es){var pi;const ji=[];return(pi=es.EventArray)===null||pi===void 0||pi.forEach(Ws=>{var _e,_t;const{C2cNotifyMsgArray:FA}=Ws,Xt=(_t=(_e=FA?.[0])===null||_e===void 0?void 0:_e.WithdrawC2cMsgNotify)===null||_t===void 0?void 0:_t.C2cWithdrawInfoArray;Array.isArray(Xt)&&ji.push(...Xt)}),ji}(Ui));else{const es=at.message.messageFactory.createMessage(Object.assign(Object.assign({},Po),{conversationType:"C2C",flow:"in"})),{elements:pi}=Po;es.setElement(pi),Ut.push(es)}}),{unreadMessageList:Ut,revokedMessageList:Jt}}(DA.MsgList,B);return{syncFlag:DA?.SyncFlag,unreadMessageList:Ee,revokedMessageList:We,unreadCountList:GA,overflowUnreadCountList:VA,cookie:DA?.Cookie,groupTipList:ee}}catch(DA){console.warn(DA)}})}var el,kg;(function(p){p[p.START_SYNC=0]="START_SYNC",p[p.SYNCING=1]="SYNCING",p[p.SYNC_COMPLETE=2]="SYNC_COMPLETE"})(el||(el={})),function(p){p[p.LOGIN_SUCCESS=0]="LOGIN_SUCCESS",p[p.NEW_MESSAGE_RECEIVED=1]="NEW_MESSAGE_RECEIVED"}(kg||(kg={}));var ro=new class{constructor(){this.name="UnreadMessageSynchronizer",this._unreadDBMessageMap=new Map,this._cookie="",this._localConversationIDListBeforeDisconnect=[]}install(p){this._core=p;const{constants:B}=p;p.helper.registerWorkflowStep(B.WORKFLOW_NAME.SYNC_SERVER_INFO_AFTER_RE_ONLINE,B.WORKFLOW_STEP.UNREAD_MESSAGE_SYNC,this._syncUnreadDBMessageAfterReOnline,this),p.helper.registerWorkflowStep(B.WORKFLOW_NAME.RECEIVE_C2C_NEW_MESSAGE,B.WORKFLOW_STEP.UNREAD_MESSAGE_SYNC,this._syncUnreadDBMessageAfterNewMessageReceived,this),p.helper.registerWorkflowStep(B.WORKFLOW_NAME.SYNC_SERVER_INFO_AFTER_LOGIN,B.WORKFLOW_STEP.UNREAD_MESSAGE_SYNC,this._syncUnreadDBMessageAfterLogin,this),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.SOCKET_DISCONNECTED,this._handleDisconnect,this),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.LOGOUT,this._reset,this),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.DESTROY,this._dispose,this)}_syncUnreadMessage(p){return pA(this,void 0,void 0,function*(){const{isAfterReOnline:B=!1,isAfterNewMessageReceived:v=!1,isAfterLogin:N=!1}=p||{};let O=el.START_SYNC;const z=[],X=[],rA=[],DA=[];for(;this._canContinueSync({cookie:this._cookie,syncFlag:O});){const GA=yield this._fetchUnreadDBMessage({cookie:this._cookie,syncFlag:O,syncTriggerEvent:v?kg.NEW_MESSAGE_RECEIVED:kg.LOGIN_SUCCESS});if(!GA)break;const{unreadMessageList:VA=[],revokedMessageList:ee=[],overflowUnreadCountList:Ee,unreadCountList:We,groupTipList:ot}=GA;if(this._cookie=GA?.cookie||"",O=GA?.syncFlag,this._parseAndSaveUnreadMessageList(VA),rA.push(...ee),this._updateConversationUnreadOptions({unreadCountList:We,overflowUnreadCountList:Ee,conversationUpdateFieldList:z}),Array.isArray(ot)&&X.push(...ot),B){const{messages:at}=this._handleNewMessageList(VA);DA.push(...at)}}return B?{conversationUpdateFieldList:z,revokedMessageList:rA,unreadMessageMap:this._unreadDBMessageMap,groupTipList:X,messages:DA,isUnreadC2CMessage:!0}:{conversationUpdateFieldList:z,isInstantMessage:!N,isUnreadC2CMessage:!0,revokedMessageList:rA,unreadMessageMap:this._unreadDBMessageMap,groupTipList:X}})}_syncUnreadDBMessageAfterLogin(){return pA(this,void 0,void 0,function*(){return this._cookie="",this._syncUnreadMessage({isAfterLogin:!0})})}_syncUnreadDBMessageAfterNewMessageReceived(p){return pA(this,void 0,void 0,function*(){if(p.data.Flag===1)return this._syncUnreadMessage({isAfterNewMessageReceived:!0})})}_updateConversationUnreadOptions(p){const{unreadCountList:B,overflowUnreadCountList:v,conversationUpdateFieldList:N}=p,{constants:{OuterConstant:{CONV_C2C:O,CONV_SYSTEM:z}}}=this._core;B?.forEach(X=>{const{From_Account:rA,UnreadCount:DA}=X;if(rA!==z){const GA=N.find(({conversationID:VA})=>VA===`${O}${rA}`);GA?GA.unreadCount=DA:N.push({conversationID:`${O}${rA}`,unreadCount:DA,type:O})}}),v?.forEach(X=>{const{From_Account:rA,LastMsgTime:DA}=X;rA!==z&&(N.find(({conversationID:GA})=>GA===`${O}${rA}`)||N.push({conversationID:`${O}${rA}`,type:O,lastMsgTime:DA}))})}_syncUnreadDBMessageAfterReOnline(){return pA(this,void 0,void 0,function*(){return this._syncUnreadMessage({isAfterReOnline:!0})})}_updateMessageProfile(p){var B;const{messageDataHandler:v}=this._core.message||{},N=(B=this._core.store.get("login"))===null||B===void 0?void 0:B.userId,{from:O,nick:z,avatar:X,conversationID:rA=""}=p;if(O!==N){const DA=v.getLatestMsgSentByPeer(rA);if(DA){const{nick:GA,avatar:VA}=DA;z&&X?z===GA&&X===VA||v.updateNickAndAvatarOfSentMessage({conversationID:rA,latestNick:z,latestAvatar:X,isSentByMe:!1}):(p.nick=GA,p.avatar=VA)}}else{const DA=v.getLatestMsgSentByMe(rA);!DA||z===DA.nick&&X===DA.avatar||v.updateNickAndAvatarOfSentMessage({conversationID:rA,latestNick:z,latestAvatar:X,isSentByMe:!0})}}_handleNewMessageList(p){const{messageDataHandler:B}=this._core.message||{},v=new Map,N=[];return p.forEach(O=>{this._updateMessageProfile(O);let z=O.isModified===1;if(B.isMessageSentByCurrentInstance(O)?O.isModified=z:z=!1,O.isOnlineMessage())O._onlineOnlyFlag=!0,B.isMessageSentByCurrentInstance(O)||N.push(O);else if(this._shouldStoreUnreadMessage(O)){if(B.storeConversationMessage(O)){const{conversationID:X,conversationType:rA,conversationSubType:DA,flow:GA,_isExcludedFromUnreadCount:VA,_isExcludedFromLastMessage:ee}=O,Ee=ee?"":O;v.has(X)?(v.get(X).lastMessage=Ee,GA==="in"&&(VA||v.get(X).unreadCount++)):v.set(X,{conversationID:X,type:rA,subType:DA,unreadCount:VA||GA!=="in"?0:1,lastMessage:Ee})}B.isMessageSentByCurrentInstance(O)&&!z||N.push(O)}}),{messages:N,conversationOptions:v}}_shouldStoreUnreadMessage(p){var B;const{conversationID:v}=p,{message:N,appStore:O,utils:{isEmpty:z}}=this._core||{},X=Array.from(((B=O.conversationStore.getConversationMap())===null||B===void 0?void 0:B.keys())||[]),rA=this._getLocalLastMessageTime(v);return!N.messageDataHandler.isInMessageList(p)&&X.includes(v)&&this._localConversationIDListBeforeDisconnect.includes(v)&&!z(rA)}_fetchUnreadDBMessage(p){return pA(this,void 0,void 0,function*(){const{ssoLog:B,utils:{safeStringify:v}}=this._core;try{B.debug("_fetchUnreadDBMessage",`unread-message-synchronizer._fetchUnreadDBMessage options:${v(p)}`);const O=yield ah(p,this._core);if(!O)return null;const{syncFlag:z,unreadMessageList:X,revokedMessageList:rA,cookie:DA,unreadCountList:GA,overflowUnreadCountList:VA,groupTipList:ee}=O;return this._parseAndSaveUnreadMessageList(X),{syncFlag:z,cookie:DA,unreadMessageList:X,revokedMessageList:rA,unreadCountList:GA,overflowUnreadCountList:VA,groupTipList:ee}}catch(N){console.log(N)}})}_canContinueSync({cookie:p,syncFlag:B}){var v;return B===el.START_SYNC||B===el.SYNCING&&!(!((v=this._core)===null||v===void 0)&&v.helper.isEmpty(p))}_parseAndSaveUnreadMessageList(p){p.forEach(B=>{const{ID:v}=B;this._unreadDBMessageMap.set(v,B)})}_handleDisconnect(){var p;const{appStore:B}=this._core;this._localConversationIDListBeforeDisconnect=Array.from(((p=B.conversationStore.getConversationMap())===null||p===void 0?void 0:p.keys())||[])}_getLocalLastMessageTime(p){const{message:B}=this._core,v=B.messageDataHandler.getLocalMessageList(p),N=v[v.length-1];return N?.time}_reset(){this._cookie="",this._unreadDBMessageMap.clear()}_dispose(){var p,B;(p=this._core)===null||p===void 0||p.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.LOGOUT,this._reset,this),(B=this._core)===null||B===void 0||B.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.DESTROY,this._dispose,this),this._reset()}},uC=new class{init(p){var B;this._core=p,this._visibilityChangeHandler=this._handleVisibilityChange.bind(this),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.DESTROY,this._dispose,this),document?.addEventListener("visibilitychange",this._visibilityChangeHandler),(B=this._core)===null||B===void 0||B.store.set("activityMonitor",{isActive:!0})}_handleVisibilityChange(){var p,B;const v=document?.visibilityState==="visible";(p=this._core)===null||p===void 0||p.store.set("activityMonitor",{isActive:v}),(B=this._core)===null||B===void 0||B.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:v})}_reset(){var p;(p=this._core)===null||p===void 0||p.store.clear("activityMonitor")}_dispose(){document?.removeEventListener("visibilitychange",this._visibilityChangeHandler);const{notificationCenter:p,InnerEvent:B}=this._core;p.unSubscribeInnerEvent(B.DESTROY,this._dispose,this),this._reset()}},TE=new class{init(p){var B;this._core=p,this._bindAppActivityEvent(),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.DESTROY,this._dispose,this),(B=this._core)===null||B===void 0||B.store.set("activityMonitor",{isActive:!0})}_bindAppActivityEvent(){var p,B,v,N,O;const{MINI_APP_NAMESPACE:z,IN_TT_MINI_GAME:X,IN_WX_MINI_GAME:rA}=((p=this._core)===null||p===void 0?void 0:p.utils)||{};X||rA?((B=z?.onShow)===null||B===void 0||B.call(z,()=>{var DA,GA;(DA=this._core)===null||DA===void 0||DA.store.set("activityMonitor",{isActive:!0}),(GA=this._core)===null||GA===void 0||GA.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!0})}),(v=z?.onHide)===null||v===void 0||v.call(z,()=>{var DA,GA;(DA=this._core)===null||DA===void 0||DA.store.set("activityMonitor",{isActive:!1}),(GA=this._core)===null||GA===void 0||GA.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!1})})):((N=z?.onAppShow)===null||N===void 0||N.call(z,()=>{var DA,GA;(DA=this._core)===null||DA===void 0||DA.store.set("activityMonitor",{isActive:!0}),(GA=this._core)===null||GA===void 0||GA.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!0})}),(O=z?.onAppHide)===null||O===void 0||O.call(z,()=>{var DA,GA;(DA=this._core)===null||DA===void 0||DA.store.set("activityMonitor",{isActive:!1}),(GA=this._core)===null||GA===void 0||GA.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!1})}))}_reset(){var p;(p=this._core)===null||p===void 0||p.store.clear("activityMonitor")}_dispose(){const{notificationCenter:p,InnerEvent:B}=this._core;p.unSubscribeInnerEvent(B.DESTROY,this._dispose,this),this._reset()}},NE=new class{init(p){const{IN_MINI_APP:B,IN_WX_MINI_PLUGIN:v}=p.helper;v||(B?TE.init(p):uC.init(p))}};const hd="none",GE="online";var tl=new class{init(p){this._core=p,this._activateNetworkMonitoring(),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.DESTROY,this._dispose,this)}_activateNetworkMonitoring(){return pA(this,void 0,void 0,function*(){navigator.onLine?this._onOnline():this._onOffline(),this._onOnlineCallback=this._onOnline.bind(this),this._onOfflineCallback=this._onOffline.bind(this),window.addEventListener("online",this._onOnlineCallback),window.addEventListener("offline",this._onOfflineCallback)})}_deactivateNetworkMonitoring(){this._onOnlineCallback!==null&&(window.removeEventListener("online",this._onOnlineCallback),this._onOnlineCallback=null),this._onOfflineCallback!==null&&(window.removeEventListener("offline",this._onOfflineCallback),this._onOfflineCallback=null)}_onNetworkStatusChange(p){var B,v;const{isConnected:N,networkType:O}=p;(B=this._core)===null||B===void 0||B.store.set("netWorkMonitor",{isNetworkOnline:N,networkType:O}),(v=this._core)===null||v===void 0||v.notificationCenter.emitInnerEvent("networkStatusChange",{isNetworkOnline:N,networkType:O})}_onOnline(){this._onNetworkStatusChange({isConnected:!0,networkType:GE})}_onOffline(){this._onNetworkStatusChange({isConnected:!1,networkType:hd})}_reset(){var p;this._deactivateNetworkMonitoring(),(p=this._core)===null||p===void 0||p.store.clear("netWorkMonitor")}_dispose(){var p,B;(p=this._core)===null||p===void 0||p.notificationCenter.unSubscribeInnerEvent((B=this._core)===null||B===void 0?void 0:B.InnerEvent.DESTROY,this._dispose,this),this._reset()}},dI=new class{init(p){this._core=p,this._activateNetworkMonitoring(),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.DESTROY,this._dispose,this)}_activateNetworkMonitoring(){return pA(this,void 0,void 0,function*(){try{const{utils:{MINI_APP_NAMESPACE:p}}=this._core;this._mpNetworkStatusCallback=this._onNetworkStatusChange.bind(this),p.onNetworkStatusChange(this._onNetworkStatusChange.bind(this))}catch(p){console.error(p)}})}_deactivateNetworkMonitoring(){if(this._mpNetworkStatusCallback!==null){const{utils:{MINI_APP_NAMESPACE:p}}=this._core;p.offNetworkStatusChange&&p.offNetworkStatusChange(this._mpNetworkStatusCallback),this._mpNetworkStatusCallback=null}}_onNetworkStatusChange(p){var B,v;const{isConnected:N,networkType:O}=p;(B=this._core)===null||B===void 0||B.store.set("netWorkMonitor",{isNetworkOnline:N,networkType:O}),(v=this._core)===null||v===void 0||v.notificationCenter.emitInnerEvent("networkStatusChange",{isNetworkOnline:N,networkType:O})}_reset(){var p;this._deactivateNetworkMonitoring(),(p=this._core)===null||p===void 0||p.store.clear("netWorkMonitor")}_dispose(){var p,B;(p=this._core)===null||p===void 0||p.notificationCenter.unSubscribeInnerEvent((B=this._core)===null||B===void 0?void 0:B.InnerEvent.DESTROY,this._dispose,this),this._reset()}},Lu=new class{init(p){const{IN_MINI_APP:B}=p.utils;B?dI.init(p):tl.init(p)}},Uu=new class{constructor(){this.name="SystemStateMonitor"}install(p){NE.init(p),Lu.init(p)}};const EC=new Set(["tui_room_svr.*","callkit_records_svr.*","room_engine_srv.*","room_engine_http_srv.*","room_engine_mic.*","live_engine_srv.*","live_engine_http_srv.*","live_engine_pk.*","trtc_ai_service.*","call_engine_srv.*"]),wr="tui_room_svr.*";var cg=new class{constructor(){this.name="BusinessCommandTransfer",this._transferredCommands=EC}install(p){this._core=p;const{notificationCenter:B,InnerEvent:v,helper:N}=p;B.subscribeInnerEvent(v.CLOUD_CONFIG_UPDATE,this._onCloudConfigUpdate,this),B.subscribeInnerEvent(v.LOGOUT,this._reset,this),B.subscribeInnerEvent(v.DESTROY,this._dispose,this),B.subscribeInnerEvent("im_open_push.msg_push",B.InnerEventSubType.BUSINESS_COMMAND,this._onServerPushBusinessCommand,this),N.registerExperimentalAPI("sendTRTCCustomData",this,"transferBusinessCommand"),N.registerExperimentalAPI("sendRoomCustomData",this,"transferBusinessCommand")}transferBusinessCommand(p){return pA(this,void 0,void 0,function*(){const B="transferBusinessCommand";try{const{serviceCommand:v=wr}=p||{};if(!this._isValidTransferredCommand(v))throw new this._core.helper.ChatError({code:2995,functionName:B});return{code:0,data:(yield function(O,z){return pA(this,void 0,void 0,function*(){const{helper:X,channel:rA}=z,{serviceCommand:DA=wr,data:GA}=O||{};let VA={};try{VA=typeof GA=="string"?JSON.parse(GA):GA}catch(We){console.warn(We)}const ee=X.generateProtocolData({servcmd:DA,data:VA}),Ee=`${ee.head.seq}${DA}`;return rA.sendPacket(ee,{requestId:Ee,shouldRejectOnError:!1})})}(p,this._core))||{}}}catch(v){throw console.warn(v),new this._core.helper.ChatError({code:v?.errorCode,message:v?.errorInfo,data:{},functionName:B})}})}_onCloudConfigUpdate(p={}){try{if(typeof p.rtc_cmd!="string")return;const B=JSON.parse(p.rtc_cmd);Array.isArray(B)&&(this._transferredCommands=new Set([...this._transferredCommands,...B]))}catch(B){console.log(B)}}_isValidTransferredCommand(p=""){const B=`${p?.split(".")[0]}.*`;return this._transferredCommands.has(B)}_onServerPushBusinessCommand(p){const{OuterEvent:B,notificationCenter:v}=this._core,{MsgContent:N}=p||{},{ROOM_CUSTOM_DATA_RECEIVED:O}=B;v.emitOuterEvent(O,{name:O,data:N})}_reset(){this._transferredCommands=EC}_dispose(){const{notificationCenter:p,InnerEvent:B}=this._core;this._reset(),p.unSubscribeInnerEvent(B.CLOUD_CONFIG_UPDATE,this._onCloudConfigUpdate,this),p.unSubscribeInnerEvent(B.LOGOUT,this._reset,this),p.unSubscribeInnerEvent(B.DESTROY,this._dispose,this),p.unSubscribeInnerEvent("im_open_push.msg_push",p.InnerEventSubType.BUSINESS_COMMAND,this._onServerPushBusinessCommand,this)}};const Rc=new class{init(p){this.core=p}};function Fu(p){return pA(this,void 0,void 0,function*(){var B;const{message:v,user:N,appStore:O,constants:{OuterConstant:z}}=Rc.core,X=O.conversationStore.getConversationMap();if(X.has(p)){const DA=(B=X.get(p))===null||B===void 0?void 0:B.userProfile;if(DA&&p.startsWith(z.CONV_C2C)){const{avatar:GA,nick:VA}=DA;Rc.core.message.messageDataHandler.updateNickAndAvatarOfSentMessage({conversationID:p,latestAvatar:GA,latestNick:VA,isSentByMe:!1})}}const{data:rA}=(yield N.userProfile.getMyProfile())||{};if(rA){const{avatar:DA,nick:GA}=rA;v.messageDataHandler.updateNickAndAvatarOfSentMessage({conversationID:p,latestAvatar:DA,latestNick:GA,isSentByMe:!0})}})}function Tl(p){return pA(this,void 0,void 0,function*(){const B=p.map(v=>v.revoker);try{const v=yield function(N){return pA(this,void 0,void 0,function*(){var O,z;const X=yield(O=Rc.core.user.userProfile)===null||O===void 0?void 0:O.getUserProfile({userIDList:N});return X?.data?(z=X.data)===null||z===void 0?void 0:z.reduce((rA,{userID:DA,nick:GA,avatar:VA})=>(rA[DA]={nick:GA||"",avatar:VA||""},rA),{}):null})}(B);v&&p.forEach(N=>{const{revoker:O}=N;v[O]&&(N.revokerInfo.nick=v[O].nick||"",N.revokerInfo.avatar=v[O].avatar||"",N.revokerInfo.userID=O)})}catch(v){console.debug(v)}})}const Bd=1,$r=2,CI=20,_n=2500,dC=1,il=300;function Qd(p){return pA(this,void 0,void 0,function*(){var B,v;const{appStore:N,utils:{isEmpty:O},common:{getCurrentUserID:z},notificationCenter:X,OuterEvent:rA,OuterConstant:{CONV_C2C:DA}}=Rc.core,{messageList:GA,conversationID:VA}=p,ee=N.conversationStore.getConversationMap();let Ee=(B=ee.get(VA))===null||B===void 0?void 0:B.peerReadTime;if(!Ee){const ot=VA.replace(DA,""),at=yield function(Ut){return pA(this,void 0,void 0,function*(){const Jt={To_Account:Ut};return Rc.core.common.buildAndSendPacket({servcmd:"openim.get_peer_read_time",data:Jt})})}([ot]);if(at){const{ReadTime:Ut}=at;Ee=Ut?.[0],ee.has(VA)&&(ee.get(VA).peerReadTime=Ee)}}if(ee.has(VA)){const ot=(v=ee.get(VA))===null||v===void 0?void 0:v.lastMessage;O(ot)||ot.fromAccount===z()&&ot.lastTime<=Ee&&!ot.isPeerRead&&(ot.isPeerRead=!0,N.conversationStore.updateConversation(VA,{lastMessage:ot}))}const We=[];GA.forEach(ot=>{ot.time<=Ee&&!ot.isPeerRead&&ot.flow==="out"&&(ot.isPeerRead=!0,We.push(ot))}),We.length>0&&X.emitOuterEvent(rA.MESSAGE_READ_BY_PEER,{name:rA.MESSAGE_READ_BY_PEER,data:We})})}var hI=new class{init(p){this._core=p,p.helper.registerApi({apiName:"getMessageList",context:this}),p.helper.registerApi({apiName:"getMessageListHopping",context:this}),p.helper.registerApi({apiName:"clearHistoryMessage",context:this})}getMessageList(p){return pA(this,void 0,void 0,function*(){try{const{message:B,OuterConstant:{Direction:v,CONV_C2C:N,CONV_GROUP:O},InnerEvent:{HISTORY_MESSAGE_FETCHED:z},notificationCenter:X}=this._core,{conversationID:rA,nextReqMessageID:DA}=p,GA=CI;if(rA==="@TIM#SYSTEM")return{code:0,data:{messageList:[],isCompleted:!1,nextMessageSeq:""}};const VA=this._getAvailableLocalMessagesCount({conversationID:rA,nextReqMessageID:DA});if(this._needFetchHistoryMessageList({conversationID:rA,availableLocalMessagesCount:VA,targetCount:GA})){let ee=null;if(rA.startsWith(O)?ee=yield B.messageHistory.getGroupRoamingMessagesByAnchor({conversationID:rA,sequence:Number(DA),count:GA,direction:v.FORWARD,shouldMarkCompleted:!0}):rA.startsWith(N)&&(ee=yield B.messageHistory.getC2CRoamingMessagesByAnchor({conversationID:rA,messageID:DA,count:GA,direction:v.FORWARD,shouldMarkCompleted:!0})),ee){const{nextReqMessageIDFromServer:Ee,hasNoMoreHistoryMessage:We,messageList:ot}=ee,at=B.messageDataHandler.prependLocalMessageList({messageList:ot,conversationID:rA});(function(Xi){const{appStore:Ei,message:Po,OuterConstant:es}=Rc.core,pi=Ei.conversationStore.getConversation(Xi),ji=Po.messageDataHandler.getLocalMessageList(Xi);if(!pi||ji.length===0||Xi===es.CONV_SYSTEM)return;const Ws=[];for(let _t=0;_tFA.isRevoked).length;_e=Ws.length-pi.unreadCount-_t}else _e=Ws.length-pi.unreadCount;for(let _t=0;_t<_e&&!Ws[_t].isRead;_t++)Ws[_t].setIsRead(!0)})(rA),yield Fu(rA),rA.startsWith(N)&&(yield Qd({messageList:ot,conversationID:rA}));const Ut=this._core.message.messageDataHandler.getLocalMessageList(rA).slice(0,at.length+VA),Jt=Ut.filter(Xi=>Xi.isRevoked);yield Tl(Jt),X.emitInnerEvent(z,at);const Ui={nextReqMessageID:We?"":String(Ee),messageList:Ut,isCompleted:We},go=Ut.map(Xi=>Xi.sequence);return{code:0,data:Ui,successLog:{message:`conversationID: ${rA} nextReqMessageID: ${DA} availableLocalMessagesCount: ${VA} sequenceList: ${JSON.stringify(go)}`}}}return{code:0,data:{messageList:[],isCompleted:!1,nextReqMessageID:""}}}return{code:0,data:yield this._getMessageListFromMemory({conversationID:rA,nextReqMessageID:DA,count:GA}),successLog:{message:`conversationID: ${rA} nextReqMessageID: ${DA} availableLocalMessagesCount: ${VA}}`}}}catch(B){const{code:v,message:N}=B||{};throw new this._core.helper.ChatError({code:v,message:N,moreMessage:`options: ${this._core.utils.safeStringify(p)}`})}})}getMessageListHopping(p){return pA(this,void 0,void 0,function*(){var B,v;const{OuterConstant:{Direction:N,CONV_C2C:O,CONV_GROUP:z},utils:{safeStringify:X}}=this._core,{conversationID:rA,sequence:DA,time:GA,direction:VA=N.FORWARD}=p,{utils:{isEmpty:ee},message:Ee,notificationCenter:We,InnerEvent:{HISTORY_MESSAGE_FETCHED:ot}}=this._core;if(![N.BACKWARD,N.FORWARD].includes(VA))throw new this._core.helper.ChatError({message:"direction must be 0 or 1",moreMessage:`options: ${X(p)}`});let{count:at=CI}=p;at=at>CI?CI:at;let Ut=null;if(rA.startsWith(z)){if(Ut=yield Ee.messageHistory.getGroupRoamingMessagesByAnchor({conversationID:rA,sequence:DA,count:at,direction:VA}),Ut){const{nextReqMessageIDFromServer:Jt,hasNoMoreHistoryMessage:Ui,messageList:go,invisibleSequenceList:Xi}=Ut;if(this._core.message.messageDataHandler.storeSparseMessageList(go),We.emitInnerEvent(ot,go),VA===N.FORWARD){const Ei=Ui&&Jt<1;return{code:0,data:{messageList:go,isCompleted:Ei,nextMessageSeq:Ei?"":Jt}}}if(VA===N.BACKWARD){if(ee(go)&&ee(Xi))return{code:0,data:{messageList:[],isCompleted:!0,nextMessageSeq:""}};const Ei=((B=go?.[go.length-1])===null||B===void 0?void 0:B.sequence)||0,Po=((v=Xi?.[Xi.length-1])===null||v===void 0?void 0:v.sequence)||0;return{code:0,data:{messageList:go.filter(es=>es.sequence>=DA),isCompleted:!Ui,nextMessageSeq:Ui?Math.max(Ei,Po)+1:""}}}return{code:0,data:Ut}}}else if(rA.startsWith(O)&&(Ut=yield Ee.messageHistory.getC2CRoamingMessagesByAnchor({conversationID:rA,count:at+1,time:GA,direction:VA}),Ut)){const{messageList:Jt,lastMessageTime:Ui,hasNoMoreHistoryMessage:go}=Ut;return We.emitInnerEvent(ot,Jt),go||(VA===N.FORWARD?Jt.shift():Jt.pop()),Ee.messageDataHandler.storeSparseMessageList(Jt),yield Qd({messageList:Jt,conversationID:rA}),{code:0,data:{messageList:Jt,isCompleted:go,nextMessageTime:go?"":Ui}}}})}clearHistoryMessage(p){return pA(this,void 0,void 0,function*(){var B;const{appStore:v,common:{ChatError:N,getCurrentUserID:O},OuterConstant:{CONV_C2C:z,CONV_GROUP:X},apiMap:rA,message:DA}=this._core,GA=v.conversationStore.getConversation(p);if(!GA)throw new N({code:_n});const VA={fromAccount:O()},{type:ee}=GA;ee===z?(VA.type=Bd,VA.toAccount=p.replace(z,"")):ee===X&&(VA.type=$r,VA.toGroupID=p.replace(X,""));try{return yield(B=rA?.setMessageRead)===null||B===void 0?void 0:B.call(rA,{conversationID:p}),(yield function(We){return pA(this,void 0,void 0,function*(){const{fromAccount:ot,type:at,toAccount:Ut,toGroupID:Jt}=We,Ui={From_Account:ot,Type:at,To_Account:Ut,ToGroupid:Jt};return Rc.core.common.buildAndSendPacket({servcmd:"recentcontact.clear_msg",data:Ui})})}(VA))&&(DA.messageDataHandler.deleteConversationMessageList(p),DA.messageHistory.completedHistoryConversations.delete(p),DA.messageHistory.clearHistoryMessageListFetchAnchors(p),this._updateConversationLastMessage(p)),{code:0,data:{conversationID:p},successLog:{message:`convID:${p}`}}}catch(Ee){const{errorCode:We}=Ee;throw new this._core.helper.ChatError({functionName:"clearHistoryMessage",code:We,moreMessage:`convID:${p}`})}})}_updateConversationLastMessage(p){const{appStore:B}=this._core;B.conversationStore.updateConversation(p,{lastMessage:this._generateLastMessage()},{needSort:!0})}_getAvailableLocalMessagesCount({conversationID:p,nextReqMessageID:B}){const{OuterConstant:{CONV_C2C:v,CONV_GROUP:N}}=this._core,O=this._core.message.messageDataHandler.getLocalMessageList(p),{length:z}=O;if(!B)return z;let X=-1;return p?.startsWith(v)?X=O.findIndex(rA=>rA.ID===B):p?.startsWith(N)&&(X=O.findIndex(rA=>B.includes("-")?rA.ID===B:String(rA.sequence)===B)),X===-1?0:X}_needFetchHistoryMessageList({conversationID:p,availableLocalMessagesCount:B,targetCount:v}){const{message:N}=this._core;return BB.startsWith(O)?Ee.ID===v:String(Ee.sequence)===v),VA=ee>N?ee-N:0,DA=ee):VA=rA>N?rA-N:0,GA.messageList=X.slice(VA,ee),GA.isCompleted=DA<=N&&z.messageHistory.completedHistoryConversations.has(B),GA.isCompleted?GA.nextReqMessageID="":GA.nextReqMessageID=this._generateNextReqMessageID({conversationID:B,targetIndex:VA}),B.startsWith(O)&&(yield Fu(B),yield Qd({messageList:GA.messageList,conversationID:B})),GA})}_generateNextReqMessageID({conversationID:p,targetIndex:B}){const v=this._core.message.messageDataHandler.getLocalMessageList(p);return p.startsWith("C2C")?v[B].ID:String(v[B].sequence)}_generateLastMessage(){return{lastTime:0,lastSequence:0,fromAccount:"",messageForShow:"",payload:null,type:"",isRevoked:!1,cloudCustomData:"",onlineOnlyFlag:!1,nick:"",nameCard:"",version:0,isPeerRead:!1,revoker:null}}},Oa=new class{constructor(){this._lastMessageSequenceMapOnDisconnect=new Map,this._lastMessageTimeMapOnDisconnect=new Map}init(p){this._core=p;const{common:{workflowManager:B},constants:{WORKFLOW_NAME:v,WORKFLOW_STEP:N,InnerEvent:O}}=p;B.registerWorkflowStep(v.SYNC_SERVER_INFO_AFTER_RE_ONLINE,N.HISTORY_MESSAGE_RECOVER,this._syncGroupOfflineMessage,this),B.registerWorkflowStep(v.SYNC_SERVER_INFO_AFTER_RE_ONLINE,N.C2C_HISTORY_MESSAGE_RECOVER,this._syncC2COfflineMessage,this),p.notificationCenter.subscribeInnerEvent(O.SOCKET_DISCONNECTED,this._updateLastMessageSequenceMapOnDisconnect,this)}_syncGroupOfflineMessage(p){const{conversationList:B}=p?.result||{},{OuterConstant:v,utils:{isArray:N}}=this._core;if(N(B)){const O=B.filter(z=>z.type===v.CONV_GROUP&&z.groupProfile.type!==v.GRP_AVCHATROOM);return this._recoverGroupHistoryMessage(O)}}_recoverGroupHistoryMessage(p){return pA(this,void 0,void 0,function*(){const{OuterConstant:B}=this._core,v=[],N=[];return yield Promise.all(p?.map(O=>pA(this,void 0,void 0,function*(){const{groupProfile:{groupID:z}={},lastMessage:{lastSequence:X}={}}=O,rA=`${B.CONV_GROUP}${z}`;let DA=this._getLocalLastMessageSequence(rA);this._shouldRecoverHistory({localLastMessageSequence:DA,serverLastMessageSequence:X})&&(yield this._recoverGroupHistoryForConversation({conversationID:rA,localLastMessageSequence:DA,serverLastMessageSequence:X,groupTipList:N})),v.push(rA.replace(B.CONV_GROUP,""))}))),{recoverRevokeNoticeGroupIDList:v,groupTipList:N}})}_recoverGroupHistoryForConversation(p){return pA(this,arguments,void 0,function*({conversationID:B,localLastMessageSequence:v,serverLastMessageSequence:N,groupTipList:O}){try{const{utils:{isArray:z,isObject:X,isEmpty:rA},OuterEvent:DA,OuterConstant:GA,notificationCenter:VA,message:ee,appStore:Ee,common:{getMessagePreviewText:We,buildLastMessage:ot}}=this._core,at=N-v,Ut=Math.min(20,at),Jt={},Ui=yield ee.messageHistory.getGroupRoamingMessagesByAnchor({conversationID:B,sequence:v+Ut,direction:GA.Direction.FORWARD,count:Ut}),{nextReqMessageIDFromServer:go,hasNoMoreHistoryMessage:Xi,messageList:Ei,serverGroupTipList:Po}=Ui;z(Po)&&O.push(...Po);const es=Xi&&go<0,pi=[];if(z(Ei)&&(Ei.forEach(ji=>{ee.messageReceiver.groupMessageReceiver.updateMessageProfile(ji),ji.from===GA.CONV_SYSTEM&&(ji.isSystemMessage=!1),ee.messageDataHandler.storeConversationMessage(ji)&&!rA(ji.payload)&&(pi.push(ji),ji._isExcludedFromLastMessage||(Jt.lastMessage=ot(ji)))}),pi.length>0&&VA.emitOuterEvent(DA.MESSAGE_RECEIVED,{name:DA.MESSAGE_RECEIVED,data:pi})),!es&&Ei.length>0){const ji=Ei[Ei.length-1].sequence;yield this._recoverGroupHistoryForConversation({conversationID:B,localLastMessageSequence:ji,serverLastMessageSequence:N,groupTipList:O})}X(Jt.lastMessage)&&(Jt.lastMessage.messageForShow=We(Jt.lastMessage.type,Jt.lastMessage.payload),Ee.conversationStore.updateConversation(B,Jt))}catch(z){this._core.ssoLog.error("_recoverGroupHistoryForConversation",`Recovery failed for conversation:${B}`,{error:z})}})}_updateLastMessageSequenceMapOnDisconnect(){const{message:p}=this._core,B=p.messageDataHandler.getContinuousMessagesByConversation();for(const[v,N]of B){const O=Array.from(N.values());if(O?.length>0){const z=O[O.length-1];v.startsWith("C2C")?this._lastMessageTimeMapOnDisconnect.set(v,z.time):v.startsWith("GROUP")&&this._lastMessageSequenceMapOnDisconnect.set(v,z.sequence)}}}_getLocalLastMessageSequence(p){const{message:B}=this._core;if(this._lastMessageSequenceMapOnDisconnect.has(p))return this._lastMessageSequenceMapOnDisconnect.get(p);const v=B.messageDataHandler.getLocalMessageList(p),N=v[v.length-1];return N?.sequence}_shouldRecoverHistory(p){const{localLastMessageSequence:B,serverLastMessageSequence:v}=p;if(typeof B!="number"||typeof v!="number")return!1;const N=v-B;return v!==0&&B>0&&N>=dC&&N{z.type===v.CONV_C2C&&O.push(z)}),this._recoverC2CHistoryMessage(O)}}_recoverC2CHistoryMessage(p){return pA(this,void 0,void 0,function*(){yield Promise.all(p?.map(B=>pA(this,void 0,void 0,function*(){const{conversationID:v,lastMessage:{lastTime:N}={}}=B,O=this._getLocalLastMessageTime(v);this._shouldRecoverC2CHistory({localLastMessageTime:O,serverLastMessageTime:N})&&(yield this._recoverHistoryForC2CConversation({conversationID:v,localLastMessageTime:O,serverLastMessageTime:N}))})))})}_shouldRecoverC2CHistory(p){const{localLastMessageTime:B,serverLastMessageTime:v}=p,N=v-B;return B>0&&N>=1&&N<=600}_recoverHistoryForC2CConversation(p){return pA(this,void 0,void 0,function*(){var B;const{conversationID:v,localLastMessageTime:N,serverLastMessageTime:O}=p,{utils:{isArray:z,isObject:X,isEmpty:rA,safeStringify:DA},OuterEvent:GA,OuterConstant:VA,notificationCenter:ee,message:Ee,appStore:We,common:{getMessagePreviewText:ot,buildLastMessage:at}}=this._core;try{const Ut={},Jt=yield Ee.messageHistory.getC2CRoamingMessagesByAnchor({conversationID:v,direction:VA.Direction.BACKWARD,time:N,count:20});if(rA(Jt))return;const{hasNoMoreHistoryMessage:Ui,messageList:go}=Jt,Xi=[];z(go)&&(go.forEach(Po=>{Ee.messageDataHandler.storeConversationMessage(Po)&&!rA(Po.payload)&&(Xi.push(Po),Po._isExcludedFromLastMessage||(Ut.lastMessage=at(Po)))}),Xi.length>0&&ee.emitOuterEvent(GA.MESSAGE_RECEIVED,{name:GA.MESSAGE_RECEIVED,data:Xi}));const Ei=(B=go[go.length-1])===null||B===void 0?void 0:B.time;!Ui&&Ei>O&&(yield this._recoverHistoryForC2CConversation({conversationID:v,localLastMessageTime:Ei,serverLastMessageTime:O})),X(Ut.lastMessage)&&(Ut.lastMessage.messageForShow=ot(Ut.lastMessage.type,Ut.lastMessage.payload),We.conversationStore.updateConversation(v,Ut))}catch(Ut){this._core.ssoLog.error("_recoverHistoryForC2CConversation",`Recovery failed for conversation:${v} error: ${DA(Ut)}`)}})}_getLocalLastMessageTime(p){const{message:B}=this._core;if(this._lastMessageTimeMapOnDisconnect.has(p))return this._lastMessageTimeMapOnDisconnect.get(p);const v=B.messageDataHandler.getLocalMessageList(p),N=v[v.length-1];return N?.time}reset(){this._lastMessageSequenceMapOnDisconnect.clear(),this._lastMessageTimeMapOnDisconnect.clear()}dispose(){this.reset()}},CC=new class{constructor(){this.name="HistoryMessage"}install(p){this._core=p,Rc.init(p),hI.init(p),Oa.init(p),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.LOGOUT,this._reset,this),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.DESTROY,this.dispose,this)}dispose(){const{notificationCenter:p,InnerEvent:B}=this._core;p.unSubscribeInnerEvent(B.LOGOUT,this._reset,this),p.unSubscribeInnerEvent(B.DESTROY,this.dispose,this),Oa.dispose()}_reset(){Oa.reset()}},Pa=new class{init(p){this.core=p}},ur=new class{constructor(){this._reportedAtomicStoreIDs=new Set}init(p){const{helper:{registerExperimentalAPI:B}}=p;this._core=p,B("reportModalView",this),B("reportTUIFeatureUsage",this),B("reportRoomEngineEvent",this)}reportModalView(p){const{ssoLog:B,utils:{safeStringify:v,isString:N}}=this._core;try{if(!N(p))throw new Error("reportModalView data is not a string");B.createSSOLogData({method:"reportModalView",message:p,eventType:30}).end(!0)}catch(O){B.debug(`reportModalView Report failed: ${v(O)}`)}}reportTUIFeatureUsage(p){const{ssoLog:B,utils:{safeStringify:v,isEmpty:N}}=this._core,{atomicStoreID:O}=p;try{N(O)||this._reportedAtomicStoreIDs.has(O)||(this._core.ssoLog.info("reportTUIFeatureUsage",`atomicStoreID: ${p.atomicStoreID}`,{method:"reportTUIFeatureUsage",eventType:31,code:O}),this._reportedAtomicStoreIDs.add(O))}catch(z){B.debug(`reportTUIFeatureUsage Report failed: ${v(z)}`)}}reportRoomEngineEvent(p){const{utils:{safeStringify:B},ssoLog:v}=this._core;try{v.debug(`reportRoomEngineEvent Report: ${B(p)}`);const{eventId:N,eventCode:O,eventResult:z,eventMessage:X,moreMessage:rA,extensionMessage:DA}=p;v.createSSOLogData({method:DA,code:N,message:X,eventType:30,costTime:O,uiPlatform:z,moreMessage:rA}).end(!0)}catch(N){v.debug(`reportRoomEngineEvent Report failed: ${B(N)}`)}}reset(){this._reportedAtomicStoreIDs.clear()}dispose(){this.reset()}},pd=new class{constructor(){this.name="DataReport"}install(p){this._core=p;const{notificationCenter:B,InnerEvent:{LOGOUT:v,DESTROY:N}}=p;Pa.init(p),ur.init(p),B.subscribeInnerEvent(v,this._reset,this),B.subscribeInnerEvent(N,this._dispose,this)}_reset(){ur.reset()}_dispose(){const{notificationCenter:p,InnerEvent:{LOGOUT:B,DESTROY:v}}=this._core;p.unSubscribeInnerEvent(B,this._reset,this),p.unSubscribeInnerEvent(v,this._dispose,this),ur.dispose()}};let Ou=da.STANDARD,Er=[];Ou=da.BASIC,Er=[IC,rh,ro,Uu,cg,CC,pd];function wc(p,B){const{operationType:v,memberInfoList:N,operatorInfo:O}=p||{};let z={};if(Rs(N)?Rs(O)||(z=O):v!==sa.JOINED&&v!==sa.KICKED&&v!==sa.ADMIN_SET&&v!==sa.ADMIN_CANCELED||(z=Object.assign({},N[0])),!Rs(z)){const{nick:X="",avatar:rA=""}=z;B.nick=X,B.avatar=rA}}const ol=p=>({lastTime:p?.time||p?.lastTime||0,lastSequence:p?.sequence||p?.lastSequence||0,fromAccount:p?.from||p?.fromAccount||"",messageForShow:jI(p?.type,p?.payload),payload:p?.payload||null,type:p?.type||"",isRevoked:p?.isRevoked||!1,cloudCustomData:p?.cloudCustomData||"",onlineOnlyFlag:p?._onlineOnlyFlag||!1,nick:p?.nick||"",nameCard:p?.nameCard||"",version:p?.version||0,isPeerRead:p?.isPeerRead||!1,revoker:p?.revoker||null});var Lg=Object.freeze({__proto__:null,ChatError:rs,WorkflowManager:tn,buildAndSendPacket:Zg,buildLastMessage:ol,get builtInPlugins(){return Er},checkBusinessCapabilityBits:Wc,deepMerge:Fa,getCurrentUserID:qn,getErrorMessage:wl,getMessagePreviewText:jI,isC2CConv:p=>l(p)&&p.slice(0,3)===_g.CONV_C2C,isCommunity:Ca,isGroupConv:p=>l(p)&&p.slice(0,5)===_g.CONV_GROUP,isInternational:bu,isTopic:Xr,isUnlimitedAVChatRoom:function(){var p;return!!(!((p=ye.store.get("instance"))===null||p===void 0)&&p.unlimitedAVChatRoom)},liteChatInstanceMap:ws,registerInterceptor:Sr,registerValidateConfig:Mc,requireAuth:gs,get sdkEdition(){return Ou},setGroupTipsUserInfo:wc,t:lC,updateGroupAtInfo:(p,B)=>{const{CONV_AT_ME:v,CONV_AT_ALL:N,CONV_AT_ALL_AT_ME:O}=hs;if(function(rA,DA){const{CONV_AT_ME:GA,CONV_AT_ALL:VA,CONV_AT_ALL_AT_ME:ee}=hs,{groupID:Ee,sequence:We}=rA;let ot=!1;return Ca({groupID:Ee})&&DA.forEach(at=>{at.messageSequence===We&&(at.atTypeArray.includes(GA)&&rA.groupAtType.includes(VA)&&(at.atTypeArray=[ee]),at.atTypeArray.includes(VA)&&rA.groupAtType.includes(GA)&&(at.atTypeArray=[ee],at.__random=rA.__random,at.__sequence=rA.__sequence),ot=!0)}),ot}(p,B))return;let z=[...p.groupAtType];z.includes(v)&&z.includes(N)&&(z=[O]);const X={from:p.from,groupID:p.groupID,topicID:p.topicID,messageSequence:p.sequence,atTypeArray:z,__random:p.__random,__sequence:p.__sequence};B.push(X)},validateAndExecute:_l,validateParameters:ud});class Oo{constructor(){this._builtInPlugins=new Set,this._externalPlugins=new Set}static getInstance(){return Oo._instance||(Oo._instance=new Oo),Oo._instance}static setInstance(B){Oo._instance=B}installBuiltInPlugin(B){B&&this._installPlugin(B,this._builtInPlugins)}installExternalPlugin(B){B&&this._installPlugin(B,this._externalPlugins)}clear(){this._builtInPlugins=new Set,this._externalPlugins=new Set}_installPlugin(B,v){let N=[];N=h(B)?B:[B];const O=N.findIndex(X=>X?.name==="AVChatRoom"),z=O>-1?N.splice(O,1):[];N.forEach(X=>{this._isPluginInstalled(X.name)||(X&&fe(X.install)?(v.add(X.name),fe(X.getInstalledSubPlugins)?(z?.forEach(rA=>v.add(rA?.name)),X.install(js.getInstance().exposeApiForPlugin(),z)):X.install(js.getInstance().exposeApiForPlugin()),fe(X.handleLoginSuccess)&&this._isLoggedIn()&&X.handleLoginSuccess()):fe(X)?(v.add(X.name),X(js.getInstance().exposeApiForPlugin()),fe(X.handleLoginSuccess)&&this._isLoggedIn()&&X.handleLoginSuccess()):console.warn('A plugin must either be a function or an object with an "install" function.'))})}_isPluginInstalled(B){return this._builtInPlugins.has(B)||this._externalPlugins.has(B)}_isLoggedIn(){var B;return((B=ye.store.get("login"))===null||B===void 0?void 0:B.isLoggedIn)===!0}}var $g=new class{constructor(){this._conversationMap=new Map}getConversationMap(){return this._conversationMap}getConversation(p){return this._conversationMap.get(p)}updateConversation(p,B,v){const{emit:N=!0,needSort:O=!1}=v||{},z=this._conversationMap.get(p);z&&!Rs(B)&&(Object.keys(B).forEach(X=>{z[X]=B[X]}),N&&ye.notificationCenter.emitInnerEvent(ui.CONVERSATION_UPDATED,{needSort:O}))}deleteConversation(p){this._conversationMap.has(p)&&(this._conversationMap.delete(p),ye.notificationCenter.emitInnerEvent(ui.CONVERSATION_UPDATED))}},Za=new class{constructor(){this._groupMap=new Map}getGroupMap(){return this._groupMap}getGroup(p){return this._groupMap.get(p)}updateGroup(p,B){const v=this._groupMap.get(p);v&&!Rs(B)&&Object.keys(B).forEach(N=>{v[N]=B[N]})}},Nl=new class{constructor(){this._messagesByConversation=new Map}updateMessage(p,B,v){var N;const{operation:O,updateUnreadCount:z=!0}=v,X=Do(v,["operation","updateUnreadCount"]),rA=[];for(const DA of B){const GA=(N=this._messagesByConversation.get(p))===null||N===void 0?void 0:N.get(DA);if(!GA)return!1;Object.keys(X).forEach(VA=>{GA[VA]=X[VA]}),rA.push(GA)}return this._emitMessageStoreOperationEvent(O,{conversationID:p,messageList:rA,updateUnreadCount:z}),rA}getMessagesByConversation(p){var B;return[...((B=this._messagesByConversation.get(p))===null||B===void 0?void 0:B.values())||[]]}getMessages(){return this._messagesByConversation}_emitMessageStoreOperationEvent(p,B){const{conversationID:v}=B;Xr(v)?ye.notificationCenter.emitInnerEvent(ag[p],B):ye.notificationCenter.emitInnerEvent(p,B)}},Aa=new class{constructor(){this.userProfileMap=new Map,this.friendMap=new Map}getUserProfileMap(){return this.userProfileMap}getFriendMap(){return this.friendMap}getUserProfile(p){return this.userProfileMap.get(p)}getFriend(p){return this.friendMap.get(p)}},gh=Object.freeze({__proto__:null,conversationStore:$g,groupStore:Za,messageStore:Nl,userStore:Aa});class js{static getInstance(){return js._instance||(js._instance=new js),js._instance}static setInstance(B){js._instance=B}constructor(){this._experimentalApiMap={statTUIKeyFeatures:this.statKeyFeatureUsage.bind(this),setApplicationID:this.setApplicationID.bind(this)},this._apiHandlersMap={},this._apiMap={on:ye.notificationCenter.subscribeOuterEvent.bind(ye.notificationCenter),off:ye.notificationCenter.unSubscribeOuterEvent.bind(ye.notificationCenter),destroy:this.destroy.bind(this),callExperimentalAPI:this.callExperimentalAPI.bind(this),use:Oo.getInstance().installExternalPlugin.bind(Oo.getInstance()),registerPlugin:this.registerPlugin.bind(this),setLogLevel:this.setLogLevel.bind(this)}}registerPlugin(B){ye.ssoLog.debug("registerPlugin",B)}statKeyFeatureUsage(B){ye.ssoLog.debug("statTUIKeyFeatures",B)}setLogLevel(B){ye.ssoLog.debug("setLogLevel",B),ye.ssoLog.setLogLevel(B)}setApplicationID(B){ye.store.set("instance",{applicationID:B})}getApiMap(){return this._apiMap}setApiMap(B){this._apiMap=B}registerApi(B){const{common:{timeManager:v},utils:{safeStringify:N}}=ye,{apiName:O,context:z,methodName:X=O,matcher:rA}=B;this._apiHandlersMap[O]||(this._apiHandlersMap[O]=[]),this._apiHandlersMap[O].push({context:z,methodName:X,matcher:rA}),this._apiMap[O]&&this._apiHandlersMap[O].length!==1||(this._apiMap[O]=(...DA)=>{const GA=v.getServerTimeMs();let VA=0;O==="login"&&(VA=4),rr.includes(O)&&ye.ssoLog.debug(O,`${O} start params: ${N(DA)}`),_l(X,DA);const ee=this._apiHandlersMap[O];for(const Ee of ee)if(!Ee.matcher||Ee.matcher(DA))try{const We=Ee.context[Ee.methodName].bind(Ee.context)(...DA);return this._isPromiseLike(We)?this._handleAsyncResult(We,O,VA,GA):(this._reportApiSuccessLog({result:We,apiName:O,eventType:VA,startTime:GA}),We)}catch(We){throw ye.ssoLog.error(O,`${O} fail ${We?.message||We?.errorMessage})`,{error:We,costTime:v.getServerTimeMs()-GA,eventType:VA,method:O}),We}})}registerExperimentalAPI(B,v,N){const O=N||B;this._experimentalApiMap[B]=v[O].bind(v)}destroy(){return pA(this,void 0,void 0,function*(){var B,v;try{!((B=ye.store.get("login"))===null||B===void 0)&&B.isLogin&&(yield this._apiMap.logout()),ye.notificationCenter.emitInnerEvent(ui.DESTROY)}catch(N){console.debug("destroy error: ",N)}finally{ye.notificationCenter.emitOuterEvent(Dn.SDK_DESTROY,{SDKAppID:(v=ye.store.get("instance"))===null||v===void 0?void 0:v.sdkAppId}),ws.clear(),Oo.getInstance().clear(),tn.getInstance().destroy(),ye.destroy()}})}exposeApiForClient(){return this._apiMap}exposeApiForPlugin(){return Object.assign(Object.assign({InnerEvent:ui,InnerEventSubType:ye.notificationCenter.InnerEventSubType,OuterEvent:Dn,OuterConstant:hs,SignalingEvent:no,helper:Object.assign(Object.assign(Object.assign({},ye.utils),ye.common),{registerApi:this.registerApi.bind(this),registerExperimentalAPI:this.registerExperimentalAPI.bind(this),registerInterceptor:Sr,registerValidateConfig:Mc,checkBusinessCapabilityBits:Wc,registerWorkflowStep:tn.getInstance().registerWorkflowStep.bind(tn.getInstance()),ChatError:rs}),apiMap:this._apiMap},ye),{constants:Object.assign(Object.assign({},qI),ye.constants),common:Object.assign(Object.assign(Object.assign({},Lg),ye.common),{workflowManager:tn.getInstance()}),utils:ye.utils,appStore:gh})}callExperimentalAPI(B,v){return ye.ssoLog.debug(`callExperimentalAPI.${B} start params: ${ye.utils.safeStringify(v)}`),this._experimentalApiMap[B]?this._experimentalApiMap[B](v):(ye.ssoLog.error("callExperimentalAPI",`callExperimentalAPI.${B} not found, params: ${ye.utils.safeStringify(v)}`),Promise.reject(new rs({code:Lo.INVALID_OPERATION})))}_isPromiseLike(B){return B!==null&&typeof B=="object"&&typeof B.then=="function"}_handleAsyncResult(B,v,N,O){return B.then(z=>(this._reportApiSuccessLog({result:z,apiName:v,eventType:N,startTime:O}),z)).catch(z=>{throw ye.ssoLog.error(v,`${v} fail ${z?.message||z?.errorMessage})`,{error:z,costTime:ye.common.timeManager.getServerTimeMs()-O,eventType:N,method:v,startTime:O}),z})}_reportApiSuccessLog(B){let{result:v,apiName:N,startTime:O,eventType:z}=B;const{timeManager:X}=ye.common,{successLog:{message:rA,moreMessage:DA}={message:"",moreMessage:""}}=v||{},GA=X.getServerTimeMs();N==="login"&&(O+=X.getTimeOffsetWithServer()),rr.includes(N)&&ye.ssoLog.info(N,`${N} success ${rA} ${DA}`,{costTime:GA-O,eventType:z,message:rA,moreMessage:DA,startTime:O}),v?.successLog&&delete v.successLog}}class XI{constructor(){this._latestLoginAt=0,this._latestSendOnlinePresenceRequestTime=0,this._helloInterval=120,this._customLoginInfo=""}init(){const{notificationCenter:B,store:v}=ye;v.set("login",{isReady:!1}),js.getInstance().registerApi({apiName:"login",context:this}),js.getInstance().registerApi({apiName:"logout",context:this}),js.getInstance().registerApi({apiName:"getLoginUser",context:this}),js.getInstance().registerApi({apiName:"isReady",context:this}),js.getInstance().registerApi({apiName:"getServerTime",context:this}),js.getInstance().registerExperimentalAPI("setCustomLoginInfo",this),B.subscribeInnerEvent(ui.RECONNECTED,this._reLogin,this),ye.notificationCenter.subscribeInnerEvent(ui.DESTROY,this._dispose,this)}login(B){return pA(this,void 0,void 0,function*(){var v;const{sdkEdition:N}=ye.store.get("instance")||{};try{if(this._isLoginIn())return this._createRepeatLoginResponse();if(this._isLoginFrequencyExceeded())throw new rs({functionName:"login",code:Lo.REPEAT_LOGIN});const O=yield this._performLogin(B);this._validateAfterLogin(O),this._handleLoginSuccess(O),yield this._ensureAsyncComplete(),this._updateAndEmitSDKReady(),this._latestLoginAt=0;const z=(v=ye.channel.getSocketAdapter())===null||v===void 0?void 0:v.getId(),{appId:X,href:rA}=ye.store.get("instance")||{},{instanceID:DA,customStatus:GA}=O||{};return{code:0,data:O,successLog:{message:N,moreMessage:`socketID:${z} instanceID:${DA} customStatus:${GA} href: ${rA} appId: ${X}`}}}catch(O){const{errorCode:z}=O;z!==Lo.REPEAT_LOGIN&&(this._latestLoginAt=0);const X=new rs({functionName:"login",code:z});throw console.error(X),X}})}_reLogin(){return pA(this,void 0,void 0,function*(){var B;try{if(!this._isLoginIn())return;const v=yield Gu(this._customLoginInfo);if(v){const{instanceID:N,customStatus:O}=v;ye.store.set("login",{statusInstanceId:N}),tn.getInstance().executeWorkflow(nr.SYNC_SERVER_INFO_AFTER_RE_ONLINE,{customStatus:O,statusType:_u.USER_STATUS_ONLINE});const z=(B=ye.channel.getSocketAdapter())===null||B===void 0?void 0:B.getId();ye.ssoLog.info("reLogin",`socketId:${z} instanceId:${N}`)}}catch(v){console.warn(v)}})}logout(){return pA(this,arguments,void 0,function*(B=za.USER_INITIATED){const{ssoLog:v}=ye;v.debug("logout",`logout start logoutReason: ${B}`);try{yield this._performLogout(B),v.info("logout","logout success"),ye.ssoLog.uploadSSOLogData()}catch(N){const{errorCode:O}=N;throw new rs({functionName:"logout",code:O})}finally{this.handleLogoutCompleted()}return{code:0,data:{}}})}getLoginUser(){return this._isLoginIn()?qn():""}isReady(){var B;return(B=ye.store.get("login"))===null||B===void 0?void 0:B.isReady}setCustomLoginInfo(B=""){this._customLoginInfo=B}handleLogoutCompleted(){this._updateAndEmitSDKNotReady(),this._reset(),tn.getInstance().reset(),ye.notificationCenter.emitInnerEvent("logout")}getServerTime(){const{timeManager:B}=ye.common;return B.getServerTimeMs()}_updateAndEmitSDKReady(){ye.store.set("login",{isReady:!0}),setTimeout(()=>{ye.notificationCenter.emitOuterEvent(Dn.SDK_READY,{name:Dn.SDK_READY})},1)}_updateAndEmitSDKNotReady(){ye.store.set("login",{isReady:!1}),ye.notificationCenter.emitOuterEvent(Dn.SDK_NOT_READY,{name:Dn.SDK_NOT_READY})}_validateAfterLogin(B){const v="login";if(!B)throw new rs({functionName:v,message:"login response is empty"});const{tinyID:N,a2Key:O}=B||{};if(!N)throw new rs({functionName:v,code:Lo.NO_TINYID});if(!O)throw new rs({functionName:v,code:Lo.NO_A2KEY})}_createRepeatLoginResponse(){var B;return{code:0,data:{actionStatus:"OK",errorCode:0,errorInfo:wl({code:"RepeatLogin",replacement1:(B=ye.store.get("login"))===null||B===void 0?void 0:B.userId}),repeatLogin:!0}}}_performLogin(B){return pA(this,void 0,void 0,function*(){const{userID:v,userSig:N}=B;return ye.store.set("login",{userId:v,userSig:N}),this._latestLoginAt=Date.now(),Gu(this._customLoginInfo)})}_ensureAsyncComplete(){return pA(this,void 0,void 0,function*(){yield new Promise(B=>{setTimeout(()=>B(null),1)})})}_handleLoginSuccess(B){const{timeManager:v}=ye.common,{helloInterval:N,timeStamp:O,customStatus:z,purchaseBits:X}=B,rA=1e3*O;v.calculateTimeOffsetWithServer(this._latestLoginAt,rA),this._helloInterval=N||120,this._updateLoginStore(B),ye.user.userStatus.setCustomStatus(z),tn.getInstance().executeWorkflow(nr.SYNC_SERVER_INFO_AFTER_LOGIN,{purchaseBits:X}),ye.common.taskScheduler.addTask({id:Tu,intervalMs:1e3*this._helloInterval,callback:this._sendOnlinePresenceRequest,context:this})}_performLogout(B){return function(v){return pA(this,void 0,void 0,function*(){const{logoutReason:N}=v,O="im_open_status.wslogout",z=ye.common.generateProtocolData({servcmd:O,data:{wslogout_type:N,isWebUniapp:0}}),X=`${z.head.seq}${O}`;return yield ye.channel.sendPacket(z,{requestId:X})})}({logoutReason:B})}_updateLoginStore(B){const{a2Key:v,tinyID:N,instanceID:O,authKey:z}=B;ye.store.set("login",{a2Key:v,tinyID:N,statusInstanceId:O,authKey:z,isLoggedIn:!0})}_sendOnlinePresenceRequest(){return pA(this,void 0,void 0,function*(){this._latestSendOnlinePresenceRequestTime=Date.now();try{yield function(){const B="im_open_status.wshello",v=ye.common.generateProtocolData({servcmd:B,data:{isWebUniapp:0}}),N=`${v.head.seq}${B}`;return ye.channel.sendPacket(v,{requestId:N})}()}catch(B){ye.ssoLog.warn("_sendOnlinePresenceRequest",` error:${B.message}`)}})}_isLoginIn(){var B;return((B=ye.store.get("login"))===null||B===void 0?void 0:B.isLoggedIn)===!0}_isLoginFrequencyExceeded(){return Date.now()-this._latestLoginAt<=15e3}_reset(){ye.common.taskScheduler.removeTask(Tu),this._helloInterval=120,this._latestSendOnlinePresenceRequestTime=0,this._latestLoginAt=0,this._customLoginInfo="",ye.store.clear("login"),ye.store.set("login",{isReady:!1}),ye.store.set("instance",{applicationID:0})}_dispose(){this._reset();const{notificationCenter:B}=ye;B.unSubscribeInnerEvent(ui.RECONNECTED,this._reLogin,this),B.unSubscribeInnerEvent(ui.DESTROY,this._dispose,this)}}const Us={login:{userID:{required:!0,rules:["string"],allowEmpty:!1},userSig:{required:!0,rules:["string"],allowEmpty:!1}}},_c={logout:!0};class Ac{constructor(){this.loginAction=new XI,this.kickedOutHandler=new Sc,this.loginAction.init(),this.kickedOutHandler.init(),Mc({auth:_c,params:Us})}}var dr,Vr,Xa;(function(p){p.CONV_C2C="C2C",p.CONV_GROUP="GROUP",p.CONV_TOPIC="TOPIC",p.CONV_SYSTEM="@TIM#SYSTEM"})(dr||(dr={})),function(p){p.MSG_PRIORITY_HIGH="High",p.MSG_PRIORITY_NORMAL="Normal",p.MSG_PRIORITY_LOW="Low",p.MSG_PRIORITY_LOWEST="Lowest"}(Vr||(Vr={})),function(p){p.MSG_TEXT="TIMTextElem",p.MSG_CUSTOM="TIMCustomElem",p.MSG_LOCATION="TIMLocationElem",p.MSG_FACE="TIMFaceElem",p.MSG_IMAGE="TIMImageElem",p.MSG_AUDIO="TIMSoundElem",p.MSG_FILE="TIMFileElem",p.MSG_VIDEO="TIMVideoFileElem",p.MSG_GRP_TIP="TIMGroupTipElem",p.MSG_GRP_SYS_NOTICE="TIMGroupSystemNoticeElem",p.MSG_MERGER="TIMRelayElem"}(Xa||(Xa={}));const bE={1:Vr.MSG_PRIORITY_HIGH,2:Vr.MSG_PRIORITY_NORMAL,3:Vr.MSG_PRIORITY_LOW,4:Vr.MSG_PRIORITY_LOWEST},hC=0,ch=1;var ao;(function(p){p.IN="in",p.OUT="out"})(ao||(ao={}));const Tc=2,Gl={};function BC(p){if(!p)return 0;if(Gl[p]===void 0){const B=new Date,v=`3${B.getHours()}`.slice(-2),N=`0${B.getMinutes()}`.slice(-2),O=`0${B.getSeconds()}`.slice(-2);Gl[p]=parseInt([v,N,O,"0001"].join(""),10),console.log(`autoIncrementIndex start index:${Gl[p]}`)}else Gl[p]+=1;return Gl[p]}class QC{constructor(B){this.ID="",this.random=0,this.sequence=0,this.nameCard="",this.isRead=!1,this.isPeerRead=!1,this.isDeleted=!1,this.isResend=!1,this.hasRiskContent=!1,this._onlineOnlyFlag=!1,this.atUserList=[],this._groupAtInfoList=[],this.isBroadcastMessage=!1,this.priority=Vr.MSG_PRIORITY_NORMAL,this._relayFlag=!1;const{clientTime:v=ye.common.timeManager.getServerTimeSeconds()||0,senderTinyID:N,currentUser:O,needReadReceipt:z,isSupportExtension:X,customModerationConfigurationId:rA,to:DA,from:GA,nick:VA="",avatar:ee="",time:Ee,messageControlInfo:We,tinyID:ot,cloudCustomData:at="",messageLifeTime:Ut,messageVersion:Jt=0,conversationType:Ui,sequence:go,checkResult:Xi=0,isPlaceMessage:Ei=0,messageFlagBits:Po,receiverList:es,isSystemMessage:pi=!1,status:ji=wg.SUCCESS,revokeReason:Ws="",conversationSubType:_e,clientSequence:_t,protocol:FA="JSON",revokerInfo:Xt={userID:"",nick:"",avatar:""},readReceiptInfo:En={readCount:void 0,unreadCount:void 0,isPeerRead:void 0,timestamp:0},random:Ai,groupProfile:us,atUserList:vi,flow:ho,isRead:ht=!1,priority:Qt=Vr.MSG_PRIORITY_NORMAL,onlineOnlyFlag:ug=!1,nameCard:ks="",quoteInfo:Wi}=B;var Hr;this.clientTime=v,this.senderTinyID=N||ot,this.needReadReceipt=z===!0||z===1,this.isSupportExtension=X===!0||X===1,this._cmConfigID=rA,this.to=DA,this.nick=VA,this.avatar=ee,this.protocol=FA,this.random=Ai===void 0?(Hr=Hr||99999999,Math.round(Math.random()*Hr)):Ai,this.time=Ee||Math.ceil(Date.now()/1e3),this._isExcludedFromLastMessage=!!We?.excludedFromLastMessage,this._isExcludedFromUnreadCount=!!We?.excludedFromUnreadCount,this.isModified=!!Jt,this.cloudCustomData=at,this.messageLifeTime=Ut,this.from=GA||null,this.sequence=go||0,this.conversationType=Ui||dr.CONV_C2C,this.hasRiskContent=Xi>1,this.version=Jt,this.isPlaceMessage=Ei,this.isRevoked=Ei===2||Po===8,this.isSystemMessage=pi,this.readReceiptInfo=En,this.revokeReason=Ws,this.revokerInfo=Xt,this._receiverList=es,this.conversationSubType=_e,this.revoker=Xt?.revoker||"",this.clientSequence=_t||go||0,this.status=ji,this.atUserList=vi||[],this.flow=ho,this.isRead=ht,this.priority=Qt,this._onlineOnlyFlag=ug,this.nameCard=ks,this.quoteInfo=Wi,this.reInitialize(O),this._initC2CReadReceiptInfo(B),this._extractGroupInfo(us)}getElements(){return this._elements}isOnlineMessage(){return this.messageLifeTime===0}setElement(B){Array.isArray(B)?this._elements=B:this._elements=[B],this._updatePayloadAndType()}transformElementsToServerFormat(){return this._elements?Array.isArray(this._elements)?this._elements.map(B=>B.transformToServerFormat()):this._elements.transformToServerFormat():null}setRelayFlag(B){this._relayFlag=B}validateBeforeSend(){var B,v,N;return this._relayFlag?{isValid:!0}:((B=this._elements)===null||B===void 0?void 0:B.length)>0?(N=(v=this._elements[0])===null||v===void 0?void 0:v.validateBeforeSend)===null||N===void 0?void 0:N.call(v):{isValid:!1}}_updatePayloadAndType(){this._elements[0]&&(this.payload=this._elements[0].content,this.type=this._elements[0].type)}_initC2CReadReceiptInfo(B){const{readReceiptSentByPeer:v,timestamp:N=0}=B;this.conversationType===dr.CONV_C2C&&this.needReadReceipt===!0&&(this.readReceiptInfo.isPeerRead=v===1,this.readReceiptInfo.timestamp=N)}_extractGroupInfo(B){if(!B)return;const{From_AccountNick:v,From_AccountHeadurl:N,MsgFrom_AccountExtraInfo:O,GroupType:z}=B,{NameCard:X}=O||{};typeof v=="string"&&(this.nick=v),typeof N=="string"&&(this.avatar=N),typeof X=="string"&&(this.nameCard=X),this.conversationSubType=z}reInitialize(B){B===this.from&&(this.isRead=!0),this._initSequence(B),this._concatConversationID(B),this.generateMessageID()}_concatConversationID(B){let v="";const N=this.conversationType;N!==dr.CONV_SYSTEM?(v=N===dr.CONV_C2C?B===this.from?this.to:this.from:this.to,this.conversationID=v?`${N}${v}`:null):this.conversationID=dr.CONV_SYSTEM}_initSequence(B){this.clientSequence===0&&B&&(this.clientSequence=BC(B)),this.sequence===0&&this.conversationType===dr.CONV_C2C&&(this.sequence=this.clientSequence)}generateMessageID(){this.from===dr.CONV_SYSTEM&&(this.senderTinyID="144115198244471703"),this.ID=`${this.senderTinyID}-${this.clientTime}-${this.random}`}setIsRead(B){this.isRead=B}}class bl{static parseServerPushElement(B){const{MsgContent:v={}}=B,{Data:N,Ext:O,Desc:z}=v;return new bl({data:N,description:z,extension:O})}constructor(B){this.type=Xa.MSG_CUSTOM;const{data:v="",description:N="",extension:O=""}=B;this.content={data:v,description:N,extension:O}}transformToServerFormat(B){const{isMergerMessage:v=!1}=B||{},N=v?this.payload:this.content,{data:O,description:z,extension:X}=N;return{MsgType:this.type,MsgContent:{Data:O,Ext:X,Desc:z}}}validateBeforeSend(){const{isEmpty:B}=ye.utils,v=[this.content.data,this.content.description,this.content.extension].some(N=>!B(N));return{isValid:v,error:v?null:{message:"content can not be empty"}}}}class $I{static parseServerPushElement(B){const{MsgContent:v={Text:""}}=B,{Text:N}=v;return new $I({text:N})}constructor(B){this.type=zg.MSG_TEXT,this.content={text:B.text||""}}validateBeforeSend(){var B,v;return((v=(B=this.content)===null||B===void 0?void 0:B.text)===null||v===void 0?void 0:v.length)>0?{isValid:!0}:{isValid:!1,error:{message:"content can not be empty"}}}transformToServerFormat(B){const{isMergerMessage:v=!1}=B||{},N=v?this.payload:this.content,{text:O}=N;return{MsgType:this.type,MsgContent:{Text:O}}}}var BI=new class{constructor(){this._elementClassMap={[Xa.MSG_CUSTOM]:bl,[Xa.MSG_TEXT]:$I}}init(){js.getInstance().registerApi({apiName:"createCustomMessage",context:this}),js.getInstance().registerApi({apiName:"createTextMessage",context:this})}registerElementClass(p,B){var v;(v=B).prototype!==void 0&&"constructor"in v.prototype&&(this._elementClassMap[p]=B)}getElementClass(p){return this._elementClassMap[p]}createMessage(p){const{from:B,flow:v=ao.OUT}=p,{userId:N}=ye.store.get("login")||{};this._isSendByCurrentInstance({from:B,flow:v,currentUser:N})?this._updateWithSenderInfo(p):this._isMultiEndpointSyncMessage({from:B,flow:v,currentUser:N})&&(p.flow=ao.OUT);const O=Object.assign(Object.assign({},p),{currentUser:N});return new QC(O)}createCustomMessage(p){const B=qn(),v=this.createMessage(Object.assign(Object.assign({},p),{from:B})),N=this._elementClassMap[Xa.MSG_CUSTOM];if(!v)return null;if(N){const O=new N(p.payload);v.setElement(O)}return v}createTextMessage(p){var B;if(!p)return null;const v=typeof p.payload=="string"?p.payload:((B=p?.payload)===null||B===void 0?void 0:B.text)||"",N=new $I({text:v}),O=qn(),z=ye.message.messageFactory.createMessage(Object.assign(Object.assign({},p),{from:O}));return z.setElement(N),z}_updateWithSenderInfo(p){var B,v;const{nick:N,avatar:O,conversationType:z,to:X}=p,{userId:rA,tinyID:DA}=ye.store.get("login")||{},GA=Aa.getUserProfile(rA);return p.nick=N||GA?.nick||"",p.avatar=O||GA?.avatar||"",p.tinyID=p.tinyID||DA||"",p.from=rA,p.status=wg.UNSENT,p.flow=ao.OUT,z===_g.CONV_GROUP&&(p.nameCard=(v=(B=Za.getGroup(X))===null||B===void 0?void 0:B.selfInfo)===null||v===void 0?void 0:v.nameCard),p}_isMultiEndpointSyncMessage(p){const{from:B,flow:v,currentUser:N}=p;return B===N&&v===ao.IN}_isSendByCurrentInstance(p){const{from:B,flow:v,currentUser:N}=p;return B===N&&v===ao.OUT}};const QI={PushFlag:0,Title:"",Desc:"",Ext:"",ApnsInfo:{Sound:"",BadgeMode:0,IsVoipPush:void 0,Image:"",InterruptionLevel:"active",ContentAvailable:0},AndroidInfo:{Sound:"",XiaoMiChannelID:"",OPPOChannelID:"",GoogleChannelID:"",VIVOClassification:1,VIVOCategory:"",HuaWeiCategory:"",OPPOCategory:"",HuaWeiImage:"",HonorImage:"",GoogleImage:"",HonorImportance:"",MeizuNotifyType:void 0}},kE={HonorImportance:{range:["LOW","NORMAL"],defaultValue:void 0},MeizuNotifyType:{range:[0,1],defaultValue:void 0}},kl={enableIOSBackgroundNotification:{range:[!0,!1],defaultValue:!1},interruptionLevel:{range:["passive","active","time-sensitive","critical"],defaultValue:"active"}};function Ll(p,B){return Object.keys(B).forEach(v=>{const{range:N,defaultValue:O}=B[v];p[v]=N.includes(p[v])?p[v]:O}),p}function Ug(p){const B=p.lastIndexOf(".");return B===-1?p:p.slice(0,B)}function ec(p){const{androidInfo:B={},androidOPPOChannelID:v=""}=p,N=B.OPPOChannelID||v,O=Ll(B,kE),{sound:z="",FCMChannelID:X=""}=O,rA=Do(O,["sound","FCMChannelID"]);return Object.assign(Object.assign({},rA),{Sound:Ug(z),OPPOChannelID:N,GoogleChannelID:X})}function md(p){const{apnsInfo:B={},ignoreIOSBadge:v=!1,disableVoipPush:N}=p,O=Ll(B,kl),{ignoreIOSBadge:z,disableVoipPush:X,enableIOSBackgroundNotification:rA}=O,DA=Do(O,["ignoreIOSBadge","disableVoipPush","enableIOSBackgroundNotification"]),GA=z===!0||v===!0?1:0;let VA;return r(N)||(VA=N===!1?1:0),r(X)||(VA=X===!1?1:0),Object.assign(Object.assign({},DA),{BadgeMode:GA,IsVoipPush:VA,ContentAvailable:rA?1:0})}function LE(p){return ye.utils.isPlainObject(p)?{PushFlag:p.disablePush===!0?1:0,Title:p.title||"",Desc:p.description||"",Ext:p.extension||"",ApnsInfo:md(p),AndroidInfo:ec(p)}:QI}function Nc(p){const{From_AccountHeadurl:B,From_AccountNick:v,IsNeedReadReceipt:N,IsPeerRead:O,IsSyncMsg:z,MsgBody:X,MsgClientTime:rA,MsgLifeTime:DA,MsgRandom:GA,MsgSeq:VA,MsgTimeStamp:ee,SendMsgControl:Ee,SupportMessageExtension:We,TinyId:ot,MsgCheckResult:at,CloudCustomData:Ut,MsgVersion:Jt,MsgFlagBits:Ui,RevokerInfo:go,InnerSdkCustomData:Xi}=p;let Ei,{From_Account:Po,To_Account:es}=p;if(z===1){const pi=es;es=Po,Po=pi}if(go){const{Reason:pi,Revoker_Account:ji,Revoker_FromUin:Ws}=go;Ei={reason:pi,revoker:ji,revokerFromUin:Ws,userID:ji}}return{from:Po,avatar:B,nick:v,needReadReceipt:N===1,isSyncMessage:z,clientTime:rA,messageLifeTime:DA,random:GA,sequence:VA,time:ee,messageControlInfo:{excludedFromLastMessage:Ee?.NoLastMsg===1,excludedFromUnreadCount:Ee?.NoUnread===1},isSupportExtension:We,to:es,tinyID:ot,checkResult:at,cloudCustomData:Ut,revokerInfo:Ei,messageVersion:Jt,messageFlagBits:Ui,readReceiptSentByPeer:O,elements:$a(X),onlineOnlyFlag:DA===0,quoteInfo:Pu(Xi)}}function Au(p){const{From_Account:B,MsgBody:v,MsgClientTime:N,MsgRandom:O,MsgSeq:z,MsgTimeStamp:X,To_Account:rA,MsgVersion:DA,CloudCustomData:GA,MsgCheckResult:VA}=p;return{from:B,clientTime:N,random:O,sequence:z,time:X,to:rA,elements:$a(v),messageVersion:DA,cloudCustomData:GA,checkResult:VA}}function lo(p){const{ClientSeq:B,From_Account:v,GroupInfo:N,MsgBody:O,MsgClientTime:z,MsgRandom:X,MsgSeq:rA,MsgTimeStamp:DA,SendMsgControl:GA,SupportMessageExtension:VA,TinyId:ee,CloudCustomData:Ee,MsgVersion:We,MsgCheckResult:ot,NeedReadReceipt:at,IsPlaceMsg:Ut,RevokerInfo:Jt,GroupAtInfo:Ui,OnlineOnlyFlag:go,InnerSdkCustomData:Xi}=p;let Ei,Po=Vr.MSG_PRIORITY_NORMAL;if(Object.keys(bE).includes(String(p.MsgPriority))&&(Po=bE[p.MsgPriority]),Jt){const{Reason:pi,Revoker_Account:ji,Revoker_FromUin:Ws}=Jt;Ei={reason:pi,revoker:ji,revokerFromUin:Ws,userID:ji}}const es=function(pi){const ji=[];return Array.isArray(pi)&&pi.forEach(Ws=>{Ws.GroupAtAllFlag===hC?ji.push(Ws.GroupAt_Account):Ws.GroupAtAllFlag===ch&&ji.push(hs.MSG_AT_ALL)}),ji}(Ui);return{clientSequence:B,from:v,groupProfile:N,clientTime:z,priority:Po,random:X,sequence:rA,time:DA,messageControlInfo:{excludedFromLastMessage:GA?.NoLastMsg===1,excludedFromUnreadCount:GA?.NoUnread===1},isSupportExtension:VA,tinyID:ee,cloudCustomData:Ee,messageVersion:We,checkResult:ot,needReadReceipt:at,isPlaceMessage:Ut,revokerInfo:Ei,atUserList:es,elements:$a(O),to:UE(p),onlineOnlyFlag:go===1,quoteInfo:Pu(Xi)}}function UE(p){const{utils:{isEmpty:B},constants:{IS_TOPIC_MESSAGE:v}}=ye,{ToGroupId:N,GroupInfo:{MillionGroupFlag:O=0,TopicId:z}={}}=p;return O!==v||B(z)?N:z}function $a(p){if(!p)return null;if(Array.isArray(p))return p.map(v=>{const N=ye.message.messageFactory.getElementClass(v.MsgType);return N?.parseServerPushElement(v)});const B=ye.message.messageFactory.getElementClass(p.MsgType);return B?.parseServerPushElement(p)}function eu(p){const{From_Account:B,MsgBody:v,MsgClientTime:N,MsgRandom:O,MsgSeq:z,MsgTimeStamp:X,GroupId:rA,TopicId:DA,MsgVersion:GA,CloudCustomData:VA,MsgCheckResult:ee}=p;return{from:B,clientTime:N,random:O,sequence:z,time:X,groupID:rA,topicID:DA,elements:$a(v),messageVersion:GA,cloudCustomData:VA,checkResult:ee}}function Pu(p){const{utils:{isString:B,safeStringify:v},ssoLog:N}=ye;if(!B(p))return null;try{const{messageID:O,messageTime:z,messageSequence:X}=JSON.parse(p).businessQuote;return{msgID:O,messageTime:z,messageSequence:X}}catch(O){return N.debug("_parseServerQuoteInfo",v(O)),null}}function Gc({conversationUpdateFields:p,message:B}){const{conversationID:v,conversationType:N,conversationSubType:O,flow:z,_isExcludedFromUnreadCount:X,_isExcludedFromLastMessage:rA}=B,DA=rA?"":ol(B),GA=!X&&z===ao.IN;p.has(v)?(p.get(v).lastMessage=DA,GA&&p.get(v).unreadCount++):p.set(v,{conversationID:v,type:N,subType:O,unreadCount:GA?1:0,lastMessage:DA})}function pI(p){return p.filter(B=>{const v=!Rs(B?._elements),N=B?.isPlaceMessage===1;return v||ye.ssoLog.error("emptyMessageBody",`from:${B.from} to:${B.to} sequence:${B.sequence}`),v&&!N})}function sl(p){const{messageDataHandler:B}=ye.message;return!B.isInMessageList(p)&&!B.isMessageSentByCurrentInstance(p)}var nl=Object.freeze({__proto__:null,autoIncrementIndex:BC,createAndroidPushInfo:ec,createApnsPushInfo:md,createOfflinePushInfo:LE,filterValidMessages:pI,getAndroidSoundName:Ug,parseServerGroupMessage:lo,parseServerPushC2CModifyMessage:Au,parseServerPushGroupModifyMessage:eu,parseServerPushMessage:Nc,parseServerPushMessageElement:$a,shouldStoreMessage:sl,updateConversationFields:Gc});const{isPlainObject:xa}=ye.utils;function FE(p,B={}){const{onlineUserOnly:v,messageControlInfo:N}=B;let{offlinePushInfo:O}=B;p.conversationType===dr.CONV_C2C&&v===!0&&(O?O.disablePush=!0:O={disablePush:!0});let z="";typeof p.cloudCustomData=="string"&&p.cloudCustomData.length>0&&(z=p.cloudCustomData);const X=[];if(N&&xa(N)){const{excludedFromUnreadCount:rA,excludedFromLastMessage:DA,excludedFromContentModeration:GA}=N;rA===!0&&X.push("NoUnread"),DA===!0&&X.push("NoLastMsg"),GA===!0&&X.push("NoMsgCheck")}return{onlineUserOnly:v,cloudCustomData:z,messageControlInfo:X,offlinePushInfo:O}}function ra(p){const{webhookInfo:{disableCloudMessagePreHook:B=!1,disableCloudMessagePostHook:v=!1}={}}=p||{};if(!B&&!v)return;const N=[];return B&&N.push("ForbidBeforeSendMsgCallback"),v&&N.push("ForbidAfterSendMsgCallback"),N}function Mn(p,B){return pA(this,void 0,void 0,function*(){const v=p.conversationType===dr.CONV_GROUP?function(O,z){var X;const rA=FE(O,z),{onlineUserOnly:DA,cloudCustomData:GA,messageControlInfo:VA,offlinePushInfo:ee}=rA,Ee=JSON.parse(JSON.stringify(O.transformElementsToServerFormat()));let We;return h(O._receiverList)&&O._receiverList.length>0&&(We=O._receiverList,O._receiverList.length>50&&(We=O._receiverList.slice(0,50),console.warn("ReceiverListLimit"))),{servcmd:"group_open_http_svc.send_group_msg",data:{From_Account:(X=ye.store.get("login"))===null||X===void 0?void 0:X.userId,GroupId:O.to,MsgBody:Ee,CloudCustomData:GA,Random:O.random,MsgPriority:O.priority,ClientSeq:O.clientSequence,GroupAtInfo:O._groupAtInfoList,OnlineOnlyFlag:DA?1:0,MsgClientTime:O.clientTime,OfflinePushInfo:LE(ee),SendMsgControl:DA?void 0:VA,NeedReadReceipt:O.needReadReceipt===!0?1:0,To_Account:We,SupportMessageExtension:O.isSupportExtension===!0?1:0,IsRelayMsg:O._relayFlag===!0?1:0,CustomModerationConfigID:O._cmConfigID,ForbidCallbackControl:ra(z),InnerSdkCustomData:OE(O)}}}(p,B):function(O,z){var X;const rA=FE(O,z),{onlineUserOnly:DA,cloudCustomData:GA,messageControlInfo:VA,offlinePushInfo:ee}=rA,Ee=DA===!0?0:void 0,We=JSON.parse(JSON.stringify(O.transformElementsToServerFormat()));return{servcmd:"openim.sendmsg",data:{From_Account:(X=ye.store.get("login"))===null||X===void 0?void 0:X.userId,To_Account:O.to,MsgBody:We,CloudCustomData:GA,MsgSeq:O.sequence,MsgRandom:O.random,MsgLifeTime:Ee,From_AccountNick:O.nick,From_AccountHeadurl:O.avatar,SendMsgControl:Ee!==0?VA:void 0,MsgClientTime:O.clientTime,IsNeedReadReceipt:O.needReadReceipt===!0?1:0,SupportMessageExtension:O.isSupportExtension===!0?1:0,IsRelayMsg:O._relayFlag===!0?1:0,CustomModerationConfigID:O._cmConfigID,OfflinePushInfo:LE(ee),ForbidCallbackControl:ra(z),InnerSdkCustomData:OE(O)}}}(p,B),N=yield Zg(v);return N?{time:N.MsgTime,messageDropReason:N.MsgDropReason,sequence:N.MsgSeq}:null})}function kr(p){return pA(this,void 0,void 0,function*(){const{from:B,to:v,version:N=0,sequence:O,random:z,time:X,type:rA,cloudCustomData:DA}=p,GA={From_Account:B,To_Account:v,MsgVersion:N,MsgSeq:O,MsgRandom:z,MsgTime:X,MsgType:rA,MsgBody:p.transformElementsToServerFormat(),CloudCustomData:DA},VA=yield Zg({servcmd:"openim.modify_c2c_msg",data:GA});if(VA){const{MsgBody:ee,MsgVersion:Ee,CloudCustomData:We}=VA;return{elements:$a(ee),messageVersion:Ee,cloudCustomData:We}}})}function rl(p){return pA(this,void 0,void 0,function*(){const{to:B,version:v=0,sequence:N,cloudCustomData:O}=p,z={GroupId:B,MsgVersion:v,MsgSeq:N,MsgBody:p.transformElementsToServerFormat(),CloudCustomData:O},X=yield Zg({servcmd:"openim.modify_group_msg",data:z});if(X){const{MsgBody:rA,MsgVersion:DA,CloudCustomData:GA}=X;return{elements:$a(rA),messageVersion:DA,cloudCustomData:GA}}})}function Ul(p){return pA(this,void 0,void 0,function*(){const{groupID:B,count:v,messageSequence:N,messageSequenceList:O,getType:z}=p,X={GroupId:B,ReqMsgNumber:v,WithRecalledMsg:1,Version:1,GetType:z};return N&&(X.ReqMsgSeq=N),h(O)&&O.length>0&&(X.ReqMsgSeqList=O),yield Zg({servcmd:"group_open_http_svc.group_msg_get",data:X})})}function bc(p){return pA(this,void 0,void 0,function*(){const{peerAccount:B,count:v,lastMessageTime:N,messageKey:O,direction:z}=p;return Zg({servcmd:"openim.getroammsg",data:{Peer_Account:B,MaxCnt:v,WithRecalledMsg:1,LastMsgTime:N,MsgKey:O,GetDirection:z}})})}function OE(p){if(ye.utils.isObject(p.quoteInfo)){const{msgID:B,messageSequence:v,messageTime:N}=p.quoteInfo;return JSON.stringify({businessQuote:{messageID:B,messageSequence:v,messageTime:N}})}}var kc=Object.freeze({__proto__:null,createMessagePackOptions:FE,generateForbidCallbackControl:ra,getC2CRoamingMessagesByAnchor:bc,getGroupRoamingMessagesByAnchor:Ul,getRoamingMessages:function(p){return pA(this,void 0,void 0,function*(){const{peerAccount:B,count:v,lastMessageTime:N,messageKey:O}=p;return(yield Zg({servcmd:"openim.getroammsg",data:{Peer_Account:B,MaxCnt:v||15,LastMsgTime:N||0,MsgKey:O,GetDirection:0,WithRecalledMsg:1}}))||[]})},modifyC2CMessage:kr,modifyGroupMessage:rl,sendMessage:Mn});const{isPlainObject:xu}=ye.utils,{MSG_AUDIO:pC,MSG_FILE:tu,MSG_IMAGE:lh,MSG_VIDEO:Yu,MSG_MERGER:mI}=hs;class al{constructor(){this._sendProtocolMap=new Map}init(){js.getInstance().registerApi({apiName:"sendMessage",context:this,matcher:B=>![pC,tu,lh,Yu,mI].includes(B[0].type)})}registerSendProtocol(B,v,N){this._sendProtocolMap.set(B,v.bind(N))}sendMessage(B,v){return pA(this,void 0,void 0,function*(){const{TOTAL_COUNT:N,SEND_COST:O,SUCCESS_COUNT:z,FAILED_COUNT:X}=cI;if(!(B instanceof QC))throw new rs({code:Lo.MSG_INSTANCE_REQUIRED});const rA=B.validateBeforeSend();if(!rA.isValid){const{code:VA,message:ee=""}=rA.error||{};throw new rs({code:VA,message:ee})}this._reportMessageSendQuality({name:N,message:B});let DA=!1;const{messageDataHandler:GA}=ye.message||{};try{const{messageControlInfo:VA}=v||{};let ee=null;GA.addRandomOfSentMessage(B.random);const Ee=Date.now(),We=this._getSendProtocol(B);if(B.conversationType===dr.CONV_C2C?(DA=v?.onlineUserOnly===!0,ee=yield We(B,v)):B.conversationType===dr.CONV_GROUP&&(yield this._validateBeforeSendGroupMessage(B),ee=yield We(B,v)),ee){const{messageDropReason:ot,sequence:at,time:Ut}=ee;if(this._updateNickAndAvatarOfSentMessageByMe(B),ot&&this._logRateLimitInfo(B,at,ot),this._reportMessageSendQuality({name:z,message:B}),this._reportMessageSendQuality({name:O,message:B,startTs:Ee}),B.isResend===!0){const Jt=GA.findMessage(B.ID);Jt&&(ye.ssoLog.debug("sendMessage",`sendMessage resend ok. ID:${Jt.ID}`),GA.deleteConversationMessage(Jt))}return B.status=wg.SUCCESS,B.time=Ut,B.conversationType===dr.CONV_GROUP&&(B.sequence=at),DA?B._onlineOnlyFlag=!0:(GA.storeConversationMessage(B),this._applySentMessageControlInfo(B,VA),this._emitOnlineMessageSent(B)),B.type===zg.MSG_STREAM?{code:0,data:{message:B,streamMessageID:ee.streamMessageID}}:{code:0,data:{message:B}}}}catch(VA){B.status=wg.FAIL,GA.removeRandomOfSentMessage(B.random);let{errorCode:ee}=VA||{},Ee=VA?.errorInfo||VA?.message||"";throw this._hasRiskContent(ee)&&(B.hasRiskContent=!0),DA||this._isRejectedByRestApi(ee)||GA.storeConversationMessage(B),this._reportMessageSendQuality({name:X,message:B,error:VA}),new rs({code:ee,message:Ee,data:{message:B},moreMessage:`type:${B.type} from:${B.from} to:${B.to}`})}})}_hasRiskContent(B){return B===80001||B===80004}_isRejectedByRestApi(B){return B>=10100&&B<=10200||B>=120001&&B<=13e4}_emitOnlineMessageSent(B){const v=B._isExcludedFromLastMessage?"":B,{conversationID:N,conversationType:O}=B,z=Xr(N)?ui.TOPIC_NEW_MESSAGE:ui.NEW_MESSAGE;ye.notificationCenter.emitInnerEvent(z,{result:{conversationUpdateFieldList:[{conversationID:N,type:O,message:B,lastMessage:v,unreadCount:0}]}})}_applySentMessageControlInfo(B,v){v&&xu(v)&&(v.excludedFromLastMessage===!0&&(B._isExcludedFromLastMessage=!0),v.excludedFromUnreadCount===!0&&(B._isExcludedFromUnreadCount=!0))}_logRateLimitInfo(B,v,N){const O=`from:${B.from} to:${B.to} sequence:${v} messageDropReason:${N}`;ye.ssoLog.warn("messageDropReason",O)}_updateNickAndAvatarOfSentMessageByMe(B){const{messageDataHandler:v}=ye.message||{};let N=!1;const{conversationID:O}=B,z=v.getLatestMsgSentByMe(O);if(z){const{nick:X,avatar:rA}=z;X===B.nick&&rA===B.avatar||(N=!0),N&&v.updateNickAndAvatarOfSentMessage({conversationID:O,latestNick:B.nick,latestAvatar:B.avatar,isSentByMe:!0})}}_validateBeforeSendGroupMessage(B){return pA(this,void 0,void 0,function*(){var v,N,O;const{to:z,from:X}=B;let rA=z,DA=Za.getGroup(rA);if(Ca({groupID:rA})&&DA?.isSupportTopic)throw new rs({code:Lo.MSG_SEND_GRP_WITH_TOPIC_FAIL});if(Xr(z)&&([rA]=z.split(La.TOPIC),DA=Za.getGroup(rA)),!DA&&typeof((v=js.getInstance().getApiMap())===null||v===void 0?void 0:v.getGroupProfile)=="function"){const GA=yield js.getInstance().getApiMap().getGroupProfile({groupID:rA});if(((O=(N=GA?.data)===null||N===void 0?void 0:N.group)===null||O===void 0?void 0:O.type)===hs.GRP_AVCHATROOM){const VA=wl({code:Lo.MSG_SEND_FAIL_NOT_IN_AV,replacement1:X,replacement2:rA});throw new rs({code:Lo.MSG_SEND_FAIL_NOT_IN_AV,message:VA})}}return!0})}_reportMessageSendQuality(B){ye.notificationCenter.emitInnerEvent(ui.QUALITY_STAT,{label:Ng.MESSAGE_SEND_SUCCESS_RATE,data:B})}_getSendProtocol(B){return this._sendProtocolMap.get(B.type)||Mn}}var mC=new class{constructor(){this._sparseMessagesByConversation=new Map,this._latestMessageSentByPeerMap=new Map,this._latestMessageSentByMeMap=new Map,this._randomOfSentMessageList=new Set}init(){ye.notificationCenter.subscribeInnerEvent(ui.LOGOUT,this._reset,this),ye.notificationCenter.subscribeInnerEvent(ui.DESTROY,this._dispose,this)}get _messagesByConversation(){return Nl.getMessages()}storeConversationMessage(p,B=!1){if(an)return!0;const{conversationID:v}=p;if(!v||(this._messagesByConversation.has(v)||this._messagesByConversation.set(v,new Map),this._shouldSkipStoreMessage(p,B)))return!1;const N=this._getUniqueIdOfMessage(p);return this._messagesByConversation.get(v).set(N,p),this._updateLatestMessageMap(p),!0}_updateLatestMessageMap(p){const{conversationID:B}=p;p.flow==="out"?this._setLatestMsgSentByMe(B,p):B.startsWith("C2C")&&this._setLatestMsgSentByPeer(B,p)}_shouldSkipStoreMessage(p,B){const v=this._getUniqueIdOfMessage(p),N=this._messagesByConversation.get(p.conversationID);if(N?.has(v)){const O=N?.get(v);if(!B||O?.isModified===!0)return!0}return!1}deleteConversationMessage(p){var B;const{conversationID:v=""}=p,N=this._getUniqueIdOfMessage(p);this._messagesByConversation.has(v)&&((B=this._messagesByConversation.get(v))===null||B===void 0||B.delete(N))}modifyConversationMessage(p,B){var v;if(!this._messagesByConversation.has(p)&&!this._sparseMessagesByConversation.has(p))return{isUpdated:!1,message:null};const N=this._getUniqueIdOfMessage(B),O=this._getMessageFromLocalMessage(p,N);if(O){const{messageVersion:z,elements:X,cloudCustomData:rA,checkResult:DA=0}=B,GA=DA>1;if(ye.ssoLog.debug("modifyConversationMessage",`conversationToMessageMap modifyConversationMessage localVersion:${O.version} remoteVersion:${z}`),O.versionO.ID===p)||null,B)break;if(!B){const N=Array.from(this._sparseMessagesByConversation.values());for(const O of N)if(B=O.get(p)||null,B)break}return B}deleteConversationMessageList(p){this._messagesByConversation.has(p)&&(this._messagesByConversation.delete(p),this._latestMessageSentByMeMap.delete(p),this._latestMessageSentByPeerMap.delete(p)),this._sparseMessagesByConversation.has(p)&&this._sparseMessagesByConversation.delete(p)}revokeMessage({conversationID:p,sequence:B,random:v,revoker:N}){const O=this._messagesByConversation.get(p);let z=null;if(O){const X=Array.from(O.values());if(z=this._findMessageBySequenceAndRandom({messageList:X,random:v,sequence:B}),z){const rA=this._getUniqueIdOfMessage(z);return Nl.updateMessage(p,[rA],{isRevoked:!0,revoker:N,operation:Yr.revoke}),z}}if(this._sparseMessagesByConversation.has(p)){const X=Array.from(this._sparseMessagesByConversation.get(p).values());if(z=this._findMessageBySequenceAndRandom({messageList:X,random:v,sequence:B}),z)return z.isRevoked=!0,z.revoker=N,z}}_findMessageBySequenceAndRandom({messageList:p,sequence:B,random:v}){for(let N=0;N0){const X=new Map([...O,...z.entries()]);this._messagesByConversation.set(v,X),this._updateLatestMessageSentByMe(v),this._updateLatestMessageSentByPeer(v)}return N}storeSparseMessageList(p){if(p.length===0)return;const{conversationID:B}=p[0],v=p.length;this._sparseMessagesByConversation.has(B)||this._sparseMessagesByConversation.set(B,new Map);const N=this._sparseMessagesByConversation.get(B);for(let O=0;O=0;N--)if(v[N].flow==="out"){this._setLatestMsgSentByMe(p,v[N]);break}}}_updateLatestMessageSentByPeer(p){var B;const v=Array.from(((B=this._messagesByConversation.get(p))===null||B===void 0?void 0:B.values())||[]);if(v.length!==0&&p.startsWith("C2C")){for(let N=v.length-1;N>=0;N--)if(v[N].flow==="in"){this._setLatestMsgSentByPeer(p,v[N]);break}}}_getUniqueIdOfMessage(p){const{from:B,to:v,random:N,sequence:O,time:z}=p;return`${B}-${v}-${N}-${O}-${z}`}_setLatestMsgSentByPeer(p,B){this._latestMessageSentByPeerMap.set(p,B)}_setLatestMsgSentByMe(p,B){this._latestMessageSentByMeMap.set(p,B)}getLatestMsgSentByPeer(p){return this._latestMessageSentByPeerMap.get(p)}getLatestMsgSentByMe(p){return this._latestMessageSentByMeMap.get(p)}addRandomOfSentMessage(p){this._randomOfSentMessageList.add(p)}removeRandomOfSentMessage(p){this._randomOfSentMessageList.delete(p)}updateNickAndAvatarOfSentMessage(p){const{conversationID:B="",latestAvatar:v,latestNick:N,isSentByMe:O=!0}=p,z=this._messagesByConversation.get(B);if(!z)return;const X=Array.from(z.values()),rA=O?"out":"in";X.forEach(DA=>{const{nick:GA,avatar:VA,flow:ee}=DA;ee===rA&&(GA!==N&&(DA.nick=N),VA!==v&&(DA.avatar=v))})}isInMessageList(p){var B;const{conversationID:v}=p;if(!v||!this._messagesByConversation.has(v))return!1;const N=this._getUniqueIdOfMessage(p);return(B=this._messagesByConversation.get(v))===null||B===void 0?void 0:B.has(N)}isMessageSentByCurrentInstance(p){const{random:B}=p;return this._randomOfSentMessageList.has(B)}getContinuousMessagesByConversation(){return this._messagesByConversation}getLocalMessageList(p){const B=this._messagesByConversation.get(p);return B?[...B.values()]:[]}getSparseMessageList(p){const B=this._sparseMessagesByConversation.get(p);return B?[...B.values()]:[]}_reset(){this._messagesByConversation.clear(),this._latestMessageSentByPeerMap.clear(),this._latestMessageSentByMeMap.clear(),this._randomOfSentMessageList.clear()}_dispose(){this._reset(),ye.notificationCenter.unSubscribeInnerEvent(ui.LOGOUT,this._reset,this),ye.notificationCenter.unSubscribeInnerEvent(ui.DESTROY,this._dispose,this)}};function aa(p,B){const v=$g.getConversation(p);if(v?.lastMessage){const{lastMessage:N}=v,{lastTime:O,lastSequence:z,version:X}=N,{time:rA,sequence:DA,messageVersion:GA,elements:VA,cloudCustomData:ee}=B;O===rA&&z===DA&&X!==GA&&(N.type=VA[0].type,N.payload=VA[0].content,N.messageForShow=jI(N.type,N.payload),N.cloudCustomData=ee,N.version=GA,$g.updateConversation(p,{lastMessage:N}))}}class tc{init(){js.getInstance().registerApi({apiName:"modifyMessage",context:this})}modifyMessage(B){return pA(this,void 0,void 0,function*(){const{to:v,payload:N,sequence:O,conversationType:z,random:X,time:rA,from:DA,type:GA}=B;if(this._canModifyMessageElement(GA)){const VA=B?._elements||[];VA.length>=1&&(VA[0].type=GA,VA[0].content=N)}try{let VA=null,ee=null;if(z===dr.CONV_C2C?VA=yield kr(B):z===dr.CONV_GROUP&&(VA=yield rl(B)),VA){let Ee=`${z}${v}`;return v===qn()&&z===dr.CONV_C2C&&(Ee=`${z}${DA}`),ee={conversationType:z,from:DA,to:v,time:rA,random:X,sequence:O,elements:VA?.elements,cloudCustomData:VA?.cloudCustomData,messageVersion:VA?.messageVersion,conversationID:Ee},this._handleModifyMessageSuccess(ee),{code:0,data:{message:B},successLog:{message:`to:${v}`}}}}catch(VA){const{errorCode:ee}=VA||{};throw new rs({functionName:"modifyMessage",code:ee,moreMessage:`to:${v}`})}})}_handleModifyMessageSuccess(B){const{conversationID:v}=B,{isUpdated:N,message:O}=ye.message.messageDataHandler.modifyConversationMessage(v,B);N===!0&&ye.notificationCenter.emitOuterEvent(Dn.MESSAGE_MODIFIED,{name:Dn.MESSAGE_MODIFIED,data:[O]}),ye.notificationCenter.emitInnerEvent(ui.MESSAGE_MODIFIED,{conversationID:v,message:O}),aa(v,B)}_canModifyMessageElement(B){return[Xa.MSG_TEXT,Xa.MSG_CUSTOM,Xa.MSG_LOCATION,Xa.MSG_FACE].includes(B)}}class lg{init(){const{notificationCenter:B}=ye,{InnerEventSubType:v}=B;tn.getInstance().registerWorkflowStep(nr.RECEIVE_C2C_NEW_MESSAGE,Vt.HANDLE_C2C_NEW_MESSAGE,this._handleC2CMessagePush,this),tn.getInstance().registerWorkflowStep(nr.RECEIVE_C2C_NEW_MESSAGE,Vt.EMIT_C2C_MESSAGE_EVENT,this._emitMessageEventsAfterReceiveNewMessage,this),tn.getInstance().registerWorkflowStep(nr.SYNC_SERVER_INFO_AFTER_RE_ONLINE,Vt.EMIT_C2C_MESSAGE_EVENT,this._emitMessageEventsAfterSyncUnreadMessage,this),B.subscribeInnerEvent(ui.MESSAGE_PUSH,v.C2C_REALTIME_MESSAGE,this._executeReceiverNewMessageWorkFlow,this),B.subscribeInnerEvent(ui.MESSAGE_PUSH,v.C2C_MESSAGE_MODIFIED,this._handleC2CMessageModify,this),B.subscribeInnerEvent(ui.DESTROY,this._dispose,this)}_executeReceiverNewMessageWorkFlow(B){tn.getInstance().executeWorkflow(nr.RECEIVE_C2C_NEW_MESSAGE,B)}_handleC2CMessagePush(B){const v=B.data||{},{messageDataHandler:N}=ye.message||{},O=[],z=new Map;return v.C2cMsgArray.forEach(X=>{const rA=this._generateC2CMessage(X);this._updateMessageProfile(rA);let DA=rA.isModified===1;N.isMessageSentByCurrentInstance(rA)?rA.isModified=DA:DA=!1,rA._onlineOnlyFlag?N.isMessageSentByCurrentInstance(rA)||O.push(rA):sl(rA)&&(N.storeConversationMessage(rA)&&Gc({conversationUpdateFields:z,message:rA}),N.isMessageSentByCurrentInstance(rA)&&!DA||O.push(rA))}),{conversationUpdateFieldList:[...z.values()],messages:O}}_emitMessageEventsAfterReceiveNewMessage(B){var v;const{messages:N=[]}=((v=B.result)===null||v===void 0?void 0:v[Vt.HANDLE_C2C_NEW_MESSAGE])||{};this._emitMessageEvents(N)}_emitMessageEventsAfterSyncUnreadMessage(B){var v;const{messages:N=[]}=((v=B.result)===null||v===void 0?void 0:v[Vt.UNREAD_MESSAGE_SYNC])||{};this._emitMessageEvents(N)}_emitMessageEvents(B){const v=B?.filter(O=>O?.isModified===!0)||[];v.length>0&&ye.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:v});const N=B?.filter(O=>!O?.isModified);N.length>0&&ye.notificationCenter.emitOuterEvent("onMessageReceived",{name:"onMessageReceived",data:N})}_generateC2CMessage(B){const v=dr.CONV_C2C,N=Nc(B),O=ye.message.messageFactory.createMessage(Object.assign(Object.assign({},N),{conversationType:v,flow:ao.IN})),{elements:z}=N;return O.setElement(z),O}_updateMessageProfile(B){var v;const{messageDataHandler:N}=ye.message||{},O=(v=ye.store.get("login"))===null||v===void 0?void 0:v.userId,{from:z,nick:X,avatar:rA,conversationID:DA=""}=B;if(z!==O){const GA=N.getLatestMsgSentByPeer(DA);if(GA){const{nick:VA,avatar:ee}=GA;r(X)||r(rA)?(B.nick=l(VA)?VA:B.nick,B.avatar=l(ee)?ee:B.avatar):X===VA&&rA===ee||(N.updateNickAndAvatarOfSentMessage({conversationID:DA,latestNick:X,latestAvatar:rA,isSentByMe:!1}),this._updateConversationUserProfile({conversationID:DA,nick:X,avatar:rA}))}}else{const GA=N.getLatestMsgSentByMe(DA);!GA||X===GA.nick&&rA===GA.avatar||N.updateNickAndAvatarOfSentMessage({conversationID:DA,latestNick:X,latestAvatar:rA,isSentByMe:!0})}}_updateConversationUserProfile(B){const{conversationID:v,nick:N,avatar:O}=B,z=$g.getConversation(v),{userProfile:X={}}=z||{};X.avatar===O&&X.nick===N||$g.updateConversation(v,{userProfile:Object.assign(Object.assign({},X),{nick:N,avatar:O})})}_updateMessageListDueToModify(B){const{conversationID:v}=B,{isUpdated:N,message:O}=ye.message.messageDataHandler.modifyConversationMessage(v,B);N===!0&&ye.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:[O]}),ye.notificationCenter.emitInnerEvent("ModifyMessageSuccess",B),aa(v,B)}_handleC2CMessageModify(B){B.C2cMsgModNotifys.forEach(v=>{var N;const O=dr.CONV_C2C;let z=Au(v);const{to:X,from:rA}=z;let DA=`${O}${X}`;X===((N=ye.store.get("login"))===null||N===void 0?void 0:N.userId)&&(DA=`${O}${rA}`),z=Object.assign({conversationType:O,conversationID:DA},z),this._updateMessageListDueToModify(z)})}_dispose(){const{notificationCenter:B}=ye,{InnerEventSubType:v}=B;ye.notificationCenter.unSubscribeInnerEvent(ui.MESSAGE_PUSH,v.C2C_REALTIME_MESSAGE,this._handleC2CMessagePush,this),ye.notificationCenter.unSubscribeInnerEvent(ui.MESSAGE_PUSH,v.C2C_MESSAGE_MODIFIED,this._handleC2CMessageModify,this),ye.notificationCenter.unSubscribeInnerEvent(ui.DESTROY,this._dispose,this)}}class fI{init(){const{notificationCenter:B}=ye,{InnerEventSubType:v}=B;tn.getInstance().registerWorkflowStep(nr.RECEIVE_GROUP_NEW_MESSAGE,Vt.HANDLE_GROUP_NEW_MESSAGE,this._handleGroupMessagePush,this),tn.getInstance().registerWorkflowStep(nr.RECEIVE_GROUP_NEW_MESSAGE,Vt.EMIT_GROUP_MESSAGE_EVENT,this._emitMessageEvents,this),B.subscribeInnerEvent(ui.MESSAGE_PUSH,v.GROUP_REALTIME_MESSAGE,this._executeReceiverNewMessageWorkFlow,this),B.subscribeInnerEvent(ui.MESSAGE_PUSH,v.GROUP_MESSAGE_MODIFIED,this._handleGroupMessageModify,this),B.subscribeInnerEvent(ui.DESTROY,this._dispose,this)}_executeReceiverNewMessageWorkFlow(B){this._canExecuteReceiverNewMessageWorkFlow(B)&&tn.getInstance().executeWorkflow(nr.RECEIVE_GROUP_NEW_MESSAGE,B)}_handleGroupMessagePush(B){const v=B.data||{},{messageDataHandler:N}=ye.message,O=[],z=new Map,X=v?.GroupMsgArray;return X?.forEach(rA=>{if(rA.GroupInfo.NotVisible===1)return;const DA=this._generateGroupMessage(rA);this.updateMessageProfile(DA);let GA=DA.isModified===1;N.isMessageSentByCurrentInstance(DA)?DA.isModified=GA:GA=!1,DA._onlineOnlyFlag?N.isMessageSentByCurrentInstance(DA)||O.push(DA):sl(DA)&&N.storeConversationMessage(DA)&&(O.push(DA),Gc({conversationUpdateFields:z,message:DA}))}),{conversationUpdateFieldList:[...z.values()],messages:O}}_emitMessageEvents(B){var v;const{messages:N}=((v=B.result)===null||v===void 0?void 0:v[Vt.HANDLE_GROUP_NEW_MESSAGE])||{},O=N?.filter(X=>X?.isModified===!0)||[];O.length>0&&ye.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:O});const z=N?.filter(X=>!X?.isModified)||[];z.length>0&&ye.notificationCenter.emitOuterEvent("onMessageReceived",{name:"onMessageReceived",data:z})}_generateGroupMessage(B){const v=dr.CONV_GROUP,N=lo(B),O=ye.message.messageFactory.createMessage(Object.assign(Object.assign({},N),{conversationType:v,flow:ao.IN})),{elements:z}=N;return O.setElement(z),O}updateMessageProfile(B){var v;const{messageDataHandler:N}=ye.message||{},O=(v=ye.store.get("login"))===null||v===void 0?void 0:v.userId,{from:z,nick:X,avatar:rA,conversationID:DA="",_elements:GA}=B;if(z===O){const VA=N.getLatestMsgSentByMe(DA);!VA||X===VA.nick&&rA===VA.avatar||N.updateNickAndAvatarOfSentMessage({conversationID:DA,latestNick:X,latestAvatar:rA,isSentByMe:!0})}else if(z===hs.CONV_SYSTEM){const{operationType:VA,memberInfoList:ee,operatorInfo:Ee}=GA;let We={};if(Rs(ee)?Rs(Ee)||(We=Ee):[sa.JOINED,sa.KICKED,sa.ADMIN_SET,sa.ADMIN_CANCELED].includes(VA)&&(We=Object.assign({},ee[0])),!Rs(We)){const{nick:ot="",avatar:at=""}=We;B.nick=ot,B.avatar=at}}}_updateMessageListDueToModify(B){const{conversationID:v}=B,{isUpdated:N,message:O}=ye.message.messageDataHandler.modifyConversationMessage(v,B);N===!0&&ye.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:[O]}),aa(v,B)}_handleGroupMessageModify(B){B.GroupMsgModNotifys.forEach(v=>{const N=dr.CONV_GROUP;let O=eu(v);const{topicID:z,groupID:X}=O,rA=z||X,DA=`${N}${rA}`;O=Object.assign({conversationType:N,conversationID:DA,to:rA},O),this._updateMessageListDueToModify(O)})}_dispose(){const{notificationCenter:B}=ye,{InnerEventSubType:{GROUP_REALTIME_MESSAGE:v,GROUP_MESSAGE_MODIFIED:N}}=B;B.unSubscribeInnerEvent(ui.MESSAGE_PUSH,v,this._handleGroupMessagePush,this),B.unSubscribeInnerEvent(ui.MESSAGE_PUSH,N,this._handleGroupMessageModify,this),B.unSubscribeInnerEvent(ui.DESTROY,this._dispose,this)}_canExecuteReceiverNewMessageWorkFlow(B){var v,N;const{GroupId:O,GroupType:z}=((N=(v=B?.GroupMsgArray)===null||v===void 0?void 0:v[0])===null||N===void 0?void 0:N.GroupInfo)||{},X=z===ME.GRP_AVCHATROOM;return!(!Za.getGroup(O)&&X)}}var PE=new class{constructor(){this.c2cMessageReceiver=new lg,this.groupMessageReceiver=new fI}init(){this.c2cMessageReceiver.init(),this.groupMessageReceiver.init()}};const Vu={createCustomMessage:{to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1},payload:{required:!0,rules:["object"],allowEmpty:!1},cloudCustomData:{required:!1,rules:["string"],allowEmpty:!1},priority:{required:!1,rules:["string"],allowEmpty:!1},customModerationConfigurationID:{required:!1,rules:["string"],allowEmpty:!1}},sendMessage:[{key:"message",required:!0,rules:["object"],allowEmpty:!1},{key:"options",required:!1,rules:["object"],allowEmpty:!1}],createTextMessage:{to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1,customValidator:p=>!(!p.startsWith("C2C")&&!p.startsWith("GROUP"))||"conversationType is invalid."},payload:{required:!0,rules:["object"],allowEmpty:!1,customValidator:p=>function(B){var v;return typeof B?.text!="string"||typeof B.text=="string"&&((v=B?.text)===null||v===void 0?void 0:v.length)===0?"payload.text must be a string":!0}(p)}}},Ju={createCustomMessage:!0,sendMessage:!0,modifyMessage:!0};var yI=new class{constructor(){this._historyMessageListFetchAnchors=new Map,this.completedHistoryConversations=new Set}getGroupRoamingMessagesByAnchor(p){return pA(this,void 0,void 0,function*(){try{const{conversationID:B,count:v,direction:N,sequence:O,messageSequenceList:z,shouldMarkCompleted:X=!1,getType:rA}=p,DA=B.replace(_g.CONV_GROUP,""),GA=[];let VA=O;if(N===yc.BACKWARD){if(typeof O!="number")return{messageList:[],hasNoMoreHistoryMessage:!1,nextReqMessageIDFromServer:""};VA=O+v-1}const ee=yield Ul({groupID:DA,count:v,messageSequence:VA,messageSequenceList:z,getType:rA});if(ee){const{RspMsgList:Ee=[],NextReqMsgSeq:We=0,IsFinished:ot,InvisibleMsgSeq:at}=ee,Ut=`groupID:${DA} sequence:${O} reqSeq:${VA} direction:${N} complete:${ot} nextSequence:${We} remoteMsgCount:${Ee.length} invisibleSequenceList:${at}`,Jt=[];for(let Xi=0;Xi=O),Ui&&X&&this.completedHistoryConversations.add(B);const go=pI(Jt);return ye.ssoLog.info("getGroupRoamingMessagesByAnchor",Ut),{messageList:go,invisibleSequenceList:at,nextReqMessageIDFromServer:We,hasNoMoreHistoryMessage:Ui,serverGroupTipList:GA}}}catch(B){const{errorCode:v,errorInfo:N}=B||{};throw new rs({code:v,message:N})}})}clearHistoryMessageListFetchAnchors(p){this._historyMessageListFetchAnchors.delete(p)}isHistoryMessageFetchCompleted(p){return this.completedHistoryConversations.has(p)}_parseMessage(p){var B;const v=_g.CONV_GROUP;p.Event===4&&(p.MsgBody.MsgType=hs.MSG_GRP_TIP);const N=lo(p),O=BI.createMessage(Object.assign(Object.assign({},N),{conversationType:v,flow:"in"}));return wc(((B=N.elements)===null||B===void 0?void 0:B.content)||{},O),O.setElement(N.elements),O}getC2CRoamingMessagesByAnchor(p){return pA(this,void 0,void 0,function*(){var B;try{const{conversationID:v,count:N,messageID:O,time:z,direction:X,shouldMarkCompleted:rA=!1}=p;let DA=z,GA="";if(!z){const Ee=O?ye.message.messageDataHandler.findMessage(O):null;if(DA=Ee?.time||0,O&&this._historyMessageListFetchAnchors.has(v)){const We=this._historyMessageListFetchAnchors.get(v);DA=We.lastMessageTime,GA=We.messageKey}}const VA=v.replace(_g.CONV_C2C,""),ee=yield bc({count:N,lastMessageTime:DA,messageKey:GA,peerAccount:VA,direction:X});if(ee){const{MsgList:Ee=[],Complete:We,MsgKey:ot,LastMsgTime:at}=ee;this._historyMessageListFetchAnchors.set(v,{messageKey:ot,lastMessageTime:at});const Ut=[];for(let Xi=0;Xi{const{tag:O,value:z}=N;O&&O.indexOf(Ig)>-1?v.profileCustomField.push({key:O,value:z}):Fl.has(O)&&(v[Fl.get(O)]=z)}),Object.assign(Object.assign({},Ya),v)}parseProfileItem(p=[]){const B=[];return p.forEach(v=>{B.push({tag:v.Tag,value:v.Value})}),B}parseProfileList(p=[]){const B=[];return p.forEach(v=>{B.push({tag:v.Tag,value:v.ValueBytes})}),B}convertParamsToProfile(p){const B=[];return Object.keys(p).forEach(v=>{v!==ar&&B.push({tag:Ur[v.toUpperCase()],value:p[v]})}),p.profileCustomField&&h(p.profileCustomField)&&p.profileCustomField.forEach(v=>{B.push({tag:v.key,value:v.value})}),B}normalizeProfileFields(p){const B={},v=[];return p.forEach(N=>{const{tag:O,value:z}=N;if(O&&O.indexOf(Ig)>-1&&v.push({key:O,value:z}),Fl.has(O)&&z!==void 0){const X=Fl.get(O);B[X]=z}}),v.length>0&&(B.profileCustomField=v),B}};const{generateProtocolData:DI}=ye.common;function iu(p){return pA(this,void 0,void 0,function*(){const B="profile.portrait_get_all",v={From_Account:qn(),UserItem:[]};p.forEach(X=>{v.UserItem.push({CustomSequence:0,StandardSequence:0,To_Account:X})});const N=DI({servcmd:B,data:v}),O=`${N.head.seq}${B}`,z=yield ye.channel.sendPacket(N,{requestId:O});if(z)return function(X){const{ActionStatus:rA,ErrorCode:DA,ErrorDisplay:GA,ErrorInfo:VA,UserProfileItem:ee}=X,Ee=[];return ee.map(We=>{const{To_Account:ot,CustomSequence:at,ResultCode:Ut,ResultInfo:Jt,StandardSequence:Ui,ProfileItem:go}=We,Xi=ha.parseProfileItem(go);Ee.push({userId:ot,customSequence:at,resultCode:Ut,resultInfo:Jt,standardSequence:Ui,profileItem:Xi})}),{actionStatus:rA,errorCode:DA,errorDisplay:GA,errorInfo:VA,userProfile:Ee}}(z)})}function Ba(p){return Aa.getFriendMap().has(p)}const{isEmpty:cl}=ye.utils;class xE{constructor(){this._strangerProfileMap=new Map}init(){js.getInstance().registerApi({apiName:"getMyProfile",context:this}),js.getInstance().registerApi({apiName:"getUserProfile",context:this}),js.getInstance().registerApi({apiName:"updateMyProfile",context:this}),this.createProfile=ha.createProfile.bind(ha);const{notificationCenter:B}=ye;tn.getInstance().registerWorkflowStep(nr.SYNC_SERVER_INFO_AFTER_LOGIN,Vt.USER_PROFILE_SYNC,this.getMyProfileCacheThenServer,this),B.subscribeInnerEvent(ui.MESSAGE_PUSH,B.InnerEventSubType.PROFILE_MODIFIED,this._onProfileDataModify,this),B.subscribeInnerEvent(ui.LOGOUT,this._reset,this),B.subscribeInnerEvent(ui.DESTROY,this._dispose,this)}getMyProfile(){return pA(this,void 0,void 0,function*(){try{const B=qn(),v=yield iu([B]);if(v){const N=this._handleProfileFormResponse(v)[0];return Aa.getUserProfileMap().set(B,N),{code:0,data:N}}}catch(B){const{errorCode:v,errorInfo:N}=B;throw new rs({functionName:"getMyProfile",code:v,message:N})}})}getUserProfile(B){return pA(this,void 0,void 0,function*(){try{let{userIDList:v}=B;const{userIdListToRequest:N,profileFromCache:O}=this._filterRequestAndCacheUsers(v);if(N.length===0)return{code:0,data:O,successLog:{message:`userIDList.length:${v.length}`}};N.length>Fg&&(ye.ssoLog.warn("getUserProfile","userIdListToRequest.length > 1000"),N.length=Fg);const{data:z,error:X}=yield this._batchFetchUserProfiles(N),rA=N.length,DA=z.length,GA=rA-DA;if(O.length===0&&rA===GA&&!cl(X))throw X;if(h(z))return z.forEach(ee=>{Ba(ee.userID)?Aa.getUserProfileMap().set(ee.userID,ee):this._strangerProfileMap.set(ee.userID,ee)}),{code:0,data:z.concat(O),successLog:{message:`getUserProfile query:${rA} success:${DA} fail:${GA} from cache:${O.length}`}}}catch(v){throw new rs(v)}})}getMyProfileCacheThenServer(){return pA(this,void 0,void 0,function*(){const B=qn(),v=Aa.getUserProfileMap().has(B);return v?{code:0,data:v}:this.getMyProfile()})}updateMyProfile(B){return pA(this,void 0,void 0,function*(){const v=qn(),N={};for(const z in B)B[z]!==void 0&&(N[z]=B[z]);const O=ha.convertParamsToProfile(N);try{yield function(GA){return pA(this,void 0,void 0,function*(){const VA="profile.portrait_set",ee=DI({servcmd:VA,data:GA}),Ee=`${ee.head.seq}${VA}`,We=yield ye.channel.sendPacket(ee,{requestId:Ee});if(We){const{ActionStatus:ot,ErrorCode:at,ErrorDisplay:Ut,ErrorInfo:Jt}=We;return{actionStatus:ot,errorCode:at,errorDisplay:Ut,errorInfo:Jt}}})}({From_Account:v,ProfileItem:O});const X=Aa.getUserProfile(v);let rA;rA=X?Object.assign(Object.assign({},X),N):ha.createProfile(v,O);const DA=!vg(X,rA,["lastUpdatedTime"]);return rA.lastUpdatedTime=Date.now(),Aa.getUserProfileMap().set(v,rA),DA&&this._emitProfileUpdated(rA),{code:0,data:rA,successLog:{message:`profileArray: ${ye.utils.safeStringify(O)}`}}}catch(z){const{errorCode:X,errorInfo:rA}=z;throw new rs({functionName:"updateMyProfile",code:X,message:rA,moreMessage:`params: ${ye.utils.safeStringify(B)}`})}})}updateMyNickAndAvatar(B){return pA(this,void 0,void 0,function*(){const v=qn(),N=Date.now(),O=Aa.getUserProfile(v);let z={};z=O?Object.assign(O,B):ha.createProfile(v,B),z.lastUpdatedTime=N,Aa.getUserProfileMap().set(v,z)})}_onProfileDataModify(B){const v=function(z){const{Profile_Account:X,PushType:rA,ProfileList:DA}=z;return{userId:X,pushType:rA,profileList:ha.parseProfileList(DA)}}(B.ProfileDataMod[0]);if(cl(v))return;const{isProfileUpdated:N,profile:O}=this._handleProfileModified(v);N&&this._emitProfileUpdated(O)}_emitProfileUpdated(B){ye.notificationCenter.emitInnerEvent(ui.PROFILE_UPDATE,{name:ui.PROFILE_UPDATE,data:[B]}),ye.notificationCenter.emitOuterEvent(Dn.PROFILE_UPDATED,{name:Dn.PROFILE_UPDATED,data:[B]}),$g.updateConversation(`C2C${B?.userID}`,{userProfile:B})}_dispose(){const{notificationCenter:B}=ye;B.unSubscribeInnerEvent(ui.LOGOUT,this._reset,this),B.unSubscribeInnerEvent(ui.MESSAGE_PUSH,B.InnerEventSubType.PROFILE_MODIFIED,this._onProfileDataModify,this),B.unSubscribeInnerEvent(ui.DESTROY,this._dispose,this),this._reset()}_handleProfileModified(B){const{userId:v,profileList:N}=B,O=Aa.getUserProfile(v);if(!(qn()===v||Ba(v)&&O))return{isProfileUpdated:!1,profile:null};const z=ha.normalizeProfileFields(N),X=Object.keys(z).some(VA=>VA===ar?this._isCustomFieldChanged(O.profileCustomField,z.profileCustomField):O[VA]!==z[VA]);if(!X)return{isProfileUpdated:!1,profile:O};const rA=Date.now(),DA=Object.prototype.hasOwnProperty.call(z,ar)?this._mergeProfileCustomField(O.profileCustomField,z.profileCustomField):O.profileCustomField,GA=Object.assign(Object.assign(Object.assign({},O),z),{profileCustomField:DA,lastUpdatedTime:rA});return Aa.getUserProfileMap().set(v,GA),{isProfileUpdated:X,profile:GA}}_filterRequestAndCacheUsers(B){const v=[],N=[];return B.forEach(O=>{const z=Aa.getUserProfileMap().has(O);Ba(O)&&z?N.push(Aa.getUserProfile(O)):this._isStrangerAndProfileValid(O)?N.push(this._strangerProfileMap.get(O)):v.push(O)}),{userIdListToRequest:v,profileFromCache:N}}_handleProfileFormResponse(B){const{userProfile:v}=B;if(!Array.isArray(v))return[];const N=v.filter(z=>z.userId!=="@TLS#NOT_FOUND"&&z.userId!==""&&!cl(z.profileItem)),O=Date.now();return N.map(z=>{const X=ha.createProfile(z.userId,z.profileItem);return X.lastUpdatedTime=O,X})}_isStrangerAndProfileValid(B){var v;if(!Ba(B)){const{lastUpdatedTime:N=0}=this._strangerProfileMap.get(B)||{},O=((v=ye.store.get("cloudConfig"))===null||v===void 0?void 0:v.stranger_profile_expiration_time)||6e5;return Date.now()-N<=O}return!1}_chunkUserIDList(B,v){return Array.from({length:Math.ceil(B.length/v)},(N,O)=>B.slice(O*v,(O+1)*v))}_batchFetchUserProfiles(B){return pA(this,void 0,void 0,function*(){const v=[],N=[];let O={};return this._chunkUserIDList(B,100).forEach(z=>{v.push(iu(z))}),(yield Promise.allSettled(v)).forEach(z=>{if(z.status==="fulfilled"){const X=z.value,rA=this._handleProfileFormResponse(X);h(rA)&&N.push(...rA)}else if(z.status==="rejected"){const{code:X,message:rA}=z.reason||{};O={errorCode:X,message:rA}}}),{data:N,error:O}})}_isCustomFieldChanged(B=[],v=[]){if(!h(v)||v.length===0)return!1;if(!h(B)||B.length===0)return!0;const N=new Map(B.map(O=>[O.key,O.value]));return v.some(O=>N.get(O.key)!==O.value)}_mergeProfileCustomField(B=[],v=[]){const N=h(B)?B.map(O=>Object.assign({},O)):[];return h(v)&&v.length!==0&&v.forEach(({key:O,value:z})=>{const X=N.find(rA=>rA.key===O);X?X.value=z:N.push({key:O,value:z})}),N}_reset(){Aa.getUserProfileMap().clear(),this._strangerProfileMap.clear()}}const ou=new Map,YE=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];for(let p=0,B=YE.length;p>(-2*z&6)):0)O="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(O);try{return decodeURIComponent(escape(v))}catch(N){return console.warn(N),""}}const{isEmpty:su}=ye.utils,{generateProtocolData:Pt}=ye.common;function Hu(p){return pA(this,void 0,void 0,function*(){const B="im_open_status.ws_get_user_status",v=Pt({servcmd:B,data:{To_Account:p}}),N=`${v.head.seq}${B}`,O=yield ye.channel.sendPacket(v,{requestId:N});if(O)return function(z){const{ErrorCode:X,ErrorInfo:rA,ErrorList:DA=[],UserStatusList:GA=[]}=z,VA=GA.map(Ee=>{const{To_Account:We,Status:ot,CustomStatus:at,Detail:Ut=[]}=Ee;return{userID:We,statusType:ot,customStatus:Jr(at),onlineDevices:qu(Ut)}}),ee=DA.map(Ee=>{const{To_Account:We,Invalid_Account:ot,ErrorCode:at,ErrorInfo:Ut}=Ee;return{userID:su(ot)?We:ot,code:at,message:Ut}});return{errorCode:X,errorInfo:rA,successUserList:VA,failureUserList:ee}}(O)})}function qu(p){const B=[];return p?.forEach(v=>{const{Platform:N,Status:O}=v;O==="Online"&&B.push(N)}),B}class fC{constructor(){this._customStatus=""}init(){const{notificationCenter:B}=ye;js.getInstance().registerApi({apiName:"getUserStatus",context:this}),js.getInstance().registerApi({apiName:"setSelfStatus",context:this}),js.getInstance().registerApi({apiName:"subscribeUserStatus",context:this}),js.getInstance().registerApi({apiName:"unsubscribeUserStatus",context:this}),tn.getInstance().registerWorkflowStep(nr.SYNC_SERVER_INFO_AFTER_RE_ONLINE,Vt.USER_STATUS_UPDATE,this._onReOnline,this),B.subscribeInnerEvent(ui.MESSAGE_PUSH,B.InnerEventSubType.USER_STATUS_UPDATE,this._onUserStatusUpdate,this),B.subscribeInnerEvent(ui.LOGOUT,this._reset,this),B.subscribeInnerEvent(ui.DESTROY,this._dispose,this)}setSelfStatus(B){return pA(this,void 0,void 0,function*(){const v=qn(),{customStatus:N}=B;try{return yield function(O){return pA(this,void 0,void 0,function*(){const z="im_open_status.ws_set_custom_status",X=Pt({servcmd:z,data:{CustomStatus:O}}),rA=`${X.head.seq}${z}`,DA=yield ye.channel.sendPacket(X,{requestId:rA});if(DA){const{ErrorCode:GA,ErrorInfo:VA}=DA;return{errorCode:GA,errorInfo:VA}}})}(N),this._customStatus=N,{code:0,data:{userID:v,statusType:ic,customStatus:N},successLog:{message:`customStatus: ${N}`}}}catch(O){const{errorCode:z,errorInfo:X}=O;throw new rs({functionName:"setSelfStatus",code:z,message:X})}})}getUserStatus(B){return pA(this,void 0,void 0,function*(){const{userIDList:v=[]}=B;if(this._isOnlyMeInArray(v))return this._getMyStatus();const N=yield this._getUserStatus(v);return Object.assign(Object.assign({},N),{successLog:{message:`userIDList length: ${v.length}`}})})}setCustomStatus(B){const v=Jr(B);this._customStatus=v}subscribeUserStatus(B){return pA(this,void 0,void 0,function*(){try{const{userIDList:v=[]}=B;this._checkBusinessCapabilityBits("subscribeUserStatus");const N=this._getMaxUserCount("subscribe"),O=this._sliceUserIDList(v,N),z=yield function(rA){return pA(this,void 0,void 0,function*(){const{channel:DA}=ye,GA="im_open_status.ws_status_subscribe",VA=Pt({servcmd:GA,data:{To_Account:rA}}),ee=`${VA.head.seq}${GA}`;return yield DA.sendPacket(VA,{requestId:ee})})}(O),X=this._parseResponse(z);return{code:0,data:{failureUserList:X},successLog:{message:`userID length:${v.length} failCount: ${X.length}`}}}catch(v){const{errorCode:N}=v;throw new rs({functionName:"subscribeUserStatus",code:N})}})}unsubscribeUserStatus(B){return pA(this,void 0,void 0,function*(){try{this._checkBusinessCapabilityBits("unsubscribeUserStatus");const{userIDList:v=[]}=B,N=this._getMaxUserCount("unsubscribe"),O=this._sliceUserIDList(v,N),z=yield function(rA){return pA(this,void 0,void 0,function*(){const{channel:DA}=ye,GA="im_open_status.ws_status_unsubscribe";let VA={};VA=rA.length===0?{UnsubscribeAll:1}:{To_Account:rA};const ee=Pt({servcmd:GA,data:VA}),Ee=`${ee.head.seq}${GA}`;return yield DA.sendPacket(ee,{requestId:Ee})})}(O),X=this._parseResponse(z);return{code:0,data:{failureUserList:X},successLog:{message:`userID length:${v.length} failCount: ${X.length}`}}}catch(v){const{errorCode:N}=v;throw new rs({functionName:"unsubscribeUserStatus",code:N})}})}_onUserStatusUpdate(B){const{UserStatusList:v=[]}=B||{},N=v.map(O=>{const{To_Account:z,Status:X,CustomStatus:rA,Platform:DA}=O,GA={userID:z,statusType:X,customStatus:Jr(rA)};return DA&&(GA.onlineDevices=DA),GA});this._emitUserStatusUpdatedEvent(N)}_onReOnline(B){const v=Jr(B.data.customStatus);if(this._customStatus===v)return;this._customStatus=v;const N={userID:qn(),statusType:ic,customStatus:v};this._emitUserStatusUpdatedEvent(N)}_emitUserStatusUpdatedEvent(B){ye.notificationCenter.emitOuterEvent(Dn.USER_STATUS_UPDATED,{name:Dn.USER_STATUS_UPDATED,data:B})}_sliceUserIDList(B,v){return B.slice(0,v)}_parseResponse(B){const{ErrorList:v=[]}=B;return v.map(N=>{const{To_Account:O,Invalid_Account:z,ErrorCode:X,ErrorInfo:rA}=N;return{userID:ye.utils.isEmpty(z)?O:z,code:X,message:rA}})}_checkBusinessCapabilityBits(B){if(!ye.store.get("commercialConfig").get(_r))throw new rs({functionName:B,code:Lo.NO_USE,replacement1:B})}_getMaxUserCount(B){const v=ye.store.get("cloudConfig")||{},N={query:{key:"status_query_count",default:500},subscribe:{key:"status_sub_count",default:100},unsubscribe:{key:"status_unsub_count",default:100}},{key:O,default:z}=N[B],X=v[O]||z;return parseInt(X,10)}_getMyStatus(){return{code:0,data:{successUserList:[{userID:qn(),statusType:ic,customStatus:this._customStatus}],failureUserList:[]}}}_getUserStatus(B){return pA(this,void 0,void 0,function*(){try{this._checkBusinessCapabilityBits("getUserStatus");const v=this._getMaxUserCount("query"),N=this._sliceUserIDList(B,v),O=yield Hu(N),{successUserList:z,failureUserList:X}=O||{};return{code:0,data:{successUserList:z,failureUserList:X}}}catch(v){const{errorCode:N}=v;throw new rs({functionName:"getUserStatus",code:N})}})}_isOnlyMeInArray(B){const v=qn();return B.length===1&&B.indexOf(v)>-1}_dispose(){const{notificationCenter:B}=ye;B.unSubscribeInnerEvent(ui.MESSAGE_PUSH,B.InnerEventSubType.USER_STATUS_UPDATE,this._onUserStatusUpdate,this),B.unSubscribeInnerEvent(ui.DESTROY,this._dispose,this),B.unSubscribeInnerEvent(ui.LOGOUT,this._reset,this),this._reset()}_reset(){this._customStatus=""}}const q={getUserProfile:{userIDList:{required:!0,rules:["array"],allowEmpty:!1}},updateMyProfile:{nick:{required:!1,rules:["string"],allowEmpty:!0},avatar:{required:!1,rules:["string"],allowEmpty:!0},gender:{required:!1,rules:["string"],allowEmpty:!0},selfSignature:{required:!1,rules:["string"],allowEmpty:!0},allowType:{required:!1,rules:["string"],allowEmpty:!0},birthday:{required:!1,rules:["number"],allowEmpty:!1},language:{required:!1,rules:["string"],allowEmpty:!0},messageSettings:{required:!1,rules:["string"],allowEmpty:!0},adminForbidType:{required:!1,rules:["string"],allowEmpty:!0},level:{required:!1,rules:["number"],allowEmpty:!1},role:{required:!1,rules:["number"],allowEmpty:!0},profileCustomField:{required:!1,rules:["array"],allowEmpty:!0,customValidator:function(p){for(const B of p){if(typeof B!="object")return"Each item in profileCustomField must be an object";if(typeof B?.key!="string")return"Each item.key in profileCustomField must be a string";if(!B?.key.startsWith(Ig))return'Each item.key in profileCustomField must start with "Tag_Profile_Custom"'}return!0}}},setSelfStatus:{customStatus:{required:!0,rules:["string"],allowEmpty:!0}},getUserStatus:{userIDList:{required:!0,rules:["array"],allowEmpty:!1}},subscribeUserStatus:{userIDList:{required:!0,rules:["array"],allowEmpty:!1}},unsubscribeUserStatus:{userIDList:{required:!1,rules:["array"],allowEmpty:!0}}},L={getMyProfile:!0,getUserProfile:!0,updateMyProfile:!0,setSelfStatus:!0,getUserStatus:!0,subscribeUserStatus:!0,unsubscribeUserStatus:!0};class oA{constructor(){this.userProfile=new xE,this.userStatus=new fC,this.userProfile.init(),this.userStatus.init(),Mc({auth:L,params:q})}}function b(p){const B=[];if(!l(p))return B;const v=p.length;if(v===0)return B;for(let N=v-1;N>=0;N--)p[N]==="1"&&B.push(2**(v-N-1));return B}var x,tA,uA;(function(p){p.NOT_START="notStart",p.PENDING="pending",p.RESOLVED="resolved",p.REJECTED="rejected"})(x||(x={})),function(p){p[p.C2C=1]="C2C",p[p.GROUP=2]="GROUP"}(tA||(tA={})),function(p){p[p.C2C=8]="C2C",p[p.GROUP=2]="GROUP"}(uA||(uA={}));class wA{constructor(){this._name="SyncConversationHandler",this._pagingStatus=x.NOT_START,this._pagingTimeStamp=0,this._pagingStartIndex=0,this._pagingPinnedTimeStamp=0,this._pagingPinnedStartIndex=0}init(){const{notificationCenter:B}=ye;tn.getInstance().registerWorkflowStep(nr.SYNC_SERVER_INFO_AFTER_RE_ONLINE,Vt.CONVERSATION_RECOVER,this._syncConversationList,this),tn.getInstance().registerWorkflowStep(nr.SYNC_SERVER_INFO_AFTER_LOGIN,Vt.CONVERSATION_LIST_SYNC,this._syncConversationListAfterLogin,this),B.subscribeInnerEvent(ui.LOGOUT,this._reset,this),B.subscribeInnerEvent(ui.DESTROY,this._dispose,this),ye.ssoLog.debug(`${this._name}.init`)}isSyncCompleted(){return this._pagingStatus===x.RESOLVED}_syncConversationListAfterLogin(){return pA(this,void 0,void 0,function*(){return this._pagingStatus=x.NOT_START,this._pagingTimeStamp=0,this._pagingStartIndex=0,this._pagingPinnedTimeStamp=0,this._pagingPinnedStartIndex=0,this._syncConversationList()})}_syncConversationList(){return pA(this,void 0,void 0,function*(){const{ssoLog:B,utils:{safeStringify:v}}=ye;B.debug("_syncConversationList","start");try{const N=yield this._pagingGetConversationList(!0);this._pagingStatus=x.RESOLVED;const{conversationList:O=[]}=N||{};return B.info("_syncConversationList",`success count:${O.length}`),N}catch(N){const O=new rs(N);B.error("_syncConversationList",`fail ${v(N)}`,{error:O})}})}_pagingGetConversationList(B){return pA(this,void 0,void 0,function*(){try{const v=[];this._pagingStatus=x.PENDING;const N=yield function(ee){return pA(this,void 0,void 0,function*(){const{fromAccount:Ee,pagingTimeStamp:We,pagingStartIndex:ot,pagingPinnedTimeStamp:at,pagingPinnedStartIndex:Ut}=ee;return Zg({servcmd:"recentcontact.page_get",data:{AssistFlags:31,MsgAssistFlags:15,OrderType:1,From_Account:Ee,StartIndex:ot,TimeStamp:We,TopStartIndex:Ut,TopTimeStamp:at}})})}({fromAccount:qn(),pagingTimeStamp:B?this._pagingTimeStamp:0,pagingStartIndex:B?this._pagingStartIndex:0,pagingPinnedTimeStamp:B?this._pagingPinnedTimeStamp:0,pagingPinnedStartIndex:B?this._pagingPinnedStartIndex:0}),{CompleteFlag:O,SessionItem:z=[],TimeStamp:X,StartIndex:rA,TopTimeStamp:DA,TopStartIndex:GA}=N||{};let VA=[];if(O===1&&(this._pagingStatus=x.RESOLVED),z.length>0&&(VA=this._getConversationOptions(z),v.push(...VA)),ye.notificationCenter.emitInnerEvent(ui.SYNC_CONVERSATION_LIST,{conversationUpdateFieldList:VA}),this._pagingTimeStamp=X,this._pagingStartIndex=rA,this._pagingPinnedTimeStamp=DA,this._pagingPinnedStartIndex=GA,O!==1){const{conversationList:ee}=yield this._pagingGetConversationList(B);v.push(...ee)}return{conversationList:v}}catch(v){throw v}})}_getConversationOptions(B){const{utils:{isUndefined:v}}=ye,N=this._convertConversationKey(B);return this._filterValidConversations(N).map(O=>(v(O.lastMsg)&&(O.lastMsg={elements:[]}),O.type===tA.C2C?this._assembleC2COption(O):this._assembleGroupOption(O)))}_filterValidConversations(B){return B.filter(({type:v,userID:N})=>v===tA.C2C&&!function(O){let z;return O.startsWith(hs.CONV_C2C)&&(z=O.replace(hs.CONV_C2C,"")),z==="@TLS#ERROR"||z==="@TLS#NOT_FOUND"}(N)||v===2)}_assembleC2COption(B){var v,N,O,z,X,rA,DA,GA;const VA=this._createUserprofile(B);return{conversationID:`${hs.CONV_C2C}${B.userID}`,type:hs.CONV_C2C,lastMessage:{lastTime:B.time,lastSequence:B.sequence,fromAccount:B.lastC2CMsgFromAccount,type:!((v=B.lastMsg)===null||v===void 0)&&v.elements[0]?(N=B.lastMsg)===null||N===void 0?void 0:N.elements[0].type:null,payload:!((O=B.lastMsg)===null||O===void 0)&&O.elements[0]?this._amendLayersOverLimitProp(B.lastMsg.elements[0].content):null,cloudCustomData:((rA=(X=(z=B.lastMsg)===null||z===void 0?void 0:z.elements)===null||X===void 0?void 0:X[0])===null||rA===void 0?void 0:rA.cloudCustomData)||"",isRevoked:B.lastMessageFlag===uA.C2C,onlineOnlyFlag:!1,nick:"",nameCard:"",version:0,isPeerRead:this._computeIsPeerRead(B),revoker:((GA=(DA=B.lastMsg)===null||DA===void 0?void 0:DA.revokerInfo)===null||GA===void 0?void 0:GA.revoker)||null},unreadCount:0,userProfile:VA,peerReadTime:B.peerReadTime,isPinned:B.isPinned===1,customData:B.customMark||"",markList:b(B.standardMark),conversationGroupList:[],remark:B.friendRemark||"",messageRemindType:this._transMsgRemindType(B.messageRemindType)}}_createUserprofile(B){var v;const{userID:N,nick:O,peerAvatar:z}=B,X=[{tag:"Tag_Profile_IM_Nick",value:O},{tag:"Tag_Profile_IM_Image",value:z}];return(v=ye.user.userProfile)===null||v===void 0?void 0:v.createProfile(N,X)}_computeIsPeerRead(B){const v=qn(),{lastC2CMsgFromAccount:N,time:O,c2cPeerReadTime:z}=B;return N===v&&O<=z}_assembleGroupOption(B){var v,N,O,z,X;return{conversationID:`${hs.CONV_GROUP}${B.groupID}`,type:hs.CONV_GROUP,lastMessage:Object.assign(Object.assign({lastTime:B.time,lastSequence:B.sequence,fromAccount:B.msgGroupFromAccount},this._patchTypeAndPayload(B)),{cloudCustomData:((O=(N=(v=B.lastMsg)===null||v===void 0?void 0:v.elements)===null||N===void 0?void 0:N[0])===null||O===void 0?void 0:O.cloudCustomData)||"",isRevoked:B.lastMessageFlag===uA.GROUP,onlineOnlyFlag:!1,nick:B.msgGroupFromNickName||"",nameCard:B.msgGroupFromCardName||"",revoker:((X=(z=B.lastMsg)===null||z===void 0?void 0:z.revokerInfo)===null||X===void 0?void 0:X.revoker)||null}),groupProfile:{groupID:B.groupID,name:B.groupNick,avatar:B.groupImage,type:B.groupType,nextMessageSeq:B.nextMessageSeq},unreadCount:this._computeGroupUnreadCount(B),peerReadTime:0,isPinned:B.isPinned===1,version:0,customData:B.customMark||"",markList:b(B.standardMark),conversationGroupList:[],messageRemindType:this._transMsgRemindType(B.messageRemindType),subType:B.groupType}}_convertConversationKey(B){return B.map(v=>({type:v.Type,userID:v.To_Account,nick:v.C2cNick,peerAvatar:v.C2cImage,time:v.MsgTimeStamp,sequence:v.MsgSeq,lastC2CMsgFromAccount:v.LastC2cMsgFrom_Account,lastMsg:this._convertLastMsgKey(v.LastMsg),lastMessageFlag:v.LastMsgFlags,c2cPeerReadTime:v.C2cPeerReadTime,peerReadTime:v.C2cPeerReadTime,friendRemark:v.C2cRemark,isPinned:v.TopFlags,standardMark:v.StandardMark,customMark:v.CustomMark,messageRemindType:v.MsgRecvOption,groupID:v.ToAccount,groupNick:v.GroupNick,groupImage:v.GroupImage,groupType:v.GroupType,nextMessageSeq:v.GroupNextMsgSeq,msgGroupFromAccount:v.MsgGroupFrom_Account,msgGroupFromNickName:v.MsgGroupFromNickName,msgGroupFromCardName:v.MsgGroupFromCardName,unreadCount:v.UnreadMsgCount,noUnreadCount:v.GroupIgnoredUnreadSeqCount}))}_convertLastMsgKey(B){var v,N,O;const{utils:{isEmpty:z}}=ye;if(z(B))return null;let X="",rA=null;if(!z(B.GroupTips)){const{From_Account:DA,GroupName:GA}=((v=B.GroupTips)===null||v===void 0?void 0:v.GroupInfo)||{};X=hs.MSG_GRP_TIP,rA=Object.assign(Object.assign({},this._parseContent(X,B.GroupTips.MsgBody)),{groupProfile:{from:DA,groupName:GA}})}return B.MsgBody&&(X=(N=B.MsgBody[0])===null||N===void 0?void 0:N.MsgType,rA=this._parseContent(X,B.MsgBody[0])),{event:B.Event,elements:[{type:X,content:rA,cloudCustomData:B.CloudCustomData}],revokerInfo:{revoker:(O=B.RevokerInfo)===null||O===void 0?void 0:O.Revoker_Account}}}_parseContent(B,v){var N;if(!v)return v;const O=ye.message.messageFactory.getElementClass(B);return O?(N=O.parseServerPushElement(v))===null||N===void 0?void 0:N.content:v}_amendLayersOverLimitProp(B){const{LayersOverLimit:v}=B;return Do(B,["LayersOverLimit"]).layersOverLimit=v===1,B}_transMsgRemindType(B){let v="";return B===0?v=hs.MSG_REMIND_ACPT_AND_NOTE:B===1?v=hs.MSG_REMIND_DISCARD:B===2?v=hs.MSG_REMIND_ACPT_NOT_NOTE:B===3&&(v=hs.NOT_RECEIVE_OFFLINE_PUSH_EXCEPT_AT),v}_patchTypeAndPayload(B){var v;const{utils:{isUndefined:N}}=ye,{event:O,elements:z=[]}=B.lastMsg||{};return N(O)?{type:z[0]?z[0].type:null,payload:z[0]?this._amendLayersOverLimitProp(z[0].content):null}:{type:hs.MSG_GRP_TIP,payload:((v=z?.[0])===null||v===void 0?void 0:v.content)||{}}}_computeGroupUnreadCount(B){const{unreadCount:v=0,noUnreadCount:N=0}=B,O=v-N;return O>0?O:0}_reset(){this._pagingStatus=x.NOT_START,this._pagingTimeStamp=0,this._pagingStartIndex=0,this._pagingPinnedTimeStamp=0,this._pagingPinnedStartIndex=0}_dispose(){this._reset();const{notificationCenter:B}=ye;B.unSubscribeInnerEvent(ui.LOGOUT,this._reset,this),B.unSubscribeInnerEvent(ui.DESTROY,this._dispose,this)}}class XA{constructor(){this.syncConversationHandler=new wA,this.syncConversationHandler.init()}}console.log(`TencentCloudLiteChat.VERSION:${Zr}`);var pe={create:function(p){var B,v;const{SDKAppID:N,testEnv:O=!1,devMode:z=!1,unlimitedAVChatRoom:X=!1,scene:rA="",oversea:DA=!1,instance:GA,disableIndependentDomain:VA=!1,proxyServer:ee=""}=p;let Ee=N;if(!function(ot){if(typeof ot=="number")return!0;const at=Number(ot);return!Number.isNaN(at)}(Ee))return console.error("Create SDK instance failed. Failed to parse the SDKAppID, please check the arguments"),null;if(Ee=Number(Ee),ws.has(Ee))return ws.get(Ee);let We=null;if(GA)We=GA,We._workflowManager&&tn.setInstance(We._workflowManager),We._pluginManager&&We._pluginManager.installBuiltInPlugin(Er),GA.isReady()&&((v=(B=tn.getInstance()).executeWorkflow)===null||v===void 0||v.call(B,nr.SYNC_SERVER_INFO_AFTER_LOGIN));else{const ot=function(){function Xi(){return(65536*(1+Math.random())|0).toString(16).substring(1)}return`${Xi()+Xi()}${Xi()}${Xi()}${Xi()}${Xi()}${Xi()}${Xi()}`}();ye.init({sdkAppId:Ee,instanceId:ot,testEnv:O,devMode:z,unlimitedAVChatRoom:X,disableIndependentDomain:VA,scene:rA,oversea:DA,sdkEdition:Ou,version:Zr,proxyServer:ee}),tn.getInstance().init(),ye.message=new gl,ye.user=new oA,ye.login=new Ac,ye.conversation=new XA,Oo.getInstance().installBuiltInPlugin(Er),We=js.getInstance().exposeApiForClient(),We._workflowManager=tn.getInstance(),We._pluginManager=Oo.getInstance();const{utils:{IS_WORKER_AVAILABLE:at,USER_AGENT:Ut,getPlatformType:Jt,isIOSWebView:Ui}}=ye,go=`instanceID:${ot} SDKAppID:${N} platform:${HA} host:${Jt()} isIOSWebView:${Ui} workerAvailable:${at} UserAgent:${Ut}`;ye.ssoLog.info("sdkConstruct",go)}return ws.set(Ee,We),We},TSignaling:no,EVENT:Dn,VERSION:Zr,TYPES:hs};return pe})}(tY)),tY.exports}var TL={exports:{}},iY={exports:{}},brA=iY.exports,W8;function krA(){return W8||(W8=1,function(t,i){(function(r,l){t.exports=l()})(brA,function(){function r(A,e){return e.forEach(function(o){o&&typeof o!="string"&&!Array.isArray(o)&&Object.keys(o).forEach(function(a){if(a!=="default"&&!(a in A)){var c=Object.getOwnPropertyDescriptor(o,a);Object.defineProperty(A,a,c.get?c:{enumerable:!0,get:function(){return o[a]}})}})}),Object.freeze(A)}var l=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof mg<"u"?mg:typeof self<"u"?self:{};function I(A){return A&&A.__esModule&&Object.prototype.hasOwnProperty.call(A,"default")?A.default:A}var h=function(A){return A&&A.Math===Math&&A},f=h(typeof globalThis=="object"&&globalThis)||h(typeof window=="object"&&window)||h(typeof self=="object"&&self)||h(typeof l=="object"&&l)||h(typeof l=="object"&&l)||function(){return this}()||Function("return this")(),w={},_=function(A){try{return!!A()}catch{return!0}},G=!_(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),U=!_(function(){var A=function(){}.bind();return typeof A!="function"||A.hasOwnProperty("prototype")}),j=U,lA=Function.prototype.call,sA=j?lA.bind(lA):function(){return lA.apply(lA,arguments)},mA={},IA={}.propertyIsEnumerable,cA=Object.getOwnPropertyDescriptor,TA=cA&&!IA.call({1:2},1);mA.f=TA?function(A){var e=cA(this,A);return!!e&&e.enumerable}:IA;var WA,ue,Ce=function(A,e){return{enumerable:!(1&A),configurable:!(2&A),writable:!(4&A),value:e}},xe=U,Qe=Function.prototype,ut=Qe.call,ft=xe&&Qe.bind.bind(ut,ut),je=xe?ft:function(A){return function(){return ut.apply(A,arguments)}},Mt=je,jt=Mt({}.toString),Et=Mt("".slice),re=function(A){return Et(jt(A),8,-1)},qe=_,yt=re,Me=Object,Oe=je("".split),gt=qe(function(){return!Me("z").propertyIsEnumerable(0)})?function(A){return yt(A)==="String"?Oe(A,""):Me(A)}:Me,Fi=function(A){return A==null},To=Fi,io=TypeError,Eo=function(A){if(To(A))throw new io("Can't call method on "+A);return A},Vs=gt,ki=Eo,ns=function(A){return Vs(ki(A))},jo=typeof document=="object"&&document.all,Ao=jo===void 0&&jo!==void 0?function(A){return typeof A=="function"||A===jo}:function(A){return typeof A=="function"},Zt=Ao,oo=function(A){return typeof A=="object"?A!==null:Zt(A)},bi=f,vs=Ao,HA=function(A,e){return arguments.length<2?(o=bi[A],vs(o)?o:void 0):bi[A]&&bi[A][e];var o},ce=je({}.isPrototypeOf),Ve=f.navigator,Ot=Ve&&Ve.userAgent,nt=Ot?String(Ot):"",It=f,ei=nt,ti=It.process,be=It.Deno,Ze=ti&&ti.versions||be&&be.version,wt=Ze&&Ze.v8;wt&&(ue=(WA=wt.split("."))[0]>0&&WA[0]<4?1:+(WA[0]+WA[1])),!ue&&ei&&(!(WA=ei.match(/Edge\/(\d+)/))||WA[1]>=74)&&(WA=ei.match(/Chrome\/(\d+)/))&&(ue=+WA[1]);var Nt=ue,Oi=Nt,po=_,No=f.String,so=!!Object.getOwnPropertySymbols&&!po(function(){var A=Symbol("symbol detection");return!No(A)||!(Object(A)instanceof Symbol)||!Symbol.sham&&Oi&&Oi<41}),Go=so&&!Symbol.sham&&typeof Symbol.iterator=="symbol",An=HA,rn=Ao,Es=ce,an=Object,Do=Go?function(A){return typeof A=="symbol"}:function(A){var e=An("Symbol");return rn(e)&&Es(e.prototype,an(A))},pA=String,Jn=function(A){try{return pA(A)}catch{return"Object"}},Qr=Ao,ds=Jn,zr=TypeError,Pi=function(A){if(Qr(A))return A;throw new zr(ds(A)+" is not a function")},Rs=Pi,or=Fi,en=function(A,e){var o=A[e];return or(o)?void 0:Rs(o)},wn=sA,qt=Ao,yg=oo,On=TypeError,Gn={exports:{}},Js=f,pr=Object.defineProperty,Pn=function(A,e){try{pr(Js,A,{value:e,configurable:!0,writable:!0})}catch{Js[A]=e}return e},mr=f,mo=Pn,gn="__core-js_shared__",Sl=Gn.exports=mr[gn]||mo(gn,{});(Sl.versions||(Sl.versions=[])).push({version:"3.47.0",mode:"global",copyright:"© 2014-2025 Denis Pushkarev (zloirock.ru), 2025 CoreJS Company (core-js.io)",license:"https://github.com/zloirock/core-js/blob/v3.47.0/LICENSE",source:"https://github.com/zloirock/core-js"});var cn=Gn.exports,fr=cn,Ls=function(A,e){return fr[A]||(fr[A]=e||{})},Jc=Eo,ms=Object,as=function(A){return ms(Jc(A))},Ru=as,Wa=je({}.hasOwnProperty),Cs=Object.hasOwn||function(A,e){return Wa(Ru(A),e)},sg=je,HI=0,As=Math.random(),$i=sg(1.1.toString),pc=function(A){return"Symbol("+(A===void 0?"":A)+")_"+$i(++HI+As,36)},ng=Ls,Dg=Cs,ua=pc,bo=so,Zr=Go,_o=f.Symbol,Hc=ng("wks"),Hn=Zr?_o.for||_o:_o&&_o.withoutSetter||ua,Hs=function(A){return Dg(Hc,A)||(Hc[A]=bo&&Dg(_o,A)?_o[A]:Hn("Symbol."+A)),Hc[A]},Sg=sA,mc=oo,fn=Do,Ga=en,In=function(A,e){var o,a;if(e==="string"&&qt(o=A.toString)&&!yg(a=wn(o,A))||qt(o=A.valueOf)&&!yg(a=wn(o,A))||e!=="string"&&qt(o=A.toString)&&!yg(a=wn(o,A)))return a;throw new On("Can't convert object to primitive value")},fs=TypeError,Ea=Hs("toPrimitive"),yn=function(A,e){if(!mc(A)||fn(A))return A;var o,a=Ga(A,Ea);if(a){if(e===void 0&&(e="default"),o=Sg(a,A,e),!mc(o)||fn(o))return o;throw new fs("Can't convert object to primitive value")}return e===void 0&&(e="number"),In(A,e)},ba=yn,Sa=Do,$=function(A){var e=ba(A,"string");return Sa(e)?e:e+""},K=oo,vA=f.document,qA=K(vA)&&K(vA.createElement),Ae=function(A){return qA?vA.createElement(A):{}},me=Ae,Pe=!G&&!_(function(){return Object.defineProperty(me("div"),"a",{get:function(){return 7}}).a!==7}),Fe=G,rt=sA,Ct=mA,Rt=Ce,Yt=ns,Ii=$,ct=Cs,xt=Pe,Ji=Object.getOwnPropertyDescriptor;w.f=Fe?Ji:function(A,e){if(A=Yt(A),e=Ii(e),xt)try{return Ji(A,e)}catch{}if(ct(A,e))return Rt(!rt(Ct.f,A,e),A[e])};var Ki={},qs=G&&_(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),Mi=oo,zo=String,Mg=TypeError,sr=function(A){if(Mi(A))return A;throw new Mg(zo(A)+" is not an object")},yr=G,xn=Pe,Ml=qs,Ks=sr,aI=$,Wg=TypeError,fc=Object.defineProperty,wu=Object.getOwnPropertyDescriptor,Ma="enumerable",vl="configurable",ye="writable";Ki.f=yr?Ml?function(A,e,o){if(Ks(A),e=aI(e),Ks(o),typeof A=="function"&&e==="prototype"&&"value"in o&&ye in o&&!o[ye]){var a=wu(A,e);a&&a[ye]&&(A[e]=o.value,o={configurable:vl in o?o[vl]:a[vl],enumerable:Ma in o?o[Ma]:a[Ma],writable:!1})}return fc(A,e,o)}:fc:function(A,e,o){if(Ks(A),e=aI(e),Ks(o),xn)try{return fc(A,e,o)}catch{}if("get"in o||"set"in o)throw new Wg("Accessors not supported");return"value"in o&&(A[e]=o.value),A};var fe=Ki,vg=Ce,rg=G?function(A,e,o){return fe.f(A,e,vg(1,o))}:function(A,e,o){return A[e]=o,A},Rg={exports:{}},Dn=G,Dr=Cs,ui=Function.prototype,no=Dn&&Object.getOwnPropertyDescriptor,qc=Dr(ui,"name"),zg={PROPER:qc&&function(){}.name==="something",CONFIGURABLE:qc&&(!Dn||Dn&&no(ui,"name").configurable)},wg=Ao,Yr=cn,yc=je(Function.toString);wg(Yr.inspectSource)||(Yr.inspectSource=function(A){return yc(A)});var Kc,ag,_u,SE=Yr.inspectSource,_g=Ao,ka=f.WeakMap,Dc=_g(ka)&&/native code/.test(String(ka)),ME=pc,La=Ls("keys"),sa=function(A){return La[A]||(La[A]=ME(A))},Tg={},gI=Dc,hs=f,Lo=oo,da=rg,nr=Cs,Vt=cn,Kt=sa,Ng=Tg,cI="Object already initialized",rr=hs.TypeError,qI=hs.WeakMap;if(gI||Vt.state){var za=Vt.state||(Vt.state=new qI);za.get=za.get,za.has=za.has,za.set=za.set,Kc=function(A,e){if(za.has(A))throw new rr(cI);return e.facade=A,za.set(A,e),e},ag=function(A){return za.get(A)||{}},_u=function(A){return za.has(A)}}else{var na=Kt("state");Ng[na]=!0,Kc=function(A,e){if(nr(A,na))throw new rr(cI);return e.facade=A,da(A,na,e),e},ag=function(A){return nr(A,na)?A[na]:{}},_u=function(A){return nr(A,na)}}var un={set:Kc,get:ag,has:_u,enforce:function(A){return _u(A)?ag(A):Kc(A,{})},getterFor:function(A){return function(e){var o;if(!Lo(e)||(o=ag(e)).type!==A)throw new rr("Incompatible receiver, "+A+" required");return o}}},Sn=je,Tu=_,Gg=Ao,Ua=Cs,jc=G,KI=zg.CONFIGURABLE,vE=SE,lI=un.enforce,Nu=un.get,Rl=String,Sc=Object.defineProperty,Gu=Sn("".slice),bu=Sn("".replace),wl=Sn([].join),rs=jc&&!Tu(function(){return Sc(function(){},"length",{value:8}).length!==8}),gs=String(String).split("String"),ud=Rg.exports=function(A,e,o){Gu(Rl(e),0,7)==="Symbol("&&(e="["+bu(Rl(e),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),o&&o.getter&&(e="get "+e),o&&o.setter&&(e="set "+e),(!Ua(A,"name")||KI&&A.name!==e)&&(jc?Sc(A,"name",{value:e,configurable:!0}):A.name=e),rs&&o&&Ua(o,"arity")&&A.length!==o.arity&&Sc(A,"length",{value:o.arity});try{o&&Ua(o,"constructor")&&o.constructor?jc&&Sc(A,"prototype",{writable:!1}):A.prototype&&(A.prototype=void 0)}catch{}var a=lI(A);return Ua(a,"source")||(a.source=wl(gs,typeof e=="string"?e:"")),A};Function.prototype.toString=ud(function(){return Gg(this)&&Nu(this).source||vE(this)},"toString");var II=Rg.exports,uI=Ao,RE=Ki,Ed=II,_l=Pn,Sr=function(A,e,o,a){a||(a={});var c=a.enumerable,d=a.name!==void 0?a.name:e;if(uI(o)&&Ed(o,d,a),a.global)c?A[e]=o:_l(e,o);else{try{a.unsafe?A[e]&&(c=!0):delete A[e]}catch{}c?A[e]=o:RE.f(A,e,{value:o,enumerable:!1,configurable:!a.nonConfigurable,writable:!a.nonWritable})}return A},Mc={},Wc=Math.ceil,tn=Math.floor,ws=Math.trunc||function(A){var e=+A;return(e>0?tn:Wc)(e)},Ca=ws,Xr=function(A){var e=+A;return e!=e||e===0?0:Ca(e)},zc=Xr,dd=Math.max,Zg=Math.min,gg=function(A,e){var o=zc(A);return o<0?dd(o+e,0):Zg(o,e)},wE=Xr,Xg=Math.min,qn=function(A){var e=wE(A);return e>0?Xg(e,9007199254740991):0},Ar=qn,Fa=function(A){return Ar(A.length)},Cd=ns,lC=gg,ku=Fa,jI=function(A){return function(e,o,a){var c=Cd(e),d=ku(c);if(d===0)return!A&&-1;var C,y=lC(a,d);if(A&&o!=o){for(;d>y;)if((C=c[y++])!=C)return!0}else for(;d>y;y++)if((A||y in c)&&c[y]===o)return A||y||0;return!A&&-1}},Zc={includes:jI(!0),indexOf:jI(!1)},Xc=Cs,WI=ns,EI=Zc.indexOf,$c=Tg,Al=je([].push),va=function(A,e){var o,a=WI(A),c=0,d=[];for(o in a)!Xc($c,o)&&Xc(a,o)&&Al(d,o);for(;e.length>c;)Xc(a,o=e[c++])&&(~EI(d,o)||Al(d,o));return d},bg=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],ys=va,Kn=bg.concat("length","prototype");Mc.f=Object.getOwnPropertyNames||function(A){return ys(A,Kn)};var vc={};vc.f=Object.getOwnPropertySymbols;var zI=HA,ZI=Mc,_E=vc,rh=sr,IC=je([].concat),ah=zI("Reflect","ownKeys")||function(A){var e=ZI.f(rh(A)),o=_E.f;return o?IC(e,o(A)):e},el=Cs,kg=ah,ro=w,uC=Ki,TE=function(A,e,o){for(var a=kg(e),c=uC.f,d=ro.f,C=0;CC;)QI.f(A,o=c[C++],a[o]);return A};var Ug,ec=HA("document","documentElement"),md=sr,LE=Gl,Nc=bg,Au=Tg,lo=ec,UE=Ae,$a="prototype",eu="script",Pu=sa("IE_PROTO"),Gc=function(){},pI=function(A){return"<"+eu+">"+A+""},sl=function(A){A.write(pI("")),A.close();var e=A.parentWindow.Object;return A=null,e},nl=function(){try{Ug=new ActiveXObject("htmlfile")}catch{}nl=typeof document<"u"?document.domain&&Ug?sl(Ug):function(){var e,o=UE("iframe"),a="java"+eu+":";return o.style.display="none",lo.appendChild(o),o.src=String(a),(e=o.contentWindow.document).open(),e.write(pI("document.F=Object")),e.close(),e.F}():sl(Ug);for(var A=Nc.length;A--;)delete nl[$a][Nc[A]];return nl()};Au[Pu]=!0;var xa=Object.create||function(A,e){var o;return A!==null?(Gc[$a]=md(A),o=new Gc,Gc[$a]=null,o[Pu]=A):o=nl(),e===void 0?o:LE.f(o,e)},FE=Hs,ra=xa,Mn=Ki.f,kr=FE("unscopables"),rl=Array.prototype;rl[kr]===void 0&&Mn(rl,kr,{configurable:!0,value:ra(null)});var Ul=function(A){rl[kr][A]=!0},bc=Zc.includes,OE=Ul;_n({target:"Array",proto:!0,forced:_(function(){return!Array(1).includes()})},{includes:function(A){return bc(this,A,arguments.length>1?arguments[1]:void 0)}}),OE("includes");var kc,xu,pC,tu={},lh=!_(function(){function A(){}return A.prototype.constructor=null,Object.getPrototypeOf(new A)!==A.prototype}),Yu=Cs,mI=Ao,al=as,mC=lh,aa=sa("IE_PROTO"),tc=Object,lg=tc.prototype,fI=mC?tc.getPrototypeOf:function(A){var e=al(A);if(Yu(e,aa))return e[aa];var o=e.constructor;return mI(o)&&e instanceof o?o.prototype:e instanceof tc?lg:null},PE=_,Vu=Ao,Ju=oo,yI=fI,gl=Sr,Lr=Hs("iterator"),Ur=!1;[].keys&&("next"in(pC=[].keys())?(xu=yI(yI(pC)))!==Object.prototype&&(kc=xu):Ur=!0);var Ig=!Ju(kc)||PE(function(){var A={};return kc[Lr].call(A)!==A});Ig&&(kc={}),Vu(kc[Lr])||gl(kc,Lr,function(){return this});var ar={IteratorPrototype:kc,BUGGY_SAFARI_ITERATORS:Ur},_r=Ki.f,ic=Cs,Fg=Hs("toStringTag"),Ya=function(A,e,o){A&&!o&&(A=A.prototype),A&&!ic(A,Fg)&&_r(A,Fg,{configurable:!0,value:e})},Fl=ar.IteratorPrototype,ha=xa,DI=Ce,iu=Ya,Ba=tu,cl=function(){return this},xE=function(A,e,o,a){var c=e+" Iterator";return A.prototype=ha(Fl,{next:DI(+!a,o)}),iu(A,c,!1),Ba[c]=cl,A},ou=je,YE=Pi,Jr=oo,su=function(A){return Jr(A)||A===null},Pt=String,Hu=TypeError,qu=function(A,e,o){try{return ou(YE(Object.getOwnPropertyDescriptor(A,e)[o]))}catch{}},fC=oo,q=Eo,L=function(A){if(su(A))return A;throw new Hu("Can't set "+Pt(A)+" as a prototype")},oA=Object.setPrototypeOf||("__proto__"in{}?function(){var A,e=!1,o={};try{(A=qu(Object.prototype,"__proto__","set"))(o,[]),e=o instanceof Array}catch{}return function(a,c){return q(a),L(c),fC(a)&&(e?A(a,c):a.__proto__=c),a}}():void 0),b=_n,x=sA,tA=Ao,uA=xE,wA=fI,XA=oA,pe=Ya,p=rg,B=Sr,v=tu,N=zg.PROPER,O=zg.CONFIGURABLE,z=ar.IteratorPrototype,X=ar.BUGGY_SAFARI_ITERATORS,rA=Hs("iterator"),DA="keys",GA="values",VA="entries",ee=function(){return this},Ee=function(A,e,o,a,c,d,C){uA(o,e,a);var y,S,k,V=function(Ye){if(Ye===c&&$A)return $A;if(!X&&Ye&&Ye in CA)return CA[Ye];switch(Ye){case DA:case GA:case VA:return function(){return new o(this,Ye)}}return function(){return new o(this)}},J=e+" Iterator",gA=!1,CA=A.prototype,MA=CA[rA]||CA["@@iterator"]||c&&CA[c],$A=!X&&MA||V(c),Be=e==="Array"&&CA.entries||MA;if(Be&&(y=wA(Be.call(new A)))!==Object.prototype&&y.next&&(wA(y)!==z&&(XA?XA(y,z):tA(y[rA])||B(y,rA,ee)),pe(y,J,!0)),N&&c===GA&&MA&&MA.name!==GA&&(O?p(CA,"name",GA):(gA=!0,$A=function(){return x(MA,this)})),c)if(S={values:V(GA),keys:d?$A:V(DA),entries:V(VA)},C)for(k in S)(X||gA||!(k in CA))&&B(CA,k,S[k]);else b({target:e,proto:!0,forced:X||gA},S);return CA[rA]!==$A&&B(CA,rA,$A,{name:c}),v[e]=$A,S},We=function(A,e){return{value:A,done:e}},ot=ns,at=Ul,Ut=tu,Jt=un,Ui=Ki.f,go=Ee,Xi=We,Ei=G,Po="Array Iterator",es=Jt.set,pi=Jt.getterFor(Po),ji=go(Array,"Array",function(A,e){es(this,{type:Po,target:ot(A),index:0,kind:e})},function(){var A=pi(this),e=A.target,o=A.index++;if(!e||o>=e.length)return A.target=null,Xi(void 0,!0);switch(A.kind){case"keys":return Xi(o,!1);case"values":return Xi(e[o],!1)}return Xi([o,e[o]],!1)},"values"),Ws=Ut.Arguments=Ut.Array;if(at("keys"),at("values"),at("entries"),Ei&&Ws.name!=="values")try{Ui(Ws,"name",{value:"values"})}catch{}var _e=Pi,_t=as,FA=gt,Xt=Fa,En=TypeError,Ai="Reduce of empty array with no initial value",us=function(A){return function(e,o,a,c){var d=_t(e),C=FA(d),y=Xt(d);if(_e(o),y===0&&a<2)throw new En(Ai);var S=A?y-1:0,k=A?-1:1;if(a<2)for(;;){if(S in C){c=C[S],S+=k;break}if(S+=k,A?S<0:y<=S)throw new En(Ai)}for(;A?S>=0:y>S;S+=k)S in C&&(c=o(c,C[S],S,d));return c}},vi={left:us(!1),right:us(!0)},ho=_,ht=function(A,e){var o=[][A];return!!o&&ho(function(){o.call(null,e||function(){return 1},1)})},Qt=f,ug=nt,ks=re,Wi=function(A){return ug.slice(0,A.length)===A},Hr=Wi("Bun/")?"BUN":Wi("Cloudflare-Workers")?"CLOUDFLARE":Wi("Deno/")?"DENO":Wi("Node.js/")?"NODE":Qt.Bun&&typeof Bun.version=="string"?"BUN":Qt.Deno&&typeof Deno.version=="object"?"DENO":ks(Qt.process)==="process"?"NODE":Qt.window&&Qt.document?"BROWSER":"REST",oc=Hr==="NODE",is=vi.left;_n({target:"Array",proto:!0,forced:!oc&&Nt>79&&Nt<83||!ht("reduce")},{reduce:function(A){var e=arguments.length;return is(this,A,e,e>1?arguments[1]:void 0)}});var ga=vi.right;_n({target:"Array",proto:!0,forced:!oc&&Nt>79&&Nt<83||!ht("reduceRight")},{reduceRight:function(A){return ga(this,A,arguments.length,arguments.length>1?arguments[1]:void 0)}});var Qa=re,ea=Array.isArray||function(A){return Qa(A)==="Array"},H=_n,BA=ea,yA=je([].reverse),NA=[1,2];H({target:"Array",proto:!0,forced:String(NA)===String(NA.reverse())},{reverse:function(){return BA(this)&&(this.length=this.length),yA(this)}});var zA=Jn,we=TypeError,le=je([].slice),Ne=le,ge=Math.floor,Ue=function(A,e){var o=A.length;if(o<8)for(var a,c,d=1;d0;)A[c]=A[--c];c!==d++&&(A[c]=a)}else for(var C=ge(o/2),y=Ue(Ne(A,0,C),e),S=Ue(Ne(A,C),e),k=y.length,V=S.length,J=0,gA=0;J3)){if(mm)return!0;if(ni)return ni<603;var A,e,o,a,c="";for(A=65;A<76;A++){switch(e=String.fromCharCode(A),A){case 66:case 69:case 70:case 72:o=3;break;case 68:case 71:o=4;break;default:o=2}for(a=0;a<47;a++)yo.push({k:e+a,v:o})}for(yo.sort(function(d,C){return C.v-d.v}),a=0;aWn(S)?1:-1}}(A)),o=Zo(c),a=0;ao||S!=S?1/0*C:C*S},uD=Math.fround||function(A){return ID(A,11920928955078125e-23,34028234663852886e22,11754943508222875e-54)},Ov=Array,BT=Math.abs,yd=Math.pow,QT=Math.floor,ED=Math.log,pT=Math.LN2,dD={pack:function(A,e,o){var a,c,d,C=Ov(o),y=8*o-e-1,S=(1<>1,V=e===23?yd(2,-24)-yd(2,-77):0,J=A<0||A===0&&1/A<0?1:0,gA=0;for((A=BT(A))!=A||A===1/0?(c=A!=A?1:0,a=S):(a=QT(ED(A)/pT),A*(d=yd(2,-a))<1&&(a--,d*=2),(A+=a+k>=1?V/d:V*yd(2,1-k))*d>=2&&(a++,d/=2),a+k>=S?(c=0,a=S):a+k>=1?(c=(A*d-1)*yd(2,e),a+=k):(c=A*yd(2,k-1)*yd(2,e),a=0));e>=8;)C[gA++]=255&c,c/=256,e-=8;for(a=a<0;)C[gA++]=255&a,a/=256,y-=8;return C[gA-1]|=128*J,C},unpack:function(A,e){var o,a=A.length,c=8*a-e-1,d=(1<>1,y=c-7,S=a-1,k=A[S--],V=127&k;for(k>>=7;y>0;)V=256*V+A[S--],y-=8;for(o=V&(1<<-y)-1,V>>=-y,y+=e;y>0;)o=256*o+A[S--],y-=8;if(V===0)V=1-C;else{if(V===d)return o?NaN:k?-1/0:1/0;o+=yd(2,e),V-=C}return(k?-1:1)*o*yd(2,V-e)}},mT=as,Pv=gg,fT=Fa,xv=function(A){for(var e=mT(this),o=fT(e),a=arguments.length,c=Pv(a>1?arguments[1]:void 0,o),d=a>2?arguments[2]:void 0,C=d===void 0?o:Pv(d,o);C>c;)e[c++]=A;return e},yT=Ao,DT=oo,CD=oA,hD=function(A,e,o){var a,c;return CD&&yT(a=e.constructor)&&a!==o&&DT(c=a.prototype)&&c!==o.prototype&&CD(A,c),A},TQ=f,Mm=je,vm=G,Dd=Mr,ST=rg,MT=Lg,Rm=nu,BD=_,Ih=MI,vT=Xr,RT=qn,wm=ym,Yv=uD,QD=dD,_m=fI,Vv=oA,wT=xv,_T=le,Jv=hD,Sd=TE,Tm=Ya,Md=un,VE=zg.PROPER,Nm=zg.CONFIGURABLE,yC="ArrayBuffer",uh="DataView",Wu="prototype",Yi="Wrong index",Gm=Md.getterFor(yC),dn=Md.getterFor(uh),Hv=Md.set,zu=TQ[yC],zs=zu,Eh=zs&&zs[Wu],Pl=TQ[uh],nc=Pl&&Pl[Wu],JE=Object.prototype,NQ=TQ.Array,cB=TQ.RangeError,TT=Mm(wT),NT=Mm([].reverse),GQ=QD.pack,bQ=QD.unpack,qv=function(A){return[255&A]},Kv=function(A){return[255&A,A>>8&255]},pD=function(A){return[255&A,A>>8&255,A>>16&255,A>>24&255]},DC=function(A){return A[3]<<24|A[2]<<16|A[1]<<8|A[0]},lB=function(A){return GQ(Yv(A),23,4)},mD=function(A){return GQ(A,52,8)},kQ=function(A,e,o){MT(A[Wu],e,{configurable:!0,get:function(){return o(this)[e]}})},vd=function(A,e,o,a){var c=dn(A),d=wm(o),C=!!a;if(d+e>c.byteLength)throw new cB(Yi);var y=c.bytes,S=d+c.byteOffset,k=_T(y,S,S+e);return C?k:NT(k)},Rd=function(A,e,o,a,c,d){var C=dn(A),y=wm(o),S=a(+c),k=!!d;if(y+e>C.byteLength)throw new cB(Yi);for(var V=C.bytes,J=y+C.byteOffset,gA=0;gA>24)},setUint8:function(A,e){fD(this,A,e<<24>>24)}},{unsafe:!0})}else Eh=(zs=function(A){Ih(this,Eh);var e=wm(A);Hv(this,{type:yC,bytes:TT(NQ(e),0),byteLength:e}),vm||(this.byteLength=e,this.detached=!1)})[Wu],nc=(Pl=function(A,e,o){Ih(this,nc),Ih(A,Eh);var a=Gm(A),c=a.byteLength,d=vT(e);if(d<0||d>c)throw new cB("Wrong offset");if(d+(o=o===void 0?c-d:RT(o))>c)throw new cB("Wrong length");Hv(this,{type:uh,buffer:A,byteLength:o,byteOffset:d,bytes:a.bytes}),vm||(this.buffer=A,this.byteLength=o,this.byteOffset=d)})[Wu],vm&&(kQ(zs,"byteLength",Gm),kQ(Pl,"buffer",dn),kQ(Pl,"byteLength",dn),kQ(Pl,"byteOffset",dn)),Rm(nc,{getInt8:function(A){return vd(this,1,A)[0]<<24>>24},getUint8:function(A){return vd(this,1,A)[0]},getInt16:function(A){var e=vd(this,2,A,arguments.length>1&&arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(A){var e=vd(this,2,A,arguments.length>1&&arguments[1]);return e[1]<<8|e[0]},getInt32:function(A){return DC(vd(this,4,A,arguments.length>1&&arguments[1]))},getUint32:function(A){return DC(vd(this,4,A,arguments.length>1&&arguments[1]))>>>0},getFloat32:function(A){return bQ(vd(this,4,A,arguments.length>1&&arguments[1]),23)},getFloat64:function(A){return bQ(vd(this,8,A,arguments.length>1&&arguments[1]),52)},setInt8:function(A,e){Rd(this,1,A,qv,e)},setUint8:function(A,e){Rd(this,1,A,qv,e)},setInt16:function(A,e){Rd(this,2,A,Kv,e,arguments.length>2&&arguments[2])},setUint16:function(A,e){Rd(this,2,A,Kv,e,arguments.length>2&&arguments[2])},setInt32:function(A,e){Rd(this,4,A,pD,e,arguments.length>2&&arguments[2])},setUint32:function(A,e){Rd(this,4,A,pD,e,arguments.length>2&&arguments[2])},setFloat32:function(A,e){Rd(this,4,A,lB,e,arguments.length>2&&arguments[2])},setFloat64:function(A,e){Rd(this,8,A,mD,e,arguments.length>2&&arguments[2])}});Tm(zs,yC),Tm(Pl,uh);var bm={ArrayBuffer:zs,DataView:Pl},Wv=HA,GT=Lg,km=G,IB=Hs("species"),Lm=function(A){var e=Wv(A);km&&e&&!e[IB]&>(e,IB,{configurable:!0,get:function(){return this}})},bT=Lm,yD="ArrayBuffer",DD=bm[yD];_n({global:!0,constructor:!0,forced:f[yD]!==DD},{ArrayBuffer:DD}),bT(yD);var UQ=re,HE=je,Zu=function(A){if(UQ(A)==="Function")return HE(A)},SD=_n,dh=Zu,Um=_,zv=sr,FQ=gg,Zv=qn,MD=bm.ArrayBuffer,vn=bm.DataView,OQ=vn.prototype,wd=dh(MD.prototype.slice),vD=dh(OQ.getUint8),kT=dh(OQ.setUint8);SD({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:Um(function(){return!new MD(2).slice(1,void 0).byteLength})},{slice:function(A,e){if(wd&&e===void 0)return wd(zv(this),A);for(var o=zv(this).byteLength,a=FQ(A,o),c=FQ(e===void 0?o:e,o),d=new MD(Zv(c-a)),C=new vn(this),y=new vn(d),S=0;ad;d++)if((y=Ye(A[d]))&&tS(Ld,y))return y;return new wC(!1)}a=tN(A,c)}for(S=gA?A.next:a.next;!(k=$T(S,a)).done;){try{y=Ye(k.value)}catch(ve){iS(a,"throw",ve)}if(typeof y=="object"&&y&&tS(Ld,y))return y}return new wC(!1)},sS=Hs("iterator"),nS=!1;try{var s=0,n={next:function(){return{done:!!s++}},return:function(){nS=!0}};n[sS]=function(){return this},Array.from(n,function(){throw 2})}catch{}var g=function(A,e){try{if(!e&&!nS)return!1}catch{return!1}var o=!1;try{var a={};a[sS]=function(){return{next:function(){return{done:o=!0}}}},A(a)}catch{}return o},u=SB,E=Rh.CONSTRUCTOR||!g(function(A){u.all(A).then(void 0,function(){})}),m=sA,D=Pi,M=Kr,T=DB,P=oS;_n({target:"Promise",stat:!0,forced:E},{all:function(A){var e=this,o=M.f(e),a=o.resolve,c=o.reject,d=T(function(){var C=D(e.resolve),y=[],S=0,k=1;P(A,function(V){var J=S++,gA=!1;k++,m(C,e,V).then(function(CA){gA||(gA=!0,y[J]=CA,--k||a(y))},c)}),--k||a(y)});return d.error&&c(d.value),o.promise}});var W=_n,iA=Rh.CONSTRUCTOR,EA=SB,RA=HA,kA=Ao,xA=Sr,LA=EA&&EA.prototype;if(W({target:"Promise",proto:!0,forced:iA,real:!0},{catch:function(A){return this.then(void 0,A)}}),kA(EA)){var SA=RA("Promise").prototype.catch;LA.catch!==SA&&xA(LA,"catch",SA,{unsafe:!0})}var OA=sA,JA=Pi,ae=Kr,se=DB,_i=oS;_n({target:"Promise",stat:!0,forced:E},{race:function(A){var e=this,o=ae.f(e),a=o.reject,c=se(function(){var d=JA(e.resolve);_i(A,function(C){OA(d,e,C).then(o.resolve,a)})});return c.error&&a(c.value),o.promise}});var Ti=Kr;_n({target:"Promise",stat:!0,forced:Rh.CONSTRUCTOR},{reject:function(A){var e=Ti.f(this);return(0,e.reject)(A),e.promise}});var Ft=sr,Ni=oo,cs=Kr,Se=function(A,e){if(Ft(A),Ni(e)&&e.constructor===A)return e;var o=cs.f(A);return(0,o.resolve)(e),o.promise},mt=_n,UA=Rh.CONSTRUCTOR,ri=Se;HA("Promise"),mt({target:"Promise",stat:!0,forced:UA},{resolve:function(A){return ri(this,A)}});var _s=_n,Gi=SB,Or=_,xi=HA,gr=Ao,Gt=eR,bt=Se,tE=Sr,ln=Gi&&Gi.prototype;if(_s({target:"Promise",proto:!0,real:!0,forced:!!Gi&&Or(function(){ln.finally.call({then:function(){}},function(){})})},{finally:function(A){var e=Gt(this,xi("Promise")),o=gr(A);return this.then(o?function(a){return bt(e,A()).then(function(){return a})}:A,o?function(a){return bt(e,A()).then(function(){throw a})}:A)}}),gr(Gi)){var Bo=xi("Promise").prototype.finally;ln.finally!==Bo&&tE(ln,"finally",Bo,{unsafe:!0})}var Il=oo,_C=re,Tr=Hs("match"),xg=function(A){var e;return Il(A)&&((e=A[Tr])!==void 0?!!e:_C(A)==="RegExp")},wI=_,ac=f.RegExp,nf=!wI(function(){var A=!0;try{ac(".","d")}catch{A=!1}var e={},o="",a=A?"dgimsy":"gimsy",c=function(y,S){Object.defineProperty(e,y,{get:function(){return o+=S,!0}})},d={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var C in A&&(d.hasIndices="d"),d)c(C,d[C]);return Object.getOwnPropertyDescriptor(ac.prototype,"flags").get.call(e)!==a||o!==a}),ap=sr,Va=function(){var A=ap(this),e="";return A.hasIndices&&(e+="d"),A.global&&(e+="g"),A.ignoreCase&&(e+="i"),A.multiline&&(e+="m"),A.dotAll&&(e+="s"),A.unicode&&(e+="u"),A.unicodeSets&&(e+="v"),A.sticky&&(e+="y"),e},Yl=sA,_I=Cs,iE=ce,Yg={correct:nf},dg=Va,rS=RegExp.prototype,LR=Yg.correct?function(A){return A.flags}:function(A){return Yg.correct||!iE(rS,A)||_I(A,"flags")?A.flags:Yl(dg,A)},UR=_,FR=f.RegExp,oN=UR(function(){var A=FR("a","y");return A.lastIndex=2,A.exec("abcd")!==null}),NV=oN||UR(function(){return!FR("a","y").sticky}),$U=oN||UR(function(){var A=FR("^r","gy");return A.lastIndex=2,A.exec("str")!==null}),gp={BROKEN_CARET:$U,MISSED_STICKY:NV,UNSUPPORTED_Y:oN},sN=Ki.f,nN=_,rN=f.RegExp,aN=nN(function(){var A=rN(".","s");return!(A.dotAll&&A.test(` -`)&&A.flags==="s")}),AF=_,GV=f.RegExp,eF=AF(function(){var A=GV("(?b)","g");return A.exec("b").groups.a!=="b"||"b".replace(A,"$c")!=="bc"}),rf=G,gN=f,af=je,cN=wr,bV=hD,kV=rg,LV=xa,UV=Mc.f,OR=ce,tF=xg,lN=Er,iF=LR,aS=gp,IN=function(A,e,o){o in A||sN(A,o,{configurable:!0,get:function(){return e[o]},set:function(a){e[o]=a}})},PR=Sr,xR=_,FV=Cs,uN=un.enforce,YR=Lm,oF=aN,gf=eF,OV=Hs("match"),TB=gN.RegExp,cf=TB.prototype,PV=gN.SyntaxError,sF=af(cf.exec),lf=af("".charAt),nF=af("".replace),EN=af("".indexOf),dN=af("".slice),xV=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,oE=/a/g,NB=/a/g,rF=new TB(oE)!==oE,aF=aS.MISSED_STICKY,YV=aS.UNSUPPORTED_Y,CN=rf&&(!rF||aF||oF||gf||xR(function(){return NB[OV]=!1,TB(oE)!==oE||TB(NB)===NB||String(TB(oE,"i"))!=="/a/i"}));if(cN("RegExp",CN)){for(var GB=function(A,e){var o,a,c,d,C,y,S=OR(cf,this),k=tF(A),V=e===void 0,J=[],gA=A;if(!S&&k&&V&&A.constructor===GB)return A;if((k||OR(cf,A))&&(A=A.source,V&&(e=iF(gA))),A=A===void 0?"":lN(A),e=e===void 0?"":lN(e),gA=A,oF&&"dotAll"in oE&&(a=!!e&&EN(e,"s")>-1)&&(e=nF(e,/s/g,"")),o=e,aF&&"sticky"in oE&&(c=!!e&&EN(e,"y")>-1)&&YV&&(e=nF(e,/y/g,"")),gf&&(d=function(CA){for(var MA,$A=CA.length,Be=0,Ye="",ve=[],yi=LV(null),Ge=!1,Bt=!1,hi=0,Di="";Be<=$A;Be++){if((MA=lf(CA,Be))==="\\")MA+=lf(CA,++Be);else if(MA==="]")Ge=!1;else if(!Ge)switch(!0){case MA==="[":Ge=!0;break;case MA==="(":if(Ye+=MA,dN(CA,Be+1,Be+3)==="?:")continue;sF(xV,dN(CA,Be+1))&&(Be+=2,Bt=!0),hi++;continue;case(MA===">"&&Bt):if(Di===""||FV(yi,Di))throw new PV("Invalid capture group name");yi[Di]=!0,ve[ve.length]=[Di,hi],Bt=!1,Di="";continue}Bt?Di+=MA:Ye+=MA}return[Ye,ve]}(A),A=d[0],J=d[1]),C=bV(TB(A,e),S?this:cf,GB),(a||c||J.length)&&(y=uN(C),a&&(y.dotAll=!0,y.raw=GB(function(CA){for(var MA,$A=CA.length,Be=0,Ye="",ve=!1;Be<=$A;Be++)(MA=lf(CA,Be))!=="\\"?ve||MA!=="."?(MA==="["?ve=!0:MA==="]"&&(ve=!1),Ye+=MA):Ye+="[\\s\\S]":Ye+=MA+lf(CA,++Be);return Ye}(A),o)),c&&(y.sticky=!0),J.length&&(y.groups=J)),A!==gA)try{kV(C,"source",gA===""?"(?:)":gA)}catch{}return C},hN=UV(TB),BN=0;hN.length>BN;)IN(GB,TB,hN[BN++]);cf.constructor=GB,GB.prototype=cf,PR(gN,"RegExp",GB,{constructor:!0})}YR("RegExp");var If=sA,cp=je,bB=Er,VV=Va,uf=gp,gF=xa,cF=un.get,JV=aN,HV=eF,qV=Ls("native-string-replace",String.prototype.replace),lp=RegExp.prototype.exec,QN=lp,KV=cp("".charAt),jV=cp("".indexOf),lF=cp("".replace),gS=cp("".slice),pN=function(){var A=/a/,e=/b*/g;return If(lp,A,"a"),If(lp,e,"a"),A.lastIndex!==0||e.lastIndex!==0}(),IF=uf.BROKEN_CARET,mN=/()??/.exec("")[1]!==void 0;(pN||mN||IF||JV||HV)&&(QN=function(A){var e,o,a,c,d,C,y,S=this,k=cF(S),V=bB(A),J=k.raw;if(J)return J.lastIndex=S.lastIndex,e=If(QN,J,V),S.lastIndex=J.lastIndex,e;var gA=k.groups,CA=IF&&S.sticky,MA=If(VV,S),$A=S.source,Be=0,Ye=V;if(CA&&(MA=lF(MA,"y",""),jV(MA,"g")===-1&&(MA+="g"),Ye=gS(V,S.lastIndex),S.lastIndex>0&&(!S.multiline||S.multiline&&KV(V,S.lastIndex-1)!==` -`)&&($A="(?: "+$A+")",Ye=" "+Ye,Be++),o=new RegExp("^(?:"+$A+")",MA)),mN&&(o=new RegExp("^"+$A+"$(?!\\s)",MA)),pN&&(a=S.lastIndex),c=If(lp,CA?o:S,Ye),CA?c?(c.input=gS(c.input,Be),c[0]=gS(c[0],Be),c.index=S.lastIndex,S.lastIndex+=c[0].length):S.lastIndex=0:pN&&c&&(S.lastIndex=S.global?c.index+c[0].length:a),mN&&c&&c.length>1&&If(qV,c[0],o,function(){for(d=1;d0;(a>>>=1)&&(e+=e))1&a&&(o+=e);return o},Ef=Eo,df=dF(zV),qR=dF("".slice),CF=Math.ceil,fN=function(A){return function(e,o,a){var c,d,C=HR(Ef(e)),y=WV(o),S=C.length,k=a===void 0?" ":HR(a);return y<=S||k===""?C:((d=df(k,CF((c=y-S)/k.length))).length>c&&(d=qR(d,0,c)),A?C+d:d+C)}},yN={start:fN(!1)},DN=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(nt),ZV=yN.start;_n({target:"String",proto:!0,forced:DN},{padStart:function(A){return ZV(this,A,arguments.length>1?arguments[1]:void 0)}});var hF=sA,SN=Sr,BF=cS,MN=_,vN=Hs,XV=vN("species"),QF=RegExp.prototype,KR=je,$V=Xr,Cf=Er,hf=Eo,RN=KR("".charAt),pF=KR("".charCodeAt),AJ=KR("".slice),mF=function(A){return function(e,o){var a,c,d=Cf(hf(e)),C=$V(o),y=d.length;return C<0||C>=y?A?"":void 0:(a=pF(d,C))<55296||a>56319||C+1===y||(c=pF(d,C+1))<56320||c>57343?A?RN(d,C):a:A?AJ(d,C,C+2):c-56320+(a-55296<<10)+65536}},jR={codeAt:mF(!1),charAt:mF(!0)},eJ=jR.charAt,WR=je,tJ=as,iJ=Math.floor,wN=WR("".charAt),_N=WR("".replace),TN=WR("".slice),oJ=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,sJ=/\$([$&'`]|\d{1,2})/g,fF=function(A,e,o,a,c,d){var C=o+A.length,y=a.length,S=sJ;return c!==void 0&&(c=tJ(c),S=oJ),_N(d,S,function(k,V){var J;switch(wN(V,0)){case"$":return"$";case"&":return A;case"`":return TN(e,0,o);case"'":return TN(e,C);case"<":J=c[TN(V,1,-1)];break;default:var gA=+V;if(gA===0)return k;if(gA>y){var CA=iJ(gA/10);return CA===0?k:CA<=y?a[CA-1]===void 0?wN(V,1):a[CA-1]+wN(V,1):k}J=a[gA-1]}return J===void 0?"":J})},yF=sA,nJ=sr,DF=Ao,rJ=re,SF=cS,aJ=TypeError,gJ=_d,MF=sA,zR=je,cJ=function(A,e,o,a){var c=vN(A),d=!MN(function(){var k={};return k[c]=function(){return 7},""[A](k)!==7}),C=d&&!MN(function(){var k=!1,V=/a/,J;return V.exec=function(){return k=!0,null},V[c](""),!k});if(!d||!C||o){var y=/./[c],S=e(c,""[A],function(k,V,J,gA,CA){var MA=V.exec;return MA===BF||MA===QF.exec?d&&!CA?{done:!0,value:hF(y,V,J,gA)}:{done:!0,value:hF(k,J,V,gA)}:{done:!1}});SN(String.prototype,A,S[0]),SN(QF,c,S[1])}},lJ=_,IJ=sr,vF=Ao,uJ=oo,EJ=Xr,RF=qn,Ip=Er,ZR=Eo,wF=function(A,e,o){return e+(o?eJ(A,e).length:1)},XR=en,_F=fF,TF=LR,dJ=function(A,e){var o=A.exec;if(DF(o)){var a=yF(o,A,e);return a!==null&&nJ(a),a}if(rJ(A)==="RegExp")return yF(SF,A,e);throw new aJ("RegExp#exec called on incompatible receiver")},$R=Hs("replace"),NN=Math.max,CJ=Math.min,NF=zR([].concat),GN=zR([].push),Aw=zR("".indexOf),GF=zR("".slice),hJ=function(A){return A===void 0?A:String(A)},BJ="a".replace(/./,"$0")==="$0",bF=!!/./[$R]&&/./[$R]("a","$0")==="",QJ=!lJ(function(){var A=/./;return A.exec=function(){var e=[];return e.groups={a:"7"},e},"".replace(A,"$")!=="7"});cJ("replace",function(A,e,o){var a=bF?"$":"$0";return[function(c,d){var C=ZR(this),y=uJ(c)?XR(c,$R):void 0;return y?MF(y,c,C,d):MF(e,Ip(C),c,d)},function(c,d){var C=IJ(this),y=Ip(c);if(typeof d=="string"&&Aw(d,a)===-1&&Aw(d,"$<")===-1){var S=o(e,C,y,d);if(S.done)return S.value}var k=vF(d);k||(d=Ip(d));var V,J=Ip(TF(C)),gA=Aw(J,"g")!==-1;gA&&(V=Aw(J,"u")!==-1,C.lastIndex=0);for(var CA,MA=[];(CA=dJ(C,y))!==null&&(GN(MA,CA),gA);)Ip(CA[0])===""&&(C.lastIndex=wF(y,RF(C.lastIndex),V));for(var $A="",Be=0,Ye=0;Ye=Be&&($A+=GF(y,Be,Ge)+ve,Be=Ge+yi.length)}return $A+GF(y,Be)}]},!QJ||!BJ||bF);var ew=` -\v\f\r                 \u2028\u2029\uFEFF`,pJ=Eo,mJ=Er,bN=ew,kN=je("".replace),kF=RegExp("^["+bN+"]+"),fJ=RegExp("(^|[^"+bN+"])["+bN+"]+$"),yJ=function(A){return function(e){var o=mJ(pJ(e));return 1&A&&(o=kN(o,kF,"")),2&A&&(o=kN(o,fJ,"$1")),o}},DJ={trim:yJ(3)},SJ=zg.PROPER,MJ=_,LF=ew,vJ=DJ.trim;_n({target:"String",proto:!0,forced:function(A){return MJ(function(){return!!LF[A]()||"​…᠎"[A]()!=="​…᠎"||SJ&&LF[A].name!==A})}("trim")},{trim:function(){return vJ(this)}});var cu,Bf,tw,LN={exports:{}},RJ=Mr,UN=G,TI=f,UF=Ao,FF=oo,Qf=Cs,iw=ur,FN=Jn,ON=rg,PN=Sr,OF=Lg,wJ=ce,xN=fI,up=oA,_J=Hs,TJ=pc,YN=un.enforce,kh=TI.Int8Array,pf=kh&&kh.prototype,PF=TI.Uint8ClampedArray,xF=PF&&PF.prototype,TC=kh&&xN(kh),Ud=pf&&xN(pf),NJ=Object.prototype,VN=TI.TypeError,YF=_J("toStringTag"),JN=TJ("TYPED_ARRAY_TAG"),lS="TypedArrayConstructor",Fd=RJ&&!!up&&iw(TI.opera)!=="Opera",VF=!1,kB={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},JF={BigInt64Array:8,BigUint64Array:8},ow=function(A){if(!FF(A))return!1;var e=iw(A);return Qf(kB,e)||Qf(JF,e)};for(cu in kB)(tw=(Bf=TI[cu])&&Bf.prototype)?YN(tw)[lS]=Bf:Fd=!1;for(cu in JF)(tw=(Bf=TI[cu])&&Bf.prototype)&&(YN(tw)[lS]=Bf);if((!Fd||!UF(TC)||TC===Function.prototype)&&(TC=function(){throw new VN("Incorrect invocation")},Fd))for(cu in kB)TI[cu]&&up(TI[cu],TC);if((!Fd||!Ud||Ud===NJ)&&(Ud=TC.prototype,Fd))for(cu in kB)TI[cu]&&up(TI[cu].prototype,Ud);if(Fd&&xN(xF)!==Ud&&up(xF,Ud),UN&&!Qf(Ud,YF))for(cu in VF=!0,OF(Ud,YF,{configurable:!0,get:function(){return FF(this)?this[JN]:void 0}}),kB)TI[cu]&&ON(TI[cu],JN,cu);var Od={NATIVE_ARRAY_BUFFER_VIEWS:Fd,TYPED_ARRAY_TAG:VF&&JN,aTypedArray:function(A){if(ow(A))return A;throw new VN("Target is not a typed array")},aTypedArrayConstructor:function(A){if(UF(A)&&(!up||wJ(TC,A)))return A;throw new VN(FN(A)+" is not a typed array constructor")},exportTypedArrayMethod:function(A,e,o,a){if(UN){if(o)for(var c in kB){var d=TI[c];if(d&&Qf(d.prototype,A))try{delete d.prototype[A]}catch{try{d.prototype[A]=e}catch{}}}Ud[A]&&!o||PN(Ud,A,o?e:Fd&&pf[A]||e,a)}},exportTypedArrayStaticMethod:function(A,e,o){var a,c;if(UN){if(up){if(o){for(a in kB)if((c=TI[a])&&Qf(c,A))try{delete c[A]}catch{}}if(TC[A]&&!o)return;try{return PN(TC,A,o?e:Fd&&TC[A]||e)}catch{}}for(a in kB)!(c=TI[a])||c[A]&&!o||PN(c,A,e)}},isTypedArray:ow,TypedArray:TC,TypedArrayPrototype:Ud},HN=f,IS=_,sw=g,GJ=Od.NATIVE_ARRAY_BUFFER_VIEWS,HF=HN.ArrayBuffer,Ep=HN.Int8Array,qF=!GJ||!IS(function(){Ep(1)})||!IS(function(){new Ep(-1)})||!sw(function(A){new Ep,new Ep(null),new Ep(1.5),new Ep(A)},!0)||IS(function(){return new Ep(new HF(2),1,void 0).length!==1}),bJ=oo,kJ=Math.floor,KF=Number.isInteger||function(A){return!bJ(A)&&isFinite(A)&&kJ(A)===A},LJ=Xr,UJ=RangeError,nw=function(A){var e=LJ(A);if(e<0)throw new UJ("The argument can't be less than 0");return e},FJ=RangeError,jF=function(A,e){var o=nw(A);if(o%e)throw new FJ("Wrong offset");return o},OJ=Math.round,WF=ur,PJ=yn,xJ=TypeError,rw=function(A){var e=PJ(A,"number");if(typeof e=="number")throw new xJ("Can't convert number to bigint");return BigInt(e)},zF=Ag,ZF=sA,YJ=Qh,VJ=as,XF=Fa,$F=WE,JJ=bh,AO=ZD,eO=function(A){var e=WF(A);return e==="BigInt64Array"||e==="BigUint64Array"},HJ=Od.aTypedArrayConstructor,qJ=rw,aw=function(A){var e,o,a,c,d,C,y,S,k=YJ(this),V=VJ(A),J=arguments.length,gA=J>1?arguments[1]:void 0,CA=gA!==void 0,MA=JJ(V);if(MA&&!AO(MA))for(S=(y=$F(V,MA)).next,V=[];!(C=ZF(S,y)).done;)V.push(C.value);for(CA&&J>2&&(gA=zF(gA,arguments[2])),o=XF(V),a=new(HJ(k))(o),c=eO(a),e=0;o>e;e++)d=CA?gA(V[e],e):V[e],a[e]=c?qJ(d):+d;return a},qN=ea,KN=_D,KJ=oo,jJ=Hs("species"),tO=Array,WJ=function(A){var e;return qN(A)&&(e=A.constructor,(KN(e)&&(e===tO||qN(e.prototype))||KJ(e)&&(e=e[jJ])===null)&&(e=void 0)),e===void 0?tO:e},iO=Ag,zJ=gt,ZJ=as,oO=Fa,XJ=function(A,e){return new(WJ(A))(e===0?0:e)},jN=je([].push),sO=function(A){var e=A===1,o=A===2,a=A===3,c=A===4,d=A===6,C=A===7,y=A===5||d;return function(S,k,V,J){for(var gA,CA,MA=ZJ(S),$A=zJ(MA),Be=oO($A),Ye=iO(k,V),ve=0,yi=J||XJ,Ge=e?yi(S,Be):o||C?yi(S,0):void 0;Be>ve;ve++)if((y||ve in $A)&&(CA=Ye(gA=$A[ve],ve,MA),A))if(e)Ge[ve]=CA;else if(CA)switch(A){case 3:return!0;case 5:return gA;case 6:return ve;case 2:jN(Ge,gA)}else switch(A){case 4:return!1;case 7:jN(Ge,gA)}return d?-1:a||c?c:Ge}},nO={forEach:sO(0)},$J=Fa,rO=_n,aO=f,gO=sA,cO=G,AH=qF,uS=Od,lO=bm,IO=MI,eH=Ce,LB=rg,tH=KF,iH=qn,uO=ym,WN=jF,EO=function(A){var e=OJ(A);return e<0?0:e>255?255:255&e},zN=$,dp=Cs,oH=ur,ZN=oo,XN=Do,sH=xa,$N=ce,gw=oA,nH=Mc.f,dO=aw,CO=nO.forEach,cw=Lm,rH=Lg,hO=Ki,BO=w,QO=function(A,e,o){for(var a=0,c=arguments.length>2?o:$J(e),d=new A(c);c>a;)d[a]=e[a++];return d},aH=hD,AG=un.get,gH=un.set,Cp=un.enforce,pO=hO.f,cH=BO.f,eG=aO.RangeError,mO=lO.ArrayBuffer,lH=mO.prototype,IH=lO.DataView,mf=uS.NATIVE_ARRAY_BUFFER_VIEWS,fO=uS.TYPED_ARRAY_TAG,yO=uS.TypedArray,ES=uS.TypedArrayPrototype,dS=uS.isTypedArray,hp="BYTES_PER_ELEMENT",lw="Wrong length",Iw=function(A,e){rH(A,e,{configurable:!0,get:function(){return AG(this)[e]}})},DO=function(A){var e;return $N(lH,A)||(e=oH(A))==="ArrayBuffer"||e==="SharedArrayBuffer"},tG=function(A,e){return dS(A)&&!XN(e)&&e in A&&tH(+e)&&e>=0},uw=function(A,e){return e=zN(e),tG(A,e)?eH(2,A[e]):cH(A,e)},SO=function(A,e,o){return e=zN(e),!(tG(A,e)&&ZN(o)&&dp(o,"value"))||dp(o,"get")||dp(o,"set")||o.configurable||dp(o,"writable")&&!o.writable||dp(o,"enumerable")&&!o.enumerable?pO(A,e,o):(A[e]=o.value,A)};cO?(mf||(BO.f=uw,hO.f=SO,Iw(ES,"buffer"),Iw(ES,"byteOffset"),Iw(ES,"byteLength"),Iw(ES,"length")),rO({target:"Object",stat:!0,forced:!mf},{getOwnPropertyDescriptor:uw,defineProperty:SO}),LN.exports=function(A,e,o){var a=A.match(/\d+/)[0]/8,c=A+(o?"Clamped":"")+"Array",d="get"+A,C="set"+A,y=aO[c],S=y,k=S&&S.prototype,V={},J=function(CA,MA){pO(CA,MA,{get:function(){return function($A,Be){var Ye=AG($A);return Ye.view[d](Be*a+Ye.byteOffset,!0)}(this,MA)},set:function($A){return function(Be,Ye,ve){var yi=AG(Be);yi.view[C](Ye*a+yi.byteOffset,o?EO(ve):ve,!0)}(this,MA,$A)},enumerable:!0})};mf?AH&&(S=e(function(CA,MA,$A,Be){return IO(CA,k),aH(ZN(MA)?DO(MA)?Be!==void 0?new y(MA,WN($A,a),Be):$A!==void 0?new y(MA,WN($A,a)):new y(MA):dS(MA)?QO(S,MA):gO(dO,S,MA):new y(uO(MA)),CA,S)}),gw&&gw(S,yO),CO(nH(y),function(CA){CA in S||LB(S,CA,y[CA])}),S.prototype=k):(S=e(function(CA,MA,$A,Be){IO(CA,k);var Ye,ve,yi,Ge=0,Bt=0;if(ZN(MA)){if(!DO(MA))return dS(MA)?QO(S,MA):gO(dO,S,MA);Ye=MA,Bt=WN($A,a);var hi=MA.byteLength;if(Be===void 0){if(hi%a)throw new eG(lw);if((ve=hi-Bt)<0)throw new eG(lw)}else if((ve=iH(Be)*a)+Bt>hi)throw new eG(lw);yi=ve/a}else yi=uO(MA),Ye=new mO(ve=yi*a);for(gH(CA,{buffer:Ye,byteOffset:Bt,byteLength:ve,length:yi,view:new IH(Ye)});Ge1?arguments[1]:void 0,e>2?arguments[2]:void 0)},iG(function(){var A=0;return new Int8Array(2).fill({valueOf:function(){return A++}}),A!==1})),(0,Od.exportTypedArrayStaticMethod)("from",aw,qF);var RO=f,wO=sA,sG=Od,_O=Fa,BH=jF,QH=as,TO=_,pH=RO.RangeError,nG=RO.Int8Array,rG=nG&&nG.prototype,aG=rG&&rG.set,gG=sG.aTypedArray,NO=sG.exportTypedArrayMethod,Ew=!TO(function(){var A=new Uint8ClampedArray(2);return wO(aG,A,{length:1,0:3},1),A[1]!==3}),GO=Ew&&sG.NATIVE_ARRAY_BUFFER_VIEWS&&TO(function(){var A=new nG(2);return A.set(1),A.set("2",1),A[0]!==0||A[1]!==2});NO("set",function(A){gG(this);var e=BH(arguments.length>1?arguments[1]:void 0,1),o=QH(A);if(Ew)return wO(aG,this,o,e);var a=this.length,c=_O(o),d=0;if(c+e>a)throw new pH("Wrong length");for(;d0&&1/a<0?1:-1:o>a}}(A))},!dw||CG);var kO=_n,hG=sA,hS=je,BG=Eo,QG=Ao,yH=oo,LO=xg,BS=Er,DH=en,QS=LR,UO=fF,SH=Hs("replace"),FO=TypeError,Pd=hS("".indexOf);hS("".replace);var pS=hS("".slice),MH=Math.max;kO({target:"String",proto:!0},{replaceAll:function(A,e){var o,a,c,d,C,y,S,k,V,J=BG(this),gA=0,CA="";if(yH(A)){if(LO(A)&&(o=BS(BG(QS(A))),!~Pd(o,"g")))throw new FO("`.replaceAll` does not allow non-global regexes");if(a=DH(A,SH))return hG(a,A,J,e)}for(c=BS(J),d=BS(A),(C=QG(e))||(e=BS(e)),y=d.length,S=MH(1,y),k=Pd(c,d);k!==-1;)V=C?BS(e(d,k,c)):UO(d,c,k,[],void 0,e),CA+=pS(c,gA,k)+V,gA=k+y,k=k+S>c.length?-1:Pd(c,d,k+S);return gA1?arguments[1]:void 0)},PO=f,xO=pG,wH=mG,hw=RH,_H=rg,YO=function(A){if(A&&A.forEach!==hw)try{_H(A,"forEach",hw)}catch{A.forEach=hw}};for(var fG in xO)xO[fG]&&YO(PO[fG]&&PO[fG].prototype);YO(wH);var Bw=f,VO=pG,TH=mG,mS=ji,fS=rg,NH=Ya,yG=Hs("iterator"),DG=mS.values,JO=function(A,e){if(A){if(A[yG]!==DG)try{fS(A,yG,DG)}catch{A[yG]=DG}if(NH(A,e,!0),VO[e]){for(var o in mS)if(A[o]!==mS[o])try{fS(A,o,mS[o])}catch{A[o]=mS[o]}}}};for(var SG in VO)JO(Bw[SG]&&Bw[SG].prototype,SG);JO(TH,"DOMTokenList");var MG=MC.clear;_n({global:!0,bind:!0,enumerable:!0,forced:f.clearImmediate!==MG},{clearImmediate:MG});var yS=f,GH=_d,bH=Ao,kH=Hr,LH=nt,UH=le,FH=CB,vG=yS.Function,OH=/MSIE .\./.test(LH)||kH==="BUN"&&function(){var A=yS.Bun.version.split(".");return A.length<3||A[0]==="0"&&(A[1]<3||A[1]==="3"&&A[2]==="0")}(),HO=_n,qO=f,Qw=MC.set,PH=function(A,e){var o=1;return OH?function(a,c){var d=FH(arguments.length,1)>o,C=bH(a)?a:vG(a),y=d?UH(arguments,o):[],S=d?function(){GH(C,this,y)}:C;return A(S)}:A},RG=qO.setImmediate?PH(Qw):Qw;HO({global:!0,bind:!0,enumerable:!0,forced:qO.setImmediate!==RG},{setImmediate:RG});var Lh=jR.charAt,xH=Er,pw=un,YH=Ee,KO=We,jO="String Iterator",VH=pw.set,WO=pw.getterFor(jO);YH(String,"String",function(A){VH(this,{type:jO,string:xH(A),index:0})},function(){var A,e=WO(this),o=e.string,a=e.index;return a>=o.length?KO(void 0,!0):(A=Lh(o,a),e.index+=A.length,KO(A,!1))});var JH=_,HH=G,qH=Hs("iterator"),zO=!JH(function(){var A=new URL("b?a=1&b=2&c=3","https://a"),e=A.searchParams,o=new URLSearchParams("a=1&a=2&b=3"),a="";return A.pathname="c%20d",e.forEach(function(c,d){e.delete("b"),a+=d+c}),o.delete("a",2),o.delete("b",void 0),!e.size&&!HH||!e.sort||A.href!=="https://a/c%20d?a=1&c=3"||e.get("c")!=="3"||String(new URLSearchParams("?a=1"))!=="a=1"||!e[qH]||new URL("https://a@b").username!=="a"||new URLSearchParams(new URLSearchParams("a=b")).get("a")!=="b"||new URL("https://тест").host!=="xn--e1aybc"||new URL("https://a#б").hash!=="#%D0%B1"||a!=="a1c3"||new URL("https://x",void 0).host!=="x"}),ZO=G,KH=je,wG=sA,_G=_,TG=bl,jH=vc,WH=mA,zH=as,XO=gt,Bp=Object.assign,$O=Object.defineProperty,AP=KH([].concat),ZH=!Bp||_G(function(){if(ZO&&Bp({b:1},Bp($O({},"a",{enumerable:!0,get:function(){$O(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var A={},e={},o=Symbol("assign detection"),a="abcdefghijklmnopqrst";return A[o]=7,a.split("").forEach(function(c){e[c]=c}),Bp({},A)[o]!==7||TG(Bp({},e)).join("")!==a})?function(A,e){for(var o=zH(A),a=arguments.length,c=1,d=jH.f,C=WH.f;a>c;)for(var y,S=XO(arguments[c++]),k=d?AP(TG(S),d(S)):TG(S),V=k.length,J=0;V>J;)y=k[J++],ZO&&!wG(C,S,y)||(o[y]=S[y]);return o}:Bp,XH=sr,$H=eS,Aq=G,eq=Ki,eP=Ce,tq=Ag,DS=sA,tP=as,iP=function(A,e,o,a){try{return a?e(XH(o)[0],o[1]):e(o)}catch(c){$H(A,"throw",c)}},NG=ZD,iq=_D,oq=Fa,SS=function(A,e,o){Aq?eq.f(A,e,eP(0,o)):A[e]=o},GG=WE,sq=bh,oP=Array,UB=je,bG=2147483647,sP=/[^\0-\u007E]/,kG=/[.\u3002\uFF0E\uFF61]/g,nP="Overflow: input needs wider integers to process",rP=RangeError,nq=UB(kG.exec),FB=Math.floor,mw=String.fromCharCode,fw=UB("".charCodeAt),sE=UB([].join),OB=UB([].push),pa=UB("".replace),aP=UB("".split),rq=UB("".toLowerCase),gP=function(A){return A+22+75*(A<26)},LG=function(A,e,o){var a=0;for(A=o?FB(A/700):A>>1,A+=FB(A/e);A>455;)A=FB(A/35),a+=36;return FB(a+36*A/(A+38))},aq=function(A){var e=[];A=function(Ye){for(var ve=[],yi=0,Ge=Ye.length;yi=55296&&Bt<=56319&&yi=d&&aFB((bG-C)/J))throw new rP(nP);for(C+=(V-d)*J,d=V,o=0;obG)throw new rP(nP);if(a===d){for(var gA=C,CA=36;;){var MA=CA<=y?1:CA>=y+26?26:CA-y;if(gAc;){if(e=+arguments[c++],gq(e,1114111)!==e)throw new cq(e+" is not a valid code point");o[c]=e<65536?Uh(e):Uh(55296+((e-=65536)>>10),e%1024+56320)}return vS(o,"")}});var Qp=_n,Df=f,pp=cR,UG=HA,Fs=sA,nE=je,Sf=G,FG=zO,lP=Sr,lq=Lg,Iq=nu,uq=Ya,Eq=xE,RS=un,IP=MI,OG=Ao,dq=Cs,Cq=Ag,hq=ur,Bq=sr,uP=oo,Vl=Er,Qq=xa,EP=Ce,dP=WE,pq=bh,yw=We,Mf=CB,mq=vt,fq=Hs("iterator"),mp="URLSearchParams",PG=mp+"Iterator",CP=RS.set,ul=RS.getterFor(mp),Fh=RS.getterFor(PG),hP=pp("fetch"),vf=pp("Request"),wS=pp("Headers"),xG=vf&&vf.prototype,BP=wS&&wS.prototype,QP=Df.TypeError,yq=Df.encodeURIComponent,Dq=String.fromCharCode,Sq=UG("String","fromCodePoint"),Mq=parseInt,Dw=nE("".charAt),Sw=nE([].join),Oh=nE([].push),pP=nE("".replace),vq=nE([].shift),mP=nE([].splice),fP=nE("".split),yP=nE("".slice),YG=nE(/./.exec),DP=/\+/g,Rq=/^[0-9a-f]+$/i,SP=function(A,e){var o=yP(A,e,e+2);return YG(Rq,o)?Mq(o,16):NaN},wq=function(A){for(var e=0,o=128;o>0&&A&o;o>>=1)e++;return e},_q=function(A){var e=null;switch(A.length){case 1:e=A[0];break;case 2:e=(31&A[0])<<6|63&A[1];break;case 3:e=(15&A[0])<<12|(63&A[1])<<6|63&A[2];break;case 4:e=(7&A[0])<<18|(63&A[1])<<12|(63&A[2])<<6|63&A[3]}return e>1114111?null:e},MP=function(A){for(var e=(A=pP(A,DP," ")).length,o="",a=0;ae){o+="%",a++;continue}var d=SP(A,a+1);if(d!=d){o+=c,a++;continue}a+=2;var C=wq(d);if(C===0)c=Dq(d);else{if(C===1||C>4){o+="�",a++;continue}for(var y=[d],S=1;Se||Dw(A,a)!=="%");){var k=SP(A,a+1);if(k!=k){a+=3;break}if(k>191||k<128)break;Oh(y,k),a+=2,S++}if(y.length!==C){o+="�";continue}var V=_q(y);V===null?o+="�":c=Sq(V)}}o+=c,a++}return o},Tq=/[!'()~]|%20/g,Nq={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},Gq=function(A){return Nq[A]},vP=function(A){return pP(yq(A),Tq,Gq)},VG=Eq(function(A,e){CP(this,{type:PG,target:ul(A).entries,index:0,kind:e})},mp,function(){var A=Fh(this),e=A.target,o=A.index++;if(!e||o>=e.length)return A.target=null,yw(void 0,!0);var a=e[o];switch(A.kind){case"keys":return yw(a.key,!1);case"values":return yw(a.value,!1)}return yw([a.key,a.value],!1)},!0),RP=function(A){this.entries=[],this.url=null,A!==void 0&&(uP(A)?this.parseObject(A):this.parseQuery(typeof A=="string"?Dw(A,0)==="?"?yP(A,1):A:Vl(A)))};RP.prototype={type:mp,bindURL:function(A){this.url=A,this.update()},parseObject:function(A){var e,o,a,c,d,C,y,S=this.entries,k=pq(A);if(k)for(o=(e=dP(A,k)).next;!(a=Fs(o,e)).done;){if(d=(c=dP(Bq(a.value))).next,(C=Fs(d,c)).done||(y=Fs(d,c)).done||!Fs(d,c).done)throw new QP("Expected sequence with length 2");Oh(S,{key:Vl(C.value),value:Vl(y.value)})}else for(var V in A)dq(A,V)&&Oh(S,{key:V,value:Vl(A[V])})},parseQuery:function(A){if(A)for(var e,o,a=this.entries,c=fP(A,"&"),d=0;d0?arguments[0]:void 0));Sf||(this.size=A.entries.length)},fp=Rf.prototype;if(Iq(fp,{append:function(A,e){var o=ul(this);Mf(arguments.length,2),Oh(o.entries,{key:Vl(A),value:Vl(e)}),Sf||this.size++,o.updateURL()},delete:function(A){for(var e=ul(this),o=Mf(arguments.length,1),a=e.entries,c=Vl(A),d=o<2?void 0:arguments[1],C=d===void 0?d:Vl(d),y=0;yo.key?1:-1}),A.updateURL()},forEach:function(A){for(var e,o=ul(this).entries,a=Cq(A,arguments.length>1?arguments[1]:void 0),c=0;c1?wP(arguments[1]):{})}}),OG(vf)){var HG=function(A){return IP(this,xG),new vf(A,arguments.length>1?wP(arguments[1]):{})};xG.constructor=HG,HG.prototype=xG,Qp({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:HG})}}var rE,kq=_n,qG=G,_P=zO,KG=f,TP=Ag,zE=je,Mw=Sr,ZE=Lg,Lq=MI,jG=Cs,WG=ZH,PB=function(A){var e=tP(A),o=iq(this),a=arguments.length,c=a>1?arguments[1]:void 0,d=c!==void 0;d&&(c=tq(c,a>2?arguments[2]:void 0));var C,y,S,k,V,J,gA=sq(e),CA=0;if(!gA||this===oP&&NG(gA))for(C=oq(e),y=o?new this(C):oP(C);C>CA;CA++)J=d?c(e[CA],CA):e[CA],SS(y,CA,J);else for(y=o?new this:[],V=(k=GG(e,gA)).next;!(S=DS(V,k)).done;CA++)J=d?iP(k,c,[S.value,CA],!0):S.value,SS(y,CA,J);return y.length=CA,y},xd=le,zG=jR.codeAt,Uq=function(A){var e,o,a=[],c=aP(pa(rq(A),kG,"."),".");for(e=0;e?@[\\\]^|]/,Kq=/[\0\t\n\r #/:<>?@[\\\]^|]/,jq=/^[\u0000-\u0020]+/,Wq=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,zq=/[\t\n\r]/g,Tf=function(A){var e,o,a,c;if(typeof A=="number"){for(e=[],o=0;o<4;o++)Vq(e,A%256),A=xh(A/256);return _S(e,".")}if(typeof A=="object"){for(e="",a=function(d){for(var C=null,y=1,S=null,k=0,V=0;V<8;V++)d[V]!==0?(k>y&&(C=S,y=k),S=null,k=0):(S===null&&(S=V),++k);return k>y?S:C}(A),o=0;o<8;o++)c&&A[o]===0||(c&&(c=!1),a===o?(e+=o?":":"::",c=!0):(e+=Yq(A[o],16),o<7&&(e+=":")));return"["+e+"]"}return A},Nf={},OP=WG({},Nf,{" ":1,'"':1,"<":1,">":1,"`":1}),tb=WG({},OP,{"#":1,"?":1,"{":1,"}":1}),YB=WG({},tb,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),Vd=function(A,e){var o=zG(A,0);return o>32&&o<127&&!jG(e,A)?A:encodeURIComponent(A)},Yh={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Gf=function(A,e){var o;return A.length===2&&Yd(TS,XE(A,0))&&((o=XE(A,1))===":"||!e&&o==="|")},ib=function(A){var e;return A.length>1&&Gf(yp(A,0,2))&&(A.length===2||(e=XE(A,2))==="/"||e==="\\"||e==="?"||e==="#")},NS=function(A){return A==="."||Tw(A)==="%2e"},PP=function(A){return(A=Tw(A))===".."||A==="%2e."||A===".%2e"||A==="%2e%2e"},aE={},lu={},VB={},NC={},JB={},bw={},xP={},GS={},kw={},Lw={},Uw={},Fw={},Ow={},Pw={},ob={},xw={},bf={},GC={},bS={},Iu={},Jl={},Yw=function(A,e,o){var a,c,d,C=Ph(A);if(e){if(c=this.parse(C))throw new XG(c);this.searchParams=null}else{if(o!==void 0&&(a=new Yw(o,!0)),c=this.parse(C,null,a))throw new XG(c);(d=xq(new Pq)).bindURL(this),this.searchParams=d}};Yw.prototype={type:"URL",parse:function(A,e,o){var a,c,d,C,y=this,S=e||aE,k=0,V="",J=!1,gA=!1,CA=!1;for(A=Ph(A),e||(y.scheme="",y.username="",y.password="",y.host=null,y.port=null,y.path=[],y.query=null,y.fragment=null,y.cannotBeABaseURL=!1,A=ww(A,jq,""),A=ww(A,Wq,"$1")),A=ww(A,zq,""),a=PB(A);k<=a.length;){switch(c=a[k],S){case aE:if(!c||!Yd(TS,c)){if(e)return Ab;S=VB;continue}V+=Tw(c),S=lu;break;case lu:if(c&&(Yd(Jq,c)||c==="+"||c==="-"||c==="."))V+=Tw(c);else{if(c!==":"){if(e)return Ab;V="",S=VB,k=0;continue}if(e&&(y.isSpecial()!==jG(Yh,V)||V==="file"&&(y.includesCredentials()||y.port!==null)||y.scheme==="file"&&!y.host))return;if(y.scheme=V,e)return void(y.isSpecial()&&Yh[y.scheme]===y.port&&(y.port=null));V="",y.scheme==="file"?S=Pw:y.isSpecial()&&o&&o.scheme===y.scheme?S=NC:y.isSpecial()?S=GS:a[k+1]==="/"?(S=JB,k++):(y.cannotBeABaseURL=!0,_f(y.path,""),S=bS)}break;case VB:if(!o||o.cannotBeABaseURL&&c!=="#")return Ab;if(o.cannotBeABaseURL&&c==="#"){y.scheme=o.scheme,y.path=xd(o.path),y.query=o.query,y.fragment="",y.cannotBeABaseURL=!0,S=Jl;break}S=o.scheme==="file"?Pw:bw;continue;case NC:if(c!=="/"||a[k+1]!=="/"){S=bw;continue}S=kw,k++;break;case JB:if(c==="/"){S=Lw;break}S=GC;continue;case bw:if(y.scheme=o.scheme,c===rE)y.username=o.username,y.password=o.password,y.host=o.host,y.port=o.port,y.path=xd(o.path),y.query=o.query;else if(c==="/"||c==="\\"&&y.isSpecial())S=xP;else if(c==="?")y.username=o.username,y.password=o.password,y.host=o.host,y.port=o.port,y.path=xd(o.path),y.query="",S=Iu;else{if(c!=="#"){y.username=o.username,y.password=o.password,y.host=o.host,y.port=o.port,y.path=xd(o.path),y.path.length--,S=GC;continue}y.username=o.username,y.password=o.password,y.host=o.host,y.port=o.port,y.path=xd(o.path),y.query=o.query,y.fragment="",S=Jl}break;case xP:if(!y.isSpecial()||c!=="/"&&c!=="\\"){if(c!=="/"){y.username=o.username,y.password=o.password,y.host=o.host,y.port=o.port,S=GC;continue}S=Lw}else S=kw;break;case GS:if(S=kw,c!=="/"||XE(V,k+1)!=="/")continue;k++;break;case kw:if(c!=="/"&&c!=="\\"){S=Lw;continue}break;case Lw:if(c==="@"){J&&(V="%40"+V),J=!0,d=PB(V);for(var MA=0;MA65535)return Nw;y.port=y.isSpecial()&&Ye===Yh[y.scheme]?null:Ye,V=""}if(e)return;S=bf;continue}return Nw}V+=c;break;case Pw:if(y.scheme="file",c==="/"||c==="\\")S=ob;else{if(!o||o.scheme!=="file"){S=GC;continue}switch(c){case rE:y.host=o.host,y.path=xd(o.path),y.query=o.query;break;case"?":y.host=o.host,y.path=xd(o.path),y.query="",S=Iu;break;case"#":y.host=o.host,y.path=xd(o.path),y.query=o.query,y.fragment="",S=Jl;break;default:ib(_S(xd(a,k),""))||(y.host=o.host,y.path=xd(o.path),y.shortenPath()),S=GC;continue}}break;case ob:if(c==="/"||c==="\\"){S=xw;break}o&&o.scheme==="file"&&!ib(_S(xd(a,k),""))&&(Gf(o.path[0],!0)?_f(y.path,o.path[0]):y.host=o.host),S=GC;continue;case xw:if(c===rE||c==="/"||c==="\\"||c==="?"||c==="#"){if(!e&&Gf(V))S=GC;else if(V===""){if(y.host="",e)return;S=bf}else{if(C=y.parseHost(V))return C;if(y.host==="localhost"&&(y.host=""),e)return;V="",S=bf}continue}V+=c;break;case bf:if(y.isSpecial()){if(S=GC,c!=="/"&&c!=="\\")continue}else if(e||c!=="?")if(e||c!=="#"){if(c!==rE&&(S=GC,c!=="/"))continue}else y.fragment="",S=Jl;else y.query="",S=Iu;break;case GC:if(c===rE||c==="/"||c==="\\"&&y.isSpecial()||!e&&(c==="?"||c==="#")){if(PP(V)?(y.shortenPath(),c==="/"||c==="\\"&&y.isSpecial()||_f(y.path,"")):NS(V)?c==="/"||c==="\\"&&y.isSpecial()||_f(y.path,""):(y.scheme==="file"&&!y.path.length&&Gf(V)&&(y.host&&(y.host=""),V=XE(V,0)+":"),_f(y.path,V)),V="",y.scheme==="file"&&(c===rE||c==="?"||c==="#"))for(;y.path.length>1&&y.path[0]==="";)_w(y.path);c==="?"?(y.query="",S=Iu):c==="#"&&(y.fragment="",S=Jl)}else V+=Vd(c,tb);break;case bS:c==="?"?(y.query="",S=Iu):c==="#"?(y.fragment="",S=Jl):c!==rE&&(y.path[0]+=Vd(c,Nf));break;case Iu:e||c!=="#"?c!==rE&&(c==="'"&&y.isSpecial()?y.query+="%27":y.query+=c==="#"?"%23":Vd(c,Nf)):(y.fragment="",S=Jl);break;case Jl:c!==rE&&(y.fragment+=Vd(c,OP))}k++}},parseHost:function(A){var e,o,a;if(XE(A,0)==="["){if(XE(A,A.length-1)!=="]"||(e=function(c){var d,C,y,S,k,V,J,gA=[0,0,0,0,0,0,0,0],CA=0,MA=null,$A=0,Be=function(){return XE(c,$A)};if(Be()===":"){if(XE(c,1)!==":")return;$A+=2,MA=++CA}for(;Be();){if(CA===8)return;if(Be()!==":"){for(d=C=0;C<4&&Yd(UP,Be());)d=16*d+Rw(Be(),16),$A++,C++;if(Be()==="."){if(C===0||($A-=C,CA>6))return;for(y=0;Be();){if(S=null,y>0){if(!(Be()==="."&&y<4))return;$A++}if(!Yd(eb,Be()))return;for(;Yd(eb,Be());){if(k=Rw(Be(),10),S===null)S=k;else{if(S===0)return;S=10*S+k}if(S>255)return;$A++}gA[CA]=256*gA[CA]+S,++y!==2&&y!==4||CA++}if(y!==4)return;break}if(Be()===":"){if($A++,!Be())return}else if(Be())return;gA[CA++]=d}else{if(MA!==null)return;$A++,MA=++CA}}if(MA!==null)for(V=CA-MA,CA=7;CA!==0&&V>0;)J=gA[CA],gA[CA--]=gA[MA+V-1],gA[MA+--V]=J;else if(CA!==8)return;return gA}(yp(A,1,-1)),!e))return xB;this.host=e}else if(this.isSpecial()){if(A=Uq(A),Yd(FP,A)||(e=function(c){var d,C,y,S,k,V,J,gA=$G(c,".");if(gA.length&&gA[gA.length-1]===""&&gA.length--,(d=gA.length)>4)return c;for(C=[],y=0;y1&&XE(S,0)==="0"&&(k=Yd(Gw,S)?16:8,S=yp(S,k===8?1:2)),S==="")V=0;else{if(!Yd(k===10?LP:k===8?Hq:UP,S))return c;V=Rw(S,k)}_f(C,V)}for(y=0;y=bP(256,5-d))return null}else if(V>255)return null;for(J=kP(C),y=0;y1?arguments[1]:void 0,a=Oq(e,new Yw(A,!1,o));qG||(e.href=a.serialize(),e.origin=a.getOrigin(),e.protocol=a.getProtocol(),e.username=a.getUsername(),e.password=a.getPassword(),e.host=a.getHost(),e.hostname=a.getHostname(),e.port=a.getPort(),e.pathname=a.getPathname(),e.search=a.getSearch(),e.searchParams=a.getSearchParams(),e.hash=a.getHash())},Hl=Vh.prototype,ql=function(A,e){return{get:function(){return vw(this)[A]()},set:e&&function(o){return vw(this)[e](o)},configurable:!0,enumerable:!0}};if(qG&&(ZE(Hl,"href",ql("serialize","setHref")),ZE(Hl,"origin",ql("getOrigin")),ZE(Hl,"protocol",ql("getProtocol","setProtocol")),ZE(Hl,"username",ql("getUsername","setUsername")),ZE(Hl,"password",ql("getPassword","setPassword")),ZE(Hl,"host",ql("getHost","setHost")),ZE(Hl,"hostname",ql("getHostname","setHostname")),ZE(Hl,"port",ql("getPort","setPort")),ZE(Hl,"pathname",ql("getPathname","setPathname")),ZE(Hl,"search",ql("getSearch","setSearch")),ZE(Hl,"searchParams",ql("getSearchParams")),ZE(Hl,"hash",ql("getHash","setHash"))),Mw(Hl,"toJSON",function(){return vw(this).serialize()},{enumerable:!0}),Mw(Hl,"toString",function(){return vw(this).serialize()},{enumerable:!0}),wf){var YP=wf.createObjectURL,Vw=wf.revokeObjectURL;YP&&Mw(Vh,"createObjectURL",TP(YP,wf)),Vw&&Mw(Vh,"revokeObjectURL",TP(Vw,wf))}Fq(Vh,"URL"),kq({global:!0,constructor:!0,forced:!_P,sham:!qG},{URL:Vh});var VP=sA;_n({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return VP(URL.prototype.toString,this)}});let JP=!0,Jw=!0;function kS(A,e,o){const a=A.match(e);return a&&a.length>=o&&parseFloat(a[o],10)}function HB(A,e,o){if(!A.RTCPeerConnection)return;const a=A.RTCPeerConnection.prototype,c=a.addEventListener;a.addEventListener=function(C,y){if(C!==e)return c.apply(this,arguments);const S=k=>{const V=o(k);V&&(y.handleEvent?y.handleEvent(V):y(V))};return this._eventMap=this._eventMap||{},this._eventMap[e]||(this._eventMap[e]=new Map),this._eventMap[e].set(y,S),c.apply(this,[C,S])};const d=a.removeEventListener;a.removeEventListener=function(C,y){if(C!==e||!this._eventMap||!this._eventMap[e])return d.apply(this,arguments);if(!this._eventMap[e].has(y))return d.apply(this,arguments);const S=this._eventMap[e].get(y);return this._eventMap[e].delete(y),this._eventMap[e].size===0&&delete this._eventMap[e],Object.keys(this._eventMap).length===0&&delete this._eventMap,d.apply(this,[C,S])},Object.defineProperty(a,"on"+e,{get(){return this["_on"+e]},set(C){this["_on"+e]&&(this.removeEventListener(e,this["_on"+e]),delete this["_on"+e]),C&&this.addEventListener(e,this["_on"+e]=C)},enumerable:!0,configurable:!0})}function HP(A){return typeof A!="boolean"?new Error("Argument type: "+typeof A+". Please use a boolean."):(JP=A,A?"adapter.js logging disabled":"adapter.js logging enabled")}function Zq(A){return typeof A!="boolean"?new Error("Argument type: "+typeof A+". Please use a boolean."):(Jw=!A,"adapter.js deprecation warnings "+(A?"disabled":"enabled"))}function Hw(){if(typeof window=="object"){if(JP)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function LS(A,e){Jw&&console.warn(A+" is deprecated, please use "+e+" instead.")}function sb(A){return Object.prototype.toString.call(A)==="[object Object]"}function nb(A){return sb(A)?Object.keys(A).reduce(function(e,o){const a=sb(A[o]),c=a?nb(A[o]):A[o],d=a&&!Object.keys(c).length;return c===void 0||d?e:Object.assign(e,{[o]:c})},{}):A}function rb(A,e,o){e&&!o.has(e.id)&&(o.set(e.id,e),Object.keys(e).forEach(a=>{a.endsWith("Id")?rb(A,A.get(e[a]),o):a.endsWith("Ids")&&e[a].forEach(c=>{rb(A,A.get(c),o)})}))}function qP(A,e,o){const a=o?"outbound-rtp":"inbound-rtp",c=new Map;if(e===null)return c;const d=[];return A.forEach(C=>{C.type==="track"&&C.trackIdentifier===e.id&&d.push(C)}),d.forEach(C=>{A.forEach(y=>{y.type===a&&y.trackId===C.id&&rb(A,y,c)})}),c}const ab=Hw;function KP(A,e){const o=A&&A.navigator;if(!o.mediaDevices)return;const a=function(C){if(typeof C!="object"||C.mandatory||C.optional)return C;const y={};return Object.keys(C).forEach(S=>{if(S==="require"||S==="advanced"||S==="mediaSource")return;const k=typeof C[S]=="object"?C[S]:{ideal:C[S]};k.exact!==void 0&&typeof k.exact=="number"&&(k.min=k.max=k.exact);const V=function(J,gA){return J?J+gA.charAt(0).toUpperCase()+gA.slice(1):gA==="deviceId"?"sourceId":gA};if(k.ideal!==void 0){y.optional=y.optional||[];let J={};typeof k.ideal=="number"?(J[V("min",S)]=k.ideal,y.optional.push(J),J={},J[V("max",S)]=k.ideal,y.optional.push(J)):(J[V("",S)]=k.ideal,y.optional.push(J))}k.exact!==void 0&&typeof k.exact!="number"?(y.mandatory=y.mandatory||{},y.mandatory[V("",S)]=k.exact):["min","max"].forEach(J=>{k[J]!==void 0&&(y.mandatory=y.mandatory||{},y.mandatory[V(J,S)]=k[J])})}),C.advanced&&(y.optional=(y.optional||[]).concat(C.advanced)),y},c=function(C,y){if(e.version>=61)return y(C);if((C=JSON.parse(JSON.stringify(C)))&&typeof C.audio=="object"){const S=function(k,V,J){V in k&&!(J in k)&&(k[J]=k[V],delete k[V])};S((C=JSON.parse(JSON.stringify(C))).audio,"autoGainControl","googAutoGainControl"),S(C.audio,"noiseSuppression","googNoiseSuppression"),C.audio=a(C.audio)}if(C&&typeof C.video=="object"){let S=C.video.facingMode;S=S&&(typeof S=="object"?S:{ideal:S});const k=e.version<66;if(S&&(S.exact==="user"||S.exact==="environment"||S.ideal==="user"||S.ideal==="environment")&&(!o.mediaDevices.getSupportedConstraints||!o.mediaDevices.getSupportedConstraints().facingMode||k)){let V;if(delete C.video.facingMode,S.exact==="environment"||S.ideal==="environment"?V=["back","rear"]:S.exact!=="user"&&S.ideal!=="user"||(V=["front"]),V)return o.mediaDevices.enumerateDevices().then(J=>{J=J.filter(CA=>CA.kind==="videoinput");let gA=J.find(CA=>V.some(MA=>CA.label.toLowerCase().includes(MA)));return!gA&&J.length&&V.includes("back")&&(gA=J[J.length-1]),gA&&(C.video.deviceId=S.exact?{exact:gA.deviceId}:{ideal:gA.deviceId}),C.video=a(C.video),ab("chrome: "+JSON.stringify(C)),y(C)})}C.video=a(C.video)}return ab("chrome: "+JSON.stringify(C)),y(C)},d=function(C){return e.version>=64?C:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[C.name]||C.name,message:C.message,constraint:C.constraint||C.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};if(o.getUserMedia=function(C,y,S){c(C,k=>{o.webkitGetUserMedia(k,y,V=>{S&&S(d(V))})})}.bind(o),o.mediaDevices.getUserMedia){const C=o.mediaDevices.getUserMedia.bind(o.mediaDevices);o.mediaDevices.getUserMedia=function(y){return c(y,S=>C(S).then(k=>{if(S.audio&&!k.getAudioTracks().length||S.video&&!k.getVideoTracks().length)throw k.getTracks().forEach(V=>{V.stop()}),new DOMException("","NotFoundError");return k},k=>Promise.reject(d(k))))}}}function jP(A){A.MediaStream=A.MediaStream||A.webkitMediaStream}function WP(A){if(typeof A=="object"&&A.RTCPeerConnection&&!("ontrack"in A.RTCPeerConnection.prototype)){Object.defineProperty(A.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(o){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=o)},enumerable:!0,configurable:!0});const e=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=o=>{o.stream.addEventListener("addtrack",a=>{let c;c=A.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(C=>C.track&&C.track.id===a.track.id):{track:a.track};const d=new Event("track");d.track=a.track,d.receiver=c,d.transceiver={receiver:c},d.streams=[o.stream],this.dispatchEvent(d)}),o.stream.getTracks().forEach(a=>{let c;c=A.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(C=>C.track&&C.track.id===a.id):{track:a};const d=new Event("track");d.track=a,d.receiver=c,d.transceiver={receiver:c},d.streams=[o.stream],this.dispatchEvent(d)})},this.addEventListener("addstream",this._ontrackpoly)),e.apply(this,arguments)}}else HB(A,"track",e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e))}function gb(A){if(typeof A=="object"&&A.RTCPeerConnection&&!("getSenders"in A.RTCPeerConnection.prototype)&&"createDTMFSender"in A.RTCPeerConnection.prototype){const e=function(c,d){return{track:d,get dtmf(){return this._dtmf===void 0&&(d.kind==="audio"?this._dtmf=c.createDTMFSender(d):this._dtmf=null),this._dtmf},_pc:c}};if(!A.RTCPeerConnection.prototype.getSenders){A.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const c=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addTrack=function(C,y){let S=c.apply(this,arguments);return S||(S=e(this,C),this._senders.push(S)),S};const d=A.RTCPeerConnection.prototype.removeTrack;A.RTCPeerConnection.prototype.removeTrack=function(C){d.apply(this,arguments);const y=this._senders.indexOf(C);y!==-1&&this._senders.splice(y,1)}}const o=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(c){this._senders=this._senders||[],o.apply(this,[c]),c.getTracks().forEach(d=>{this._senders.push(e(this,d))})};const a=A.RTCPeerConnection.prototype.removeStream;A.RTCPeerConnection.prototype.removeStream=function(c){this._senders=this._senders||[],a.apply(this,[c]),c.getTracks().forEach(d=>{const C=this._senders.find(y=>y.track===d);C&&this._senders.splice(this._senders.indexOf(C),1)})}}else if(typeof A=="object"&&A.RTCPeerConnection&&"getSenders"in A.RTCPeerConnection.prototype&&"createDTMFSender"in A.RTCPeerConnection.prototype&&A.RTCRtpSender&&!("dtmf"in A.RTCRtpSender.prototype)){const e=A.RTCPeerConnection.prototype.getSenders;A.RTCPeerConnection.prototype.getSenders=function(){const o=e.apply(this,[]);return o.forEach(a=>a._pc=this),o},Object.defineProperty(A.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function zP(A){if(!A.RTCPeerConnection)return;const e=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){const[o,a,c]=arguments;if(arguments.length>0&&typeof o=="function")return e.apply(this,arguments);if(e.length===0&&(arguments.length===0||typeof o!="function"))return e.apply(this,[]);const d=function(y){const S={};return y.result().forEach(k=>{const V={id:k.id,timestamp:k.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[k.type]||k.type};k.names().forEach(J=>{V[J]=k.stat(J)}),S[V.id]=V}),S},C=function(y){return new Map(Object.keys(y).map(S=>[S,y[S]]))};if(arguments.length>=2){const y=function(S){a(C(d(S)))};return e.apply(this,[y,o])}return new Promise((y,S)=>{e.apply(this,[function(k){y(C(d(k)))},S])}).then(a,c)}}function cb(A){if(!(typeof A=="object"&&A.RTCPeerConnection&&A.RTCRtpSender&&A.RTCRtpReceiver))return;if(!("getStats"in A.RTCRtpSender.prototype)){const o=A.RTCPeerConnection.prototype.getSenders;o&&(A.RTCPeerConnection.prototype.getSenders=function(){const c=o.apply(this,[]);return c.forEach(d=>d._pc=this),c});const a=A.RTCPeerConnection.prototype.addTrack;a&&(A.RTCPeerConnection.prototype.addTrack=function(){const c=a.apply(this,arguments);return c._pc=this,c}),A.RTCRtpSender.prototype.getStats=function(){const c=this;return this._pc.getStats().then(d=>qP(d,c.track,!0))}}if(!("getStats"in A.RTCRtpReceiver.prototype)){const o=A.RTCPeerConnection.prototype.getReceivers;o&&(A.RTCPeerConnection.prototype.getReceivers=function(){const a=o.apply(this,[]);return a.forEach(c=>c._pc=this),a}),HB(A,"track",a=>(a.receiver._pc=a.srcElement,a)),A.RTCRtpReceiver.prototype.getStats=function(){const a=this;return this._pc.getStats().then(c=>qP(c,a.track,!1))}}if(!("getStats"in A.RTCRtpSender.prototype)||!("getStats"in A.RTCRtpReceiver.prototype))return;const e=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof A.MediaStreamTrack){const o=arguments[0];let a,c,d;return this.getSenders().forEach(C=>{C.track===o&&(a?d=!0:a=C)}),this.getReceivers().forEach(C=>(C.track===o&&(c?d=!0:c=C),C.track===o)),d||a&&c?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):a?a.getStats():c?c.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return e.apply(this,arguments)}}function ZP(A){A.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(d=>this._shimmedLocalStreams[d][0])};const e=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addTrack=function(d,C){if(!C)return e.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const y=e.apply(this,arguments);return this._shimmedLocalStreams[C.id]?this._shimmedLocalStreams[C.id].indexOf(y)===-1&&this._shimmedLocalStreams[C.id].push(y):this._shimmedLocalStreams[C.id]=[C,y],y};const o=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(d){this._shimmedLocalStreams=this._shimmedLocalStreams||{},d.getTracks().forEach(S=>{if(this.getSenders().find(k=>k.track===S))throw new DOMException("Track already exists.","InvalidAccessError")});const C=this.getSenders();o.apply(this,arguments);const y=this.getSenders().filter(S=>C.indexOf(S)===-1);this._shimmedLocalStreams[d.id]=[d].concat(y)};const a=A.RTCPeerConnection.prototype.removeStream;A.RTCPeerConnection.prototype.removeStream=function(d){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[d.id],a.apply(this,arguments)};const c=A.RTCPeerConnection.prototype.removeTrack;A.RTCPeerConnection.prototype.removeTrack=function(d){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},d&&Object.keys(this._shimmedLocalStreams).forEach(C=>{const y=this._shimmedLocalStreams[C].indexOf(d);y!==-1&&this._shimmedLocalStreams[C].splice(y,1),this._shimmedLocalStreams[C].length===1&&delete this._shimmedLocalStreams[C]}),c.apply(this,arguments)}}function XP(A,e){if(!A.RTCPeerConnection)return;if(A.RTCPeerConnection.prototype.addTrack&&e.version>=65)return ZP(A);const o=A.RTCPeerConnection.prototype.getLocalStreams;A.RTCPeerConnection.prototype.getLocalStreams=function(){const S=o.apply(this);return this._reverseStreams=this._reverseStreams||{},S.map(k=>this._reverseStreams[k.id])};const a=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(S){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},S.getTracks().forEach(k=>{if(this.getSenders().find(V=>V.track===k))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[S.id]){const k=new A.MediaStream(S.getTracks());this._streams[S.id]=k,this._reverseStreams[k.id]=S,S=k}a.apply(this,[S])};const c=A.RTCPeerConnection.prototype.removeStream;function d(S,k){let V=k.sdp;return Object.keys(S._reverseStreams||[]).forEach(J=>{const gA=S._reverseStreams[J],CA=S._streams[gA.id];V=V.replace(new RegExp(CA.id,"g"),gA.id)}),new RTCSessionDescription({type:k.type,sdp:V})}A.RTCPeerConnection.prototype.removeStream=function(S){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},c.apply(this,[this._streams[S.id]||S]),delete this._reverseStreams[this._streams[S.id]?this._streams[S.id].id:S.id],delete this._streams[S.id]},A.RTCPeerConnection.prototype.addTrack=function(S,k){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const V=[].slice.call(arguments,1);if(V.length!==1||!V[0].getTracks().find(gA=>gA===S))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(gA=>gA.track===S))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const J=this._streams[k.id];if(J)J.addTrack(S),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const gA=new A.MediaStream([S]);this._streams[k.id]=gA,this._reverseStreams[gA.id]=k,this.addStream(gA)}return this.getSenders().find(gA=>gA.track===S)},["createOffer","createAnswer"].forEach(function(S){const k=A.RTCPeerConnection.prototype[S],V={[S](){const J=arguments;return arguments.length&&typeof arguments[0]=="function"?k.apply(this,[gA=>{const CA=d(this,gA);J[0].apply(null,[CA])},gA=>{J[1]&&J[1].apply(null,gA)},arguments[2]]):k.apply(this,arguments).then(gA=>d(this,gA))}};A.RTCPeerConnection.prototype[S]=V[S]});const C=A.RTCPeerConnection.prototype.setLocalDescription;A.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=function(S,k){let V=k.sdp;return Object.keys(S._reverseStreams||[]).forEach(J=>{const gA=S._reverseStreams[J],CA=S._streams[gA.id];V=V.replace(new RegExp(gA.id,"g"),CA.id)}),new RTCSessionDescription({type:k.type,sdp:V})}(this,arguments[0]),C.apply(this,arguments)):C.apply(this,arguments)};const y=Object.getOwnPropertyDescriptor(A.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(A.RTCPeerConnection.prototype,"localDescription",{get(){const S=y.get.apply(this);return S.type===""?S:d(this,S)}}),A.RTCPeerConnection.prototype.removeTrack=function(S){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!S._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(S._pc!==this)throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let k;this._streams=this._streams||{},Object.keys(this._streams).forEach(V=>{this._streams[V].getTracks().find(J=>S.track===J)&&(k=this._streams[V])}),k&&(k.getTracks().length===1?this.removeStream(this._reverseStreams[k.id]):k.removeTrack(S.track),this.dispatchEvent(new Event("negotiationneeded")))}}function US(A,e){!A.RTCPeerConnection&&A.webkitRTCPeerConnection&&(A.RTCPeerConnection=A.webkitRTCPeerConnection),A.RTCPeerConnection&&e.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(o){const a=A.RTCPeerConnection.prototype[o],c={[o](){return arguments[0]=new(o==="addIceCandidate"?A.RTCIceCandidate:A.RTCSessionDescription)(arguments[0]),a.apply(this,arguments)}};A.RTCPeerConnection.prototype[o]=c[o]})}function $P(A,e){HB(A,"negotiationneeded",o=>{const a=o.target;if(!(e.version<72||a.getConfiguration&&a.getConfiguration().sdpSemantics==="plan-b")||a.signalingState==="stable")return o})}var lb=Object.freeze({__proto__:null,shimMediaStream:jP,shimOnTrack:WP,shimGetSendersWithDtmf:gb,shimGetStats:zP,shimSenderReceiverGetStats:cb,shimAddTrackRemoveTrackWithNative:ZP,shimAddTrackRemoveTrack:XP,shimPeerConnection:US,fixNegotiationNeeded:$P,shimGetUserMedia:KP,shimGetDisplayMedia:function(A,e){A.navigator.mediaDevices&&"getDisplayMedia"in A.navigator.mediaDevices||A.navigator.mediaDevices&&(typeof e=="function"?A.navigator.mediaDevices.getDisplayMedia=function(o){return e(o).then(a=>{const c=o.video&&o.video.width,d=o.video&&o.video.height,C=o.video&&o.video.frameRate;return o.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:a,maxFrameRate:C||3}},c&&(o.video.mandatory.maxWidth=c),d&&(o.video.mandatory.maxHeight=d),A.navigator.mediaDevices.getUserMedia(o)})}:console.error("shimGetDisplayMedia: getSourceId argument is not a function"))}});function Ax(A,e){const o=A&&A.navigator,a=A&&A.MediaStreamTrack;if(o.getUserMedia=function(c,d,C){LS("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),o.mediaDevices.getUserMedia(c).then(d,C)},!(e.version>55&&"autoGainControl"in o.mediaDevices.getSupportedConstraints())){const c=function(C,y,S){y in C&&!(S in C)&&(C[S]=C[y],delete C[y])},d=o.mediaDevices.getUserMedia.bind(o.mediaDevices);if(o.mediaDevices.getUserMedia=function(C){return typeof C=="object"&&typeof C.audio=="object"&&(C=JSON.parse(JSON.stringify(C)),c(C.audio,"autoGainControl","mozAutoGainControl"),c(C.audio,"noiseSuppression","mozNoiseSuppression")),d(C)},a&&a.prototype.getSettings){const C=a.prototype.getSettings;a.prototype.getSettings=function(){const y=C.apply(this,arguments);return c(y,"mozAutoGainControl","autoGainControl"),c(y,"mozNoiseSuppression","noiseSuppression"),y}}if(a&&a.prototype.applyConstraints){const C=a.prototype.applyConstraints;a.prototype.applyConstraints=function(y){return this.kind==="audio"&&typeof y=="object"&&(y=JSON.parse(JSON.stringify(y)),c(y,"autoGainControl","mozAutoGainControl"),c(y,"noiseSuppression","mozNoiseSuppression")),C.apply(this,[y])}}}}function ex(A){typeof A=="object"&&A.RTCTrackEvent&&"receiver"in A.RTCTrackEvent.prototype&&!("transceiver"in A.RTCTrackEvent.prototype)&&Object.defineProperty(A.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function qw(A,e){if(typeof A!="object"||!A.RTCPeerConnection&&!A.mozRTCPeerConnection)return;!A.RTCPeerConnection&&A.mozRTCPeerConnection&&(A.RTCPeerConnection=A.mozRTCPeerConnection),e.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(c){const d=A.RTCPeerConnection.prototype[c],C={[c](){return arguments[0]=new(c==="addIceCandidate"?A.RTCIceCandidate:A.RTCSessionDescription)(arguments[0]),d.apply(this,arguments)}};A.RTCPeerConnection.prototype[c]=C[c]});const o={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},a=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){const[c,d,C]=arguments;return a.apply(this,[c||null]).then(y=>{if(e.version<53&&!d)try{y.forEach(S=>{S.type=o[S.type]||S.type})}catch(S){if(S.name!=="TypeError")throw S;y.forEach((k,V)=>{y.set(V,Object.assign({},k,{type:o[k.type]||k.type}))})}return y}).then(d,C)}}function tx(A){if(typeof A!="object"||!A.RTCPeerConnection||!A.RTCRtpSender||A.RTCRtpSender&&"getStats"in A.RTCRtpSender.prototype)return;const e=A.RTCPeerConnection.prototype.getSenders;e&&(A.RTCPeerConnection.prototype.getSenders=function(){const a=e.apply(this,[]);return a.forEach(c=>c._pc=this),a});const o=A.RTCPeerConnection.prototype.addTrack;o&&(A.RTCPeerConnection.prototype.addTrack=function(){const a=o.apply(this,arguments);return a._pc=this,a}),A.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function Ib(A){if(typeof A!="object"||!A.RTCPeerConnection||!A.RTCRtpSender||A.RTCRtpSender&&"getStats"in A.RTCRtpReceiver.prototype)return;const e=A.RTCPeerConnection.prototype.getReceivers;e&&(A.RTCPeerConnection.prototype.getReceivers=function(){const o=e.apply(this,[]);return o.forEach(a=>a._pc=this),o}),HB(A,"track",o=>(o.receiver._pc=o.srcElement,o)),A.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function ix(A){A.RTCPeerConnection&&!("removeStream"in A.RTCPeerConnection.prototype)&&(A.RTCPeerConnection.prototype.removeStream=function(e){LS("removeStream","removeTrack"),this.getSenders().forEach(o=>{o.track&&e.getTracks().includes(o.track)&&this.removeTrack(o)})})}function ub(A){A.DataChannel&&!A.RTCDataChannel&&(A.RTCDataChannel=A.DataChannel)}function ox(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const e=A.RTCPeerConnection.prototype.addTransceiver;e&&(A.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let o=arguments[1]&&arguments[1].sendEncodings;o===void 0&&(o=[]),o=[...o];const a=o.length>0;a&&o.forEach(d=>{if("rid"in d&&!/^[a-z0-9]{0,16}$/i.test(d.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in d&&!(parseFloat(d.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in d&&!(parseFloat(d.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const c=e.apply(this,arguments);if(a){const{sender:d}=c,C=d.getParameters();(!("encodings"in C)||C.encodings.length===1&&Object.keys(C.encodings[0]).length===0)&&(C.encodings=o,d.sendEncodings=o,this.setParametersPromises.push(d.setParameters(C).then(()=>{delete d.sendEncodings}).catch(()=>{delete d.sendEncodings})))}return c})}function sx(A){if(typeof A!="object"||!A.RTCRtpSender)return;const e=A.RTCRtpSender.prototype.getParameters;e&&(A.RTCRtpSender.prototype.getParameters=function(){const o=e.apply(this,arguments);return"encodings"in o||(o.encodings=[].concat(this.sendEncodings||[{}])),o})}function nx(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const e=A.RTCPeerConnection.prototype.createOffer;A.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>e.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):e.apply(this,arguments)}}function rx(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const e=A.RTCPeerConnection.prototype.createAnswer;A.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>e.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):e.apply(this,arguments)}}var ax=Object.freeze({__proto__:null,shimOnTrack:ex,shimPeerConnection:qw,shimSenderGetStats:tx,shimReceiverGetStats:Ib,shimRemoveStream:ix,shimRTCDataChannel:ub,shimAddTransceiver:ox,shimGetParameters:sx,shimCreateOffer:nx,shimCreateAnswer:rx,shimGetUserMedia:Ax,shimGetDisplayMedia:function(A,e){A.navigator.mediaDevices&&"getDisplayMedia"in A.navigator.mediaDevices||A.navigator.mediaDevices&&(A.navigator.mediaDevices.getDisplayMedia=function(o){if(!o||!o.video){const a=new DOMException("getDisplayMedia without video constraints is undefined");return a.name="NotFoundError",a.code=8,Promise.reject(a)}return o.video===!0?o.video={mediaSource:e}:o.video.mediaSource=e,A.navigator.mediaDevices.getUserMedia(o)})}});function gx(A){if(typeof A=="object"&&A.RTCPeerConnection){if("getLocalStreams"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in A.RTCPeerConnection.prototype)){const e=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addStream=function(o){this._localStreams||(this._localStreams=[]),this._localStreams.includes(o)||this._localStreams.push(o),o.getAudioTracks().forEach(a=>e.call(this,a,o)),o.getVideoTracks().forEach(a=>e.call(this,a,o))},A.RTCPeerConnection.prototype.addTrack=function(o,...a){return a&&a.forEach(c=>{this._localStreams?this._localStreams.includes(c)||this._localStreams.push(c):this._localStreams=[c]}),e.apply(this,arguments)}}"removeStream"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.removeStream=function(e){this._localStreams||(this._localStreams=[]);const o=this._localStreams.indexOf(e);if(o===-1)return;this._localStreams.splice(o,1);const a=e.getTracks();this.getSenders().forEach(c=>{a.includes(c.track)&&this.removeTrack(c)})})}}function cx(A){if(typeof A=="object"&&A.RTCPeerConnection&&("getRemoteStreams"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in A.RTCPeerConnection.prototype))){Object.defineProperty(A.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(o){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=o),this.addEventListener("track",this._onaddstreampoly=a=>{a.streams.forEach(c=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(c))return;this._remoteStreams.push(c);const d=new Event("addstream");d.stream=c,this.dispatchEvent(d)})})}});const e=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){const o=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(a){a.streams.forEach(c=>{if(o._remoteStreams||(o._remoteStreams=[]),o._remoteStreams.indexOf(c)>=0)return;o._remoteStreams.push(c);const d=new Event("addstream");d.stream=c,o.dispatchEvent(d)})}),e.apply(o,arguments)}}}function Eb(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const e=A.RTCPeerConnection.prototype,o=e.createOffer,a=e.createAnswer,c=e.setLocalDescription,d=e.setRemoteDescription,C=e.addIceCandidate;e.createOffer=function(S,k){const V=arguments.length>=2?arguments[2]:arguments[0],J=o.apply(this,[V]);return k?(J.then(S,k),Promise.resolve()):J},e.createAnswer=function(S,k){const V=arguments.length>=2?arguments[2]:arguments[0],J=a.apply(this,[V]);return k?(J.then(S,k),Promise.resolve()):J};let y=function(S,k,V){const J=c.apply(this,[S]);return V?(J.then(k,V),Promise.resolve()):J};e.setLocalDescription=y,y=function(S,k,V){const J=d.apply(this,[S]);return V?(J.then(k,V),Promise.resolve()):J},e.setRemoteDescription=y,y=function(S,k,V){const J=C.apply(this,[S]);return V?(J.then(k,V),Promise.resolve()):J},e.addIceCandidate=y}function db(A){const e=A&&A.navigator;if(e.mediaDevices&&e.mediaDevices.getUserMedia){const o=e.mediaDevices,a=o.getUserMedia.bind(o);e.mediaDevices.getUserMedia=c=>a(lx(c))}!e.getUserMedia&&e.mediaDevices&&e.mediaDevices.getUserMedia&&(e.getUserMedia=function(o,a,c){e.mediaDevices.getUserMedia(o).then(a,c)}.bind(e))}function lx(A){return A&&A.video!==void 0?Object.assign({},A,{video:nb(A.video)}):A}function Ix(A){if(!A.RTCPeerConnection)return;const e=A.RTCPeerConnection;A.RTCPeerConnection=function(o,a){if(o&&o.iceServers){const c=[];for(let d=0;de.generateCertificate})}function ux(A){typeof A=="object"&&A.RTCTrackEvent&&"receiver"in A.RTCTrackEvent.prototype&&!("transceiver"in A.RTCTrackEvent.prototype)&&Object.defineProperty(A.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Kw(A){const e=A.RTCPeerConnection.prototype.createOffer;A.RTCPeerConnection.prototype.createOffer=function(o){if(o){o.offerToReceiveAudio!==void 0&&(o.offerToReceiveAudio=!!o.offerToReceiveAudio);const a=this.getTransceivers().find(d=>d.receiver.track.kind==="audio");o.offerToReceiveAudio===!1&&a?a.direction==="sendrecv"?a.setDirection?a.setDirection("sendonly"):a.direction="sendonly":a.direction==="recvonly"&&(a.setDirection?a.setDirection("inactive"):a.direction="inactive"):o.offerToReceiveAudio!==!0||a||this.addTransceiver("audio",{direction:"recvonly"}),o.offerToReceiveVideo!==void 0&&(o.offerToReceiveVideo=!!o.offerToReceiveVideo);const c=this.getTransceivers().find(d=>d.receiver.track.kind==="video");o.offerToReceiveVideo===!1&&c?c.direction==="sendrecv"?c.setDirection?c.setDirection("sendonly"):c.direction="sendonly":c.direction==="recvonly"&&(c.setDirection?c.setDirection("inactive"):c.direction="inactive"):o.offerToReceiveVideo!==!0||c||this.addTransceiver("video",{direction:"recvonly"})}return e.apply(this,arguments)}}function Ex(A){typeof A!="object"||A.AudioContext||(A.AudioContext=A.webkitAudioContext)}var dx=Object.freeze({__proto__:null,shimLocalStreamsAPI:gx,shimRemoteStreamsAPI:cx,shimCallbacksAPI:Eb,shimGetUserMedia:db,shimConstraints:lx,shimRTCIceServerUrls:Ix,shimTrackEventTransceiver:ux,shimCreateOfferLegacy:Kw,shimAudioContext:Ex}),Cx={exports:{}};(function(A){const e={generateIdentifier:function(){return Math.random().toString(36).substring(2,12)}};e.localCName=e.generateIdentifier(),e.splitLines=function(o){return o.trim().split(` +`],{type:"application/javascript"});this._worker=new Worker(URL.createObjectURL(v)),this._worker.postMessage({type:Dr,url:B})}send(B){var v,G;try{(v=this._worker)===null||v===void 0||v.postMessage({type:Us,data:B})}catch(O){(G=this._onSendFail)===null||G===void 0||G.call(this,O)}}bindSocketHandlers(B){const{onOpen:v,onMessage:G,onClose:O,onError:z,onSendFail:X}=B;if(this._worker){const rA={[fs]:v,[as]:G,[wu]:O,[Wa]:z,[hs]:X};this._onSendFail=X,this._worker.onmessage=DA=>{var GA;const{type:JA}=DA?.data||{};typeof rA[JA]=="function"&&((GA=rA[JA])===null||GA===void 0||GA.call(rA,DA?.data))}}}unbindSocketHandlers(){this._worker&&(this._worker.onmessage=null)}disconnect(){this._worker&&(this._worker.postMessage({type:Jc}),this._worker.terminate(),this._worker=null),this._blobUrl&&(URL.revokeObjectURL(this._blobUrl),this._blobUrl=null)}}class qI{}var es,eo=new class{constructor(){this._store=new Map}get(p){return this._store.get(p)}getStorage(p){return Gi?oi?my.getStorageSync({key:p}).data:Ao.getStorageSync(p):this._canUseLocalStorage()?localStorage.getItem(p):{}}set(p,B){const v=this._store.get(p)||{};B instanceof Map?this._store.set(p,B):this._store.set(p,Object.assign(Object.assign({},v),B))}setStorage(p,B){Gi?oi?my.setStorageSync({key:p,data:JSON.stringify(B)}):Ao.setStorageSync(p,JSON.stringify(B)):this._canUseLocalStorage()&&localStorage.setItem(p,JSON.stringify(B))}clear(p){typeof p=="string"?this._store.set(p,{}):this._store.clear()}clearLocalStorage(p){this._canUseLocalStorage()&&(typeof p=="string"?localStorage.setItem(p,""):localStorage.clear())}reset(){this.clear()}_canUseLocalStorage(){return typeof window<"u"&&navigator&&navigator.cookieEnabled&&localStorage}};class pc{connectSocket(B){return this._socket=Ao.connectSocket({url:B,header:{"content-type":"application/json"},multiple:!0,complete:()=>{}}),this._socket}send(B){var v;(v=this._socket)===null||v===void 0||v.send({data:B,fail:this._onSendFail})}bindSocketHandlers(B){const{onOpen:v,onMessage:G,onClose:O,onError:z,onSendFail:X}=B;this._socket&&(this._socket.onClose(O),this._socket.onOpen(v),this._socket.onMessage(rA=>G(rA?.data)),this._socket.onError(()=>z),this._onSendFail=X)}unbindSocketHandlers(){this._socket&&(this._socket.onClose(()=>{}),this._socket.onOpen(()=>{}),this._socket.onMessage(()=>{}),this._socket.onError(()=>{}))}disconnect(){this._socket&&(this._socket.close(),this._socket=null)}}(function(p){p[p.CONNECTED=0]="CONNECTED",p[p.CONNECTING=1]="CONNECTING",p[p.DISCONNECTED=2]="DISCONNECTED"})(es||(es={}));class ng{constructor(B){this._url="",this._readyState=es.DISCONNECTED,this._url=B,this._id=L(),this._emitter=new Pn,oi?this._socket=new pc:ct||Co||Dt||Ve||Ni||Pt?this._socket=new cn({onError:this._onError.bind(this)}):an?this._socket=new qI:this._canUseWebWorker()?this._socket=new sg:this._socket=new Ml,this.connect()}connect(){this.doOpen(),this._bindSocketHandlers()}doOpen(){[es.CONNECTED,es.CONNECTING].includes(this._readyState)||(this._readyState=es.CONNECTING,this._ws=this._socket.connectSocket(this._url))}send(B){this._readyState!==es.CONNECTED?this.reconnect():this._socket.send(B)}reconnect(){[es.CONNECTED,es.CONNECTING].includes(this._readyState)||(this.disconnect(),this.doOpen())}getId(){return this._id}on(B,v,G){this._emitter.on(B,v,G)}off(B,v,G){this._emitter.off(B,v,G)}isConnected(){return this._readyState===es.CONNECTED}disconnect(){this._readyState=es.DISCONNECTED,this._unbindSocketHandlers(),this._socket.disconnect()}_onOpen(B){this._readyState===es.CONNECTING&&(this._readyState=es.CONNECTED,this._emitter.emit("connect",{socketId:this._id,event:B}))}_onMessage(B){this._emitter.emit("message",B)}_onClose(B){this._readyState=es.DISCONNECTED,this._emitter.emit("close",{socketId:this._id,event:B})}_onError(B){this._readyState=es.DISCONNECTED,this._emitter.emit("error",{socketId:this._id,error:B})}_onSendFail(B){this._readyState=es.DISCONNECTED,this._emitter.emit("sendFail",{socketId:this._id,error:B})}_bindSocketHandlers(){this._socket.bindSocketHandlers({onOpen:this._onOpen.bind(this),onMessage:this._onMessage.bind(this),onClose:this._onClose.bind(this),onError:this._onError.bind(this),onSendFail:this._onSendFail.bind(this)})}_unbindSocketHandlers(){this._socket.unbindSocketHandlers()}_canUseWebWorker(){const B=eo.get("cloudConfig")||{};return(n(B.isWorkerEnabled)||B.isWorkerEnabled==="1")&&Go}}const Dg={[gt.SINGAPORE]:[[2e7,3e7],[172e7,173e7]],[gt.KOREA]:[[3e7,4e7],[173e7,174e7]],[gt.GERMANY]:[[4e7,5e7],[174e7,175e7]],[gt.IND]:[[5e7,6e7],[175e7,176e7]],[gt.JPN]:[[6e7,7e7],[176e7,177e7]],[gt.USA]:[[7e7,8e7],[177e7,178e7]],[gt.INDONESIA]:[[8e7,9e7],[178e7,179e7]],[gt.KSA]:[[9e7,1e8],[179e7,18e8]]};function ua(p){var B;if(!((B=eo.get("instance"))===null||B===void 0)&&B.oversea)return gt.OVERSEA;for(const v of Object.keys(Dg))for(const[G,O]of Dg[v])if(p>=G&&p`${ne}=${JA[ne]}`).join("&"));var JA;return v?`${p}/binfo?${GA}&compress=gzip`:`${p}/info?${GA}`}function Hs(p){const B=eo.get("instance"),{sdkAppId:v,testEnv:G,proxyServer:O}=B,z=ua(v);if(G)return Kn(dt.TEST[z].DEFAULT,{isBinary:p});if(!Rs(O))return Kn(O,{isBinary:p});const X=dt.PRODUCTION[z],rA=zt&&X.ANYCAST,DA=zt,GA=!!X.BACKUP_CN;return Kn({[bo.INITIAL]:()=>(To=bo.DEFAULT,X.DEFAULT),[bo.DEFAULT]:()=>(To=bo.IPV6,X.IPV6),[bo.IPV6]:()=>(To=bo.BACKUP,X.BACKUP),[bo.BACKUP]:()=>DA?(To=bo.BACKUP_WEB_ONLY,function(JA){const ne=Math.floor(10001*Math.random())+1e4;return JA.replace("*",String(ne))}(X.BACKUP_WEB_ONLY)):GA?(To=bo.BACKUP_CN,X.BACKUP_CN):rA?(To=bo.ANYCAST,X.ANYCAST):X.DEFAULT,[bo.BACKUP_WEB_ONLY]:()=>GA?(To=bo.BACKUP_CN,X.BACKUP_CN):rA?(To=bo.ANYCAST,X.ANYCAST):X.DEFAULT,[bo.BACKUP_CN]:()=>(To=rA?bo.ANYCAST:bo.DEFAULT,X[To]),[bo.ANYCAST]:()=>(To=bo.DEFAULT,X.ANYCAST="",X.DEFAULT)}[To](),{isBinary:p})}var Sg=new class{constructor(){this._timeOffsetWithServer=0}getServerTimeMs(){return Date.now()+this._timeOffsetWithServer}getServerTimeSeconds(){return Math.floor(this.getServerTimeMs()/1e3)}getTimeOffsetWithServer(){return this._timeOffsetWithServer}calculateTimeOffsetWithServer(p,B){const v=Date.now(),G=v-p;this._timeOffsetWithServer=B+G-v}};const mc=16;var fn=new class{constructor(){this._tasks=[],this._timer=null,this._taskMap=new Map}_addTaskToScheduler(p){const{id:B}=p;this.removeTask(B),this._tasks.push(p),this._taskMap.set(B,p),this._sort(),this._scheduleNextTask()}_createTask(p){const{id:B,callback:v,context:G,isOnce:O=!1,intervalMs:z=mc}=p,X=Math.max(z,mc);return{id:B,nextExecuteTime:Date.now()+X,intervalMs:z,callback:v,context:G,isOnce:O}}addTask(p){const B=this._createTask(p);this._addTaskToScheduler(B)}addOnceTask(p){const B=this._createTask(Object.assign(Object.assign({},p),{isOnce:!0}));this._addTaskToScheduler(B)}removeTask(p){const B=this._tasks.findIndex(v=>v.id===p);B>-1&&(this._tasks.splice(B,1),this._taskMap.delete(p),this._scheduleNextTask())}updateTaskInterval(p,B){const v=this._taskMap.get(p);v&&(v.intervalMs=B,v.nextExecuteTime=Date.now()+B,this._sort(),this._scheduleNextTask())}clearAllTasks(){this._tasks=[],this._taskMap.clear(),this._timer&&(clearTimeout(this._timer),this._timer=null)}dispose(){this.clearAllTasks()}_sort(){this._tasks.sort((p,B)=>p.nextExecuteTime-B.nextExecuteTime)}_scheduleNextTask(){this._timer&&(clearTimeout(this._timer),this._timer=null);const p=this._tasks[0];if(p){const B=Math.max(0,p.nextExecuteTime-Date.now());this._timer=setTimeout(()=>this._execute(),B)}}_execute(){const p=Date.now();for(;this._tasks.length&&this._tasks[0].nextExecuteTime<=p;){const B=this._tasks[0];try{B.context?B.callback.call(B.context):B.callback(),B.isOnce?this.removeTask(B.id):(B.nextExecuteTime=p+B.intervalMs,this._sort())}catch(v){console.warn(`Task ${B.id} execution failed:`,v),B.isOnce&&this.removeTask(B.id)}}this._scheduleNextTask()}};function Ga(p){const B=[];for(let v=0;v=55296&&G<=56319){const O=p.charCodeAt(++v)-56320+(G-55296<<10)+65536;B.push(240|O>>18,128|O>>12&63,128|O>>6&63,128|63&O)}else G<=127?B.push(G):G<=2047?B.push(192|G>>6,128|63&G):B.push(224|G>>12,128|G>>6&63,128|63&G)}return new Uint8Array(B)}function In(p){const B=Array.isArray(p)?[]:Object.create(null);for(const v in p)Object.prototype.hasOwnProperty.call(p,v)&&_(v)&&p[v]!=null&&(p[v]===null||typeof p[v]!="object"?B[v]=p[v]:B[v]=In(p[v]));return B}function ys(p,B){if(BA.includes(p))return 0;const v=Ga(JSON.stringify(B));let G=4294967295;const{length:O}=v;for(let z=0;z>>=1:G=G>>>1^3988292384}return(4294967295^G)>>>0}function Ea(p){const{servcmd:B,data:v}=p,G=function(z){const X=eo.get("login")||{},rA=eo.get("instance")||{};return{servcmd:z,ver:"v4",platform:VA,websdkappid:537048168,websdkversion:"1.7.3",a2:X.a2Key||void 0,tinyid:X.tinyID||void 0,status_instid:X.statusInstanceId||0,sdkappid:rA.sdkAppId,contenttype:"json",reqtime:Math.floor(Date.now()/1e3),identifier:X.a2Key?void 0:X.userId,usersig:X.a2Key?void 0:X.userSig,sdkability:478343027,sdkability_ext:lA(""),cappid:rA.applicationID||0,tjgID:"",seq:Sa(),cs:0}}(B),O=In(v);return G.cs=ys(B,O),{head:G,body:O}}function yn(p){const{servcmd:B,data:v}=p,G=function(z){const X=eo.get("login")||{},rA=eo.get("instance")||{};return{servcmd:z,ver:"v4",platform:VA,websdkappid:537048168,websdkversion:"1.7.3",sdkappid:rA.sdkAppId,contenttype:"",reqtime:Math.floor(Date.now()/1e3),identifier:"",usersig:"",status_instid:X.statusInstanceId||0,sdkability:478343027,sdkability_ext:lA(""),cappid:rA.applicationID||0,seq:Sa(),cs:0}}(B),O=In(v);return G.cs=ys(B,O),{head:G,body:O}}let ba=L();function Sa(){return ba=ba<2415919103?ba+1:L(),ba}function $(){var p;const B=eo.get("login")||{},v=eo.get("instance")||{};return{sdk_type:30,sdk_app_id:v.sdkAppId,sdk_version:"1.6.18",tiny_id:Number(B.tinyID),user_id:B.userId||((p=eo.get("webPush"))===null||p===void 0?void 0:p.userId),platform:VA,instance_id:v.instanceId,trace_id:new Date().getTime()}}var j,vA=Object.freeze({__proto__:null,calcBodyCRC:ys,filterProtocolDataInvalidFields:In,generateCosSpecifiedData:function(p){const{servcmd:B,data:v}=p,G=function(z){const X=eo.get("login")||{},rA=eo.get("instance")||{};return{servcmd:z,ver:"v4",platform:VA,websdkappid:537048168,websdkversion:"1.7.3",sdkappid:rA.sdkAppId,contenttype:"json",reqtime:Math.floor(Date.now()/1e3),identifier:X.userId,usersig:X.userSig,status_instid:X.statusInstanceId||0,sdkability:478343027,sdkability_ext:lA(""),cappid:rA.applicationID||0,seq:Sa(),cs:0}}(B),O=In(v);return G.cs=ys(B,O),{head:G,body:O}},generateProtocolData:Ea,generateSSOLogProtocolData:yn,generateSequence:Sa,getCommonHead:$,getHostSite:ua,taskScheduler:fn,timeManager:Sg});(function(p){p[p.info=4]="info",p[p.warning=5]="warning",p[p.error=6]="error"})(j||(j={}));const jA={method:"extension",networkType:"network_type",eventType:"event_type",code:"error_code",message:"error_message",moreMessage:"more_message",duplicate:"duplicate",costTime:"cost_time",level:"level",uiPlatform:"ui_platform",timestamp:"timestamp"};class oe{constructor(B){this.level=j.info,this._canSendLog=!0,this._logCreatedAt=Sg.getServerTimeMs(),this.timestamp=0,this.networkType=8,this.code=0,this.moreMessage="",this.method="",this.message="",this.costTime=0,this.duplicate=!1,this.eventType=0,this.uiPlatform=this._getUiPlatform(),this._sdkEdition=this._getSDKEdition();const{method:v,eventType:G=0,message:O="",costTime:z=0,error:X,uiPlatform:rA,moreMessage:DA="",code:GA=0,startTime:JA=0}=B||{};this.eventType=G,this.method=v,this.message=O,this.costTime=z,this.moreMessage=`${DA} startTime:${JA}`,this.code=GA,X&&this.setError(X),Rs(rA)||(this.uiPlatform=rA)}setMoreMessage(B){this.moreMessage=`${this.moreMessage} ${B}`}updateLogCreatedAtByTimeOffset(){this._logCreatedAt+=Sg.getTimeOffsetWithServer()}end(B=!1){this._canSendLog&&(this._canSendLog=!1,this.timestamp=Sg.getServerTimeMs(),this._ssoLogModule.pushToLogQueue(this._convertSSOLogDataKeyToServe()),B&&this._ssoLogModule.uploadSSOLogData())}setError(B){var v;return B instanceof Error?this._canSendLog?(!((v=eo.get("netWorkMonitor"))===null||v===void 0)&&v.isNetworkOnline&&(B.errorCode&&(this.code=B.errorCode),B.errorMessage&&this.setMoreMessage(B.errorMessage)),this.level=j.error,this):this:(console.warn("SSOLogData.setError value not instanceof Error, please check!"),this)}setLogInfo(B){return Object.keys(B).forEach(v=>{Object.keys(jA).includes(v)&&(this[v]=B[v])}),this}setSSOLogModule(B){this._ssoLogModule=B}_convertSSOLogDataKeyToServe(){const B={};return Object.keys(this).forEach(v=>{const G=v;jA[G]&&(B[jA[G]]=this[G])}),B}_getUiPlatform(){var B;const v=(B=eo.get("instance"))===null||B===void 0?void 0:B.scene;if(typeof v=="string"){const G=Number(v);return isNaN(G)?void 0:G}}_getSDKEdition(){var B;return(B=eo.get("instance"))===null||B===void 0?void 0:B.sdkEdition}}var ye;(function(p){p.RECONNECTED="reconnected",p.CLOUD_CONFIG_UPDATE="cloud_config_update",p.SOCKET_DISCONNECTED="socket_disconnected"})(ye||(ye={}));var He=ye;const Pe=20,rt=6e4,ht=[4,5,6],_t="report-logger";var Vt=new class{constructor(){this._sdkAppIdBlackList=[],this._tinyIdWhiteList=[],this._reportLevel=[4,5,6],this._minThreshold=Pe,this._maxThreshold=100,this._waitingTime=rt,this._lastReportAt=Date.now(),this._ssoLogMap=new Map,this._logLevel=IA.DEBUG,this._throttleConfig={global:{throttleTime:me,maxCount:ae},single:{throttleTime:ZA,maxCount:KA}},this._globalThrottle={count:0,startTime:Date.now()},this._singleThrottleMap=new Map,gn.subscribeInnerEvent(He.CLOUD_CONFIG_UPDATE,this._handleCloudConfigUpdate,this),fn.addTask({id:_t,intervalMs:1e3,callback:this._checkAndReportIfDue,context:this}),this._logQueue=[],this._savePlatFormInfo()}_handleCloudConfigUpdate(p){const{evt_rpt_threshold:B=Pe,evt_rpt_waiting:v=rt,evt_rpt_level:G=ht,evt_rpt_sdkappid_bl:O="",evt_rpt_tinyid_wl:z="",evt_rpt_global_throttle_time:X=me,evt_rpt_global_throttle_count:rA=ae,evt_rpt_single_throttle_time:DA=ZA,evt_rpt_single_throttle_count:GA=KA}=p||{};this._sdkAppIdBlackList=O.split(",").map(JA=>Number(JA)),this._waitingTime=Number(v),this._minThreshold=B,this._reportLevel=G,this._tinyIdWhiteList=z.split(","),this._throttleConfig={global:{throttleTime:X,maxCount:rA},single:{throttleTime:DA,maxCount:GA}}}createSSOLogData(p){const B=new oe(p);return B.setSSOLogModule(this),this._ssoLogMap.set(p.method,B),B}getSSOLogData(p){return this._ssoLogMap.get(p)||{}}pushToLogQueue(p){p&&(this._logQueue.push(p),this._shouldUploadImmediately()&&this.uploadSSOLogData())}setLogLevel(p){[IA.DEBUG,IA.ERROR,IA.INFO,IA.NONE,IA.WARN].includes(p)&&(this._logLevel=p)}debug(p,B="",v){this._log(IA.DEBUG,p,B,v)}info(p,B="",v){this._log(IA.INFO,p,B,v)}warn(p,B="",v){this._log(IA.WARN,p,B,v)}error(p,B="",v){this._log(IA.ERROR,p,B,v)}_shouldUploadImmediately(){return this._logQueue.length>=this._minThreshold}_isReportDue(){return Date.now()>=this._lastReportAt+this._waitingTime}_checkAndReportIfDue(){this._isReportDue()&&this._logQueue.length>0&&this.uploadSSOLogData()}uploadSSOLogData(){return mA(this,void 0,void 0,function*(){if(this._logQueue.length===0)return;const p=this._logQueue.slice();this._logQueue=[];try{const B=this._filterLogs(p);if(B.length===0)return void(this._lastReportAt=Date.now());const v={Header:$(),Event:B};Rs(v.Header.user_id)||(yield function(G){const O="imopenstat.tim_web_report_v2",z=yn({servcmd:O,data:G}),X=`${z.head.seq}${O}`;return Rl.sendPacket(z,{requestId:X})}(v))}catch(B){this._requeueFailedLogs(p),this.debug("uploadSSOLogData",en(B))}finally{this._lastReportAt=Date.now()}})}_requeueFailedLogs(p){this._logQueue=p.concat(this._logQueue);const B=this._logQueue.length-200;B>0&&(this._logQueue.splice(0,B),this.debug("uploadSSOLogData",`log queue overflow, dropped ${B} oldest logs`))}_savePlatFormInfo(){var p,B;if(ct){const v=(B=(p=wx.getAccountInfoSync)===null||p===void 0?void 0:p.call(wx))===null||B===void 0?void 0:B.miniProgram;if(v){const{appId:G,envVersion:O}=v;eo.set("instance",{appId:G,envVersion:O})}}else zt&&eo.set("instance",{href:window.location.href})}_filterLogs(p){const{tinyID:B}=eo.get("login")||{},{sdkAppId:v}=eo.get("instance")||{};return this._sdkAppIdBlackList.includes(v)&&!this._tinyIdWhiteList.includes(B)?[]:p.filter(G=>this._reportLevel.includes(G.level))}_checkThrottle(p){return!!this._checkGlobalThrottle()||this._checkSingleThrottle(p)}_checkGlobalThrottle(){const p=Date.now();if(p-this._globalThrottle.startTime>=this._throttleConfig.global.throttleTime)this._globalThrottle.count=1,this._globalThrottle.startTime=p;else if(this._globalThrottle.count++,this._globalThrottle.count>this._throttleConfig.global.maxCount)return!0;return!1}_checkSingleThrottle(p){const B=Date.now(),v=this._singleThrottleMap.get(p);return v?B-v.startTime>=this._throttleConfig.single.throttleTime?(v.count=1,v.startTime=B,!1):v.count>=this._throttleConfig.single.maxCount||(v.count++,!1):(this._singleThrottleMap.set(p,{count:1,startTime:B}),!1)}_shouldLog(p){return p>=this._logLevel&&this._logLevel!==IA.NONE}_shouldReport(p){return this._reportLevel.includes(HA[p])}_formatLog(p,B,v,G){const O=new Date,z=`${O.getHours()}:${O.getMinutes()}:${O.getSeconds()}:${O.getMilliseconds()}`,X=`<${IA[p]}>`;return ve||Gi?[`${gA} [${z}] ${X} [${B}] ${v}`]:["%c%s%c%s","background:#0abf5b; padding:1px; border-radius:3px; color: #fff",gA,"",`[${z}] ${X} [${B}] ${v} params: ${en(G)}`]}_log(p,B,v,G){if(this._shouldLog(p)){const O=this._formatLog(p,B,v,G);RA[p].apply(console,O)}if(this._shouldReport(p)){const O=this._getThrottleKey(B,v,G);this._checkThrottle(O)||this.createSSOLogData(Object.assign(Object.assign({message:v},G),{method:B})).end()}}_getThrottleKey(p,B,v){const G=`${p}${B}${en(Object.assign(Object.assign({},v),{costTime:""}))}`,O=Ga(JSON.stringify(G));let z=4294967295;const{length:X}=O;for(let rA=0;rA>>=1:z=z>>>1^3988292384}return`${(4294967295^z)>>>0}`}reset(){console.log("SSO_LOG_MODULE.reset"),fn.removeTask(_t),gn.unSubscribeInnerEvent(He.CLOUD_CONFIG_UPDATE,this._handleCloudConfigUpdate,this),this._lastReportAt=0,this.uploadSSOLogData(),this._sdkAppIdBlackList=[],this._tinyIdWhiteList=[],this._minThreshold=Pe,this._maxThreshold=100,this._waitingTime=rt,this._logQueue=[],this._logLevel=IA.DEBUG,this._globalThrottle={count:0,startTime:Date.now()},this._singleThrottleMap.clear()}};const ui=15e3,It="Channel",Yt="channel_schedule_task",qi="channel_reconnect_task",Wi="connected",qs="connecting",vi="disconnected",zo=1e3,Mg="network_status_change",ar="activity_status_change",Sr="send_fail",Yn="reconnect_failed",vl="socket_error",Ks="socket_close";function gI(p){return gI=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(B){return typeof B}:function(B){return B&&typeof Symbol=="function"&&B.constructor===Symbol&&B!==Symbol.prototype?"symbol":typeof B},gI(p)}function Wg(p){throw new Error('Could not dynamically require "'+p+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var fc,_u={exports:{}},Ma=(fc||(fc=1,function(p){p.exports=function B(v,G,O){function z(DA,GA){if(!G[DA]){if(!v[DA]){if(!GA&&Wg)return Wg(DA);if(X)return X(DA,!0);var JA=new Error("Cannot find module '"+DA+"'");throw JA.code="MODULE_NOT_FOUND",JA}var ne=G[DA]={exports:{}};v[DA][0].call(ne.exports,function(he){return z(v[DA][1][he]||he)},ne,ne.exports,B,v,G,O)}return G[DA].exports}for(var X=Wg,rA=0;rA>>6:(he<65536?ne[at++]=224|he>>>12:(ne[at++]=240|he>>>18,ne[at++]=128|he>>>12&63),ne[at++]=128|he>>>6&63),ne[at++]=128|63&he);return ne},G.buf2binstring=function(JA){return GA(JA,JA.length)},G.binstring2buf=function(JA){for(var ne=new O.Buf8(JA.length),he=0,Ze=ne.length;he>10&1023,Ht[Ze++]=56320|1023&st)}return GA(Ht,Ze)},G.utf8border=function(JA,ne){var he;for((ne=ne||JA.length)>JA.length&&(ne=JA.length),he=ne-1;0<=he&&(192&JA[he])==128;)he--;return he<0||he===0?ne:he+rA[JA[he]]>ne?he:ne}},{"./common":1}],3:[function(B,v,G){v.exports=function(O,z,X,rA){for(var DA=65535&O,GA=O>>>16&65535,JA=0;X!==0;){for(X-=JA=2e3>>1:z>>>1;X[rA]=z}return X}();v.exports=function(z,X,rA,DA){var GA=O,JA=DA+rA;z^=-1;for(var ne=DA;ne>>8^GA[255&(z^X[ne])];return-1^z}},{}],6:[function(B,v,G){v.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],7:[function(B,v,G){v.exports=function(O,z){var X,rA,DA,GA,JA,ne,he,Ze,st,at,Ft,Ht,Pi,co,Xi,di,xo,ts,mi,zi,Ws,Ne,Tt,FA,Ai;X=O.state,rA=O.next_in,FA=O.input,DA=rA+(O.avail_in-5),GA=O.next_out,Ai=O.output,JA=GA-(z-O.avail_out),ne=GA+(O.avail_out-257),he=X.dmax,Ze=X.wsize,st=X.whave,at=X.wnext,Ft=X.window,Ht=X.hold,Pi=X.bits,co=X.lencode,Xi=X.distcode,di=(1<>>=mi=ts>>>24,Pi-=mi,(mi=ts>>>16&255)==0)Ai[GA++]=65535&ts;else{if(!(16&mi)){if(!(64&mi)){ts=co[(65535&ts)+(Ht&(1<>>=mi,Pi-=mi),Pi<15&&(Ht+=FA[rA++]<>>=mi=ts>>>24,Pi-=mi,!(16&(mi=ts>>>16&255))){if(!(64&mi)){ts=Xi[(65535&ts)+(Ht&(1<>>=mi,Pi-=mi,(mi=GA-JA)>3,Ht&=(1<<(Pi-=zi<<3))-1,O.next_in=rA,O.next_out=GA,O.avail_in=rA>>24&255)+(Ne>>>8&65280)+((65280&Ne)<<8)+((255&Ne)<<24)}function Ht(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new O.Buf16(320),this.work=new O.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function Pi(Ne){var Tt;return Ne&&Ne.state?(Tt=Ne.state,Ne.total_in=Ne.total_out=Tt.total=0,Ne.msg="",Tt.wrap&&(Ne.adler=1&Tt.wrap),Tt.mode=Ze,Tt.last=0,Tt.havedict=0,Tt.dmax=32768,Tt.head=null,Tt.hold=0,Tt.bits=0,Tt.lencode=Tt.lendyn=new O.Buf32(st),Tt.distcode=Tt.distdyn=new O.Buf32(at),Tt.sane=1,Tt.back=-1,ne):he}function co(Ne){var Tt;return Ne&&Ne.state?((Tt=Ne.state).wsize=0,Tt.whave=0,Tt.wnext=0,Pi(Ne)):he}function Xi(Ne,Tt){var FA,Ai;return Ne&&Ne.state?(Ai=Ne.state,Tt<0?(FA=0,Tt=-Tt):(FA=1+(Tt>>4),Tt<48&&(Tt&=15)),Tt&&(Tt<8||15=ii.wsize?(O.arraySet(ii.window,Tt,FA-ii.wsize,ii.wsize,0),ii.wnext=0,ii.whave=ii.wsize):(Ai<(En=ii.wsize-ii.wnext)&&(En=Ai),O.arraySet(ii.window,Tt,FA-Ai,En,ii.wnext),(Ai-=En)?(O.arraySet(ii.window,Tt,FA-Ai,Ai,0),ii.wnext=Ai,ii.whave=ii.wsize):(ii.wnext+=En,ii.wnext===ii.wsize&&(ii.wnext=0),ii.whave>>8&255,FA.check=X(FA.check,ke,2,0),mt=Bt=0,FA.mode=2;break}if(FA.flags=0,FA.head&&(FA.head.done=!1),!(1&FA.wrap)||(((255&Bt)<<8)+(Bt>>8))%31){Ne.msg="incorrect header check",FA.mode=30;break}if((15&Bt)!=8){Ne.msg="unknown compression method",FA.mode=30;break}if(mt-=4,yA=8+(15&(Bt>>>=4)),FA.wbits===0)FA.wbits=yA;else if(yA>FA.wbits){Ne.msg="invalid window size",FA.mode=30;break}FA.dmax=1<>8&1),512&FA.flags&&(ke[0]=255&Bt,ke[1]=Bt>>>8&255,FA.check=X(FA.check,ke,2,0)),mt=Bt=0,FA.mode=3;case 3:for(;mt<32;){if(wi===0)break A;wi--,Bt+=Ai[ii++]<>>8&255,ke[2]=Bt>>>16&255,ke[3]=Bt>>>24&255,FA.check=X(FA.check,ke,4,0)),mt=Bt=0,FA.mode=4;case 4:for(;mt<16;){if(wi===0)break A;wi--,Bt+=Ai[ii++]<>8),512&FA.flags&&(ke[0]=255&Bt,ke[1]=Bt>>>8&255,FA.check=X(FA.check,ke,2,0)),mt=Bt=0,FA.mode=5;case 5:if(1024&FA.flags){for(;mt<16;){if(wi===0)break A;wi--,Bt+=Ai[ii++]<>>8&255,FA.check=X(FA.check,ke,2,0)),mt=Bt=0}else FA.head&&(FA.head.extra=null);FA.mode=6;case 6:if(1024&FA.flags&&(wi<(Zi=FA.length)&&(Zi=wi),Zi&&(FA.head&&(yA=FA.head.extra_len-FA.length,FA.head.extra||(FA.head.extra=new Array(FA.head.extra_len)),O.arraySet(FA.head.extra,Ai,ii,Zi,yA)),512&FA.flags&&(FA.check=X(FA.check,Ai,Zi,ii)),wi-=Zi,ii+=Zi,FA.length-=Zi),FA.length))break A;FA.length=0,FA.mode=7;case 7:if(2048&FA.flags){if(wi===0)break A;for(Zi=0;yA=Ai[ii+Zi++],FA.head&&yA&&FA.length<65536&&(FA.head.name+=String.fromCharCode(yA)),yA&&Zi>9&1,FA.head.done=!0),Ne.adler=FA.check=0,FA.mode=12;break;case 10:for(;mt<32;){if(wi===0)break A;wi--,Bt+=Ai[ii++]<>>=7&mt,mt-=7&mt,FA.mode=27;break}for(;mt<3;){if(wi===0)break A;wi--,Bt+=Ai[ii++]<>>=1)){case 0:FA.mode=14;break;case 1:if(zi(FA),FA.mode=20,Tt!==6)break;Bt>>>=2,mt-=2;break A;case 2:FA.mode=17;break;case 3:Ne.msg="invalid block type",FA.mode=30}Bt>>>=2,mt-=2;break;case 14:for(Bt>>>=7&mt,mt-=7&mt;mt<32;){if(wi===0)break A;wi--,Bt+=Ai[ii++]<>>16^65535)){Ne.msg="invalid stored block lengths",FA.mode=30;break}if(FA.length=65535&Bt,mt=Bt=0,FA.mode=15,Tt===6)break A;case 15:FA.mode=16;case 16:if(Zi=FA.length){if(wi>>=5,mt-=5,FA.ndist=1+(31&Bt),Bt>>>=5,mt-=5,FA.ncode=4+(15&Bt),Bt>>>=4,mt-=4,286>>=3,mt-=3}for(;FA.have<19;)FA.lens[ue[FA.have++]]=0;if(FA.lencode=FA.lendyn,FA.lenbits=7,XA={bits:FA.lenbits},NA=DA(0,FA.lens,0,19,FA.lencode,0,FA.work,XA),FA.lenbits=XA.bits,NA){Ne.msg="invalid code lengths set",FA.mode=30;break}FA.have=0,FA.mode=19;case 19:for(;FA.have>>16&255,Qa=65535&de,!((os=de>>>24)<=mt);){if(wi===0)break A;wi--,Bt+=Ai[ii++]<>>=os,mt-=os,FA.lens[FA.have++]=Qa;else{if(Qa===16){for(Te=os+2;mt>>=os,mt-=os,FA.have===0){Ne.msg="invalid bit length repeat",FA.mode=30;break}yA=FA.lens[FA.have-1],Zi=3+(3&Bt),Bt>>>=2,mt-=2}else if(Qa===17){for(Te=os+3;mt>>=os)),Bt>>>=3,mt-=3}else{for(Te=os+7;mt>>=os)),Bt>>>=7,mt-=7}if(FA.have+Zi>FA.nlen+FA.ndist){Ne.msg="invalid bit length repeat",FA.mode=30;break}for(;Zi--;)FA.lens[FA.have++]=yA}}if(FA.mode===30)break;if(FA.lens[256]===0){Ne.msg="invalid code -- missing end-of-block",FA.mode=30;break}if(FA.lenbits=9,XA={bits:FA.lenbits},NA=DA(GA,FA.lens,0,FA.nlen,FA.lencode,0,FA.work,XA),FA.lenbits=XA.bits,NA){Ne.msg="invalid literal/lengths set",FA.mode=30;break}if(FA.distbits=6,FA.distcode=FA.distdyn,XA={bits:FA.distbits},NA=DA(JA,FA.lens,FA.nlen,FA.ndist,FA.distcode,0,FA.work,XA),FA.distbits=XA.bits,NA){Ne.msg="invalid distances set",FA.mode=30;break}if(FA.mode=20,Tt===6)break A;case 20:FA.mode=21;case 21:if(6<=wi&&258<=Bo){Ne.next_out=us,Ne.avail_out=Bo,Ne.next_in=ii,Ne.avail_in=wi,FA.hold=Bt,FA.bits=mt,rA(Ne,Ls),us=Ne.next_out,En=Ne.output,Bo=Ne.avail_out,ii=Ne.next_in,Ai=Ne.input,wi=Ne.avail_in,Bt=FA.hold,mt=FA.bits,FA.mode===12&&(FA.back=-1);break}for(FA.back=0;ca=(de=FA.lencode[Bt&(1<>>16&255,Qa=65535&de,!((os=de>>>24)<=mt);){if(wi===0)break A;wi--,Bt+=Ai[ii++]<>ta)])>>>16&255,Qa=65535&de,!(ta+(os=de>>>24)<=mt);){if(wi===0)break A;wi--,Bt+=Ai[ii++]<>>=ta,mt-=ta,FA.back+=ta}if(Bt>>>=os,mt-=os,FA.back+=os,FA.length=Qa,ca===0){FA.mode=26;break}if(32&ca){FA.back=-1,FA.mode=12;break}if(64&ca){Ne.msg="invalid literal/length code",FA.mode=30;break}FA.extra=15&ca,FA.mode=22;case 22:if(FA.extra){for(Te=FA.extra;mt>>=FA.extra,mt-=FA.extra,FA.back+=FA.extra}FA.was=FA.length,FA.mode=23;case 23:for(;ca=(de=FA.distcode[Bt&(1<>>16&255,Qa=65535&de,!((os=de>>>24)<=mt);){if(wi===0)break A;wi--,Bt+=Ai[ii++]<>ta)])>>>16&255,Qa=65535&de,!(ta+(os=de>>>24)<=mt);){if(wi===0)break A;wi--,Bt+=Ai[ii++]<>>=ta,mt-=ta,FA.back+=ta}if(Bt>>>=os,mt-=os,FA.back+=os,64&ca){Ne.msg="invalid distance code",FA.mode=30;break}FA.offset=Qa,FA.extra=15&ca,FA.mode=24;case 24:if(FA.extra){for(Te=FA.extra;mt>>=FA.extra,mt-=FA.extra,FA.back+=FA.extra}if(FA.offset>FA.dmax){Ne.msg="invalid distance too far back",FA.mode=30;break}FA.mode=25;case 25:if(Bo===0)break A;if(Zi=Ls-Bo,FA.offset>Zi){if((Zi=FA.offset-Zi)>FA.whave&&FA.sane){Ne.msg="invalid distance too far back",FA.mode=30;break}Zi>FA.wnext?(Zi-=FA.wnext,Hr=FA.wsize-Zi):Hr=FA.wnext-Zi,Zi>FA.length&&(Zi=FA.length),oc=FA.window}else oc=En,Hr=us-FA.offset,Zi=FA.length;for(Boxo?(mi=Hr[oc+at[Tt]],zi=mt[ug+at[Tt]]):(mi=96,zi=0),Ht=1<>us)+(Pi-=Ht)]=ts<<24|mi<<16|zi,Pi!==0;);for(Ht=1<>=1;if(Ht!==0?(Bt&=Ht-1,Bt+=Ht):Bt=0,Tt++,--Ls[Ne]==0){if(Ne===Ai)break;Ne=JA[ne+at[Tt]]}if(En{const rA=new Uint8Array(X).slice(4);let DA;try{DA=Ma.inflate(rA,{to:"string"})}catch(GA){console.error("inflate error",GA)}return DA})(p.data):function(X){const rA=new Uint8Array(X);let DA="",GA=0;const{length:JA}=rA;for(;GA0)for(let st=0;st{var G;const{uplinkData:O,canResend:z,resolve:X,reject:rA,timeout:DA}=B;if(z){this._pendingRequests.set(v,{resolve:X,reject:rA,timestamp:Date.now(),uplinkData:O,timeout:DA,canResend:z});const GA=this._isBinarySupported?Ga(O).buffer:O;(G=this._socketAdapter)===null||G===void 0||G.send(GA)}else this._pendingRequests.delete(v)})}_onConnect(p){const{socketId:B,event:v={}}=p||{};this._connectionId=B,this._connectionEstablishedTime=Date.now();const G=Date.now()-this._connectionStartTime,O=`${It}.onConnect cost:${G} ms. socketID:${B} res:${JSON.stringify(v)}`;if(this._ssoLog({method:"onConnect",message:O}),this._checkPendingRequestsAndResend(),this._sendHeartbeatIfReady(),this._isReconnecting){const z=`${It}.reconnect success`;this._ssoLog({method:"reconnectSuccess",message:z}),gn.emitInnerEvent(He.RECONNECTED),this._isReconnecting=!1}this._resetReconnectDelay(),this._handleConnectStateChange({state:Wi,shouldEmitEvent:!0,shouldAttemptReconnect:!1})}_sendAck(p){const B=Ea({servcmd:"openim.ws_msg_push_ack",data:{SessionData:p}});this.sendPacket(B)}_executeScheduledTaskIfReady(){return mA(this,void 0,void 0,function*(){this._clearTimeoutRequest(),this._sendHeartbeatIfReady()})}_canSendHeartbeat(){var p;return((p=this._socketAdapter)===null||p===void 0?void 0:p.isConnected())&&Date.now()>=this._nextHeartbeatAt&&!this._isHeartbeatInProgress}_sendHeartbeat(){return mA(this,void 0,void 0,function*(){var p;const B=Ea({servcmd:"heartbeat.alive",data:{}});try{const v=`${B.head.seq}${B.head.servcmd}`;yield this.sendPacket(B,{requestId:v,timeout:3e3})}catch(v){const G=(p=eo.get("netWorkMonitor"))===null||p===void 0?void 0:p.isNetworkOnline,O=`${It}.sendHeartbeat failed. isNetWorkOnline:${G} error: ${en(v)}`;this._ssoLog({method:"sendHeartbeatError",message:O}),this._handleConnectStateChange({state:vi,shouldEmitEvent:!0,shouldAttemptReconnect:!0})}})}_sendHeartbeatIfReady(){return mA(this,void 0,void 0,function*(){this._canSendHeartbeat()&&(this._isHeartbeatInProgress=!0,yield this._sendHeartbeat(),this._isHeartbeatInProgress=!1)})}_updateHeartbeatTime(){this._nextHeartbeatAt=Co?Date.now()+5e3:Date.now()+1e4}_handleNetworkStatusChange(p){const B=`${It}.networkStatusChange ${JSON.stringify(p)}`;this._ssoLog({method:"networkStatusChange",message:B});const{isNetworkOnline:v,networkType:G}=p;v&&G!=="none"?this._handleConnectStateChange({state:Wi,shouldEmitEvent:!1,shouldAttemptReconnect:!0,reason:Mg}):this._handleConnectStateChange({state:vi,shouldEmitEvent:!1,shouldAttemptReconnect:!0,reason:Mg})}isPrivateNetWork(){const p=eo.get("instance")||{};return p.proxyServer&&!p.fileDownloadProxy}_handleConnectStateChange(p){const{state:B,shouldAttemptReconnect:v,shouldEmitEvent:G,reason:O}=p,z=`${It}._handleConnectStateChange currentConnectState: ${this._currentConnectState} shouldAttemptReconnect: ${v} shouldEmitEvent: ${G} reason: ${O}`;this._currentConnectState!==B&&(this._ssoLog({method:"handleConnectStateChange",message:z}),G&&(Vt.info("_handleConnectStateChange",` from ${this._currentConnectState} to ${B}`),gn.emitOuterEvent("netStateChange",{name:"netStateChange",data:{state:B}}),this._currentConnectState=B,B===vi&&gn.emitInnerEvent(He.SOCKET_DISCONNECTED)),v&&(this._resetReconnectDelay(),fn.addTask({id:qi,intervalMs:this._intendedDelay,callback:this._scheduleReconnectWithBackoff,context:this})))}_handleActivityStatusChange(p){var B,v;const G=(v=(B=this._socketAdapter)===null||B===void 0?void 0:B._ws)===null||v===void 0?void 0:v.readyState,O=`${It}.activityStatusChange ${JSON.stringify(p)} readyState: ${G}`;Vt.debug("activityStatusChange",O),G===3&&this._handleConnectStateChange({state:vi,shouldEmitEvent:!0,shouldAttemptReconnect:!0,reason:ar})}_resetReconnectDelay(){var p;Vt.debug(`${It}._resetReconnectDelay`),fn.removeTask(qi);const B=(p=eo.get("activityMonitor"))===null||p===void 0?void 0:p.isActive;this._intendedDelay=B?zo:1e3}_scheduleReconnectWithBackoff(){var p;const B=(p=eo.get("activityMonitor"))===null||p===void 0?void 0:p.isActive;this._intendedDelay=B?Math.min(5e3,Math.max(zo,1.5*this._intendedDelay)):Math.min(3e5,Math.max(1e3,1.5*this._intendedDelay));const v=new Date().toTimeString().slice(0,8),G=`${It}.scheduleReconnectWithBackoff timeStr: ${v} intendedDelay: ${this._intendedDelay}`;Vt.debug(G),this.reconnect(),fn.updateTaskInterval(qi,this._intendedDelay)}_ssoLog(p){const{method:B,message:v}=p;Vt.info(B,v)}_diagnose(){this.isPrivateNetWork()||(this._lastDiagnoseAt=Date.now(),function(p){mA(this,void 0,void 0,function*(){const B=p.split("/")[2];if(!B.startsWith("ws"))return;const v=`https://${B}/v3/netcheck/getconninfo?${p.slice(p.indexOf("info?")+5)}&reqtime=${Date.now()}`;try{yield Yi({method:"GET",url:v,data:{}})}catch(G){Vt.warn("diagnoseBySSO",`diagnoseBySSO failed. error:${G.message}`)}})}(this._url),function(p){mA(this,void 0,void 0,function*(){const B=`https://boce-cdn.my-imcloud.com/v3/netcheck/getconninfo?${p.slice(p.indexOf("info?")+5)}&reqtime=${Date.now()}`;try{yield Yi({method:"GET",url:B,data:{}})}catch(v){Vt.warn(`diagnoseByCDN', 'diagnoseByCDN failed. error:${v.message}`)}})}(this._url),this._beforeSendInterceptors=[])}_clearTimeoutRequest(){for(const[p,B]of this._pendingRequests.entries()){const{reject:v,timestamp:G,timeout:O}=B;Date.now()-G>=O&&(this._pendingRequests.delete(p),Date.now()-this._lastDiagnoseAt>=3e4&&this._diagnose(),v({errorCode:mr,errorInfo:"NETWORK_TIMEOUT",data:{requestId:p}}))}}_updateIsBinarySupported(){var p;if(!((p=eo.get("instance"))===null||p===void 0)&&p.devMode)return void(this._isBinarySupported=!1);const B=ds();if((oi||ct&&B==="windows"||ks)&&(this._isBinarySupported=!1),Co){const{uniRuntimeVersion:v=""}=Ao.getSystemInfoSync();(function(G){const O=G.split(".").map(Number),[z=0,X=0,rA=0]=O;return z>2||!(z<2)&&(X>2||!(X<2)&&rA>=6)})(v)||(this._isBinarySupported=!1)}}_isCompressedData(p){const B=new Uint8Array(p);return B[0]===67&&B[1]===79&&B[2]===77&&B[3]===80}};const Se={init:function(p){eo.set("instance",p),Rl.init()},destroy:function(){Rl.dispose(),eo.clear(),fn.dispose()},notificationCenter:gn,channel:Rl,store:eo,ssoLog:Vt,utils:yg,common:vA,constants:lt},De=p=>typeof p=="function";function vg(p,B,v){const G=v||[];if(!p||!B)return!1;const O=Object.keys(p).filter(X=>!G.includes(X)),z=Object.keys(B).filter(X=>!G.includes(X));return O.length===z.length&&O.every(X=>!!B.hasOwnProperty(X)&&(typeof p[X]=="object"&&p[X]!==null?vg(p[X],B[X],v):p[X]===B[X]))}var rg;(function(p){p.SDK_READY="sdkStateReady",p.SDK_NOT_READY="sdkStateNotReady",p.SDK_DESTROY="sdkDestroy",p.MESSAGE_RECEIVED="onMessageReceived",p.ROOM_CUSTOM_DATA_RECEIVED="onRoomCustomDataReceived",p.MESSAGE_MODIFIED="onMessageModified",p.MESSAGE_REVOKED="onMessageRevoked",p.MESSAGE_READ_BY_PEER="onMessageReadByPeer",p.MESSAGE_READ_RECEIPT_RECEIVED="onMessageReadReceiptReceived",p.MESSAGE_EXTENSIONS_UPDATED="onMessageExtensionsUpdated",p.MESSAGE_EXTENSIONS_DELETED="onMessageExtensionsDeleted",p.MESSAGE_REACTIONS_UPDATED="onMessageReactionsUpdated",p.CONVERSATION_LIST_UPDATED="onConversationListUpdated",p.TOTAL_UNREAD_MESSAGE_COUNT_UPDATED="onTotalUnreadMessageCountUpdated",p.CONVERSATION_GROUP_LIST_UPDATED="onConversationGroupListUpdated",p.CONVERSATION_IN_GROUP_UPDATED="onConversationInGroupUpdated",p.GROUP_LIST_UPDATED="onGroupListUpdated",p.GROUP_ATTRIBUTES_UPDATED="groupAttributesUpdated",p.GROUP_COUNTER_UPDATED="onGroupCounterUpdated",p.TOPIC_CREATED="onTopicCreated",p.TOPIC_DELETED="onTopicDeleted",p.TOPIC_UPDATED="onTopicUpdated",p.PROFILE_UPDATED="onProfileUpdated",p.USER_STATUS_UPDATED="onUserStatusUpdated",p.BLACKLIST_UPDATED="blacklistUpdated",p.FRIEND_LIST_UPDATED="onFriendListUpdated",p.FRIEND_GROUP_LIST_UPDATED="onFriendGroupListUpdated",p.FRIEND_APPLICATION_LIST_UPDATED="onFriendApplicationListUpdated",p.MY_FOLLOWERS_LIST_UPDATED="onMyFollowersListUpdated",p.MY_FOLLOWING_LIST_UPDATED="onMyFollowingListUpdated",p.MUTUAL_FOLLOWERS_LIST_UPDATED="onMutualFollowersListUpdated",p.KICKED_OUT="kickedOut",p.ERROR="error",p.NET_STATE_CHANGE="netStateChange",p.ALL_RECEIVE_MESSAGE_OPT_UPDATED="onAllReceiveMessageOptUpdated",p.SERVER_CONFIG_UPDATED="onServerConfigUpdated",p.PINNED_GROUP_MESSAGE_UPDATED="onPinnedGroupMessageUpdated",p.WEB_PUSH_MESSAGE_RECEIVED="onWebPushMessageReceived",p.GROUP_ONLINE_MEMBER_COUNT_CHANGED="onGroupOnlineMemberCountChanged",p.RICH_STATUS_CHANGED="onRichStatusChanged"})(rg||(rg={}));var Rg,Dn=rg;(function(p){p.LOGOUT="logout",p.DESTROY="destroy",p.CLOUD_CONFIG_UPDATE="cloud_config_update",p.PROFILE_UPDATE="profile_updated",p.ERROR="error",p.RECONNECTED="reconnected",p.FORCE_OFFLINE="im_open_status.stat_forceoffline",p.COMMERCIAL_CONFIG_PUSH="im_sdk_config_mgr.push_imsdk_purchase_bitsv2",p.OVERLOAD_PUSH="OverLoadPush.notify2",p.NEW_MESSAGE="new_message",p.MESSAGE_PUSH="im_open_push.msg_push",p.MESSAGE_DELETED="message_deleted",p.MESSAGE_REVOKED="message_revoked",p.MESSAGE_MODIFIED="message_modified",p.SOCKET_DISCONNECTED="socket_disconnected",p.CONVERSATION_UPDATED="conversation_updated",p.TOPIC_MESSAGE_DELETED="topic_message_deleted",p.TOPIC_MESSAGE_REVOKED="topic_message_revoked",p.TOPIC_MESSAGE_MODIFIED="topic_message_modified",p.TOPIC_NEW_MESSAGE="topic_new_message",p.QUALITY_STAT="quality_stat",p.SYNC_CONVERSATION_LIST="sync_conversation_list",p.HISTORY_MESSAGE_FETCHED="history_message_fetched"})(Rg||(Rg={}));var Mr,Ei=Rg;(function(p){p.NEW_INVITATION_RECEIVED="newInvitationReceived",p.INVITEE_ACCEPTED="ts_invitee_accepted",p.INVITEE_REJECTED="ts_invitee_rejected",p.INVITATION_CANCELLED="ts_invitation_cancelled",p.INVITATION_TIMEOUT="ts_invitation_timeout",p.INVITATION_MODIFIED="ts_invitation_modified"})(Mr||(Mr={}));var ro=Mr;const qc=Object.assign({},{KICKED_OUT_MULT_ACCOUNT:"multipleAccount",KICKED_OUT_MULT_DEVICE:"multipleDevice",KICKED_OUT_USERSIG_EXPIRED:"userSigExpired",KICKED_OUT_REST_API:"REST_API_Kick"}),zg={MSG_TEXT:"TIMTextElem",MSG_IMAGE:"TIMImageElem",MSG_AUDIO:"TIMSoundElem",MSG_FILE:"TIMFileElem",MSG_FACE:"TIMFaceElem",MSG_VIDEO:"TIMVideoFileElem",MSG_LOCATION:"TIMLocationElem",MSG_GRP_TIP:"TIMGroupTipElem",MSG_GRP_SYS_NOTICE:"TIMGroupSystemNoticeElem",MSG_CUSTOM:"TIMCustomElem",MSG_MERGER:"TIMRelayElem",MSG_STREAM:"TIMStreamElem"};var wg;(function(p){p.UNSENT="unSend",p.SUCCESS="success",p.FAIL="fail"})(wg||(wg={}));const Yr={modify:Ei.MESSAGE_MODIFIED,delete:Ei.MESSAGE_DELETED,revoke:Ei.MESSAGE_REVOKED};var yc;(function(p){p[p.FORWARD=0]="FORWARD",p[p.BACKWARD=1]="BACKWARD"})(yc||(yc={}));const Kc=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},zg),{MSG_PRIORITY_HIGH:"High",MSG_PRIORITY_NORMAL:"Normal",MSG_PRIORITY_LOW:"Low",MSG_PRIORITY_LOWEST:"Lowest"}),{RECEIVE_WITH_OFFLINE_PUSH_EXCEPT_AT:"AcceptNotNotifyExceptAt",NOT_RECEIVE_OFFLINE_PUSH_EXCEPT_AT:"AcceptNotNotifyExceptAt",NOT_RECEIVE_MSG_EXCEPT_AT:"NotReceiveMsgExceptAt",MSG_AT_ALL:"__kImSDK_MesssageAtALL__"}),{MSG_REMIND_ACPT_AND_NOTE:"AcceptAndNotify",MSG_REMIND_ACPT_NOT_NOTE:"AcceptNotNotify",MSG_REMIND_DISCARD:"Discard"}),{MessageStatus:wg,Direction:yc}),ag={[Yr.modify]:Ei.TOPIC_MESSAGE_MODIFIED,[Yr.delete]:Ei.TOPIC_MESSAGE_DELETED,[Yr.revoke]:Ei.TOPIC_MESSAGE_REVOKED},Tu={GENDER_UNKNOWN:"Gender_Type_Unknown",GENDER_FEMALE:"Gender_Type_Female",GENDER_MALE:"Gender_Type_Male",USER_STATUS_UNKNOWN:0,USER_STATUS_ONLINE:1,USER_STATUS_OFFLINE:2,USER_STATUS_UNLOGINED:3,USER_NOT_FOUND:"@TLS#NOT_FOUND"},DE=Object.assign({},Tu),_g={CONV_C2C:"C2C",CONV_GROUP:"GROUP",CONV_TOPIC:"TOPIC",CONV_SYSTEM:"@TIM#SYSTEM"},ka=Object.assign(Object.assign(Object.assign(Object.assign({},_g),{CONV_AT_ME:1,CONV_AT_ALL:2,CONV_AT_ALL_AT_ME:3}),{CONV_MARK_TYPE_STAR:1,CONV_MARK_TYPE_UNREAD:2,CONV_MARK_TYPE_FOLD:4,CONV_MARK_TYPE_HIDE:8}),{READ_ALL_C2C_MSG:"readAllC2CMessage",READ_ALL_GROUP_MSG:"readAllGroupMessage",READ_ALL_MSG:"readAllMessage"}),Dc=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},{SNS_TYPE_NO_RELATION:"CheckResult_Type_NoRelation",SNS_TYPE_A_WITH_B:"CheckResult_Type_AWithB",SNS_TYPE_B_WITH_A:"CheckResult_Type_BWithA",SNS_TYPE_BOTH_WAY:"CheckResult_Type_BothWay"}),{ALLOW_TYPE_ALLOW_ANY:"AllowType_Type_AllowAny",ALLOW_TYPE_NEED_CONFIRM:"AllowType_Type_NeedConfirm",ALLOW_TYPE_DENY_ANY:"AllowType_Type_DenyAny"}),{SNS_ADD_TYPE_SINGLE:"Add_Type_Single",SNS_ADD_TYPE_BOTH:"Add_Type_Both"}),{SNS_DELETE_TYPE_SINGLE:"Delete_Type_Single",SNS_DELETE_TYPE_BOTH:"Delete_Type_Both"}),{SNS_APPLICATION_TYPE_BOTH:"Pendency_Type_Both",SNS_APPLICATION_SENT_TO_ME:"Pendency_Type_ComeIn",SNS_APPLICATION_SENT_BY_ME:"Pendency_Type_SendOut",SNS_APPLICATION_AGREE:"Response_Action_Agree",SNS_APPLICATION_AGREE_AND_ADD:"Response_Action_AgreeAndAdd"}),{SNS_CHECK_TYPE_BOTH:"CheckResult_Type_Both",SNS_CHECK_TYPE_SINGLE:"CheckResult_Type_Single"}),{FORBID_TYPE_NONE:"AdminForbid_Type_None",FORBID_TYPE_SEND_OUT:"AdminForbid_Type_SendOut"}),SE={GRP_WORK:"Private",GRP_PUBLIC:"Public",GRP_MEETING:"ChatRoom",GRP_AVCHATROOM:"AVChatRoom",GRP_COMMUNITY:"Community",GRP_ROOM:"Room",GRP_LIVE:"Live"},La={COMMUNITY:"@TGS#_",TOPIC:"@TOPIC#_"},na={JOINED:1,QUITTED:2,KICKED:3,ADMIN_SET:4,ADMIN_CANCELED:5,GROUP_PROFILE_UPDATED:6,GROUP_MEMBER_PROFILE_UPDATED:7,TOPIC_PROFILE_UPDATED:8},Tg=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},SE),{GRP_MBR_ROLE_OWNER:"Owner",GRP_MBR_ROLE_ADMIN:"Admin",GRP_MBR_ROLE_MEMBER:"Member",GRP_MBR_ROLE_CUSTOM:"Custom"}),{GRP_TIP_MBR_JOIN:1,GRP_TIP_MBR_QUIT:2,GRP_TIP_MBR_KICKED_OUT:3,GRP_TIP_MBR_SET_ADMIN:4,GRP_TIP_MBR_CANCELED_ADMIN:5,GRP_TIP_GRP_PROFILE_UPDATED:6,GRP_TIP_MBR_PROFILE_UPDATED:7,GRP_TIP_BAN_AVCHATROOM_MEMBER:10,GRP_TIP_UNBAN_AVCHATROOM_MEMBER:11}),{JOIN_OPTIONS_FREE_ACCESS:"FreeAccess",JOIN_OPTIONS_NEED_PERMISSION:"NeedPermission",JOIN_OPTIONS_DISABLE_APPLY:"DisableApply",JOIN_STATUS_SUCCESS:"JoinedSuccess",JOIN_STATUS_ALREADY_IN_GROUP:"AlreadyInGroup",JOIN_STATUS_WAIT_APPROVAL:"WaitAdminApproval"}),{INVITE_OPTIONS_DISABLE_INVITE:"DisableInvite",INVITE_OPTIONS_NEED_PERMISSION:"NeedPermission",INVITE_OPTIONS_FREE_ACCESS:"FreeAccess"}),{GRP_PROFILE_OWNER_ID:"ownerID",GRP_PROFILE_CREATE_TIME:"createTime",GRP_PROFILE_LAST_INFO_TIME:"lastInfoTime",GRP_PROFILE_MEMBER_NUM:"memberNum",GRP_PROFILE_MAX_MEMBER_NUM:"maxMemberNum",GRP_PROFILE_JOIN_OPTION:"joinOption",GRP_PROFILE_INVITE_OPTION:"inviteOption",GRP_PROFILE_INTRODUCTION:"introduction",GRP_PROFILE_NOTIFICATION:"notification",GRP_PROFILE_MUTE_ALL_MBRS:"muteAllMembers"}),{GROUP_ID_PREFIX:La,GROUP_TIPS_OPERATION_TYPE:na}),cI={IOS_OFFLINE_PUSH_NO_SOUND:"push.no_sound",IOS_OFFLINE_PUSH_DEFAULT_SOUND:"default"},Bs=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},qc),Kc),DE),ka),Dc),Tg),cI),{NET_STATE_CONNECTING:"connecting",NET_STATE_DISCONNECTED:"disconnected",NET_STATE_CONNECTED:"connected"}),Uo={NO_SDKAPPID:2e3,NO_TINYID:2022,NO_A2KEY:2023,USER_NOT_LOGGED_IN:2024,REPEAT_LOGIN:2025,MSG_SEND_FAIL:2100,MSG_SEND_FAIL_NOT_IN_AV:2101,MSG_SEND_GRP_WITH_TOPIC_FAIL:2115,MSG_INSTANCE_REQUIRED:2105,MSG_INVALID_CONV_TYPE:2106,MSG_REVOKE_FAIL:2110,MSG_DELETE_FAIL:2111,MSG_UNREAD_ALL_FAIL:2112,READ_RECEIPT_MSG_LIST_EMPTY:2114,CANNOT_DELETE_GRP_SYSTEM_NOTICE:2116,NOT_MY_FRIEND:2700,NETWORK_ERROR:2800,NETWORK_TIMEOUT:2801,NO_NETWORK:2805,UNCAUGHT_ERROR:2903,INVALID_OPERATION:2905,SDK_IS_NOT_READY:2999,LOGGING_IN:3e3,LOGIN_FAILED:3001,KICKED_OUT_MULT_DEVICE:3002,KICKED_OUT_MULT_ACCOUNT:3003,KICKED_OUT_USERSIG_EXPIRED:3004,LOGGED_OUT:3005,KICKED_OUT_REST_API:3006,NO_USE:3122,OPTIONS_IS_EMPTY:3153,MSG_A2KEY_EXPIRED:20002,ACCOUNT_A2KEY_EXPIRED:70001,HELLO_ANSWER_KICKED_OUT:1002,OPEN_SERVICE_OVERLOAD_ERROR:60022},da={BASIC:"1",STANDARD:"2",PROFESSIONAL:"3",NODE:"4"},gr={SYNC_SERVER_INFO_AFTER_RE_ONLINE:"sync-server-info-after-re-online",SYNC_SERVER_INFO_AFTER_LOGIN:"sync-server-info-after-login",RECEIVE_C2C_NEW_MESSAGE:"receive-c2c-new-message",RECEIVE_GROUP_NEW_MESSAGE:"receive-group-new-message",RECEIVE_GROUP_TIPS_NOTIFICATION:"receive-group-tips-notification"},Jt={USER_STATUS_UPDATE:"user-status-update",CONVERSATION_RECOVER:"conversation-recover",HISTORY_MESSAGE_RECOVER:"history-message-recover",BLACKLIST_RECOVER:"blacklist-recover",FRIEND_RECOVER:"friend-recover",GROUP_ATTRIBUTE_CACHE_CLEAR:"group-attribute-cache-clear",UNREAD_MESSAGE_RECOVER:"unread-message-recover",HANDLE_NEW_MESSAGE:"handle-new-message",HANDLE_CONVERSATION_PROFILE_UPDATED:"handle-conversation-profile-updated",COMMERCIAL_CONFIG_UPDATE:"commercial-config-update",UNREAD_MESSAGE_SYNC:"unread-message-sync",FRIEND_AND_BLACKLIST_SYNC:"friend-and-blacklist-sync",SIGNALING_MESSAGE_RECOVER:"signaling-message-recover",GROUP_LIST_SYNC:"group-list-sync",CONVERSATION_LIST_SYNC:"conversation-list-sync",USER_PROFILE_SYNC:"user-profile-sync",CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED:"conversation-update-after-unread-sync-finished",CONVERSATION_UPDATE_AFTER_GROUP_LIST_SYNC_FINISHED:"conversation-update-after-group-list-sync-finished",HANDLE_C2C_NEW_MESSAGE:"handle-c2c-new-message",HANDLE_GROUP_NEW_MESSAGE:"handle-group-new-message",CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE:"create-or-update-conversation-by-receive-new-message",HANDLE_GROUP_TIPS_FROM_SYNC_UNREAD:"handle-group-tips-from-sync-unread",HANDLE_C2C_REVOKED_MESSAGE_FROM_SYNC_UNREAD:"handle-c2c-revoked-message-from-sync-unread",GROUP_REVOKED_NOTICE_RECOVER:"group-revoked-notice-recover",CLOUD_CONFIG_SYNC:"cloud-config-sync",UPDATE_GROUP_NEXT_SEQUENCE:"update-group-next-sequence",EMIT_C2C_MESSAGE_EVENT:"emit-c2c-message-event",EMIT_GROUP_MESSAGE_EVENT:"emit-group-message-event",CONVERSATION_GROUP_LIST_SYNC:"conversation-group-list-sync",CONVERSATION_GROUP_UPDATE:"conversation-group-update",UPDATE_TOPIC_AFTER_UNREAD_SYNC_FINISHED:"update-topic-after-unread-sync-finished",UPDATE_TOPIC_BY_RECEIVE_NEW_MESSAGE:"update-topic-by-received-new-message",TOPIC_REQUEST_INFO_RESET:"topic-request-info-reset",QUALITY_REPORT:"quality-report",GROUP_TIPS_RECOVER:"group-tips-recover",HANDLE_GROUP_TIPS_NOTIFICATION:"handle-group-tips-notification",C2C_HISTORY_MESSAGE_RECOVER:"c2c-history-message-recover",FRIEND_APPLICATION_LIST_RECOVER:"friend-application-list-recover",EMIT_GROUP_TIPS_EVENT:"emit-group-tips-event",STREAM_MESSAGE_RECOVER:"stream-message-recover"},Wt={[gr.SYNC_SERVER_INFO_AFTER_RE_ONLINE]:[{stepId:Jt.USER_STATUS_UPDATE},{stepId:Jt.GROUP_ATTRIBUTE_CACHE_CLEAR},{stepId:Jt.UNREAD_MESSAGE_SYNC,dependency:Jt.C2C_HISTORY_MESSAGE_RECOVER},{stepId:Jt.CONVERSATION_RECOVER},{stepId:Jt.HISTORY_MESSAGE_RECOVER,dependency:Jt.CONVERSATION_RECOVER},{stepId:Jt.BLACKLIST_RECOVER},{stepId:Jt.FRIEND_RECOVER},{stepId:Jt.FRIEND_APPLICATION_LIST_RECOVER},{stepId:Jt.GROUP_REVOKED_NOTICE_RECOVER,dependency:Jt.HISTORY_MESSAGE_RECOVER},{stepId:Jt.GROUP_TIPS_RECOVER,dependency:Jt.HISTORY_MESSAGE_RECOVER},{stepId:Jt.TOPIC_REQUEST_INFO_RESET},{stepId:Jt.HANDLE_C2C_REVOKED_MESSAGE_FROM_SYNC_UNREAD,dependency:Jt.UNREAD_MESSAGE_SYNC},{stepId:Jt.HANDLE_GROUP_TIPS_FROM_SYNC_UNREAD,dependency:Jt.UNREAD_MESSAGE_SYNC},{stepId:Jt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,dependency:[Jt.UNREAD_MESSAGE_SYNC,Jt.CONVERSATION_RECOVER]},{stepId:Jt.EMIT_C2C_MESSAGE_EVENT,dependency:[Jt.UNREAD_MESSAGE_SYNC,Jt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED],skipIfDependencyMissing:!1},{stepId:Jt.C2C_HISTORY_MESSAGE_RECOVER,dependency:Jt.CONVERSATION_RECOVER},{stepId:Jt.STREAM_MESSAGE_RECOVER}],[gr.SYNC_SERVER_INFO_AFTER_LOGIN]:[{stepId:Jt.COMMERCIAL_CONFIG_UPDATE},{stepId:Jt.CLOUD_CONFIG_SYNC},{stepId:Jt.USER_PROFILE_SYNC},{stepId:Jt.UNREAD_MESSAGE_SYNC},{stepId:Jt.FRIEND_AND_BLACKLIST_SYNC},{stepId:Jt.GROUP_LIST_SYNC},{stepId:Jt.CONVERSATION_LIST_SYNC},{stepId:Jt.SIGNALING_MESSAGE_RECOVER,dependency:Jt.UNREAD_MESSAGE_SYNC},{stepId:Jt.UPDATE_TOPIC_AFTER_UNREAD_SYNC_FINISHED,dependency:[Jt.UNREAD_MESSAGE_SYNC]},{stepId:Jt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,dependency:[Jt.UNREAD_MESSAGE_SYNC,Jt.CONVERSATION_LIST_SYNC]},{stepId:Jt.CONVERSATION_UPDATE_AFTER_GROUP_LIST_SYNC_FINISHED,dependency:[Jt.GROUP_LIST_SYNC,Jt.CONVERSATION_LIST_SYNC]},{stepId:Jt.CONVERSATION_GROUP_LIST_SYNC},{stepId:Jt.CONVERSATION_GROUP_UPDATE,dependency:[Jt.CONVERSATION_LIST_SYNC,Jt.CONVERSATION_GROUP_LIST_SYNC]},{stepId:Jt.QUALITY_REPORT}],[gr.RECEIVE_C2C_NEW_MESSAGE]:[{stepId:Jt.HANDLE_C2C_NEW_MESSAGE},{stepId:Jt.UNREAD_MESSAGE_SYNC},{stepId:Jt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,dependency:Jt.HANDLE_C2C_NEW_MESSAGE},{stepId:Jt.EMIT_C2C_MESSAGE_EVENT,dependency:[Jt.HANDLE_C2C_NEW_MESSAGE,Jt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE],skipIfDependencyMissing:!1},{stepId:Jt.CONVERSATION_UPDATE_AFTER_UNREAD_SYNC_FINISHED,dependency:[Jt.UNREAD_MESSAGE_SYNC]}],[gr.RECEIVE_GROUP_NEW_MESSAGE]:[{stepId:Jt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Jt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,dependency:Jt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Jt.UPDATE_GROUP_NEXT_SEQUENCE,dependency:Jt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Jt.UPDATE_TOPIC_BY_RECEIVE_NEW_MESSAGE,dependency:Jt.HANDLE_GROUP_NEW_MESSAGE},{stepId:Jt.EMIT_GROUP_MESSAGE_EVENT,dependency:[Jt.HANDLE_GROUP_NEW_MESSAGE,Jt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE],skipIfDependencyMissing:!1}],[gr.RECEIVE_GROUP_TIPS_NOTIFICATION]:[{stepId:Jt.HANDLE_GROUP_TIPS_NOTIFICATION},{stepId:Jt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,dependency:Jt.HANDLE_GROUP_TIPS_NOTIFICATION},{stepId:Jt.EMIT_GROUP_TIPS_EVENT,dependency:[Jt.CREATE_OR_UPDATE_CONVERSATION_BY_RECEIVE_NEW_MESSAGE,Jt.HANDLE_GROUP_TIPS_NOTIFICATION],skipIfDependencyMissing:!1}]},Ng={MESSAGE_SEND_SUCCESS_RATE:"messageSendSuccessRate"},lI={TOTAL_COUNT:"sendMessageTotalCount",SUCCESS_COUNT:"sendMessageSuccessCount",FAILED_COUNT:"sendMessageFailedCount",SEND_COST:"sendMessageCost"},cr=["login","getMyProfile","getUserProfile","updateMyProfile","setSelfStatus","getUserStatus","subscribeUserStatus","unsubscribeUserStatus","modifyMessage","deleteGroupMember","dismissGroup","getGroupMemberList","getGroupOnlineMemberCount","joinGroup","markGroupMemberList","quitGroup","searchCloudMessages","searchCloudGroups","searchCloudGroupMembers","searchCloudUsers","getMyFollowingList","getMyFollowersList","getMutualFollowersList","followUser","unfollowUser","getUserFollowInfo","checkFollowType","getFriendProfile","addFriend","deleteFriend","updateFriend","checkFriend","setFriendApplicationRead","createFriendGroup","deleteFriendGroup","addToFriendGroup","removeFromFriendGroup","renameFriendGroup","changeGroupOwner","createGroup","dismissGroup","getGroupList","getGroupOnlineMemberCount","getGroupProfile","searchGroupByID","updateGroupProfile","handleGroupApplication","deleteGroupAttributes","getGroupAttributes","initGroupAttributes","setGroupAttributes","addGroupMember","deleteGroupMember","getGroupMemberList","getGroupMemberProfile","setGroupMemberMuteTime","setGroupMemberNameCard","setGroupMemberRole","deleteMessage","revokeMessage","setMessageExtensions","getMessageExtensions","deleteMessageExtensions","getMessageList","addMessageReaction","removeMessageReaction","clearHistoryMessage","sendMessageReadReceipt","getMessageReadReceiptList","getGroupMessageReadMemberList","createMergerMessage","invite","accept","cancel","reject","modifyInvitation","deleteConversation","pinConversation","setMessageRead","setAllMessageRead","getConversationList","getTotalUnreadMessageCount","renameConversationGroup","deleteConversationGroup","markConversation","setConversationCustomData","deleteConversationsFromGroup","addConversationsToGroup","createConversationGroup"];var KI=Object.freeze({__proto__:null,ERROR_CODE:Uo,InnerEvent:Ei,NEED_LOG_API:cr,OuterConstant:Bs,OuterEvent:Dn,PUSH:cI,QUALITY_METRICS:Ng,SDK_EDITION:da,SDK_INFO:{VERSION:"1.7.3",APPID:537048168},SEND_MESSAGE_STAT:lI,SignalingEvent:ro,WEB_PUSH_ACCOUNT_TYPE:1,WORKFLOW_DEFINITIONS:Wt,WORKFLOW_NAME:gr,WORKFLOW_STEP:Jt}),za,ra,un;(function(p){p[p.USER_INITIATED=0]="USER_INITIATED",p[p.KICKED_OUT=1]="KICKED_OUT"})(za||(za={})),function(p){p[p.multipleAccount=1]="multipleAccount",p[p.multipleDevice=2]="multipleDevice",p[p.restApi=3]="restApi"}(ra||(ra={})),function(p){p[p.multipleDevice=3002]="multipleDevice",p[p.multipleAccount=3003]="multipleAccount",p[p.usersigExpired=70001]="usersigExpired",p[p.restApi=20002]="restApi"}(un||(un={}));const Sn={[ra.multipleAccount]:"multipleAccount",[ra.multipleDevice]:"multipleDevice",[ra.restApi]:"REST_API_Kick",[un.multipleAccount]:"multipleAccount",[un.multipleDevice]:"multipleDevice",[un.restApi]:"REST_API_Kick",[un.usersigExpired]:"userSigExpired"},Nu="login_online_presence_task",{ERROR:Gg,DESTROY:Ua,FORCE_OFFLINE:jc}=Ei,{KICKED_OUT_MULT_ACCOUNT:jI,KICKED_OUT_MULT_DEVICE:ME,KICKED_OUT_REST_API:II,ACCOUNT_A2KEY_EXPIRED:Gu,MSG_A2KEY_EXPIRED:wl}=Uo;class Sc{init(){const{notificationCenter:B}=Se;B.subscribeInnerEvent(jc,this._handleForceOfflineFromServerPush,this),B.subscribeInnerEvent(Gg,wl,this._handleForceOfflineFromResponse,this,this._isChatLoginEvent),B.subscribeInnerEvent(Gg,Gu,this._handleForceOfflineFromResponse,this,this._isChatLoginEvent),B.subscribeInnerEvent(Gg,jI,this._handleForceOfflineFromResponse,this),B.subscribeInnerEvent(Gg,ME,this._handleForceOfflineFromResponse,this),B.subscribeInnerEvent(Gg,II,this._handleForceOfflineFromResponse,this),B.subscribeInnerEvent(Ua,this._dispose,this)}_handleForceOfflineFromServerPush(B){var v;if(((v=Se.store.get("login"))===null||v===void 0?void 0:v.isLoggedIn)===!0){const{EventArray:G=[]}=B?.body||{};this._extractKickedOutMessages(G).forEach(O=>{const{KickoutMsgNotify:{KickType:z,NewInstInfo:X,Instid:rA}}=O;this._isCurrentInstanceKickedOut(rA)&&this._processKickedOutReasonInfo({kickedOutReasonCode:z,newInstanceInfo:X})})}}_extractKickedOutMessages(B){return B.reduce((v,G)=>[...v,...G.C2cNotifyMsgArray||[]],[]).filter(v=>{var G;return this._isKickedOut((G=v?.KickoutMsgNotify)===null||G===void 0?void 0:G.KickType)})}_handleForceOfflineFromResponse(B){const{errorCode:v}=B;this._processKickedOutReasonInfo({kickedOutReasonCode:v})}_processKickedOutReasonInfo(B){return mA(this,void 0,void 0,function*(){const{kickedOutReasonCode:v}=B,{ssoLog:G,utils:{safeStringify:O}}=Se;try{this._logKickedOutEvent(B),this._shouldLogoutAfterKickedOut(v)?yield Se.login.loginAction.logout(za.KICKED_OUT):Se.login.loginAction.handleLogoutCompleted()}catch(z){G.debug("_processKickedOutReasonInfo",` fail ${O(z)}`)}finally{Se.notificationCenter.emitOuterEvent(Dn.KICKED_OUT,{data:{type:Sn[v]},name:Dn.KICKED_OUT})}})}_logKickedOutEvent(B){const{kickedOutReasonCode:v,newInstanceInfo:G={}}=B,O=`type:${Sn[v]} newInstanceInfo: ${JSON.stringify(G)}`;Se.ssoLog.warn("kickedOut",O)}_isKickedOut(B){return[ra.multipleAccount,ra.multipleDevice,ra.restApi].includes(B)}_isChatLoginEvent(B){const{requestHead:v}=B||{};return v?.idtype!==1}_shouldLogoutAfterKickedOut(B){return![un.usersigExpired,ra.restApi].includes(B)}_isCurrentInstanceKickedOut(B){const{isLoggedIn:v,statusInstanceId:G}=Se.store.get("login")||{};return v===!0&&B===G}_dispose(){const{notificationCenter:B}=Se;B.unSubscribeInnerEvent(jc,this._handleForceOfflineFromServerPush,this),B.unSubscribeInnerEvent(Gg,Gu,this._handleForceOfflineFromResponse,this),B.unSubscribeInnerEvent(Gg,wl,this._handleForceOfflineFromResponse,this),B.unSubscribeInnerEvent(Gg,jI,this._handleForceOfflineFromResponse,this),B.unSubscribeInnerEvent(Gg,ME,this._handleForceOfflineFromResponse,this),B.unSubscribeInnerEvent(Gg,II,this._handleForceOfflineFromResponse,this),B.unSubscribeInnerEvent(Ua,this._dispose,this)}}function bu(p){return mA(this,void 0,void 0,function*(){const B="im_open_status.wslogin",v=Se.common.generateProtocolData({servcmd:B,data:{State:"Online",is_web_uniapp:0,InstType:0,CustomInfo:p}}),G=`${v.head.seq}${B}`,O=yield Se.channel.sendPacket(v,{timeout:9e4,requestId:G});if(O){const{HelloInterval:z,InstId:X,TinyId:rA,TimeStamp:DA,CustomStatus:GA,PurchaseBits:JA,A2Key:ne,RichMsgAuthKey:he,ErrorCode:Ze,ErrorInfo:st,ActionStatus:at}=O;return{helloInterval:z,instanceID:X,tinyID:rA,timeStamp:DA,customStatus:GA,purchaseBits:JA,a2Key:ne,authKey:he,errorCode:Ze,errorInfo:st,actionStatus:at}}})}function ku(){const{store:p}=Se;return ua(p.get("instance").sdkAppId)!==gt.CHINA}function _l(p){var B;try{const v=eo.getStorage("errorMessage");if(!p||!v)return"";const G=((B=JSON.parse(v))===null||B===void 0?void 0:B.errorMessage)||{},{code:O,replacement1:z="",replacement2:X=""}=p;if(!O)return"";const rA=ku()?`${O}_en`:`${O}_cn`;let DA=G[G[rA]?rA:O]||"";return DA&&(z&&(DA=DA.replace("$replacement1",z)),X&&(DA=DA.replace("$replacement2",X))),DA}catch(v){return console.warn("Error parsing stored error messages:",v),""}}class rs extends Error{constructor(B={}){B.code=B.code||B.errorCode;let{functionName:v="Unknown",code:G,message:O="",data:z="",moreMessage:X="",errorMessage:rA=""}=B;rA=(G?_l(B):"")||rA||O;let DA=G?`${v} failed. error: {"message": ${rA}, "code": ${G}}`:`${v} failed. error: {"message": ${rA}}`;DA=`${DA} ${X}`,super(),this.code=G,this.errorCode=G,this.errorMessage=rA,this.message=DA,this.data=z}}function gs(p,B){var v;if(p&&((v=Se.store.get("login"))===null||v===void 0?void 0:v.isLoggedIn)!==!0)throw new rs({code:Uo.USER_NOT_LOGGED_IN,functionName:B})}function ud(p,B,v){if(Array.isArray(p))for(let G=0;G{return GA===(JA=G,Object.prototype.toString.call(JA).match(/^\[object (.*)\]$/)[1].toLowerCase());var JA})){for(let JA=0;JA{const{interceptor:O,context:z}=G;O.apply(z,[v])})}(p)}function vr(p,B){EI.push({interceptor:p,context:B})}function Mc(p){const{params:B,auth:v}=p;B&&typeof B=="object"&&Object.assign(Ed,B),v&&typeof v=="object"&&Object.assign(vE,v)}function Wc(p){return Se.store.get("commercialConfig").get(p)}class tn{constructor(){this._handlers=new Map,this._activeWorkflows=new Map,this._stepStartTimes=new Map,this._logHandlers={start:(B,v)=>{const G=Date.now();v?(this._stepStartTimes.set(`${B}-${v}`,G),Se.ssoLog.debug("_executeWorkflowStep",`[Workflow ${B}] Step ${v} started at ${new Date(G).toISOString()}`)):(this._workflowStartTimes.set(B,G),Se.ssoLog.debug("_executeWorkflowStep",`[Workflow ${B}] started at ${new Date(G).toISOString()}`))},success:(B,v)=>{const G=Date.now();if(v){const O=this._stepStartTimes.get(`${B}-${v}`),z=O?G-O:0;this._stepStartTimes.delete(`${B}-${v}`),Se.ssoLog.debug("_executeWorkflowStep",`[Workflow ${B}] Step ${v} completed successfully at ${new Date(G).toISOString()} (${z}ms)`)}else{const O=this._workflowStartTimes.get(B),z=O?G-O:0;this._workflowStartTimes.delete(B),Se.ssoLog.debug("_executeWorkflowStep",`[Workflow ${B}] completed successfully at ${new Date(G).toISOString()} (${z}ms)`)}},error:(B,v,G)=>{const{ssoLog:O,utils:{safeStringify:z}}=Se,X=Date.now();if(v){const rA=this._stepStartTimes.get(`${B}-${v}`),DA=rA?X-rA:0;this._stepStartTimes.delete(`${B}-${v}`),O.error("_executeWorkflowStep",`[Workflow ${B}] Step ${v} failed at ${new Date(X).toISOString()} (${DA}ms) ${z(G)}`,{error:G})}else{const rA=this._workflowStartTimes.get(B),DA=rA?X-rA:0;this._workflowStartTimes.delete(B),O.error("_executeWorkflowStep",`[Workflow ${B}] failed at ${new Date(X).toISOString()} (${DA}ms) ${z(G)}`,{error:G})}}}}static getInstance(){return tn._instance||(tn._instance=new tn),tn._instance}static setInstance(B){tn._instance=B}init(){this._initializeWorkflows()}registerWorkflowStep(B,v,G,O){if(!this._handlers.has(B))return void Se.ssoLog.debug("registerWorkflowStep",`Workflow '${B}' not defined in core`);if(!Wt[B].find(X=>X.stepId===v))return void Se.ssoLog.debug("registerWorkflowStep",`Step '${v}' not defined in workflow '${B}'`);const z=this._handlers.get(B);z.has(v)||z.set(v,O?G.bind(O):G)}executeWorkflow(B,v){return mA(this,void 0,void 0,function*(){if(!this._validateWorkflow(B))return;Se.ssoLog.debug("executeWorkflow",`[Workflow ${B}] Started execution at ${new Date().toISOString()}`);const G=Wt[B],O={},z={cancelled:!1};this._activeWorkflows.set(B,{cancelToken:z});try{const X=new Map;G.forEach(DA=>{X.set(DA.stepId,DA)});const rA={workflowName:B,pendingSteps:new Set(G.map(DA=>DA.stepId)),completedSteps:new Set,runningSteps:new Set,stepMap:X,stepResults:O,data:v,cancelToken:z};yield new Promise((DA,GA)=>{const JA=()=>{if(z.cancelled)return void DA();this._getExecutableSteps({pendingSteps:rA.pendingSteps,completedSteps:rA.completedSteps,stepMap:rA.stepMap,workflowName:B}).filter(ne=>!rA.runningSteps.has(ne)).forEach(ne=>{rA.completedSteps.has(ne)||rA.runningSteps.has(ne)||this._executeWorkflowStep(ne,rA,{onComplete:()=>{if(rA.pendingSteps.size===0)return void DA();this._getExecutableSteps({pendingSteps:rA.pendingSteps,completedSteps:rA.completedSteps,stepMap:rA.stepMap,workflowName:B}).filter(he=>!rA.runningSteps.has(he)).length===0&&rA.runningSteps.size===0&&(Se.ssoLog.debug("executeWorkflow",`Workflow ${B} completed with some steps skipped due to dependency failures`),DA())},onError:GA,onStepComplete:JA})})};JA()}),Se.ssoLog.debug("executeWorkflow",`[Workflow ${B}] Completed execution at ${new Date().toISOString()}`)}catch(X){Se.ssoLog.error("executeWorkflow",`[Workflow ${B}] Failed execution at ${new Date().toISOString()}`,{error:X})}finally{this._activeWorkflows.delete(B)}})}_executeWorkflowStep(B,v,G){return mA(this,void 0,void 0,function*(){const{workflowName:O,runningSteps:z,stepMap:X,stepResults:rA,data:DA}=v;z.add(B),this._logWorkflowExecution(O,B,"start");try{const GA=X.get(B);let JA=null;GA?.dependency&&(c(GA.dependency)?JA=rA[GA.dependency]:Array.isArray(GA.dependency)&&(JA={},GA.dependency.forEach(he=>{JA[he]=rA[he]})));const ne=this._handlers.get(O).get(B);if(ne){const he=yield Promise.resolve(ne({data:DA,result:JA}));rA[B]=he,this._logWorkflowExecution(O,B,"success")}v.completedSteps.add(B)}catch(GA){const JA=`[Workflow].${O}.${B}`,{errorCode:ne,errorInfo:he=`${JA} failed`}=GA||{},Ze=new rs({functionName:JA,code:ne,message:he});Se.ssoLog.error(JA,he,{error:Ze}),this._logWorkflowExecution(O,B,"error",GA),G.onError(GA)}finally{z.delete(B),v.pendingSteps.delete(B),G.onStepComplete(),G.onComplete()}})}reset(){this._cancelAllWorkflows()}destroy(){this.reset(),this._handlers.clear()}_initializeWorkflows(){Object.keys(Wt).forEach(B=>{this._handlers.has(B)||this._handlers.set(B,new Map)})}_cancelWorkFlow(B){const v=this._activeWorkflows.get(B);if(!v)return;const{cancelToken:G}=v;G.cancelled=!0,this._activeWorkflows.delete(B)}_cancelAllWorkflows(){Object.keys(Wt).forEach(B=>{this._cancelWorkFlow(B)})}_validateWorkflow(B){return Wt[B]?!!this._handlers.get(B):!1}_getExecutableSteps(B){const{pendingSteps:v,completedSteps:G,stepMap:O,workflowName:z}=B;return Array.from(v).filter(X=>{const rA=O.get(X)||{},{dependency:DA,skipIfDependencyMissing:GA=!0}=rA;if(!DA)return!0;if(c(DA))return this._isStepRegistered({workflowName:z,stepId:DA})?G.has(DA):!GA;if(C(DA)){if(DA.filter(JA=>!this._isStepRegistered({workflowName:z,stepId:JA})).length>0&&GA)return!1;for(const JA of DA)if(!G.has(JA))return!1;return!0}return!1})}_isStepRegistered(B){var v;const{workflowName:G,stepId:O}=B;return(v=this._handlers.get(G))===null||v===void 0?void 0:v.has(O)}_logWorkflowExecution(B,v,G,O){this._logHandlers[G](B,v)}}const ws=new Map,Ca=({type:p,groupID:B})=>p===Bs.GRP_COMMUNITY||`${B}`.startsWith(La.COMMUNITY)&&!`${B}`.includes(La.TOPIC),$r=(p="")=>{const B=p.startsWith("GROUP")?p.replace("GROUP",""):p;return B.startsWith(La.COMMUNITY)&&`${B}`.includes(La.TOPIC)},zc="openim",dd="million_group_open_http_svc";function Zg(p){return mA(this,void 0,void 0,function*(){const{servcmd:B,data:v}=function(z){const{data:X}=z;return gg(X)||RE(X)}(p)?function(z){let{servcmd:X,data:rA}=z;return RE(rA)?function(DA){const{servcmd:GA,data:JA}=DA;let{GroupId:ne=""}=JA;const he=ne;return[ne]=he.split(La.TOPIC),{servcmd:Xg(GA),data:Object.assign(Object.assign({},JA),{GroupId:ne,TopicId:he})}}(z):(gg(rA)&&(X=Xg(X)),{servcmd:X,data:rA})}(p):p,G=Se.common.generateProtocolData({servcmd:B,data:v}),O=`${G.head.seq}${B}`;return Se.channel.sendPacket(G,{requestId:O,timeout:p.timeout})})}function gg(p){const{Type:B,GroupId:v,GroupIdList:G=[]}=p,O=v||G[0]||"";return Ca({type:B,groupID:O})}function RE(p){const{GroupId:B=""}=p;return $r(B)}function Xg(p){if(p.includes(zc))return p;const B=p.split(".")[1];return`${dd}.${B}`}function jn(){var p;return(p=Se.store.get("login"))===null||p===void 0?void 0:p.userId}const ir=p=>C(p)||f(p),Fa=(p,B,v,G)=>{if(!ir(p)||!ir(B))return 0;let O=0;const z=Object.keys(B);let X;for(let rA=0,DA=z.length;rA{if(n(B))return"";if(p===Bs.MSG_TEXT)return B.text||"";const v=Lu[p];return v?EC(v):""},Zc=[{cmd:"ws_get_user_status",interval:5,count:20},{cmd:"ws_status_subscribe",interval:5,count:20},{cmd:"ws_status_unsubscribe",interval:5,count:20},{cmd:"get_group_self_member_info",interval:5,count:20},{cmd:"modify_group_base_info",interval:1,count:8},{cmd:"get_pendency",interval:1,count:15},{cmd:"set_group_attr",interval:5,count:10},{cmd:"modify_group_attr",interval:5,count:10},{cmd:"delete_group_attr",interval:5,count:10},{cmd:"clear_group_attr",interval:5,count:10},{cmd:"get_group_attr",interval:5,count:20},{cmd:"update_group_counter",interval:5,count:20},{cmd:"get_group_counter",interval:5,count:20},{cmd:"get_topic",interval:1,count:10},{cmd:"read_all_unread_msg",interval:1,count:1},{cmd:"query",interval:5,count:20}],Xc="im_sdk_config_mgr.fetch_config",zI="im_sdk_config_mgr.push_configv2",dI="cloud-config",$c=2996,Al=new class{init(p){this.core=p}};function va(p){return mA(this,void 0,void 0,function*(){const{sdkAppId:B}=Al.core.store.get("instance")||{},v=Al.core.helper.generateProtocolData({servcmd:Xc,data:{uint32_sdkappid:B,uint64_version:p}}),G=`${v.head.seq}${Xc}`;return Al.core.channel.sendPacket(v,{requestId:G})})}var bg=new class{constructor(){this._core=null,this._expirationTime=0,this._version=0,this._isFetching=!1,this._cmdFrequencyLimitMap=new Map,this._methodCallFrequencyMap=new Map}install(p){this._core=p;const{notificationCenter:B,InnerEvent:v,helper:G,constants:{WORKFLOW_NAME:O,WORKFLOW_STEP:z},channel:X}=p;B.subscribeInnerEvent(zI,this._handlePushedConfig,this),G.registerWorkflowStep(O.SYNC_SERVER_INFO_AFTER_LOGIN,z.CLOUD_CONFIG_SYNC,this._handleLoginSuccess,this),B.subscribeInnerEvent(v.LOGOUT,this._reset,this),B.subscribeInnerEvent(v.DESTROY,this._dispose,this),G.registerExperimentalAPI("getServerConfig",this),this._updateCmdFreqLimitMap(Zc),X.registerBeforeSendInterceptor(this.checkMethodCallOverLimit,this)}getServerConfig(p){return mA(this,void 0,void 0,function*(){var B;const v={code:0,data:""};return p&&(v.data=((B=this._core.store.get("cloudConfig"))===null||B===void 0?void 0:B[p])||""),v})}checkMethodCallOverLimit(p){if(!this._cmdFrequencyLimitMap.has(p))return;if(!this._methodCallFrequencyMap.has(p))return void this._methodCallFrequencyMap.set(p,{startTime:Date.now(),methodCallCounter:1});const{count:B,interval:v}=this._cmdFrequencyLimitMap.get(p);let{startTime:G,methodCallCounter:O}=this._methodCallFrequencyMap.get(p);if(Date.now()-G>1e3*v)this._methodCallFrequencyMap.set(p,{startTime:Date.now(),methodCallCounter:1});else if(O+=1,this._methodCallFrequencyMap.set(p,{startTime:G,methodCallCounter:O}),O>B)throw new this._core.helper.ChatError({code:$c,replacement1:p})}_handlePushedConfig(p){return mA(this,void 0,void 0,function*(){const{ssoLog:B,utils:{safeStringify:v}}=this._core;B.info("_handlePushedConfig",v(p)),yield this._updateCloudConfig(p)})}_handleLoginSuccess(){return mA(this,void 0,void 0,function*(){const{ssoLog:p,utils:{safeStringify:B}}=this._core;try{if(this._canFetch()){const v=yield va(this._version);p.info("_fetchCloudConfigIfLogin",B(v)),yield this._updateCloudConfig(v)}this._core.helper.taskScheduler.addTask({id:dI,intervalMs:1e3,callback:this._fetchCloudConfigIfReady,context:this})}catch(v){p.debug("_fetchCloudConfigIfLogin",B(v))}})}_fetchCloudConfigIfReady(){return mA(this,void 0,void 0,function*(){const{ssoLog:p,utils:{safeStringify:B}}=this._core;if(this._canFetch())try{const v=yield va(this._version);p.info("_fetchCloudConfigIfReady",B(v)),yield this._updateCloudConfig(v)}catch(v){p.error("_fetchCloudConfigIfReady",B(v))}})}_updateCloudConfig(p){return mA(this,void 0,void 0,function*(){const B=this._parseCloudConfig(p);B&&(this._core.store.set("cloudConfig",B),yield this._parseCmdFreqLimit(),this._core.notificationCenter.emitInnerEvent(this._core.InnerEvent.CLOUD_CONFIG_UPDATE,B),this._core.notificationCenter.emitOuterEvent(this._core.OuterEvent.SERVER_CONFIG_UPDATED,{name:this._core.OuterEvent.SERVER_CONFIG_UPDATED,data:{config:B}}))})}_canFetch(){const{isLoggedIn:p}=this._core.store.get("login")||{};return p&&!this._isFetching&&Date.now()>=this._expirationTime}_parseCloudConfig(p){const{int32_error_code:B,str_error_message:v,str_json_config:G,uint32_expired_time:O,uint32_sdkappid:z,uint64_version:X}=p;let rA=null;if(B===0){if(this._version!==X)try{rA=JSON.parse(G),this._version=X}catch{}this._expirationTime=Date.now()+1e3*O}else this._expirationTime=B===void 0?Date.now()+36e5:Date.now()+12e4;return rA}_parseCmdFreqLimit(){return mA(this,void 0,void 0,function*(){var p;let B=(p=yield this.getServerConfig("cmd_frequency_limit"))===null||p===void 0?void 0:p.data;const{isEmpty:v}=this._core.utils;if(!v(B))try{B=JSON.parse(B),this._updateCmdFreqLimitMap(B)}catch(G){console.warn(G)}})}_updateCmdFreqLimitMap(p){p.forEach(B=>{this._cmdFrequencyLimitMap.set(B.cmd,{interval:B.interval,count:B.count})})}_reset(){this._core.helper.taskScheduler.removeTask(dI),this._core.store.clear("cloudConfig"),this._updateCmdFreqLimitMap(Zc),this._methodCallFrequencyMap.clear(),this._expirationTime=0,this._version=0,this._isFetching=!1}_dispose(){const{notificationCenter:p,InnerEvent:B}=this._core;p.unSubscribeInnerEvent(zI,this._handlePushedConfig,this),p.unSubscribeInnerEvent(B.LOGOUT,this._reset,this),p.unSubscribeInnerEvent(B.DESTROY,this._dispose,this),this._reset()}};class Ds{constructor(B=0,v=0){this.high=B,this.low=v}equal(B){return B!==null&&this.low===B.low&&this.high===B.high}toString(){const B=Number(this.high).toString(16);let v=Number(this.low).toString(16);if(v.length<8){let G=8-v.length;for(;G;)v=`0${v}`,G--}return B+v}}const Wn={SEARCH_GRP_SNS:new Ds(0,Math.pow(2,1)).toString(),AV_HISTORY_MSG:new Ds(0,Math.pow(2,2)).toString(),GRP_COMMUNITY:new Ds(0,Math.pow(2,3)).toString(),MSG_TO_SPECIFIED_GRP_MBR:new Ds(0,Math.pow(2,4)).toString(),AV_MBR_LIST:new Ds(0,Math.pow(2,6)).toString(),USER_STATUS:new Ds(0,Math.pow(2,7)).toString(),CONV_MARK:new Ds(0,Math.pow(2,9)).toString(),CONV_GROUP:new Ds(0,Math.pow(2,10)).toString(),AV_BAN_MBR:new Ds(0,Math.pow(2,11)).toString(),MSG_EXT:new Ds(0,Math.pow(2,13)).toString(),GRP_COUNTER:new Ds(0,Math.pow(2,15)).toString(),PLUGIN_TRANSLATE:new Ds(Math.pow(2,6)).toString(),PLUGIN_VOICE_TO_TEXT:new Ds(Math.pow(2,7)).toString(),PLUGIN_CS:new Ds(Math.pow(2,8)).toString(),PLUGIN_PUSH:new Ds(Math.pow(2,9)).toString(),PLUGIN_BOT:new Ds(Math.pow(2,10)).toString(),MSG_REACTION:new Ds(Math.pow(2,16)).toString(),FOLLOW:new Ds(Math.pow(2,20)).toString()},vc="CommercialConfig",ZI="commercial-config";var XI=new class{constructor(){this._core=null,this._expirationTime=0,this._isFetching=!1,this._featureMap=new Map,this._methodKeyMap=new Map,this._purchaseBits="0"}install(p){this._core=p;const{helper:B,notificationCenter:v,constants:{WORKFLOW_NAME:G,WORKFLOW_STEP:O,InnerEvent:z}}=p;v.subscribeInnerEvent(z.COMMERCIAL_CONFIG_PUSH,this._handlePushedConfig,this),v.subscribeInnerEvent(z.LOGOUT,this._handleLogout,this),v.subscribeInnerEvent(z.DESTROY,this._dispose,this),B.registerWorkflowStep(G.SYNC_SERVER_INFO_AFTER_LOGIN,O.COMMERCIAL_CONFIG_UPDATE,this._syncCommercialConfig,this),p.helper.registerExperimentalAPI("isCommercialAbilityEnabled",this),p.helper.registerExperimentalAPI("queryCommercialAbility",this)}isCommercialAbilityEnabled(p){return mA(this,void 0,void 0,function*(){const B=parseInt(p,10).toString(2),{length:v}=B;let G,O=!0;for(let z=v-1,X=0;z>=0;z--,X++)if(B.charAt(z)==="1"&&(G=X<32?new Ds(0,2**X).toString():new Ds(2**(X-32),0).toString(),!this._featureMap.get(G))){O=!1;break}return this._core.ssoLog.debug("isFeatureEnabled",`${vc}.isFeatureEnabled decimalNumber:${p} key:${G} ret:${O}`),{code:0,data:{enabled:O}}})}queryCommercialAbility(){return this._purchaseBits}_fetchAndParseCommercialConfig(){return mA(this,void 0,void 0,function*(){var p;const{ssoLog:B,utils:{safeStringify:v},common:{buildAndSendPacket:G}}=this._core;try{this._isFetching=!0;const O=yield G({servcmd:"im_sdk_config_mgr.fetch_imsdk_purchase_bitsv2",data:{uint32_sdkappid:(p=this._core.store.get("instance"))===null||p===void 0?void 0:p.sdkAppId}});O&&(this._parseCommercialConfig(O),this._core.store.set("commercialConfig",this._methodKeyMap))}catch(O){B.error("_fetchAndParseCommercialConfig",v(O))}finally{this._isFetching=!1}})}_syncCommercialConfig(p){return mA(this,void 0,void 0,function*(){const{purchaseBits:B}=p?.data||{};B&&(this._parsePurchaseBits(B),this._core.store.set("commercialConfig",this._methodKeyMap)),this._canFetch()&&(yield this._fetchAndParseCommercialConfig()),this._core.helper.taskScheduler.addTask({id:ZI,intervalMs:1e3,callback:this._fetchCommercialConfigIfReady,context:this})})}_canFetch(){var p;const B=(p=this._core.store.get("login"))===null||p===void 0?void 0:p.isLoggedIn,v=Date.now()>=this._expirationTime;return B&&!this._isFetching&&v}_handlePushedConfig(p){p?.body&&(this._parseCommercialConfig(p.body),this._core.store.set("commercialConfig",this._methodKeyMap))}_fetchCommercialConfigIfReady(){return mA(this,void 0,void 0,function*(){this._canFetch()&&(yield this._fetchAndParseCommercialConfig())})}_parseCommercialConfig(p){const{ssoLog:B}=this._core;if(typeof p!="object")return;const{int32_error_code:v,str_error_message:G,str_purchase_bits:O,uint32_expired_time:z}=p;v===0?(this._parsePurchaseBits(O),this._expirationTime=Date.now()+1e3*z):v===void 0?(B.warn("_parseCommercialConfig",`${vc}._parseCommercialConfig failed. Invalid message format:`,p),this._expirationTime=Date.now()+36e5):(B.warn("_parseCommercialConfig",`${vc}._parseCommercialConfig errorCode:${v} errorMessage:${G}`),this._expirationTime=Date.now()+12e4)}_isValidPurchaseBits(p){return p&&typeof p=="string"&&p.length>=1&&p.length<=64&&/[01]{1,64}/.test(p)}_parsePurchaseBits(p){const{ssoLog:B,utils:{safeStringify:v}}=this._core;if(this._isValidPurchaseBits(p)){this._purchaseBits=p,this._featureMap.clear(),this._methodKeyMap.clear();let G=null;for(let O=p.length-1,z=0;O>=0;O--,z++)if(G=z<32?new Ds(0,2**z).toString():new Ds(2**(z-32),0).toString(),p[O]==="1"){this._featureMap.set(G,!0);const X=this._getKeyByValue(Wn,G);X&&this._methodKeyMap.set(X,!0)}else{this._featureMap.set(G,!1);const X=this._getKeyByValue(Wn,G);X&&this._methodKeyMap.set(X,!1)}}else B.warn("_parsePurchaseBits",`${vc}.parsePurchaseBits invalid purchases:${v(p)}`)}_getKeyByValue(p,B){const v=Object.entries(p).find(([G,O])=>O===B);return v?v[0]:void 0}_handleLogout(){this._reset()}_dispose(){this._reset(),this._core.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.COMMERCIAL_CONFIG_PUSH,this._handlePushedConfig,this),this._core.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.LOGOUT,this._reset,this),this._core.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.DESTROY,this._dispose,this)}_reset(){this._core.helper.taskScheduler.removeTask(ZI),this._core.store.set("commercialConfig",{}),this._expirationTime=0,this._isFetching=!1,this._featureMap.clear(),this._purchaseBits="0"}},wE=new class{constructor(){this._core=null,this._serverOverloadInfoMap=new Map}install(p){this._core=p;const{notificationCenter:B,InnerEvent:v,channel:G}=this._core;B.subscribeInnerEvent(v.OVERLOAD_PUSH,this._handleOverLoadPush,this),B.subscribeInnerEvent(v.LOGOUT,this._reset,this),B.subscribeInnerEvent(v.DESTROY,this._dispose,this),G.registerBeforeSendInterceptor(this.checkServerOverload,this)}checkServerOverload(p){if(!this._serverOverloadInfoMap.has(p))return;const{overloadStartTimestamp:B,delaySeconds:v}=this._serverOverloadInfoMap.get(p);if(Date.now()-B<=1e3*v)throw new this._core.helper.ChatError({functionName:p,message:"service is busy, please try again later"});this._serverOverloadInfoMap.delete(p)}_handleOverLoadPush(p){const{OverLoadServCmd:B,DelaySecs:v}=p;this._serverOverloadInfoMap.set(B,{overloadStartTimestamp:Date.now(),delaySeconds:v})}_reset(){this._serverOverloadInfoMap.clear()}_dispose(){this._reset();const{notificationCenter:p,InnerEvent:B}=this._core;p.unSubscribeInnerEvent(B.OVERLOAD_PUSH,this._handleOverLoadPush,this),p.unSubscribeInnerEvent(B.LOGOUT,this._reset,this),p.unSubscribeInnerEvent(B.DESTROY,this._dispose,this)}},ch=new class{constructor(){this.name="ConfigCenter"}install(p){Al.init(p),bg.install(p),XI.install(p),wE.install(p)}},dC=new class{constructor(){this.name="ErrorMessage",this._core=null}install(p){return mA(this,void 0,void 0,function*(){if(this._core=p,this._canFetch()){const B=yield this._fetchErrorMessage();if(!B)return;const v=this._parseResponse(B);this._saveErrorMessage(v)}})}_canFetch(){const p=this._core.store.getStorage("errorMessage");return!p||this._isExpired(p)}_saveErrorMessage(p){this._core.store.setStorage("errorMessage",{errorMessage:p,errorMessageSavedTime:new Date().getTime()})}_fetchErrorMessage(){return mA(this,void 0,void 0,function*(){try{return yield this._core.helper.httpRequest({method:"GET",url:"https://web.sdk.qcloud.com/im/download/error-message/v3/0.0.6/tim-error-message.txt"})}catch(p){console.error(p)}})}_isExpired(p){if(!p)return!0;const{errorMessageSavedTime:B}=p;return B&&new Date().getTime()-B>=6048e5}_parseResponse(p){if(typeof p=="string"){const B=p.split(`; +`),v={},G=new RegExp(/'/g);for(let O=0;O{var co,Xi,di;const xo=function(ts,mi){const{From_Account:zi,From_AccountHeadurl:Ws,From_AccountNick:Ne,IsNeedReadReceipt:Tt,MsgBody:FA,MsgClientTime:Ai,MsgRandom:En,MsgSeq:ii,MsgTimeStamp:us,SendMsgControl:wi,SupportMessageExtension:Bo,To_Account:Bt,TinyId:mt,MsgCheckResult:ug,CloudCustomData:Ls,IsPeerRead:Zi,MsgFlagBits:Hr,MsgVersion:oc,EventArray:os}=ts;return{from:zi,avatar:Ws,nick:Ne,needReadReceipt:Tt===1,readReceiptSentByPeer:Zi,clientTime:Ai,messageFlagBits:Hr,random:En,sequence:ii,time:us,messageControlInfo:wi,isSupportExtension:Bo,to:Bt,tinyID:mt,checkResult:ug,cloudCustomData:Ls,messageVersion:oc,eventArray:os,elements:mi.message.messageHelper.parseServerPushMessageElement(FA)}}(Pi,at);if(!((di=(Xi=(co=Pi?.EventArray)===null||co===void 0?void 0:co[0])===null||Xi===void 0?void 0:Xi.hasOwnProperty)===null||di===void 0)&&di.call(Xi,"C2cNotifyMsgArray"))Ht.push(...function(ts){var mi;const zi=[];return(mi=ts.EventArray)===null||mi===void 0||mi.forEach(Ws=>{var Ne,Tt;const{C2cNotifyMsgArray:FA}=Ws,Ai=(Tt=(Ne=FA?.[0])===null||Ne===void 0?void 0:Ne.WithdrawC2cMsgNotify)===null||Tt===void 0?void 0:Tt.C2cWithdrawInfoArray;Array.isArray(Ai)&&zi.push(...Ai)}),zi}(Pi));else{const ts=at.message.messageFactory.createMessage(Object.assign(Object.assign({},xo),{conversationType:"C2C",flow:"in"})),{elements:mi}=xo;ts.setElement(mi),Ft.push(ts)}}),{unreadMessageList:Ft,revokedMessageList:Ht}}(DA.MsgList,B);return{syncFlag:DA?.SyncFlag,unreadMessageList:he,revokedMessageList:Ze,unreadCountList:GA,overflowUnreadCountList:JA,cookie:DA?.Cookie,groupTipList:ne}}catch(DA){console.warn(DA)}})}var el,kg;(function(p){p[p.START_SYNC=0]="START_SYNC",p[p.SYNCING=1]="SYNCING",p[p.SYNC_COMPLETE=2]="SYNC_COMPLETE"})(el||(el={})),function(p){p[p.LOGIN_SUCCESS=0]="LOGIN_SUCCESS",p[p.NEW_MESSAGE_RECEIVED=1]="NEW_MESSAGE_RECEIVED"}(kg||(kg={}));var ao=new class{constructor(){this.name="UnreadMessageSynchronizer",this._unreadDBMessageMap=new Map,this._cookie="",this._localConversationIDListBeforeDisconnect=[]}install(p){this._core=p;const{constants:B}=p;p.helper.registerWorkflowStep(B.WORKFLOW_NAME.SYNC_SERVER_INFO_AFTER_RE_ONLINE,B.WORKFLOW_STEP.UNREAD_MESSAGE_SYNC,this._syncUnreadDBMessageAfterReOnline,this),p.helper.registerWorkflowStep(B.WORKFLOW_NAME.RECEIVE_C2C_NEW_MESSAGE,B.WORKFLOW_STEP.UNREAD_MESSAGE_SYNC,this._syncUnreadDBMessageAfterNewMessageReceived,this),p.helper.registerWorkflowStep(B.WORKFLOW_NAME.SYNC_SERVER_INFO_AFTER_LOGIN,B.WORKFLOW_STEP.UNREAD_MESSAGE_SYNC,this._syncUnreadDBMessageAfterLogin,this),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.SOCKET_DISCONNECTED,this._handleDisconnect,this),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.LOGOUT,this._reset,this),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.DESTROY,this._dispose,this)}_syncUnreadMessage(p){return mA(this,void 0,void 0,function*(){const{isAfterReOnline:B=!1,isAfterNewMessageReceived:v=!1,isAfterLogin:G=!1}=p||{};let O=el.START_SYNC;const z=[],X=[],rA=[],DA=[];for(;this._canContinueSync({cookie:this._cookie,syncFlag:O});){const GA=yield this._fetchUnreadDBMessage({cookie:this._cookie,syncFlag:O,syncTriggerEvent:v?kg.NEW_MESSAGE_RECEIVED:kg.LOGIN_SUCCESS});if(!GA)break;const{unreadMessageList:JA=[],revokedMessageList:ne=[],overflowUnreadCountList:he,unreadCountList:Ze,groupTipList:st}=GA;if(this._cookie=GA?.cookie||"",O=GA?.syncFlag,this._parseAndSaveUnreadMessageList(JA),rA.push(...ne),this._updateConversationUnreadOptions({unreadCountList:Ze,overflowUnreadCountList:he,conversationUpdateFieldList:z}),Array.isArray(st)&&X.push(...st),B){const{messages:at}=this._handleNewMessageList(JA);DA.push(...at)}}return B?{conversationUpdateFieldList:z,revokedMessageList:rA,unreadMessageMap:this._unreadDBMessageMap,groupTipList:X,messages:DA,isUnreadC2CMessage:!0}:{conversationUpdateFieldList:z,isInstantMessage:!G,isUnreadC2CMessage:!0,revokedMessageList:rA,unreadMessageMap:this._unreadDBMessageMap,groupTipList:X}})}_syncUnreadDBMessageAfterLogin(){return mA(this,void 0,void 0,function*(){return this._cookie="",this._syncUnreadMessage({isAfterLogin:!0})})}_syncUnreadDBMessageAfterNewMessageReceived(p){return mA(this,void 0,void 0,function*(){if(p.data.Flag===1)return this._syncUnreadMessage({isAfterNewMessageReceived:!0})})}_updateConversationUnreadOptions(p){const{unreadCountList:B,overflowUnreadCountList:v,conversationUpdateFieldList:G}=p,{constants:{OuterConstant:{CONV_C2C:O,CONV_SYSTEM:z}}}=this._core;B?.forEach(X=>{const{From_Account:rA,UnreadCount:DA}=X;if(rA!==z){const GA=G.find(({conversationID:JA})=>JA===`${O}${rA}`);GA?GA.unreadCount=DA:G.push({conversationID:`${O}${rA}`,unreadCount:DA,type:O})}}),v?.forEach(X=>{const{From_Account:rA,LastMsgTime:DA}=X;rA!==z&&(G.find(({conversationID:GA})=>GA===`${O}${rA}`)||G.push({conversationID:`${O}${rA}`,type:O,lastMsgTime:DA}))})}_syncUnreadDBMessageAfterReOnline(){return mA(this,void 0,void 0,function*(){return this._syncUnreadMessage({isAfterReOnline:!0})})}_updateMessageProfile(p){var B;const{messageDataHandler:v}=this._core.message||{},G=(B=this._core.store.get("login"))===null||B===void 0?void 0:B.userId,{from:O,nick:z,avatar:X,conversationID:rA=""}=p;if(O!==G){const DA=v.getLatestMsgSentByPeer(rA);if(DA){const{nick:GA,avatar:JA}=DA;z&&X?z===GA&&X===JA||v.updateNickAndAvatarOfSentMessage({conversationID:rA,latestNick:z,latestAvatar:X,isSentByMe:!1}):(p.nick=GA,p.avatar=JA)}}else{const DA=v.getLatestMsgSentByMe(rA);!DA||z===DA.nick&&X===DA.avatar||v.updateNickAndAvatarOfSentMessage({conversationID:rA,latestNick:z,latestAvatar:X,isSentByMe:!0})}}_handleNewMessageList(p){const{messageDataHandler:B}=this._core.message||{},v=new Map,G=[];return p.forEach(O=>{this._updateMessageProfile(O);let z=O.isModified===1;if(B.isMessageSentByCurrentInstance(O)?O.isModified=z:z=!1,O.isOnlineMessage())O._onlineOnlyFlag=!0,B.isMessageSentByCurrentInstance(O)||G.push(O);else if(this._shouldStoreUnreadMessage(O)){if(B.storeConversationMessage(O)){const{conversationID:X,conversationType:rA,conversationSubType:DA,flow:GA,_isExcludedFromUnreadCount:JA,_isExcludedFromLastMessage:ne}=O,he=ne?"":O;v.has(X)?(v.get(X).lastMessage=he,GA==="in"&&(JA||v.get(X).unreadCount++)):v.set(X,{conversationID:X,type:rA,subType:DA,unreadCount:JA||GA!=="in"?0:1,lastMessage:he})}B.isMessageSentByCurrentInstance(O)&&!z||G.push(O)}}),{messages:G,conversationOptions:v}}_shouldStoreUnreadMessage(p){var B;const{conversationID:v}=p,{message:G,appStore:O,utils:{isEmpty:z}}=this._core||{},X=Array.from(((B=O.conversationStore.getConversationMap())===null||B===void 0?void 0:B.keys())||[]),rA=this._getLocalLastMessageTime(v);return!G.messageDataHandler.isInMessageList(p)&&X.includes(v)&&this._localConversationIDListBeforeDisconnect.includes(v)&&!z(rA)}_fetchUnreadDBMessage(p){return mA(this,void 0,void 0,function*(){const{ssoLog:B,utils:{safeStringify:v}}=this._core;try{B.debug("_fetchUnreadDBMessage",`unread-message-synchronizer._fetchUnreadDBMessage options:${v(p)}`);const O=yield lh(p,this._core);if(!O)return null;const{syncFlag:z,unreadMessageList:X,revokedMessageList:rA,cookie:DA,unreadCountList:GA,overflowUnreadCountList:JA,groupTipList:ne}=O;return this._parseAndSaveUnreadMessageList(X),{syncFlag:z,cookie:DA,unreadMessageList:X,revokedMessageList:rA,unreadCountList:GA,overflowUnreadCountList:JA,groupTipList:ne}}catch(G){console.log(G)}})}_canContinueSync({cookie:p,syncFlag:B}){var v;return B===el.START_SYNC||B===el.SYNCING&&!(!((v=this._core)===null||v===void 0)&&v.helper.isEmpty(p))}_parseAndSaveUnreadMessageList(p){p.forEach(B=>{const{ID:v}=B;this._unreadDBMessageMap.set(v,B)})}_handleDisconnect(){var p;const{appStore:B}=this._core;this._localConversationIDListBeforeDisconnect=Array.from(((p=B.conversationStore.getConversationMap())===null||p===void 0?void 0:p.keys())||[])}_getLocalLastMessageTime(p){const{message:B}=this._core,v=B.messageDataHandler.getLocalMessageList(p),G=v[v.length-1];return G?.time}_reset(){this._cookie="",this._unreadDBMessageMap.clear()}_dispose(){var p,B;(p=this._core)===null||p===void 0||p.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.LOGOUT,this._reset,this),(B=this._core)===null||B===void 0||B.notificationCenter.unSubscribeInnerEvent(this._core.InnerEvent.DESTROY,this._dispose,this),this._reset()}},CC=new class{init(p){var B;this._core=p,this._visibilityChangeHandler=this._handleVisibilityChange.bind(this),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.DESTROY,this._dispose,this),document?.addEventListener("visibilitychange",this._visibilityChangeHandler),(B=this._core)===null||B===void 0||B.store.set("activityMonitor",{isActive:!0})}_handleVisibilityChange(){var p,B;const v=document?.visibilityState==="visible";(p=this._core)===null||p===void 0||p.store.set("activityMonitor",{isActive:v}),(B=this._core)===null||B===void 0||B.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:v})}_reset(){var p;(p=this._core)===null||p===void 0||p.store.clear("activityMonitor")}_dispose(){document?.removeEventListener("visibilitychange",this._visibilityChangeHandler);const{notificationCenter:p,InnerEvent:B}=this._core;p.unSubscribeInnerEvent(B.DESTROY,this._dispose,this),this._reset()}},_E=new class{init(p){var B;this._core=p,this._bindAppActivityEvent(),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.DESTROY,this._dispose,this),(B=this._core)===null||B===void 0||B.store.set("activityMonitor",{isActive:!0})}_bindAppActivityEvent(){var p,B,v,G,O;const{MINI_APP_NAMESPACE:z,IN_TT_MINI_GAME:X,IN_WX_MINI_GAME:rA}=((p=this._core)===null||p===void 0?void 0:p.utils)||{};X||rA?((B=z?.onShow)===null||B===void 0||B.call(z,()=>{var DA,GA;(DA=this._core)===null||DA===void 0||DA.store.set("activityMonitor",{isActive:!0}),(GA=this._core)===null||GA===void 0||GA.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!0})}),(v=z?.onHide)===null||v===void 0||v.call(z,()=>{var DA,GA;(DA=this._core)===null||DA===void 0||DA.store.set("activityMonitor",{isActive:!1}),(GA=this._core)===null||GA===void 0||GA.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!1})})):((G=z?.onAppShow)===null||G===void 0||G.call(z,()=>{var DA,GA;(DA=this._core)===null||DA===void 0||DA.store.set("activityMonitor",{isActive:!0}),(GA=this._core)===null||GA===void 0||GA.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!0})}),(O=z?.onAppHide)===null||O===void 0||O.call(z,()=>{var DA,GA;(DA=this._core)===null||DA===void 0||DA.store.set("activityMonitor",{isActive:!1}),(GA=this._core)===null||GA===void 0||GA.notificationCenter.emitInnerEvent("activityStatusChange",{isActive:!1})}))}_reset(){var p;(p=this._core)===null||p===void 0||p.store.clear("activityMonitor")}_dispose(){const{notificationCenter:p,InnerEvent:B}=this._core;p.unSubscribeInnerEvent(B.DESTROY,this._dispose,this),this._reset()}},TE=new class{init(p){const{IN_MINI_APP:B,IN_WX_MINI_PLUGIN:v}=p.helper;v||(B?_E.init(p):CC.init(p))}};const hd="none",NE="online";var tl=new class{init(p){this._core=p,this._activateNetworkMonitoring(),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.DESTROY,this._dispose,this)}_activateNetworkMonitoring(){return mA(this,void 0,void 0,function*(){navigator.onLine?this._onOnline():this._onOffline(),this._onOnlineCallback=this._onOnline.bind(this),this._onOfflineCallback=this._onOffline.bind(this),window.addEventListener("online",this._onOnlineCallback),window.addEventListener("offline",this._onOfflineCallback)})}_deactivateNetworkMonitoring(){this._onOnlineCallback!==null&&(window.removeEventListener("online",this._onOnlineCallback),this._onOnlineCallback=null),this._onOfflineCallback!==null&&(window.removeEventListener("offline",this._onOfflineCallback),this._onOfflineCallback=null)}_onNetworkStatusChange(p){var B,v;const{isConnected:G,networkType:O}=p;(B=this._core)===null||B===void 0||B.store.set("netWorkMonitor",{isNetworkOnline:G,networkType:O}),(v=this._core)===null||v===void 0||v.notificationCenter.emitInnerEvent("networkStatusChange",{isNetworkOnline:G,networkType:O})}_onOnline(){this._onNetworkStatusChange({isConnected:!0,networkType:NE})}_onOffline(){this._onNetworkStatusChange({isConnected:!1,networkType:hd})}_reset(){var p;this._deactivateNetworkMonitoring(),(p=this._core)===null||p===void 0||p.store.clear("netWorkMonitor")}_dispose(){var p,B;(p=this._core)===null||p===void 0||p.notificationCenter.unSubscribeInnerEvent((B=this._core)===null||B===void 0?void 0:B.InnerEvent.DESTROY,this._dispose,this),this._reset()}},CI=new class{init(p){this._core=p,this._activateNetworkMonitoring(),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.DESTROY,this._dispose,this)}_activateNetworkMonitoring(){return mA(this,void 0,void 0,function*(){try{const{utils:{MINI_APP_NAMESPACE:p}}=this._core;this._mpNetworkStatusCallback=this._onNetworkStatusChange.bind(this),p.onNetworkStatusChange(this._onNetworkStatusChange.bind(this))}catch(p){console.error(p)}})}_deactivateNetworkMonitoring(){if(this._mpNetworkStatusCallback!==null){const{utils:{MINI_APP_NAMESPACE:p}}=this._core;p.offNetworkStatusChange&&p.offNetworkStatusChange(this._mpNetworkStatusCallback),this._mpNetworkStatusCallback=null}}_onNetworkStatusChange(p){var B,v;const{isConnected:G,networkType:O}=p;(B=this._core)===null||B===void 0||B.store.set("netWorkMonitor",{isNetworkOnline:G,networkType:O}),(v=this._core)===null||v===void 0||v.notificationCenter.emitInnerEvent("networkStatusChange",{isNetworkOnline:G,networkType:O})}_reset(){var p;this._deactivateNetworkMonitoring(),(p=this._core)===null||p===void 0||p.store.clear("netWorkMonitor")}_dispose(){var p,B;(p=this._core)===null||p===void 0||p.notificationCenter.unSubscribeInnerEvent((B=this._core)===null||B===void 0?void 0:B.InnerEvent.DESTROY,this._dispose,this),this._reset()}},Uu=new class{init(p){const{IN_MINI_APP:B}=p.utils;B?CI.init(p):tl.init(p)}},Fu=new class{constructor(){this.name="SystemStateMonitor"}install(p){TE.init(p),Uu.init(p)}};const hC=new Set(["tui_room_svr.*","callkit_records_svr.*","room_engine_srv.*","room_engine_http_srv.*","room_engine_mic.*","live_engine_srv.*","live_engine_http_srv.*","live_engine_pk.*","trtc_ai_service.*","call_engine_srv.*"]),wr="tui_room_svr.*";var cg=new class{constructor(){this.name="BusinessCommandTransfer",this._transferredCommands=hC}install(p){this._core=p;const{notificationCenter:B,InnerEvent:v,helper:G}=p;B.subscribeInnerEvent(v.CLOUD_CONFIG_UPDATE,this._onCloudConfigUpdate,this),B.subscribeInnerEvent(v.LOGOUT,this._reset,this),B.subscribeInnerEvent(v.DESTROY,this._dispose,this),B.subscribeInnerEvent("im_open_push.msg_push",B.InnerEventSubType.BUSINESS_COMMAND,this._onServerPushBusinessCommand,this),G.registerExperimentalAPI("sendTRTCCustomData",this,"transferBusinessCommand"),G.registerExperimentalAPI("sendRoomCustomData",this,"transferBusinessCommand")}transferBusinessCommand(p){return mA(this,void 0,void 0,function*(){const B="transferBusinessCommand";try{const{serviceCommand:v=wr}=p||{};if(!this._isValidTransferredCommand(v))throw new this._core.helper.ChatError({code:2995,functionName:B});return{code:0,data:(yield function(O,z){return mA(this,void 0,void 0,function*(){const{helper:X,channel:rA}=z,{serviceCommand:DA=wr,data:GA}=O||{};let JA={};try{JA=typeof GA=="string"?JSON.parse(GA):GA}catch(Ze){console.warn(Ze)}const ne=X.generateProtocolData({servcmd:DA,data:JA}),he=`${ne.head.seq}${DA}`;return rA.sendPacket(ne,{requestId:he,shouldRejectOnError:!1})})}(p,this._core))||{}}}catch(v){throw console.warn(v),new this._core.helper.ChatError({code:v?.errorCode,message:v?.errorInfo,data:{},functionName:B})}})}_onCloudConfigUpdate(p={}){try{if(typeof p.rtc_cmd!="string")return;const B=JSON.parse(p.rtc_cmd);Array.isArray(B)&&(this._transferredCommands=new Set([...this._transferredCommands,...B]))}catch(B){console.log(B)}}_isValidTransferredCommand(p=""){const B=`${p?.split(".")[0]}.*`;return this._transferredCommands.has(B)}_onServerPushBusinessCommand(p){const{OuterEvent:B,notificationCenter:v}=this._core,{MsgContent:G}=p||{},{ROOM_CUSTOM_DATA_RECEIVED:O}=B;v.emitOuterEvent(O,{name:O,data:G})}_reset(){this._transferredCommands=hC}_dispose(){const{notificationCenter:p,InnerEvent:B}=this._core;this._reset(),p.unSubscribeInnerEvent(B.CLOUD_CONFIG_UPDATE,this._onCloudConfigUpdate,this),p.unSubscribeInnerEvent(B.LOGOUT,this._reset,this),p.unSubscribeInnerEvent(B.DESTROY,this._dispose,this),p.unSubscribeInnerEvent("im_open_push.msg_push",p.InnerEventSubType.BUSINESS_COMMAND,this._onServerPushBusinessCommand,this)}};const Rc=new class{init(p){this.core=p}};function Ou(p){return mA(this,void 0,void 0,function*(){var B;const{message:v,user:G,appStore:O,constants:{OuterConstant:z}}=Rc.core,X=O.conversationStore.getConversationMap();if(X.has(p)){const DA=(B=X.get(p))===null||B===void 0?void 0:B.userProfile;if(DA&&p.startsWith(z.CONV_C2C)){const{avatar:GA,nick:JA}=DA;Rc.core.message.messageDataHandler.updateNickAndAvatarOfSentMessage({conversationID:p,latestAvatar:GA,latestNick:JA,isSentByMe:!1})}}const{data:rA}=(yield G.userProfile.getMyProfile())||{};if(rA){const{avatar:DA,nick:GA}=rA;v.messageDataHandler.updateNickAndAvatarOfSentMessage({conversationID:p,latestAvatar:DA,latestNick:GA,isSentByMe:!0})}})}function Nl(p){return mA(this,void 0,void 0,function*(){const B=p.map(v=>v.revoker);try{const v=yield function(G){return mA(this,void 0,void 0,function*(){var O,z;const X=yield(O=Rc.core.user.userProfile)===null||O===void 0?void 0:O.getUserProfile({userIDList:G});return X?.data?(z=X.data)===null||z===void 0?void 0:z.reduce((rA,{userID:DA,nick:GA,avatar:JA})=>(rA[DA]={nick:GA||"",avatar:JA||""},rA),{}):null})}(B);v&&p.forEach(G=>{const{revoker:O}=G;v[O]&&(G.revokerInfo.nick=v[O].nick||"",G.revokerInfo.avatar=v[O].avatar||"",G.revokerInfo.userID=O)})}catch(v){console.debug(v)}})}const Bd=1,Aa=2,hI=20,_n=2500,BC=1,il=300;function Qd(p){return mA(this,void 0,void 0,function*(){var B,v;const{appStore:G,utils:{isEmpty:O},common:{getCurrentUserID:z},notificationCenter:X,OuterEvent:rA,OuterConstant:{CONV_C2C:DA}}=Rc.core,{messageList:GA,conversationID:JA}=p,ne=G.conversationStore.getConversationMap();let he=(B=ne.get(JA))===null||B===void 0?void 0:B.peerReadTime;if(!he){const st=JA.replace(DA,""),at=yield function(Ft){return mA(this,void 0,void 0,function*(){const Ht={To_Account:Ft};return Rc.core.common.buildAndSendPacket({servcmd:"openim.get_peer_read_time",data:Ht})})}([st]);if(at){const{ReadTime:Ft}=at;he=Ft?.[0],ne.has(JA)&&(ne.get(JA).peerReadTime=he)}}if(ne.has(JA)){const st=(v=ne.get(JA))===null||v===void 0?void 0:v.lastMessage;O(st)||st.fromAccount===z()&&st.lastTime<=he&&!st.isPeerRead&&(st.isPeerRead=!0,G.conversationStore.updateConversation(JA,{lastMessage:st}))}const Ze=[];GA.forEach(st=>{st.time<=he&&!st.isPeerRead&&st.flow==="out"&&(st.isPeerRead=!0,Ze.push(st))}),Ze.length>0&&X.emitOuterEvent(rA.MESSAGE_READ_BY_PEER,{name:rA.MESSAGE_READ_BY_PEER,data:Ze})})}var BI=new class{init(p){this._core=p,p.helper.registerApi({apiName:"getMessageList",context:this}),p.helper.registerApi({apiName:"getMessageListHopping",context:this}),p.helper.registerApi({apiName:"clearHistoryMessage",context:this})}getMessageList(p){return mA(this,void 0,void 0,function*(){try{const{message:B,OuterConstant:{Direction:v,CONV_C2C:G,CONV_GROUP:O},InnerEvent:{HISTORY_MESSAGE_FETCHED:z},notificationCenter:X}=this._core,{conversationID:rA,nextReqMessageID:DA}=p,GA=hI;if(rA==="@TIM#SYSTEM")return{code:0,data:{messageList:[],isCompleted:!1,nextMessageSeq:""}};const JA=this._getAvailableLocalMessagesCount({conversationID:rA,nextReqMessageID:DA});if(this._needFetchHistoryMessageList({conversationID:rA,availableLocalMessagesCount:JA,targetCount:GA})){let ne=null;if(rA.startsWith(O)?ne=yield B.messageHistory.getGroupRoamingMessagesByAnchor({conversationID:rA,sequence:Number(DA),count:GA,direction:v.FORWARD,shouldMarkCompleted:!0}):rA.startsWith(G)&&(ne=yield B.messageHistory.getC2CRoamingMessagesByAnchor({conversationID:rA,messageID:DA,count:GA,direction:v.FORWARD,shouldMarkCompleted:!0})),ne){const{nextReqMessageIDFromServer:he,hasNoMoreHistoryMessage:Ze,messageList:st}=ne,at=B.messageDataHandler.prependLocalMessageList({messageList:st,conversationID:rA});(function(Xi){const{appStore:di,message:xo,OuterConstant:ts}=Rc.core,mi=di.conversationStore.getConversation(Xi),zi=xo.messageDataHandler.getLocalMessageList(Xi);if(!mi||zi.length===0||Xi===ts.CONV_SYSTEM)return;const Ws=[];for(let Tt=0;TtFA.isRevoked).length;Ne=Ws.length-mi.unreadCount-Tt}else Ne=Ws.length-mi.unreadCount;for(let Tt=0;TtXi.isRevoked);yield Nl(Ht),X.emitInnerEvent(z,at);const Pi={nextReqMessageID:Ze?"":String(he),messageList:Ft,isCompleted:Ze},co=Ft.map(Xi=>Xi.sequence);return{code:0,data:Pi,successLog:{message:`conversationID: ${rA} nextReqMessageID: ${DA} availableLocalMessagesCount: ${JA} sequenceList: ${JSON.stringify(co)}`}}}return{code:0,data:{messageList:[],isCompleted:!1,nextReqMessageID:""}}}return{code:0,data:yield this._getMessageListFromMemory({conversationID:rA,nextReqMessageID:DA,count:GA}),successLog:{message:`conversationID: ${rA} nextReqMessageID: ${DA} availableLocalMessagesCount: ${JA}}`}}}catch(B){const{code:v,message:G}=B||{};throw new this._core.helper.ChatError({code:v,message:G,moreMessage:`options: ${this._core.utils.safeStringify(p)}`})}})}getMessageListHopping(p){return mA(this,void 0,void 0,function*(){var B,v;const{OuterConstant:{Direction:G,CONV_C2C:O,CONV_GROUP:z},utils:{safeStringify:X}}=this._core,{conversationID:rA,sequence:DA,time:GA,direction:JA=G.FORWARD}=p,{utils:{isEmpty:ne},message:he,notificationCenter:Ze,InnerEvent:{HISTORY_MESSAGE_FETCHED:st}}=this._core;if(![G.BACKWARD,G.FORWARD].includes(JA))throw new this._core.helper.ChatError({message:"direction must be 0 or 1",moreMessage:`options: ${X(p)}`});let{count:at=hI}=p;at=at>hI?hI:at;let Ft=null;if(rA.startsWith(z)){if(Ft=yield he.messageHistory.getGroupRoamingMessagesByAnchor({conversationID:rA,sequence:DA,count:at,direction:JA}),Ft){const{nextReqMessageIDFromServer:Ht,hasNoMoreHistoryMessage:Pi,messageList:co,invisibleSequenceList:Xi}=Ft;if(this._core.message.messageDataHandler.storeSparseMessageList(co),Ze.emitInnerEvent(st,co),JA===G.FORWARD){const di=Pi&&Ht<1;return{code:0,data:{messageList:co,isCompleted:di,nextMessageSeq:di?"":Ht}}}if(JA===G.BACKWARD){if(ne(co)&&ne(Xi))return{code:0,data:{messageList:[],isCompleted:!0,nextMessageSeq:""}};const di=((B=co?.[co.length-1])===null||B===void 0?void 0:B.sequence)||0,xo=((v=Xi?.[Xi.length-1])===null||v===void 0?void 0:v.sequence)||0;return{code:0,data:{messageList:co.filter(ts=>ts.sequence>=DA),isCompleted:!Pi,nextMessageSeq:Pi?Math.max(di,xo)+1:""}}}return{code:0,data:Ft}}}else if(rA.startsWith(O)&&(Ft=yield he.messageHistory.getC2CRoamingMessagesByAnchor({conversationID:rA,count:at+1,time:GA,direction:JA}),Ft)){const{messageList:Ht,lastMessageTime:Pi,hasNoMoreHistoryMessage:co}=Ft;return Ze.emitInnerEvent(st,Ht),co||(JA===G.FORWARD?Ht.shift():Ht.pop()),he.messageDataHandler.storeSparseMessageList(Ht),yield Qd({messageList:Ht,conversationID:rA}),{code:0,data:{messageList:Ht,isCompleted:co,nextMessageTime:co?"":Pi}}}})}clearHistoryMessage(p){return mA(this,void 0,void 0,function*(){var B;const{appStore:v,common:{ChatError:G,getCurrentUserID:O},OuterConstant:{CONV_C2C:z,CONV_GROUP:X},apiMap:rA,message:DA}=this._core,GA=v.conversationStore.getConversation(p);if(!GA)throw new G({code:_n});const JA={fromAccount:O()},{type:ne}=GA;ne===z?(JA.type=Bd,JA.toAccount=p.replace(z,"")):ne===X&&(JA.type=Aa,JA.toGroupID=p.replace(X,""));try{return yield(B=rA?.setMessageRead)===null||B===void 0?void 0:B.call(rA,{conversationID:p}),(yield function(Ze){return mA(this,void 0,void 0,function*(){const{fromAccount:st,type:at,toAccount:Ft,toGroupID:Ht}=Ze,Pi={From_Account:st,Type:at,To_Account:Ft,ToGroupid:Ht};return Rc.core.common.buildAndSendPacket({servcmd:"recentcontact.clear_msg",data:Pi})})}(JA))&&(DA.messageDataHandler.deleteConversationMessageList(p),DA.messageHistory.completedHistoryConversations.delete(p),DA.messageHistory.clearHistoryMessageListFetchAnchors(p),this._updateConversationLastMessage(p)),{code:0,data:{conversationID:p},successLog:{message:`convID:${p}`}}}catch(he){const{errorCode:Ze}=he;throw new this._core.helper.ChatError({functionName:"clearHistoryMessage",code:Ze,moreMessage:`convID:${p}`})}})}_updateConversationLastMessage(p){const{appStore:B}=this._core;B.conversationStore.updateConversation(p,{lastMessage:this._generateLastMessage()},{needSort:!0})}_getAvailableLocalMessagesCount({conversationID:p,nextReqMessageID:B}){const{OuterConstant:{CONV_C2C:v,CONV_GROUP:G}}=this._core,O=this._core.message.messageDataHandler.getLocalMessageList(p),{length:z}=O;if(!B)return z;let X=-1;return p?.startsWith(v)?X=O.findIndex(rA=>rA.ID===B):p?.startsWith(G)&&(X=O.findIndex(rA=>B.includes("-")?rA.ID===B:String(rA.sequence)===B)),X===-1?0:X}_needFetchHistoryMessageList({conversationID:p,availableLocalMessagesCount:B,targetCount:v}){const{message:G}=this._core;return BB.startsWith(O)?he.ID===v:String(he.sequence)===v),JA=ne>G?ne-G:0,DA=ne):JA=rA>G?rA-G:0,GA.messageList=X.slice(JA,ne),GA.isCompleted=DA<=G&&z.messageHistory.completedHistoryConversations.has(B),GA.isCompleted?GA.nextReqMessageID="":GA.nextReqMessageID=this._generateNextReqMessageID({conversationID:B,targetIndex:JA}),B.startsWith(O)&&(yield Ou(B),yield Qd({messageList:GA.messageList,conversationID:B})),GA})}_generateNextReqMessageID({conversationID:p,targetIndex:B}){const v=this._core.message.messageDataHandler.getLocalMessageList(p);return p.startsWith("C2C")?v[B].ID:String(v[B].sequence)}_generateLastMessage(){return{lastTime:0,lastSequence:0,fromAccount:"",messageForShow:"",payload:null,type:"",isRevoked:!1,cloudCustomData:"",onlineOnlyFlag:!1,nick:"",nameCard:"",version:0,isPeerRead:!1,revoker:null}}},Oa=new class{constructor(){this._lastMessageSequenceMapOnDisconnect=new Map,this._lastMessageTimeMapOnDisconnect=new Map}init(p){this._core=p;const{common:{workflowManager:B},constants:{WORKFLOW_NAME:v,WORKFLOW_STEP:G,InnerEvent:O}}=p;B.registerWorkflowStep(v.SYNC_SERVER_INFO_AFTER_RE_ONLINE,G.HISTORY_MESSAGE_RECOVER,this._syncGroupOfflineMessage,this),B.registerWorkflowStep(v.SYNC_SERVER_INFO_AFTER_RE_ONLINE,G.C2C_HISTORY_MESSAGE_RECOVER,this._syncC2COfflineMessage,this),p.notificationCenter.subscribeInnerEvent(O.SOCKET_DISCONNECTED,this._updateLastMessageSequenceMapOnDisconnect,this)}_syncGroupOfflineMessage(p){const{conversationList:B}=p?.result||{},{OuterConstant:v,utils:{isArray:G}}=this._core;if(G(B)){const O=B.filter(z=>z.type===v.CONV_GROUP&&z.groupProfile.type!==v.GRP_AVCHATROOM);return this._recoverGroupHistoryMessage(O)}}_recoverGroupHistoryMessage(p){return mA(this,void 0,void 0,function*(){const{OuterConstant:B}=this._core,v=[],G=[];return yield Promise.all(p?.map(O=>mA(this,void 0,void 0,function*(){const{groupProfile:{groupID:z}={},lastMessage:{lastSequence:X}={}}=O,rA=`${B.CONV_GROUP}${z}`;let DA=this._getLocalLastMessageSequence(rA);this._shouldRecoverHistory({localLastMessageSequence:DA,serverLastMessageSequence:X})&&(yield this._recoverGroupHistoryForConversation({conversationID:rA,localLastMessageSequence:DA,serverLastMessageSequence:X,groupTipList:G})),v.push(rA.replace(B.CONV_GROUP,""))}))),{recoverRevokeNoticeGroupIDList:v,groupTipList:G}})}_recoverGroupHistoryForConversation(p){return mA(this,arguments,void 0,function*({conversationID:B,localLastMessageSequence:v,serverLastMessageSequence:G,groupTipList:O}){try{const{utils:{isArray:z,isObject:X,isEmpty:rA},OuterEvent:DA,OuterConstant:GA,notificationCenter:JA,message:ne,appStore:he,common:{getMessagePreviewText:Ze,buildLastMessage:st}}=this._core,at=G-v,Ft=Math.min(20,at),Ht={},Pi=yield ne.messageHistory.getGroupRoamingMessagesByAnchor({conversationID:B,sequence:v+Ft,direction:GA.Direction.FORWARD,count:Ft}),{nextReqMessageIDFromServer:co,hasNoMoreHistoryMessage:Xi,messageList:di,serverGroupTipList:xo}=Pi;z(xo)&&O.push(...xo);const ts=Xi&&co<0,mi=[];if(z(di)&&(di.forEach(zi=>{ne.messageReceiver.groupMessageReceiver.updateMessageProfile(zi),zi.from===GA.CONV_SYSTEM&&(zi.isSystemMessage=!1),ne.messageDataHandler.storeConversationMessage(zi)&&!rA(zi.payload)&&(mi.push(zi),zi._isExcludedFromLastMessage||(Ht.lastMessage=st(zi)))}),mi.length>0&&JA.emitOuterEvent(DA.MESSAGE_RECEIVED,{name:DA.MESSAGE_RECEIVED,data:mi})),!ts&&di.length>0){const zi=di[di.length-1].sequence;yield this._recoverGroupHistoryForConversation({conversationID:B,localLastMessageSequence:zi,serverLastMessageSequence:G,groupTipList:O})}X(Ht.lastMessage)&&(Ht.lastMessage.messageForShow=Ze(Ht.lastMessage.type,Ht.lastMessage.payload),he.conversationStore.updateConversation(B,Ht))}catch(z){this._core.ssoLog.error("_recoverGroupHistoryForConversation",`Recovery failed for conversation:${B}`,{error:z})}})}_updateLastMessageSequenceMapOnDisconnect(){const{message:p}=this._core,B=p.messageDataHandler.getContinuousMessagesByConversation();for(const[v,G]of B){const O=Array.from(G.values());if(O?.length>0){const z=O[O.length-1];v.startsWith("C2C")?this._lastMessageTimeMapOnDisconnect.set(v,z.time):v.startsWith("GROUP")&&this._lastMessageSequenceMapOnDisconnect.set(v,z.sequence)}}}_getLocalLastMessageSequence(p){const{message:B}=this._core;if(this._lastMessageSequenceMapOnDisconnect.has(p))return this._lastMessageSequenceMapOnDisconnect.get(p);const v=B.messageDataHandler.getLocalMessageList(p),G=v[v.length-1];return G?.sequence}_shouldRecoverHistory(p){const{localLastMessageSequence:B,serverLastMessageSequence:v}=p;if(typeof B!="number"||typeof v!="number")return!1;const G=v-B;return v!==0&&B>0&&G>=BC&&G{z.type===v.CONV_C2C&&O.push(z)}),this._recoverC2CHistoryMessage(O)}}_recoverC2CHistoryMessage(p){return mA(this,void 0,void 0,function*(){yield Promise.all(p?.map(B=>mA(this,void 0,void 0,function*(){const{conversationID:v,lastMessage:{lastTime:G}={}}=B,O=this._getLocalLastMessageTime(v);this._shouldRecoverC2CHistory({localLastMessageTime:O,serverLastMessageTime:G})&&(yield this._recoverHistoryForC2CConversation({conversationID:v,localLastMessageTime:O,serverLastMessageTime:G}))})))})}_shouldRecoverC2CHistory(p){const{localLastMessageTime:B,serverLastMessageTime:v}=p,G=v-B;return B>0&&G>=1&&G<=600}_recoverHistoryForC2CConversation(p){return mA(this,void 0,void 0,function*(){var B;const{conversationID:v,localLastMessageTime:G,serverLastMessageTime:O}=p,{utils:{isArray:z,isObject:X,isEmpty:rA,safeStringify:DA},OuterEvent:GA,OuterConstant:JA,notificationCenter:ne,message:he,appStore:Ze,common:{getMessagePreviewText:st,buildLastMessage:at}}=this._core;try{const Ft={},Ht=yield he.messageHistory.getC2CRoamingMessagesByAnchor({conversationID:v,direction:JA.Direction.BACKWARD,time:G,count:20});if(rA(Ht))return;const{hasNoMoreHistoryMessage:Pi,messageList:co}=Ht,Xi=[];z(co)&&(co.forEach(xo=>{he.messageDataHandler.storeConversationMessage(xo)&&!rA(xo.payload)&&(Xi.push(xo),xo._isExcludedFromLastMessage||(Ft.lastMessage=at(xo)))}),Xi.length>0&&ne.emitOuterEvent(GA.MESSAGE_RECEIVED,{name:GA.MESSAGE_RECEIVED,data:Xi}));const di=(B=co[co.length-1])===null||B===void 0?void 0:B.time;!Pi&&di>O&&(yield this._recoverHistoryForC2CConversation({conversationID:v,localLastMessageTime:di,serverLastMessageTime:O})),X(Ft.lastMessage)&&(Ft.lastMessage.messageForShow=st(Ft.lastMessage.type,Ft.lastMessage.payload),Ze.conversationStore.updateConversation(v,Ft))}catch(Ft){this._core.ssoLog.error("_recoverHistoryForC2CConversation",`Recovery failed for conversation:${v} error: ${DA(Ft)}`)}})}_getLocalLastMessageTime(p){const{message:B}=this._core;if(this._lastMessageTimeMapOnDisconnect.has(p))return this._lastMessageTimeMapOnDisconnect.get(p);const v=B.messageDataHandler.getLocalMessageList(p),G=v[v.length-1];return G?.time}reset(){this._lastMessageSequenceMapOnDisconnect.clear(),this._lastMessageTimeMapOnDisconnect.clear()}dispose(){this.reset()}},QC=new class{constructor(){this.name="HistoryMessage"}install(p){this._core=p,Rc.init(p),BI.init(p),Oa.init(p),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.LOGOUT,this._reset,this),p.notificationCenter.subscribeInnerEvent(p.InnerEvent.DESTROY,this.dispose,this)}dispose(){const{notificationCenter:p,InnerEvent:B}=this._core;p.unSubscribeInnerEvent(B.LOGOUT,this._reset,this),p.unSubscribeInnerEvent(B.DESTROY,this.dispose,this),Oa.dispose()}_reset(){Oa.reset()}},Pa=new class{init(p){this.core=p}},hr=new class{constructor(){this._reportedAtomicStoreIDs=new Set}init(p){const{helper:{registerExperimentalAPI:B}}=p;this._core=p,B("reportModalView",this),B("reportTUIFeatureUsage",this),B("reportRoomEngineEvent",this)}reportModalView(p){const{ssoLog:B,utils:{safeStringify:v,isString:G}}=this._core;try{if(!G(p))throw new Error("reportModalView data is not a string");B.createSSOLogData({method:"reportModalView",message:p,eventType:30}).end(!0)}catch(O){B.debug(`reportModalView Report failed: ${v(O)}`)}}reportTUIFeatureUsage(p){const{ssoLog:B,utils:{safeStringify:v,isEmpty:G}}=this._core,{atomicStoreID:O}=p;try{G(O)||this._reportedAtomicStoreIDs.has(O)||(this._core.ssoLog.info("reportTUIFeatureUsage",`atomicStoreID: ${p.atomicStoreID}`,{method:"reportTUIFeatureUsage",eventType:31,code:O}),this._reportedAtomicStoreIDs.add(O))}catch(z){B.debug(`reportTUIFeatureUsage Report failed: ${v(z)}`)}}reportRoomEngineEvent(p){const{utils:{safeStringify:B},ssoLog:v}=this._core;try{v.debug(`reportRoomEngineEvent Report: ${B(p)}`);const{eventId:G,eventCode:O,eventResult:z,eventMessage:X,moreMessage:rA,extensionMessage:DA}=p;v.createSSOLogData({method:DA,code:G,message:X,eventType:30,costTime:O,uiPlatform:z,moreMessage:rA}).end(!0)}catch(G){v.debug(`reportRoomEngineEvent Report failed: ${B(G)}`)}}reset(){this._reportedAtomicStoreIDs.clear()}dispose(){this.reset()}},pd=new class{constructor(){this.name="DataReport"}install(p){this._core=p;const{notificationCenter:B,InnerEvent:{LOGOUT:v,DESTROY:G}}=p;Pa.init(p),hr.init(p),B.subscribeInnerEvent(v,this._reset,this),B.subscribeInnerEvent(G,this._dispose,this)}_reset(){hr.reset()}_dispose(){const{notificationCenter:p,InnerEvent:{LOGOUT:B,DESTROY:v}}=this._core;p.unSubscribeInnerEvent(B,this._reset,this),p.unSubscribeInnerEvent(v,this._dispose,this),hr.dispose()}};let Pu=da.STANDARD,Br=[];Pu=da.BASIC,Br=[dC,ch,ao,Fu,cg,QC,pd];function wc(p,B){const{operationType:v,memberInfoList:G,operatorInfo:O}=p||{};let z={};if(Rs(G)?Rs(O)||(z=O):v!==na.JOINED&&v!==na.KICKED&&v!==na.ADMIN_SET&&v!==na.ADMIN_CANCELED||(z=Object.assign({},G[0])),!Rs(z)){const{nick:X="",avatar:rA=""}=z;B.nick=X,B.avatar=rA}}const ol=p=>({lastTime:p?.time||p?.lastTime||0,lastSequence:p?.sequence||p?.lastSequence||0,fromAccount:p?.from||p?.fromAccount||"",messageForShow:WI(p?.type,p?.payload),payload:p?.payload||null,type:p?.type||"",isRevoked:p?.isRevoked||!1,cloudCustomData:p?.cloudCustomData||"",onlineOnlyFlag:p?._onlineOnlyFlag||!1,nick:p?.nick||"",nameCard:p?.nameCard||"",version:p?.version||0,isPeerRead:p?.isPeerRead||!1,revoker:p?.revoker||null});var Lg=Object.freeze({__proto__:null,ChatError:rs,WorkflowManager:tn,buildAndSendPacket:Zg,buildLastMessage:ol,get builtInPlugins(){return Br},checkBusinessCapabilityBits:Wc,deepMerge:Fa,getCurrentUserID:jn,getErrorMessage:_l,getMessagePreviewText:WI,isC2CConv:p=>c(p)&&p.slice(0,3)===_g.CONV_C2C,isCommunity:Ca,isGroupConv:p=>c(p)&&p.slice(0,5)===_g.CONV_GROUP,isInternational:ku,isTopic:$r,isUnlimitedAVChatRoom:function(){var p;return!!(!((p=Se.store.get("instance"))===null||p===void 0)&&p.unlimitedAVChatRoom)},liteChatInstanceMap:ws,registerInterceptor:vr,registerValidateConfig:Mc,requireAuth:gs,get sdkEdition(){return Pu},setGroupTipsUserInfo:wc,t:EC,updateGroupAtInfo:(p,B)=>{const{CONV_AT_ME:v,CONV_AT_ALL:G,CONV_AT_ALL_AT_ME:O}=Bs;if(function(rA,DA){const{CONV_AT_ME:GA,CONV_AT_ALL:JA,CONV_AT_ALL_AT_ME:ne}=Bs,{groupID:he,sequence:Ze}=rA;let st=!1;return Ca({groupID:he})&&DA.forEach(at=>{at.messageSequence===Ze&&(at.atTypeArray.includes(GA)&&rA.groupAtType.includes(JA)&&(at.atTypeArray=[ne]),at.atTypeArray.includes(JA)&&rA.groupAtType.includes(GA)&&(at.atTypeArray=[ne],at.__random=rA.__random,at.__sequence=rA.__sequence),st=!0)}),st}(p,B))return;let z=[...p.groupAtType];z.includes(v)&&z.includes(G)&&(z=[O]);const X={from:p.from,groupID:p.groupID,topicID:p.topicID,messageSequence:p.sequence,atTypeArray:z,__random:p.__random,__sequence:p.__sequence};B.push(X)},validateAndExecute:Tl,validateParameters:ud});class Po{constructor(){this._builtInPlugins=new Set,this._externalPlugins=new Set}static getInstance(){return Po._instance||(Po._instance=new Po),Po._instance}static setInstance(B){Po._instance=B}installBuiltInPlugin(B){B&&this._installPlugin(B,this._builtInPlugins)}installExternalPlugin(B){B&&this._installPlugin(B,this._externalPlugins)}clear(){this._builtInPlugins=new Set,this._externalPlugins=new Set}_installPlugin(B,v){let G=[];G=C(B)?B:[B];const O=G.findIndex(X=>X?.name==="AVChatRoom"),z=O>-1?G.splice(O,1):[];G.forEach(X=>{this._isPluginInstalled(X.name)||(X&&De(X.install)?(v.add(X.name),De(X.getInstalledSubPlugins)?(z?.forEach(rA=>v.add(rA?.name)),X.install(js.getInstance().exposeApiForPlugin(),z)):X.install(js.getInstance().exposeApiForPlugin()),De(X.handleLoginSuccess)&&this._isLoggedIn()&&X.handleLoginSuccess()):De(X)?(v.add(X.name),X(js.getInstance().exposeApiForPlugin()),De(X.handleLoginSuccess)&&this._isLoggedIn()&&X.handleLoginSuccess()):console.warn('A plugin must either be a function or an object with an "install" function.'))})}_isPluginInstalled(B){return this._builtInPlugins.has(B)||this._externalPlugins.has(B)}_isLoggedIn(){var B;return((B=Se.store.get("login"))===null||B===void 0?void 0:B.isLoggedIn)===!0}}var $g=new class{constructor(){this._conversationMap=new Map}getConversationMap(){return this._conversationMap}getConversation(p){return this._conversationMap.get(p)}updateConversation(p,B,v){const{emit:G=!0,needSort:O=!1}=v||{},z=this._conversationMap.get(p);z&&!Rs(B)&&(Object.keys(B).forEach(X=>{z[X]=B[X]}),G&&Se.notificationCenter.emitInnerEvent(Ei.CONVERSATION_UPDATED,{needSort:O}))}deleteConversation(p){this._conversationMap.has(p)&&(this._conversationMap.delete(p),Se.notificationCenter.emitInnerEvent(Ei.CONVERSATION_UPDATED))}},Za=new class{constructor(){this._groupMap=new Map}getGroupMap(){return this._groupMap}getGroup(p){return this._groupMap.get(p)}updateGroup(p,B){const v=this._groupMap.get(p);v&&!Rs(B)&&Object.keys(B).forEach(G=>{v[G]=B[G]})}},Gl=new class{constructor(){this._messagesByConversation=new Map}updateMessage(p,B,v){var G;const{operation:O,updateUnreadCount:z=!0}=v,X=So(v,["operation","updateUnreadCount"]),rA=[];for(const DA of B){const GA=(G=this._messagesByConversation.get(p))===null||G===void 0?void 0:G.get(DA);if(!GA)return!1;Object.keys(X).forEach(JA=>{GA[JA]=X[JA]}),rA.push(GA)}return this._emitMessageStoreOperationEvent(O,{conversationID:p,messageList:rA,updateUnreadCount:z}),rA}getMessagesByConversation(p){var B;return[...((B=this._messagesByConversation.get(p))===null||B===void 0?void 0:B.values())||[]]}getMessages(){return this._messagesByConversation}_emitMessageStoreOperationEvent(p,B){const{conversationID:v}=B;$r(v)?Se.notificationCenter.emitInnerEvent(ag[p],B):Se.notificationCenter.emitInnerEvent(p,B)}},ea=new class{constructor(){this.userProfileMap=new Map,this.friendMap=new Map}getUserProfileMap(){return this.userProfileMap}getFriendMap(){return this.friendMap}getUserProfile(p){return this.userProfileMap.get(p)}getFriend(p){return this.friendMap.get(p)}},Ih=Object.freeze({__proto__:null,conversationStore:$g,groupStore:Za,messageStore:Gl,userStore:ea});class js{static getInstance(){return js._instance||(js._instance=new js),js._instance}static setInstance(B){js._instance=B}constructor(){this._experimentalApiMap={statTUIKeyFeatures:this.statKeyFeatureUsage.bind(this),setApplicationID:this.setApplicationID.bind(this)},this._apiHandlersMap={},this._apiMap={on:Se.notificationCenter.subscribeOuterEvent.bind(Se.notificationCenter),off:Se.notificationCenter.unSubscribeOuterEvent.bind(Se.notificationCenter),destroy:this.destroy.bind(this),callExperimentalAPI:this.callExperimentalAPI.bind(this),use:Po.getInstance().installExternalPlugin.bind(Po.getInstance()),registerPlugin:this.registerPlugin.bind(this),setLogLevel:this.setLogLevel.bind(this)}}registerPlugin(B){Se.ssoLog.debug("registerPlugin",B)}statKeyFeatureUsage(B){Se.ssoLog.debug("statTUIKeyFeatures",B)}setLogLevel(B){Se.ssoLog.debug("setLogLevel",B),Se.ssoLog.setLogLevel(B)}setApplicationID(B){Se.store.set("instance",{applicationID:B})}getApiMap(){return this._apiMap}setApiMap(B){this._apiMap=B}registerApi(B){const{common:{timeManager:v},utils:{safeStringify:G}}=Se,{apiName:O,context:z,methodName:X=O,matcher:rA}=B;this._apiHandlersMap[O]||(this._apiHandlersMap[O]=[]),this._apiHandlersMap[O].push({context:z,methodName:X,matcher:rA}),this._apiMap[O]&&this._apiHandlersMap[O].length!==1||(this._apiMap[O]=(...DA)=>{const GA=v.getServerTimeMs();let JA=0;O==="login"&&(JA=4),cr.includes(O)&&Se.ssoLog.debug(O,`${O} start params: ${G(DA)}`),Tl(X,DA);const ne=this._apiHandlersMap[O];for(const he of ne)if(!he.matcher||he.matcher(DA))try{const Ze=he.context[he.methodName].bind(he.context)(...DA);return this._isPromiseLike(Ze)?this._handleAsyncResult(Ze,O,JA,GA):(this._reportApiSuccessLog({result:Ze,apiName:O,eventType:JA,startTime:GA}),Ze)}catch(Ze){throw Se.ssoLog.error(O,`${O} fail ${Ze?.message||Ze?.errorMessage})`,{error:Ze,costTime:v.getServerTimeMs()-GA,eventType:JA,method:O}),Ze}})}registerExperimentalAPI(B,v,G){const O=G||B;this._experimentalApiMap[B]=v[O].bind(v)}destroy(){return mA(this,void 0,void 0,function*(){var B,v;try{!((B=Se.store.get("login"))===null||B===void 0)&&B.isLogin&&(yield this._apiMap.logout()),Se.notificationCenter.emitInnerEvent(Ei.DESTROY)}catch(G){console.debug("destroy error: ",G)}finally{Se.notificationCenter.emitOuterEvent(Dn.SDK_DESTROY,{SDKAppID:(v=Se.store.get("instance"))===null||v===void 0?void 0:v.sdkAppId}),ws.clear(),Po.getInstance().clear(),tn.getInstance().destroy(),Se.destroy()}})}exposeApiForClient(){return this._apiMap}exposeApiForPlugin(){return Object.assign(Object.assign({InnerEvent:Ei,InnerEventSubType:Se.notificationCenter.InnerEventSubType,OuterEvent:Dn,OuterConstant:Bs,SignalingEvent:ro,helper:Object.assign(Object.assign(Object.assign({},Se.utils),Se.common),{registerApi:this.registerApi.bind(this),registerExperimentalAPI:this.registerExperimentalAPI.bind(this),registerInterceptor:vr,registerValidateConfig:Mc,checkBusinessCapabilityBits:Wc,registerWorkflowStep:tn.getInstance().registerWorkflowStep.bind(tn.getInstance()),ChatError:rs}),apiMap:this._apiMap},Se),{constants:Object.assign(Object.assign({},KI),Se.constants),common:Object.assign(Object.assign(Object.assign({},Lg),Se.common),{workflowManager:tn.getInstance()}),utils:Se.utils,appStore:Ih})}callExperimentalAPI(B,v){return Se.ssoLog.debug(`callExperimentalAPI.${B} start params: ${Se.utils.safeStringify(v)}`),this._experimentalApiMap[B]?this._experimentalApiMap[B](v):(Se.ssoLog.error("callExperimentalAPI",`callExperimentalAPI.${B} not found, params: ${Se.utils.safeStringify(v)}`),Promise.reject(new rs({code:Uo.INVALID_OPERATION})))}_isPromiseLike(B){return B!==null&&typeof B=="object"&&typeof B.then=="function"}_handleAsyncResult(B,v,G,O){return B.then(z=>(this._reportApiSuccessLog({result:z,apiName:v,eventType:G,startTime:O}),z)).catch(z=>{throw Se.ssoLog.error(v,`${v} fail ${z?.message||z?.errorMessage})`,{error:z,costTime:Se.common.timeManager.getServerTimeMs()-O,eventType:G,method:v,startTime:O}),z})}_reportApiSuccessLog(B){let{result:v,apiName:G,startTime:O,eventType:z}=B;const{timeManager:X}=Se.common,{successLog:{message:rA,moreMessage:DA}={message:"",moreMessage:""}}=v||{},GA=X.getServerTimeMs();G==="login"&&(O+=X.getTimeOffsetWithServer()),cr.includes(G)&&Se.ssoLog.info(G,`${G} success ${rA} ${DA}`,{costTime:GA-O,eventType:z,message:rA,moreMessage:DA,startTime:O}),v?.successLog&&delete v.successLog}}class $I{constructor(){this._latestLoginAt=0,this._latestSendOnlinePresenceRequestTime=0,this._helloInterval=120,this._customLoginInfo=""}init(){const{notificationCenter:B,store:v}=Se;v.set("login",{isReady:!1}),js.getInstance().registerApi({apiName:"login",context:this}),js.getInstance().registerApi({apiName:"logout",context:this}),js.getInstance().registerApi({apiName:"getLoginUser",context:this}),js.getInstance().registerApi({apiName:"isReady",context:this}),js.getInstance().registerApi({apiName:"getServerTime",context:this}),js.getInstance().registerExperimentalAPI("setCustomLoginInfo",this),B.subscribeInnerEvent(Ei.RECONNECTED,this._reLogin,this),Se.notificationCenter.subscribeInnerEvent(Ei.DESTROY,this._dispose,this)}login(B){return mA(this,void 0,void 0,function*(){var v;const{sdkEdition:G}=Se.store.get("instance")||{};try{if(this._isLoginIn())return this._createRepeatLoginResponse();if(this._isLoginFrequencyExceeded())throw new rs({functionName:"login",code:Uo.REPEAT_LOGIN});const O=yield this._performLogin(B);this._validateAfterLogin(O),this._handleLoginSuccess(O),yield this._ensureAsyncComplete(),this._updateAndEmitSDKReady(),this._latestLoginAt=0;const z=(v=Se.channel.getSocketAdapter())===null||v===void 0?void 0:v.getId(),{appId:X,href:rA}=Se.store.get("instance")||{},{instanceID:DA,customStatus:GA}=O||{};return{code:0,data:O,successLog:{message:G,moreMessage:`socketID:${z} instanceID:${DA} customStatus:${GA} href: ${rA} appId: ${X}`}}}catch(O){const{errorCode:z}=O;z!==Uo.REPEAT_LOGIN&&(this._latestLoginAt=0);const X=new rs({functionName:"login",code:z});throw console.error(X),X}})}_reLogin(){return mA(this,void 0,void 0,function*(){var B;try{if(!this._isLoginIn())return;const v=yield bu(this._customLoginInfo);if(v){const{instanceID:G,customStatus:O}=v;Se.store.set("login",{statusInstanceId:G}),tn.getInstance().executeWorkflow(gr.SYNC_SERVER_INFO_AFTER_RE_ONLINE,{customStatus:O,statusType:Tu.USER_STATUS_ONLINE});const z=(B=Se.channel.getSocketAdapter())===null||B===void 0?void 0:B.getId();Se.ssoLog.info("reLogin",`socketId:${z} instanceId:${G}`)}}catch(v){console.warn(v)}})}logout(){return mA(this,arguments,void 0,function*(B=za.USER_INITIATED){const{ssoLog:v}=Se;v.debug("logout",`logout start logoutReason: ${B}`);try{yield this._performLogout(B),v.info("logout","logout success"),Se.ssoLog.uploadSSOLogData()}catch(G){const{errorCode:O}=G;throw new rs({functionName:"logout",code:O})}finally{this.handleLogoutCompleted()}return{code:0,data:{}}})}getLoginUser(){return this._isLoginIn()?jn():""}isReady(){var B;return(B=Se.store.get("login"))===null||B===void 0?void 0:B.isReady}setCustomLoginInfo(B=""){this._customLoginInfo=B}handleLogoutCompleted(){this._updateAndEmitSDKNotReady(),this._reset(),tn.getInstance().reset(),Se.notificationCenter.emitInnerEvent("logout")}getServerTime(){const{timeManager:B}=Se.common;return B.getServerTimeMs()}_updateAndEmitSDKReady(){Se.store.set("login",{isReady:!0}),setTimeout(()=>{Se.notificationCenter.emitOuterEvent(Dn.SDK_READY,{name:Dn.SDK_READY})},1)}_updateAndEmitSDKNotReady(){Se.store.set("login",{isReady:!1}),Se.notificationCenter.emitOuterEvent(Dn.SDK_NOT_READY,{name:Dn.SDK_NOT_READY})}_validateAfterLogin(B){const v="login";if(!B)throw new rs({functionName:v,message:"login response is empty"});const{tinyID:G,a2Key:O}=B||{};if(!G)throw new rs({functionName:v,code:Uo.NO_TINYID});if(!O)throw new rs({functionName:v,code:Uo.NO_A2KEY})}_createRepeatLoginResponse(){var B;return{code:0,data:{actionStatus:"OK",errorCode:0,errorInfo:_l({code:"RepeatLogin",replacement1:(B=Se.store.get("login"))===null||B===void 0?void 0:B.userId}),repeatLogin:!0}}}_performLogin(B){return mA(this,void 0,void 0,function*(){const{userID:v,userSig:G}=B;return Se.store.set("login",{userId:v,userSig:G}),this._latestLoginAt=Date.now(),bu(this._customLoginInfo)})}_ensureAsyncComplete(){return mA(this,void 0,void 0,function*(){yield new Promise(B=>{setTimeout(()=>B(null),1)})})}_handleLoginSuccess(B){const{timeManager:v}=Se.common,{helloInterval:G,timeStamp:O,customStatus:z,purchaseBits:X}=B,rA=1e3*O;v.calculateTimeOffsetWithServer(this._latestLoginAt,rA),this._helloInterval=G||120,this._updateLoginStore(B),Se.user.userStatus.setCustomStatus(z),tn.getInstance().executeWorkflow(gr.SYNC_SERVER_INFO_AFTER_LOGIN,{purchaseBits:X}),Se.common.taskScheduler.addTask({id:Nu,intervalMs:1e3*this._helloInterval,callback:this._sendOnlinePresenceRequest,context:this})}_performLogout(B){return function(v){return mA(this,void 0,void 0,function*(){const{logoutReason:G}=v,O="im_open_status.wslogout",z=Se.common.generateProtocolData({servcmd:O,data:{wslogout_type:G,isWebUniapp:0}}),X=`${z.head.seq}${O}`;return yield Se.channel.sendPacket(z,{requestId:X})})}({logoutReason:B})}_updateLoginStore(B){const{a2Key:v,tinyID:G,instanceID:O,authKey:z}=B;Se.store.set("login",{a2Key:v,tinyID:G,statusInstanceId:O,authKey:z,isLoggedIn:!0})}_sendOnlinePresenceRequest(){return mA(this,void 0,void 0,function*(){this._latestSendOnlinePresenceRequestTime=Date.now();try{yield function(){const B="im_open_status.wshello",v=Se.common.generateProtocolData({servcmd:B,data:{isWebUniapp:0}}),G=`${v.head.seq}${B}`;return Se.channel.sendPacket(v,{requestId:G})}()}catch(B){Se.ssoLog.warn("_sendOnlinePresenceRequest",` error:${B.message}`)}})}_isLoginIn(){var B;return((B=Se.store.get("login"))===null||B===void 0?void 0:B.isLoggedIn)===!0}_isLoginFrequencyExceeded(){return Date.now()-this._latestLoginAt<=15e3}_reset(){Se.common.taskScheduler.removeTask(Nu),this._helloInterval=120,this._latestSendOnlinePresenceRequestTime=0,this._latestLoginAt=0,this._customLoginInfo="",Se.store.clear("login"),Se.store.set("login",{isReady:!1}),Se.store.set("instance",{applicationID:0})}_dispose(){this._reset();const{notificationCenter:B}=Se;B.unSubscribeInnerEvent(Ei.RECONNECTED,this._reLogin,this),B.unSubscribeInnerEvent(Ei.DESTROY,this._dispose,this)}}const Fs={login:{userID:{required:!0,rules:["string"],allowEmpty:!1},userSig:{required:!0,rules:["string"],allowEmpty:!1}}},_c={logout:!0};class Ac{constructor(){this.loginAction=new $I,this.kickedOutHandler=new Sc,this.loginAction.init(),this.kickedOutHandler.init(),Mc({auth:_c,params:Fs})}}var Qr,Vr,Xa;(function(p){p.CONV_C2C="C2C",p.CONV_GROUP="GROUP",p.CONV_TOPIC="TOPIC",p.CONV_SYSTEM="@TIM#SYSTEM"})(Qr||(Qr={})),function(p){p.MSG_PRIORITY_HIGH="High",p.MSG_PRIORITY_NORMAL="Normal",p.MSG_PRIORITY_LOW="Low",p.MSG_PRIORITY_LOWEST="Lowest"}(Vr||(Vr={})),function(p){p.MSG_TEXT="TIMTextElem",p.MSG_CUSTOM="TIMCustomElem",p.MSG_LOCATION="TIMLocationElem",p.MSG_FACE="TIMFaceElem",p.MSG_IMAGE="TIMImageElem",p.MSG_AUDIO="TIMSoundElem",p.MSG_FILE="TIMFileElem",p.MSG_VIDEO="TIMVideoFileElem",p.MSG_GRP_TIP="TIMGroupTipElem",p.MSG_GRP_SYS_NOTICE="TIMGroupSystemNoticeElem",p.MSG_MERGER="TIMRelayElem"}(Xa||(Xa={}));const GE={1:Vr.MSG_PRIORITY_HIGH,2:Vr.MSG_PRIORITY_NORMAL,3:Vr.MSG_PRIORITY_LOW,4:Vr.MSG_PRIORITY_LOWEST},pC=0,uh=1;var go;(function(p){p.IN="in",p.OUT="out"})(go||(go={}));const Tc=2,bl={};function mC(p){if(!p)return 0;if(bl[p]===void 0){const B=new Date,v=`3${B.getHours()}`.slice(-2),G=`0${B.getMinutes()}`.slice(-2),O=`0${B.getSeconds()}`.slice(-2);bl[p]=parseInt([v,G,O,"0001"].join(""),10),console.log(`autoIncrementIndex start index:${bl[p]}`)}else bl[p]+=1;return bl[p]}class fC{constructor(B){this.ID="",this.random=0,this.sequence=0,this.nameCard="",this.isRead=!1,this.isPeerRead=!1,this.isDeleted=!1,this.isResend=!1,this.hasRiskContent=!1,this._onlineOnlyFlag=!1,this.atUserList=[],this._groupAtInfoList=[],this.isBroadcastMessage=!1,this.priority=Vr.MSG_PRIORITY_NORMAL,this._relayFlag=!1;const{clientTime:v=Se.common.timeManager.getServerTimeSeconds()||0,senderTinyID:G,currentUser:O,needReadReceipt:z,isSupportExtension:X,customModerationConfigurationId:rA,to:DA,from:GA,nick:JA="",avatar:ne="",time:he,messageControlInfo:Ze,tinyID:st,cloudCustomData:at="",messageLifeTime:Ft,messageVersion:Ht=0,conversationType:Pi,sequence:co,checkResult:Xi=0,isPlaceMessage:di=0,messageFlagBits:xo,receiverList:ts,isSystemMessage:mi=!1,status:zi=wg.SUCCESS,revokeReason:Ws="",conversationSubType:Ne,clientSequence:Tt,protocol:FA="JSON",revokerInfo:Ai={userID:"",nick:"",avatar:""},readReceiptInfo:En={readCount:void 0,unreadCount:void 0,isPeerRead:void 0,timestamp:0},random:ii,groupProfile:us,atUserList:wi,flow:Bo,isRead:Bt=!1,priority:mt=Vr.MSG_PRIORITY_NORMAL,onlineOnlyFlag:ug=!1,nameCard:Ls="",quoteInfo:Zi}=B;var Hr;this.clientTime=v,this.senderTinyID=G||st,this.needReadReceipt=z===!0||z===1,this.isSupportExtension=X===!0||X===1,this._cmConfigID=rA,this.to=DA,this.nick=JA,this.avatar=ne,this.protocol=FA,this.random=ii===void 0?(Hr=Hr||99999999,Math.round(Math.random()*Hr)):ii,this.time=he||Math.ceil(Date.now()/1e3),this._isExcludedFromLastMessage=!!Ze?.excludedFromLastMessage,this._isExcludedFromUnreadCount=!!Ze?.excludedFromUnreadCount,this.isModified=!!Ht,this.cloudCustomData=at,this.messageLifeTime=Ft,this.from=GA||null,this.sequence=co||0,this.conversationType=Pi||Qr.CONV_C2C,this.hasRiskContent=Xi>1,this.version=Ht,this.isPlaceMessage=di,this.isRevoked=di===2||xo===8,this.isSystemMessage=mi,this.readReceiptInfo=En,this.revokeReason=Ws,this.revokerInfo=Ai,this._receiverList=ts,this.conversationSubType=Ne,this.revoker=Ai?.revoker||"",this.clientSequence=Tt||co||0,this.status=zi,this.atUserList=wi||[],this.flow=Bo,this.isRead=Bt,this.priority=mt,this._onlineOnlyFlag=ug,this.nameCard=Ls,this.quoteInfo=Zi,this.reInitialize(O),this._initC2CReadReceiptInfo(B),this._extractGroupInfo(us)}getElements(){return this._elements}isOnlineMessage(){return this.messageLifeTime===0}setElement(B){Array.isArray(B)?this._elements=B:this._elements=[B],this._updatePayloadAndType()}transformElementsToServerFormat(){return this._elements?Array.isArray(this._elements)?this._elements.map(B=>B.transformToServerFormat()):this._elements.transformToServerFormat():null}setRelayFlag(B){this._relayFlag=B}validateBeforeSend(){var B,v,G;return this._relayFlag?{isValid:!0}:((B=this._elements)===null||B===void 0?void 0:B.length)>0?(G=(v=this._elements[0])===null||v===void 0?void 0:v.validateBeforeSend)===null||G===void 0?void 0:G.call(v):{isValid:!1}}_updatePayloadAndType(){this._elements[0]&&(this.payload=this._elements[0].content,this.type=this._elements[0].type)}_initC2CReadReceiptInfo(B){const{readReceiptSentByPeer:v,timestamp:G=0}=B;this.conversationType===Qr.CONV_C2C&&this.needReadReceipt===!0&&(this.readReceiptInfo.isPeerRead=v===1,this.readReceiptInfo.timestamp=G)}_extractGroupInfo(B){if(!B)return;const{From_AccountNick:v,From_AccountHeadurl:G,MsgFrom_AccountExtraInfo:O,GroupType:z}=B,{NameCard:X}=O||{};typeof v=="string"&&(this.nick=v),typeof G=="string"&&(this.avatar=G),typeof X=="string"&&(this.nameCard=X),this.conversationSubType=z}reInitialize(B){B===this.from&&(this.isRead=!0),this._initSequence(B),this._concatConversationID(B),this.generateMessageID()}_concatConversationID(B){let v="";const G=this.conversationType;G!==Qr.CONV_SYSTEM?(v=G===Qr.CONV_C2C?B===this.from?this.to:this.from:this.to,this.conversationID=v?`${G}${v}`:null):this.conversationID=Qr.CONV_SYSTEM}_initSequence(B){this.clientSequence===0&&B&&(this.clientSequence=mC(B)),this.sequence===0&&this.conversationType===Qr.CONV_C2C&&(this.sequence=this.clientSequence)}generateMessageID(){this.from===Qr.CONV_SYSTEM&&(this.senderTinyID="144115198244471703"),this.ID=`${this.senderTinyID}-${this.clientTime}-${this.random}`}setIsRead(B){this.isRead=B}}class kl{static parseServerPushElement(B){const{MsgContent:v={}}=B,{Data:G,Ext:O,Desc:z}=v;return new kl({data:G,description:z,extension:O})}constructor(B){this.type=Xa.MSG_CUSTOM;const{data:v="",description:G="",extension:O=""}=B;this.content={data:v,description:G,extension:O}}transformToServerFormat(B){const{isMergerMessage:v=!1}=B||{},G=v?this.payload:this.content,{data:O,description:z,extension:X}=G;return{MsgType:this.type,MsgContent:{Data:O,Ext:X,Desc:z}}}validateBeforeSend(){const{isEmpty:B}=Se.utils,v=[this.content.data,this.content.description,this.content.extension].some(G=>!B(G));return{isValid:v,error:v?null:{message:"content can not be empty"}}}}class Au{static parseServerPushElement(B){const{MsgContent:v={Text:""}}=B,{Text:G}=v;return new Au({text:G})}constructor(B){this.type=zg.MSG_TEXT,this.content={text:B.text||""}}validateBeforeSend(){var B,v;return((v=(B=this.content)===null||B===void 0?void 0:B.text)===null||v===void 0?void 0:v.length)>0?{isValid:!0}:{isValid:!1,error:{message:"content can not be empty"}}}transformToServerFormat(B){const{isMergerMessage:v=!1}=B||{},G=v?this.payload:this.content,{text:O}=G;return{MsgType:this.type,MsgContent:{Text:O}}}}var QI=new class{constructor(){this._elementClassMap={[Xa.MSG_CUSTOM]:kl,[Xa.MSG_TEXT]:Au}}init(){js.getInstance().registerApi({apiName:"createCustomMessage",context:this}),js.getInstance().registerApi({apiName:"createTextMessage",context:this})}registerElementClass(p,B){var v;(v=B).prototype!==void 0&&"constructor"in v.prototype&&(this._elementClassMap[p]=B)}getElementClass(p){return this._elementClassMap[p]}createMessage(p){const{from:B,flow:v=go.OUT}=p,{userId:G}=Se.store.get("login")||{};this._isSendByCurrentInstance({from:B,flow:v,currentUser:G})?this._updateWithSenderInfo(p):this._isMultiEndpointSyncMessage({from:B,flow:v,currentUser:G})&&(p.flow=go.OUT);const O=Object.assign(Object.assign({},p),{currentUser:G});return new fC(O)}createCustomMessage(p){const B=jn(),v=this.createMessage(Object.assign(Object.assign({},p),{from:B})),G=this._elementClassMap[Xa.MSG_CUSTOM];if(!v)return null;if(G){const O=new G(p.payload);v.setElement(O)}return v}createTextMessage(p){var B;if(!p)return null;const v=typeof p.payload=="string"?p.payload:((B=p?.payload)===null||B===void 0?void 0:B.text)||"",G=new Au({text:v}),O=jn(),z=Se.message.messageFactory.createMessage(Object.assign(Object.assign({},p),{from:O}));return z.setElement(G),z}_updateWithSenderInfo(p){var B,v;const{nick:G,avatar:O,conversationType:z,to:X}=p,{userId:rA,tinyID:DA}=Se.store.get("login")||{},GA=ea.getUserProfile(rA);return p.nick=G||GA?.nick||"",p.avatar=O||GA?.avatar||"",p.tinyID=p.tinyID||DA||"",p.from=rA,p.status=wg.UNSENT,p.flow=go.OUT,z===_g.CONV_GROUP&&(p.nameCard=(v=(B=Za.getGroup(X))===null||B===void 0?void 0:B.selfInfo)===null||v===void 0?void 0:v.nameCard),p}_isMultiEndpointSyncMessage(p){const{from:B,flow:v,currentUser:G}=p;return B===G&&v===go.IN}_isSendByCurrentInstance(p){const{from:B,flow:v,currentUser:G}=p;return B===G&&v===go.OUT}};const pI={PushFlag:0,Title:"",Desc:"",Ext:"",ApnsInfo:{Sound:"",BadgeMode:0,IsVoipPush:void 0,Image:"",InterruptionLevel:"active",ContentAvailable:0},AndroidInfo:{Sound:"",XiaoMiChannelID:"",OPPOChannelID:"",GoogleChannelID:"",VIVOClassification:1,VIVOCategory:"",HuaWeiCategory:"",OPPOCategory:"",HuaWeiImage:"",HonorImage:"",GoogleImage:"",HonorImportance:"",MeizuNotifyType:void 0}},bE={HonorImportance:{range:["LOW","NORMAL"],defaultValue:void 0},MeizuNotifyType:{range:[0,1],defaultValue:void 0}},Ll={enableIOSBackgroundNotification:{range:[!0,!1],defaultValue:!1},interruptionLevel:{range:["passive","active","time-sensitive","critical"],defaultValue:"active"}};function Ul(p,B){return Object.keys(B).forEach(v=>{const{range:G,defaultValue:O}=B[v];p[v]=G.includes(p[v])?p[v]:O}),p}function Ug(p){const B=p.lastIndexOf(".");return B===-1?p:p.slice(0,B)}function ec(p){const{androidInfo:B={},androidOPPOChannelID:v=""}=p,G=B.OPPOChannelID||v,O=Ul(B,bE),{sound:z="",FCMChannelID:X=""}=O,rA=So(O,["sound","FCMChannelID"]);return Object.assign(Object.assign({},rA),{Sound:Ug(z),OPPOChannelID:G,GoogleChannelID:X})}function md(p){const{apnsInfo:B={},ignoreIOSBadge:v=!1,disableVoipPush:G}=p,O=Ul(B,Ll),{ignoreIOSBadge:z,disableVoipPush:X,enableIOSBackgroundNotification:rA}=O,DA=So(O,["ignoreIOSBadge","disableVoipPush","enableIOSBackgroundNotification"]),GA=z===!0||v===!0?1:0;let JA;return n(G)||(JA=G===!1?1:0),n(X)||(JA=X===!1?1:0),Object.assign(Object.assign({},DA),{BadgeMode:GA,IsVoipPush:JA,ContentAvailable:rA?1:0})}function kE(p){return Se.utils.isPlainObject(p)?{PushFlag:p.disablePush===!0?1:0,Title:p.title||"",Desc:p.description||"",Ext:p.extension||"",ApnsInfo:md(p),AndroidInfo:ec(p)}:pI}function Nc(p){const{From_AccountHeadurl:B,From_AccountNick:v,IsNeedReadReceipt:G,IsPeerRead:O,IsSyncMsg:z,MsgBody:X,MsgClientTime:rA,MsgLifeTime:DA,MsgRandom:GA,MsgSeq:JA,MsgTimeStamp:ne,SendMsgControl:he,SupportMessageExtension:Ze,TinyId:st,MsgCheckResult:at,CloudCustomData:Ft,MsgVersion:Ht,MsgFlagBits:Pi,RevokerInfo:co,InnerSdkCustomData:Xi}=p;let di,{From_Account:xo,To_Account:ts}=p;if(z===1){const mi=ts;ts=xo,xo=mi}if(co){const{Reason:mi,Revoker_Account:zi,Revoker_FromUin:Ws}=co;di={reason:mi,revoker:zi,revokerFromUin:Ws,userID:zi}}return{from:xo,avatar:B,nick:v,needReadReceipt:G===1,isSyncMessage:z,clientTime:rA,messageLifeTime:DA,random:GA,sequence:JA,time:ne,messageControlInfo:{excludedFromLastMessage:he?.NoLastMsg===1,excludedFromUnreadCount:he?.NoUnread===1},isSupportExtension:Ze,to:ts,tinyID:st,checkResult:at,cloudCustomData:Ft,revokerInfo:di,messageVersion:Ht,messageFlagBits:Pi,readReceiptSentByPeer:O,elements:$a(X),onlineOnlyFlag:DA===0,quoteInfo:xu(Xi)}}function eu(p){const{From_Account:B,MsgBody:v,MsgClientTime:G,MsgRandom:O,MsgSeq:z,MsgTimeStamp:X,To_Account:rA,MsgVersion:DA,CloudCustomData:GA,MsgCheckResult:JA}=p;return{from:B,clientTime:G,random:O,sequence:z,time:X,to:rA,elements:$a(v),messageVersion:DA,cloudCustomData:GA,checkResult:JA}}function Io(p){const{ClientSeq:B,From_Account:v,GroupInfo:G,MsgBody:O,MsgClientTime:z,MsgRandom:X,MsgSeq:rA,MsgTimeStamp:DA,SendMsgControl:GA,SupportMessageExtension:JA,TinyId:ne,CloudCustomData:he,MsgVersion:Ze,MsgCheckResult:st,NeedReadReceipt:at,IsPlaceMsg:Ft,RevokerInfo:Ht,GroupAtInfo:Pi,OnlineOnlyFlag:co,InnerSdkCustomData:Xi}=p;let di,xo=Vr.MSG_PRIORITY_NORMAL;if(Object.keys(GE).includes(String(p.MsgPriority))&&(xo=GE[p.MsgPriority]),Ht){const{Reason:mi,Revoker_Account:zi,Revoker_FromUin:Ws}=Ht;di={reason:mi,revoker:zi,revokerFromUin:Ws,userID:zi}}const ts=function(mi){const zi=[];return Array.isArray(mi)&&mi.forEach(Ws=>{Ws.GroupAtAllFlag===pC?zi.push(Ws.GroupAt_Account):Ws.GroupAtAllFlag===uh&&zi.push(Bs.MSG_AT_ALL)}),zi}(Pi);return{clientSequence:B,from:v,groupProfile:G,clientTime:z,priority:xo,random:X,sequence:rA,time:DA,messageControlInfo:{excludedFromLastMessage:GA?.NoLastMsg===1,excludedFromUnreadCount:GA?.NoUnread===1},isSupportExtension:JA,tinyID:ne,cloudCustomData:he,messageVersion:Ze,checkResult:st,needReadReceipt:at,isPlaceMessage:Ft,revokerInfo:di,atUserList:ts,elements:$a(O),to:LE(p),onlineOnlyFlag:co===1,quoteInfo:xu(Xi)}}function LE(p){const{utils:{isEmpty:B},constants:{IS_TOPIC_MESSAGE:v}}=Se,{ToGroupId:G,GroupInfo:{MillionGroupFlag:O=0,TopicId:z}={}}=p;return O!==v||B(z)?G:z}function $a(p){if(!p)return null;if(Array.isArray(p))return p.map(v=>{const G=Se.message.messageFactory.getElementClass(v.MsgType);return G?.parseServerPushElement(v)});const B=Se.message.messageFactory.getElementClass(p.MsgType);return B?.parseServerPushElement(p)}function tu(p){const{From_Account:B,MsgBody:v,MsgClientTime:G,MsgRandom:O,MsgSeq:z,MsgTimeStamp:X,GroupId:rA,TopicId:DA,MsgVersion:GA,CloudCustomData:JA,MsgCheckResult:ne}=p;return{from:B,clientTime:G,random:O,sequence:z,time:X,groupID:rA,topicID:DA,elements:$a(v),messageVersion:GA,cloudCustomData:JA,checkResult:ne}}function xu(p){const{utils:{isString:B,safeStringify:v},ssoLog:G}=Se;if(!B(p))return null;try{const{messageID:O,messageTime:z,messageSequence:X}=JSON.parse(p).businessQuote;return{msgID:O,messageTime:z,messageSequence:X}}catch(O){return G.debug("_parseServerQuoteInfo",v(O)),null}}function Gc({conversationUpdateFields:p,message:B}){const{conversationID:v,conversationType:G,conversationSubType:O,flow:z,_isExcludedFromUnreadCount:X,_isExcludedFromLastMessage:rA}=B,DA=rA?"":ol(B),GA=!X&&z===go.IN;p.has(v)?(p.get(v).lastMessage=DA,GA&&p.get(v).unreadCount++):p.set(v,{conversationID:v,type:G,subType:O,unreadCount:GA?1:0,lastMessage:DA})}function mI(p){return p.filter(B=>{const v=!Rs(B?._elements),G=B?.isPlaceMessage===1;return v||Se.ssoLog.error("emptyMessageBody",`from:${B.from} to:${B.to} sequence:${B.sequence}`),v&&!G})}function sl(p){const{messageDataHandler:B}=Se.message;return!B.isInMessageList(p)&&!B.isMessageSentByCurrentInstance(p)}var nl=Object.freeze({__proto__:null,autoIncrementIndex:mC,createAndroidPushInfo:ec,createApnsPushInfo:md,createOfflinePushInfo:kE,filterValidMessages:mI,getAndroidSoundName:Ug,parseServerGroupMessage:Io,parseServerPushC2CModifyMessage:eu,parseServerPushGroupModifyMessage:tu,parseServerPushMessage:Nc,parseServerPushMessageElement:$a,shouldStoreMessage:sl,updateConversationFields:Gc});const{isPlainObject:xa}=Se.utils;function UE(p,B={}){const{onlineUserOnly:v,messageControlInfo:G}=B;let{offlinePushInfo:O}=B;p.conversationType===Qr.CONV_C2C&&v===!0&&(O?O.disablePush=!0:O={disablePush:!0});let z="";typeof p.cloudCustomData=="string"&&p.cloudCustomData.length>0&&(z=p.cloudCustomData);const X=[];if(G&&xa(G)){const{excludedFromUnreadCount:rA,excludedFromLastMessage:DA,excludedFromContentModeration:GA}=G;rA===!0&&X.push("NoUnread"),DA===!0&&X.push("NoLastMsg"),GA===!0&&X.push("NoMsgCheck")}return{onlineUserOnly:v,cloudCustomData:z,messageControlInfo:X,offlinePushInfo:O}}function aa(p){const{webhookInfo:{disableCloudMessagePreHook:B=!1,disableCloudMessagePostHook:v=!1}={}}=p||{};if(!B&&!v)return;const G=[];return B&&G.push("ForbidBeforeSendMsgCallback"),v&&G.push("ForbidAfterSendMsgCallback"),G}function Mn(p,B){return mA(this,void 0,void 0,function*(){const v=p.conversationType===Qr.CONV_GROUP?function(O,z){var X;const rA=UE(O,z),{onlineUserOnly:DA,cloudCustomData:GA,messageControlInfo:JA,offlinePushInfo:ne}=rA,he=JSON.parse(JSON.stringify(O.transformElementsToServerFormat()));let Ze;return C(O._receiverList)&&O._receiverList.length>0&&(Ze=O._receiverList,O._receiverList.length>50&&(Ze=O._receiverList.slice(0,50),console.warn("ReceiverListLimit"))),{servcmd:"group_open_http_svc.send_group_msg",data:{From_Account:(X=Se.store.get("login"))===null||X===void 0?void 0:X.userId,GroupId:O.to,MsgBody:he,CloudCustomData:GA,Random:O.random,MsgPriority:O.priority,ClientSeq:O.clientSequence,GroupAtInfo:O._groupAtInfoList,OnlineOnlyFlag:DA?1:0,MsgClientTime:O.clientTime,OfflinePushInfo:kE(ne),SendMsgControl:DA?void 0:JA,NeedReadReceipt:O.needReadReceipt===!0?1:0,To_Account:Ze,SupportMessageExtension:O.isSupportExtension===!0?1:0,IsRelayMsg:O._relayFlag===!0?1:0,CustomModerationConfigID:O._cmConfigID,ForbidCallbackControl:aa(z),InnerSdkCustomData:FE(O)}}}(p,B):function(O,z){var X;const rA=UE(O,z),{onlineUserOnly:DA,cloudCustomData:GA,messageControlInfo:JA,offlinePushInfo:ne}=rA,he=DA===!0?0:void 0,Ze=JSON.parse(JSON.stringify(O.transformElementsToServerFormat()));return{servcmd:"openim.sendmsg",data:{From_Account:(X=Se.store.get("login"))===null||X===void 0?void 0:X.userId,To_Account:O.to,MsgBody:Ze,CloudCustomData:GA,MsgSeq:O.sequence,MsgRandom:O.random,MsgLifeTime:he,From_AccountNick:O.nick,From_AccountHeadurl:O.avatar,SendMsgControl:he!==0?JA:void 0,MsgClientTime:O.clientTime,IsNeedReadReceipt:O.needReadReceipt===!0?1:0,SupportMessageExtension:O.isSupportExtension===!0?1:0,IsRelayMsg:O._relayFlag===!0?1:0,CustomModerationConfigID:O._cmConfigID,OfflinePushInfo:kE(ne),ForbidCallbackControl:aa(z),InnerSdkCustomData:FE(O)}}}(p,B),G=yield Zg(v);return G?{time:G.MsgTime,messageDropReason:G.MsgDropReason,sequence:G.MsgSeq}:null})}function kr(p){return mA(this,void 0,void 0,function*(){const{from:B,to:v,version:G=0,sequence:O,random:z,time:X,type:rA,cloudCustomData:DA}=p,GA={From_Account:B,To_Account:v,MsgVersion:G,MsgSeq:O,MsgRandom:z,MsgTime:X,MsgType:rA,MsgBody:p.transformElementsToServerFormat(),CloudCustomData:DA},JA=yield Zg({servcmd:"openim.modify_c2c_msg",data:GA});if(JA){const{MsgBody:ne,MsgVersion:he,CloudCustomData:Ze}=JA;return{elements:$a(ne),messageVersion:he,cloudCustomData:Ze}}})}function rl(p){return mA(this,void 0,void 0,function*(){const{to:B,version:v=0,sequence:G,cloudCustomData:O}=p,z={GroupId:B,MsgVersion:v,MsgSeq:G,MsgBody:p.transformElementsToServerFormat(),CloudCustomData:O},X=yield Zg({servcmd:"openim.modify_group_msg",data:z});if(X){const{MsgBody:rA,MsgVersion:DA,CloudCustomData:GA}=X;return{elements:$a(rA),messageVersion:DA,cloudCustomData:GA}}})}function Fl(p){return mA(this,void 0,void 0,function*(){const{groupID:B,count:v,messageSequence:G,messageSequenceList:O,getType:z}=p,X={GroupId:B,ReqMsgNumber:v,WithRecalledMsg:1,Version:1,GetType:z};return G&&(X.ReqMsgSeq=G),C(O)&&O.length>0&&(X.ReqMsgSeqList=O),yield Zg({servcmd:"group_open_http_svc.group_msg_get",data:X})})}function bc(p){return mA(this,void 0,void 0,function*(){const{peerAccount:B,count:v,lastMessageTime:G,messageKey:O,direction:z}=p;return Zg({servcmd:"openim.getroammsg",data:{Peer_Account:B,MaxCnt:v,WithRecalledMsg:1,LastMsgTime:G,MsgKey:O,GetDirection:z}})})}function FE(p){if(Se.utils.isObject(p.quoteInfo)){const{msgID:B,messageSequence:v,messageTime:G}=p.quoteInfo;return JSON.stringify({businessQuote:{messageID:B,messageSequence:v,messageTime:G}})}}var kc=Object.freeze({__proto__:null,createMessagePackOptions:UE,generateForbidCallbackControl:aa,getC2CRoamingMessagesByAnchor:bc,getGroupRoamingMessagesByAnchor:Fl,getRoamingMessages:function(p){return mA(this,void 0,void 0,function*(){const{peerAccount:B,count:v,lastMessageTime:G,messageKey:O}=p;return(yield Zg({servcmd:"openim.getroammsg",data:{Peer_Account:B,MaxCnt:v||15,LastMsgTime:G||0,MsgKey:O,GetDirection:0,WithRecalledMsg:1}}))||[]})},modifyC2CMessage:kr,modifyGroupMessage:rl,sendMessage:Mn});const{isPlainObject:Yu}=Se.utils,{MSG_AUDIO:yC,MSG_FILE:iu,MSG_IMAGE:Eh,MSG_VIDEO:Vu,MSG_MERGER:fI}=Bs;class al{constructor(){this._sendProtocolMap=new Map}init(){js.getInstance().registerApi({apiName:"sendMessage",context:this,matcher:B=>![yC,iu,Eh,Vu,fI].includes(B[0].type)})}registerSendProtocol(B,v,G){this._sendProtocolMap.set(B,v.bind(G))}sendMessage(B,v){return mA(this,void 0,void 0,function*(){const{TOTAL_COUNT:G,SEND_COST:O,SUCCESS_COUNT:z,FAILED_COUNT:X}=lI;if(!(B instanceof fC))throw new rs({code:Uo.MSG_INSTANCE_REQUIRED});const rA=B.validateBeforeSend();if(!rA.isValid){const{code:JA,message:ne=""}=rA.error||{};throw new rs({code:JA,message:ne})}this._reportMessageSendQuality({name:G,message:B});let DA=!1;const{messageDataHandler:GA}=Se.message||{};try{const{messageControlInfo:JA}=v||{};let ne=null;GA.addRandomOfSentMessage(B.random);const he=Date.now(),Ze=this._getSendProtocol(B);if(B.conversationType===Qr.CONV_C2C?(DA=v?.onlineUserOnly===!0,ne=yield Ze(B,v)):B.conversationType===Qr.CONV_GROUP&&(yield this._validateBeforeSendGroupMessage(B),ne=yield Ze(B,v)),ne){const{messageDropReason:st,sequence:at,time:Ft}=ne;if(this._updateNickAndAvatarOfSentMessageByMe(B),st&&this._logRateLimitInfo(B,at,st),this._reportMessageSendQuality({name:z,message:B}),this._reportMessageSendQuality({name:O,message:B,startTs:he}),B.isResend===!0){const Ht=GA.findMessage(B.ID);Ht&&(Se.ssoLog.debug("sendMessage",`sendMessage resend ok. ID:${Ht.ID}`),GA.deleteConversationMessage(Ht))}return B.status=wg.SUCCESS,B.time=Ft,B.conversationType===Qr.CONV_GROUP&&(B.sequence=at),DA?B._onlineOnlyFlag=!0:(GA.storeConversationMessage(B),this._applySentMessageControlInfo(B,JA),this._emitOnlineMessageSent(B)),B.type===zg.MSG_STREAM?{code:0,data:{message:B,streamMessageID:ne.streamMessageID}}:{code:0,data:{message:B}}}}catch(JA){B.status=wg.FAIL,GA.removeRandomOfSentMessage(B.random);let{errorCode:ne}=JA||{},he=JA?.errorInfo||JA?.message||"";throw this._hasRiskContent(ne)&&(B.hasRiskContent=!0),DA||this._isRejectedByRestApi(ne)||GA.storeConversationMessage(B),this._reportMessageSendQuality({name:X,message:B,error:JA}),new rs({code:ne,message:he,data:{message:B},moreMessage:`type:${B.type} from:${B.from} to:${B.to}`})}})}_hasRiskContent(B){return B===80001||B===80004}_isRejectedByRestApi(B){return B>=10100&&B<=10200||B>=120001&&B<=13e4}_emitOnlineMessageSent(B){const v=B._isExcludedFromLastMessage?"":B,{conversationID:G,conversationType:O}=B,z=$r(G)?Ei.TOPIC_NEW_MESSAGE:Ei.NEW_MESSAGE;Se.notificationCenter.emitInnerEvent(z,{result:{conversationUpdateFieldList:[{conversationID:G,type:O,message:B,lastMessage:v,unreadCount:0}]}})}_applySentMessageControlInfo(B,v){v&&Yu(v)&&(v.excludedFromLastMessage===!0&&(B._isExcludedFromLastMessage=!0),v.excludedFromUnreadCount===!0&&(B._isExcludedFromUnreadCount=!0))}_logRateLimitInfo(B,v,G){const O=`from:${B.from} to:${B.to} sequence:${v} messageDropReason:${G}`;Se.ssoLog.warn("messageDropReason",O)}_updateNickAndAvatarOfSentMessageByMe(B){const{messageDataHandler:v}=Se.message||{};let G=!1;const{conversationID:O}=B,z=v.getLatestMsgSentByMe(O);if(z){const{nick:X,avatar:rA}=z;X===B.nick&&rA===B.avatar||(G=!0),G&&v.updateNickAndAvatarOfSentMessage({conversationID:O,latestNick:B.nick,latestAvatar:B.avatar,isSentByMe:!0})}}_validateBeforeSendGroupMessage(B){return mA(this,void 0,void 0,function*(){var v,G,O;const{to:z,from:X}=B;let rA=z,DA=Za.getGroup(rA);if(Ca({groupID:rA})&&DA?.isSupportTopic)throw new rs({code:Uo.MSG_SEND_GRP_WITH_TOPIC_FAIL});if($r(z)&&([rA]=z.split(La.TOPIC),DA=Za.getGroup(rA)),!DA&&typeof((v=js.getInstance().getApiMap())===null||v===void 0?void 0:v.getGroupProfile)=="function"){const GA=yield js.getInstance().getApiMap().getGroupProfile({groupID:rA});if(((O=(G=GA?.data)===null||G===void 0?void 0:G.group)===null||O===void 0?void 0:O.type)===Bs.GRP_AVCHATROOM){const JA=_l({code:Uo.MSG_SEND_FAIL_NOT_IN_AV,replacement1:X,replacement2:rA});throw new rs({code:Uo.MSG_SEND_FAIL_NOT_IN_AV,message:JA})}}return!0})}_reportMessageSendQuality(B){Se.notificationCenter.emitInnerEvent(Ei.QUALITY_STAT,{label:Ng.MESSAGE_SEND_SUCCESS_RATE,data:B})}_getSendProtocol(B){return this._sendProtocolMap.get(B.type)||Mn}}var DC=new class{constructor(){this._sparseMessagesByConversation=new Map,this._latestMessageSentByPeerMap=new Map,this._latestMessageSentByMeMap=new Map,this._randomOfSentMessageList=new Set}init(){Se.notificationCenter.subscribeInnerEvent(Ei.LOGOUT,this._reset,this),Se.notificationCenter.subscribeInnerEvent(Ei.DESTROY,this._dispose,this)}get _messagesByConversation(){return Gl.getMessages()}storeConversationMessage(p,B=!1){if(an)return!0;const{conversationID:v}=p;if(!v||(this._messagesByConversation.has(v)||this._messagesByConversation.set(v,new Map),this._shouldSkipStoreMessage(p,B)))return!1;const G=this._getUniqueIdOfMessage(p);return this._messagesByConversation.get(v).set(G,p),this._updateLatestMessageMap(p),!0}_updateLatestMessageMap(p){const{conversationID:B}=p;p.flow==="out"?this._setLatestMsgSentByMe(B,p):B.startsWith("C2C")&&this._setLatestMsgSentByPeer(B,p)}_shouldSkipStoreMessage(p,B){const v=this._getUniqueIdOfMessage(p),G=this._messagesByConversation.get(p.conversationID);if(G?.has(v)){const O=G?.get(v);if(!B||O?.isModified===!0)return!0}return!1}deleteConversationMessage(p){var B;const{conversationID:v=""}=p,G=this._getUniqueIdOfMessage(p);this._messagesByConversation.has(v)&&((B=this._messagesByConversation.get(v))===null||B===void 0||B.delete(G))}modifyConversationMessage(p,B){var v;if(!this._messagesByConversation.has(p)&&!this._sparseMessagesByConversation.has(p))return{isUpdated:!1,message:null};const G=this._getUniqueIdOfMessage(B),O=this._getMessageFromLocalMessage(p,G);if(O){const{messageVersion:z,elements:X,cloudCustomData:rA,checkResult:DA=0}=B,GA=DA>1;if(Se.ssoLog.debug("modifyConversationMessage",`conversationToMessageMap modifyConversationMessage localVersion:${O.version} remoteVersion:${z}`),O.versionO.ID===p)||null,B)break;if(!B){const G=Array.from(this._sparseMessagesByConversation.values());for(const O of G)if(B=O.get(p)||null,B)break}return B}deleteConversationMessageList(p){this._messagesByConversation.has(p)&&(this._messagesByConversation.delete(p),this._latestMessageSentByMeMap.delete(p),this._latestMessageSentByPeerMap.delete(p)),this._sparseMessagesByConversation.has(p)&&this._sparseMessagesByConversation.delete(p)}revokeMessage({conversationID:p,sequence:B,random:v,revoker:G}){const O=this._messagesByConversation.get(p);let z=null;if(O){const X=Array.from(O.values());if(z=this._findMessageBySequenceAndRandom({messageList:X,random:v,sequence:B}),z){const rA=this._getUniqueIdOfMessage(z);return Gl.updateMessage(p,[rA],{isRevoked:!0,revoker:G,operation:Yr.revoke}),z}}if(this._sparseMessagesByConversation.has(p)){const X=Array.from(this._sparseMessagesByConversation.get(p).values());if(z=this._findMessageBySequenceAndRandom({messageList:X,random:v,sequence:B}),z)return z.isRevoked=!0,z.revoker=G,z}}_findMessageBySequenceAndRandom({messageList:p,sequence:B,random:v}){for(let G=0;G0){const X=new Map([...O,...z.entries()]);this._messagesByConversation.set(v,X),this._updateLatestMessageSentByMe(v),this._updateLatestMessageSentByPeer(v)}return G}storeSparseMessageList(p){if(p.length===0)return;const{conversationID:B}=p[0],v=p.length;this._sparseMessagesByConversation.has(B)||this._sparseMessagesByConversation.set(B,new Map);const G=this._sparseMessagesByConversation.get(B);for(let O=0;O=0;G--)if(v[G].flow==="out"){this._setLatestMsgSentByMe(p,v[G]);break}}}_updateLatestMessageSentByPeer(p){var B;const v=Array.from(((B=this._messagesByConversation.get(p))===null||B===void 0?void 0:B.values())||[]);if(v.length!==0&&p.startsWith("C2C")){for(let G=v.length-1;G>=0;G--)if(v[G].flow==="in"){this._setLatestMsgSentByPeer(p,v[G]);break}}}_getUniqueIdOfMessage(p){const{from:B,to:v,random:G,sequence:O,time:z}=p;return`${B}-${v}-${G}-${O}-${z}`}_setLatestMsgSentByPeer(p,B){this._latestMessageSentByPeerMap.set(p,B)}_setLatestMsgSentByMe(p,B){this._latestMessageSentByMeMap.set(p,B)}getLatestMsgSentByPeer(p){return this._latestMessageSentByPeerMap.get(p)}getLatestMsgSentByMe(p){return this._latestMessageSentByMeMap.get(p)}addRandomOfSentMessage(p){this._randomOfSentMessageList.add(p)}removeRandomOfSentMessage(p){this._randomOfSentMessageList.delete(p)}updateNickAndAvatarOfSentMessage(p){const{conversationID:B="",latestAvatar:v,latestNick:G,isSentByMe:O=!0}=p,z=this._messagesByConversation.get(B);if(!z)return;const X=Array.from(z.values()),rA=O?"out":"in";X.forEach(DA=>{const{nick:GA,avatar:JA,flow:ne}=DA;ne===rA&&(GA!==G&&(DA.nick=G),JA!==v&&(DA.avatar=v))})}isInMessageList(p){var B;const{conversationID:v}=p;if(!v||!this._messagesByConversation.has(v))return!1;const G=this._getUniqueIdOfMessage(p);return(B=this._messagesByConversation.get(v))===null||B===void 0?void 0:B.has(G)}isMessageSentByCurrentInstance(p){const{random:B}=p;return this._randomOfSentMessageList.has(B)}getContinuousMessagesByConversation(){return this._messagesByConversation}getLocalMessageList(p){const B=this._messagesByConversation.get(p);return B?[...B.values()]:[]}getSparseMessageList(p){const B=this._sparseMessagesByConversation.get(p);return B?[...B.values()]:[]}_reset(){this._messagesByConversation.clear(),this._latestMessageSentByPeerMap.clear(),this._latestMessageSentByMeMap.clear(),this._randomOfSentMessageList.clear()}_dispose(){this._reset(),Se.notificationCenter.unSubscribeInnerEvent(Ei.LOGOUT,this._reset,this),Se.notificationCenter.unSubscribeInnerEvent(Ei.DESTROY,this._dispose,this)}};function ga(p,B){const v=$g.getConversation(p);if(v?.lastMessage){const{lastMessage:G}=v,{lastTime:O,lastSequence:z,version:X}=G,{time:rA,sequence:DA,messageVersion:GA,elements:JA,cloudCustomData:ne}=B;O===rA&&z===DA&&X!==GA&&(G.type=JA[0].type,G.payload=JA[0].content,G.messageForShow=WI(G.type,G.payload),G.cloudCustomData=ne,G.version=GA,$g.updateConversation(p,{lastMessage:G}))}}class tc{init(){js.getInstance().registerApi({apiName:"modifyMessage",context:this})}modifyMessage(B){return mA(this,void 0,void 0,function*(){const{to:v,payload:G,sequence:O,conversationType:z,random:X,time:rA,from:DA,type:GA}=B;if(this._canModifyMessageElement(GA)){const JA=B?._elements||[];JA.length>=1&&(JA[0].type=GA,JA[0].content=G)}try{let JA=null,ne=null;if(z===Qr.CONV_C2C?JA=yield kr(B):z===Qr.CONV_GROUP&&(JA=yield rl(B)),JA){let he=`${z}${v}`;return v===jn()&&z===Qr.CONV_C2C&&(he=`${z}${DA}`),ne={conversationType:z,from:DA,to:v,time:rA,random:X,sequence:O,elements:JA?.elements,cloudCustomData:JA?.cloudCustomData,messageVersion:JA?.messageVersion,conversationID:he},this._handleModifyMessageSuccess(ne),{code:0,data:{message:B},successLog:{message:`to:${v}`}}}}catch(JA){const{errorCode:ne}=JA||{};throw new rs({functionName:"modifyMessage",code:ne,moreMessage:`to:${v}`})}})}_handleModifyMessageSuccess(B){const{conversationID:v}=B,{isUpdated:G,message:O}=Se.message.messageDataHandler.modifyConversationMessage(v,B);G===!0&&Se.notificationCenter.emitOuterEvent(Dn.MESSAGE_MODIFIED,{name:Dn.MESSAGE_MODIFIED,data:[O]}),Se.notificationCenter.emitInnerEvent(Ei.MESSAGE_MODIFIED,{conversationID:v,message:O}),ga(v,B)}_canModifyMessageElement(B){return[Xa.MSG_TEXT,Xa.MSG_CUSTOM,Xa.MSG_LOCATION,Xa.MSG_FACE].includes(B)}}class lg{init(){const{notificationCenter:B}=Se,{InnerEventSubType:v}=B;tn.getInstance().registerWorkflowStep(gr.RECEIVE_C2C_NEW_MESSAGE,Jt.HANDLE_C2C_NEW_MESSAGE,this._handleC2CMessagePush,this),tn.getInstance().registerWorkflowStep(gr.RECEIVE_C2C_NEW_MESSAGE,Jt.EMIT_C2C_MESSAGE_EVENT,this._emitMessageEventsAfterReceiveNewMessage,this),tn.getInstance().registerWorkflowStep(gr.SYNC_SERVER_INFO_AFTER_RE_ONLINE,Jt.EMIT_C2C_MESSAGE_EVENT,this._emitMessageEventsAfterSyncUnreadMessage,this),B.subscribeInnerEvent(Ei.MESSAGE_PUSH,v.C2C_REALTIME_MESSAGE,this._executeReceiverNewMessageWorkFlow,this),B.subscribeInnerEvent(Ei.MESSAGE_PUSH,v.C2C_MESSAGE_MODIFIED,this._handleC2CMessageModify,this),B.subscribeInnerEvent(Ei.DESTROY,this._dispose,this)}_executeReceiverNewMessageWorkFlow(B){tn.getInstance().executeWorkflow(gr.RECEIVE_C2C_NEW_MESSAGE,B)}_handleC2CMessagePush(B){const v=B.data||{},{messageDataHandler:G}=Se.message||{},O=[],z=new Map;return v.C2cMsgArray.forEach(X=>{const rA=this._generateC2CMessage(X);this._updateMessageProfile(rA);let DA=rA.isModified===1;G.isMessageSentByCurrentInstance(rA)?rA.isModified=DA:DA=!1,rA._onlineOnlyFlag?G.isMessageSentByCurrentInstance(rA)||O.push(rA):sl(rA)&&(G.storeConversationMessage(rA)&&Gc({conversationUpdateFields:z,message:rA}),G.isMessageSentByCurrentInstance(rA)&&!DA||O.push(rA))}),{conversationUpdateFieldList:[...z.values()],messages:O}}_emitMessageEventsAfterReceiveNewMessage(B){var v;const{messages:G=[]}=((v=B.result)===null||v===void 0?void 0:v[Jt.HANDLE_C2C_NEW_MESSAGE])||{};this._emitMessageEvents(G)}_emitMessageEventsAfterSyncUnreadMessage(B){var v;const{messages:G=[]}=((v=B.result)===null||v===void 0?void 0:v[Jt.UNREAD_MESSAGE_SYNC])||{};this._emitMessageEvents(G)}_emitMessageEvents(B){const v=B?.filter(O=>O?.isModified===!0)||[];v.length>0&&Se.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:v});const G=B?.filter(O=>!O?.isModified);G.length>0&&Se.notificationCenter.emitOuterEvent("onMessageReceived",{name:"onMessageReceived",data:G})}_generateC2CMessage(B){const v=Qr.CONV_C2C,G=Nc(B),O=Se.message.messageFactory.createMessage(Object.assign(Object.assign({},G),{conversationType:v,flow:go.IN})),{elements:z}=G;return O.setElement(z),O}_updateMessageProfile(B){var v;const{messageDataHandler:G}=Se.message||{},O=(v=Se.store.get("login"))===null||v===void 0?void 0:v.userId,{from:z,nick:X,avatar:rA,conversationID:DA=""}=B;if(z!==O){const GA=G.getLatestMsgSentByPeer(DA);if(GA){const{nick:JA,avatar:ne}=GA;n(X)||n(rA)?(B.nick=c(JA)?JA:B.nick,B.avatar=c(ne)?ne:B.avatar):X===JA&&rA===ne||(G.updateNickAndAvatarOfSentMessage({conversationID:DA,latestNick:X,latestAvatar:rA,isSentByMe:!1}),this._updateConversationUserProfile({conversationID:DA,nick:X,avatar:rA}))}}else{const GA=G.getLatestMsgSentByMe(DA);!GA||X===GA.nick&&rA===GA.avatar||G.updateNickAndAvatarOfSentMessage({conversationID:DA,latestNick:X,latestAvatar:rA,isSentByMe:!0})}}_updateConversationUserProfile(B){const{conversationID:v,nick:G,avatar:O}=B,z=$g.getConversation(v),{userProfile:X={}}=z||{};X.avatar===O&&X.nick===G||$g.updateConversation(v,{userProfile:Object.assign(Object.assign({},X),{nick:G,avatar:O})})}_updateMessageListDueToModify(B){const{conversationID:v}=B,{isUpdated:G,message:O}=Se.message.messageDataHandler.modifyConversationMessage(v,B);G===!0&&Se.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:[O]}),Se.notificationCenter.emitInnerEvent("ModifyMessageSuccess",B),ga(v,B)}_handleC2CMessageModify(B){B.C2cMsgModNotifys.forEach(v=>{var G;const O=Qr.CONV_C2C;let z=eu(v);const{to:X,from:rA}=z;let DA=`${O}${X}`;X===((G=Se.store.get("login"))===null||G===void 0?void 0:G.userId)&&(DA=`${O}${rA}`),z=Object.assign({conversationType:O,conversationID:DA},z),this._updateMessageListDueToModify(z)})}_dispose(){const{notificationCenter:B}=Se,{InnerEventSubType:v}=B;Se.notificationCenter.unSubscribeInnerEvent(Ei.MESSAGE_PUSH,v.C2C_REALTIME_MESSAGE,this._handleC2CMessagePush,this),Se.notificationCenter.unSubscribeInnerEvent(Ei.MESSAGE_PUSH,v.C2C_MESSAGE_MODIFIED,this._handleC2CMessageModify,this),Se.notificationCenter.unSubscribeInnerEvent(Ei.DESTROY,this._dispose,this)}}class yI{init(){const{notificationCenter:B}=Se,{InnerEventSubType:v}=B;tn.getInstance().registerWorkflowStep(gr.RECEIVE_GROUP_NEW_MESSAGE,Jt.HANDLE_GROUP_NEW_MESSAGE,this._handleGroupMessagePush,this),tn.getInstance().registerWorkflowStep(gr.RECEIVE_GROUP_NEW_MESSAGE,Jt.EMIT_GROUP_MESSAGE_EVENT,this._emitMessageEvents,this),B.subscribeInnerEvent(Ei.MESSAGE_PUSH,v.GROUP_REALTIME_MESSAGE,this._executeReceiverNewMessageWorkFlow,this),B.subscribeInnerEvent(Ei.MESSAGE_PUSH,v.GROUP_MESSAGE_MODIFIED,this._handleGroupMessageModify,this),B.subscribeInnerEvent(Ei.DESTROY,this._dispose,this)}_executeReceiverNewMessageWorkFlow(B){this._canExecuteReceiverNewMessageWorkFlow(B)&&tn.getInstance().executeWorkflow(gr.RECEIVE_GROUP_NEW_MESSAGE,B)}_handleGroupMessagePush(B){const v=B.data||{},{messageDataHandler:G}=Se.message,O=[],z=new Map,X=v?.GroupMsgArray;return X?.forEach(rA=>{if(rA.GroupInfo.NotVisible===1)return;const DA=this._generateGroupMessage(rA);this.updateMessageProfile(DA);let GA=DA.isModified===1;G.isMessageSentByCurrentInstance(DA)?DA.isModified=GA:GA=!1,DA._onlineOnlyFlag?G.isMessageSentByCurrentInstance(DA)||O.push(DA):sl(DA)&&G.storeConversationMessage(DA)&&(O.push(DA),Gc({conversationUpdateFields:z,message:DA}))}),{conversationUpdateFieldList:[...z.values()],messages:O}}_emitMessageEvents(B){var v;const{messages:G}=((v=B.result)===null||v===void 0?void 0:v[Jt.HANDLE_GROUP_NEW_MESSAGE])||{},O=G?.filter(X=>X?.isModified===!0)||[];O.length>0&&Se.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:O});const z=G?.filter(X=>!X?.isModified)||[];z.length>0&&Se.notificationCenter.emitOuterEvent("onMessageReceived",{name:"onMessageReceived",data:z})}_generateGroupMessage(B){const v=Qr.CONV_GROUP,G=Io(B),O=Se.message.messageFactory.createMessage(Object.assign(Object.assign({},G),{conversationType:v,flow:go.IN})),{elements:z}=G;return O.setElement(z),O}updateMessageProfile(B){var v;const{messageDataHandler:G}=Se.message||{},O=(v=Se.store.get("login"))===null||v===void 0?void 0:v.userId,{from:z,nick:X,avatar:rA,conversationID:DA="",_elements:GA}=B;if(z===O){const JA=G.getLatestMsgSentByMe(DA);!JA||X===JA.nick&&rA===JA.avatar||G.updateNickAndAvatarOfSentMessage({conversationID:DA,latestNick:X,latestAvatar:rA,isSentByMe:!0})}else if(z===Bs.CONV_SYSTEM){const{operationType:JA,memberInfoList:ne,operatorInfo:he}=GA;let Ze={};if(Rs(ne)?Rs(he)||(Ze=he):[na.JOINED,na.KICKED,na.ADMIN_SET,na.ADMIN_CANCELED].includes(JA)&&(Ze=Object.assign({},ne[0])),!Rs(Ze)){const{nick:st="",avatar:at=""}=Ze;B.nick=st,B.avatar=at}}}_updateMessageListDueToModify(B){const{conversationID:v}=B,{isUpdated:G,message:O}=Se.message.messageDataHandler.modifyConversationMessage(v,B);G===!0&&Se.notificationCenter.emitOuterEvent("onMessageModified",{name:"onMessageModified",data:[O]}),ga(v,B)}_handleGroupMessageModify(B){B.GroupMsgModNotifys.forEach(v=>{const G=Qr.CONV_GROUP;let O=tu(v);const{topicID:z,groupID:X}=O,rA=z||X,DA=`${G}${rA}`;O=Object.assign({conversationType:G,conversationID:DA,to:rA},O),this._updateMessageListDueToModify(O)})}_dispose(){const{notificationCenter:B}=Se,{InnerEventSubType:{GROUP_REALTIME_MESSAGE:v,GROUP_MESSAGE_MODIFIED:G}}=B;B.unSubscribeInnerEvent(Ei.MESSAGE_PUSH,v,this._handleGroupMessagePush,this),B.unSubscribeInnerEvent(Ei.MESSAGE_PUSH,G,this._handleGroupMessageModify,this),B.unSubscribeInnerEvent(Ei.DESTROY,this._dispose,this)}_canExecuteReceiverNewMessageWorkFlow(B){var v,G;const{GroupId:O,GroupType:z}=((G=(v=B?.GroupMsgArray)===null||v===void 0?void 0:v[0])===null||G===void 0?void 0:G.GroupInfo)||{},X=z===SE.GRP_AVCHATROOM;return!(!Za.getGroup(O)&&X)}}var OE=new class{constructor(){this.c2cMessageReceiver=new lg,this.groupMessageReceiver=new yI}init(){this.c2cMessageReceiver.init(),this.groupMessageReceiver.init()}};const Ju={createCustomMessage:{to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1},payload:{required:!0,rules:["object"],allowEmpty:!1},cloudCustomData:{required:!1,rules:["string"],allowEmpty:!1},priority:{required:!1,rules:["string"],allowEmpty:!1},customModerationConfigurationID:{required:!1,rules:["string"],allowEmpty:!1}},sendMessage:[{key:"message",required:!0,rules:["object"],allowEmpty:!1},{key:"options",required:!1,rules:["object"],allowEmpty:!1}],createTextMessage:{to:{required:!0,rules:["string"],allowEmpty:!1},conversationType:{required:!0,rules:["string"],allowEmpty:!1,customValidator:p=>!(!p.startsWith("C2C")&&!p.startsWith("GROUP"))||"conversationType is invalid."},payload:{required:!0,rules:["object"],allowEmpty:!1,customValidator:p=>function(B){var v;return typeof B?.text!="string"||typeof B.text=="string"&&((v=B?.text)===null||v===void 0?void 0:v.length)===0?"payload.text must be a string":!0}(p)}}},Hu={createCustomMessage:!0,sendMessage:!0,modifyMessage:!0};var DI=new class{constructor(){this._historyMessageListFetchAnchors=new Map,this.completedHistoryConversations=new Set}getGroupRoamingMessagesByAnchor(p){return mA(this,void 0,void 0,function*(){try{const{conversationID:B,count:v,direction:G,sequence:O,messageSequenceList:z,shouldMarkCompleted:X=!1,getType:rA}=p,DA=B.replace(_g.CONV_GROUP,""),GA=[];let JA=O;if(G===yc.BACKWARD){if(typeof O!="number")return{messageList:[],hasNoMoreHistoryMessage:!1,nextReqMessageIDFromServer:""};JA=O+v-1}const ne=yield Fl({groupID:DA,count:v,messageSequence:JA,messageSequenceList:z,getType:rA});if(ne){const{RspMsgList:he=[],NextReqMsgSeq:Ze=0,IsFinished:st,InvisibleMsgSeq:at}=ne,Ft=`groupID:${DA} sequence:${O} reqSeq:${JA} direction:${G} complete:${st} nextSequence:${Ze} remoteMsgCount:${he.length} invisibleSequenceList:${at}`,Ht=[];for(let Xi=0;Xi=O),Pi&&X&&this.completedHistoryConversations.add(B);const co=mI(Ht);return Se.ssoLog.info("getGroupRoamingMessagesByAnchor",Ft),{messageList:co,invisibleSequenceList:at,nextReqMessageIDFromServer:Ze,hasNoMoreHistoryMessage:Pi,serverGroupTipList:GA}}}catch(B){const{errorCode:v,errorInfo:G}=B||{};throw new rs({code:v,message:G})}})}clearHistoryMessageListFetchAnchors(p){this._historyMessageListFetchAnchors.delete(p)}isHistoryMessageFetchCompleted(p){return this.completedHistoryConversations.has(p)}_parseMessage(p){var B;const v=_g.CONV_GROUP;p.Event===4&&(p.MsgBody.MsgType=Bs.MSG_GRP_TIP);const G=Io(p),O=QI.createMessage(Object.assign(Object.assign({},G),{conversationType:v,flow:"in"}));return wc(((B=G.elements)===null||B===void 0?void 0:B.content)||{},O),O.setElement(G.elements),O}getC2CRoamingMessagesByAnchor(p){return mA(this,void 0,void 0,function*(){var B;try{const{conversationID:v,count:G,messageID:O,time:z,direction:X,shouldMarkCompleted:rA=!1}=p;let DA=z,GA="";if(!z){const he=O?Se.message.messageDataHandler.findMessage(O):null;if(DA=he?.time||0,O&&this._historyMessageListFetchAnchors.has(v)){const Ze=this._historyMessageListFetchAnchors.get(v);DA=Ze.lastMessageTime,GA=Ze.messageKey}}const JA=v.replace(_g.CONV_C2C,""),ne=yield bc({count:G,lastMessageTime:DA,messageKey:GA,peerAccount:JA,direction:X});if(ne){const{MsgList:he=[],Complete:Ze,MsgKey:st,LastMsgTime:at}=ne;this._historyMessageListFetchAnchors.set(v,{messageKey:st,lastMessageTime:at});const Ft=[];for(let Xi=0;Xi{const{tag:O,value:z}=G;O&&O.indexOf(Ig)>-1?v.profileCustomField.push({key:O,value:z}):Ol.has(O)&&(v[Ol.get(O)]=z)}),Object.assign(Object.assign({},Ya),v)}parseProfileItem(p=[]){const B=[];return p.forEach(v=>{B.push({tag:v.Tag,value:v.Value})}),B}parseProfileList(p=[]){const B=[];return p.forEach(v=>{B.push({tag:v.Tag,value:v.ValueBytes})}),B}convertParamsToProfile(p){const B=[];return Object.keys(p).forEach(v=>{v!==lr&&B.push({tag:Ur[v.toUpperCase()],value:p[v]})}),p.profileCustomField&&C(p.profileCustomField)&&p.profileCustomField.forEach(v=>{B.push({tag:v.key,value:v.value})}),B}normalizeProfileFields(p){const B={},v=[];return p.forEach(G=>{const{tag:O,value:z}=G;if(O&&O.indexOf(Ig)>-1&&v.push({key:O,value:z}),Ol.has(O)&&z!==void 0){const X=Ol.get(O);B[X]=z}}),v.length>0&&(B.profileCustomField=v),B}};const{generateProtocolData:SI}=Se.common;function ou(p){return mA(this,void 0,void 0,function*(){const B="profile.portrait_get_all",v={From_Account:jn(),UserItem:[]};p.forEach(X=>{v.UserItem.push({CustomSequence:0,StandardSequence:0,To_Account:X})});const G=SI({servcmd:B,data:v}),O=`${G.head.seq}${B}`,z=yield Se.channel.sendPacket(G,{requestId:O});if(z)return function(X){const{ActionStatus:rA,ErrorCode:DA,ErrorDisplay:GA,ErrorInfo:JA,UserProfileItem:ne}=X,he=[];return ne.map(Ze=>{const{To_Account:st,CustomSequence:at,ResultCode:Ft,ResultInfo:Ht,StandardSequence:Pi,ProfileItem:co}=Ze,Xi=ha.parseProfileItem(co);he.push({userId:st,customSequence:at,resultCode:Ft,resultInfo:Ht,standardSequence:Pi,profileItem:Xi})}),{actionStatus:rA,errorCode:DA,errorDisplay:GA,errorInfo:JA,userProfile:he}}(z)})}function Ba(p){return ea.getFriendMap().has(p)}const{isEmpty:cl}=Se.utils;class PE{constructor(){this._strangerProfileMap=new Map}init(){js.getInstance().registerApi({apiName:"getMyProfile",context:this}),js.getInstance().registerApi({apiName:"getUserProfile",context:this}),js.getInstance().registerApi({apiName:"updateMyProfile",context:this}),this.createProfile=ha.createProfile.bind(ha);const{notificationCenter:B}=Se;tn.getInstance().registerWorkflowStep(gr.SYNC_SERVER_INFO_AFTER_LOGIN,Jt.USER_PROFILE_SYNC,this.getMyProfileCacheThenServer,this),B.subscribeInnerEvent(Ei.MESSAGE_PUSH,B.InnerEventSubType.PROFILE_MODIFIED,this._onProfileDataModify,this),B.subscribeInnerEvent(Ei.LOGOUT,this._reset,this),B.subscribeInnerEvent(Ei.DESTROY,this._dispose,this)}getMyProfile(){return mA(this,void 0,void 0,function*(){try{const B=jn(),v=yield ou([B]);if(v){const G=this._handleProfileFormResponse(v)[0];return ea.getUserProfileMap().set(B,G),{code:0,data:G}}}catch(B){const{errorCode:v,errorInfo:G}=B;throw new rs({functionName:"getMyProfile",code:v,message:G})}})}getUserProfile(B){return mA(this,void 0,void 0,function*(){try{let{userIDList:v}=B;const{userIdListToRequest:G,profileFromCache:O}=this._filterRequestAndCacheUsers(v);if(G.length===0)return{code:0,data:O,successLog:{message:`userIDList.length:${v.length}`}};G.length>Fg&&(Se.ssoLog.warn("getUserProfile","userIdListToRequest.length > 1000"),G.length=Fg);const{data:z,error:X}=yield this._batchFetchUserProfiles(G),rA=G.length,DA=z.length,GA=rA-DA;if(O.length===0&&rA===GA&&!cl(X))throw X;if(C(z))return z.forEach(ne=>{Ba(ne.userID)?ea.getUserProfileMap().set(ne.userID,ne):this._strangerProfileMap.set(ne.userID,ne)}),{code:0,data:z.concat(O),successLog:{message:`getUserProfile query:${rA} success:${DA} fail:${GA} from cache:${O.length}`}}}catch(v){throw new rs(v)}})}getMyProfileCacheThenServer(){return mA(this,void 0,void 0,function*(){const B=jn(),v=ea.getUserProfileMap().has(B);return v?{code:0,data:v}:this.getMyProfile()})}updateMyProfile(B){return mA(this,void 0,void 0,function*(){const v=jn(),G={};for(const z in B)B[z]!==void 0&&(G[z]=B[z]);const O=ha.convertParamsToProfile(G);try{yield function(GA){return mA(this,void 0,void 0,function*(){const JA="profile.portrait_set",ne=SI({servcmd:JA,data:GA}),he=`${ne.head.seq}${JA}`,Ze=yield Se.channel.sendPacket(ne,{requestId:he});if(Ze){const{ActionStatus:st,ErrorCode:at,ErrorDisplay:Ft,ErrorInfo:Ht}=Ze;return{actionStatus:st,errorCode:at,errorDisplay:Ft,errorInfo:Ht}}})}({From_Account:v,ProfileItem:O});const X=ea.getUserProfile(v);let rA;rA=X?Object.assign(Object.assign({},X),G):ha.createProfile(v,O);const DA=!vg(X,rA,["lastUpdatedTime"]);return rA.lastUpdatedTime=Date.now(),ea.getUserProfileMap().set(v,rA),DA&&this._emitProfileUpdated(rA),{code:0,data:rA,successLog:{message:`profileArray: ${Se.utils.safeStringify(O)}`}}}catch(z){const{errorCode:X,errorInfo:rA}=z;throw new rs({functionName:"updateMyProfile",code:X,message:rA,moreMessage:`params: ${Se.utils.safeStringify(B)}`})}})}updateMyNickAndAvatar(B){return mA(this,void 0,void 0,function*(){const v=jn(),G=Date.now(),O=ea.getUserProfile(v);let z={};z=O?Object.assign(O,B):ha.createProfile(v,B),z.lastUpdatedTime=G,ea.getUserProfileMap().set(v,z)})}_onProfileDataModify(B){const v=function(z){const{Profile_Account:X,PushType:rA,ProfileList:DA}=z;return{userId:X,pushType:rA,profileList:ha.parseProfileList(DA)}}(B.ProfileDataMod[0]);if(cl(v))return;const{isProfileUpdated:G,profile:O}=this._handleProfileModified(v);G&&this._emitProfileUpdated(O)}_emitProfileUpdated(B){Se.notificationCenter.emitInnerEvent(Ei.PROFILE_UPDATE,{name:Ei.PROFILE_UPDATE,data:[B]}),Se.notificationCenter.emitOuterEvent(Dn.PROFILE_UPDATED,{name:Dn.PROFILE_UPDATED,data:[B]}),$g.updateConversation(`C2C${B?.userID}`,{userProfile:B})}_dispose(){const{notificationCenter:B}=Se;B.unSubscribeInnerEvent(Ei.LOGOUT,this._reset,this),B.unSubscribeInnerEvent(Ei.MESSAGE_PUSH,B.InnerEventSubType.PROFILE_MODIFIED,this._onProfileDataModify,this),B.unSubscribeInnerEvent(Ei.DESTROY,this._dispose,this),this._reset()}_handleProfileModified(B){const{userId:v,profileList:G}=B,O=ea.getUserProfile(v);if(!(jn()===v||Ba(v)&&O))return{isProfileUpdated:!1,profile:null};const z=ha.normalizeProfileFields(G),X=Object.keys(z).some(JA=>JA===lr?this._isCustomFieldChanged(O.profileCustomField,z.profileCustomField):O[JA]!==z[JA]);if(!X)return{isProfileUpdated:!1,profile:O};const rA=Date.now(),DA=Object.prototype.hasOwnProperty.call(z,lr)?this._mergeProfileCustomField(O.profileCustomField,z.profileCustomField):O.profileCustomField,GA=Object.assign(Object.assign(Object.assign({},O),z),{profileCustomField:DA,lastUpdatedTime:rA});return ea.getUserProfileMap().set(v,GA),{isProfileUpdated:X,profile:GA}}_filterRequestAndCacheUsers(B){const v=[],G=[];return B.forEach(O=>{const z=ea.getUserProfileMap().has(O);Ba(O)&&z?G.push(ea.getUserProfile(O)):this._isStrangerAndProfileValid(O)?G.push(this._strangerProfileMap.get(O)):v.push(O)}),{userIdListToRequest:v,profileFromCache:G}}_handleProfileFormResponse(B){const{userProfile:v}=B;if(!Array.isArray(v))return[];const G=v.filter(z=>z.userId!=="@TLS#NOT_FOUND"&&z.userId!==""&&!cl(z.profileItem)),O=Date.now();return G.map(z=>{const X=ha.createProfile(z.userId,z.profileItem);return X.lastUpdatedTime=O,X})}_isStrangerAndProfileValid(B){var v;if(!Ba(B)){const{lastUpdatedTime:G=0}=this._strangerProfileMap.get(B)||{},O=((v=Se.store.get("cloudConfig"))===null||v===void 0?void 0:v.stranger_profile_expiration_time)||6e5;return Date.now()-G<=O}return!1}_chunkUserIDList(B,v){return Array.from({length:Math.ceil(B.length/v)},(G,O)=>B.slice(O*v,(O+1)*v))}_batchFetchUserProfiles(B){return mA(this,void 0,void 0,function*(){const v=[],G=[];let O={};return this._chunkUserIDList(B,100).forEach(z=>{v.push(ou(z))}),(yield Promise.allSettled(v)).forEach(z=>{if(z.status==="fulfilled"){const X=z.value,rA=this._handleProfileFormResponse(X);C(rA)&&G.push(...rA)}else if(z.status==="rejected"){const{code:X,message:rA}=z.reason||{};O={errorCode:X,message:rA}}}),{data:G,error:O}})}_isCustomFieldChanged(B=[],v=[]){if(!C(v)||v.length===0)return!1;if(!C(B)||B.length===0)return!0;const G=new Map(B.map(O=>[O.key,O.value]));return v.some(O=>G.get(O.key)!==O.value)}_mergeProfileCustomField(B=[],v=[]){const G=C(B)?B.map(O=>Object.assign({},O)):[];return C(v)&&v.length!==0&&v.forEach(({key:O,value:z})=>{const X=G.find(rA=>rA.key===O);X?X.value=z:G.push({key:O,value:z})}),G}_reset(){ea.getUserProfileMap().clear(),this._strangerProfileMap.clear()}}const su=new Map,xE=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];for(let p=0,B=xE.length;p>(-2*z&6)):0)O="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(O);try{return decodeURIComponent(escape(v))}catch(G){return console.warn(G),""}}const{isEmpty:nu}=Se.utils,{generateProtocolData:xt}=Se.common;function qu(p){return mA(this,void 0,void 0,function*(){const B="im_open_status.ws_get_user_status",v=xt({servcmd:B,data:{To_Account:p}}),G=`${v.head.seq}${B}`,O=yield Se.channel.sendPacket(v,{requestId:G});if(O)return function(z){const{ErrorCode:X,ErrorInfo:rA,ErrorList:DA=[],UserStatusList:GA=[]}=z,JA=GA.map(he=>{const{To_Account:Ze,Status:st,CustomStatus:at,Detail:Ft=[]}=he;return{userID:Ze,statusType:st,customStatus:Jr(at),onlineDevices:Ku(Ft)}}),ne=DA.map(he=>{const{To_Account:Ze,Invalid_Account:st,ErrorCode:at,ErrorInfo:Ft}=he;return{userID:nu(st)?Ze:st,code:at,message:Ft}});return{errorCode:X,errorInfo:rA,successUserList:JA,failureUserList:ne}}(O)})}function Ku(p){const B=[];return p?.forEach(v=>{const{Platform:G,Status:O}=v;O==="Online"&&B.push(G)}),B}class SC{constructor(){this._customStatus=""}init(){const{notificationCenter:B}=Se;js.getInstance().registerApi({apiName:"getUserStatus",context:this}),js.getInstance().registerApi({apiName:"setSelfStatus",context:this}),js.getInstance().registerApi({apiName:"subscribeUserStatus",context:this}),js.getInstance().registerApi({apiName:"unsubscribeUserStatus",context:this}),tn.getInstance().registerWorkflowStep(gr.SYNC_SERVER_INFO_AFTER_RE_ONLINE,Jt.USER_STATUS_UPDATE,this._onReOnline,this),B.subscribeInnerEvent(Ei.MESSAGE_PUSH,B.InnerEventSubType.USER_STATUS_UPDATE,this._onUserStatusUpdate,this),B.subscribeInnerEvent(Ei.LOGOUT,this._reset,this),B.subscribeInnerEvent(Ei.DESTROY,this._dispose,this)}setSelfStatus(B){return mA(this,void 0,void 0,function*(){const v=jn(),{customStatus:G}=B;try{return yield function(O){return mA(this,void 0,void 0,function*(){const z="im_open_status.ws_set_custom_status",X=xt({servcmd:z,data:{CustomStatus:O}}),rA=`${X.head.seq}${z}`,DA=yield Se.channel.sendPacket(X,{requestId:rA});if(DA){const{ErrorCode:GA,ErrorInfo:JA}=DA;return{errorCode:GA,errorInfo:JA}}})}(G),this._customStatus=G,{code:0,data:{userID:v,statusType:ic,customStatus:G},successLog:{message:`customStatus: ${G}`}}}catch(O){const{errorCode:z,errorInfo:X}=O;throw new rs({functionName:"setSelfStatus",code:z,message:X})}})}getUserStatus(B){return mA(this,void 0,void 0,function*(){const{userIDList:v=[]}=B;if(this._isOnlyMeInArray(v))return this._getMyStatus();const G=yield this._getUserStatus(v);return Object.assign(Object.assign({},G),{successLog:{message:`userIDList length: ${v.length}`}})})}setCustomStatus(B){const v=Jr(B);this._customStatus=v}subscribeUserStatus(B){return mA(this,void 0,void 0,function*(){try{const{userIDList:v=[]}=B;this._checkBusinessCapabilityBits("subscribeUserStatus");const G=this._getMaxUserCount("subscribe"),O=this._sliceUserIDList(v,G),z=yield function(rA){return mA(this,void 0,void 0,function*(){const{channel:DA}=Se,GA="im_open_status.ws_status_subscribe",JA=xt({servcmd:GA,data:{To_Account:rA}}),ne=`${JA.head.seq}${GA}`;return yield DA.sendPacket(JA,{requestId:ne})})}(O),X=this._parseResponse(z);return{code:0,data:{failureUserList:X},successLog:{message:`userID length:${v.length} failCount: ${X.length}`}}}catch(v){const{errorCode:G}=v;throw new rs({functionName:"subscribeUserStatus",code:G})}})}unsubscribeUserStatus(B){return mA(this,void 0,void 0,function*(){try{this._checkBusinessCapabilityBits("unsubscribeUserStatus");const{userIDList:v=[]}=B,G=this._getMaxUserCount("unsubscribe"),O=this._sliceUserIDList(v,G),z=yield function(rA){return mA(this,void 0,void 0,function*(){const{channel:DA}=Se,GA="im_open_status.ws_status_unsubscribe";let JA={};JA=rA.length===0?{UnsubscribeAll:1}:{To_Account:rA};const ne=xt({servcmd:GA,data:JA}),he=`${ne.head.seq}${GA}`;return yield DA.sendPacket(ne,{requestId:he})})}(O),X=this._parseResponse(z);return{code:0,data:{failureUserList:X},successLog:{message:`userID length:${v.length} failCount: ${X.length}`}}}catch(v){const{errorCode:G}=v;throw new rs({functionName:"unsubscribeUserStatus",code:G})}})}_onUserStatusUpdate(B){const{UserStatusList:v=[]}=B||{},G=v.map(O=>{const{To_Account:z,Status:X,CustomStatus:rA,Platform:DA}=O,GA={userID:z,statusType:X,customStatus:Jr(rA)};return DA&&(GA.onlineDevices=DA),GA});this._emitUserStatusUpdatedEvent(G)}_onReOnline(B){const v=Jr(B.data.customStatus);if(this._customStatus===v)return;this._customStatus=v;const G={userID:jn(),statusType:ic,customStatus:v};this._emitUserStatusUpdatedEvent(G)}_emitUserStatusUpdatedEvent(B){Se.notificationCenter.emitOuterEvent(Dn.USER_STATUS_UPDATED,{name:Dn.USER_STATUS_UPDATED,data:B})}_sliceUserIDList(B,v){return B.slice(0,v)}_parseResponse(B){const{ErrorList:v=[]}=B;return v.map(G=>{const{To_Account:O,Invalid_Account:z,ErrorCode:X,ErrorInfo:rA}=G;return{userID:Se.utils.isEmpty(z)?O:z,code:X,message:rA}})}_checkBusinessCapabilityBits(B){if(!Se.store.get("commercialConfig").get(_r))throw new rs({functionName:B,code:Uo.NO_USE,replacement1:B})}_getMaxUserCount(B){const v=Se.store.get("cloudConfig")||{},G={query:{key:"status_query_count",default:500},subscribe:{key:"status_sub_count",default:100},unsubscribe:{key:"status_unsub_count",default:100}},{key:O,default:z}=G[B],X=v[O]||z;return parseInt(X,10)}_getMyStatus(){return{code:0,data:{successUserList:[{userID:jn(),statusType:ic,customStatus:this._customStatus}],failureUserList:[]}}}_getUserStatus(B){return mA(this,void 0,void 0,function*(){try{this._checkBusinessCapabilityBits("getUserStatus");const v=this._getMaxUserCount("query"),G=this._sliceUserIDList(B,v),O=yield qu(G),{successUserList:z,failureUserList:X}=O||{};return{code:0,data:{successUserList:z,failureUserList:X}}}catch(v){const{errorCode:G}=v;throw new rs({functionName:"getUserStatus",code:G})}})}_isOnlyMeInArray(B){const v=jn();return B.length===1&&B.indexOf(v)>-1}_dispose(){const{notificationCenter:B}=Se;B.unSubscribeInnerEvent(Ei.MESSAGE_PUSH,B.InnerEventSubType.USER_STATUS_UPDATE,this._onUserStatusUpdate,this),B.unSubscribeInnerEvent(Ei.DESTROY,this._dispose,this),B.unSubscribeInnerEvent(Ei.LOGOUT,this._reset,this),this._reset()}_reset(){this._customStatus=""}}const K={getUserProfile:{userIDList:{required:!0,rules:["array"],allowEmpty:!1}},updateMyProfile:{nick:{required:!1,rules:["string"],allowEmpty:!0},avatar:{required:!1,rules:["string"],allowEmpty:!0},gender:{required:!1,rules:["string"],allowEmpty:!0},selfSignature:{required:!1,rules:["string"],allowEmpty:!0},allowType:{required:!1,rules:["string"],allowEmpty:!0},birthday:{required:!1,rules:["number"],allowEmpty:!1},language:{required:!1,rules:["string"],allowEmpty:!0},messageSettings:{required:!1,rules:["string"],allowEmpty:!0},adminForbidType:{required:!1,rules:["string"],allowEmpty:!0},level:{required:!1,rules:["number"],allowEmpty:!1},role:{required:!1,rules:["number"],allowEmpty:!0},profileCustomField:{required:!1,rules:["array"],allowEmpty:!0,customValidator:function(p){for(const B of p){if(typeof B!="object")return"Each item in profileCustomField must be an object";if(typeof B?.key!="string")return"Each item.key in profileCustomField must be a string";if(!B?.key.startsWith(Ig))return'Each item.key in profileCustomField must start with "Tag_Profile_Custom"'}return!0}}},setSelfStatus:{customStatus:{required:!0,rules:["string"],allowEmpty:!0}},getUserStatus:{userIDList:{required:!0,rules:["array"],allowEmpty:!1}},subscribeUserStatus:{userIDList:{required:!0,rules:["array"],allowEmpty:!1}},unsubscribeUserStatus:{userIDList:{required:!1,rules:["array"],allowEmpty:!0}}},U={getMyProfile:!0,getUserProfile:!0,updateMyProfile:!0,setSelfStatus:!0,getUserStatus:!0,subscribeUserStatus:!0,unsubscribeUserStatus:!0};class sA{constructor(){this.userProfile=new PE,this.userStatus=new SC,this.userProfile.init(),this.userStatus.init(),Mc({auth:U,params:K})}}function b(p){const B=[];if(!c(p))return B;const v=p.length;if(v===0)return B;for(let G=v-1;G>=0;G--)p[G]==="1"&&B.push(2**(v-G-1));return B}var x,iA,uA;(function(p){p.NOT_START="notStart",p.PENDING="pending",p.RESOLVED="resolved",p.REJECTED="rejected"})(x||(x={})),function(p){p[p.C2C=1]="C2C",p[p.GROUP=2]="GROUP"}(iA||(iA={})),function(p){p[p.C2C=8]="C2C",p[p.GROUP=2]="GROUP"}(uA||(uA={}));class _A{constructor(){this._name="SyncConversationHandler",this._pagingStatus=x.NOT_START,this._pagingTimeStamp=0,this._pagingStartIndex=0,this._pagingPinnedTimeStamp=0,this._pagingPinnedStartIndex=0}init(){const{notificationCenter:B}=Se;tn.getInstance().registerWorkflowStep(gr.SYNC_SERVER_INFO_AFTER_RE_ONLINE,Jt.CONVERSATION_RECOVER,this._syncConversationList,this),tn.getInstance().registerWorkflowStep(gr.SYNC_SERVER_INFO_AFTER_LOGIN,Jt.CONVERSATION_LIST_SYNC,this._syncConversationListAfterLogin,this),B.subscribeInnerEvent(Ei.LOGOUT,this._reset,this),B.subscribeInnerEvent(Ei.DESTROY,this._dispose,this),Se.ssoLog.debug(`${this._name}.init`)}isSyncCompleted(){return this._pagingStatus===x.RESOLVED}_syncConversationListAfterLogin(){return mA(this,void 0,void 0,function*(){return this._pagingStatus=x.NOT_START,this._pagingTimeStamp=0,this._pagingStartIndex=0,this._pagingPinnedTimeStamp=0,this._pagingPinnedStartIndex=0,this._syncConversationList()})}_syncConversationList(){return mA(this,void 0,void 0,function*(){const{ssoLog:B,utils:{safeStringify:v}}=Se;B.debug("_syncConversationList","start");try{const G=yield this._pagingGetConversationList(!0);this._pagingStatus=x.RESOLVED;const{conversationList:O=[]}=G||{};return B.info("_syncConversationList",`success count:${O.length}`),G}catch(G){const O=new rs(G);B.error("_syncConversationList",`fail ${v(G)}`,{error:O})}})}_pagingGetConversationList(B){return mA(this,void 0,void 0,function*(){try{const v=[];this._pagingStatus=x.PENDING;const G=yield function(ne){return mA(this,void 0,void 0,function*(){const{fromAccount:he,pagingTimeStamp:Ze,pagingStartIndex:st,pagingPinnedTimeStamp:at,pagingPinnedStartIndex:Ft}=ne;return Zg({servcmd:"recentcontact.page_get",data:{AssistFlags:31,MsgAssistFlags:15,OrderType:1,From_Account:he,StartIndex:st,TimeStamp:Ze,TopStartIndex:Ft,TopTimeStamp:at}})})}({fromAccount:jn(),pagingTimeStamp:B?this._pagingTimeStamp:0,pagingStartIndex:B?this._pagingStartIndex:0,pagingPinnedTimeStamp:B?this._pagingPinnedTimeStamp:0,pagingPinnedStartIndex:B?this._pagingPinnedStartIndex:0}),{CompleteFlag:O,SessionItem:z=[],TimeStamp:X,StartIndex:rA,TopTimeStamp:DA,TopStartIndex:GA}=G||{};let JA=[];if(O===1&&(this._pagingStatus=x.RESOLVED),z.length>0&&(JA=this._getConversationOptions(z),v.push(...JA)),Se.notificationCenter.emitInnerEvent(Ei.SYNC_CONVERSATION_LIST,{conversationUpdateFieldList:JA}),this._pagingTimeStamp=X,this._pagingStartIndex=rA,this._pagingPinnedTimeStamp=DA,this._pagingPinnedStartIndex=GA,O!==1){const{conversationList:ne}=yield this._pagingGetConversationList(B);v.push(...ne)}return{conversationList:v}}catch(v){throw v}})}_getConversationOptions(B){const{utils:{isUndefined:v}}=Se,G=this._convertConversationKey(B);return this._filterValidConversations(G).map(O=>(v(O.lastMsg)&&(O.lastMsg={elements:[]}),O.type===iA.C2C?this._assembleC2COption(O):this._assembleGroupOption(O)))}_filterValidConversations(B){return B.filter(({type:v,userID:G})=>v===iA.C2C&&!function(O){let z;return O.startsWith(Bs.CONV_C2C)&&(z=O.replace(Bs.CONV_C2C,"")),z==="@TLS#ERROR"||z==="@TLS#NOT_FOUND"}(G)||v===2)}_assembleC2COption(B){var v,G,O,z,X,rA,DA,GA;const JA=this._createUserprofile(B);return{conversationID:`${Bs.CONV_C2C}${B.userID}`,type:Bs.CONV_C2C,lastMessage:{lastTime:B.time,lastSequence:B.sequence,fromAccount:B.lastC2CMsgFromAccount,type:!((v=B.lastMsg)===null||v===void 0)&&v.elements[0]?(G=B.lastMsg)===null||G===void 0?void 0:G.elements[0].type:null,payload:!((O=B.lastMsg)===null||O===void 0)&&O.elements[0]?this._amendLayersOverLimitProp(B.lastMsg.elements[0].content):null,cloudCustomData:((rA=(X=(z=B.lastMsg)===null||z===void 0?void 0:z.elements)===null||X===void 0?void 0:X[0])===null||rA===void 0?void 0:rA.cloudCustomData)||"",isRevoked:B.lastMessageFlag===uA.C2C,onlineOnlyFlag:!1,nick:"",nameCard:"",version:0,isPeerRead:this._computeIsPeerRead(B),revoker:((GA=(DA=B.lastMsg)===null||DA===void 0?void 0:DA.revokerInfo)===null||GA===void 0?void 0:GA.revoker)||null},unreadCount:0,userProfile:JA,peerReadTime:B.peerReadTime,isPinned:B.isPinned===1,customData:B.customMark||"",markList:b(B.standardMark),conversationGroupList:[],remark:B.friendRemark||"",messageRemindType:this._transMsgRemindType(B.messageRemindType)}}_createUserprofile(B){var v;const{userID:G,nick:O,peerAvatar:z}=B,X=[{tag:"Tag_Profile_IM_Nick",value:O},{tag:"Tag_Profile_IM_Image",value:z}];return(v=Se.user.userProfile)===null||v===void 0?void 0:v.createProfile(G,X)}_computeIsPeerRead(B){const v=jn(),{lastC2CMsgFromAccount:G,time:O,c2cPeerReadTime:z}=B;return G===v&&O<=z}_assembleGroupOption(B){var v,G,O,z,X;return{conversationID:`${Bs.CONV_GROUP}${B.groupID}`,type:Bs.CONV_GROUP,lastMessage:Object.assign(Object.assign({lastTime:B.time,lastSequence:B.sequence,fromAccount:B.msgGroupFromAccount},this._patchTypeAndPayload(B)),{cloudCustomData:((O=(G=(v=B.lastMsg)===null||v===void 0?void 0:v.elements)===null||G===void 0?void 0:G[0])===null||O===void 0?void 0:O.cloudCustomData)||"",isRevoked:B.lastMessageFlag===uA.GROUP,onlineOnlyFlag:!1,nick:B.msgGroupFromNickName||"",nameCard:B.msgGroupFromCardName||"",revoker:((X=(z=B.lastMsg)===null||z===void 0?void 0:z.revokerInfo)===null||X===void 0?void 0:X.revoker)||null}),groupProfile:{groupID:B.groupID,name:B.groupNick,avatar:B.groupImage,type:B.groupType,nextMessageSeq:B.nextMessageSeq},unreadCount:this._computeGroupUnreadCount(B),peerReadTime:0,isPinned:B.isPinned===1,version:0,customData:B.customMark||"",markList:b(B.standardMark),conversationGroupList:[],messageRemindType:this._transMsgRemindType(B.messageRemindType),subType:B.groupType}}_convertConversationKey(B){return B.map(v=>({type:v.Type,userID:v.To_Account,nick:v.C2cNick,peerAvatar:v.C2cImage,time:v.MsgTimeStamp,sequence:v.MsgSeq,lastC2CMsgFromAccount:v.LastC2cMsgFrom_Account,lastMsg:this._convertLastMsgKey(v.LastMsg),lastMessageFlag:v.LastMsgFlags,c2cPeerReadTime:v.C2cPeerReadTime,peerReadTime:v.C2cPeerReadTime,friendRemark:v.C2cRemark,isPinned:v.TopFlags,standardMark:v.StandardMark,customMark:v.CustomMark,messageRemindType:v.MsgRecvOption,groupID:v.ToAccount,groupNick:v.GroupNick,groupImage:v.GroupImage,groupType:v.GroupType,nextMessageSeq:v.GroupNextMsgSeq,msgGroupFromAccount:v.MsgGroupFrom_Account,msgGroupFromNickName:v.MsgGroupFromNickName,msgGroupFromCardName:v.MsgGroupFromCardName,unreadCount:v.UnreadMsgCount,noUnreadCount:v.GroupIgnoredUnreadSeqCount}))}_convertLastMsgKey(B){var v,G,O;const{utils:{isEmpty:z}}=Se;if(z(B))return null;let X="",rA=null;if(!z(B.GroupTips)){const{From_Account:DA,GroupName:GA}=((v=B.GroupTips)===null||v===void 0?void 0:v.GroupInfo)||{};X=Bs.MSG_GRP_TIP,rA=Object.assign(Object.assign({},this._parseContent(X,B.GroupTips.MsgBody)),{groupProfile:{from:DA,groupName:GA}})}return B.MsgBody&&(X=(G=B.MsgBody[0])===null||G===void 0?void 0:G.MsgType,rA=this._parseContent(X,B.MsgBody[0])),{event:B.Event,elements:[{type:X,content:rA,cloudCustomData:B.CloudCustomData}],revokerInfo:{revoker:(O=B.RevokerInfo)===null||O===void 0?void 0:O.Revoker_Account}}}_parseContent(B,v){var G;if(!v)return v;const O=Se.message.messageFactory.getElementClass(B);return O?(G=O.parseServerPushElement(v))===null||G===void 0?void 0:G.content:v}_amendLayersOverLimitProp(B){const{LayersOverLimit:v}=B;return So(B,["LayersOverLimit"]).layersOverLimit=v===1,B}_transMsgRemindType(B){let v="";return B===0?v=Bs.MSG_REMIND_ACPT_AND_NOTE:B===1?v=Bs.MSG_REMIND_DISCARD:B===2?v=Bs.MSG_REMIND_ACPT_NOT_NOTE:B===3&&(v=Bs.NOT_RECEIVE_OFFLINE_PUSH_EXCEPT_AT),v}_patchTypeAndPayload(B){var v;const{utils:{isUndefined:G}}=Se,{event:O,elements:z=[]}=B.lastMsg||{};return G(O)?{type:z[0]?z[0].type:null,payload:z[0]?this._amendLayersOverLimitProp(z[0].content):null}:{type:Bs.MSG_GRP_TIP,payload:((v=z?.[0])===null||v===void 0?void 0:v.content)||{}}}_computeGroupUnreadCount(B){const{unreadCount:v=0,noUnreadCount:G=0}=B,O=v-G;return O>0?O:0}_reset(){this._pagingStatus=x.NOT_START,this._pagingTimeStamp=0,this._pagingStartIndex=0,this._pagingPinnedTimeStamp=0,this._pagingPinnedStartIndex=0}_dispose(){this._reset();const{notificationCenter:B}=Se;B.unSubscribeInnerEvent(Ei.LOGOUT,this._reset,this),B.unSubscribeInnerEvent(Ei.DESTROY,this._dispose,this)}}class ee{constructor(){this.syncConversationHandler=new _A,this.syncConversationHandler.init()}}console.log(`TencentCloudLiteChat.VERSION:${Xr}`);var fe={create:function(p){var B,v;const{SDKAppID:G,testEnv:O=!1,devMode:z=!1,unlimitedAVChatRoom:X=!1,scene:rA="",oversea:DA=!1,instance:GA,disableIndependentDomain:JA=!1,proxyServer:ne=""}=p;let he=G;if(!function(st){if(typeof st=="number")return!0;const at=Number(st);return!Number.isNaN(at)}(he))return console.error("Create SDK instance failed. Failed to parse the SDKAppID, please check the arguments"),null;if(he=Number(he),ws.has(he))return ws.get(he);let Ze=null;if(GA)Ze=GA,Ze._workflowManager&&tn.setInstance(Ze._workflowManager),Ze._pluginManager&&Ze._pluginManager.installBuiltInPlugin(Br),GA.isReady()&&((v=(B=tn.getInstance()).executeWorkflow)===null||v===void 0||v.call(B,gr.SYNC_SERVER_INFO_AFTER_LOGIN));else{const st=function(){function Xi(){return(65536*(1+Math.random())|0).toString(16).substring(1)}return`${Xi()+Xi()}${Xi()}${Xi()}${Xi()}${Xi()}${Xi()}${Xi()}`}();Se.init({sdkAppId:he,instanceId:st,testEnv:O,devMode:z,unlimitedAVChatRoom:X,disableIndependentDomain:JA,scene:rA,oversea:DA,sdkEdition:Pu,version:Xr,proxyServer:ne}),tn.getInstance().init(),Se.message=new gl,Se.user=new sA,Se.login=new Ac,Se.conversation=new ee,Po.getInstance().installBuiltInPlugin(Br),Ze=js.getInstance().exposeApiForClient(),Ze._workflowManager=tn.getInstance(),Ze._pluginManager=Po.getInstance();const{utils:{IS_WORKER_AVAILABLE:at,USER_AGENT:Ft,getPlatformType:Ht,isIOSWebView:Pi}}=Se,co=`instanceID:${st} SDKAppID:${G} platform:${VA} host:${Ht()} isIOSWebView:${Pi} workerAvailable:${at} UserAgent:${Ft}`;Se.ssoLog.info("sdkConstruct",co)}return ws.set(he,Ze),Ze},TSignaling:ro,EVENT:Dn,VERSION:Xr,TYPES:Bs};return fe})}(EY)),EY.exports}var UL={exports:{}},dY={exports:{}},caA=dY.exports,BZ;function laA(){return BZ||(BZ=1,function(t,i){(function(n,c){t.exports=c()})(caA,function(){function n(A,e){return e.forEach(function(o){o&&typeof o!="string"&&!Array.isArray(o)&&Object.keys(o).forEach(function(a){if(a!=="default"&&!(a in A)){var l=Object.getOwnPropertyDescriptor(o,a);Object.defineProperty(A,a,l.get?l:{enumerable:!0,get:function(){return o[a]}})}})}),Object.freeze(A)}var c=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof mg<"u"?mg:typeof self<"u"?self:{};function I(A){return A&&A.__esModule&&Object.prototype.hasOwnProperty.call(A,"default")?A.default:A}var C=function(A){return A&&A.Math===Math&&A},f=C(typeof globalThis=="object"&&globalThis)||C(typeof window=="object"&&window)||C(typeof self=="object"&&self)||C(typeof c=="object"&&c)||C(typeof c=="object"&&c)||function(){return this}()||Function("return this")(),w={},_=function(A){try{return!!A()}catch{return!0}},N=!_(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),L=!_(function(){var A=function(){}.bind();return typeof A!="function"||A.hasOwnProperty("prototype")}),q=L,lA=Function.prototype.call,tA=q?lA.bind(lA):function(){return lA.apply(lA,arguments)},BA={},IA={}.propertyIsEnumerable,gA=Object.getOwnPropertyDescriptor,RA=gA&&!IA.call({1:2},1);BA.f=RA?function(A){var e=gA(this,A);return!!e&&e.enumerable}:IA;var HA,ZA,KA=function(A,e){return{enumerable:!(1&A),configurable:!(2&A),writable:!(4&A),value:e}},me=L,ae=Function.prototype,gt=ae.call,dt=me&&ae.bind.bind(gt,gt),We=me?dt:function(A){return function(){return gt.apply(A,arguments)}},lt=We,wt=lt({}.toString),ct=lt("".slice),ce=function(A){return ct(wt(A),8,-1)},Ve=_,Dt=ce,ti=Object,Pt=We("".split),oi=Ve(function(){return!ti("z").propertyIsEnumerable(0)})?function(A){return Dt(A)==="String"?Pt(A,""):ti(A)}:ti,Ni=function(A){return A==null},Co=Ni,to=TypeError,so=function(A){if(Co(A))throw new to("Can't call method on "+A);return A},ks=oi,Gi=so,As=function(A){return ks(Gi(A))},Lo=typeof document=="object"&&document.all,$i=Lo===void 0&&Lo!==void 0?function(A){return typeof A=="function"||A===Lo}:function(A){return typeof A=="function"},zt=$i,Ao=function(A){return typeof A=="object"?A!==null:zt(A)},Ri=f,Es=$i,VA=function(A,e){return arguments.length<2?(o=Ri[A],Es(o)?o:void 0):Ri[A]&&Ri[A][e];var o},Ee=We({}.isPrototypeOf),Je=f.navigator,Ut=Je&&Je.userAgent,ot=Ut?String(Ut):"",ut=f,$t=ot,Zt=ut.process,Ge=ut.Deno,Xe=Zt&&Zt.versions||Ge&&Ge.version,se=Xe&&Xe.v8;se&&(ZA=(HA=se.split("."))[0]>0&&HA[0]<4?1:+(HA[0]+HA[1])),!ZA&&$t&&(!(HA=$t.match(/Edge\/(\d+)/))||HA[1]>=74)&&(HA=$t.match(/Chrome\/(\d+)/))&&(ZA=+HA[1]);var ve=ZA,pt=ve,mo=_,No=f.String,no=!!Object.getOwnPropertySymbols&&!mo(function(){var A=Symbol("symbol detection");return!No(A)||!(Object(A)instanceof Symbol)||!Symbol.sham&&pt&&pt<41}),Go=no&&!Symbol.sham&&typeof Symbol.iterator=="symbol",An=VA,rn=$i,ds=Ee,an=Object,So=Go?function(A){return typeof A=="symbol"}:function(A){var e=An("Symbol");return rn(e)&&ds(e.prototype,an(A))},mA=String,qn=function(A){try{return mA(A)}catch{return"Object"}},mr=$i,Cs=qn,Zr=TypeError,Yi=function(A){if(mr(A))return A;throw new Zr(Cs(A)+" is not a function")},Rs=Yi,rr=Ni,en=function(A,e){var o=A[e];return rr(o)?void 0:Rs(o)},wn=tA,jt=$i,yg=Ao,Pn=TypeError,bn={exports:{}},Js=f,fr=Object.defineProperty,xn=function(A,e){try{fr(Js,A,{value:e,configurable:!0,writable:!0})}catch{Js[A]=e}return e},yr=f,fo=xn,gn="__core-js_shared__",Ml=bn.exports=yr[gn]||fo(gn,{});(Ml.versions||(Ml.versions=[])).push({version:"3.47.0",mode:"global",copyright:"© 2014-2025 Denis Pushkarev (zloirock.ru), 2025 CoreJS Company (core-js.io)",license:"https://github.com/zloirock/core-js/blob/v3.47.0/LICENSE",source:"https://github.com/zloirock/core-js"});var cn=bn.exports,Dr=cn,Us=function(A,e){return Dr[A]||(Dr[A]=e||{})},Jc=so,fs=Object,as=function(A){return fs(Jc(A))},wu=as,Wa=We({}.hasOwnProperty),hs=Object.hasOwn||function(A,e){return Wa(wu(A),e)},sg=We,qI=0,es=Math.random(),eo=sg(1.1.toString),pc=function(A){return"Symbol("+(A===void 0?"":A)+")_"+eo(++qI+es,36)},ng=Us,Dg=hs,ua=pc,bo=no,Xr=Go,To=f.Symbol,Hc=ng("wks"),Kn=Xr?To.for||To:To&&To.withoutSetter||ua,Hs=function(A){return Dg(Hc,A)||(Hc[A]=bo&&Dg(To,A)?To[A]:Kn("Symbol."+A)),Hc[A]},Sg=tA,mc=Ao,fn=So,Ga=en,In=function(A,e){var o,a;if(e==="string"&&jt(o=A.toString)&&!yg(a=wn(o,A))||jt(o=A.valueOf)&&!yg(a=wn(o,A))||e!=="string"&&jt(o=A.toString)&&!yg(a=wn(o,A)))return a;throw new Pn("Can't convert object to primitive value")},ys=TypeError,Ea=Hs("toPrimitive"),yn=function(A,e){if(!mc(A)||fn(A))return A;var o,a=Ga(A,Ea);if(a){if(e===void 0&&(e="default"),o=Sg(a,A,e),!mc(o)||fn(o))return o;throw new ys("Can't convert object to primitive value")}return e===void 0&&(e="number"),In(A,e)},ba=yn,Sa=So,$=function(A){var e=ba(A,"string");return Sa(e)?e:e+""},j=Ao,vA=f.document,jA=j(vA)&&j(vA.createElement),oe=function(A){return jA?vA.createElement(A):{}},ye=oe,He=!N&&!_(function(){return Object.defineProperty(ye("div"),"a",{get:function(){return 7}}).a!==7}),Pe=N,rt=tA,ht=BA,_t=KA,Vt=As,ui=$,It=hs,Yt=He,qi=Object.getOwnPropertyDescriptor;w.f=Pe?qi:function(A,e){if(A=Vt(A),e=ui(e),Yt)try{return qi(A,e)}catch{}if(It(A,e))return _t(!rt(ht.f,A,e),A[e])};var Wi={},qs=N&&_(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),vi=Ao,zo=String,Mg=TypeError,ar=function(A){if(vi(A))return A;throw new Mg(zo(A)+" is not an object")},Sr=N,Yn=He,vl=qs,Ks=ar,gI=$,Wg=TypeError,fc=Object.defineProperty,_u=Object.getOwnPropertyDescriptor,Ma="enumerable",Rl="configurable",Se="writable";Wi.f=Sr?vl?function(A,e,o){if(Ks(A),e=gI(e),Ks(o),typeof A=="function"&&e==="prototype"&&"value"in o&&Se in o&&!o[Se]){var a=_u(A,e);a&&a[Se]&&(A[e]=o.value,o={configurable:Rl in o?o[Rl]:a[Rl],enumerable:Ma in o?o[Ma]:a[Ma],writable:!1})}return fc(A,e,o)}:fc:function(A,e,o){if(Ks(A),e=gI(e),Ks(o),Yn)try{return fc(A,e,o)}catch{}if("get"in o||"set"in o)throw new Wg("Accessors not supported");return"value"in o&&(A[e]=o.value),A};var De=Wi,vg=KA,rg=N?function(A,e,o){return De.f(A,e,vg(1,o))}:function(A,e,o){return A[e]=o,A},Rg={exports:{}},Dn=N,Mr=hs,Ei=Function.prototype,ro=Dn&&Object.getOwnPropertyDescriptor,qc=Mr(Ei,"name"),zg={PROPER:qc&&function(){}.name==="something",CONFIGURABLE:qc&&(!Dn||Dn&&ro(Ei,"name").configurable)},wg=$i,Yr=cn,yc=We(Function.toString);wg(Yr.inspectSource)||(Yr.inspectSource=function(A){return yc(A)});var Kc,ag,Tu,DE=Yr.inspectSource,_g=$i,ka=f.WeakMap,Dc=_g(ka)&&/native code/.test(String(ka)),SE=pc,La=Us("keys"),na=function(A){return La[A]||(La[A]=SE(A))},Tg={},cI=Dc,Bs=f,Uo=Ao,da=rg,gr=hs,Jt=cn,Wt=na,Ng=Tg,lI="Object already initialized",cr=Bs.TypeError,KI=Bs.WeakMap;if(cI||Jt.state){var za=Jt.state||(Jt.state=new KI);za.get=za.get,za.has=za.has,za.set=za.set,Kc=function(A,e){if(za.has(A))throw new cr(lI);return e.facade=A,za.set(A,e),e},ag=function(A){return za.get(A)||{}},Tu=function(A){return za.has(A)}}else{var ra=Wt("state");Ng[ra]=!0,Kc=function(A,e){if(gr(A,ra))throw new cr(lI);return e.facade=A,da(A,ra,e),e},ag=function(A){return gr(A,ra)?A[ra]:{}},Tu=function(A){return gr(A,ra)}}var un={set:Kc,get:ag,has:Tu,enforce:function(A){return Tu(A)?ag(A):Kc(A,{})},getterFor:function(A){return function(e){var o;if(!Uo(e)||(o=ag(e)).type!==A)throw new cr("Incompatible receiver, "+A+" required");return o}}},Sn=We,Nu=_,Gg=$i,Ua=hs,jc=N,jI=zg.CONFIGURABLE,ME=DE,II=un.enforce,Gu=un.get,wl=String,Sc=Object.defineProperty,bu=Sn("".slice),ku=Sn("".replace),_l=Sn([].join),rs=jc&&!Nu(function(){return Sc(function(){},"length",{value:8}).length!==8}),gs=String(String).split("String"),ud=Rg.exports=function(A,e,o){bu(wl(e),0,7)==="Symbol("&&(e="["+ku(wl(e),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),o&&o.getter&&(e="get "+e),o&&o.setter&&(e="set "+e),(!Ua(A,"name")||jI&&A.name!==e)&&(jc?Sc(A,"name",{value:e,configurable:!0}):A.name=e),rs&&o&&Ua(o,"arity")&&A.length!==o.arity&&Sc(A,"length",{value:o.arity});try{o&&Ua(o,"constructor")&&o.constructor?jc&&Sc(A,"prototype",{writable:!1}):A.prototype&&(A.prototype=void 0)}catch{}var a=II(A);return Ua(a,"source")||(a.source=_l(gs,typeof e=="string"?e:"")),A};Function.prototype.toString=ud(function(){return Gg(this)&&Gu(this).source||ME(this)},"toString");var uI=Rg.exports,EI=$i,vE=Wi,Ed=uI,Tl=xn,vr=function(A,e,o,a){a||(a={});var l=a.enumerable,d=a.name!==void 0?a.name:e;if(EI(o)&&Ed(o,d,a),a.global)l?A[e]=o:Tl(e,o);else{try{a.unsafe?A[e]&&(l=!0):delete A[e]}catch{}l?A[e]=o:vE.f(A,e,{value:o,enumerable:!1,configurable:!a.nonConfigurable,writable:!a.nonWritable})}return A},Mc={},Wc=Math.ceil,tn=Math.floor,ws=Math.trunc||function(A){var e=+A;return(e>0?tn:Wc)(e)},Ca=ws,$r=function(A){var e=+A;return e!=e||e===0?0:Ca(e)},zc=$r,dd=Math.max,Zg=Math.min,gg=function(A,e){var o=zc(A);return o<0?dd(o+e,0):Zg(o,e)},RE=$r,Xg=Math.min,jn=function(A){var e=RE(A);return e>0?Xg(e,9007199254740991):0},ir=jn,Fa=function(A){return ir(A.length)},Cd=As,EC=gg,Lu=Fa,WI=function(A){return function(e,o,a){var l=Cd(e),d=Lu(l);if(d===0)return!A&&-1;var h,y=EC(a,d);if(A&&o!=o){for(;d>y;)if((h=l[y++])!=h)return!0}else for(;d>y;y++)if((A||y in l)&&l[y]===o)return A||y||0;return!A&&-1}},Zc={includes:WI(!0),indexOf:WI(!1)},Xc=hs,zI=As,dI=Zc.indexOf,$c=Tg,Al=We([].push),va=function(A,e){var o,a=zI(A),l=0,d=[];for(o in a)!Xc($c,o)&&Xc(a,o)&&Al(d,o);for(;e.length>l;)Xc(a,o=e[l++])&&(~dI(d,o)||Al(d,o));return d},bg=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Ds=va,Wn=bg.concat("length","prototype");Mc.f=Object.getOwnPropertyNames||function(A){return Ds(A,Wn)};var vc={};vc.f=Object.getOwnPropertySymbols;var ZI=VA,XI=Mc,wE=vc,ch=ar,dC=We([].concat),lh=ZI("Reflect","ownKeys")||function(A){var e=XI.f(ch(A)),o=wE.f;return o?dC(e,o(A)):e},el=hs,kg=lh,ao=w,CC=Wi,_E=function(A,e,o){for(var a=kg(e),l=CC.f,d=ao.f,h=0;hh;)pI.f(A,o=l[h++],a[o]);return A};var Ug,ec=VA("document","documentElement"),md=ar,kE=bl,Nc=bg,eu=Tg,Io=ec,LE=oe,$a="prototype",tu="script",xu=na("IE_PROTO"),Gc=function(){},mI=function(A){return"<"+tu+">"+A+""},sl=function(A){A.write(mI("")),A.close();var e=A.parentWindow.Object;return A=null,e},nl=function(){try{Ug=new ActiveXObject("htmlfile")}catch{}nl=typeof document<"u"?document.domain&&Ug?sl(Ug):function(){var e,o=LE("iframe"),a="java"+tu+":";return o.style.display="none",Io.appendChild(o),o.src=String(a),(e=o.contentWindow.document).open(),e.write(mI("document.F=Object")),e.close(),e.F}():sl(Ug);for(var A=Nc.length;A--;)delete nl[$a][Nc[A]];return nl()};eu[xu]=!0;var xa=Object.create||function(A,e){var o;return A!==null?(Gc[$a]=md(A),o=new Gc,Gc[$a]=null,o[xu]=A):o=nl(),e===void 0?o:kE.f(o,e)},UE=Hs,aa=xa,Mn=Wi.f,kr=UE("unscopables"),rl=Array.prototype;rl[kr]===void 0&&Mn(rl,kr,{configurable:!0,value:aa(null)});var Fl=function(A){rl[kr][A]=!0},bc=Zc.includes,FE=Fl;_n({target:"Array",proto:!0,forced:_(function(){return!Array(1).includes()})},{includes:function(A){return bc(this,A,arguments.length>1?arguments[1]:void 0)}}),FE("includes");var kc,Yu,yC,iu={},Eh=!_(function(){function A(){}return A.prototype.constructor=null,Object.getPrototypeOf(new A)!==A.prototype}),Vu=hs,fI=$i,al=as,DC=Eh,ga=na("IE_PROTO"),tc=Object,lg=tc.prototype,yI=DC?tc.getPrototypeOf:function(A){var e=al(A);if(Vu(e,ga))return e[ga];var o=e.constructor;return fI(o)&&e instanceof o?o.prototype:e instanceof tc?lg:null},OE=_,Ju=$i,Hu=Ao,DI=yI,gl=vr,Lr=Hs("iterator"),Ur=!1;[].keys&&("next"in(yC=[].keys())?(Yu=DI(DI(yC)))!==Object.prototype&&(kc=Yu):Ur=!0);var Ig=!Hu(kc)||OE(function(){var A={};return kc[Lr].call(A)!==A});Ig&&(kc={}),Ju(kc[Lr])||gl(kc,Lr,function(){return this});var lr={IteratorPrototype:kc,BUGGY_SAFARI_ITERATORS:Ur},_r=Wi.f,ic=hs,Fg=Hs("toStringTag"),Ya=function(A,e,o){A&&!o&&(A=A.prototype),A&&!ic(A,Fg)&&_r(A,Fg,{configurable:!0,value:e})},Ol=lr.IteratorPrototype,ha=xa,SI=KA,ou=Ya,Ba=iu,cl=function(){return this},PE=function(A,e,o,a){var l=e+" Iterator";return A.prototype=ha(Ol,{next:SI(+!a,o)}),ou(A,l,!1),Ba[l]=cl,A},su=We,xE=Yi,Jr=Ao,nu=function(A){return Jr(A)||A===null},xt=String,qu=TypeError,Ku=function(A,e,o){try{return su(xE(Object.getOwnPropertyDescriptor(A,e)[o]))}catch{}},SC=Ao,K=so,U=function(A){if(nu(A))return A;throw new qu("Can't set "+xt(A)+" as a prototype")},sA=Object.setPrototypeOf||("__proto__"in{}?function(){var A,e=!1,o={};try{(A=Ku(Object.prototype,"__proto__","set"))(o,[]),e=o instanceof Array}catch{}return function(a,l){return K(a),U(l),SC(a)&&(e?A(a,l):a.__proto__=l),a}}():void 0),b=_n,x=tA,iA=$i,uA=PE,_A=yI,ee=sA,fe=Ya,p=rg,B=vr,v=iu,G=zg.PROPER,O=zg.CONFIGURABLE,z=lr.IteratorPrototype,X=lr.BUGGY_SAFARI_ITERATORS,rA=Hs("iterator"),DA="keys",GA="values",JA="entries",ne=function(){return this},he=function(A,e,o,a,l,d,h){uA(o,e,a);var y,S,k,V=function(qe){if(qe===l&&ie)return ie;if(!X&&qe&&qe in CA)return CA[qe];switch(qe){case DA:case GA:case JA:return function(){return new o(this,qe)}}return function(){return new o(this)}},J=e+" Iterator",cA=!1,CA=A.prototype,MA=CA[rA]||CA["@@iterator"]||l&&CA[l],ie=!X&&MA||V(l),pe=e==="Array"&&CA.entries||MA;if(pe&&(y=_A(pe.call(new A)))!==Object.prototype&&y.next&&(_A(y)!==z&&(ee?ee(y,z):iA(y[rA])||B(y,rA,ne)),fe(y,J,!0)),G&&l===GA&&MA&&MA.name!==GA&&(O?p(CA,"name",GA):(cA=!0,ie=function(){return x(MA,this)})),l)if(S={values:V(GA),keys:d?ie:V(DA),entries:V(JA)},h)for(k in S)(X||cA||!(k in CA))&&B(CA,k,S[k]);else b({target:e,proto:!0,forced:X||cA},S);return CA[rA]!==ie&&B(CA,rA,ie,{name:l}),v[e]=ie,S},Ze=function(A,e){return{value:A,done:e}},st=As,at=Fl,Ft=iu,Ht=un,Pi=Wi.f,co=he,Xi=Ze,di=N,xo="Array Iterator",ts=Ht.set,mi=Ht.getterFor(xo),zi=co(Array,"Array",function(A,e){ts(this,{type:xo,target:st(A),index:0,kind:e})},function(){var A=mi(this),e=A.target,o=A.index++;if(!e||o>=e.length)return A.target=null,Xi(void 0,!0);switch(A.kind){case"keys":return Xi(o,!1);case"values":return Xi(e[o],!1)}return Xi([o,e[o]],!1)},"values"),Ws=Ft.Arguments=Ft.Array;if(at("keys"),at("values"),at("entries"),di&&Ws.name!=="values")try{Pi(Ws,"name",{value:"values"})}catch{}var Ne=Yi,Tt=as,FA=oi,Ai=Fa,En=TypeError,ii="Reduce of empty array with no initial value",us=function(A){return function(e,o,a,l){var d=Tt(e),h=FA(d),y=Ai(d);if(Ne(o),y===0&&a<2)throw new En(ii);var S=A?y-1:0,k=A?-1:1;if(a<2)for(;;){if(S in h){l=h[S],S+=k;break}if(S+=k,A?S<0:y<=S)throw new En(ii)}for(;A?S>=0:y>S;S+=k)S in h&&(l=o(l,h[S],S,d));return l}},wi={left:us(!1),right:us(!0)},Bo=_,Bt=function(A,e){var o=[][A];return!!o&&Bo(function(){o.call(null,e||function(){return 1},1)})},mt=f,ug=ot,Ls=ce,Zi=function(A){return ug.slice(0,A.length)===A},Hr=Zi("Bun/")?"BUN":Zi("Cloudflare-Workers")?"CLOUDFLARE":Zi("Deno/")?"DENO":Zi("Node.js/")?"NODE":mt.Bun&&typeof Bun.version=="string"?"BUN":mt.Deno&&typeof Deno.version=="object"?"DENO":Ls(mt.process)==="process"?"NODE":mt.window&&mt.document?"BROWSER":"REST",oc=Hr==="NODE",os=wi.left;_n({target:"Array",proto:!0,forced:!oc&&ve>79&&ve<83||!Bt("reduce")},{reduce:function(A){var e=arguments.length;return os(this,A,e,e>1?arguments[1]:void 0)}});var ca=wi.right;_n({target:"Array",proto:!0,forced:!oc&&ve>79&&ve<83||!Bt("reduceRight")},{reduceRight:function(A){return ca(this,A,arguments.length,arguments.length>1?arguments[1]:void 0)}});var Qa=ce,ta=Array.isArray||function(A){return Qa(A)==="Array"},H=_n,QA=ta,yA=We([].reverse),NA=[1,2];H({target:"Array",proto:!0,forced:String(NA)===String(NA.reverse())},{reverse:function(){return QA(this)&&(this.length=this.length),yA(this)}});var XA=qn,Te=TypeError,de=We([].slice),ke=de,ue=Math.floor,Oe=function(A,e){var o=A.length;if(o<8)for(var a,l,d=1;d0;)A[l]=A[--l];l!==d++&&(A[l]=a)}else for(var h=ue(o/2),y=Oe(ke(A,0,h),e),S=Oe(ke(A,h),e),k=y.length,V=S.length,J=0,cA=0;J3)){if(Dm)return!0;if(ri)return ri<603;var A,e,o,a,l="";for(A=65;A<76;A++){switch(e=String.fromCharCode(A),A){case 66:case 69:case 70:case 72:o=3;break;case 68:case 71:o=4;break;default:o=2}for(a=0;a<47;a++)Do.push({k:e+a,v:o})}for(Do.sort(function(d,h){return h.v-d.v}),a=0;aZn(S)?1:-1}}(A)),o=Zo(l),a=0;ao||S!=S?1/0*h:h*S},CD=Math.fround||function(A){return dD(A,11920928955078125e-23,34028234663852886e22,11754943508222875e-54)},Yv=Array,DT=Math.abs,yd=Math.pow,ST=Math.floor,hD=Math.log,MT=Math.LN2,BD={pack:function(A,e,o){var a,l,d,h=Yv(o),y=8*o-e-1,S=(1<>1,V=e===23?yd(2,-24)-yd(2,-77):0,J=A<0||A===0&&1/A<0?1:0,cA=0;for((A=DT(A))!=A||A===1/0?(l=A!=A?1:0,a=S):(a=ST(hD(A)/MT),A*(d=yd(2,-a))<1&&(a--,d*=2),(A+=a+k>=1?V/d:V*yd(2,1-k))*d>=2&&(a++,d/=2),a+k>=S?(l=0,a=S):a+k>=1?(l=(A*d-1)*yd(2,e),a+=k):(l=A*yd(2,k-1)*yd(2,e),a=0));e>=8;)h[cA++]=255&l,l/=256,e-=8;for(a=a<0;)h[cA++]=255&a,a/=256,y-=8;return h[cA-1]|=128*J,h},unpack:function(A,e){var o,a=A.length,l=8*a-e-1,d=(1<>1,y=l-7,S=a-1,k=A[S--],V=127&k;for(k>>=7;y>0;)V=256*V+A[S--],y-=8;for(o=V&(1<<-y)-1,V>>=-y,y+=e;y>0;)o=256*o+A[S--],y-=8;if(V===0)V=1-h;else{if(V===d)return o?NaN:k?-1/0:1/0;o+=yd(2,e),V-=h}return(k?-1:1)*o*yd(2,V-e)}},vT=as,Vv=gg,RT=Fa,Jv=function(A){for(var e=vT(this),o=RT(e),a=arguments.length,l=Vv(a>1?arguments[1]:void 0,o),d=a>2?arguments[2]:void 0,h=d===void 0?o:Vv(d,o);h>l;)e[l++]=A;return e},wT=$i,_T=Ao,QD=sA,pD=function(A,e,o){var a,l;return QD&&wT(a=e.constructor)&&a!==o&&_T(l=a.prototype)&&l!==o.prototype&&QD(A,l),A},bQ=f,wm=We,_m=N,Dd=Rr,TT=rg,NT=Lg,Tm=ru,mD=_,dh=vI,GT=$r,bT=jn,Nm=Mm,Hv=CD,fD=BD,Gm=yI,qv=sA,kT=Jv,LT=de,Kv=pD,Sd=_E,bm=Ya,Md=un,YE=zg.PROPER,km=zg.CONFIGURABLE,MC="ArrayBuffer",Ch="DataView",zu="prototype",Ji="Wrong index",Lm=Md.getterFor(MC),dn=Md.getterFor(Ch),jv=Md.set,Zu=bQ[MC],zs=Zu,hh=zs&&zs[zu],xl=bQ[Ch],nc=xl&&xl[zu],VE=Object.prototype,kQ=bQ.Array,uB=bQ.RangeError,UT=wm(kT),FT=wm([].reverse),LQ=fD.pack,UQ=fD.unpack,Wv=function(A){return[255&A]},zv=function(A){return[255&A,A>>8&255]},yD=function(A){return[255&A,A>>8&255,A>>16&255,A>>24&255]},vC=function(A){return A[3]<<24|A[2]<<16|A[1]<<8|A[0]},EB=function(A){return LQ(Hv(A),23,4)},DD=function(A){return LQ(A,52,8)},FQ=function(A,e,o){NT(A[zu],e,{configurable:!0,get:function(){return o(this)[e]}})},vd=function(A,e,o,a){var l=dn(A),d=Nm(o),h=!!a;if(d+e>l.byteLength)throw new uB(Ji);var y=l.bytes,S=d+l.byteOffset,k=LT(y,S,S+e);return h?k:FT(k)},Rd=function(A,e,o,a,l,d){var h=dn(A),y=Nm(o),S=a(+l),k=!!d;if(y+e>h.byteLength)throw new uB(Ji);for(var V=h.bytes,J=y+h.byteOffset,cA=0;cA>24)},setUint8:function(A,e){SD(this,A,e<<24>>24)}},{unsafe:!0})}else hh=(zs=function(A){dh(this,hh);var e=Nm(A);jv(this,{type:MC,bytes:UT(kQ(e),0),byteLength:e}),_m||(this.byteLength=e,this.detached=!1)})[zu],nc=(xl=function(A,e,o){dh(this,nc),dh(A,hh);var a=Lm(A),l=a.byteLength,d=GT(e);if(d<0||d>l)throw new uB("Wrong offset");if(d+(o=o===void 0?l-d:bT(o))>l)throw new uB("Wrong length");jv(this,{type:Ch,buffer:A,byteLength:o,byteOffset:d,bytes:a.bytes}),_m||(this.buffer=A,this.byteLength=o,this.byteOffset=d)})[zu],_m&&(FQ(zs,"byteLength",Lm),FQ(xl,"buffer",dn),FQ(xl,"byteLength",dn),FQ(xl,"byteOffset",dn)),Tm(nc,{getInt8:function(A){return vd(this,1,A)[0]<<24>>24},getUint8:function(A){return vd(this,1,A)[0]},getInt16:function(A){var e=vd(this,2,A,arguments.length>1&&arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(A){var e=vd(this,2,A,arguments.length>1&&arguments[1]);return e[1]<<8|e[0]},getInt32:function(A){return vC(vd(this,4,A,arguments.length>1&&arguments[1]))},getUint32:function(A){return vC(vd(this,4,A,arguments.length>1&&arguments[1]))>>>0},getFloat32:function(A){return UQ(vd(this,4,A,arguments.length>1&&arguments[1]),23)},getFloat64:function(A){return UQ(vd(this,8,A,arguments.length>1&&arguments[1]),52)},setInt8:function(A,e){Rd(this,1,A,Wv,e)},setUint8:function(A,e){Rd(this,1,A,Wv,e)},setInt16:function(A,e){Rd(this,2,A,zv,e,arguments.length>2&&arguments[2])},setUint16:function(A,e){Rd(this,2,A,zv,e,arguments.length>2&&arguments[2])},setInt32:function(A,e){Rd(this,4,A,yD,e,arguments.length>2&&arguments[2])},setUint32:function(A,e){Rd(this,4,A,yD,e,arguments.length>2&&arguments[2])},setFloat32:function(A,e){Rd(this,4,A,EB,e,arguments.length>2&&arguments[2])},setFloat64:function(A,e){Rd(this,8,A,DD,e,arguments.length>2&&arguments[2])}});bm(zs,MC),bm(xl,Ch);var Um={ArrayBuffer:zs,DataView:xl},Xv=VA,OT=Lg,Fm=N,dB=Hs("species"),Om=function(A){var e=Xv(A);Fm&&e&&!e[dB]&&OT(e,dB,{configurable:!0,get:function(){return this}})},PT=Om,MD="ArrayBuffer",vD=Um[MD];_n({global:!0,constructor:!0,forced:f[MD]!==vD},{ArrayBuffer:vD}),PT(MD);var PQ=ce,JE=We,Xu=function(A){if(PQ(A)==="Function")return JE(A)},RD=_n,Bh=Xu,Pm=_,$v=ar,xQ=gg,AR=jn,wD=Um.ArrayBuffer,vn=Um.DataView,YQ=vn.prototype,wd=Bh(wD.prototype.slice),_D=Bh(YQ.getUint8),xT=Bh(YQ.setUint8);RD({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:Pm(function(){return!new wD(2).slice(1,void 0).byteLength})},{slice:function(A,e){if(wd&&e===void 0)return wd($v(this),A);for(var o=$v(this).byteLength,a=xQ(A,o),l=xQ(e===void 0?o:e,o),d=new wD(AR(l-a)),h=new vn(this),y=new vn(d),S=0;ad;d++)if((y=qe(A[d]))&&sS(Ld,y))return y;return new NC(!1)}a=aN(A,l)}for(S=cA?A.next:a.next;!(k=sN(S,a)).done;){try{y=qe(k.value)}catch(we){nS(a,"throw",we)}if(typeof y=="object"&&y&&sS(Ld,y))return y}return new NC(!1)},aS=Hs("iterator"),gS=!1;try{var s=0,r={next:function(){return{done:!!s++}},return:function(){gS=!0}};r[aS]=function(){return this},Array.from(r,function(){throw 2})}catch{}var g=function(A,e){try{if(!e&&!gS)return!1}catch{return!1}var o=!1;try{var a={};a[aS]=function(){return{next:function(){return{done:o=!0}}}},A(a)}catch{}return o},u=RB,E=Th.CONSTRUCTOR||!g(function(A){u.all(A).then(void 0,function(){})}),m=tA,D=Yi,M=Kr,T=vB,P=rS;_n({target:"Promise",stat:!0,forced:E},{all:function(A){var e=this,o=M.f(e),a=o.resolve,l=o.reject,d=T(function(){var h=D(e.resolve),y=[],S=0,k=1;P(A,function(V){var J=S++,cA=!1;k++,m(h,e,V).then(function(CA){cA||(cA=!0,y[J]=CA,--k||a(y))},l)}),--k||a(y)});return d.error&&l(d.value),o.promise}});var W=_n,oA=Th.CONSTRUCTOR,EA=RB,wA=VA,kA=$i,xA=vr,LA=EA&&EA.prototype;if(W({target:"Promise",proto:!0,forced:oA,real:!0},{catch:function(A){return this.then(void 0,A)}}),kA(EA)){var SA=wA("Promise").prototype.catch;LA.catch!==SA&&xA(LA,"catch",SA,{unsafe:!0})}var OA=tA,qA=Yi,Ie=Kr,le=vB,bi=rS;_n({target:"Promise",stat:!0,forced:E},{race:function(A){var e=this,o=Ie.f(e),a=o.reject,l=le(function(){var d=qA(e.resolve);bi(A,function(h){OA(d,e,h).then(o.resolve,a)})});return l.error&&a(l.value),o.promise}});var ki=Kr;_n({target:"Promise",stat:!0,forced:Th.CONSTRUCTOR},{reject:function(A){var e=ki.f(this);return(0,e.reject)(A),e.promise}});var Ot=ar,Li=Ao,cs=Kr,Re=function(A,e){if(Ot(A),Li(e)&&e.constructor===A)return e;var o=cs.f(A);return(0,o.resolve)(e),o.promise},St=_n,UA=Th.CONSTRUCTOR,ai=Re;VA("Promise"),St({target:"Promise",stat:!0,forced:UA},{resolve:function(A){return ai(this,A)}});var _s=_n,Ui=RB,Or=_,Vi=VA,Ir=$i,Nt=oR,Gt=Re,iE=vr,ln=Ui&&Ui.prototype;if(_s({target:"Promise",proto:!0,real:!0,forced:!!Ui&&Or(function(){ln.finally.call({then:function(){}},function(){})})},{finally:function(A){var e=Nt(this,Vi("Promise")),o=Ir(A);return this.then(o?function(a){return Gt(e,A()).then(function(){return a})}:A,o?function(a){return Gt(e,A()).then(function(){throw a})}:A)}}),Ir(Ui)){var Qo=Vi("Promise").prototype.finally;ln.finally!==Qo&&iE(ln,"finally",Qo,{unsafe:!0})}var Il=Ao,GC=ce,Tr=Hs("match"),xg=function(A){var e;return Il(A)&&((e=A[Tr])!==void 0?!!e:GC(A)==="RegExp")},_I=_,ac=f.RegExp,gf=!_I(function(){var A=!0;try{ac(".","d")}catch{A=!1}var e={},o="",a=A?"dgimsy":"gimsy",l=function(y,S){Object.defineProperty(e,y,{get:function(){return o+=S,!0}})},d={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var h in A&&(d.hasIndices="d"),d)l(h,d[h]);return Object.getOwnPropertyDescriptor(ac.prototype,"flags").get.call(e)!==a||o!==a}),lp=ar,Va=function(){var A=lp(this),e="";return A.hasIndices&&(e+="d"),A.global&&(e+="g"),A.ignoreCase&&(e+="i"),A.multiline&&(e+="m"),A.dotAll&&(e+="s"),A.unicode&&(e+="u"),A.unicodeSets&&(e+="v"),A.sticky&&(e+="y"),e},Vl=tA,TI=hs,oE=Ee,Yg={correct:gf},dg=Va,cS=RegExp.prototype,OR=Yg.correct?function(A){return A.flags}:function(A){return Yg.correct||!oE(cS,A)||TI(A,"flags")?A.flags:Vl(dg,A)},PR=_,xR=f.RegExp,cN=PR(function(){var A=xR("a","y");return A.lastIndex=2,A.exec("abcd")!==null}),KV=cN||PR(function(){return!xR("a","y").sticky}),gF=cN||PR(function(){var A=xR("^r","gy");return A.lastIndex=2,A.exec("str")!==null}),Ip={BROKEN_CARET:gF,MISSED_STICKY:KV,UNSUPPORTED_Y:cN},lN=Wi.f,IN=_,uN=f.RegExp,EN=IN(function(){var A=uN(".","s");return!(A.dotAll&&A.test(` +`)&&A.flags==="s")}),cF=_,jV=f.RegExp,lF=cF(function(){var A=jV("(?b)","g");return A.exec("b").groups.a!=="b"||"b".replace(A,"$c")!=="bc"}),cf=N,dN=f,lf=We,CN=wr,WV=pD,zV=rg,ZV=xa,XV=Mc.f,YR=Ee,IF=xg,hN=Br,uF=OR,lS=Ip,BN=function(A,e,o){o in A||lN(A,o,{configurable:!0,get:function(){return e[o]},set:function(a){e[o]=a}})},VR=vr,JR=_,$V=hs,QN=un.enforce,HR=Om,EF=EN,If=lF,AJ=Hs("match"),bB=dN.RegExp,uf=bB.prototype,eJ=dN.SyntaxError,dF=lf(uf.exec),Ef=lf("".charAt),CF=lf("".replace),pN=lf("".indexOf),mN=lf("".slice),tJ=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,sE=/a/g,kB=/a/g,hF=new bB(sE)!==sE,BF=lS.MISSED_STICKY,iJ=lS.UNSUPPORTED_Y,fN=cf&&(!hF||BF||EF||If||JR(function(){return kB[AJ]=!1,bB(sE)!==sE||bB(kB)===kB||String(bB(sE,"i"))!=="/a/i"}));if(CN("RegExp",fN)){for(var LB=function(A,e){var o,a,l,d,h,y,S=YR(uf,this),k=IF(A),V=e===void 0,J=[],cA=A;if(!S&&k&&V&&A.constructor===LB)return A;if((k||YR(uf,A))&&(A=A.source,V&&(e=uF(cA))),A=A===void 0?"":hN(A),e=e===void 0?"":hN(e),cA=A,EF&&"dotAll"in sE&&(a=!!e&&pN(e,"s")>-1)&&(e=CF(e,/s/g,"")),o=e,BF&&"sticky"in sE&&(l=!!e&&pN(e,"y")>-1)&&iJ&&(e=CF(e,/y/g,"")),If&&(d=function(CA){for(var MA,ie=CA.length,pe=0,qe="",we=[],Di=ZV(null),Le=!1,Qt=!1,Bi=0,Si="";pe<=ie;pe++){if((MA=Ef(CA,pe))==="\\")MA+=Ef(CA,++pe);else if(MA==="]")Le=!1;else if(!Le)switch(!0){case MA==="[":Le=!0;break;case MA==="(":if(qe+=MA,mN(CA,pe+1,pe+3)==="?:")continue;dF(tJ,mN(CA,pe+1))&&(pe+=2,Qt=!0),Bi++;continue;case(MA===">"&&Qt):if(Si===""||$V(Di,Si))throw new eJ("Invalid capture group name");Di[Si]=!0,we[we.length]=[Si,Bi],Qt=!1,Si="";continue}Qt?Si+=MA:qe+=MA}return[qe,we]}(A),A=d[0],J=d[1]),h=WV(bB(A,e),S?this:uf,LB),(a||l||J.length)&&(y=QN(h),a&&(y.dotAll=!0,y.raw=LB(function(CA){for(var MA,ie=CA.length,pe=0,qe="",we=!1;pe<=ie;pe++)(MA=Ef(CA,pe))!=="\\"?we||MA!=="."?(MA==="["?we=!0:MA==="]"&&(we=!1),qe+=MA):qe+="[\\s\\S]":qe+=MA+Ef(CA,++pe);return qe}(A),o)),l&&(y.sticky=!0),J.length&&(y.groups=J)),A!==cA)try{zV(h,"source",cA===""?"(?:)":cA)}catch{}return h},yN=XV(bB),DN=0;yN.length>DN;)BN(LB,bB,yN[DN++]);uf.constructor=LB,LB.prototype=uf,VR(dN,"RegExp",LB,{constructor:!0})}HR("RegExp");var df=tA,up=We,UB=Br,oJ=Va,Cf=Ip,QF=xa,pF=un.get,sJ=EN,nJ=lF,rJ=Us("native-string-replace",String.prototype.replace),Ep=RegExp.prototype.exec,SN=Ep,aJ=up("".charAt),gJ=up("".indexOf),mF=up("".replace),IS=up("".slice),MN=function(){var A=/a/,e=/b*/g;return df(Ep,A,"a"),df(Ep,e,"a"),A.lastIndex!==0||e.lastIndex!==0}(),fF=Cf.BROKEN_CARET,vN=/()??/.exec("")[1]!==void 0;(MN||vN||fF||sJ||nJ)&&(SN=function(A){var e,o,a,l,d,h,y,S=this,k=pF(S),V=UB(A),J=k.raw;if(J)return J.lastIndex=S.lastIndex,e=df(SN,J,V),S.lastIndex=J.lastIndex,e;var cA=k.groups,CA=fF&&S.sticky,MA=df(oJ,S),ie=S.source,pe=0,qe=V;if(CA&&(MA=mF(MA,"y",""),gJ(MA,"g")===-1&&(MA+="g"),qe=IS(V,S.lastIndex),S.lastIndex>0&&(!S.multiline||S.multiline&&aJ(V,S.lastIndex-1)!==` +`)&&(ie="(?: "+ie+")",qe=" "+qe,pe++),o=new RegExp("^(?:"+ie+")",MA)),vN&&(o=new RegExp("^"+ie+"$(?!\\s)",MA)),MN&&(a=S.lastIndex),l=df(Ep,CA?o:S,qe),CA?l?(l.input=IS(l.input,pe),l[0]=IS(l[0],pe),l.index=S.lastIndex,S.lastIndex+=l[0].length):S.lastIndex=0:MN&&l&&(S.lastIndex=S.global?l.index+l[0].length:a),vN&&l&&l.length>1&&df(rJ,l[0],o,function(){for(d=1;d0;(a>>>=1)&&(e+=e))1&a&&(o+=e);return o},hf=so,Bf=SF(lJ),WR=SF("".slice),MF=Math.ceil,RN=function(A){return function(e,o,a){var l,d,h=jR(hf(e)),y=cJ(o),S=h.length,k=a===void 0?" ":jR(a);return y<=S||k===""?h:((d=Bf(k,MF((l=y-S)/k.length))).length>l&&(d=WR(d,0,l)),A?h+d:d+h)}},wN={start:RN(!1)},_N=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(ot),IJ=wN.start;_n({target:"String",proto:!0,forced:_N},{padStart:function(A){return IJ(this,A,arguments.length>1?arguments[1]:void 0)}});var vF=tA,TN=vr,RF=uS,NN=_,GN=Hs,uJ=GN("species"),wF=RegExp.prototype,zR=We,EJ=$r,Qf=Br,pf=so,bN=zR("".charAt),_F=zR("".charCodeAt),dJ=zR("".slice),TF=function(A){return function(e,o){var a,l,d=Qf(pf(e)),h=EJ(o),y=d.length;return h<0||h>=y?A?"":void 0:(a=_F(d,h))<55296||a>56319||h+1===y||(l=_F(d,h+1))<56320||l>57343?A?bN(d,h):a:A?dJ(d,h,h+2):l-56320+(a-55296<<10)+65536}},ZR={codeAt:TF(!1),charAt:TF(!0)},CJ=ZR.charAt,XR=We,hJ=as,BJ=Math.floor,kN=XR("".charAt),LN=XR("".replace),UN=XR("".slice),QJ=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,pJ=/\$([$&'`]|\d{1,2})/g,NF=function(A,e,o,a,l,d){var h=o+A.length,y=a.length,S=pJ;return l!==void 0&&(l=hJ(l),S=QJ),LN(d,S,function(k,V){var J;switch(kN(V,0)){case"$":return"$";case"&":return A;case"`":return UN(e,0,o);case"'":return UN(e,h);case"<":J=l[UN(V,1,-1)];break;default:var cA=+V;if(cA===0)return k;if(cA>y){var CA=BJ(cA/10);return CA===0?k:CA<=y?a[CA-1]===void 0?kN(V,1):a[CA-1]+kN(V,1):k}J=a[cA-1]}return J===void 0?"":J})},GF=tA,mJ=ar,bF=$i,fJ=ce,kF=uS,yJ=TypeError,DJ=_d,LF=tA,$R=We,SJ=function(A,e,o,a){var l=GN(A),d=!NN(function(){var k={};return k[l]=function(){return 7},""[A](k)!==7}),h=d&&!NN(function(){var k=!1,V=/a/,J;return V.exec=function(){return k=!0,null},V[l](""),!k});if(!d||!h||o){var y=/./[l],S=e(l,""[A],function(k,V,J,cA,CA){var MA=V.exec;return MA===RF||MA===wF.exec?d&&!CA?{done:!0,value:vF(y,V,J,cA)}:{done:!0,value:vF(k,J,V,cA)}:{done:!1}});TN(String.prototype,A,S[0]),TN(wF,l,S[1])}},MJ=_,vJ=ar,UF=$i,RJ=Ao,wJ=$r,FF=jn,dp=Br,Aw=so,OF=function(A,e,o){return e+(o?CJ(A,e).length:1)},ew=en,PF=NF,xF=OR,_J=function(A,e){var o=A.exec;if(bF(o)){var a=GF(o,A,e);return a!==null&&mJ(a),a}if(fJ(A)==="RegExp")return GF(kF,A,e);throw new yJ("RegExp#exec called on incompatible receiver")},tw=Hs("replace"),FN=Math.max,TJ=Math.min,YF=$R([].concat),ON=$R([].push),iw=$R("".indexOf),VF=$R("".slice),NJ=function(A){return A===void 0?A:String(A)},GJ="a".replace(/./,"$0")==="$0",JF=!!/./[tw]&&/./[tw]("a","$0")==="",bJ=!MJ(function(){var A=/./;return A.exec=function(){var e=[];return e.groups={a:"7"},e},"".replace(A,"$")!=="7"});SJ("replace",function(A,e,o){var a=JF?"$":"$0";return[function(l,d){var h=Aw(this),y=RJ(l)?ew(l,tw):void 0;return y?LF(y,l,h,d):LF(e,dp(h),l,d)},function(l,d){var h=vJ(this),y=dp(l);if(typeof d=="string"&&iw(d,a)===-1&&iw(d,"$<")===-1){var S=o(e,h,y,d);if(S.done)return S.value}var k=UF(d);k||(d=dp(d));var V,J=dp(xF(h)),cA=iw(J,"g")!==-1;cA&&(V=iw(J,"u")!==-1,h.lastIndex=0);for(var CA,MA=[];(CA=_J(h,y))!==null&&(ON(MA,CA),cA);)dp(CA[0])===""&&(h.lastIndex=OF(y,FF(h.lastIndex),V));for(var ie="",pe=0,qe=0;qe=pe&&(ie+=VF(y,pe,Le)+we,pe=Le+Di.length)}return ie+VF(y,pe)}]},!bJ||!GJ||JF);var ow=` +\v\f\r                 \u2028\u2029\uFEFF`,kJ=so,LJ=Br,PN=ow,xN=We("".replace),HF=RegExp("^["+PN+"]+"),UJ=RegExp("(^|[^"+PN+"])["+PN+"]+$"),FJ=function(A){return function(e){var o=LJ(kJ(e));return 1&A&&(o=xN(o,HF,"")),2&A&&(o=xN(o,UJ,"$1")),o}},OJ={trim:FJ(3)},PJ=zg.PROPER,xJ=_,qF=ow,YJ=OJ.trim;_n({target:"String",proto:!0,forced:function(A){return xJ(function(){return!!qF[A]()||"​…᠎"[A]()!=="​…᠎"||PJ&&qF[A].name!==A})}("trim")},{trim:function(){return YJ(this)}});var lu,mf,sw,YN={exports:{}},VJ=Rr,VN=N,NI=f,KF=$i,jF=Ao,ff=hs,nw=hr,JN=qn,HN=rg,qN=vr,WF=Lg,JJ=Ee,KN=yI,Cp=sA,HJ=Hs,qJ=pc,jN=un.enforce,Fh=NI.Int8Array,yf=Fh&&Fh.prototype,zF=NI.Uint8ClampedArray,ZF=zF&&zF.prototype,bC=Fh&&KN(Fh),Ud=yf&&KN(yf),KJ=Object.prototype,WN=NI.TypeError,XF=HJ("toStringTag"),zN=qJ("TYPED_ARRAY_TAG"),ES="TypedArrayConstructor",Fd=VJ&&!!Cp&&nw(NI.opera)!=="Opera",$F=!1,FB={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},AO={BigInt64Array:8,BigUint64Array:8},rw=function(A){if(!jF(A))return!1;var e=nw(A);return ff(FB,e)||ff(AO,e)};for(lu in FB)(sw=(mf=NI[lu])&&mf.prototype)?jN(sw)[ES]=mf:Fd=!1;for(lu in AO)(sw=(mf=NI[lu])&&mf.prototype)&&(jN(sw)[ES]=mf);if((!Fd||!KF(bC)||bC===Function.prototype)&&(bC=function(){throw new WN("Incorrect invocation")},Fd))for(lu in FB)NI[lu]&&Cp(NI[lu],bC);if((!Fd||!Ud||Ud===KJ)&&(Ud=bC.prototype,Fd))for(lu in FB)NI[lu]&&Cp(NI[lu].prototype,Ud);if(Fd&&KN(ZF)!==Ud&&Cp(ZF,Ud),VN&&!ff(Ud,XF))for(lu in $F=!0,WF(Ud,XF,{configurable:!0,get:function(){return jF(this)?this[zN]:void 0}}),FB)NI[lu]&&HN(NI[lu],zN,lu);var Od={NATIVE_ARRAY_BUFFER_VIEWS:Fd,TYPED_ARRAY_TAG:$F&&zN,aTypedArray:function(A){if(rw(A))return A;throw new WN("Target is not a typed array")},aTypedArrayConstructor:function(A){if(KF(A)&&(!Cp||JJ(bC,A)))return A;throw new WN(JN(A)+" is not a typed array constructor")},exportTypedArrayMethod:function(A,e,o,a){if(VN){if(o)for(var l in FB){var d=NI[l];if(d&&ff(d.prototype,A))try{delete d.prototype[A]}catch{try{d.prototype[A]=e}catch{}}}Ud[A]&&!o||qN(Ud,A,o?e:Fd&&yf[A]||e,a)}},exportTypedArrayStaticMethod:function(A,e,o){var a,l;if(VN){if(Cp){if(o){for(a in FB)if((l=NI[a])&&ff(l,A))try{delete l[A]}catch{}}if(bC[A]&&!o)return;try{return qN(bC,A,o?e:Fd&&bC[A]||e)}catch{}}for(a in FB)!(l=NI[a])||l[A]&&!o||qN(l,A,e)}},isTypedArray:rw,TypedArray:bC,TypedArrayPrototype:Ud},ZN=f,dS=_,aw=g,jJ=Od.NATIVE_ARRAY_BUFFER_VIEWS,eO=ZN.ArrayBuffer,hp=ZN.Int8Array,tO=!jJ||!dS(function(){hp(1)})||!dS(function(){new hp(-1)})||!aw(function(A){new hp,new hp(null),new hp(1.5),new hp(A)},!0)||dS(function(){return new hp(new eO(2),1,void 0).length!==1}),WJ=Ao,zJ=Math.floor,iO=Number.isInteger||function(A){return!WJ(A)&&isFinite(A)&&zJ(A)===A},ZJ=$r,XJ=RangeError,gw=function(A){var e=ZJ(A);if(e<0)throw new XJ("The argument can't be less than 0");return e},$J=RangeError,oO=function(A,e){var o=gw(A);if(o%e)throw new $J("Wrong offset");return o},AH=Math.round,sO=hr,eH=yn,tH=TypeError,cw=function(A){var e=eH(A,"number");if(typeof e=="number")throw new tH("Can't convert number to bigint");return BigInt(e)},nO=Ag,rO=tA,iH=fh,oH=as,aO=Fa,gO=jE,sH=Uh,cO=AS,lO=function(A){var e=sO(A);return e==="BigInt64Array"||e==="BigUint64Array"},nH=Od.aTypedArrayConstructor,rH=cw,lw=function(A){var e,o,a,l,d,h,y,S,k=iH(this),V=oH(A),J=arguments.length,cA=J>1?arguments[1]:void 0,CA=cA!==void 0,MA=sH(V);if(MA&&!cO(MA))for(S=(y=gO(V,MA)).next,V=[];!(h=rO(S,y)).done;)V.push(h.value);for(CA&&J>2&&(cA=nO(cA,arguments[2])),o=aO(V),a=new(nH(k))(o),l=lO(a),e=0;o>e;e++)d=CA?cA(V[e],e):V[e],a[e]=l?rH(d):+d;return a},XN=ta,$N=GD,aH=Ao,gH=Hs("species"),IO=Array,cH=function(A){var e;return XN(A)&&(e=A.constructor,($N(e)&&(e===IO||XN(e.prototype))||aH(e)&&(e=e[gH])===null)&&(e=void 0)),e===void 0?IO:e},uO=Ag,lH=oi,IH=as,EO=Fa,uH=function(A,e){return new(cH(A))(e===0?0:e)},AG=We([].push),dO=function(A){var e=A===1,o=A===2,a=A===3,l=A===4,d=A===6,h=A===7,y=A===5||d;return function(S,k,V,J){for(var cA,CA,MA=IH(S),ie=lH(MA),pe=EO(ie),qe=uO(k,V),we=0,Di=J||uH,Le=e?Di(S,pe):o||h?Di(S,0):void 0;pe>we;we++)if((y||we in ie)&&(CA=qe(cA=ie[we],we,MA),A))if(e)Le[we]=CA;else if(CA)switch(A){case 3:return!0;case 5:return cA;case 6:return we;case 2:AG(Le,cA)}else switch(A){case 4:return!1;case 7:AG(Le,cA)}return d?-1:a||l?l:Le}},CO={forEach:dO(0)},EH=Fa,hO=_n,BO=f,QO=tA,pO=N,dH=tO,CS=Od,mO=Um,fO=vI,CH=KA,OB=rg,hH=iO,BH=jn,yO=Mm,eG=oO,DO=function(A){var e=AH(A);return e<0?0:e>255?255:255&e},tG=$,Bp=hs,QH=hr,iG=Ao,oG=So,pH=xa,sG=Ee,Iw=sA,mH=Mc.f,SO=lw,MO=CO.forEach,uw=Om,fH=Lg,vO=Wi,RO=w,wO=function(A,e,o){for(var a=0,l=arguments.length>2?o:EH(e),d=new A(l);l>a;)d[a]=e[a++];return d},yH=pD,nG=un.get,DH=un.set,Qp=un.enforce,_O=vO.f,SH=RO.f,rG=BO.RangeError,TO=mO.ArrayBuffer,MH=TO.prototype,vH=mO.DataView,Df=CS.NATIVE_ARRAY_BUFFER_VIEWS,NO=CS.TYPED_ARRAY_TAG,GO=CS.TypedArray,hS=CS.TypedArrayPrototype,BS=CS.isTypedArray,pp="BYTES_PER_ELEMENT",Ew="Wrong length",dw=function(A,e){fH(A,e,{configurable:!0,get:function(){return nG(this)[e]}})},bO=function(A){var e;return sG(MH,A)||(e=QH(A))==="ArrayBuffer"||e==="SharedArrayBuffer"},aG=function(A,e){return BS(A)&&!oG(e)&&e in A&&hH(+e)&&e>=0},Cw=function(A,e){return e=tG(e),aG(A,e)?CH(2,A[e]):SH(A,e)},kO=function(A,e,o){return e=tG(e),!(aG(A,e)&&iG(o)&&Bp(o,"value"))||Bp(o,"get")||Bp(o,"set")||o.configurable||Bp(o,"writable")&&!o.writable||Bp(o,"enumerable")&&!o.enumerable?_O(A,e,o):(A[e]=o.value,A)};pO?(Df||(RO.f=Cw,vO.f=kO,dw(hS,"buffer"),dw(hS,"byteOffset"),dw(hS,"byteLength"),dw(hS,"length")),hO({target:"Object",stat:!0,forced:!Df},{getOwnPropertyDescriptor:Cw,defineProperty:kO}),YN.exports=function(A,e,o){var a=A.match(/\d+/)[0]/8,l=A+(o?"Clamped":"")+"Array",d="get"+A,h="set"+A,y=BO[l],S=y,k=S&&S.prototype,V={},J=function(CA,MA){_O(CA,MA,{get:function(){return function(ie,pe){var qe=nG(ie);return qe.view[d](pe*a+qe.byteOffset,!0)}(this,MA)},set:function(ie){return function(pe,qe,we){var Di=nG(pe);Di.view[h](qe*a+Di.byteOffset,o?DO(we):we,!0)}(this,MA,ie)},enumerable:!0})};Df?dH&&(S=e(function(CA,MA,ie,pe){return fO(CA,k),yH(iG(MA)?bO(MA)?pe!==void 0?new y(MA,eG(ie,a),pe):ie!==void 0?new y(MA,eG(ie,a)):new y(MA):BS(MA)?wO(S,MA):QO(SO,S,MA):new y(yO(MA)),CA,S)}),Iw&&Iw(S,GO),MO(mH(y),function(CA){CA in S||OB(S,CA,y[CA])}),S.prototype=k):(S=e(function(CA,MA,ie,pe){fO(CA,k);var qe,we,Di,Le=0,Qt=0;if(iG(MA)){if(!bO(MA))return BS(MA)?wO(S,MA):QO(SO,S,MA);qe=MA,Qt=eG(ie,a);var Bi=MA.byteLength;if(pe===void 0){if(Bi%a)throw new rG(Ew);if((we=Bi-Qt)<0)throw new rG(Ew)}else if((we=BH(pe)*a)+Qt>Bi)throw new rG(Ew);Di=we/a}else Di=yO(MA),qe=new TO(we=Di*a);for(DH(CA,{buffer:qe,byteOffset:Qt,byteLength:we,length:Di,view:new vH(qe)});Le1?arguments[1]:void 0,e>2?arguments[2]:void 0)},gG(function(){var A=0;return new Int8Array(2).fill({valueOf:function(){return A++}}),A!==1})),(0,Od.exportTypedArrayStaticMethod)("from",lw,tO);var FO=f,OO=tA,lG=Od,PO=Fa,GH=oO,bH=as,xO=_,kH=FO.RangeError,IG=FO.Int8Array,uG=IG&&IG.prototype,EG=uG&&uG.set,dG=lG.aTypedArray,YO=lG.exportTypedArrayMethod,hw=!xO(function(){var A=new Uint8ClampedArray(2);return OO(EG,A,{length:1,0:3},1),A[1]!==3}),VO=hw&&lG.NATIVE_ARRAY_BUFFER_VIEWS&&xO(function(){var A=new IG(2);return A.set(1),A.set("2",1),A[0]!==0||A[1]!==2});YO("set",function(A){dG(this);var e=GH(arguments.length>1?arguments[1]:void 0,1),o=bH(A);if(hw)return OO(EG,this,o,e);var a=this.length,l=PO(o),d=0;if(l+e>a)throw new kH("Wrong length");for(;d0&&1/a<0?1:-1:o>a}}(A))},!Bw||fG);var HO=_n,yG=tA,pS=We,DG=so,SG=$i,FH=Ao,qO=xg,mS=Br,OH=en,fS=OR,KO=NF,PH=Hs("replace"),jO=TypeError,Pd=pS("".indexOf);pS("".replace);var yS=pS("".slice),xH=Math.max;HO({target:"String",proto:!0},{replaceAll:function(A,e){var o,a,l,d,h,y,S,k,V,J=DG(this),cA=0,CA="";if(FH(A)){if(qO(A)&&(o=mS(DG(fS(A))),!~Pd(o,"g")))throw new jO("`.replaceAll` does not allow non-global regexes");if(a=OH(A,PH))return yG(a,A,J,e)}for(l=mS(J),d=mS(A),(h=SG(e))||(e=mS(e)),y=d.length,S=xH(1,y),k=Pd(l,d);k!==-1;)V=h?mS(e(d,k,l)):KO(d,l,k,[],void 0,e),CA+=yS(l,cA,k)+V,cA=k+y,k=k+S>l.length?-1:Pd(l,d,k+S);return cA1?arguments[1]:void 0)},zO=f,ZO=MG,JH=vG,pw=VH,HH=rg,XO=function(A){if(A&&A.forEach!==pw)try{HH(A,"forEach",pw)}catch{A.forEach=pw}};for(var RG in ZO)ZO[RG]&&XO(zO[RG]&&zO[RG].prototype);XO(JH);var mw=f,$O=MG,qH=vG,DS=zi,SS=rg,KH=Ya,wG=Hs("iterator"),_G=DS.values,AP=function(A,e){if(A){if(A[wG]!==_G)try{SS(A,wG,_G)}catch{A[wG]=_G}if(KH(A,e,!0),$O[e]){for(var o in DS)if(A[o]!==DS[o])try{SS(A,o,DS[o])}catch{A[o]=DS[o]}}}};for(var TG in $O)AP(mw[TG]&&mw[TG].prototype,TG);AP(qH,"DOMTokenList");var NG=wC.clear;_n({global:!0,bind:!0,enumerable:!0,forced:f.clearImmediate!==NG},{clearImmediate:NG});var MS=f,jH=_d,WH=$i,zH=Hr,ZH=ot,XH=de,$H=QB,GG=MS.Function,Aq=/MSIE .\./.test(ZH)||zH==="BUN"&&function(){var A=MS.Bun.version.split(".");return A.length<3||A[0]==="0"&&(A[1]<3||A[1]==="3"&&A[2]==="0")}(),eP=_n,tP=f,fw=wC.set,eq=function(A,e){var o=1;return Aq?function(a,l){var d=$H(arguments.length,1)>o,h=WH(a)?a:GG(a),y=d?XH(arguments,o):[],S=d?function(){jH(h,this,y)}:h;return A(S)}:A},bG=tP.setImmediate?eq(fw):fw;eP({global:!0,bind:!0,enumerable:!0,forced:tP.setImmediate!==bG},{setImmediate:bG});var Oh=ZR.charAt,tq=Br,yw=un,iq=he,iP=Ze,oP="String Iterator",oq=yw.set,sP=yw.getterFor(oP);iq(String,"String",function(A){oq(this,{type:oP,string:tq(A),index:0})},function(){var A,e=sP(this),o=e.string,a=e.index;return a>=o.length?iP(void 0,!0):(A=Oh(o,a),e.index+=A.length,iP(A,!1))});var sq=_,nq=N,rq=Hs("iterator"),nP=!sq(function(){var A=new URL("b?a=1&b=2&c=3","https://a"),e=A.searchParams,o=new URLSearchParams("a=1&a=2&b=3"),a="";return A.pathname="c%20d",e.forEach(function(l,d){e.delete("b"),a+=d+l}),o.delete("a",2),o.delete("b",void 0),!e.size&&!nq||!e.sort||A.href!=="https://a/c%20d?a=1&c=3"||e.get("c")!=="3"||String(new URLSearchParams("?a=1"))!=="a=1"||!e[rq]||new URL("https://a@b").username!=="a"||new URLSearchParams(new URLSearchParams("a=b")).get("a")!=="b"||new URL("https://тест").host!=="xn--e1aybc"||new URL("https://a#б").hash!=="#%D0%B1"||a!=="a1c3"||new URL("https://x",void 0).host!=="x"}),rP=N,aq=We,kG=tA,LG=_,UG=kl,gq=vc,cq=BA,lq=as,aP=oi,mp=Object.assign,gP=Object.defineProperty,cP=aq([].concat),Iq=!mp||LG(function(){if(rP&&mp({b:1},mp(gP({},"a",{enumerable:!0,get:function(){gP(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var A={},e={},o=Symbol("assign detection"),a="abcdefghijklmnopqrst";return A[o]=7,a.split("").forEach(function(l){e[l]=l}),mp({},A)[o]!==7||UG(mp({},e)).join("")!==a})?function(A,e){for(var o=lq(A),a=arguments.length,l=1,d=gq.f,h=cq.f;a>l;)for(var y,S=aP(arguments[l++]),k=d?cP(UG(S),d(S)):UG(S),V=k.length,J=0;V>J;)y=k[J++],rP&&!kG(h,S,y)||(o[y]=S[y]);return o}:mp,uq=ar,Eq=oS,dq=N,Cq=Wi,lP=KA,hq=Ag,vS=tA,IP=as,uP=function(A,e,o,a){try{return a?e(uq(o)[0],o[1]):e(o)}catch(l){Eq(A,"throw",l)}},FG=AS,Bq=GD,Qq=Fa,RS=function(A,e,o){dq?Cq.f(A,e,lP(0,o)):A[e]=o},OG=jE,pq=Uh,EP=Array,PB=We,PG=2147483647,dP=/[^\0-\u007E]/,xG=/[.\u3002\uFF0E\uFF61]/g,CP="Overflow: input needs wider integers to process",hP=RangeError,mq=PB(xG.exec),xB=Math.floor,Dw=String.fromCharCode,Sw=PB("".charCodeAt),nE=PB([].join),YB=PB([].push),pa=PB("".replace),BP=PB("".split),fq=PB("".toLowerCase),QP=function(A){return A+22+75*(A<26)},YG=function(A,e,o){var a=0;for(A=o?xB(A/700):A>>1,A+=xB(A/e);A>455;)A=xB(A/35),a+=36;return xB(a+36*A/(A+38))},yq=function(A){var e=[];A=function(qe){for(var we=[],Di=0,Le=qe.length;Di=55296&&Qt<=56319&&Di=d&&axB((PG-h)/J))throw new hP(CP);for(h+=(V-d)*J,d=V,o=0;oPG)throw new hP(CP);if(a===d){for(var cA=h,CA=36;;){var MA=CA<=y?1:CA>=y+26?26:CA-y;if(cAl;){if(e=+arguments[l++],Dq(e,1114111)!==e)throw new Sq(e+" is not a valid code point");o[l]=e<65536?Ph(e):Ph(55296+((e-=65536)>>10),e%1024+56320)}return _S(o,"")}});var fp=_n,vf=f,yp=uR,VG=VA,Os=tA,rE=We,Rf=N,JG=nP,mP=vr,Mq=Lg,vq=ru,Rq=Ya,wq=PE,TS=un,fP=vI,HG=$i,_q=hs,Tq=Ag,Nq=hr,Gq=ar,yP=Ao,Jl=Br,bq=xa,DP=KA,SP=jE,kq=Uh,Mw=Ze,wf=QB,Lq=Rt,Uq=Hs("iterator"),Dp="URLSearchParams",qG=Dp+"Iterator",MP=TS.set,ul=TS.getterFor(Dp),xh=TS.getterFor(qG),vP=yp("fetch"),_f=yp("Request"),NS=yp("Headers"),KG=_f&&_f.prototype,RP=NS&&NS.prototype,wP=vf.TypeError,Fq=vf.encodeURIComponent,Oq=String.fromCharCode,Pq=VG("String","fromCodePoint"),xq=parseInt,vw=rE("".charAt),Rw=rE([].join),Yh=rE([].push),_P=rE("".replace),Yq=rE([].shift),TP=rE([].splice),NP=rE("".split),GP=rE("".slice),jG=rE(/./.exec),bP=/\+/g,Vq=/^[0-9a-f]+$/i,kP=function(A,e){var o=GP(A,e,e+2);return jG(Vq,o)?xq(o,16):NaN},Jq=function(A){for(var e=0,o=128;o>0&&A&o;o>>=1)e++;return e},Hq=function(A){var e=null;switch(A.length){case 1:e=A[0];break;case 2:e=(31&A[0])<<6|63&A[1];break;case 3:e=(15&A[0])<<12|(63&A[1])<<6|63&A[2];break;case 4:e=(7&A[0])<<18|(63&A[1])<<12|(63&A[2])<<6|63&A[3]}return e>1114111?null:e},LP=function(A){for(var e=(A=_P(A,bP," ")).length,o="",a=0;ae){o+="%",a++;continue}var d=kP(A,a+1);if(d!=d){o+=l,a++;continue}a+=2;var h=Jq(d);if(h===0)l=Oq(d);else{if(h===1||h>4){o+="�",a++;continue}for(var y=[d],S=1;Se||vw(A,a)!=="%");){var k=kP(A,a+1);if(k!=k){a+=3;break}if(k>191||k<128)break;Yh(y,k),a+=2,S++}if(y.length!==h){o+="�";continue}var V=Hq(y);V===null?o+="�":l=Pq(V)}}o+=l,a++}return o},Kq=/[!'()~]|%20/g,jq={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},Wq=function(A){return jq[A]},UP=function(A){return _P(Fq(A),Kq,Wq)},WG=wq(function(A,e){MP(this,{type:qG,target:ul(A).entries,index:0,kind:e})},Dp,function(){var A=xh(this),e=A.target,o=A.index++;if(!e||o>=e.length)return A.target=null,Mw(void 0,!0);var a=e[o];switch(A.kind){case"keys":return Mw(a.key,!1);case"values":return Mw(a.value,!1)}return Mw([a.key,a.value],!1)},!0),FP=function(A){this.entries=[],this.url=null,A!==void 0&&(yP(A)?this.parseObject(A):this.parseQuery(typeof A=="string"?vw(A,0)==="?"?GP(A,1):A:Jl(A)))};FP.prototype={type:Dp,bindURL:function(A){this.url=A,this.update()},parseObject:function(A){var e,o,a,l,d,h,y,S=this.entries,k=kq(A);if(k)for(o=(e=SP(A,k)).next;!(a=Os(o,e)).done;){if(d=(l=SP(Gq(a.value))).next,(h=Os(d,l)).done||(y=Os(d,l)).done||!Os(d,l).done)throw new wP("Expected sequence with length 2");Yh(S,{key:Jl(h.value),value:Jl(y.value)})}else for(var V in A)_q(A,V)&&Yh(S,{key:V,value:Jl(A[V])})},parseQuery:function(A){if(A)for(var e,o,a=this.entries,l=NP(A,"&"),d=0;d0?arguments[0]:void 0));Rf||(this.size=A.entries.length)},Sp=Tf.prototype;if(vq(Sp,{append:function(A,e){var o=ul(this);wf(arguments.length,2),Yh(o.entries,{key:Jl(A),value:Jl(e)}),Rf||this.size++,o.updateURL()},delete:function(A){for(var e=ul(this),o=wf(arguments.length,1),a=e.entries,l=Jl(A),d=o<2?void 0:arguments[1],h=d===void 0?d:Jl(d),y=0;yo.key?1:-1}),A.updateURL()},forEach:function(A){for(var e,o=ul(this).entries,a=Tq(A,arguments.length>1?arguments[1]:void 0),l=0;l1?OP(arguments[1]):{})}}),HG(_f)){var ZG=function(A){return fP(this,KG),new _f(A,arguments.length>1?OP(arguments[1]):{})};KG.constructor=ZG,ZG.prototype=KG,fp({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:ZG})}}var aE,Zq=_n,XG=N,PP=nP,$G=f,xP=Ag,WE=We,ww=vr,zE=Lg,Xq=vI,Ab=hs,eb=Iq,VB=function(A){var e=IP(A),o=Bq(this),a=arguments.length,l=a>1?arguments[1]:void 0,d=l!==void 0;d&&(l=hq(l,a>2?arguments[2]:void 0));var h,y,S,k,V,J,cA=pq(e),CA=0;if(!cA||this===EP&&FG(cA))for(h=Qq(e),y=o?new this(h):EP(h);h>CA;CA++)J=d?l(e[CA],CA):e[CA],RS(y,CA,J);else for(y=o?new this:[],V=(k=OG(e,cA)).next;!(S=vS(V,k)).done;CA++)J=d?uP(k,l,[S.value,CA],!0):S.value,RS(y,CA,J);return y.length=CA,y},xd=de,tb=ZR.codeAt,$q=function(A){var e,o,a=[],l=BP(pa(fq(A),xG,"."),".");for(e=0;e?@[\\\]^|]/,aK=/[\0\t\n\r #/:<>?@[\\\]^|]/,gK=/^[\u0000-\u0020]+/,cK=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,lK=/[\t\n\r]/g,bf=function(A){var e,o,a,l;if(typeof A=="number"){for(e=[],o=0;o<4;o++)sK(e,A%256),A=Jh(A/256);return GS(e,".")}if(typeof A=="object"){for(e="",a=function(d){for(var h=null,y=1,S=null,k=0,V=0;V<8;V++)d[V]!==0?(k>y&&(h=S,y=k),S=null,k=0):(S===null&&(S=V),++k);return k>y?S:h}(A),o=0;o<8;o++)l&&A[o]===0||(l&&(l=!1),a===o?(e+=o?":":"::",l=!0):(e+=oK(A[o],16),o<7&&(e+=":")));return"["+e+"]"}return A},kf={},WP=eb({},kf,{" ":1,'"':1,"<":1,">":1,"`":1}),ab=eb({},WP,{"#":1,"?":1,"{":1,"}":1}),HB=eb({},ab,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),Vd=function(A,e){var o=tb(A,0);return o>32&&o<127&&!Ab(e,A)?A:encodeURIComponent(A)},Hh={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Lf=function(A,e){var o;return A.length===2&&Yd(bS,ZE(A,0))&&((o=ZE(A,1))===":"||!e&&o==="|")},gb=function(A){var e;return A.length>1&&Lf(Mp(A,0,2))&&(A.length===2||(e=ZE(A,2))==="/"||e==="\\"||e==="?"||e==="#")},kS=function(A){return A==="."||bw(A)==="%2e"},zP=function(A){return(A=bw(A))===".."||A==="%2e."||A===".%2e"||A==="%2e%2e"},gE={},Iu={},qB={},kC={},KB={},Uw={},ZP={},LS={},Fw={},Ow={},Pw={},xw={},Yw={},Vw={},cb={},Jw={},Uf={},LC={},US={},uu={},Hl={},Hw=function(A,e,o){var a,l,d,h=Vh(A);if(e){if(l=this.parse(h))throw new ob(l);this.searchParams=null}else{if(o!==void 0&&(a=new Hw(o,!0)),l=this.parse(h,null,a))throw new ob(l);(d=iK(new tK)).bindURL(this),this.searchParams=d}};Hw.prototype={type:"URL",parse:function(A,e,o){var a,l,d,h,y=this,S=e||gE,k=0,V="",J=!1,cA=!1,CA=!1;for(A=Vh(A),e||(y.scheme="",y.username="",y.password="",y.host=null,y.port=null,y.path=[],y.query=null,y.fragment=null,y.cannotBeABaseURL=!1,A=Nw(A,gK,""),A=Nw(A,cK,"$1")),A=Nw(A,lK,""),a=VB(A);k<=a.length;){switch(l=a[k],S){case gE:if(!l||!Yd(bS,l)){if(e)return nb;S=qB;continue}V+=bw(l),S=Iu;break;case Iu:if(l&&(Yd(nK,l)||l==="+"||l==="-"||l==="."))V+=bw(l);else{if(l!==":"){if(e)return nb;V="",S=qB,k=0;continue}if(e&&(y.isSpecial()!==Ab(Hh,V)||V==="file"&&(y.includesCredentials()||y.port!==null)||y.scheme==="file"&&!y.host))return;if(y.scheme=V,e)return void(y.isSpecial()&&Hh[y.scheme]===y.port&&(y.port=null));V="",y.scheme==="file"?S=Vw:y.isSpecial()&&o&&o.scheme===y.scheme?S=kC:y.isSpecial()?S=LS:a[k+1]==="/"?(S=KB,k++):(y.cannotBeABaseURL=!0,Gf(y.path,""),S=US)}break;case qB:if(!o||o.cannotBeABaseURL&&l!=="#")return nb;if(o.cannotBeABaseURL&&l==="#"){y.scheme=o.scheme,y.path=xd(o.path),y.query=o.query,y.fragment="",y.cannotBeABaseURL=!0,S=Hl;break}S=o.scheme==="file"?Vw:Uw;continue;case kC:if(l!=="/"||a[k+1]!=="/"){S=Uw;continue}S=Fw,k++;break;case KB:if(l==="/"){S=Ow;break}S=LC;continue;case Uw:if(y.scheme=o.scheme,l===aE)y.username=o.username,y.password=o.password,y.host=o.host,y.port=o.port,y.path=xd(o.path),y.query=o.query;else if(l==="/"||l==="\\"&&y.isSpecial())S=ZP;else if(l==="?")y.username=o.username,y.password=o.password,y.host=o.host,y.port=o.port,y.path=xd(o.path),y.query="",S=uu;else{if(l!=="#"){y.username=o.username,y.password=o.password,y.host=o.host,y.port=o.port,y.path=xd(o.path),y.path.length--,S=LC;continue}y.username=o.username,y.password=o.password,y.host=o.host,y.port=o.port,y.path=xd(o.path),y.query=o.query,y.fragment="",S=Hl}break;case ZP:if(!y.isSpecial()||l!=="/"&&l!=="\\"){if(l!=="/"){y.username=o.username,y.password=o.password,y.host=o.host,y.port=o.port,S=LC;continue}S=Ow}else S=Fw;break;case LS:if(S=Fw,l!=="/"||ZE(V,k+1)!=="/")continue;k++;break;case Fw:if(l!=="/"&&l!=="\\"){S=Ow;continue}break;case Ow:if(l==="@"){J&&(V="%40"+V),J=!0,d=VB(V);for(var MA=0;MA65535)return kw;y.port=y.isSpecial()&&qe===Hh[y.scheme]?null:qe,V=""}if(e)return;S=Uf;continue}return kw}V+=l;break;case Vw:if(y.scheme="file",l==="/"||l==="\\")S=cb;else{if(!o||o.scheme!=="file"){S=LC;continue}switch(l){case aE:y.host=o.host,y.path=xd(o.path),y.query=o.query;break;case"?":y.host=o.host,y.path=xd(o.path),y.query="",S=uu;break;case"#":y.host=o.host,y.path=xd(o.path),y.query=o.query,y.fragment="",S=Hl;break;default:gb(GS(xd(a,k),""))||(y.host=o.host,y.path=xd(o.path),y.shortenPath()),S=LC;continue}}break;case cb:if(l==="/"||l==="\\"){S=Jw;break}o&&o.scheme==="file"&&!gb(GS(xd(a,k),""))&&(Lf(o.path[0],!0)?Gf(y.path,o.path[0]):y.host=o.host),S=LC;continue;case Jw:if(l===aE||l==="/"||l==="\\"||l==="?"||l==="#"){if(!e&&Lf(V))S=LC;else if(V===""){if(y.host="",e)return;S=Uf}else{if(h=y.parseHost(V))return h;if(y.host==="localhost"&&(y.host=""),e)return;V="",S=Uf}continue}V+=l;break;case Uf:if(y.isSpecial()){if(S=LC,l!=="/"&&l!=="\\")continue}else if(e||l!=="?")if(e||l!=="#"){if(l!==aE&&(S=LC,l!=="/"))continue}else y.fragment="",S=Hl;else y.query="",S=uu;break;case LC:if(l===aE||l==="/"||l==="\\"&&y.isSpecial()||!e&&(l==="?"||l==="#")){if(zP(V)?(y.shortenPath(),l==="/"||l==="\\"&&y.isSpecial()||Gf(y.path,"")):kS(V)?l==="/"||l==="\\"&&y.isSpecial()||Gf(y.path,""):(y.scheme==="file"&&!y.path.length&&Lf(V)&&(y.host&&(y.host=""),V=ZE(V,0)+":"),Gf(y.path,V)),V="",y.scheme==="file"&&(l===aE||l==="?"||l==="#"))for(;y.path.length>1&&y.path[0]==="";)Gw(y.path);l==="?"?(y.query="",S=uu):l==="#"&&(y.fragment="",S=Hl)}else V+=Vd(l,ab);break;case US:l==="?"?(y.query="",S=uu):l==="#"?(y.fragment="",S=Hl):l!==aE&&(y.path[0]+=Vd(l,kf));break;case uu:e||l!=="#"?l!==aE&&(l==="'"&&y.isSpecial()?y.query+="%27":y.query+=l==="#"?"%23":Vd(l,kf)):(y.fragment="",S=Hl);break;case Hl:l!==aE&&(y.fragment+=Vd(l,WP))}k++}},parseHost:function(A){var e,o,a;if(ZE(A,0)==="["){if(ZE(A,A.length-1)!=="]"||(e=function(l){var d,h,y,S,k,V,J,cA=[0,0,0,0,0,0,0,0],CA=0,MA=null,ie=0,pe=function(){return ZE(l,ie)};if(pe()===":"){if(ZE(l,1)!==":")return;ie+=2,MA=++CA}for(;pe();){if(CA===8)return;if(pe()!==":"){for(d=h=0;h<4&&Yd(KP,pe());)d=16*d+Tw(pe(),16),ie++,h++;if(pe()==="."){if(h===0||(ie-=h,CA>6))return;for(y=0;pe();){if(S=null,y>0){if(!(pe()==="."&&y<4))return;ie++}if(!Yd(rb,pe()))return;for(;Yd(rb,pe());){if(k=Tw(pe(),10),S===null)S=k;else{if(S===0)return;S=10*S+k}if(S>255)return;ie++}cA[CA]=256*cA[CA]+S,++y!==2&&y!==4||CA++}if(y!==4)return;break}if(pe()===":"){if(ie++,!pe())return}else if(pe())return;cA[CA++]=d}else{if(MA!==null)return;ie++,MA=++CA}}if(MA!==null)for(V=CA-MA,CA=7;CA!==0&&V>0;)J=cA[CA],cA[CA--]=cA[MA+V-1],cA[MA+--V]=J;else if(CA!==8)return;return cA}(Mp(A,1,-1)),!e))return JB;this.host=e}else if(this.isSpecial()){if(A=$q(A),Yd(jP,A)||(e=function(l){var d,h,y,S,k,V,J,cA=sb(l,".");if(cA.length&&cA[cA.length-1]===""&&cA.length--,(d=cA.length)>4)return l;for(h=[],y=0;y1&&ZE(S,0)==="0"&&(k=Yd(Lw,S)?16:8,S=Mp(S,k===8?1:2)),S==="")V=0;else{if(!Yd(k===10?qP:k===8?rK:KP,S))return l;V=Tw(S,k)}Gf(h,V)}for(y=0;y=JP(256,5-d))return null}else if(V>255)return null;for(J=HP(h),y=0;y1?arguments[1]:void 0,a=eK(e,new Hw(A,!1,o));XG||(e.href=a.serialize(),e.origin=a.getOrigin(),e.protocol=a.getProtocol(),e.username=a.getUsername(),e.password=a.getPassword(),e.host=a.getHost(),e.hostname=a.getHostname(),e.port=a.getPort(),e.pathname=a.getPathname(),e.search=a.getSearch(),e.searchParams=a.getSearchParams(),e.hash=a.getHash())},ql=qh.prototype,Kl=function(A,e){return{get:function(){return _w(this)[A]()},set:e&&function(o){return _w(this)[e](o)},configurable:!0,enumerable:!0}};if(XG&&(zE(ql,"href",Kl("serialize","setHref")),zE(ql,"origin",Kl("getOrigin")),zE(ql,"protocol",Kl("getProtocol","setProtocol")),zE(ql,"username",Kl("getUsername","setUsername")),zE(ql,"password",Kl("getPassword","setPassword")),zE(ql,"host",Kl("getHost","setHost")),zE(ql,"hostname",Kl("getHostname","setHostname")),zE(ql,"port",Kl("getPort","setPort")),zE(ql,"pathname",Kl("getPathname","setPathname")),zE(ql,"search",Kl("getSearch","setSearch")),zE(ql,"searchParams",Kl("getSearchParams")),zE(ql,"hash",Kl("getHash","setHash"))),ww(ql,"toJSON",function(){return _w(this).serialize()},{enumerable:!0}),ww(ql,"toString",function(){return _w(this).serialize()},{enumerable:!0}),Nf){var XP=Nf.createObjectURL,qw=Nf.revokeObjectURL;XP&&ww(qh,"createObjectURL",xP(XP,Nf)),qw&&ww(qh,"revokeObjectURL",xP(qw,Nf))}AK(qh,"URL"),Zq({global:!0,constructor:!0,forced:!PP,sham:!XG},{URL:qh});var $P=tA;_n({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return $P(URL.prototype.toString,this)}});let Ax=!0,Kw=!0;function FS(A,e,o){const a=A.match(e);return a&&a.length>=o&&parseFloat(a[o],10)}function jB(A,e,o){if(!A.RTCPeerConnection)return;const a=A.RTCPeerConnection.prototype,l=a.addEventListener;a.addEventListener=function(h,y){if(h!==e)return l.apply(this,arguments);const S=k=>{const V=o(k);V&&(y.handleEvent?y.handleEvent(V):y(V))};return this._eventMap=this._eventMap||{},this._eventMap[e]||(this._eventMap[e]=new Map),this._eventMap[e].set(y,S),l.apply(this,[h,S])};const d=a.removeEventListener;a.removeEventListener=function(h,y){if(h!==e||!this._eventMap||!this._eventMap[e])return d.apply(this,arguments);if(!this._eventMap[e].has(y))return d.apply(this,arguments);const S=this._eventMap[e].get(y);return this._eventMap[e].delete(y),this._eventMap[e].size===0&&delete this._eventMap[e],Object.keys(this._eventMap).length===0&&delete this._eventMap,d.apply(this,[h,S])},Object.defineProperty(a,"on"+e,{get(){return this["_on"+e]},set(h){this["_on"+e]&&(this.removeEventListener(e,this["_on"+e]),delete this["_on"+e]),h&&this.addEventListener(e,this["_on"+e]=h)},enumerable:!0,configurable:!0})}function ex(A){return typeof A!="boolean"?new Error("Argument type: "+typeof A+". Please use a boolean."):(Ax=A,A?"adapter.js logging disabled":"adapter.js logging enabled")}function IK(A){return typeof A!="boolean"?new Error("Argument type: "+typeof A+". Please use a boolean."):(Kw=!A,"adapter.js deprecation warnings "+(A?"disabled":"enabled"))}function jw(){if(typeof window=="object"){if(Ax)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function OS(A,e){Kw&&console.warn(A+" is deprecated, please use "+e+" instead.")}function lb(A){return Object.prototype.toString.call(A)==="[object Object]"}function Ib(A){return lb(A)?Object.keys(A).reduce(function(e,o){const a=lb(A[o]),l=a?Ib(A[o]):A[o],d=a&&!Object.keys(l).length;return l===void 0||d?e:Object.assign(e,{[o]:l})},{}):A}function ub(A,e,o){e&&!o.has(e.id)&&(o.set(e.id,e),Object.keys(e).forEach(a=>{a.endsWith("Id")?ub(A,A.get(e[a]),o):a.endsWith("Ids")&&e[a].forEach(l=>{ub(A,A.get(l),o)})}))}function tx(A,e,o){const a=o?"outbound-rtp":"inbound-rtp",l=new Map;if(e===null)return l;const d=[];return A.forEach(h=>{h.type==="track"&&h.trackIdentifier===e.id&&d.push(h)}),d.forEach(h=>{A.forEach(y=>{y.type===a&&y.trackId===h.id&&ub(A,y,l)})}),l}const Eb=jw;function ix(A,e){const o=A&&A.navigator;if(!o.mediaDevices)return;const a=function(h){if(typeof h!="object"||h.mandatory||h.optional)return h;const y={};return Object.keys(h).forEach(S=>{if(S==="require"||S==="advanced"||S==="mediaSource")return;const k=typeof h[S]=="object"?h[S]:{ideal:h[S]};k.exact!==void 0&&typeof k.exact=="number"&&(k.min=k.max=k.exact);const V=function(J,cA){return J?J+cA.charAt(0).toUpperCase()+cA.slice(1):cA==="deviceId"?"sourceId":cA};if(k.ideal!==void 0){y.optional=y.optional||[];let J={};typeof k.ideal=="number"?(J[V("min",S)]=k.ideal,y.optional.push(J),J={},J[V("max",S)]=k.ideal,y.optional.push(J)):(J[V("",S)]=k.ideal,y.optional.push(J))}k.exact!==void 0&&typeof k.exact!="number"?(y.mandatory=y.mandatory||{},y.mandatory[V("",S)]=k.exact):["min","max"].forEach(J=>{k[J]!==void 0&&(y.mandatory=y.mandatory||{},y.mandatory[V(J,S)]=k[J])})}),h.advanced&&(y.optional=(y.optional||[]).concat(h.advanced)),y},l=function(h,y){if(e.version>=61)return y(h);if((h=JSON.parse(JSON.stringify(h)))&&typeof h.audio=="object"){const S=function(k,V,J){V in k&&!(J in k)&&(k[J]=k[V],delete k[V])};S((h=JSON.parse(JSON.stringify(h))).audio,"autoGainControl","googAutoGainControl"),S(h.audio,"noiseSuppression","googNoiseSuppression"),h.audio=a(h.audio)}if(h&&typeof h.video=="object"){let S=h.video.facingMode;S=S&&(typeof S=="object"?S:{ideal:S});const k=e.version<66;if(S&&(S.exact==="user"||S.exact==="environment"||S.ideal==="user"||S.ideal==="environment")&&(!o.mediaDevices.getSupportedConstraints||!o.mediaDevices.getSupportedConstraints().facingMode||k)){let V;if(delete h.video.facingMode,S.exact==="environment"||S.ideal==="environment"?V=["back","rear"]:S.exact!=="user"&&S.ideal!=="user"||(V=["front"]),V)return o.mediaDevices.enumerateDevices().then(J=>{J=J.filter(CA=>CA.kind==="videoinput");let cA=J.find(CA=>V.some(MA=>CA.label.toLowerCase().includes(MA)));return!cA&&J.length&&V.includes("back")&&(cA=J[J.length-1]),cA&&(h.video.deviceId=S.exact?{exact:cA.deviceId}:{ideal:cA.deviceId}),h.video=a(h.video),Eb("chrome: "+JSON.stringify(h)),y(h)})}h.video=a(h.video)}return Eb("chrome: "+JSON.stringify(h)),y(h)},d=function(h){return e.version>=64?h:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[h.name]||h.name,message:h.message,constraint:h.constraint||h.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};if(o.getUserMedia=function(h,y,S){l(h,k=>{o.webkitGetUserMedia(k,y,V=>{S&&S(d(V))})})}.bind(o),o.mediaDevices.getUserMedia){const h=o.mediaDevices.getUserMedia.bind(o.mediaDevices);o.mediaDevices.getUserMedia=function(y){return l(y,S=>h(S).then(k=>{if(S.audio&&!k.getAudioTracks().length||S.video&&!k.getVideoTracks().length)throw k.getTracks().forEach(V=>{V.stop()}),new DOMException("","NotFoundError");return k},k=>Promise.reject(d(k))))}}}function ox(A){A.MediaStream=A.MediaStream||A.webkitMediaStream}function sx(A){if(typeof A=="object"&&A.RTCPeerConnection&&!("ontrack"in A.RTCPeerConnection.prototype)){Object.defineProperty(A.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(o){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=o)},enumerable:!0,configurable:!0});const e=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=o=>{o.stream.addEventListener("addtrack",a=>{let l;l=A.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(h=>h.track&&h.track.id===a.track.id):{track:a.track};const d=new Event("track");d.track=a.track,d.receiver=l,d.transceiver={receiver:l},d.streams=[o.stream],this.dispatchEvent(d)}),o.stream.getTracks().forEach(a=>{let l;l=A.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(h=>h.track&&h.track.id===a.id):{track:a};const d=new Event("track");d.track=a,d.receiver=l,d.transceiver={receiver:l},d.streams=[o.stream],this.dispatchEvent(d)})},this.addEventListener("addstream",this._ontrackpoly)),e.apply(this,arguments)}}else jB(A,"track",e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e))}function db(A){if(typeof A=="object"&&A.RTCPeerConnection&&!("getSenders"in A.RTCPeerConnection.prototype)&&"createDTMFSender"in A.RTCPeerConnection.prototype){const e=function(l,d){return{track:d,get dtmf(){return this._dtmf===void 0&&(d.kind==="audio"?this._dtmf=l.createDTMFSender(d):this._dtmf=null),this._dtmf},_pc:l}};if(!A.RTCPeerConnection.prototype.getSenders){A.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const l=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addTrack=function(h,y){let S=l.apply(this,arguments);return S||(S=e(this,h),this._senders.push(S)),S};const d=A.RTCPeerConnection.prototype.removeTrack;A.RTCPeerConnection.prototype.removeTrack=function(h){d.apply(this,arguments);const y=this._senders.indexOf(h);y!==-1&&this._senders.splice(y,1)}}const o=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(l){this._senders=this._senders||[],o.apply(this,[l]),l.getTracks().forEach(d=>{this._senders.push(e(this,d))})};const a=A.RTCPeerConnection.prototype.removeStream;A.RTCPeerConnection.prototype.removeStream=function(l){this._senders=this._senders||[],a.apply(this,[l]),l.getTracks().forEach(d=>{const h=this._senders.find(y=>y.track===d);h&&this._senders.splice(this._senders.indexOf(h),1)})}}else if(typeof A=="object"&&A.RTCPeerConnection&&"getSenders"in A.RTCPeerConnection.prototype&&"createDTMFSender"in A.RTCPeerConnection.prototype&&A.RTCRtpSender&&!("dtmf"in A.RTCRtpSender.prototype)){const e=A.RTCPeerConnection.prototype.getSenders;A.RTCPeerConnection.prototype.getSenders=function(){const o=e.apply(this,[]);return o.forEach(a=>a._pc=this),o},Object.defineProperty(A.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function nx(A){if(!A.RTCPeerConnection)return;const e=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){const[o,a,l]=arguments;if(arguments.length>0&&typeof o=="function")return e.apply(this,arguments);if(e.length===0&&(arguments.length===0||typeof o!="function"))return e.apply(this,[]);const d=function(y){const S={};return y.result().forEach(k=>{const V={id:k.id,timestamp:k.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[k.type]||k.type};k.names().forEach(J=>{V[J]=k.stat(J)}),S[V.id]=V}),S},h=function(y){return new Map(Object.keys(y).map(S=>[S,y[S]]))};if(arguments.length>=2){const y=function(S){a(h(d(S)))};return e.apply(this,[y,o])}return new Promise((y,S)=>{e.apply(this,[function(k){y(h(d(k)))},S])}).then(a,l)}}function Cb(A){if(!(typeof A=="object"&&A.RTCPeerConnection&&A.RTCRtpSender&&A.RTCRtpReceiver))return;if(!("getStats"in A.RTCRtpSender.prototype)){const o=A.RTCPeerConnection.prototype.getSenders;o&&(A.RTCPeerConnection.prototype.getSenders=function(){const l=o.apply(this,[]);return l.forEach(d=>d._pc=this),l});const a=A.RTCPeerConnection.prototype.addTrack;a&&(A.RTCPeerConnection.prototype.addTrack=function(){const l=a.apply(this,arguments);return l._pc=this,l}),A.RTCRtpSender.prototype.getStats=function(){const l=this;return this._pc.getStats().then(d=>tx(d,l.track,!0))}}if(!("getStats"in A.RTCRtpReceiver.prototype)){const o=A.RTCPeerConnection.prototype.getReceivers;o&&(A.RTCPeerConnection.prototype.getReceivers=function(){const a=o.apply(this,[]);return a.forEach(l=>l._pc=this),a}),jB(A,"track",a=>(a.receiver._pc=a.srcElement,a)),A.RTCRtpReceiver.prototype.getStats=function(){const a=this;return this._pc.getStats().then(l=>tx(l,a.track,!1))}}if(!("getStats"in A.RTCRtpSender.prototype)||!("getStats"in A.RTCRtpReceiver.prototype))return;const e=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof A.MediaStreamTrack){const o=arguments[0];let a,l,d;return this.getSenders().forEach(h=>{h.track===o&&(a?d=!0:a=h)}),this.getReceivers().forEach(h=>(h.track===o&&(l?d=!0:l=h),h.track===o)),d||a&&l?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):a?a.getStats():l?l.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return e.apply(this,arguments)}}function rx(A){A.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(d=>this._shimmedLocalStreams[d][0])};const e=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addTrack=function(d,h){if(!h)return e.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const y=e.apply(this,arguments);return this._shimmedLocalStreams[h.id]?this._shimmedLocalStreams[h.id].indexOf(y)===-1&&this._shimmedLocalStreams[h.id].push(y):this._shimmedLocalStreams[h.id]=[h,y],y};const o=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(d){this._shimmedLocalStreams=this._shimmedLocalStreams||{},d.getTracks().forEach(S=>{if(this.getSenders().find(k=>k.track===S))throw new DOMException("Track already exists.","InvalidAccessError")});const h=this.getSenders();o.apply(this,arguments);const y=this.getSenders().filter(S=>h.indexOf(S)===-1);this._shimmedLocalStreams[d.id]=[d].concat(y)};const a=A.RTCPeerConnection.prototype.removeStream;A.RTCPeerConnection.prototype.removeStream=function(d){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[d.id],a.apply(this,arguments)};const l=A.RTCPeerConnection.prototype.removeTrack;A.RTCPeerConnection.prototype.removeTrack=function(d){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},d&&Object.keys(this._shimmedLocalStreams).forEach(h=>{const y=this._shimmedLocalStreams[h].indexOf(d);y!==-1&&this._shimmedLocalStreams[h].splice(y,1),this._shimmedLocalStreams[h].length===1&&delete this._shimmedLocalStreams[h]}),l.apply(this,arguments)}}function ax(A,e){if(!A.RTCPeerConnection)return;if(A.RTCPeerConnection.prototype.addTrack&&e.version>=65)return rx(A);const o=A.RTCPeerConnection.prototype.getLocalStreams;A.RTCPeerConnection.prototype.getLocalStreams=function(){const S=o.apply(this);return this._reverseStreams=this._reverseStreams||{},S.map(k=>this._reverseStreams[k.id])};const a=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(S){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},S.getTracks().forEach(k=>{if(this.getSenders().find(V=>V.track===k))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[S.id]){const k=new A.MediaStream(S.getTracks());this._streams[S.id]=k,this._reverseStreams[k.id]=S,S=k}a.apply(this,[S])};const l=A.RTCPeerConnection.prototype.removeStream;function d(S,k){let V=k.sdp;return Object.keys(S._reverseStreams||[]).forEach(J=>{const cA=S._reverseStreams[J],CA=S._streams[cA.id];V=V.replace(new RegExp(CA.id,"g"),cA.id)}),new RTCSessionDescription({type:k.type,sdp:V})}A.RTCPeerConnection.prototype.removeStream=function(S){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},l.apply(this,[this._streams[S.id]||S]),delete this._reverseStreams[this._streams[S.id]?this._streams[S.id].id:S.id],delete this._streams[S.id]},A.RTCPeerConnection.prototype.addTrack=function(S,k){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const V=[].slice.call(arguments,1);if(V.length!==1||!V[0].getTracks().find(cA=>cA===S))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(cA=>cA.track===S))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const J=this._streams[k.id];if(J)J.addTrack(S),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const cA=new A.MediaStream([S]);this._streams[k.id]=cA,this._reverseStreams[cA.id]=k,this.addStream(cA)}return this.getSenders().find(cA=>cA.track===S)},["createOffer","createAnswer"].forEach(function(S){const k=A.RTCPeerConnection.prototype[S],V={[S](){const J=arguments;return arguments.length&&typeof arguments[0]=="function"?k.apply(this,[cA=>{const CA=d(this,cA);J[0].apply(null,[CA])},cA=>{J[1]&&J[1].apply(null,cA)},arguments[2]]):k.apply(this,arguments).then(cA=>d(this,cA))}};A.RTCPeerConnection.prototype[S]=V[S]});const h=A.RTCPeerConnection.prototype.setLocalDescription;A.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=function(S,k){let V=k.sdp;return Object.keys(S._reverseStreams||[]).forEach(J=>{const cA=S._reverseStreams[J],CA=S._streams[cA.id];V=V.replace(new RegExp(cA.id,"g"),CA.id)}),new RTCSessionDescription({type:k.type,sdp:V})}(this,arguments[0]),h.apply(this,arguments)):h.apply(this,arguments)};const y=Object.getOwnPropertyDescriptor(A.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(A.RTCPeerConnection.prototype,"localDescription",{get(){const S=y.get.apply(this);return S.type===""?S:d(this,S)}}),A.RTCPeerConnection.prototype.removeTrack=function(S){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!S._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(S._pc!==this)throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let k;this._streams=this._streams||{},Object.keys(this._streams).forEach(V=>{this._streams[V].getTracks().find(J=>S.track===J)&&(k=this._streams[V])}),k&&(k.getTracks().length===1?this.removeStream(this._reverseStreams[k.id]):k.removeTrack(S.track),this.dispatchEvent(new Event("negotiationneeded")))}}function PS(A,e){!A.RTCPeerConnection&&A.webkitRTCPeerConnection&&(A.RTCPeerConnection=A.webkitRTCPeerConnection),A.RTCPeerConnection&&e.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(o){const a=A.RTCPeerConnection.prototype[o],l={[o](){return arguments[0]=new(o==="addIceCandidate"?A.RTCIceCandidate:A.RTCSessionDescription)(arguments[0]),a.apply(this,arguments)}};A.RTCPeerConnection.prototype[o]=l[o]})}function gx(A,e){jB(A,"negotiationneeded",o=>{const a=o.target;if(!(e.version<72||a.getConfiguration&&a.getConfiguration().sdpSemantics==="plan-b")||a.signalingState==="stable")return o})}var hb=Object.freeze({__proto__:null,shimMediaStream:ox,shimOnTrack:sx,shimGetSendersWithDtmf:db,shimGetStats:nx,shimSenderReceiverGetStats:Cb,shimAddTrackRemoveTrackWithNative:rx,shimAddTrackRemoveTrack:ax,shimPeerConnection:PS,fixNegotiationNeeded:gx,shimGetUserMedia:ix,shimGetDisplayMedia:function(A,e){A.navigator.mediaDevices&&"getDisplayMedia"in A.navigator.mediaDevices||A.navigator.mediaDevices&&(typeof e=="function"?A.navigator.mediaDevices.getDisplayMedia=function(o){return e(o).then(a=>{const l=o.video&&o.video.width,d=o.video&&o.video.height,h=o.video&&o.video.frameRate;return o.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:a,maxFrameRate:h||3}},l&&(o.video.mandatory.maxWidth=l),d&&(o.video.mandatory.maxHeight=d),A.navigator.mediaDevices.getUserMedia(o)})}:console.error("shimGetDisplayMedia: getSourceId argument is not a function"))}});function cx(A,e){const o=A&&A.navigator,a=A&&A.MediaStreamTrack;if(o.getUserMedia=function(l,d,h){OS("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),o.mediaDevices.getUserMedia(l).then(d,h)},!(e.version>55&&"autoGainControl"in o.mediaDevices.getSupportedConstraints())){const l=function(h,y,S){y in h&&!(S in h)&&(h[S]=h[y],delete h[y])},d=o.mediaDevices.getUserMedia.bind(o.mediaDevices);if(o.mediaDevices.getUserMedia=function(h){return typeof h=="object"&&typeof h.audio=="object"&&(h=JSON.parse(JSON.stringify(h)),l(h.audio,"autoGainControl","mozAutoGainControl"),l(h.audio,"noiseSuppression","mozNoiseSuppression")),d(h)},a&&a.prototype.getSettings){const h=a.prototype.getSettings;a.prototype.getSettings=function(){const y=h.apply(this,arguments);return l(y,"mozAutoGainControl","autoGainControl"),l(y,"mozNoiseSuppression","noiseSuppression"),y}}if(a&&a.prototype.applyConstraints){const h=a.prototype.applyConstraints;a.prototype.applyConstraints=function(y){return this.kind==="audio"&&typeof y=="object"&&(y=JSON.parse(JSON.stringify(y)),l(y,"autoGainControl","mozAutoGainControl"),l(y,"noiseSuppression","mozNoiseSuppression")),h.apply(this,[y])}}}}function lx(A){typeof A=="object"&&A.RTCTrackEvent&&"receiver"in A.RTCTrackEvent.prototype&&!("transceiver"in A.RTCTrackEvent.prototype)&&Object.defineProperty(A.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Ww(A,e){if(typeof A!="object"||!A.RTCPeerConnection&&!A.mozRTCPeerConnection)return;!A.RTCPeerConnection&&A.mozRTCPeerConnection&&(A.RTCPeerConnection=A.mozRTCPeerConnection),e.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(l){const d=A.RTCPeerConnection.prototype[l],h={[l](){return arguments[0]=new(l==="addIceCandidate"?A.RTCIceCandidate:A.RTCSessionDescription)(arguments[0]),d.apply(this,arguments)}};A.RTCPeerConnection.prototype[l]=h[l]});const o={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},a=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){const[l,d,h]=arguments;return a.apply(this,[l||null]).then(y=>{if(e.version<53&&!d)try{y.forEach(S=>{S.type=o[S.type]||S.type})}catch(S){if(S.name!=="TypeError")throw S;y.forEach((k,V)=>{y.set(V,Object.assign({},k,{type:o[k.type]||k.type}))})}return y}).then(d,h)}}function Ix(A){if(typeof A!="object"||!A.RTCPeerConnection||!A.RTCRtpSender||A.RTCRtpSender&&"getStats"in A.RTCRtpSender.prototype)return;const e=A.RTCPeerConnection.prototype.getSenders;e&&(A.RTCPeerConnection.prototype.getSenders=function(){const a=e.apply(this,[]);return a.forEach(l=>l._pc=this),a});const o=A.RTCPeerConnection.prototype.addTrack;o&&(A.RTCPeerConnection.prototype.addTrack=function(){const a=o.apply(this,arguments);return a._pc=this,a}),A.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function Bb(A){if(typeof A!="object"||!A.RTCPeerConnection||!A.RTCRtpSender||A.RTCRtpSender&&"getStats"in A.RTCRtpReceiver.prototype)return;const e=A.RTCPeerConnection.prototype.getReceivers;e&&(A.RTCPeerConnection.prototype.getReceivers=function(){const o=e.apply(this,[]);return o.forEach(a=>a._pc=this),o}),jB(A,"track",o=>(o.receiver._pc=o.srcElement,o)),A.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function ux(A){A.RTCPeerConnection&&!("removeStream"in A.RTCPeerConnection.prototype)&&(A.RTCPeerConnection.prototype.removeStream=function(e){OS("removeStream","removeTrack"),this.getSenders().forEach(o=>{o.track&&e.getTracks().includes(o.track)&&this.removeTrack(o)})})}function Qb(A){A.DataChannel&&!A.RTCDataChannel&&(A.RTCDataChannel=A.DataChannel)}function Ex(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const e=A.RTCPeerConnection.prototype.addTransceiver;e&&(A.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let o=arguments[1]&&arguments[1].sendEncodings;o===void 0&&(o=[]),o=[...o];const a=o.length>0;a&&o.forEach(d=>{if("rid"in d&&!/^[a-z0-9]{0,16}$/i.test(d.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in d&&!(parseFloat(d.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in d&&!(parseFloat(d.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const l=e.apply(this,arguments);if(a){const{sender:d}=l,h=d.getParameters();(!("encodings"in h)||h.encodings.length===1&&Object.keys(h.encodings[0]).length===0)&&(h.encodings=o,d.sendEncodings=o,this.setParametersPromises.push(d.setParameters(h).then(()=>{delete d.sendEncodings}).catch(()=>{delete d.sendEncodings})))}return l})}function dx(A){if(typeof A!="object"||!A.RTCRtpSender)return;const e=A.RTCRtpSender.prototype.getParameters;e&&(A.RTCRtpSender.prototype.getParameters=function(){const o=e.apply(this,arguments);return"encodings"in o||(o.encodings=[].concat(this.sendEncodings||[{}])),o})}function Cx(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const e=A.RTCPeerConnection.prototype.createOffer;A.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>e.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):e.apply(this,arguments)}}function hx(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const e=A.RTCPeerConnection.prototype.createAnswer;A.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>e.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):e.apply(this,arguments)}}var Bx=Object.freeze({__proto__:null,shimOnTrack:lx,shimPeerConnection:Ww,shimSenderGetStats:Ix,shimReceiverGetStats:Bb,shimRemoveStream:ux,shimRTCDataChannel:Qb,shimAddTransceiver:Ex,shimGetParameters:dx,shimCreateOffer:Cx,shimCreateAnswer:hx,shimGetUserMedia:cx,shimGetDisplayMedia:function(A,e){A.navigator.mediaDevices&&"getDisplayMedia"in A.navigator.mediaDevices||A.navigator.mediaDevices&&(A.navigator.mediaDevices.getDisplayMedia=function(o){if(!o||!o.video){const a=new DOMException("getDisplayMedia without video constraints is undefined");return a.name="NotFoundError",a.code=8,Promise.reject(a)}return o.video===!0?o.video={mediaSource:e}:o.video.mediaSource=e,A.navigator.mediaDevices.getUserMedia(o)})}});function Qx(A){if(typeof A=="object"&&A.RTCPeerConnection){if("getLocalStreams"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in A.RTCPeerConnection.prototype)){const e=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addStream=function(o){this._localStreams||(this._localStreams=[]),this._localStreams.includes(o)||this._localStreams.push(o),o.getAudioTracks().forEach(a=>e.call(this,a,o)),o.getVideoTracks().forEach(a=>e.call(this,a,o))},A.RTCPeerConnection.prototype.addTrack=function(o,...a){return a&&a.forEach(l=>{this._localStreams?this._localStreams.includes(l)||this._localStreams.push(l):this._localStreams=[l]}),e.apply(this,arguments)}}"removeStream"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.removeStream=function(e){this._localStreams||(this._localStreams=[]);const o=this._localStreams.indexOf(e);if(o===-1)return;this._localStreams.splice(o,1);const a=e.getTracks();this.getSenders().forEach(l=>{a.includes(l.track)&&this.removeTrack(l)})})}}function px(A){if(typeof A=="object"&&A.RTCPeerConnection&&("getRemoteStreams"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in A.RTCPeerConnection.prototype))){Object.defineProperty(A.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(o){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=o),this.addEventListener("track",this._onaddstreampoly=a=>{a.streams.forEach(l=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(l))return;this._remoteStreams.push(l);const d=new Event("addstream");d.stream=l,this.dispatchEvent(d)})})}});const e=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){const o=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(a){a.streams.forEach(l=>{if(o._remoteStreams||(o._remoteStreams=[]),o._remoteStreams.indexOf(l)>=0)return;o._remoteStreams.push(l);const d=new Event("addstream");d.stream=l,o.dispatchEvent(d)})}),e.apply(o,arguments)}}}function pb(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const e=A.RTCPeerConnection.prototype,o=e.createOffer,a=e.createAnswer,l=e.setLocalDescription,d=e.setRemoteDescription,h=e.addIceCandidate;e.createOffer=function(S,k){const V=arguments.length>=2?arguments[2]:arguments[0],J=o.apply(this,[V]);return k?(J.then(S,k),Promise.resolve()):J},e.createAnswer=function(S,k){const V=arguments.length>=2?arguments[2]:arguments[0],J=a.apply(this,[V]);return k?(J.then(S,k),Promise.resolve()):J};let y=function(S,k,V){const J=l.apply(this,[S]);return V?(J.then(k,V),Promise.resolve()):J};e.setLocalDescription=y,y=function(S,k,V){const J=d.apply(this,[S]);return V?(J.then(k,V),Promise.resolve()):J},e.setRemoteDescription=y,y=function(S,k,V){const J=h.apply(this,[S]);return V?(J.then(k,V),Promise.resolve()):J},e.addIceCandidate=y}function mb(A){const e=A&&A.navigator;if(e.mediaDevices&&e.mediaDevices.getUserMedia){const o=e.mediaDevices,a=o.getUserMedia.bind(o);e.mediaDevices.getUserMedia=l=>a(mx(l))}!e.getUserMedia&&e.mediaDevices&&e.mediaDevices.getUserMedia&&(e.getUserMedia=function(o,a,l){e.mediaDevices.getUserMedia(o).then(a,l)}.bind(e))}function mx(A){return A&&A.video!==void 0?Object.assign({},A,{video:Ib(A.video)}):A}function fx(A){if(!A.RTCPeerConnection)return;const e=A.RTCPeerConnection;A.RTCPeerConnection=function(o,a){if(o&&o.iceServers){const l=[];for(let d=0;de.generateCertificate})}function yx(A){typeof A=="object"&&A.RTCTrackEvent&&"receiver"in A.RTCTrackEvent.prototype&&!("transceiver"in A.RTCTrackEvent.prototype)&&Object.defineProperty(A.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function zw(A){const e=A.RTCPeerConnection.prototype.createOffer;A.RTCPeerConnection.prototype.createOffer=function(o){if(o){o.offerToReceiveAudio!==void 0&&(o.offerToReceiveAudio=!!o.offerToReceiveAudio);const a=this.getTransceivers().find(d=>d.receiver.track.kind==="audio");o.offerToReceiveAudio===!1&&a?a.direction==="sendrecv"?a.setDirection?a.setDirection("sendonly"):a.direction="sendonly":a.direction==="recvonly"&&(a.setDirection?a.setDirection("inactive"):a.direction="inactive"):o.offerToReceiveAudio!==!0||a||this.addTransceiver("audio",{direction:"recvonly"}),o.offerToReceiveVideo!==void 0&&(o.offerToReceiveVideo=!!o.offerToReceiveVideo);const l=this.getTransceivers().find(d=>d.receiver.track.kind==="video");o.offerToReceiveVideo===!1&&l?l.direction==="sendrecv"?l.setDirection?l.setDirection("sendonly"):l.direction="sendonly":l.direction==="recvonly"&&(l.setDirection?l.setDirection("inactive"):l.direction="inactive"):o.offerToReceiveVideo!==!0||l||this.addTransceiver("video",{direction:"recvonly"})}return e.apply(this,arguments)}}function Dx(A){typeof A!="object"||A.AudioContext||(A.AudioContext=A.webkitAudioContext)}var Sx=Object.freeze({__proto__:null,shimLocalStreamsAPI:Qx,shimRemoteStreamsAPI:px,shimCallbacksAPI:pb,shimGetUserMedia:mb,shimConstraints:mx,shimRTCIceServerUrls:fx,shimTrackEventTransceiver:yx,shimCreateOfferLegacy:zw,shimAudioContext:Dx}),Mx={exports:{}};(function(A){const e={generateIdentifier:function(){return Math.random().toString(36).substring(2,12)}};e.localCName=e.generateIdentifier(),e.splitLines=function(o){return o.trim().split(` `).map(a=>a.trim())},e.splitSections=function(o){return o.split(` -m=`).map((a,c)=>(c>0?"m="+a:a).trim()+`\r -`)},e.getDescription=function(o){const a=e.splitSections(o);return a&&a[0]},e.getMediaSections=function(o){const a=e.splitSections(o);return a.shift(),a},e.matchPrefix=function(o,a){return e.splitLines(o).filter(c=>c.indexOf(a)===0)},e.parseCandidate=function(o){let a;a=o.indexOf("a=candidate:")===0?o.substring(12).split(" "):o.substring(10).split(" ");const c={foundation:a[0],component:{1:"rtp",2:"rtcp"}[a[1]]||a[1],protocol:a[2].toLowerCase(),priority:parseInt(a[3],10),ip:a[4],address:a[4],port:parseInt(a[5],10),type:a[7]};for(let d=8;d(l>0?"m="+a:a).trim()+`\r +`)},e.getDescription=function(o){const a=e.splitSections(o);return a&&a[0]},e.getMediaSections=function(o){const a=e.splitSections(o);return a.shift(),a},e.matchPrefix=function(o,a){return e.splitLines(o).filter(l=>l.indexOf(a)===0)},e.parseCandidate=function(o){let a;a=o.indexOf("a=candidate:")===0?o.substring(12).split(" "):o.substring(10).split(" ");const l={foundation:a[0],component:{1:"rtp",2:"rtcp"}[a[1]]||a[1],protocol:a[2].toLowerCase(),priority:parseInt(a[3],10),ip:a[4],address:a[4],port:parseInt(a[5],10),type:a[7]};for(let d=8;d0?a[0].split("/")[1]:"sendrecv",uri:a[1],attributes:a.slice(2).join(" ")}},e.writeExtmap=function(o){return"a=extmap:"+(o.id||o.preferredId)+(o.direction&&o.direction!=="sendrecv"?"/"+o.direction:"")+" "+o.uri+(o.attributes?" "+o.attributes:"")+`\r -`},e.parseFmtp=function(o){const a={};let c;const d=o.substring(o.indexOf(" ")+1).split(";");for(let C=0;C{o.parameters[C]!==void 0?d.push(C+"="+o.parameters[C]):d.push(C)}),a+="a=fmtp:"+c+" "+d.join(";")+`\r -`}return a},e.parseRtcpFb=function(o){const a=o.substring(o.indexOf(" ")+1).split(" ");return{type:a.shift(),parameter:a.join(" ")}},e.writeRtcpFb=function(o){let a="",c=o.payloadType;return o.preferredPayloadType!==void 0&&(c=o.preferredPayloadType),o.rtcpFeedback&&o.rtcpFeedback.length&&o.rtcpFeedback.forEach(d=>{a+="a=rtcp-fb:"+c+" "+d.type+(d.parameter&&d.parameter.length?" "+d.parameter:"")+`\r -`}),a},e.parseSsrcMedia=function(o){const a=o.indexOf(" "),c={ssrc:parseInt(o.substring(7,a),10)},d=o.indexOf(":",a);return d>-1?(c.attribute=o.substring(a+1,d),c.value=o.substring(d+1)):c.attribute=o.substring(a+1),c},e.parseSsrcGroup=function(o){const a=o.substring(13).split(" ");return{semantics:a.shift(),ssrcs:a.map(c=>parseInt(c,10))}},e.getMid=function(o){const a=e.matchPrefix(o,"a=mid:")[0];if(a)return a.substring(6)},e.parseFingerprint=function(o){const a=o.substring(14).split(" ");return{algorithm:a[0].toLowerCase(),value:a[1].toUpperCase()}},e.getDtlsParameters=function(o,a){return{role:"auto",fingerprints:e.matchPrefix(o+a,"a=fingerprint:").map(e.parseFingerprint)}},e.writeDtlsParameters=function(o,a){let c="a=setup:"+a+`\r -`;return o.fingerprints.forEach(d=>{c+="a=fingerprint:"+d.algorithm+" "+d.value+`\r -`}),c},e.parseCryptoLine=function(o){const a=o.substring(9).split(" ");return{tag:parseInt(a[0],10),cryptoSuite:a[1],keyParams:a[2],sessionParams:a.slice(3)}},e.writeCryptoLine=function(o){return"a=crypto:"+o.tag+" "+o.cryptoSuite+" "+(typeof o.keyParams=="object"?e.writeCryptoKeyParams(o.keyParams):o.keyParams)+(o.sessionParams?" "+o.sessionParams.join(" "):"")+`\r -`},e.parseCryptoKeyParams=function(o){if(o.indexOf("inline:")!==0)return null;const a=o.substring(7).split("|");return{keyMethod:"inline",keySalt:a[0],lifeTime:a[1],mkiValue:a[2]?a[2].split(":")[0]:void 0,mkiLength:a[2]?a[2].split(":")[1]:void 0}},e.writeCryptoKeyParams=function(o){return o.keyMethod+":"+o.keySalt+(o.lifeTime?"|"+o.lifeTime:"")+(o.mkiValue&&o.mkiLength?"|"+o.mkiValue+":"+o.mkiLength:"")},e.getCryptoParameters=function(o,a){return e.matchPrefix(o+a,"a=crypto:").map(e.parseCryptoLine)},e.getIceParameters=function(o,a){const c=e.matchPrefix(o+a,"a=ice-ufrag:")[0],d=e.matchPrefix(o+a,"a=ice-pwd:")[0];return c&&d?{usernameFragment:c.substring(12),password:d.substring(10)}:null},e.writeIceParameters=function(o){let a="a=ice-ufrag:"+o.usernameFragment+`\r +`},e.parseFmtp=function(o){const a={};let l;const d=o.substring(o.indexOf(" ")+1).split(";");for(let h=0;h{o.parameters[h]!==void 0?d.push(h+"="+o.parameters[h]):d.push(h)}),a+="a=fmtp:"+l+" "+d.join(";")+`\r +`}return a},e.parseRtcpFb=function(o){const a=o.substring(o.indexOf(" ")+1).split(" ");return{type:a.shift(),parameter:a.join(" ")}},e.writeRtcpFb=function(o){let a="",l=o.payloadType;return o.preferredPayloadType!==void 0&&(l=o.preferredPayloadType),o.rtcpFeedback&&o.rtcpFeedback.length&&o.rtcpFeedback.forEach(d=>{a+="a=rtcp-fb:"+l+" "+d.type+(d.parameter&&d.parameter.length?" "+d.parameter:"")+`\r +`}),a},e.parseSsrcMedia=function(o){const a=o.indexOf(" "),l={ssrc:parseInt(o.substring(7,a),10)},d=o.indexOf(":",a);return d>-1?(l.attribute=o.substring(a+1,d),l.value=o.substring(d+1)):l.attribute=o.substring(a+1),l},e.parseSsrcGroup=function(o){const a=o.substring(13).split(" ");return{semantics:a.shift(),ssrcs:a.map(l=>parseInt(l,10))}},e.getMid=function(o){const a=e.matchPrefix(o,"a=mid:")[0];if(a)return a.substring(6)},e.parseFingerprint=function(o){const a=o.substring(14).split(" ");return{algorithm:a[0].toLowerCase(),value:a[1].toUpperCase()}},e.getDtlsParameters=function(o,a){return{role:"auto",fingerprints:e.matchPrefix(o+a,"a=fingerprint:").map(e.parseFingerprint)}},e.writeDtlsParameters=function(o,a){let l="a=setup:"+a+`\r +`;return o.fingerprints.forEach(d=>{l+="a=fingerprint:"+d.algorithm+" "+d.value+`\r +`}),l},e.parseCryptoLine=function(o){const a=o.substring(9).split(" ");return{tag:parseInt(a[0],10),cryptoSuite:a[1],keyParams:a[2],sessionParams:a.slice(3)}},e.writeCryptoLine=function(o){return"a=crypto:"+o.tag+" "+o.cryptoSuite+" "+(typeof o.keyParams=="object"?e.writeCryptoKeyParams(o.keyParams):o.keyParams)+(o.sessionParams?" "+o.sessionParams.join(" "):"")+`\r +`},e.parseCryptoKeyParams=function(o){if(o.indexOf("inline:")!==0)return null;const a=o.substring(7).split("|");return{keyMethod:"inline",keySalt:a[0],lifeTime:a[1],mkiValue:a[2]?a[2].split(":")[0]:void 0,mkiLength:a[2]?a[2].split(":")[1]:void 0}},e.writeCryptoKeyParams=function(o){return o.keyMethod+":"+o.keySalt+(o.lifeTime?"|"+o.lifeTime:"")+(o.mkiValue&&o.mkiLength?"|"+o.mkiValue+":"+o.mkiLength:"")},e.getCryptoParameters=function(o,a){return e.matchPrefix(o+a,"a=crypto:").map(e.parseCryptoLine)},e.getIceParameters=function(o,a){const l=e.matchPrefix(o+a,"a=ice-ufrag:")[0],d=e.matchPrefix(o+a,"a=ice-pwd:")[0];return l&&d?{usernameFragment:l.substring(12),password:d.substring(10)}:null},e.writeIceParameters=function(o){let a="a=ice-ufrag:"+o.usernameFragment+`\r a=ice-pwd:`+o.password+`\r `;return o.iceLite&&(a+=`a=ice-lite\r -`),a},e.parseRtpParameters=function(o){const a={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},c=e.splitLines(o)[0].split(" ");a.profile=c[2];for(let C=3;C{a.headerExtensions.push(e.parseExtmap(C))});const d=e.matchPrefix(o,"a=rtcp-fb:* ").map(e.parseRtcpFb);return a.codecs.forEach(C=>{d.forEach(y=>{C.rtcpFeedback.find(S=>S.type===y.type&&S.parameter===y.parameter)||C.rtcpFeedback.push(y)})}),a},e.writeRtpDescription=function(o,a){let c="";c+="m="+o+" ",c+=a.codecs.length>0?"9":"0",c+=" "+(a.profile||"UDP/TLS/RTP/SAVPF")+" ",c+=a.codecs.map(C=>C.preferredPayloadType!==void 0?C.preferredPayloadType:C.payloadType).join(" ")+`\r -`,c+=`c=IN IP4 0.0.0.0\r -`,c+=`a=rtcp:9 IN IP4 0.0.0.0\r -`,a.codecs.forEach(C=>{c+=e.writeRtpMap(C),c+=e.writeFmtp(C),c+=e.writeRtcpFb(C)});let d=0;return a.codecs.forEach(C=>{C.maxptime>d&&(d=C.maxptime)}),d>0&&(c+="a=maxptime:"+d+`\r -`),a.headerExtensions&&a.headerExtensions.forEach(C=>{c+=e.writeExtmap(C)}),c},e.parseRtpEncodingParameters=function(o){const a=[],c=e.parseRtpParameters(o),d=c.fecMechanisms.indexOf("RED")!==-1,C=c.fecMechanisms.indexOf("ULPFEC")!==-1,y=e.matchPrefix(o,"a=ssrc:").map(gA=>e.parseSsrcMedia(gA)).filter(gA=>gA.attribute==="cname"),S=y.length>0&&y[0].ssrc;let k;const V=e.matchPrefix(o,"a=ssrc-group:FID").map(gA=>gA.substring(17).split(" ").map(CA=>parseInt(CA,10)));V.length>0&&V[0].length>1&&V[0][0]===S&&(k=V[0][1]),c.codecs.forEach(gA=>{if(gA.name.toUpperCase()==="RTX"&&gA.parameters.apt){let CA={ssrc:S,codecPayloadType:parseInt(gA.parameters.apt,10)};S&&k&&(CA.rtx={ssrc:k}),a.push(CA),d&&(CA=JSON.parse(JSON.stringify(CA)),CA.fec={ssrc:S,mechanism:C?"red+ulpfec":"red"},a.push(CA))}}),a.length===0&&S&&a.push({ssrc:S});let J=e.matchPrefix(o,"b=");return J.length&&(J=J[0].indexOf("b=TIAS:")===0?parseInt(J[0].substring(7),10):J[0].indexOf("b=AS:")===0?1e3*parseInt(J[0].substring(5),10)*.95-16e3:void 0,a.forEach(gA=>{gA.maxBitrate=J})),a},e.parseRtcpParameters=function(o){const a={},c=e.matchPrefix(o,"a=ssrc:").map(y=>e.parseSsrcMedia(y)).filter(y=>y.attribute==="cname")[0];c&&(a.cname=c.value,a.ssrc=c.ssrc);const d=e.matchPrefix(o,"a=rtcp-rsize");a.reducedSize=d.length>0,a.compound=d.length===0;const C=e.matchPrefix(o,"a=rtcp-mux");return a.mux=C.length>0,a},e.writeRtcpParameters=function(o){let a="";return o.reducedSize&&(a+=`a=rtcp-rsize\r +`),a},e.parseRtpParameters=function(o){const a={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},l=e.splitLines(o)[0].split(" ");a.profile=l[2];for(let h=3;h{a.headerExtensions.push(e.parseExtmap(h))});const d=e.matchPrefix(o,"a=rtcp-fb:* ").map(e.parseRtcpFb);return a.codecs.forEach(h=>{d.forEach(y=>{h.rtcpFeedback.find(S=>S.type===y.type&&S.parameter===y.parameter)||h.rtcpFeedback.push(y)})}),a},e.writeRtpDescription=function(o,a){let l="";l+="m="+o+" ",l+=a.codecs.length>0?"9":"0",l+=" "+(a.profile||"UDP/TLS/RTP/SAVPF")+" ",l+=a.codecs.map(h=>h.preferredPayloadType!==void 0?h.preferredPayloadType:h.payloadType).join(" ")+`\r +`,l+=`c=IN IP4 0.0.0.0\r +`,l+=`a=rtcp:9 IN IP4 0.0.0.0\r +`,a.codecs.forEach(h=>{l+=e.writeRtpMap(h),l+=e.writeFmtp(h),l+=e.writeRtcpFb(h)});let d=0;return a.codecs.forEach(h=>{h.maxptime>d&&(d=h.maxptime)}),d>0&&(l+="a=maxptime:"+d+`\r +`),a.headerExtensions&&a.headerExtensions.forEach(h=>{l+=e.writeExtmap(h)}),l},e.parseRtpEncodingParameters=function(o){const a=[],l=e.parseRtpParameters(o),d=l.fecMechanisms.indexOf("RED")!==-1,h=l.fecMechanisms.indexOf("ULPFEC")!==-1,y=e.matchPrefix(o,"a=ssrc:").map(cA=>e.parseSsrcMedia(cA)).filter(cA=>cA.attribute==="cname"),S=y.length>0&&y[0].ssrc;let k;const V=e.matchPrefix(o,"a=ssrc-group:FID").map(cA=>cA.substring(17).split(" ").map(CA=>parseInt(CA,10)));V.length>0&&V[0].length>1&&V[0][0]===S&&(k=V[0][1]),l.codecs.forEach(cA=>{if(cA.name.toUpperCase()==="RTX"&&cA.parameters.apt){let CA={ssrc:S,codecPayloadType:parseInt(cA.parameters.apt,10)};S&&k&&(CA.rtx={ssrc:k}),a.push(CA),d&&(CA=JSON.parse(JSON.stringify(CA)),CA.fec={ssrc:S,mechanism:h?"red+ulpfec":"red"},a.push(CA))}}),a.length===0&&S&&a.push({ssrc:S});let J=e.matchPrefix(o,"b=");return J.length&&(J=J[0].indexOf("b=TIAS:")===0?parseInt(J[0].substring(7),10):J[0].indexOf("b=AS:")===0?1e3*parseInt(J[0].substring(5),10)*.95-16e3:void 0,a.forEach(cA=>{cA.maxBitrate=J})),a},e.parseRtcpParameters=function(o){const a={},l=e.matchPrefix(o,"a=ssrc:").map(y=>e.parseSsrcMedia(y)).filter(y=>y.attribute==="cname")[0];l&&(a.cname=l.value,a.ssrc=l.ssrc);const d=e.matchPrefix(o,"a=rtcp-rsize");a.reducedSize=d.length>0,a.compound=d.length===0;const h=e.matchPrefix(o,"a=rtcp-mux");return a.mux=h.length>0,a},e.writeRtcpParameters=function(o){let a="";return o.reducedSize&&(a+=`a=rtcp-rsize\r `),o.mux&&(a+=`a=rtcp-mux\r `),o.ssrc!==void 0&&o.cname&&(a+="a=ssrc:"+o.ssrc+" cname:"+o.cname+`\r -`),a},e.parseMsid=function(o){let a;const c=e.matchPrefix(o,"a=msid:");if(c.length===1)return a=c[0].substring(7).split(" "),{stream:a[0],track:a[1]};const d=e.matchPrefix(o,"a=ssrc:").map(C=>e.parseSsrcMedia(C)).filter(C=>C.attribute==="msid");return d.length>0?(a=d[0].value.split(" "),{stream:a[0],track:a[1]}):void 0},e.parseSctpDescription=function(o){const a=e.parseMLine(o),c=e.matchPrefix(o,"a=max-message-size:");let d;c.length>0&&(d=parseInt(c[0].substring(19),10)),isNaN(d)&&(d=65536);const C=e.matchPrefix(o,"a=sctp-port:");if(C.length>0)return{port:parseInt(C[0].substring(12),10),protocol:a.fmt,maxMessageSize:d};const y=e.matchPrefix(o,"a=sctpmap:");if(y.length>0){const S=y[0].substring(10).split(" ");return{port:parseInt(S[0],10),protocol:S[1],maxMessageSize:d}}},e.writeSctpDescription=function(o,a){let c=[];return c=o.protocol!=="DTLS/SCTP"?["m="+o.kind+" 9 "+o.protocol+" "+a.protocol+`\r +`),a},e.parseMsid=function(o){let a;const l=e.matchPrefix(o,"a=msid:");if(l.length===1)return a=l[0].substring(7).split(" "),{stream:a[0],track:a[1]};const d=e.matchPrefix(o,"a=ssrc:").map(h=>e.parseSsrcMedia(h)).filter(h=>h.attribute==="msid");return d.length>0?(a=d[0].value.split(" "),{stream:a[0],track:a[1]}):void 0},e.parseSctpDescription=function(o){const a=e.parseMLine(o),l=e.matchPrefix(o,"a=max-message-size:");let d;l.length>0&&(d=parseInt(l[0].substring(19),10)),isNaN(d)&&(d=65536);const h=e.matchPrefix(o,"a=sctp-port:");if(h.length>0)return{port:parseInt(h[0].substring(12),10),protocol:a.fmt,maxMessageSize:d};const y=e.matchPrefix(o,"a=sctpmap:");if(y.length>0){const S=y[0].substring(10).split(" ");return{port:parseInt(S[0],10),protocol:S[1],maxMessageSize:d}}},e.writeSctpDescription=function(o,a){let l=[];return l=o.protocol!=="DTLS/SCTP"?["m="+o.kind+" 9 "+o.protocol+" "+a.protocol+`\r `,`c=IN IP4 0.0.0.0\r `,"a=sctp-port:"+a.port+`\r `]:["m="+o.kind+" 9 "+o.protocol+" "+a.port+`\r `,`c=IN IP4 0.0.0.0\r `,"a=sctpmap:"+a.port+" "+a.protocol+` 65535\r -`],a.maxMessageSize!==void 0&&c.push("a=max-message-size:"+a.maxMessageSize+`\r -`),c.join("")},e.generateSessionId=function(){return Math.random().toString().substr(2,22)},e.writeSessionBoilerplate=function(o,a,c){let d;const C=a!==void 0?a:2;return d=o||e.generateSessionId(),`v=0\r -o=`+(c||"thisisadapterortc")+" "+d+" "+C+` IN IP4 127.0.0.1\r +`],a.maxMessageSize!==void 0&&l.push("a=max-message-size:"+a.maxMessageSize+`\r +`),l.join("")},e.generateSessionId=function(){return Math.random().toString().substr(2,22)},e.writeSessionBoilerplate=function(o,a,l){let d;const h=a!==void 0?a:2;return d=o||e.generateSessionId(),`v=0\r +o=`+(l||"thisisadapterortc")+" "+d+" "+h+` IN IP4 127.0.0.1\r s=-\r t=0 0\r -`},e.getDirection=function(o,a){const c=e.splitLines(o);for(let d=0;d(o.candidate&&Object.defineProperty(o,"candidate",{value:new A.RTCIceCandidate(o.candidate),writable:"false"}),o))}function Cb(A){!A.RTCIceCandidate||A.RTCIceCandidate&&"relayProtocol"in A.RTCIceCandidate.prototype||HB(A,"icecandidate",e=>{if(e.candidate){const o=Jd.parseCandidate(e.candidate.candidate);o.type==="relay"&&(e.candidate.relayProtocol={0:"tls",1:"tcp",2:"udp"}[o.priority>>24])}return e})}function FS(A,e){if(!A.RTCPeerConnection)return;"sctp"in A.RTCPeerConnection.prototype||Object.defineProperty(A.RTCPeerConnection.prototype,"sctp",{get(){return this._sctp===void 0?null:this._sctp}});const o=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,e.browser==="chrome"&&e.version>=76){const{sdpSemantics:a}=this.getConfiguration();a==="plan-b"&&Object.defineProperty(this,"sctp",{get(){return this._sctp===void 0?null:this._sctp},enumerable:!0,configurable:!0})}if(function(a){if(!a||!a.sdp)return!1;const c=Jd.splitSections(a.sdp);return c.shift(),c.some(d=>{const C=Jd.parseMLine(d);return C&&C.kind==="application"&&C.protocol.indexOf("SCTP")!==-1})}(arguments[0])){const a=function(S){const k=S.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(k===null||k.length<2)return-1;const V=parseInt(k[1],10);return V!=V?-1:V}(arguments[0]),c=function(S){let k=65536;return e.browser==="firefox"&&(k=e.version<57?S===-1?16384:2147483637:e.version<60?e.version===57?65535:65536:2147483637),k}(a),d=function(S,k){let V=65536;e.browser==="firefox"&&e.version===57&&(V=65535);const J=Jd.matchPrefix(S.sdp,"a=max-message-size:");return J.length>0?V=parseInt(J[0].substring(19),10):e.browser==="firefox"&&k!==-1&&(V=2147483637),V}(arguments[0],a);let C;C=c===0&&d===0?Number.POSITIVE_INFINITY:c===0||d===0?Math.max(c,d):Math.min(c,d);const y={};Object.defineProperty(y,"maxMessageSize",{get:()=>C}),this._sctp=y}return o.apply(this,arguments)}}function Ww(A){if(!A.RTCPeerConnection||!("createDataChannel"in A.RTCPeerConnection.prototype))return;function e(a,c){const d=a.send;a.send=function(){const C=arguments[0],y=C.length||C.size||C.byteLength;if(a.readyState==="open"&&c.sctp&&y>c.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+c.sctp.maxMessageSize+" bytes)");return d.apply(a,arguments)}}const o=A.RTCPeerConnection.prototype.createDataChannel;A.RTCPeerConnection.prototype.createDataChannel=function(){const a=o.apply(this,arguments);return e(a,this),a},HB(A,"datachannel",a=>(e(a.channel,a.target),a))}function hb(A){if(!A.RTCPeerConnection||"connectionState"in A.RTCPeerConnection.prototype)return;const e=A.RTCPeerConnection.prototype;Object.defineProperty(e,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(e,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(o){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),o&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=o)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(o=>{const a=e[o];e[o]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=c=>{const d=c.target;if(d._lastConnectionState!==d.connectionState){d._lastConnectionState=d.connectionState;const C=new Event("connectionstatechange",c);d.dispatchEvent(C)}return c},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),a.apply(this,arguments)}})}function zw(A,e){if(!A.RTCPeerConnection||e.browser==="chrome"&&e.version>=71||e.browser==="safari"&&e._safariVersion>=13.1)return;const o=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(a){if(a&&a.sdp&&a.sdp.indexOf(` -a=extmap-allow-mixed`)!==-1){const c=a.sdp.split(` +`},e.getDirection=function(o,a){const l=e.splitLines(o);for(let d=0;d(o.candidate&&Object.defineProperty(o,"candidate",{value:new A.RTCIceCandidate(o.candidate),writable:"false"}),o))}function fb(A){!A.RTCIceCandidate||A.RTCIceCandidate&&"relayProtocol"in A.RTCIceCandidate.prototype||jB(A,"icecandidate",e=>{if(e.candidate){const o=Jd.parseCandidate(e.candidate.candidate);o.type==="relay"&&(e.candidate.relayProtocol={0:"tls",1:"tcp",2:"udp"}[o.priority>>24])}return e})}function xS(A,e){if(!A.RTCPeerConnection)return;"sctp"in A.RTCPeerConnection.prototype||Object.defineProperty(A.RTCPeerConnection.prototype,"sctp",{get(){return this._sctp===void 0?null:this._sctp}});const o=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,e.browser==="chrome"&&e.version>=76){const{sdpSemantics:a}=this.getConfiguration();a==="plan-b"&&Object.defineProperty(this,"sctp",{get(){return this._sctp===void 0?null:this._sctp},enumerable:!0,configurable:!0})}if(function(a){if(!a||!a.sdp)return!1;const l=Jd.splitSections(a.sdp);return l.shift(),l.some(d=>{const h=Jd.parseMLine(d);return h&&h.kind==="application"&&h.protocol.indexOf("SCTP")!==-1})}(arguments[0])){const a=function(S){const k=S.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(k===null||k.length<2)return-1;const V=parseInt(k[1],10);return V!=V?-1:V}(arguments[0]),l=function(S){let k=65536;return e.browser==="firefox"&&(k=e.version<57?S===-1?16384:2147483637:e.version<60?e.version===57?65535:65536:2147483637),k}(a),d=function(S,k){let V=65536;e.browser==="firefox"&&e.version===57&&(V=65535);const J=Jd.matchPrefix(S.sdp,"a=max-message-size:");return J.length>0?V=parseInt(J[0].substring(19),10):e.browser==="firefox"&&k!==-1&&(V=2147483637),V}(arguments[0],a);let h;h=l===0&&d===0?Number.POSITIVE_INFINITY:l===0||d===0?Math.max(l,d):Math.min(l,d);const y={};Object.defineProperty(y,"maxMessageSize",{get:()=>h}),this._sctp=y}return o.apply(this,arguments)}}function Xw(A){if(!A.RTCPeerConnection||!("createDataChannel"in A.RTCPeerConnection.prototype))return;function e(a,l){const d=a.send;a.send=function(){const h=arguments[0],y=h.length||h.size||h.byteLength;if(a.readyState==="open"&&l.sctp&&y>l.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+l.sctp.maxMessageSize+" bytes)");return d.apply(a,arguments)}}const o=A.RTCPeerConnection.prototype.createDataChannel;A.RTCPeerConnection.prototype.createDataChannel=function(){const a=o.apply(this,arguments);return e(a,this),a},jB(A,"datachannel",a=>(e(a.channel,a.target),a))}function yb(A){if(!A.RTCPeerConnection||"connectionState"in A.RTCPeerConnection.prototype)return;const e=A.RTCPeerConnection.prototype;Object.defineProperty(e,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(e,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(o){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),o&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=o)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(o=>{const a=e[o];e[o]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=l=>{const d=l.target;if(d._lastConnectionState!==d.connectionState){d._lastConnectionState=d.connectionState;const h=new Event("connectionstatechange",l);d.dispatchEvent(h)}return l},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),a.apply(this,arguments)}})}function $w(A,e){if(!A.RTCPeerConnection||e.browser==="chrome"&&e.version>=71||e.browser==="safari"&&e._safariVersion>=13.1)return;const o=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(a){if(a&&a.sdp&&a.sdp.indexOf(` +a=extmap-allow-mixed`)!==-1){const l=a.sdp.split(` `).filter(d=>d.trim()!=="a=extmap-allow-mixed").join(` -`);A.RTCSessionDescription&&a instanceof A.RTCSessionDescription?arguments[0]=new A.RTCSessionDescription({type:a.type,sdp:c}):a.sdp=c}return o.apply(this,arguments)}}function Zw(A,e){if(!A.RTCPeerConnection||!A.RTCPeerConnection.prototype)return;const o=A.RTCPeerConnection.prototype.addIceCandidate;o&&o.length!==0&&(A.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?(e.browser==="chrome"&&e.version<78||e.browser==="firefox"&&e.version<68||e.browser==="safari")&&arguments[0]&&arguments[0].candidate===""?Promise.resolve():o.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function Xw(A,e){if(!A.RTCPeerConnection||!A.RTCPeerConnection.prototype)return;const o=A.RTCPeerConnection.prototype.setLocalDescription;o&&o.length!==0&&(A.RTCPeerConnection.prototype.setLocalDescription=function(){let a=arguments[0]||{};if(typeof a!="object"||a.type&&a.sdp)return o.apply(this,arguments);if(a={type:a.type,sdp:a.sdp},!a.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":a.type="offer";break;default:a.type="answer"}return a.sdp||a.type!=="offer"&&a.type!=="answer"?o.apply(this,[a]):(a.type==="offer"?this.createOffer:this.createAnswer).apply(this).then(c=>o.apply(this,[c]))})}var Xq=Object.freeze({__proto__:null,shimRTCIceCandidate:jw,shimRTCIceCandidateRelayProtocol:Cb,shimMaxMessageSize:FS,shimSendThrowTypeError:Ww,shimConnectionState:hb,removeExtmapAllowMixed:zw,shimAddIceCandidateNullOrEmpty:Zw,shimParameterlessSetLocalDescription:Xw});(function({window:A}={},e={shimChrome:!0,shimFirefox:!0,shimSafari:!0}){const o=Hw,a=function(d){const C={browser:null,version:null};if(d===void 0||!d.navigator||!d.navigator.userAgent)return C.browser="Not a browser.",C;const{navigator:y}=d;if(y.mozGetUserMedia)C.browser="firefox",C.version=parseInt(kS(y.userAgent,/Firefox\/(\d+)\./,1));else if(y.webkitGetUserMedia||d.isSecureContext===!1&&d.webkitRTCPeerConnection)C.browser="chrome",C.version=parseInt(kS(y.userAgent,/Chrom(e|ium)\/(\d+)\./,2));else{if(!d.RTCPeerConnection||!y.userAgent.match(/AppleWebKit\/(\d+)\./))return C.browser="Not a supported browser.",C;C.browser="safari",C.version=parseInt(kS(y.userAgent,/AppleWebKit\/(\d+)\./,1)),C.supportsUnifiedPlan=d.RTCRtpTransceiver&&"currentDirection"in d.RTCRtpTransceiver.prototype,C._safariVersion=kS(y.userAgent,/Version\/(\d+(\.?\d+))/,1)}return C}(A),c={browserDetails:a,commonShim:Xq,extractVersion:kS,disableLog:HP,disableWarnings:Zq,sdp:Bx};switch(a.browser){case"chrome":if(!lb||!US||!e.shimChrome)return o("Chrome shim is not included in this adapter release."),c;if(a.version===null)return o("Chrome shim can not determine version, not shimming."),c;o("adapter.js shimming chrome."),c.browserShim=lb,Zw(A,a),Xw(A),KP(A,a),jP(A),US(A,a),WP(A),XP(A,a),gb(A),zP(A),cb(A),$P(A,a),jw(A),Cb(A),hb(A),FS(A,a),Ww(A),zw(A,a);break;case"firefox":if(!ax||!qw||!e.shimFirefox)return o("Firefox shim is not included in this adapter release."),c;o("adapter.js shimming firefox."),c.browserShim=ax,Zw(A,a),Xw(A),Ax(A,a),qw(A,a),ex(A),ix(A),tx(A),Ib(A),ub(A),ox(A),sx(A),nx(A),rx(A),jw(A),hb(A),FS(A,a),Ww(A);break;case"safari":if(!dx||!e.shimSafari)return o("Safari shim is not included in this adapter release."),c;o("adapter.js shimming safari."),c.browserShim=dx,Zw(A,a),Xw(A),Ix(A),Kw(A),Eb(A),gx(A),cx(A),ux(A),db(A),Ex(A),jw(A),Cb(A),FS(A,a),Ww(A),zw(A,a);break;default:o("Unsupported browser!")}})({window:typeof window>"u"?void 0:window});var co,Qx=Object.create,OS=Object.defineProperty,$q=Object.defineProperties,$w=Object.getOwnPropertyDescriptor,PS=Object.getOwnPropertyDescriptors,AK=Object.getOwnPropertyNames,A0=Object.getOwnPropertySymbols,px=Object.getPrototypeOf,Bb=Object.prototype.hasOwnProperty,mx=Object.prototype.propertyIsEnumerable,fx=Reflect.get,xS=Math.pow,e0=(A,e,o)=>e in A?OS(A,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):A[e]=o,mi=(A,e)=>{for(var o in e||(e={}))Bb.call(e,o)&&e0(A,o,e[o]);if(A0)for(var o of A0(e))mx.call(e,o)&&e0(A,o,e[o]);return A},Qo=(A,e)=>$q(A,PS(e)),yx=(A,e)=>{var o={};for(var a in A)Bb.call(A,a)&&e.indexOf(a)<0&&(o[a]=A[a]);if(A!=null&&A0)for(var a of A0(A))e.indexOf(a)<0&&mx.call(A,a)&&(o[a]=A[a]);return o},Jh=(A,e)=>()=>(e||A((e={exports:{}}).exports,e),e.exports),Hh=(A,e)=>{for(var o in e)OS(A,o,{get:e[o],enumerable:!0})},gc=(A,e,o)=>(o=A!=null?Qx(px(A)):{},((a,c,d,C)=>{if(c&&typeof c=="object"||typeof c=="function")for(let y of AK(c))!Bb.call(a,y)&&y!==d&&OS(a,y,{get:()=>c[y],enumerable:!(C=$w(c,y))||C.enumerable});return a})(!e&&A&&A.__esModule?o:OS(o,"default",{value:A,enumerable:!0}),A)),Ci=(A,e,o,a)=>{for(var c,d=$w(e,o),C=A.length-1;C>=0;C--)(c=A[C])&&(d=c(e,o,d)||d);return d&&OS(e,o,d),d},Y=(A,e,o)=>e0(A,typeof e!="symbol"?e+"":e,o),NI=(A,e,o)=>fx(px(A),o,e),KA=(A,e,o)=>new Promise((a,c)=>{var d=S=>{try{y(o.next(S))}catch(k){c(k)}},C=S=>{try{y(o.throw(S))}catch(k){c(k)}},y=S=>S.done?a(S.value):Promise.resolve(S.value).then(d,C);y((o=o.apply(A,e)).next())}),Kl=Jh((A,e)=>{var o=Object.prototype.hasOwnProperty,a="~";function c(){}function d(k,V,J){this.fn=k,this.context=V,this.once=J||!1}function C(k,V,J,gA,CA){if(typeof J!="function")throw new TypeError("The listener must be a function");var MA=new d(J,gA||k,CA),$A=a?a+V:V;return k._events[$A]?k._events[$A].fn?k._events[$A]=[k._events[$A],MA]:k._events[$A].push(MA):(k._events[$A]=MA,k._eventsCount++),k}function y(k,V){--k._eventsCount===0?k._events=new c:delete k._events[V]}function S(){this._events=new c,this._eventsCount=0}Object.create&&(c.prototype=Object.create(null),new c().__proto__||(a=!1)),S.prototype.eventNames=function(){var k,V,J=[];if(this._eventsCount===0)return J;for(V in k=this._events)o.call(k,V)&&J.push(a?V.slice(1):V);return Object.getOwnPropertySymbols?J.concat(Object.getOwnPropertySymbols(k)):J},S.prototype.listeners=function(k){var V=a?a+k:k,J=this._events[V];if(!J)return[];if(J.fn)return[J.fn];for(var gA=0,CA=J.length,MA=new Array(CA);gA{var o=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(a){return a.encoding?"rtpmap:%d %s/%s/%s":a.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(a){return a.address!=null?"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(a){return a.subtype!=null?"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(a){return"extmap:%d"+(a.direction?"/%s":"%v")+(a["encrypt-uri"]?" %s":"%v")+" %s"+(a.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(a){return a.sessionConfig!=null?"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(a){var c="candidate:%s %d %s %d %s %d typ %s";return c+=a.raddr!=null?" raddr %s rport %d":"%v%v",c+=a.tcptype!=null?" tcptype %s":"%v",a.generation!=null&&(c+=" generation %d"),c+=a["network-id"]!=null?" network-id %d":"%v",c+=a["network-cost"]!=null?" 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(a){var c="ssrc:%d";return a.attribute!=null&&(c+=" %s",a.value!=null&&(c+=":%s")),c}},{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(a){return a.maxMessageSize!=null?"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(a){return a.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(a){return"imageattr:%s %s %s"+(a.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(a){return"simulcast:%s %s"+(a.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(a){return"ts-refclk:%s"+(a.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(a){var c="mediaclk:";return c+=a.id!=null?"id=%s %s":"%v%s",c+=a.mediaClockValue!=null?"=%s":"",c+=a.rateNumerator!=null?" rate=%s":"",c+=a.rateDenominator!=null?"/%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(o).forEach(function(a){o[a].forEach(function(c){c.reg||(c.reg=/(.*)/),c.format||(c.format="%s")})})}),kf=Jh(A=>{var e=function(C){return String(Number(C))===C?Number(C):C},o=function(C,y,S){var k=C.name&&C.names;C.push&&!y[C.push]?y[C.push]=[]:k&&!y[C.name]&&(y[C.name]={});var V=C.push?{}:k?y[C.name]:y;(function(J,gA,CA,MA){if(MA&&!CA)gA[MA]=e(J[1]);else for(var $A=0;$A1&&(C[S[0]]=void 0),C};A.parseParams=function(C){return C.split(/;\s?/).reduce(d,{})},A.parseFmtpConfig=A.parseParams,A.parsePayloads=function(C){return C.toString().split(" ").map(Number)},A.parseRemoteCandidates=function(C){for(var y=[],S=C.split(" ").map(e),k=0;k{var o=bC(),a=/%[sdv%]/g,c=function(S){var k=1,V=arguments,J=V.length;return S.replace(a,function(gA){if(k>=J)return gA;var CA=V[k];switch(k+=1,gA){case"%%":return"%";case"%s":return String(CA);case"%d":return Number(CA);case"%v":return""}})},d=function(S,k,V){var J=[S+"="+(k.format instanceof Function?k.format(k.push?V:V[k.name]):k.format)];if(k.names)for(var gA=0;gAo.apply(this,[l]))})}var uK=Object.freeze({__proto__:null,shimRTCIceCandidate:Zw,shimRTCIceCandidateRelayProtocol:fb,shimMaxMessageSize:xS,shimSendThrowTypeError:Xw,shimConnectionState:yb,removeExtmapAllowMixed:$w,shimAddIceCandidateNullOrEmpty:A0,shimParameterlessSetLocalDescription:e0});(function({window:A}={},e={shimChrome:!0,shimFirefox:!0,shimSafari:!0}){const o=jw,a=function(d){const h={browser:null,version:null};if(d===void 0||!d.navigator||!d.navigator.userAgent)return h.browser="Not a browser.",h;const{navigator:y}=d;if(y.mozGetUserMedia)h.browser="firefox",h.version=parseInt(FS(y.userAgent,/Firefox\/(\d+)\./,1));else if(y.webkitGetUserMedia||d.isSecureContext===!1&&d.webkitRTCPeerConnection)h.browser="chrome",h.version=parseInt(FS(y.userAgent,/Chrom(e|ium)\/(\d+)\./,2));else{if(!d.RTCPeerConnection||!y.userAgent.match(/AppleWebKit\/(\d+)\./))return h.browser="Not a supported browser.",h;h.browser="safari",h.version=parseInt(FS(y.userAgent,/AppleWebKit\/(\d+)\./,1)),h.supportsUnifiedPlan=d.RTCRtpTransceiver&&"currentDirection"in d.RTCRtpTransceiver.prototype,h._safariVersion=FS(y.userAgent,/Version\/(\d+(\.?\d+))/,1)}return h}(A),l={browserDetails:a,commonShim:uK,extractVersion:FS,disableLog:ex,disableWarnings:IK,sdp:Rx};switch(a.browser){case"chrome":if(!hb||!PS||!e.shimChrome)return o("Chrome shim is not included in this adapter release."),l;if(a.version===null)return o("Chrome shim can not determine version, not shimming."),l;o("adapter.js shimming chrome."),l.browserShim=hb,A0(A,a),e0(A),ix(A,a),ox(A),PS(A,a),sx(A),ax(A,a),db(A),nx(A),Cb(A),gx(A,a),Zw(A),fb(A),yb(A),xS(A,a),Xw(A),$w(A,a);break;case"firefox":if(!Bx||!Ww||!e.shimFirefox)return o("Firefox shim is not included in this adapter release."),l;o("adapter.js shimming firefox."),l.browserShim=Bx,A0(A,a),e0(A),cx(A,a),Ww(A,a),lx(A),ux(A),Ix(A),Bb(A),Qb(A),Ex(A),dx(A),Cx(A),hx(A),Zw(A),yb(A),xS(A,a),Xw(A);break;case"safari":if(!Sx||!e.shimSafari)return o("Safari shim is not included in this adapter release."),l;o("adapter.js shimming safari."),l.browserShim=Sx,A0(A,a),e0(A),fx(A),zw(A),pb(A),Qx(A),px(A),yx(A),mb(A),Dx(A),Zw(A),fb(A),xS(A,a),Xw(A),$w(A,a);break;default:o("Unsupported browser!")}})({window:typeof window>"u"?void 0:window});var lo,_x=Object.create,YS=Object.defineProperty,EK=Object.defineProperties,t0=Object.getOwnPropertyDescriptor,VS=Object.getOwnPropertyDescriptors,dK=Object.getOwnPropertyNames,i0=Object.getOwnPropertySymbols,Tx=Object.getPrototypeOf,Db=Object.prototype.hasOwnProperty,Nx=Object.prototype.propertyIsEnumerable,Gx=Reflect.get,JS=Math.pow,o0=(A,e,o)=>e in A?YS(A,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):A[e]=o,fi=(A,e)=>{for(var o in e||(e={}))Db.call(e,o)&&o0(A,o,e[o]);if(i0)for(var o of i0(e))Nx.call(e,o)&&o0(A,o,e[o]);return A},po=(A,e)=>EK(A,VS(e)),bx=(A,e)=>{var o={};for(var a in A)Db.call(A,a)&&e.indexOf(a)<0&&(o[a]=A[a]);if(A!=null&&i0)for(var a of i0(A))e.indexOf(a)<0&&Nx.call(A,a)&&(o[a]=A[a]);return o},Kh=(A,e)=>()=>(e||A((e={exports:{}}).exports,e),e.exports),jh=(A,e)=>{for(var o in e)YS(A,o,{get:e[o],enumerable:!0})},gc=(A,e,o)=>(o=A!=null?_x(Tx(A)):{},((a,l,d,h)=>{if(l&&typeof l=="object"||typeof l=="function")for(let y of dK(l))!Db.call(a,y)&&y!==d&&YS(a,y,{get:()=>l[y],enumerable:!(h=t0(l,y))||h.enumerable});return a})(!e&&A&&A.__esModule?o:YS(o,"default",{value:A,enumerable:!0}),A)),hi=(A,e,o,a)=>{for(var l,d=t0(e,o),h=A.length-1;h>=0;h--)(l=A[h])&&(d=l(e,o,d)||d);return d&&YS(e,o,d),d},Y=(A,e,o)=>o0(A,typeof e!="symbol"?e+"":e,o),GI=(A,e,o)=>Gx(Tx(A),o,e),WA=(A,e,o)=>new Promise((a,l)=>{var d=S=>{try{y(o.next(S))}catch(k){l(k)}},h=S=>{try{y(o.throw(S))}catch(k){l(k)}},y=S=>S.done?a(S.value):Promise.resolve(S.value).then(d,h);y((o=o.apply(A,e)).next())}),jl=Kh((A,e)=>{var o=Object.prototype.hasOwnProperty,a="~";function l(){}function d(k,V,J){this.fn=k,this.context=V,this.once=J||!1}function h(k,V,J,cA,CA){if(typeof J!="function")throw new TypeError("The listener must be a function");var MA=new d(J,cA||k,CA),ie=a?a+V:V;return k._events[ie]?k._events[ie].fn?k._events[ie]=[k._events[ie],MA]:k._events[ie].push(MA):(k._events[ie]=MA,k._eventsCount++),k}function y(k,V){--k._eventsCount===0?k._events=new l:delete k._events[V]}function S(){this._events=new l,this._eventsCount=0}Object.create&&(l.prototype=Object.create(null),new l().__proto__||(a=!1)),S.prototype.eventNames=function(){var k,V,J=[];if(this._eventsCount===0)return J;for(V in k=this._events)o.call(k,V)&&J.push(a?V.slice(1):V);return Object.getOwnPropertySymbols?J.concat(Object.getOwnPropertySymbols(k)):J},S.prototype.listeners=function(k){var V=a?a+k:k,J=this._events[V];if(!J)return[];if(J.fn)return[J.fn];for(var cA=0,CA=J.length,MA=new Array(CA);cA{var o=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(a){return a.encoding?"rtpmap:%d %s/%s/%s":a.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(a){return a.address!=null?"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(a){return a.subtype!=null?"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(a){return"extmap:%d"+(a.direction?"/%s":"%v")+(a["encrypt-uri"]?" %s":"%v")+" %s"+(a.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(a){return a.sessionConfig!=null?"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(a){var l="candidate:%s %d %s %d %s %d typ %s";return l+=a.raddr!=null?" raddr %s rport %d":"%v%v",l+=a.tcptype!=null?" tcptype %s":"%v",a.generation!=null&&(l+=" generation %d"),l+=a["network-id"]!=null?" network-id %d":"%v",l+=a["network-cost"]!=null?" 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(a){var l="ssrc:%d";return a.attribute!=null&&(l+=" %s",a.value!=null&&(l+=":%s")),l}},{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(a){return a.maxMessageSize!=null?"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(a){return a.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(a){return"imageattr:%s %s %s"+(a.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(a){return"simulcast:%s %s"+(a.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(a){return"ts-refclk:%s"+(a.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(a){var l="mediaclk:";return l+=a.id!=null?"id=%s %s":"%v%s",l+=a.mediaClockValue!=null?"=%s":"",l+=a.rateNumerator!=null?" rate=%s":"",l+=a.rateDenominator!=null?"/%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(o).forEach(function(a){o[a].forEach(function(l){l.reg||(l.reg=/(.*)/),l.format||(l.format="%s")})})}),Ff=Kh(A=>{var e=function(h){return String(Number(h))===h?Number(h):h},o=function(h,y,S){var k=h.name&&h.names;h.push&&!y[h.push]?y[h.push]=[]:k&&!y[h.name]&&(y[h.name]={});var V=h.push?{}:k?y[h.name]:y;(function(J,cA,CA,MA){if(MA&&!CA)cA[MA]=e(J[1]);else for(var ie=0;ie1&&(h[S[0]]=void 0),h};A.parseParams=function(h){return h.split(/;\s?/).reduce(d,{})},A.parseFmtpConfig=A.parseParams,A.parsePayloads=function(h){return h.toString().split(" ").map(Number)},A.parseRemoteCandidates=function(h){for(var y=[],S=h.split(" ").map(e),k=0;k{var o=UC(),a=/%[sdv%]/g,l=function(S){var k=1,V=arguments,J=V.length;return S.replace(a,function(cA){if(k>=J)return cA;var CA=V[k];switch(k+=1,cA){case"%%":return"%";case"%s":return String(CA);case"%d":return Number(CA);case"%v":return""}})},d=function(S,k,V){var J=[S+"="+(k.format instanceof Function?k.format(k.push?V:V[k.name]):k.format)];if(k.names)for(var cA=0;cA{var e=kf(),o=eK(),a=bC();A.grammar=a,A.write=o,A.parse=e.parse,A.parseParams=e.parseParams,A.parseFmtpConfig=e.parseFmtpConfig,A.parsePayloads=e.parsePayloads,A.parseRemoteCandidates=e.parseRemoteCandidates,A.parseImageAttributes=e.parseImageAttributes,A.parseSimulcastStreamList=e.parseSimulcastStreamList}),YS=Jh((A,e)=>{var o=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(a){return a.encoding?"rtpmap:%d %s/%s/%s":a.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(a){return a.address!=null?"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(a){return a.subtype!=null?"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(a){return"extmap:%d"+(a.direction?"/%s":"%v")+(a["encrypt-uri"]?" %s":"%v")+" %s"+(a.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(a){return a.sessionConfig!=null?"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(a){var c="candidate:%s %d %s %d %s %d typ %s";return c+=a.raddr!=null?" raddr %s rport %d":"%v%v",c+=a.tcptype!=null?" tcptype %s":"%v",a.generation!=null&&(c+=" generation %d"),c+=a["network-id"]!=null?" network-id %d":"%v",c+=a["network-cost"]!=null?" 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(a){var c="ssrc:%d";return a.attribute!=null&&(c+=" %s",a.value!=null&&(c+=":%s")),c}},{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(a){return a.maxMessageSize!=null?"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(a){return a.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(a){return"imageattr:%s %s %s"+(a.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(a){return"simulcast:%s %s"+(a.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(a){return"ts-refclk:%s"+(a.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(a){var c="mediaclk:";return c+=a.id!=null?"id=%s %s":"%v%s",c+=a.mediaClockValue!=null?"=%s":"",c+=a.rateNumerator!=null?" rate=%s":"",c+=a.rateDenominator!=null?"/%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(o).forEach(function(a){o[a].forEach(function(c){c.reg||(c.reg=/(.*)/),c.format||(c.format="%s")})})}),Dx=Jh(A=>{var e=function(C){return String(Number(C))===C?Number(C):C},o=function(C,y,S){var k=C.name&&C.names;C.push&&!y[C.push]?y[C.push]=[]:k&&!y[C.name]&&(y[C.name]={});var V=C.push?{}:k?y[C.name]:y;(function(J,gA,CA,MA){if(MA&&!CA)gA[MA]=e(J[1]);else for(var $A=0;$A1&&(C[S[0]]=void 0),C};A.parseParams=function(C){return C.split(/;\s?/).reduce(d,{})},A.parseFmtpConfig=A.parseParams,A.parsePayloads=function(C){return C.toString().split(" ").map(Number)},A.parseRemoteCandidates=function(C){for(var y=[],S=C.split(" ").map(e),k=0;k{var o=YS(),a=/%[sdv%]/g,c=function(S){var k=1,V=arguments,J=V.length;return S.replace(a,function(gA){if(k>=J)return gA;var CA=V[k];switch(k+=1,gA){case"%%":return"%";case"%s":return String(CA);case"%d":return Number(CA);case"%v":return""}})},d=function(S,k,V){var J=[S+"="+(k.format instanceof Function?k.format(k.push?V:V[k.name]):k.format)];if(k.names)for(var gA=0;gA{var e=Ff(),o=CK(),a=UC();A.grammar=a,A.write=o,A.parse=e.parse,A.parseParams=e.parseParams,A.parseFmtpConfig=e.parseFmtpConfig,A.parsePayloads=e.parsePayloads,A.parseRemoteCandidates=e.parseRemoteCandidates,A.parseImageAttributes=e.parseImageAttributes,A.parseSimulcastStreamList=e.parseSimulcastStreamList}),HS=Kh((A,e)=>{var o=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(a){return a.encoding?"rtpmap:%d %s/%s/%s":a.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(a){return a.address!=null?"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(a){return a.subtype!=null?"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(a){return"extmap:%d"+(a.direction?"/%s":"%v")+(a["encrypt-uri"]?" %s":"%v")+" %s"+(a.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(a){return a.sessionConfig!=null?"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(a){var l="candidate:%s %d %s %d %s %d typ %s";return l+=a.raddr!=null?" raddr %s rport %d":"%v%v",l+=a.tcptype!=null?" tcptype %s":"%v",a.generation!=null&&(l+=" generation %d"),l+=a["network-id"]!=null?" network-id %d":"%v",l+=a["network-cost"]!=null?" 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(a){var l="ssrc:%d";return a.attribute!=null&&(l+=" %s",a.value!=null&&(l+=":%s")),l}},{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(a){return a.maxMessageSize!=null?"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(a){return a.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(a){return"imageattr:%s %s %s"+(a.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(a){return"simulcast:%s %s"+(a.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(a){return"ts-refclk:%s"+(a.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(a){var l="mediaclk:";return l+=a.id!=null?"id=%s %s":"%v%s",l+=a.mediaClockValue!=null?"=%s":"",l+=a.rateNumerator!=null?" rate=%s":"",l+=a.rateDenominator!=null?"/%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(o).forEach(function(a){o[a].forEach(function(l){l.reg||(l.reg=/(.*)/),l.format||(l.format="%s")})})}),kx=Kh(A=>{var e=function(h){return String(Number(h))===h?Number(h):h},o=function(h,y,S){var k=h.name&&h.names;h.push&&!y[h.push]?y[h.push]=[]:k&&!y[h.name]&&(y[h.name]={});var V=h.push?{}:k?y[h.name]:y;(function(J,cA,CA,MA){if(MA&&!CA)cA[MA]=e(J[1]);else for(var ie=0;ie1&&(h[S[0]]=void 0),h};A.parseParams=function(h){return h.split(/;\s?/).reduce(d,{})},A.parseFmtpConfig=A.parseParams,A.parsePayloads=function(h){return h.toString().split(" ").map(Number)},A.parseRemoteCandidates=function(h){for(var y=[],S=h.split(" ").map(e),k=0;k{var o=HS(),a=/%[sdv%]/g,l=function(S){var k=1,V=arguments,J=V.length;return S.replace(a,function(cA){if(k>=J)return cA;var CA=V[k];switch(k+=1,cA){case"%%":return"%";case"%s":return String(CA);case"%d":return Number(CA);case"%v":return""}})},d=function(S,k,V){var J=[S+"="+(k.format instanceof Function?k.format(k.push?V:V[k.name]):k.format)];if(k.names)for(var cA=0;cA{var e=Dx(),o=Sx();A.write=o,A.parse=e.parse,A.parseParams=e.parseParams,A.parseFmtpConfig=e.parseFmtpConfig,A.parsePayloads=e.parsePayloads,A.parseRemoteCandidates=e.parseRemoteCandidates,A.parseImageAttributes=e.parseImageAttributes,A.parseSimulcastStreamList=e.parseSimulcastStreamList}),iK=gc(Kl()),qB=((co=qB||{})[co.INVALID_PARAMETER=4096]="INVALID_PARAMETER",co[co.INVALID_OPERATION=4097]="INVALID_OPERATION",co[co.NOT_SUPPORTED=4098]="NOT_SUPPORTED",co[co.DEVICE_NOT_FOUND=4099]="DEVICE_NOT_FOUND",co[co.INITIALIZE_FAILED=4100]="INITIALIZE_FAILED",co[co.SIGNAL_CHANNEL_SETUP_FAILED=16385]="SIGNAL_CHANNEL_SETUP_FAILED",co[co.SIGNAL_CHANNEL_ERROR=16386]="SIGNAL_CHANNEL_ERROR",co[co.ICE_TRANSPORT_ERROR=16387]="ICE_TRANSPORT_ERROR",co[co.JOIN_ROOM_FAILED=16388]="JOIN_ROOM_FAILED",co[co.CREATE_OFFER_FAILED=16389]="CREATE_OFFER_FAILED",co[co.SIGNAL_CHANNEL_RECONNECTION_FAILED=16390]="SIGNAL_CHANNEL_RECONNECTION_FAILED",co[co.UPLINK_RECONNECTION_FAILED=16391]="UPLINK_RECONNECTION_FAILED",co[co.DOWNLINK_RECONNECTION_FAILED=16392]="DOWNLINK_RECONNECTION_FAILED",co[co.REMOTE_STREAM_NOT_EXIST=16400]="REMOTE_STREAM_NOT_EXIST",co[co.CLIENT_BANNED=16448]="CLIENT_BANNED",co[co.SERVER_TIMEOUT=16449]="SERVER_TIMEOUT",co[co.SUBSCRIPTION_TIMEOUT=16450]="SUBSCRIPTION_TIMEOUT",co[co.PLAY_NOT_ALLOWED=16451]="PLAY_NOT_ALLOWED",co[co.DEVICE_AUTO_RECOVER_FAILED=16452]="DEVICE_AUTO_RECOVER_FAILED",co[co.START_PUBLISH_CDN_FAILED=16453]="START_PUBLISH_CDN_FAILED",co[co.STOP_PUBLISH_CDN_FAILED=16454]="STOP_PUBLISH_CDN_FAILED",co[co.START_MIX_TRANSCODE_FAILED=16455]="START_MIX_TRANSCODE_FAILED",co[co.STOP_MIX_TRANSCODE_FAILED=16456]="STOP_MIX_TRANSCODE_FAILED",co[co.NOT_SUPPORTED_H264=16457]="NOT_SUPPORTED_H264",co[co.SWITCH_ROLE_FAILED=16458]="SWITCH_ROLE_FAILED",co[co.API_CALL_TIMEOUT=16459]="API_CALL_TIMEOUT",co[co.SCHEDULE_FAILED=16460]="SCHEDULE_FAILED",co[co.API_CALL_ABORTED=16461]="API_CALL_ABORTED",co[co.SPC_INITIALIZED_FAILED=16462]="SPC_INITIALIZED_FAILED",co[co.VIDEO_MANAGER_ERROR=16463]="VIDEO_MANAGER_ERROR",co[co.SWITCH_ROOM_FAILED=16464]="SWITCH_ROOM_FAILED",co[co.VIDEO_ENCODE_FAILED=16465]="VIDEO_ENCODE_FAILED",co[co.AUDIO_ENCODE_FAILED=16466]="AUDIO_ENCODE_FAILED",co[co.UNKNOWN=65535]="UNKNOWN",co),dt=qB,Mx=class extends Error{constructor(A){let{name:e="RtcError",message:o,code:a=dt.UNKNOWN,extraCode:c=0,constraint:d}=A,C="<".concat(function(S){for(let k in dt)if(dt[k]===S)return k;return"UNKNOWN"}(a)," 0x").concat(a.toString(16),">"),y="".concat(o).concat(d?" constraint: ".concat(d):"").concat(o!=null&&o.includes(C)?"":" ".concat(C));super(y),Y(this,"code"),Y(this,"extraCode"),Y(this,"message"),Y(this,"originMessage"),Y(this,"name"),Y(this,"constraint"),this.code=a,this.extraCode=c,this.name=e,this.message=y,this.constraint=d,this.originMessage=o}getCode(){return this.code}getExtraCode(){return this.extraCode}toString(){return this.originMessage}},ai=Mx,pb=0,vx=!0,KB=function(A){pb=A;let e=new Date;e.setTime(e.getTime()+A),QA[vx?"info":"debug"]("baseTime from server: ".concat(e," offset: ").concat(A)),vx=!1},Rx=function(){return pb},Lf=function(){return Date.now()+pb},_x=function(){let A=new Date;return A.setTime(Lf()),A.toLocaleString()},mb=function(A){let e=String(A.getMilliseconds());return"padStart"in String.prototype&&(e=e.toString().padStart(3,"0")),"".concat(A.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/,"$1"),":").concat(e)},Hd={};Hh(Hd,{REPORT_TYPE:()=>_0,buildSSOPackage:()=>AQ,bytes2ms:()=>y0,calculateScaleResolutionDownNumber:()=>w0,concatArrayBuffers:()=>aM,convertObjectNumberToInt:()=>R0,copyProperties:()=>A2,deepClone:()=>zf,deepCloneBasic:()=>Zf,deepMerge:()=>Wh,delay:()=>LC,fibonacci:()=>Kf,formatedTime:()=>a2,getConstructorName:()=>iM,getContainerFromElement:()=>Jb,getEnv:()=>Zx,getFirst16Bits:()=>c2,getInternalVersion:()=>n2,getLast16Bits:()=>T0,getLoggerUrl:()=>Hf,getMediaStreamTrackInfo:()=>Wb,getMuteStateFromFlag:()=>wp,getNetworkType:()=>m0,getNumNetworkType:()=>qf,getReconnectionTimeout:()=>Rp,getStringByteLength:()=>v0,getTestSignalDomain:()=>Xx,getTurnServer:()=>r2,getUint32Version:()=>qb,getValueType:()=>Cg,getViewListFromView:()=>nM,glog:()=>t2,ipv4ToUint32:()=>sM,isArray:()=>wa,isAudioWorkletSupported:()=>i2,isBoolean:()=>Nr,isConstructor:()=>Wf,isEmpty:()=>S0,isFunction:()=>Ra,isLangChinese:()=>Wd,isMediaStreamTrack:()=>Yb,isNumber:()=>bn,isObject:()=>$E,isOverseaSdkAppId:()=>Kd,isPlainObject:()=>lE,isPortrait:()=>Hb,isPromise:()=>jf,isRemoteTrack:()=>Vb,isRotate90Or270:()=>$B,isSetSinkIdSupported:()=>o2,isString:()=>Yn,isUndefined:()=>Je,isVideoMixerOutputTrack:()=>_p,loadImage:()=>rM,loadVideo:()=>g2,ms2bytes:()=>e2,ms2samples:()=>D0,normalizeUrl:()=>jb,performanceNow:()=>ko,promiseAny:()=>oM,samples2ms:()=>xb,setNetworkTypeFromWebRTC:()=>f0,stringify:()=>zd,stringifyIncludeValue:()=>M0,throttlePromise:()=>Kb});var Tx={};Hh(Tx,{ASR_ROBOT_FROM_TYPE:()=>d0,AUDIO_MUTE_BIT:()=>Of,AUDIO_STAT_BIT:()=>jS,AUX_STAT_BIT:()=>KS,AUX_STREAM_MSID:()=>Fx,BACKEND_ENV:()=>Uf,BASE_DOC_URL:()=>qh,BASE_HOST:()=>Gx,CAPABILITIES_KEYS:()=>Gb,CLASS_NAME:()=>IK,CLOUD_CONSOLE_URL:()=>nK,CROSS_ROOM_BIT:()=>vb,DATA_CHANNEL_FROM_TYPE_BIT:()=>zB,DATA_FREEZE_TIMING:()=>Tb,DOC_BILLING_CN:()=>s0,DOC_BILLING_OVERSEA:()=>Db,DOC_URL:()=>rK,DTLS_STATE_UNKNOWN:()=>Kh,ENV_NAME:()=>jB,EXCHANGE_SDP_TIMEOUT:()=>Vx,IS_WORKER:()=>i0,IS_WORKLET:()=>o0,KIBANA_EVENT:()=>Ja,LOCAL_STREAM_PUBLISH_STATE:()=>Jx,LOGGER_CMD_TYPE:()=>bI,LOGGER_DOMAIN:()=>GI,LOGGER_DOMAIN_OVERSEA:()=>Dp,LOG_LEVEL:()=>WB,LOG_LEVEL_NAME:()=>EK,MAIN_STREAM_MSID:()=>uu,MAX_RTT:()=>E0,MICROPHONE_COMMUNICATIONS:()=>uK,MICROPHONE_DEFAULT:()=>ZS,MUTE_ALL_BIT:()=>Ux,NAME:()=>YA,NETWORK_TYPE:()=>n0,NOT_SUPPORTED_H264:()=>I0,PAUSED_RETRY_COUNT:()=>vp,PEERCONNECTION_CONNECTING_TIMEOUT:()=>Nb,PEER_CONNECTION_STATE:()=>Co,PEER_LEAVE_REASON:()=>Kx,RECOVER_CAPTURE_INTERVAL:()=>$S,REMOTE_STREAM_TYPE_AUX:()=>Rb,REMOTE_STREAM_TYPE_MAIN:()=>a0,RENDER_FREEZE_TIMING:()=>Hx,SCHEDULE_DOMAIN:()=>XB,SCHEDULE_TIMEOUT:()=>qx,SDP_SEMANTICS_PLAN_B:()=>l0,SDP_SEMANTICS_UNIFIED_PLAN:()=>zS,SECOND_HOST:()=>bx,SIGNAL_PING_PONG_INTERVAL:()=>cE,SIGNAL_PING_TIMEOUT:()=>kx,SIGNAL_RECONNECTION_COUNT:()=>aK,SMALL_STAT_BIT:()=>Mb,SPEAKER_DEFAULT:()=>u0,STORAGE_EXPIRES_TIME:()=>r0,STREAM_TYPE_BIG:()=>cK,STREAM_TYPE_SMALL:()=>lK,SUBSCRIBE_SMALL_RETRY_COUNT:()=>XS,SYNC_USER_LIST_INTERVAL:()=>gK,Scene:()=>Ff,THIRD_HOST:()=>sK,TRANSPORT_DIRECTION:()=>zn,TRTC_ERROR_ASSISTANCE:()=>JS,TRTC_QUALITY_BAD:()=>Pf,TRTC_QUALITY_DISCONNECTED:()=>xx,TRTC_QUALITY_EXCELLENT:()=>g0,TRTC_QUALITY_GOOD:()=>ZB,TRTC_QUALITY_POOR:()=>Ox,TRTC_QUALITY_UNKNOWN:()=>wb,TRTC_QUALITY_VERY_BAD:()=>Px,UPDATE_OFFER_TIMEOUT:()=>Yx,VIDEO_MUTE_BIT:()=>WS,VIDEO_STAT_BIT:()=>qS,WEBGL_ATTRIBUTES:()=>bb,audioProfileMap:()=>Sp,defaultBigVideoProfile:()=>HS,defaultSmallVideoProfile:()=>Lx,getRetryCount:()=>xf,getScriptDir:()=>oK,innerVersion:()=>t0,loggerProxy:()=>yb,screenProfileMap:()=>Sb,setLoggerProxy:()=>VS,setRetryCount:()=>c0,setVersion:()=>Nx,version:()=>qd,videoProfileMap:()=>kC});var t0="4.15.00.1600",qd="5.0.0";function Nx(A){qd=A;let[e,o,a]=A.split(".").map(c=>parseInt(c,10));t0="".concat(e,".").concat(Math.min(15,o),".").concat(Math.min(15,a),".").concat(o.toString().padStart(2,"0")).concat(a.toString().padStart(2,"0"))}var fb,gE,i0=typeof importScripts<"u",o0=typeof registerProcessor<"u",oK=()=>{let A=i0?self.location.href:document.currentScript.src;return A.substring(0,A.lastIndexOf("/")+1)},yb="",VS=A=>yb=A,Gx="web.sdk.qcloud.com",bx="web.sdk.tencent.cn",sK="web.sdk.cloud.tencent.cn",nK="https://console.cloud.tencent.com/trtc",qh="https://".concat(Gx,"/trtc/webrtc/doc"),rK="".concat(qh,"/zh-cn/"),s0="https://cloud.tencent.com/document/product/647/85386",Db="https://trtc.io/document/56025",GI="https://yun.tim.qq.com",Dp="https://apisgp.my-imcloud.com",JS="trtc_error_assistance",bI={LOG:"jssdk_log",EVENT:"jssdk_event",KEY_POINT:"jssdk_new_endreport",KV_STAT:"jssdk_key_metrics_report"},jB={QCLOUD:"qcloud",OLD_CLOUD_LADDER:"trtc",WEBRTC:"webrtc"},WB=((gE=WB||{})[gE.TRACE=0]="TRACE",gE[gE.DEBUG=1]="DEBUG",gE[gE.INFO=2]="INFO",gE[gE.WARN=3]="WARN",gE[gE.ERROR=4]="ERROR",gE[gE.NONE=5]="NONE",gE),kx=18e3,cE=2e3,n0={unknown:0,wifi:1,"4g":2,"3g":3,"2g":4,wired:5,"5g":6},r0=6048e5,Sp={standard:{sampleRate:48e3,channelCount:1,bitrate:40},"standard-stereo":{sampleRate:48e3,channelCount:2,bitrate:64},high:{sampleRate:48e3,channelCount:1,bitrate:128},"high-stereo":{sampleRate:48e3,channelCount:2,bitrate:192}},kC={"120p":{width:160,height:120,frameRate:15,bitrate:200},"120p_2":{width:160,height:120,frameRate:15,bitrate:100},"180p":{width:320,height:180,frameRate:15,bitrate:350},"180p_2":{width:320,height:180,frameRate:15,bitrate:150},"240p":{width:320,height:240,frameRate:15,bitrate:400},"240p_2":{width:320,height:240,frameRate:15,bitrate:200},"360p":{width:640,height:360,frameRate:15,bitrate:800},"360p_2":{width:640,height:360,frameRate:15,bitrate:400},"480p":{width:640,height:480,frameRate:15,bitrate:900},"480p_2":{width:640,height:480,frameRate:15,bitrate:500},"720p":{width:1280,height:720,frameRate:15,bitrate:1500},"1080p":{width:1920,height:1080,frameRate:15,bitrate:2e3},"1440p":{width:2560,height:1440,frameRate:30,bitrate:4860},"4K":{width:3840,height:2160,frameRate:30,bitrate:9e3}},HS=kC["480p_2"],Lx=kC["120p_2"],Sb={"480p":{width:640,height:480,frameRate:5,bitrate:900},"480p_2":{width:640,height:480,frameRate:30,bitrate:1e3},"720p":{width:1280,height:720,frameRate:5,bitrate:1200},"720p_2":{width:1280,height:720,frameRate:30,bitrate:3e3},"1080p":{width:1920,height:1080,frameRate:5,bitrate:1600},"1080p_2":{width:1920,height:1080,frameRate:30,bitrate:4e3}},YA={CANVAS:"canvas",AUDIO:"audio",VIDEO:"video",SCREEN:"screen",SMALL:"small",BIG:"big",AUXILIARY:"auxiliary",SMALL_VIDEO:"smallVideo",FACING_MODE_USER:"user",FACING_MODE_ENVIRONMENT:"environment",MUTE:"mute",UNMUTE:"unmute",ENDED:"ended",PLAYING:"playing",PAUSE:"pause",ERROR:"error",LOADSTART:"loadstart",LOADEDDATA:"loadeddata",LOADEDMETADATA:"loadedmetadata",AUDIO_INPUT:"audioinput",VIDEO_INPUT:"videoinput",DETAIL:"detail",TEXT:"text",MAIN:"main",BACKUP:"backup",BANNED:"banned",KICK:"kick",USER_TIME_OUT:"user_time_out",ROOM_DISBAND:"room_disband",SEI_MESSAGE:"sei-message",ADD:"add",REMOVE:"remove",REPLACE:"replace",TRACK:"track",SUBSCRIBE:"subscribe",UNSUBSCRIBE:"unsubscribe",TRANSCEIVER_DIRECTION_SENDONLY:"sendonly",TRANSCEIVER_DIRECTION_RECVONLY:"recvonly",ENTER_PICTURE_IN_PICTURE:"enterpictureinpicture",LEAVE_PICTURE_IN_PICTURE:"leavepictureinpicture",FULLSCREEN_CHANGE:"fullscreenchange",RESIZE:"resize",TIME_UPDATE:"timeupdate"},zn={INACTIVE:"inactive",SENDONLY:"sendonly",RECVONLY:"recvonly"},Uf={OLD_CLOUD_LADDER:"wss://trtc.rtc.qq.com",WEBRTC:"wss://webrtc.qq.com"},Ff=((fb=Ff||{}).LIVE="live",fb.RTC="rtc",fb),qS=1,Mb=2,KS=4,jS=8,Of=64,WS=16,Ux=112,vb=128,zB=256,uu="5Y2wZK8nANNAoVw6dSAHVjNxrD1ObBM2kBPV",Fx="224d130c-7b5c-415b-aaa2-79c2eb5a6df2",a0=YA.MAIN,Rb=YA.AUXILIARY,wb=0,g0=1,ZB=2,Ox=3,Pf=4,Px=5,xx=6,Kh="unknown",Co={NEW:"new",CONNECTING:"connecting",FAILED:"failed",CLOSED:"closed",DISCONNECTED:"disconnected",CONNECTED:"connected",COMPLETED:"completed"},_b=1/0;function c0(A){_b=A}function xf(){return _b}var Mp,aK=30,Ja={JOIN:"join",DELTA_JOIN:"delta-join",REJOIN:"rejoin",LEAVE:"leave",DELTA_LEAVE:"delta-leave",PUBLISH:"publish",DELTA_PUBLISH:"delta-publish",UNPUBLISH:"unpublish",SUBSCRIBE:"subscribe",UNSUBSCRIBE:"unsubscribe",UPLINK_CONNECTION:"uplink-connection",UPLINK_RECONNECTION:"uplink-reconnection",DOWNLINK_CONNECTION:"downlink-connection",DOWNLINK_RECONNECTION:"downlink-reconnection",ON_TRACK:"ontrack",ICE_CONNECTION_STATE:"iceConnectionState",LOCAL_STREAM_INITIALIZE:"stream-initialize",SIGNAL_CONNECTION:"websocketConnectionState",SIGNAL_RECONNECTION:"websocketReconnectionState",UPDATE_STREAM:"update-stream",RECOVER_LOCAL_AUDIO_TRACK:"recover-local-audio-track",RECOVER_LOCAL_VIDEO_TRACK:"recover-local-video-track",RECOVER_SUBSCRIPTION:"recover-subscription",START_MIX_TRANSCODE:"start-mix-transcode",STOP_MIX_TRANSCODE:"stop-mix-transcode",PLAYER_ERROR:"player-error",SCHEDULE:"schedule",LOAD_WORKLET:"load-worklet",VIDEO_FROZEN_COUNT:"videoFrozenCount",GET_USER_MEDIA_RETRY:"getUserMedia-retry",VIDEO_ENCODE_FAILED_DURING_CALL:"video-encode-failed-during-call",VIDEO_ENCODE_RESUME_DURING_CALL:"video-encode-resume-during-call",AUDIO_ENCODE_FAILED_DURING_CALL:"audio-encode-failed-during-call",AUDIO_ENCODE_RESUME_DURING_CALL:"audio-encode-resume-during-call",VIDEO_DECODE_FAILED_DURING_CALL:"video-decode-failed-during-call",VIDEO_DECODE_RESUME_DURING_CALL:"video-decode-resume-during-call",AUDIO_DECODE_FAILED_DURING_CALL:"audio-decode-failed-during-call",AUDIO_DECODE_RESUME_DURING_CALL:"audio-decode-resume-during-call",VIDEO_HARDWARE_DECODE_FAILED:"video-hardware-decode-failed",VIDEO_HARDWARE_DECODE_RESUME:"video-hardware-decode-resume"},gK=1e4,Yx=1e4,Vx=1e4,zS="unified-plan",l0="plan-b",I0=1028,Jx=((Mp=Jx||{})[Mp.UNPUBLISH=-1]="UNPUBLISH",Mp[Mp.PUBLISHING=0]="PUBLISHING",Mp[Mp.PUBLISHED=1]="PUBLISHED",Mp),Tb=500,Hx=1e3,cK=YA.BIG,lK=YA.SMALL,Nb=1e4,XB={MAIN:"schedule.cloud-rtc.com",BACKUP:"schedule.cloud-rtc.net",MAIN_OVERSEA:"schedule.rtc-web.com",BACKUP_OVERSEA:"schedule.rtc-web.io",MAIN_OVERSEA_BACKUP:"intl-schedule.cloud-rtc.com"},qx=2e3,IK={TRTC:"TRTC",CLIENT:"Client",LOCAL_STREAM:"LocalStream",REMOTE_STREAM:"RemoteStream",STREAM:"Stream"},vp=5,ZS="default",u0=ZS,uK="communications",EK=Object.keys(WB),Kx=["normal leave","timeout leave","kick","role change"],XS=10,$S=2e3,Gb=["width","height","frameRate","facingMode","sampleRate","sampleSize","channelCount","deviceId","min","max"],E0=1e4,d0=14,bb={alpha:!0,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0,powerPreference:"low-power"},jx=function(A,e,o,a){return new(o||(o=Promise))(function(c,d){function C(k){try{S(a.next(k))}catch(V){d(V)}}function y(k){try{S(a.throw(k))}catch(V){d(V)}}function S(k){k.done?c(k.value):function(V){return V instanceof o?V:new o(function(J){J(V)})}(k.value).then(C,y)}S((a=a.apply(A,[])).next())})},C0=Symbol(32),h0=Symbol(16),kb=Symbol(8),Yf=class{constructor(A){this.g=A,this.consumed=0,A&&(this.need=A.next().value)}setG(A){this.g=A,this.demand(A.next().value,!0)}consume(){this.buffer&&this.consumed&&(this.buffer.copyWithin(0,this.consumed),this.buffer=this.buffer.subarray(0,this.buffer.length-this.consumed),this.consumed=0)}demand(A,e){return e&&this.consume(),this.need=A,this.flush()}read(A){return jx(this,void 0,void 0,function*(){return this.lastReadPromise&&(yield this.lastReadPromise),this.lastReadPromise=new Promise((e,o)=>{var a;this.reject=o,this.resolve=c=>{delete this.lastReadPromise,delete this.resolve,delete this.need,e(c)},this.demand(A,!0)||(a=this.pull)===null||a===void 0||a.call(this,A)})})}readU32(){return this.read(C0)}readU16(){return this.read(h0)}readU8(){return this.read(kb)}close(){var A;this.g&&this.g.return(),this.buffer&&this.buffer.subarray(0,0),(A=this.reject)===null||A===void 0||A.call(this,new Error("EOF")),delete this.lastReadPromise}flush(){if(!this.buffer||!this.need)return;let A=null,e=this.buffer.subarray(this.consumed),o=0,a=c=>e.length<(o=c);if(typeof this.need=="number"){if(a(this.need))return;A=e.subarray(0,o)}else if(this.need===C0){if(a(4))return;A=e[0]<<24|e[1]<<16|e[2]<<8|e[3]}else if(this.need===h0){if(a(2))return;A=e[0]<<8|e[1]}else if(this.need===kb){if(a(1))return;A=e[0]}else if("buffer"in this.need){if("byteOffset"in this.need){if(a(this.need.byteLength-this.need.byteOffset))return;new Uint8Array(this.need.buffer,this.need.byteOffset).set(e.subarray(0,o)),A=this.need}else if(this.g)return void this.g.throw(new Error("Unsupported type"))}else{if(a(this.need.byteLength))return;new Uint8Array(this.need).set(e.subarray(0,o)),A=this.need}return this.consumed+=o,this.g?this.demand(this.g.next(A).value,!0):this.resolve&&this.resolve(A),A}write(A){if(A instanceof Uint8Array?this.malloc(A.length).set(A):"buffer"in A?this.malloc(A.byteLength).set(new Uint8Array(A.buffer,A.byteOffset,A.byteLength)):this.malloc(A.byteLength).set(new Uint8Array(A)),!this.g&&!this.resolve)return new Promise(e=>this.pull=e);this.flush()}writeU32(A){this.malloc(4).set([A>>24&255,A>>16&255,A>>8&255,255&A]),this.flush()}writeU16(A){this.malloc(2).set([A>>8&255,255&A]),this.flush()}writeU8(A){this.malloc(1)[0]=A,this.flush()}malloc(A){if(this.buffer){let e=this.buffer.length,o=e+A;if(o<=this.buffer.buffer.byteLength-this.buffer.byteOffset)this.buffer=new Uint8Array(this.buffer.buffer,this.buffer.byteOffset,o);else{let a=new Uint8Array(o);a.set(this.buffer),this.buffer=a}return this.buffer.subarray(e,o)}return this.buffer=new Uint8Array(A),this.buffer}};Yf.U32=C0,Yf.U16=h0,Yf.U8=kb;var AM=128;function B0(A){let e=new Yf;for(;A>=128;)e.malloc(1)[0]=255&A|AM,A>>>=7;return e.malloc(1)[0]=255&A,e.buffer||new Uint8Array(0)}function Q0(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=new Yf,a=e<<3;switch(typeof A){case"boolean":let c=o.malloc(2);c[0]=a,c[1]=A?1:0;break;case"number":o.malloc(1)[0]=a,o.write(B0(A));break;case"string":o.malloc(1)[0]=2|a;let d=new TextEncoder().encode(A);o.write(B0(d.length));let C=o.malloc(d.length);for(let S=0;S>>24&255),this.buffer.push(A>>>16&255),this.buffer.push(A>>>8&255),this.buffer.push(255&A)}writeInt16(A){this.buffer.push(A>>>8&255),this.buffer.push(255&A)}writeByte(A){this.buffer.push(255&A)}writeBytes(A){for(let e=0;e>>24&255,A[o+1]=e>>>16&255,A[o+2]=e>>>8&255,A[o+3]=255&e}function Eu(A,e){return A[e]<<24|A[e+1]<<16|A[e+2]<<8|A[e+3]}function zx(A,e){return A[e]}function Jf(A,e,o){return new TextDecoder().decode(function(a,c,d){return a.slice(c,c+d)}(A,e,o))}var eM=0,Lb=2654435769,p0=16,jh=2,tM=7;function Ub(A,e){let o=new Wx,a=function(ve,yi,Ge){let Bt=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"AVQualityReportSvc.C2S";return{version:arguments.length>4&&arguments[4]!==void 0?arguments[4]:2e3,encryption:arguments.length>5&&arguments[5]!==void 0?arguments[5]:2,d2:"",d2Len:0,uinType:arguments.length>6&&arguments[6]!==void 0?arguments[6]:30,uin:"",uinLen:0,reqHead:{seqNumber:Ge,appId:ve,appidAtThird:new Uint8Array(0),a2:"",a2Len:0,serviceCmd:Bt,serviceCmdLen:0,cookie:"",cookieLen:0,imei:"",imeiLen:0,ksid:"",ksidLen:0,clientVersionInfo:"",clientVersionInfoLen:0},busiBuff:yi}}(e,A,eM);eM=eM+1&2147483647,o.writeInt32(0),o.writeInt32(a.version),o.writeByte(a.encryption);let c=new TextEncoder().encode(a.d2);o.writeInt32(c.length+4),c&&o.writeBytes(c),o.writeByte(a.uinType);let d=new TextEncoder().encode(a.uin);o.writeInt32(d.length+4),d.length&&o.writeBytes(d);let C=new Wx;C.writeInt32(0),C.writeInt32(a.reqHead.seqNumber),C.writeInt32(a.reqHead.appId),C.writeByte(a.reqHead.appId>>>24&255),C.writeByte(a.reqHead.appId>>>16&255),C.writeByte(a.reqHead.appId>>>8&255),C.writeByte(255&a.reqHead.appId);for(let ve=4;ve<16;ve++)C.writeByte(0);let y=new TextEncoder().encode(a.reqHead.a2);C.writeInt32(y.length+4),y.length&&C.writeBytes(y);let S=new TextEncoder().encode(a.reqHead.serviceCmd);C.writeInt32(S.length+4),S.length&&C.writeBytes(S);let k=new TextEncoder().encode(a.reqHead.cookie);C.writeInt32(k.length+4),k.length&&C.writeBytes(k);let V=new TextEncoder().encode(a.reqHead.imei);C.writeInt32(V.length+4),V.length&&C.writeBytes(V);let J=new TextEncoder().encode(a.reqHead.ksid);C.writeInt32(J.length+4),J.length&&C.writeBytes(J);let gA=new TextEncoder().encode(a.reqHead.clientVersionInfo);C.writeInt16(gA.length+2),gA.length&&C.writeBytes(gA);let CA=C.length;C.data[0]=CA>>>24&255,C.data[1]=CA>>>16&255,C.data[2]=CA>>>8&255,C.data[3]=255&CA,Yn(A)&&(A=new TextEncoder().encode(A)),C.writeInt32(A.length+4),A.length&&C.writeBytes(A);let MA=new Uint8Array(C.data),$A=null;a.encryption===1?$A=new TextEncoder().encode(a.uin):a.encryption===2&&($A=new Uint8Array(16)),$A&&(MA=function(ve,yi){let Ge=ve.length,Bt=(Ge+1+jh+tM)%8;Bt&&(Bt=8-Bt);let hi=Ge+1+jh+tM+Bt,Di=new Uint8Array(hi),Vo=0,Jo=new Uint8Array(8),Qn=new Uint8Array(8),Ho=new Uint8Array(8),Ns=0;Jo[0]=248&Math.floor(256*Math.random())|Bt,Ns=1;for(let ya=0;ya>>24&255,Be[1]=Ye>>>16&255,Be[2]=Ye>>>8&255,Be[3]=255&Ye,Be}function Fb(A,e,o,a,c,d){for(let C=0;C<8;C++)A[C]^=a[C];(function(C,y,S,k){let V=Eu(C,0),J=Eu(C,4),gA=[];for(let MA=0;MA<4;MA++)gA[MA]=Eu(y,4*MA);let CA=0;for(let MA=0;MA>>=0,V+=(J<<4)+gA[0]^J+CA^(J>>>5)+gA[1],V>>>=0,J+=(V<<4)+gA[2]^V+CA^(V>>>5)+gA[3],J>>>=0;Vf(S,V,k),Vf(S,J,k+4)})(A,e,c,d);for(let C=0;C<8;C++)c[d+C]^=o[C];for(let C=0;C<8;C++)o[C]=A[C]}var Zx=function(){return new URLSearchParams(location.search).get("trtc_env")||""},Xx=function(A){return A.includes(".")?A:"".concat(A).concat(".rtc.qq.com")},Kd=A=>Number(A)<14e8,Hf=function(A,e){let o;o=yb||(Kd(A)?Dp:GI);let a=Math.floor(Math.random()*xS(2,31));return"".concat(o,"/v5/AVQualityReportSvc/C2S?random=").concat(a,"&sdkappid=").concat(A,"&cmdtype=").concat(e)},Ob="unknown";function m0(){(function(){var d;$x||($x=!0,(d=navigator.connection)==null||d.addEventListener("typechange",dK))})();let{userAgent:A,connection:e}=navigator,o=(A.match(/NetType\/\S+/)||[])[0]||"";o=o.toLowerCase().replace("nettype/",""),o==="3gnet"&&(o="3g");let a=e&&e.type&&e.type.toLowerCase(),c=e&&e.effectiveType&&e.effectiveType.toLowerCase();return c==="slow-2"&&(c="2g"),a?Pb(a,c):Ob}function dK(){QA.warn("netType changed",m0())}var $x=!1;function Pb(A,e){if(n0[A])return A;switch(A){case"cellular":case"wimax":return e||"unknown";case"ethernet":return"wired";default:return"unknown"}}function f0(A){Ob=Pb(A)}function qf(){return n0[m0()]}function A2(A,e){for(let o of Reflect.ownKeys(e))if(o!=="constructor"&&o!=="prototype"&&o!=="name"){let a=Object.getOwnPropertyDescriptor(e,o)||"";Object.defineProperty(A,o,a)}return A}function y0(A){return xb(A/4,arguments.length>1&&arguments[1]!==void 0?arguments[1]:48e3)}function xb(A){return 1e3*A/(arguments.length>1&&arguments[1]!==void 0?arguments[1]:48e3)}function e2(A){return 4*D0(A,arguments.length>1&&arguments[1]!==void 0?arguments[1]:48e3)}function D0(A){return A*(arguments.length>1&&arguments[1]!==void 0?arguments[1]:48e3)/1e3}var t2=typeof window<"u"&&typeof window.glog=="function"?window.glog:()=>{},Wd=()=>{let A=navigator.language;return A=A.substring(0,2),A==="zh"},lE=function(A){if(!A||typeof A!="object"||Object.prototype.toString.call(A)!="[object Object]")return!1;let e=Object.getPrototypeOf(A);if(e===null)return!0;let o=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof o=="function"&&o instanceof o&&Function.prototype.toString.call(o)===Function.prototype.toString.call(Object)};function Kf(A){let e=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1;return A<=1?e:Kf(A-1,e,(arguments.length>1&&arguments[1]!==void 0?arguments[1]:1)+e)}function Rp(A){return A>8?3e4:1e3*Kf(A)}function Cg(A){return Reflect.apply(Object.prototype.toString,A,[]).replace(/^\[object\s(\w+)\]$/,"$1").toLowerCase()}var Ra=A=>typeof A=="function",Je=A=>A===void 0,Yn=A=>typeof A=="string",bn=A=>typeof A=="number",Nr=A=>typeof A=="boolean",$E=A=>Cg(A)==="object",wa=A=>Cg(A)==="array",Yb=A=>Cg(A)==="MediaStreamTrack".toLowerCase(),Vb=A=>A.isRemote,jf=A=>Cg(A)==="promise",Wf=A=>Ra(A)&&A.prototype.constructor===A,iM=A=>Wf(A)?A.prototype.constructor.name:"",i2=typeof AudioWorkletNode<"u",o2=typeof HTMLMediaElement<"u"&&"setSinkId"in HTMLMediaElement.prototype;function oM(A){return new Promise((e,o)=>{let a=[];A.forEach(c=>{c.then(e).catch(d=>{a.push(d),a.length===A.length&&o(a)})})})}function ko(){return performance&&performance.now?Math.floor(performance.now()):Date.now()}var s2=A=>+A<10?"0".concat(A):A,n2=A=>{let e=A.match(/^\d+\.\d+\.\d+/)[0];if(!e)return A;let o=e.split("."),a=s2(o[1])+s2(o[2]);return o[1]-15>0&&(o[1]="15"),o[2]-15>0&&(o[2]="15"),"".concat(o.join("."),".").concat(a)},CK=Object.prototype.hasOwnProperty;function S0(A){if(A==null)return!0;if(typeof A=="boolean")return!1;if(typeof A=="number")return A===0;if(typeof A=="string"||typeof A=="function"||Array.isArray(A))return A.length===0;if(A instanceof Error)return A.message==="";if(lE(A))switch(Object.prototype.toString.call(A)){case"[object File]":case"[object Map]":case"[object Set]":return A.size===0;case"[object Object]":for(let e in A)if(CK.call(A,e))return!1;return!0}return!1}function wp(A,e){return{userId:e,hasAudio:!!(A&jS),hasVideo:!!(A&qS),hasAuxiliary:!!(A&KS),hasSmall:!!(A&Mb),audioMuted:!!(A&Of),videoMuted:!!(A&WS),audioAvailable:!(!(A&jS)||A&Of),videoAvailable:!(!(A&qS)||A&WS),hasDatachannel:!!(A&zB)}}function r2(A){let e={urls:A.url.startsWith("turn:")||A.url.startsWith("turns:")?A.url:"turn:".concat(A.url)};return!Je(A.username)&&!Je(A.credential)&&(e.username=A.username,e.credential=A.credential,e.credentialType="password",Je(A.credentialType)||(e.credentialType=A.credentialType)),e}function sM(A){let e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];if(!Yn(A))return 0;let o=A.split(".");return e?(Number(o[0])<<24|Number(o[1])<<16|Number(o[2])<<8|Number(o[3]))>>>0:(Number(o[3])<<24|Number(o[2])<<16|Number(o[1])<<8|Number(o[0]))>>>0}var Wh=function(A,e,o,a){if(!$E(A)||!$E(e))return 0;let c,d=0,C=Object.keys(e);for(let y=0,S=C.length;y{e[a]=zf(o)}),e}if($E(A)){let e={};return Object.keys(A).forEach(o=>{e[o]=zf(A[o])}),e}return A}var nM=A=>{let e=[];if(wa(A))e=[...A];else if(Yn(A)){let o=document.getElementById(A);o&&e.push(o)}else A&&e.push(A);return e},Jb=A=>Yn(A)?document.getElementById(A):A,a2=()=>(A=>{let e=S=>S<10?"0".concat(S):"".concat(S),o=A.getFullYear(),a=A.getMonth()+1,c=A.getDate(),d=e(A.getHours()),C=e(A.getMinutes()),y=e(A.getSeconds());return"".concat(o,"/").concat(a,"/").concat(c," ").concat(d,":").concat(C,":").concat(y)})(new Date);function zd(A,e){let{keysToInclude:o,keysToExclude:a}=e;try{if(wa(A))return"[".concat(A.map(y=>zd(y,{keysToInclude:o,keysToExclude:a})).join(","),"]");if(!lE(A)||!wa(o)&&!wa(a))return JSON.stringify(A);let c={},d=new Set(o),C=new Set(a);return Object.keys(A).forEach(y=>{(C.size===0&&d.has(y)||d.size===0&&!C.has(y))&&(c[y]=lE(A[y])||wa(A[y])?JSON.parse(zd(A[y],{keysToExclude:a,keysToInclude:o})):A[y])}),JSON.stringify(c)}catch{return"{}"}}function M0(A){let e=arguments.length>1&&arguments[1]!==void 0&&arguments[1],o=[];return Object.keys(A).forEach(a=>{e===A[a]&&o.push(a)}),zd(A,{keysToInclude:o})}function v0(A){return A.replace(/[\u4e00-\u9fa5]/g,"aa").length}var Hb=()=>{var A,e,o,a;return(A=window.screen)!=null&&A.orientation?!((a=(o=(e=window.screen)==null?void 0:e.orientation)==null?void 0:o.type)==null||!a.includes("portrait")):window.orientation===0||window.orientation===180},rM=A=>KA(null,null,function*(){return new Promise((e,o)=>{let a;if(Yn(A))a=new Image,a.crossOrigin="anonymous",a.src=A;else if(a=A,a.complete)return void e(a);a.onload=()=>e(a),a.onerror=()=>{o(new ai({code:dt.INVALID_PARAMETER,message:"load image failed, url: ".concat(A)}))}})}),qb=A=>{let e=A.split(".");return+e[0]<<24|+e[1]<<16|+e[2]<<8|+e[3]},R0=A=>(Object.keys(A).forEach(e=>{bn(A[e])&&(e.startsWith("uint")||e.startsWith("int"))?A[e]=Math.floor(A[e]):(lE(A[e])||wa(A[e]))&&R0(A[e])}),A);function LC(A,e){return new Promise(o=>{let a=setTimeout(o,A);e&&e(a)})}function Kb(A,e){let o=null;return function(){for(var a=arguments.length,c=new Array(a),d=0;do=null),o)}}function jb(A){return A.replace(/(^|[^:])\/{2,}/g,"$1/")}function Wb(A){var e;try{let{width:o,height:a,frameRate:c,sampleRate:d,sampleSize:C,channelCount:y}=(e=A.getSettings)==null?void 0:e.call(A),S=A.kind===YA.AUDIO?"".concat(d,"x").concat(C,"@").concat(y):"".concat(o,"x").concat(a,"@").concat(c),k=A.stats?" stats: ".concat(JSON.stringify(A.stats).replaceAll('"',"")):"";return"".concat(A.id," ").concat(A.readyState," muted:").concat(A.muted," ").concat(A.kind," ").concat(A.label," ").concat(S).concat(k)}catch{return""}}function w0(A,e){return A.width*A.height===e.width*e.height?1:Hb()&&e.width>e.height&&A.height>e.width?Math.max(A.width/e.height,A.height/e.width,1):Math.max(A.width/e.width,A.height/e.height,1)}function $B(A){return A===90||A===270}function g2(A){return KA(this,null,function*(){return new Promise((e,o)=>{let a=document.createElement("video");a.crossOrigin="anonymous",a.src=A,a.muted=!0,a.loop=!0,a.playsInline=!0,a.play().then(()=>e(a)),a.onerror=()=>{o(a.error)}})})}function Zf(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:new WeakMap;if(typeof A!="object"||A===null)return A;if(e.has(A))return e.get(A);if(Array.isArray(A)){let o=[];return e.set(A,o),A.forEach((a,c)=>{o[c]=Zf(a,e)}),o}if(Object.prototype.toString.call(A)==="[object Object]"){let o={};return e.set(A,o),Reflect.ownKeys(A).forEach(a=>{o[a]=Zf(A[a],e)}),o}return A}var _0=(A=>(A[A.END_REPORT=2001]="END_REPORT",A[A.LOG=2002]="LOG",A[A.KEY_METRIC_REPORT=2003]="KEY_METRIC_REPORT",A))(_0||{});function AQ(A,e,o,a){try{let c=function(d,C,y,S){let k={data:d,random:Math.floor(2147483648*Math.random()),sdkAppId:y};return Je(S)||(k=Qo(mi({},k),{gzip:+S})),{uint32_sdkappid:0,uint64_from_uin:0,uint32_timestamp:0,uint32_seq:0,msg_common_info:{msg_device_info:{enum_device_type:0,str_device_brand:"",str_device_model:"",str_device_board:"",str_device_cpu_abi:""},msg_system_info:{enum_os_type:0,str_os_version:"",msg_network_info:0},msg_network_info:{enum_network_type:0}},msg_report_content:{uint32_type:C,bytes_report_data:JSON.stringify(k)}}}(A,e,o,a);return Ub(Q0(c),o)}catch{return JSON.stringify(A)}}function aM(A,e){let o=new Uint8Array(A.byteLength+e.byteLength);return o.set(new Uint8Array(A),0),o.set(new Uint8Array(e),A.byteLength),o.buffer}function T0(A){return(65535&A)>>>0}function c2(A){return(4294901760&A)>>>0}function _p(A){return!!(A&&A instanceof CanvasCaptureMediaStreamTrack&&A.canvas.id.includes("trtc_mix"))}function hK(A){let e=function(o){try{let a={},c=0;a.totalLength=Eu(o,c),c+=4,a.version=Eu(o,c),c+=4,a.encryption=zx(o,c),c+=1,a.uinType=zx(o,c),c+=1,a.uinLength=Eu(o,c),c+=4,a.uin=a.uinLength>4?Jf(o,c,a.uinLength-4):"",c+=a.uinLength-4;let d=o.slice(c);return a.encryption===2?(o=function(C,y){let S=0,k=new Uint8Array(8).fill(0),V=new Uint8Array(C.slice(0,8)),J=N0(V,y),gA=7&J[0],CA=C.length-1-gA-jh-tM,MA=new Uint8Array(CA),$A=0,Be=k,Ye=C.slice(0,8);S=8;let ve=1;ve+=gA;for(let Ge=1;Ge<=jh;)if(ve<8)ve++,Ge++;else if(ve===8){let Bt=Xf(C,S,Be,Ye,J,y);Be=Bt.ivPreCrypt,Ye=Bt.ivCurCrypt,J=Bt.debiBuf,S=Bt.bufPos,ve=0}let yi=CA;for(;yi>0;)if(ve<8)MA[$A++]=J[ve]^Be[ve],ve++,yi--;else if(ve===8){let Ge=Xf(C,S,Be,Ye,J,y);Be=Ge.ivPreCrypt,Ye=Ge.ivCurCrypt,J=Ge.debiBuf,S=Ge.bufPos,ve=0}for(let Ge=1;Ge<=tM;)if(ve<8)J[ve],Be[ve],ve++,Ge++;else if(ve===8){if(S>=C.length)break;let Bt=Xf(C,S,Be,Ye,J,y);if(!Bt.success)break;Be=Bt.ivPreCrypt,Ye=Bt.ivCurCrypt,J=Bt.debiBuf,S=Bt.bufPos,ve=0}return MA}(d,new Uint8Array(16).fill(0)),a.decrypted=!0,c=0):(o=d,c=0),a.rspHeadLength=Eu(o,c),c+=4,a.seqNo=Eu(o,c),c+=4,a.retCode=Eu(o,c),c+=4,a.retStrLength=Eu(o,c),c+=4,a.retStr=a.retStrLength?Jf(o,c,a.retStrLength-4):"",c+=a.retStrLength-4,a.serviceCmdLength=Eu(o,c),c+=4,a.serviceCmd=a.serviceCmdLength?Jf(o,c,a.serviceCmdLength-4):"",c+=a.serviceCmdLength-4,a.cookieLength=Eu(o,c),c+=4,a.cookie=a.cookieLength?Jf(o,c,a.cookieLength-4):"",c+=a.cookieLength-4,a.flag=Eu(o,c),c+=4,a.busiBuffLength=Eu(o,c),c+=4,a.busiBuff=a.busiBuffLength?Jf(o,c,a.busiBuffLength-4):"",c+=a.busiBuffLength-4,a}catch{}}(A);return e?.busiBuff}function N0(A,e){let o=A[0]<<24|A[1]<<16|A[2]<<8|A[3],a=A[4]<<24|A[5]<<16|A[6]<<8|A[7];o>>>=0,a>>>=0;let c=Lb*p0>>>0;for(let d=0;d>>5)+e[3],a>>>=0,o-=(a<<4)+e[0]^a+c^(a>>>5)+e[1],o>>>=0,c-=Lb,c>>>=0;return new Uint8Array([o>>>24&255,o>>>16&255,o>>>8&255,255&o,a>>>24&255,a>>>16&255,a>>>8&255,255&a])}function Xf(A,e,o,a,c,d){if(e+8>A.length)return{success:!1};let C=new Uint8Array(a),y=A.slice(e,e+8),S=new Uint8Array(8);for(let k=0;k<8;k++)S[k]=c[k]^y[k];return{success:!0,ivPreCrypt:C,ivCurCrypt:y,debiBuf:N0(S,d),bufPos:e+8}}var Tp=typeof TextDecoder<"u"?new TextDecoder:void 0;function eQ(A){let{url:e,body:o,method:a="POST",timeout:c,priority:d}=A;return new Promise((C,y)=>{if("fetch"in window)return fetch(e,{method:a,body:o,priority:d}).then(k=>k.clone().json().then(V=>({data:V}),()=>k.arrayBuffer().then(V=>({data:hK(new Uint8Array(V))||(Tp?Tp.decode(V):V)})))).then(C,y);let S=new XMLHttpRequest;S.onreadystatechange=()=>{if(S.readyState===4)if(S.status>=200&&S.status<300)try{let k=JSON.parse(S.response);C({data:k})}catch{C({data:S.response})}else y({status:S.status,statusText:S.statusText||"request failed!"})},S.timeout=c||5e3,S.open(a,e,!0),S.send(o)})}function zb(A){return KA(this,null,function*(){let e=ko(),o=JSON.stringify(A);try{if(!CompressionStream||o.length<=2800)return o;let a=new Blob([o],{type:"application/json"}).stream().pipeThrough(new CompressionStream("gzip")),c=yield(yield(yield new Response(a)).blob()).arrayBuffer();return QA.debug("compressJSON ".concat(o.length," -> ").concat(c.byteLength," ").concat(ko()-e,"ms")),c}catch{return o}})}var l2=Object.prototype.hasOwnProperty,Np=A=>typeof A=="function",Ad=A=>A===void 0,Zb=A=>typeof A=="string",I2=A=>typeof A=="boolean",Xb=A=>A.isRemote,u2=function(A){if(!A||typeof A!="object"||Object.prototype.toString.call(A)!="[object Object]")return!1;let e=Object.getPrototypeOf(A);if(e===null)return!0;let o=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof o=="function"&&o instanceof o&&Function.prototype.toString.call(o)===Function.prototype.toString.call(Object)},gM=function(A){let{retryFunction:e,settings:o,onError:a,onRetrying:c,onRetryFailed:d,onRetrySuccess:C,context:y}=A;return function(){for(var S=arguments.length,k=new Array(S),V=0;VKA(this,null,function*(){let yi=y||this;try{let Ge=yield e.apply(yi,k);CA>0&&C&&C.call(this,CA),CA=0,Ye(Ge)}catch(Ge){let Bt=()=>{clearTimeout(MA),CA=0,$A=2,ve(Ge)},hi=()=>{$A!==2&&CA<(Np(J)?J():J)?(CA++,$A=1,Np(c)&&c.call(this,CA,Bt),MA=window.setTimeout(()=>{MA=-1,Be(Ye,ve)},Np(gA)?gA(CA):gA)):(Bt(),Np(d)&&d.call(this,Ge))};Np(a)?a.call(this,{error:Ge,retry:hi,reject:ve,retryFuncArgs:k,retriedCount:CA}):hi()}});return new Promise(Be)}},$b=class T9{constructor(e){Y(this,"_parentPath"),Y(this,"userId"),Y(this,"remoteUserId"),Y(this,"id"),Y(this,"sdkAppId"),Y(this,"type"),Y(this,"isLocal"),this.id=e.id,this.userId=e.userId,this.sdkAppId=e.sdkAppId,this.remoteUserId=e.remoteUserId,this.isLocal=!I2(e.isLocal)||e.isLocal,this.type=this.isLocal?"":e.type}getFullId(){return this._parentPath&&this.id?"".concat(this._parentPath,"-").concat(this.id):this._parentPath?this._parentPath:this.id}createChild(e){let o=new T9({id:e.id,userId:Ad(e.userId)?this.userId:e.userId,sdkAppId:Ad(e.sdkAppId)?this.sdkAppId:e.sdkAppId,type:Ad(e.type)?this.type:e.type,isLocal:Ad(e.isLocal)?this.isLocal:e.isLocal,remoteUserId:Ad(e.remoteUserId)?this.remoteUserId:e.remoteUserId});return o.bindParent(this),o}bindParent(e){let o=e.getFullId();this._parentPath!==o&&(this.debug("bind logger parent: ".concat(e.id)),this._parentPath=o,this.userId=e.userId||this.userId,this.sdkAppId=e.sdkAppId||this.sdkAppId)}setUserId(e){this.userId=e}setSdkAppId(e){this.sdkAppId=e}log(e,o){let a=this.isLocal?this.userId:this.remoteUserId,c=this.getFullId();o.unshift("[".concat(this.isLocal?"↑":"↓").concat(this.type&&this.type!=="main"?"*":"").concat(c).concat(a?"|".concat(a):"","]")),QA.log(e,o,Ad(this.userId)||function(d){if(d==null)return!0;if(typeof d=="boolean")return!1;if(typeof d=="number")return d===0;if(typeof d=="string"||typeof d=="function"||Array.isArray(d))return d.length===0;if(d instanceof Error)return d.message==="";if(u2(d))switch(Object.prototype.toString.call(d)){case"[object File]":case"[object Map]":case"[object Set]":return d.size===0;case"[object Object]":for(let C in d)if(l2.call(d,C))return!1;return!0}return!1}(this.userId),this.userId,this.sdkAppId)}info(){for(var e=arguments.length,o=new Array(e),a=0;ak0,CHROME_MAJOR_VERSION:()=>id,CHROME_VERSION:()=>H0,EDGE_VERSION:()=>ek,EDG_MAJOR_VERSION:()=>U0,EDG_VERSION:()=>tk,ELECTRON_MAJOR_VERSION:()=>m2,FIREFOX_MAJOR_VERSION:()=>L0,FIREFOX_VERSION:()=>lM,HUAWEI_VERSION:()=>uk,IE_VERSION:()=>pK,IOS_MAIN_VERSION:()=>Zd,IOS_VERSION:()=>kI,IPADQQB_VERSION:()=>dM,IS_ANDROID:()=>Ha,IS_ANDROID_WEBVIEW:()=>Ck,IS_ANY_SAFARI:()=>Fp,IS_CHROME:()=>J0,IS_CHROME_OS:()=>gk,IS_CHROMIUM_128_TO_143:()=>sy,IS_CHROMIUM_BASE:()=>IE,IS_DESKTOP_IOS_CHROME:()=>D2,IS_EDG:()=>Ay,IS_EDGE:()=>$f,IS_ELECTRON:()=>mK,IS_FIREFOX:()=>er,IS_HEADLESS_CHROME:()=>p2,IS_HONOR:()=>Ik,IS_HUAWEI:()=>lk,IS_HUAWEIBROWSER:()=>zh,IS_IE:()=>B2,IS_IE8:()=>QK,IS_IOS:()=>eg,IS_IOS_13_OR_14:()=>y2,IS_IOS_15_1:()=>f2,IS_IOS_CHROME:()=>mM,IS_IPAD:()=>Gp,IS_IPADQQB:()=>x0,IS_IPAD_PRO:()=>b0,IS_IPHONE:()=>bp,IS_IPOD:()=>C2,IS_LINUX:()=>iy,IS_LOCAL:()=>Op,IS_MAC:()=>iQ,IS_MACQQB:()=>EM,IS_MIBROWSER:()=>Y0,IS_MQQB:()=>uM,IS_NATIVE_ANDROID:()=>h2,IS_OLD_ANDROID:()=>BK,IS_OPENHARMONY:()=>oy,IS_OPPOBROWSER:()=>hM,IS_SAFARI:()=>Bg,IS_SAFARI_15_1:()=>fK,IS_SAMSUNGBROWSER:()=>CM,IS_SOGOU:()=>O0,IS_SOGOUM:()=>IM,IS_TBS:()=>td,IS_UCBROWSER:()=>ck,IS_VIVOBROWSER:()=>BM,IS_WECHAT:()=>tQ,IS_WIN:()=>ty,IS_WQQB:()=>P0,IS_WX:()=>Q2,IS_X5MQQB:()=>Lp,IS_XWEB:()=>kp,MACQQB_VERSION:()=>ak,MI_VERSION:()=>Up,MQQB_VERSION:()=>ey,OPENHARMONY_VERSION:()=>V0,OPPO_VERSION:()=>dk,SAFARI_VERSION:()=>oQ,SAMSUNG_VERSION:()=>Ek,SOGOUM_VERSION:()=>F0,SOGOU_VERSION:()=>ik,TBS_VERSION:()=>ok,UA_DATA_STRING:()=>UC,USER_AGENT:()=>ed,VIVO_VERSION:()=>QM,WECHAT_VERSION:()=>nk,WQQB_VERSION:()=>rk,XWEB_VERSION:()=>sk,browserInfo:()=>nQ,getBrowserCoreNumber:()=>jl,getBrowserInfo:()=>Bk,getChromeMajorVersion:()=>pM,getDeviceModel:()=>rQ,getDeviceModelFromUA:()=>Qk,getGPUInfo:()=>Pp,getOSName:()=>El,getOSNumber:()=>xp,getOSString:()=>Yp,getOSType:()=>Q,getTerminalType:()=>Cn,getUserAgentData:()=>fM,isAMDGPU:()=>ry,isAppleSiliconGPU:()=>yK,isLocalStorageEnabled:()=>sQ,isMobile:()=>q0,isNvidiaGPU:()=>S2,isRealIOS:()=>cM,isVersionLargerThan:()=>ny,isVersionSmallerThan:()=>hk});var ed=typeof navigator>"u"?"":navigator.userAgent,Ts=A=>new RegExp(A,"i").test(ed),hg=A=>{if(Ts(A)){let e=new RegExp("".concat(A,"\\/([\\d.]+)")),o=ed.match(e);if(o&&o[1])return o[1]}return""},G0=A=>{if(Ts(A)){let e=new RegExp("".concat(A,"\\/(\\d+)")),o=ed.match(e);if(o&&o[1])return parseFloat(o[1])}return NaN},Ak=/AppleWebKit\/([\d.]+)/i.exec(ed),d2=Ak?parseFloat(Ak[1]):NaN,Gp=Ts("iPad"),b0=typeof navigator<"u"&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2&&Ts("Macintosh"),bp=Ts("iPhone")&&!Gp,C2=Ts("iPod"),eg=bp||Gp||C2||b0,cM=()=>{try{return eg&&navigator.maxTouchPoints>1&&navigator.vendor.includes("Apple")}catch{return eg}},Ha=Ts("Android"),k0=function(){if(Ha){let A=ed.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);if(A){let e=A[1]&&parseFloat(A[1]),o=A[2]&&parseFloat(A[2]);if(e&&o)return parseFloat("".concat(A[1],".").concat(A[2]));if(e)return e}}return NaN}(),BK=Ha&&Ts("webkit")&&k0<2.3,h2=Ha&&k0<5&&d2<537,er=Ts("Firefox"),lM=hg("Firefox"),L0=G0("Firefox"),$f=Ts("Edge"),ek=hg("Edge"),Ay=Ts("Edg"),tk=hg("Edg"),U0=G0("Edg"),IM=Ts("SogouMobileBrowser"),F0=hg("SogouMobileBrowser"),O0=Ts("MetaSr\\s"),ik=hg("MetaSr\\s"),td=Ts("TBS"),ok=hg("TBS"),kp=Ts("XWEB"),sk=hg("XWEB"),QK=Ts("MSIE\\s8\\.0"),B2=Ts("MSIE\\/\\d+"),pK=function(){if(B2){let A=/MSIE\s(\d+)\.\d/.exec(ed),e=A&&parseFloat(A[1]);return!e&&/Trident\/7.0/i.test(ed)&&/rv:11.0/.test(ed)&&(e=11),e}return NaN}(),tQ=Ts("(micromessenger|webbrowser)"),nk=hg("MicroMessenger"),Lp=!td&&Ts("MQQBrowser")&&Ts("COVC"),uM=!td&&Ts("MQQBrowser")&&!Ts("COVC"),ey=uM||Lp?hg("MQQBrowser"):"",P0=!td&&Ts(" QQBrowser"),rk=hg(" QQBrowser"),EM=!td&&Ts("QQBrowserLite"),ak=hg("QQBrowserLite"),x0=!td&&Ts("MQBHD"),dM=hg("MQBHD"),ty=Ts("Windows"),iQ=!eg&&Ts("MAC OS X"),iy=!Ha&&Ts("Linux"),gk=Ts("CrOS"),Q2=Ts("MicroMessenger"),ck=Ts("UCBrowser"),mK=Ts("Electron"),Y0=Ts("MiuiBrowser"),Up=hg("MiuiBrowser"),zh=Ts("HuaweiBrowser"),lk=Ts("Huawei")||Ts("HUAWEI"),Ik=Ts("Honor")||Ts("HONOR"),uk=hg("HuaweiBrowser"),CM=Ts("SamsungBrowser"),Ek=hg("SamsungBrowser"),hM=Ts("HeyTapBrowser"),dk=hg("HeyTapBrowser"),BM=Ts("VivoBrowser"),QM=hg("VivoBrowser"),oy=Ts("OpenHarmony"),V0=hg("OpenHarmony"),pM=()=>G0("Chrome"),mM=Ts("CriOS"),IE=Ts("Chrome"),J0=!$f&&!O0&&!IM&&!td&&!kp&&!Ay&&!P0&&!Y0&&!zh&&!CM&&!hM&&!BM&&IE,p2=Ts("HeadlessChrome"),id=pM(),sy=IE&&id>=128&&id<=143,H0=hg("Chrome"),m2=G0("Electron"),Bg=!IE&&!uM&&!Lp&&!EM&&!x0&&Ts("Safari"),Fp=Bg||eg,oQ=hg("Version"),Ck=/Android.*(wv|.0.0.0)/.test(ed),kI=(()=>{if(b0)return oQ;if(eg){let A=ed.match(/OS (\d+)_(\d+)/i);if(A&&A[1]){let e=A[1];return A[2]&&(e+=".".concat(A[2])),e}}return""})();function hk(A,e){let o=A.split(".").map(c=>Number(c)),a=e.split(".").map(c=>Number(c));for(let c=0;cC)return!1}return!1}function ny(A,e){let o=arguments.length>2&&arguments[2]!==void 0&&arguments[2],a=A.split(".").map(d=>Number(d)),c=e.split(".").map(d=>Number(d));for(let d=0;dy)return!0;if(C{let A=Number(kI.split(".")[0]);return A===14||A===13})(),D2=mM&&oQ==="11.1.1",Op=typeof location<"u"&&(location.protocol==="file:"||location.hostname==="localhost"||location.hostname==="127.0.0.1"),sQ=(()=>{let A;return()=>{if(A===void 0)try{A=!!window.localStorage}catch{A=!1}return A}})(),nQ=Bk();function Bk(){let A=new Map([[er,["Firefox",lM]],[Ay,["Edg",tk]],[J0,["Chrome",H0]],[mM,["ChiOS",hg("CriOS")]],[Bg&&!mM,["Safari",oQ]],[td,["TBS",ok]],[kp,["XWEB",sk]],[tQ&&bp,["WeChat",nk]],[P0,["QQ(Win)",rk]],[uM,["QQ(Mobile)",ey]],[Lp,["QQ(Mobile X5)",ey]],[EM,["QQ(Mac)",ak]],[x0,["QQ(iPad)",dM]],[Y0,["MI",Up]],[zh,["HW",uk]],[CM,["Samsung",Ek]],[hM,["OPPO",dk]],[BM,["VIVO",QM]],[$f,["EDGE",ek]],[IM,["SogouMobile",F0]],[O0,["Sogou",ik]]]),e="unknown",o="unknown";return A.has(!0)&&([e,o]=A.get(!0)),{name:e,version:o}}var Pr=null;function q0(){return Pr&&typeof Pr.mobile=="boolean"?Pr.mobile:Ha||eg||bp||Gp||oy}var UC="";function fM(){return KA(this,null,function*(){if(Pr)return Pr;if(!navigator.userAgentData||typeof navigator.userAgentData.getHighEntropyValues!="function")return null;try{return(Pr=yield navigator.userAgentData.getHighEntropyValues(["architecture","bitness","model","platformVersion","fullVersionList"]))&&!UC&&(UC="UAData: ".concat(Pr.platform,"/").concat(Pr.platformVersion),Pr.architecture&&Pr.bitness&&(UC+=" ".concat(Pr.architecture,"/").concat(Pr.bitness)),Pr.mobile&&(UC+=" mobile"),Pr.model&&(UC+=" model: ".concat(Pr.model.replace(/\s+/g,"/"))),Pr.fullVersionList&&(UC+=" ".concat(Pr.fullVersionList.filter(A=>A.brand!=="Not/A)Brand").map(A=>"".concat(A.brand,"/").concat(A.version)).join(",")))),Pr}catch{return null}})}var yM="";function Pp(){try{if(yM)return yM;let A=document.createElement("canvas"),e=A.getContext("webgl")||A.getContext("experimental-webgl");if(!e)return"";let o=e.getExtension("WEBGL_debug_renderer_info");if(o){let a=e.getParameter(o.UNMASKED_VENDOR_WEBGL),c=e.getParameter(o.UNMASKED_RENDERER_WEBGL);return yM="".concat(a," ").concat(c)}return""}catch{return""}}function ry(){try{let A=Pp();return A.includes("AMD")||A.includes("ATI")}catch{return!1}}function S2(){try{let A=Pp();return A.includes("NVIDIA")||A.includes("GeForce")}catch{return!1}}function yK(){try{return Pp().includes("Apple M")}catch{return!1}}function rQ(){return Pr?.model||Qk()||""}function Qk(){let A=ed.match(/;\s*([^;)]+)\s+Build\//);return A!=null&&A[1]?A[1].trim():null}var M2=new Map([[Ha,"Android"],[eg,"iOS"],[ty,"Windows"],[iQ,"MacOS"],[iy,"Linux"],[gk,"ChromeOS"]]),El=function(){return M2.get(!0)?M2.get(!0):Pr?Pr.platform:"unknown"};function xp(){return ty?1:Ha?2:iQ?3:eg?4:iy?5:gk?6:oy?7:0}function jl(){return tQ||kp?4:IE?1:Bg?2:er?3:0}var Yp=()=>{let A=El();return Pr!=null&&Pr.platformVersion?A+="/".concat(Pr.platformVersion):eg?A+="/".concat(kI):Ha&&(A+="/".concat(k0)),A+="/".concat(nQ.name,"/").concat(Bg&&!mM?nQ.version:nQ.version.split(".")[0]),Pr!=null&&Pr.architecture&&(A+="/".concat(Pr.architecture)),A};function Cn(){return Ha?4:bp?2:Gp?3:iQ?12:ty?5:iy?13:oy?22:1}function Q(){return Ha?"Android":bp?"iPhone":Gp?"iPad":iQ?"Mac":ty?"Windows":iy?"Linux":"unknown"}var R,F=new(gc(Kl(),1)).default,eA=((R=eA||{}).ROOM_DESTROY="1",R.JOIN_START="21",R.JOIN_SCHEDULE_SUCCESS="22",R.JOIN_SIGNAL_CONNECTION_START="23",R.JOIN_SIGNAL_CONNECTION_END="24",R.JOIN_SEND_CMD="25",R.JOIN_RECEIVED_CMD_RES="26",R.JOIN_SUCCESS="27",R.JOIN_FAILED="28",R.LEAVE_START="51",R.LEAVE_SEND_CMD="52",R.LEAVE_SUCCESS="53",R.PUBLISH_START="61",R.SEND_FIRST_VIDEO_FRAME="62",R.PUBLISH_FAILED="63",R.SUBSCRIBE_START="81",R.SUBSCRIBE_SUCCESS="82",R.SUBSCRIBE_FAILED="84",R.UNSUBSCRIBE_SUCCESS="83",R.LOCAL_TRACK_CAPTURE_START="101",R.LOCAL_TRACK_CAPTURE_SUCCESS="102",R.LOCAL_TRACK_CAPTURE_FAILED="103",R.LOCAL_TRACK_PUBLISHED="104",R.LOCAL_TRACK_UNPUBLISHED="105",R.LOCAL_TRACK_REPLACED="106",R.SWITCH_DEVICE_SUCCESS="107",R.TRACK_MUTED="108",R.TRACK_UNMUTED="109",R.REMOTE_TRACK_SUBSCRIBED="110",R.REMOTE_TRACK_UNSUBSCRIBED="111",R.LOCAL_TRACK_RECAPTURE="112",R.LOCAL_AUDIO_STARTED="113",R.LOCAL_AUDIO_STOPPED="114",R.REMOTE_AUDIO_STARTED="115",R.REMOTE_AUDIO_STOPPED="116",R.LOCAL_TRACK_STOPPED="117",R.LOCAL_VIDEO_TRACK_PREPROCESSED="118",R.PLAY_TRACK_START="151",R.PLAYER_STATE_CHANGED="152",R.VIDEO_LOADED_DATA="153",R.AUTOPLAY_DIALOG_CLICK_CONFIRM="154",R.AUDIO_CONTEXT_LONG_SUSPENDED="155",R.REMOTE_VIDEO_PLAY_START="156",R.REMOTE_VIDEO_PLAY_FINISH="157",R.SIGNAL_CONNECTION_STATE_CHANGED="201",R.PEER_CONNECTION_STATE_CHANGED="202",R.SINGLE_CONNECTION_STAT="203",R.SPC_RECONNECTED="204",R.HEARTBEAT_REPORT="251",R.RECEIVED_PUBLISHED_USER_LIST="252",R.REMOTE_PUBLISH_STATE_CHANGED="253",R.AUDIO_LEVEL_INTERVAL="260",R.NETWORK_QUALITY="261",R.VIDEO_CODEC_IMPLEMENTATION_CHANGED="262",R.QUALITY_LIMITATION_CHANGED="263",R.LOG="264",R.AUDIO_PROCESSOR_DEBUG="265",R.SSO_SWITCH="266",R.SEI_MESSAGE="267",R.USER_PAUSE_IN_PIP="268",R.USER_RESUME_IN_PIP="269",R.ENTER_PICTURE_IN_PICTURE="270",R.LEAVE_PICTURE_IN_PICTURE="271",R.SWITCH_ROOM_START="401",R.SWITCH_ROOM_SUCCESS="407",R.SWITCH_ROOM_FAILED="408",R),nA=eA,_A=new class{constructor(){Y(this,"enable",!1),Y(this,"ssoFailCount",0),F.on("22",A=>{let{schedule:e}=A;var o;(o=e?.config)!=null&&o.sso&&F.emit("266",{enable:!0})}),F.on("266",A=>{let{enable:e}=A;this.enable=e})}handleUploadFailed(){this.ssoFailCount++,this.ssoFailCount>3&&F.emit("266",{enable:!1})}},ZA=class N9{constructor(){Y(this,"_isEnableUploadLog",!0),Y(this,"_localJoinedUser",new Map),Y(this,"_queue",[]),Y(this,"_timeoutId",-1),Y(this,"_logLevel",1),Y(this,"_logLevelToUpload",2),!i0&&!o0&&(this.checkURLParam(),this.installEvents())}get isAbleToUpload(){return this._isEnableUploadLog&&this._timeoutId!==-1}installEvents(){F.on(nA.JOIN_SCHEDULE_SUCCESS,e=>{let{schedule:o}=e;var a;(a=o?.config)!=null&&a.logLevelToUpload&&WB[o.config.logLevelToUpload]&&(this._logLevelToUpload=o.config.logLevelToUpload)}),F.on(nA.JOIN_START,e=>{let{params:o}=e;this.addJoinedUser({userId:o.userId,sdkAppId:o.sdkAppId}),this.startUpload()}),F.on(nA.LEAVE_SUCCESS,e=>{let{room:o}=e;this.deleteJoinedUser(o.userId)})}startUpload(){this._timeoutId===-1&&this.uploadInterval()}addJoinedUser(e){this._localJoinedUser.set(e.userId,e),this.startUpload()}deleteJoinedUser(e){this._localJoinedUser.delete(e)}uploadInterval(){this.upload().catch(()=>{}),this._timeoutId=window.setTimeout(()=>this.uploadInterval(),5e3)}getLogsToUpload(){let e={map:new Map,splicedQueue:[]};if(this._queue[0].forAllJoinedClients&&this._localJoinedUser.size===0)return e;let o=0;for(;o{let{userId:d,sdkAppId:C}=c;e.map.has(d)?e.map.get(d).logs.push(a):e.map.set(d,{userId:d,sdkAppId:C,logs:[a]})});else if(Yn(a.userId)&&bn(a.sdkAppId)){let{userId:c,sdkAppId:d}=a;e.map.has(c)?e.map.get(c).logs.push(a):e.map.set(c,{userId:c,sdkAppId:d,logs:[a]})}}return e.map.size>0&&(e.splicedQueue=this._queue.splice(0,o)),e}upload(){return KA(this,null,function*(){if(this._queue.length===0||!this._isEnableUploadLog)return;let{map:e,splicedQueue:o}=this.getLogsToUpload();if(e.size===0)return;try{let c=[...e.values()];for(let d=0;dgA.log).join(` -`)},V=JSON.stringify(k),J=_A.enable?AQ(k,2002,y):V;yield this.uploadLogWithRetry(J,y,J instanceof Uint8Array,V),S.forEach(gA=>gA.uploaded=!0)}}catch{}let a=o.filter(c=>!c.uploaded);a.length>0&&(this._queue=a.concat(this._queue))})}uploadLogWithRetry(e,o,a,c){return gM({retryFunction:()=>eQ({url:Hf(o,bI.LOG),body:e,timeout:5e3,priority:"low"}).then(d=>{a&&d.data!=="ok"&&(_A.handleUploadFailed(),this.uploadLogWithRetry(c,o,!1,c))}),settings:{retries:3,timeout:2e3},onError:d=>{let{retry:C}=d;C()}})()}getPrefix(e){let o=new Date;return o.setTime(Lf()),"[".concat(mb(o),"] <").concat(WB[e],">")}getLogLevel(){return this._logLevel}setLogLevel(e){Je(WB[e])||(this._logLevel!==e&&this.info("setLogLevel",e),this._logLevel=e)}enableUploadLog(){this._isEnableUploadLog=!0}disableUploadLog(){this.warn("disableUploadLog"),this._isEnableUploadLog=!1}logChunkToString(e){if(Yn(e))return e;try{return e instanceof Error?e.toString():JSON.stringify(e)}catch{return""}}addLogToQueue(e,o){let a=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],c=arguments.length>3?arguments[3]:void 0,d=arguments.length>4?arguments[4]:void 0,C={log:o.reduce((y,S)=>"".concat(y," ").concat(this.logChunkToString(S)).trim(),""),level:e,userId:c,sdkAppId:d,forAllJoinedClients:a};F.emit(nA.LOG,{log:C}),this._isEnableUploadLog&&e>=this._logLevelToUpload&&this._queue.push(C)}log(e,o){let a=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],c=arguments.length>3?arguments[3]:void 0,d=arguments.length>4?arguments[4]:void 0;var C;if(o.unshift(this.getPrefix(e)),this.addLogToQueue(e,o,a,c,d),e{let e=16*Math.random()|0;return(A=="x"?e:3&e|8).toString(16)})},jA=new class{constructor(){Y(this,"_prefix","TRTC"),Y(this,"_queue",new Map)}getRealKey(A){return"".concat(this._prefix,"_").concat(A)}checkStorage(){sQ()&&(setInterval(this.doFlush.bind(this),2e4),Object.keys(localStorage).filter(A=>{if(A.startsWith(this._prefix))try{let e=localStorage.getItem(A);if(!e)return!1;let o=JSON.parse(e);if(o&&o.expiresInlocalStorage.removeItem(A)))}doFlush(){if(sQ())try{for(let[A,e]of this._queue)localStorage.setItem(A,JSON.stringify(e))}catch(A){QA.warn(A)}}getItem(A){if(!sQ())return null;try{let e=localStorage.getItem(this.getRealKey(A));if(!e)return null;let o=JSON.parse(e);return o&&o.expiresIn>=Date.now()?o.value:null}catch(e){QA.warn(e)}}setItem(A,e){if(sQ())try{let o={expiresIn:Date.now()+r0,value:e};this._queue.set(this.getRealKey(A),o)}catch(o){QA.warn(o)}}deleteItem(A){if(!sQ())return!1;try{return A=this.getRealKey(A),this._queue.delete(A),localStorage.removeItem(A),!0}catch(e){return QA.warn(e),!1}}clear(){if(sQ())try{localStorage.clear()}catch(A){QA.warn(A)}}},te={};Hh(te,{HTTPS_API:()=>bk,IS_GET_CAPABILITIES_FROM_INPUTDEVICE_SUPPORTED:()=>L2,IS_GET_CAPABILITIES_SUPPORTED:()=>k2,IS_GET_SETTINGS_SUPPORTED:()=>Cy,IS_GET_SYNCHRONIZATION_SOURCES_SUPPORTED:()=>Pk,IS_INSERTABLE_STREAM_SUPPORTED:()=>Kp,IS_JITTER_BUFFER_TARGET_SUPPORTED:()=>uQ,IS_RTC_RTP_SENDER_SUPPORTED:()=>FC,IS_SCRIPT_TRANSFORM_SUPPORTED:()=>e_,IS_SEI_SUPPORTED:()=>xk,IS_SPC_SUPPORTED:()=>GM,basis:()=>F2,capabilityCheck:()=>Jk,checkSystemRequirementsInternal:()=>Nk,decodeSupportStatus:()=>Tk,detectH264SupportedByFakeStreaming:()=>G2,detectVideoCodecCapabilities:()=>kM,detectVideoDecoderCapabilities:()=>qk,detectVideoEncoderCapabilities:()=>Hk,encodeSupportStatus:()=>wM,getBrowserInfo:()=>vM,getDisplayResolution:()=>nd,getH264ProfileLevelIds:()=>x2,isAddTransceiverSupported:()=>Xd,isBrowserSupported:()=>wk,isCanvasCaptureStreamAPISupported:()=>TM,isCanvasSmallStreamSupported:()=>A_,isGetReceiversSupported:()=>dy,isGetSendersSupported:()=>LI,isGetTransceiversSupported:()=>IQ,isGetUserMediaSupported:()=>kk,isMediaDevicesSupported:()=>_k,isMediaSessionSupported:()=>U2,isMediaStreamTrackGeneratorSupported:()=>MK,isMediaStreamTrackProcessorSupported:()=>RM,isReplaceTrackSupported:()=>b2,isRequestVideoFrameCallbackSupported:()=>jp,isSIMDSupported:()=>bM,isScaleResolutionDownBySupported:()=>Uk,isScreenCaptureApiAvailable:()=>qp,isSelectedCandidatePair:()=>_M,isSetParametersSupported:()=>Ok,isSetSinkIdSupported:()=>RK,isSmallStreamSupported:()=>NM,isStopTransceiverSupported:()=>ia,isTRTCSupported:()=>vK,isUnifiedPlanDefault:()=>Fk,isUsedInHttpProtocol:()=>du,isWebAudioSupported:()=>Lk,isWebCodecSupported:()=>t_,isWebCodecsSupported:()=>$0,isWebRTCSupported:()=>hy,isWebTransportSupported:()=>By});var ke={};Hh(ke,{AUDIO_LEVEL_SCALE:()=>od,AlphaStitchingType:()=>Iy,AudioCodecPipelineType:()=>lQ,AudioDecoderDowngradeState:()=>DM,AudioPlayerMode:()=>W0,AudioType:()=>v2,BASIC_TYPE:()=>Dk,BannedReason:()=>Qg,CONNECTION_CLOSED_REASON:()=>Ht,CheckPermissionType:()=>cr,ClientEvent:()=>Xe,CodecType:()=>SM,ConnectionEvent:()=>xo,ConnectionState:()=>ay,DECODE_FAILED_ERROR_CODE:()=>MM,DenoiserMode:()=>Vp,DeviceType:()=>Sk,FacingMode:()=>mk,FrameWorkType:()=>to,LeaveReason:()=>fk,LocalTrackEvent:()=>So,MULTI_VIDEO_DATA_TYPE:()=>ly,MediaType:()=>K0,MediaTypeLabel:()=>DK,MonitorEventId:()=>dl,MutedFlag:()=>Zn,NetworkQualityValue:()=>uE,PlayerState:()=>uo,ReceiveMode:()=>Wl,RemoteStreamType:()=>cy,RemoteTrackEvent:()=>hn,RoomEvent:()=>Io,SMALL_MODE:()=>Hp,SceneNumber:()=>qa,StreamEvent:()=>Si,StreamType:()=>cQ,SubscribeMediaType:()=>yk,TIMER_TYPE:()=>Z0,TRACK_ACTION:()=>pk,TRACK_KIND:()=>aQ,TrackEvent:()=>Yo,UserRole:()=>Fc,UserRoleNumber:()=>ts,VideoCodec:()=>Cl,VideoCodecPipelineType:()=>Jp,VideoContentHint:()=>z0,VideoDecoderDowngradeState:()=>gy,VideoPlayerMode:()=>j0,VideoType:()=>gQ});var Te,he,lt,gi,et,Ke,dA,pt,At,Vi,li,to=(A=>(A[A.WEBRTC=30]="WEBRTC",A[A.WASM=37]="WASM",A))(to||{}),xo=((li=xo||{}).TRACK_ADDED="track-added",li.TRACK_UPDATED="track-updated",li.TRACK_SUBSCRIBED="track-subscribed",li.STREAM_ADDED="stream-added",li.STREAM_REMOVED="stream-removed",li.STREAM_UPDATED="stream-updated",li.STREAM_PUBLISHED="stream-published",li.STREAM_SUBSCRIBED="stream-subscribed",li.STREAM_UNSUBSCRIBED="stream-unsubscribed",li.STATE_CHANGED="state-changed",li.ERROR="error",li.CONNECTION_STATE_CHANGED="connection-state-changed",li.FIREWALL_RESTRICTION="firewall-restriction",li.SEI_MESSAGE="sei-message",li.CLOSED="closed",li),Ht=(A=>(A.REMOTE_LEAVE="remote user exitRoom",A.REMOTE_UNPUBLISH="remote user unpublished",A.LOCAL_LEAVE="you exitRoom",A.LOCAL_UNPUBLISH="you unpublished",A.LOCAL_UNSUBSCRIBE="you unsubscribed",A.SWITCH_ROLE="you switch role to audience",A))(Ht||{}),Xe=((Vi=Xe||{}).STREAM_ADDED="stream-added",Vi.STREAM_REMOVED="stream-removed",Vi.STREAM_UPDATED="stream-updated",Vi.STREAM_SUBSCRIBED="stream-subscribed",Vi.CONNECTION_STATE_CHANGED="connection-state-changed",Vi.PEER_JOIN="peer-join",Vi.PEER_LEAVE="peer-leave",Vi.MUTE_AUDIO="mute-audio",Vi.MUTE_VIDEO="mute-video",Vi.UNMUTE_AUDIO="unmute-audio",Vi.UNMUTE_VIDEO="unmute-video",Vi.CLIENT_BANNED="client-banned",Vi.NETWORK_QUALITY="network-quality",Vi.AUDIO_VOLUME="audio-volume",Vi.SEI_MESSAGE="sei-message",Vi.ERROR="error",Vi),Si=((At=Si||{}).PLAYER_STATE_CHANGED="player-state-changed",At.SCREEN_SHARING_STOPPED="screen-sharing-stopped",At.CONNECTION_STATE_CHANGED="connection-state-changed",At.DEVICE_AUTO_RECOVERED="device-auto-recovered",At.ERROR="error",At),So=((pt=So||{}).DEVICE_AUTO_RECOVERED="1",pt.DEVICE_RECOVER_FAILED="5",pt.DEVICE_CHANGED="2",pt.ERROR="3",pt.PUBLISH_STATE_CHANGED="4",pt.ENCODE_FAILED="6",pt.TRACK_ENDED="7",pt.RENDER="render",pt),uo=(A=>(A.PAUSED="PAUSED",A.PLAYING="PLAYING",A.STOPPED="STOPPED",A))(uo||{}),Io=((dA=Io||{}).PEER_JOIN="peer-join",dA.PEER_LEAVE="peer-leave",dA.SIGNAL_CONNECTION_STATE_CHANGED="signal-connection-state-changed",dA.MEDIA_CONNECTION_STATE_CHANGED="media-connection-state-changed",dA.BANNED="banned",dA.NETWORK_QUALITY="network-quality",dA.AUDIO_VOLUME="audio-volume",dA.SEI_MESSAGE="sei-message",dA.ERROR="error",dA.REMOTE_PUBLISH_STATE_CHANGED="remote-publish-state-changed",dA.REMOTE_PUBLISHED="remote-published",dA.REMOTE_UNPUBLISHED="remote-unpublished",dA.FIREWALL_RESTRICTION="firewall-restriction",dA.HEARTBEAT_REPORT="heartbeat-report",dA.CUSTOM_MESSAGE="custom-message",dA.LAYER_DATA="layerData",dA.FIRST_VIDEO_FRAME="first-video-frame",dA.FIRST_FRAME_RENDER="first-frame-render",dA.DUMP="dump",dA.AUDIO_FRAME="audio-frame",dA.SUBSCRIBE_SMALL_VIDEO_CHANGED="subscribe-small-video-changed",dA.LOCAL_PUBLISH_FLAG_CHANGED="local-publish-flag-changed",dA.NTP_TIME_UPDATED="ntp-time-updated",dA.DATA_CHANNEL_MESSAGE="data-channel-message",dA.ASR_ROBOT_PEER_JOIN="asr-robot-peer-join",dA.ASR_ROBOT_PEER_LEAVE="asr-robot-peer-leave",dA),Yo=((Ke=Yo||{}).PLAYER_STATE_CHANGED="player-state-changed",Ke.MUTE="mute",Ke.UNMUTE="unmute",Ke.ERROR="error",Ke.INPUT_MEDIA_TRACK_CHANGED="input-media-track-changed",Ke.OUTPUT_MEDIA_TRACK_CHANGED="output-media-track-changed",Ke.FIRST_VIDEO_FRAME="first-video-frame",Ke.FIRST_FRAME_RENDER="first-frame-render",Ke.VIDEO_SIZE_CHANGED="video-size-changed",Ke),hn=(A=>(A.DECODE_FAILED="decode-failed",A.DECODE_FAILED_DURING_CALL="decode-failed-during-call",A.DECODE_DOWNGRADE_STATE_CHANGED="decode-downgrade-state-changed",A.REMOTE_PUBLISH_CHANGED="remote-publish-changed",A.AUDIO_FRAME_WITH_NTP="audio-frame-with-ntp",A))(hn||{}),Zn=((et=Zn||{})[et.VIDEO=1]="VIDEO",et[et.SMALL=2]="SMALL",et[et.AUX=4]="AUX",et[et.AUDIO=8]="AUDIO",et[et.VIDEO_MUTE=16]="VIDEO_MUTE",et[et.AUX_MUTE=32]="AUX_MUTE",et[et.AUDIO_MUTE=64]="AUDIO_MUTE",et),qa=(A=>(A[A.RTC=1]="RTC",A[A.LIVE=2]="LIVE",A))(qa||{}),ts=(A=>(A[A.ANCHOR=20]="ANCHOR",A[A.AUDIENCE=21]="AUDIENCE",A))(ts||{}),Fc=(A=>(A.ANCHOR="anchor",A.AUDIENCE="audience",A))(Fc||{}),ay=(A=>(A.CONNECTED="CONNECTED",A.DISCONNECTED="DISCONNECTED",A.CONNECTING="CONNECTING",A.RECONNECTED="RECONNECTED",A.RECONNECTING="RECONNECTING",A))(ay||{}),DM=((gi=DM||{}).INITIALIZED="INITIALIZED",gi.STARTING="STARTING",gi.STARTED="STARTED",gi.FAILED="FAILED",gi),gy=(A=>(A.INITIALIZED="INITIALIZED",A.STARTING="STARTING",A.STARTED="STARTED",A.FAILED="FAILED",A))(gy||{}),aQ=(A=>(A.AUDIO="audio",A.VIDEO="video",A.AUXILIARY="auxVideo",A))(aQ||{}),pk=(A=>(A.ADD="add",A.REMOVE="remove",A))(pk||{}),K0=(A=>(A[A.NULL=0]="NULL",A[A.AUDIO=1]="AUDIO",A[A.AUX_VIDEO=2]="AUX_VIDEO",A[A.BIG_VIDEO=4]="BIG_VIDEO",A[A.SMALL_VIDEO=8]="SMALL_VIDEO",A))(K0||{}),DK={1:"audio",2:"auxVideo",4:"video"},v2=((lt=v2||{})[lt.opus=111]="opus",lt),gQ=(A=>(A[A.h264=100]="h264",A[A.vp8=101]="vp8",A))(gQ||{}),cQ=(A=>(A.Big="big",A.Small="small",A))(cQ||{}),cy=(A=>(A.Main="main",A.Aux="auxiliary",A))(cy||{}),ly=(A=>(A[A.MULTI_DATA_AUDIO=1]="MULTI_DATA_AUDIO",A[A.MULTI_DATA_BIG_IMG=2]="MULTI_DATA_BIG_IMG",A[A.MULTI_DATA_SMALL_IMG=3]="MULTI_DATA_SMALL_IMG",A[A.MULTI_DATA_AUX_IMG=7]="MULTI_DATA_AUX_IMG",A[A.MULTI_DATA_TYPE_BUTT=12]="MULTI_DATA_TYPE_BUTT",A))(ly||{}),dl=((he=dl||{})[he.PUBLISH_VIDEO=32768]="PUBLISH_VIDEO",he[he.PUBLISH_AUDIO=32769]="PUBLISH_AUDIO",he[he.UNPUBLISH_VIDEO=32770]="UNPUBLISH_VIDEO",he[he.UNPUBLISH_AUDIO=32771]="UNPUBLISH_AUDIO",he[he.MUTE_AUDIO=32772]="MUTE_AUDIO",he[he.MUTE_VIDEO=32773]="MUTE_VIDEO",he[he.UNMUTE_AUDIO=32774]="UNMUTE_AUDIO",he[he.UNMUTE_VIDEO=32775]="UNMUTE_VIDEO",he[he.SUBSCRIBE_VIDEO=32776]="SUBSCRIBE_VIDEO",he[he.SUBSCRIBE_AUDIO=32777]="SUBSCRIBE_AUDIO",he[he.UNSUBSCRIBE_VIDEO=32778]="UNSUBSCRIBE_VIDEO",he[he.UNSUBSCRIBE_AUDIO=32779]="UNSUBSCRIBE_AUDIO",he[he.SWITCH_CAMERA=32780]="SWITCH_CAMERA",he[he.SWITCH_MICROPHONE=32781]="SWITCH_MICROPHONE",he[he.REPLACE_VIDEO=32782]="REPLACE_VIDEO",he[he.REPLACE_AUDIO=32783]="REPLACE_AUDIO",he[he.MUTE_REMOTE_VIDEO=32784]="MUTE_REMOTE_VIDEO",he[he.MUTE_REMOTE_AUDIO=32785]="MUTE_REMOTE_AUDIO",he[he.UNMUTE_REMOTE_VIDEO=32786]="UNMUTE_REMOTE_VIDEO",he[he.UNMUTE_REMOTE_AUDIO=32787]="UNMUTE_REMOTE_AUDIO",he[he.JOIN=32788]="JOIN",he[he.LEAVE=32789]="LEAVE",he[he.SIGNAL_DISCONNECTED=32790]="SIGNAL_DISCONNECTED",he[he.SIGNAL_CONNECTED=32791]="SIGNAL_CONNECTED",he[he.TRANSPORT_UPLINK_CONNECTED=32792]="TRANSPORT_UPLINK_CONNECTED",he[he.TRANSPORT_DOWNLINK_CONNECTED=32793]="TRANSPORT_DOWNLINK_CONNECTED",he[he.SIGNAl_RECONNECTING=32794]="SIGNAl_RECONNECTING",he[he.SIGNAL_RECONNECT_SUCCESS=32795]="SIGNAL_RECONNECT_SUCCESS",he[he.SIGNAL_RECONNECT_FAIL=32796]="SIGNAL_RECONNECT_FAIL",he[he.TRANSPORT_UPLINK_RECONNECTING=32797]="TRANSPORT_UPLINK_RECONNECTING",he[he.TRANSPORT_UPLINK_RECONNECT_SUCCESS=32798]="TRANSPORT_UPLINK_RECONNECT_SUCCESS",he[he.TRANSPORT_UPLINK_RECONNECT_FAIL=32799]="TRANSPORT_UPLINK_RECONNECT_FAIL",he[he.TRANSPORT_DOWNLINK_RECONNECTING=32800]="TRANSPORT_DOWNLINK_RECONNECTING",he[he.TRANSPORT_DOWNLINK_RECONNECT_SUCCESS=32801]="TRANSPORT_DOWNLINK_RECONNECT_SUCCESS",he[he.TRANSPORT_DOWNLINK_RECONNECT_FAIL=32802]="TRANSPORT_DOWNLINK_RECONNECT_FAIL",he[he.SUBSCRIBE_SMALL_VIDEO=32803]="SUBSCRIBE_SMALL_VIDEO",he[he.UNSUBSCRIBE_SMALL_VIDEO=32804]="UNSUBSCRIBE_SMALL_VIDEO",he[he.PUBLISH_AUX=32805]="PUBLISH_AUX",he[he.UNPUBLISH_AUX=32806]="UNPUBLISH_AUX",he[he.DEVICE_CAPTURE=2003]="DEVICE_CAPTURE",he[he.VIDEO_ENCODER=4004]="VIDEO_ENCODER",he[he.VIDEO_DECODER=4005]="VIDEO_DECODER",he),uE=(A=>(A[A.UNKNOWN=0]="UNKNOWN",A[A.EXCELLENT=1]="EXCELLENT",A[A.GOOD=2]="GOOD",A[A.POOR=3]="POOR",A[A.BAD=4]="BAD",A[A.VERY_BAD=5]="VERY_BAD",A[A.DISCONNECTED=6]="DISCONNECTED",A))(uE||{}),Wl=(A=>(A[A.MANUAL=0]="MANUAL",A[A.AUTO_AUDIO=1]="AUTO_AUDIO",A[A.AUTO_VIDEO=2]="AUTO_VIDEO",A[A.AUTO_ALL=3]="AUTO_ALL",A))(Wl||{}),mk=(A=>(A.user="user",A.environment="environment",A))(mk||{}),j0=(A=>(A[A.ELEMENT=0]="ELEMENT",A[A.CANVAS_FROM_ELEMENT=1]="CANVAS_FROM_ELEMENT",A[A.CANVAS_WITHOUT_ELEMENT=2]="CANVAS_WITHOUT_ELEMENT",A))(j0||{}),W0=(A=>(A[A.ELEMENT=0]="ELEMENT",A[A.CONTEXT=1]="CONTEXT",A))(W0||{}),Qg=(A=>(A.BANNED="banned",A.KICK="kick",A.USER_TIME_OUT="user_time_out",A.ROOM_DISBAND="room_disband",A))(Qg||{}),fk=(A=>(A[A.USER_EXIT_REASON_TC_USER_EXIT_NORMAL=0]="USER_EXIT_REASON_TC_USER_EXIT_NORMAL",A[A.USER_EXIT_REASON_TC_USER_EXIT_TIMEOUT=1]="USER_EXIT_REASON_TC_USER_EXIT_TIMEOUT",A[A.USER_EXIT_REASON_TC_USER_EXIT_KICKED=2]="USER_EXIT_REASON_TC_USER_EXIT_KICKED",A[A.USER_EXIT_REASON_TC_USER_EXIT_CHANGED=3]="USER_EXIT_REASON_TC_USER_EXIT_CHANGED",A[A.USER_KICK_OUT_CODE_BUSINESS_USER=4]="USER_KICK_OUT_CODE_BUSINESS_USER",A[A.USER_KICK_OUT_CODE_BUSINESS_ROOM=5]="USER_KICK_OUT_CODE_BUSINESS_ROOM",A[A.USER_KICK_OUT_CODE_SERVER_USER=6]="USER_KICK_OUT_CODE_SERVER_USER",A[A.USER_KICK_OUT_CODE_SERVER_ROOM=7]="USER_KICK_OUT_CODE_SERVER_ROOM",A[A.USER_KICK_SESS_EXSIT=8]="USER_KICK_SESS_EXSIT",A))(fk||{}),od=1e8,Vp=(A=>(A[A.NORMAL=0]="NORMAL",A[A.FAR_FIELD_REDUCTION=1]="FAR_FIELD_REDUCTION",A))(Vp||{}),yk=class{constructor(){Y(this,"mediaType",0)}set audio(A){A?this.mediaType|=1:this.mediaType&=-2}get audio(){return!!(1&this.mediaType)}set video(A){A?this.mediaType|=4:this.mediaType&=-5}get video(){return!!(4&this.mediaType)}set auxiliary(A){A?this.mediaType|=2:this.mediaType&=-3}get auxiliary(){return!!(2&this.mediaType)}set smallVideo(A){A?this.mediaType|=8:this.mediaType&=-9}get smallVideo(){return!!(8&this.mediaType)}},Dk=(A=>(A.String="string",A.Number="number",A.Boolean="boolean",A.Array="array",A.Object="object",A))(Dk||{}),Cl=(A=>(A.H264="h264",A.H265="h265",A.VP8="vp8",A.VP9="vp9",A.AV1="av1",A))(Cl||{}),Jp=(A=>(A[A.ENCRYPT_AND_DECRYPT=0]="ENCRYPT_AND_DECRYPT",A[A.DUMP=1]="DUMP",A[A.SEI=2]="SEI",A[A.ENCODE_AND_DECODE=3]="ENCODE_AND_DECODE",A))(Jp||{}),lQ=(A=>(A[A.ENCRYPT_AND_DECRYPT=0]="ENCRYPT_AND_DECRYPT",A[A.NTP_TO_AUDIO_FRAME=1]="NTP_TO_AUDIO_FRAME",A[A.DUMP=2]="DUMP",A[A.ENCODE_AND_DECODE=3]="ENCODE_AND_DECODE",A))(lQ||{}),SM=(A=>(A.WebRTC="webrtc",A.WebCodecs="webcodecs",A.WebAssembly="webassembly",A))(SM||{}),MM=((Te=MM||{})[Te.SUCCESS=0]="SUCCESS",Te[Te.FAILED=1]="FAILED",Te[Te.WEBCODEC_INIT=2]="WEBCODEC_INIT",Te[Te.WEBCODEC_CONFIG_NOT_SUPPORT=3]="WEBCODEC_CONFIG_NOT_SUPPORT",Te[Te.WEBCODEC_DECODER_ERROR=4]="WEBCODEC_DECODER_ERROR",Te[Te.WEBCODEC_TRACK_MUTE=5]="WEBCODEC_TRACK_MUTE",Te[Te.WASM_INIT=6]="WASM_INIT",Te[Te.WASM_WEBGL_UNAVALIABLE=7]="WASM_WEBGL_UNAVALIABLE",Te[Te.WASM_DECODER_ERROR=8]="WASM_DECODER_ERROR",Te[Te.WASM_TRACK_MUTE=9]="WASM_TRACK_MUTE",Te[Te.TEST=10]="TEST",Te[Te.RENDER_2D_ERROR=11]="RENDER_2D_ERROR",Te),z0=(A=>(A.NONE="",A.DETAIL="detail",A.MOTION="motion",A.TEXT="text",A))(z0||{}),Z0=(A=>(A.INTERVAL="interval",A.TIMEOUT="timeout",A.RAF="raf",A.RIC="ric",A.INTERVAL_IN_WORKER="intervalInWorker",A))(Z0||{}),Hp=(A=>(A.CANVAS="canvas",A.API="api",A))(Hp||{}),cr=(A=>(A[A.NONE=0]="NONE",A[A.MICROPHONE=1]="MICROPHONE",A[A.CAMERA=2]="CAMERA",A[A.BOTH=3]="BOTH",A))(cr||{}),Sk=(A=>(A.CAMERA="camera",A.MICROPHONE="microphone",A))(Sk||{}),Iy=(A=>(A[A.none=0]="none",A[A.horizontal=1]="horizontal",A[A.vertical=2]="vertical",A))(Iy||{}),Mo={AVOID_REPEATED_CALL:"AVOID_REPEATED_CALL",INVALID_PARAMETER_REQUIRED:"INVALID_PARAMETER_REQUIRED",INVALID_PARAMETER_TYPE:"INVALID_PARAMETER_TYPE",INVALID_PARAMETER_EMPTY:"INVALID_PARAMETER_EMPTY",INVALID_PARAMETER_INSTANCE:"INVALID_PARAMETER_INSTANCE",INVALID_PARAMETER_RANGE:"INVALID_PARAMETER_RANGE",INVALID_PARAMETER_MIN:"INVALID_PARAMETER_MIN",INVALID_PARAMETER_MAX:"INVALID_PARAMETER_MAX",INVALID_PARAMETER_STREAMTYPE:"INVALID_PARAMETER_STREAMTYPE",API_CALL_TIMEOUT:"API_CALL_TIMEOUT",SIGNAL_CHANNEL_RECONNECTION_FAILED:"SIGNAL_CHANNEL_RECONNECTION_FAILED",SIGNAL_CHANNEL_SETUP_FAILED:"SIGNAL_CHANNEL_SETUP_FAILED",ERROR_MESSAGE:"ERROR_MESSAGE",EXCHANGE_SDP_TIMEOUT:"EXCHANGE_SDP_TIMEOUT",DOWNLINK_RECONNECTION_FAILED:"DOWNLINK_RECONNECTION_FAILED",EXCHANGE_SDP_FAILED:"EXCHANGE_SDP_FAILED",UPDATE_OFFER_TIMEOUT:"UPDATE_OFFER_TIMEOUT",UPLINK_RECONNECTION_FAILED:"UPLINK_RECONNECTION_FAILED",INVALID_RECORDID:"INVALID_RECORDID",INVALID_PURE_AUDIO:"INVALID_PURE_AUDIO",INVALID_STREAMID:"INVALID_STREAMID",INVALID_USER_DEFINE_RECORDID:"INVALID_USER_DEFINE_RECORDID",INVALID_USER_DEFINE_PUSH_ARGS:"INVALID_USER_DEFINE_PUSH_ARGS",INVALID_PROXY:"INVALID_PROXY",INVALID_JOIN:"INVALID_JOIN",INVALID_ROOMID_STRING:"INVALID_ROOMID_STRING",INVALID_ROOMID_INTEGER:"INVALID_ROOMID_INTEGER",INVALID_SIGNAL_CHANNEL:"INVALID_SIGNAL_CHANNEL",JOIN_ROOM_TIMEOUT:"JOIN_ROOM_TIMEOUT",JOIN_ROOM_FAILED:"JOIN_ROOM_FAILED",REJOIN_ROOM_FAILED:"REJOIN_ROOM_FAILED",INVALID_DESTROY:"INVALID_DESTROY",INVALID_PUBLISH:"INVALID_PUBLISH",INVALID_UNPUBLISH:"INVALID_UNPUBLISH",INVALID_AUDIENCE:"INVALID_AUDIENCE",INVALID_INITIALIZE:"INVALID_INITIALIZE",INVALID_DUPLICATE_PUBLISHING:"INVALID_DUPLICATE_PUBLISHING",INVALID_SUBSCRIBE_UNDEFINED:"INVALID_SUBSCRIBE_UNDEFINED",INVALID_SUBSCRIBE_LOCAL:"INVALID_SUBSCRIBE_LOCAL",INVALID_REMOTE_STREAM:"INVALID_REMOTE_STREAM",SUBSCRIBE_FAILED:"SUBSCRIBE_FAILED",INVALID_ROLE:"INVALID_ROLE",INVALID_PARAMETER_SWITCH_ROLE:"INVALID_PARAMETER_SWITCH_ROLE",INVALID_OPERATION_SWITCH_ROLE:"INVALID_OPERATION_SWITCH_ROLE",SWITCH_ROLE_TIMEOUT:"SWITCH_ROLE_TIMEOUT",SWITCH_ROLE_FAILED:"SWITCH_ROLE_FAILED",CLIENT_BANNED:"CLIENT_BANNED",INVALID_OPERATION_START_PUBLISH_CDN:"INVALID_OPERATION_START_PUBLISH_CDN",INVALID_OPERATION_STOP_PUBLISH_CDN:"INVALID_OPERATION_STOP_PUBLISH_CDN",INVALID_STREAM_ID:"INVALID_STREAM_ID",START_PUBLISH_CDN_FAILED:"START_PUBLISH_CDN_FAILED",STOP_PUBLISH_CDN_FAILED:"STOP_PUBLISH_CDN_FAILED",START_MIX_TRANSCODE:"START_MIX_TRANSCODE",STOP_MIX_TRANSCODE:"STOP_MIX_TRANSCODE",INVALID_AUDIO_VOLUME:"INVALID_AUDIO_VOLUME",ENABLE_SMALL_STREAM_PUBLISHED:"ENABLE_SMALL_STREAM_PUBLISHED",DISABLE_SMALL_STREAM_PUBLISHED:"DISABLE_SMALL_STREAM_PUBLISHED",NOT_SUPPORTED_SMALL_STREAM:"NOT_SUPPORTED_SMALL_STREAM",INVALID_SMALL_STREAM_PROFILE:"INVALID_SMALL_STREAM_PROFILE",INVALID_PARAMETER_REMOTE_STREAM:"INVALID_PARAMETER_REMOTE_STREAM",INVALID_OPERATION_CHANGE_SMALL:"INVALID_OPERATION_CHANGE_SMALL",REMOTE_NOT_PUBLISH_SMALL_STREAM:"REMOTE_NOT_PUBLISH_SMALL_STREAM",INVALID_SWITCH_DEVICE:"INVALID_SWITCH_DEVICE",INVALID_SWITCH_DEVICE_PUBLISHING:"INVALID_SWITCH_DEVICE_PUBLISHING",INVALID_REPLACE_TRACK:"INVALID_REPLACE_TRACK",INVALID_INITIALIZE_LOCAL_STREAM:"INVALID_INITIALIZE_LOCAL_STREAM",INVALID_ADD_TRACK_REPETITIVE:"INVALID_ADD_TRACK_REPETITIVE",INVALID_ADD_TRACK_REMOVING:"INVALID_ADD_TRACK_REMOVING",INVALID_ADD_TRACK_PUBLISHING:"INVALID_ADD_TRACK_PUBLISHING",INVALID_STREAM_INITIALIZED:"INVALID_STREAM_INITIALIZED",INVALID_ADD_TRACK_NUMBER:"INVALID_ADD_TRACK_NUMBER",INVALID_REMOVE_AUDIO_TRACK:"INVALID_REMOVE_AUDIO_TRACK",INVALID_REMOVE_AUDIO_ADDING:"INVALID_REMOVE_AUDIO_ADDING",INVALID_REMOVE_AUDIO_ON:"INVALID_REMOVE_AUDIO_ON",INVALID_REMOVE_TRACK_PUBLISHING:"INVALID_REMOVE_TRACK_PUBLISHING",INVALID_REMOVE_TRACK_NOT_TRACK:"INVALID_REMOVE_TRACK_NOT_TRACK",INVALID_REMOVE_TRACK_NUMBER:"INVALID_REMOVE_TRACK_NUMBER",INVALID_REPLACE_TRACK_NO_TRACK:"INVALID_REPLACE_TRACK_NO_TRACK",REPEAT_JOIN:"REPEAT_JOIN",CLIENT_DESTROYED:"CLIENT_DESTROYED",NOT_BUG_PACKAGE:"NOT_BUG_PACKAGE",START_MIX_TRANSCODE_FAILED:"START_MIX_TRANSCODE_FAILED",STOP_MIX_TRANSCODE_FAILED:"STOP_MIX_TRANSCODE_FAILED",MIX_TRANSCODE_NOT_STARTED:"MIX_TRANSCODE_NOT_STARTED",CANNOT_LESS_THAN_ZERO:"CANNOT_LESS_THAN_ZERO",MIX_PARAMS_VIDEO_FRAMERATE:"MIX_PARAMS_VIDEO_FRAMERATE",MIX_PARAMS_VIDEO_GOP:"MIX_PARAMS_VIDEO_GOP",MIX_PARAMS_AUDIO_BITRATE:"MIX_PARAMS_AUDIO_BITRATE",MIX_PARAMS_USER_Z_ORDER:"MIX_PARAMS_USER_Z_ORDER",MIX_PARAMS_NOT_SELF:"MIX_PARAMS_NOT_SELF",MIX_PARAMS_USER_STREAM:"MIX_PARAMS_USER_STREAM",INVALID_PLAY:"INVALID_PLAY",INVALID_ELEMENT_ID:"INVALID_ELEMENT_ID",INVALID_ELEMENT_ID_TYPE:"INVALID_ELEMENT_ID_TYPE",PLAY_FAILED:"PLAY_FAILED",INVALID_USERID:"INVALID_USERID",INVALID_CREATE_STREAM_SOURCE:"INVALID_CREATE_STREAM_SOURCE",INVALID_CREATE_STREAM_SCREEN:"INVALID_CREATE_STREAM_SCREEN",INVALID_CREATE_STREAM_AUDIO:"INVALID_CREATE_STREAM_AUDIO",INVALID_CREATE_STREAM_SCREEN_AUDIO:"INVALID_CREATE_STREAM_SCREEN_AUDIO",NOT_SUPPORTED_HTTP:"NOT_SUPPORTED_HTTP",NOT_SUPPORTED_WEBRTC:"NOT_SUPPORTED_WEBRTC",NOT_SUPPORTED_PROFILE:"NOT_SUPPORTED_PROFILE",NOT_SUPPORTED_MEDIA:"NOT_SUPPORTED_MEDIA",NOT_SUPPORTED_H264ENCODE:"NOT_SUPPORTED_H264ENCODE",NOT_SUPPORTED_H264DECODE:"NOT_SUPPORTED_H264DECODE",NOT_SUPPORTED_TRACK:"NOT_SUPPORTED_TRACK",NOT_SUPPORTED_SWITCH_DEVICE:"NOT_SUPPORTED_SWITCH_DEVICE",NOT_SUPPORTED_CAPTURE:"NOT_SUPPORTED_CAPTURE",NOT_SUPPORTED_AUX:"NOT_SUPPORTED_AUX",MICROPHONE_NOT_FOUND:"MICROPHONE_NOT_FOUND",CAMERA_NOT_FOUND:"CAMERA_NOT_FOUND",SIGNAL_RESPONSE_FAILED:"SIGNAL_RESPONSE_FAILED",CATCH_HANDLER_ERROR:"CATCH_HANDLER_ERROR",API_NOT_EXIST:"API_NOT_EXIST",CONNECTION_CLOSED:"CONNECTION_CLOSED",SUBSCRIBE_ALL_FALSE:"SUBSCRIBE_ALL_FALSE",SEI_NOT_SUPPORT:"SEI_NOT_SUPPORT",SEI_DISABLED:"SEI_DISABLED",SEI_BEFORE_PUBLISH:"SEI_BEFORE_PUBLISH",SEI_NOT_VIDEO:"SEI_NOT_VIDEO",CALL_FREQUENCY_LIMIT:"CALL_FREQUENCY_LIMIT",CONNECTION_ABORTED:"CONNECTION_ABORTED",API_CALL_ABORTED:"API_CALL_ABORTED",DUPLICATE_AUX:"DUPLICATE_AUX",SWITCH_PLAYBACK_QUALITY_TIMEOUT:"SWITCH_PLAYBACK_QUALITY_TIMEOUT"},cc={AVOID_REPEATED_CALL:A=>"previous ".concat(A.name,"() is ongoing, please avoid repeated calls."),INVALID_PARAMETER_REQUIRED(A){let{key:e,rule:o,fnName:a,value:c}=A;return"'".concat(e||o.name,"' is a required param when calling ").concat(a,"(), received: ").concat(c,".")},INVALID_PARAMETER_TYPE(A){let{key:e,rule:o,fnName:a,value:c}=A,d="".concat(e||o.name),C="";return C=Array.isArray(o.type)?o.type.join("|"):o.type,"'".concat(d,"' must be type of ").concat(C," when calling ").concat(a,"(), received type: ").concat(Cg(c),".")},INVALID_PARAMETER_EMPTY(A){let{key:e,rule:o,fnName:a,value:c}=A;return"'".concat(e||o.name,"' cannot be '").concat(c,"' when calling ").concat(a,"().")},INVALID_PARAMETER_INSTANCE(A){let{key:e,rule:o,fnName:a,value:c}=A,d="".concat(e||o.name),C="".concat(o.instanceOf.name||o.instanceOf);return"'".concat(d,"' must be instanceof ").concat(C," when calling ").concat(a,"(), received type: ").concat(Cg(c),".")},INVALID_PARAMETER_RANGE(A){let{key:e,rule:o,fnName:a,value:c}=A;return"'".concat(e||o.name,"' must be one of ").concat(o.values.join("|")," when calling ").concat(a,"(), received: ").concat(c,".")},INVALID_PARAMETER_MIN(A){let{key:e,rule:o,fnName:a,value:c}=A;return"the min value of ".concat(e||o.name," is ").concat(o.min,", received: ").concat(c,".")},INVALID_PARAMETER_MAX(A){let{key:e,rule:o,fnName:a,value:c}=A;return"the max value of ".concat(e||o.name," is ").concat(o.max,", received: ").concat(c,".")},API_CALL_TIMEOUT:A=>"".concat(A.commandDesc||A.command," timeout observed."),SIGNAL_CHANNEL_RECONNECTION_FAILED:"signal channel reconnection failed, please check your network.",SIGNAL_CHANNEL_SETUP_FAILED:A=>"SignalChannel setup failure: (errorCode: ".concat(A.errorCode,", errorMsg: ").concat(A.errorMsg," })."),ERROR_MESSAGE(A){let e="".concat(A.type," failed");return A.message&&(e="".concat(e,": ").concat(A.message,".")),e},EXCHANGE_SDP_TIMEOUT:"exchange sdp timeout.",DOWNLINK_RECONNECTION_FAILED:"downlink reconnection failed, please check your network and re-join room.",EXCHANGE_SDP_FAILED:A=>"exchange sdp failed ".concat(A.errMsg,"."),UPDATE_OFFER_TIMEOUT:"update offer timeout observed.",UPLINK_RECONNECTION_FAILED:"uplink reconnection failed, please check your network and publish again.",INVALID_RECORDID:"recordId must be an integer number.",INVALID_PURE_AUDIO:"pureAudioPushMode must be 1 or 2.",INVALID_STREAMID:"streamId must be a sting literal within 64 bytes, and not be empty.",INVALID_USER_DEFINE_RECORDID:"userDefineRecordId must be a sting literal contains (a-zA-Z),(0-9), underline and hyphen, within 64 bytes, and not be empty.",INVALID_USER_DEFINE_PUSH_ARGS:"userDefinePushArgs must be a sting literal within 256 bytes, and not be empty.",INVALID_PROXY:'proxy server url must start with "wss://".',INVALID_JOIN:"duplicate join() called.",INVALID_ROOMID_STRING:A=>"'".concat(A,"' must be validate string when useStringRoomId is true."),INVALID_ROOMID_INTEGER:A=>"'".concat(A,"' must be an integer between [1, 4294967294] when useStringRoomId is false."),INVALID_SIGNAL_CHANNEL:"SignalChannel is not ready yet.",JOIN_ROOM_TIMEOUT:"join room timeout.",JOIN_ROOM_FAILED(A){let{error:e,code:o}=A;return"Failed to join room - ".concat(e," code: ").concat(o)},REJOIN_ROOM_FAILED:A=>"reJoin room: ".concat(A.roomId," failed, please check your network."),INVALID_DESTROY:"please call leave() before destroy().",INVALID_PUBLISH:"please call join() before publish().",INVALID_UNPUBLISH:"stream has not been published yet.",INVALID_AUDIENCE:'no permission to publish() under live/audience, please call switchRole("anchor") firstly before publish().',INVALID_INITIALIZE:"cannot publish stream because stream is not initialized, is switching device, or has been closed.",INVALID_DUPLICATE_PUBLISHING:A=>"duplicate ".concat(A," stream publishing, please unpublish your prev ").concat(A," stream and then re-publish."),INVALID_SUBSCRIBE_UNDEFINED:"stream is undefined or null.",INVALID_SUBSCRIBE_LOCAL:"stream cannot be LocalStream.",INVALID_REMOTE_STREAM:"remoteStream does not exist because it has been unpublished by remote peer.",SUBSCRIBE_FAILED(A){let{message:e,userId:o,streamType:a}=A;return"failed to subscribe ".concat(o," ").concat(a," stream, reason: ").concat(e,".")},INVALID_ROLE:"switchRole can only be called in live mode.",INVALID_PARAMETER_SWITCH_ROLE:"role could only be set to a value as anchor or audience.",INVALID_OPERATION_SWITCH_ROLE:"please call join() before switchRole().",SWITCH_ROLE_TIMEOUT:"switchRole timeout.",SWITCH_ROLE_FAILED:A=>"switchRole failed, errCode: ".concat(A.code," errMsg: ").concat(A.message,"."),CLIENT_BANNED:A=>"client was banned because of ".concat(A.message,"."),INVALID_OPERATION_START_PUBLISH_CDN:"please call startPublishCDNStream() after join room and publish the local stream.",INVALID_OPERATION_STOP_PUBLISH_CDN:"please call startPublishCDNStream() before stopPublishCDNStream().",START_PUBLISH_CDN_FAILED:A=>"startPublishCDNStream failed, errMsg: ".concat(A.message,"."),STOP_PUBLISH_CDN_FAILED:A=>"stopPublishCDNStream failed, errMsg: ".concat(A.message,"."),INVALID_STREAM_ID:A=>"'".concat(A,"' can only consist of uppercase and lowercase english letters (a-zA-Z), numbers (0-9), hyphens and underscores."),START_MIX_TRANSCODE:"please call startMixTranscode() after join().",STOP_MIX_TRANSCODE:"please call stopMixTranscode() after startMixTranscode().",INVALID_AUDIO_VOLUME:"interval must be a number.",ENABLE_SMALL_STREAM_PUBLISHED:"Cannot enable small stream after localStream published.",DISABLE_SMALL_STREAM_PUBLISHED:"Cannot disable small stream after localStream published.",NOT_SUPPORTED_SMALL_STREAM:"your browser does not support opening small stream.",INVALID_SMALL_STREAM_PROFILE:"small stream profile is invalid.",INVALID_PARAMETER_REMOTE_STREAM:"remoteStream is invalid.",INVALID_OPERATION_CHANGE_SMALL:"cannot switch to the small stream without subscribing to the video of remoteStream.",REMOTE_NOT_PUBLISH_SMALL_STREAM:"remote peer does not publish small stream.",INVALID_SWITCH_DEVICE:"cannot switch device on current stream.",INVALID_SWITCH_DEVICE_PUBLISHING:"cannot switch device when publishing localStream.",INVALID_REPLACE_TRACK:"cannot replace track when publishing localStream.",INVALID_INITIALIZE_LOCAL_STREAM:"local stream has not initialized yet.",INVALID_ADD_TRACK_REPETITIVE:"previous addTrack is ongoing, please avoid repetitive execution.",INVALID_ADD_TRACK_REMOVING:"cannot add track when a track is removing.",INVALID_ADD_TRACK_PUBLISHING:"cannot add track when publishing localStream.",INVALID_STREAM_INITIALIZED:"your local stream haven't been initialized yet.",INVALID_ADD_TRACK_NUMBER:"a Stream has at most one audio track and one video track.",INVALID_REMOVE_AUDIO_TRACK:"remove audio track is not supported on your browser.",INVALID_REMOVE_AUDIO_ADDING:"cannot remove track when a track is adding.",INVALID_REMOVE_AUDIO_ON:"previous removeTrack is ongoing, please avoid repetitive execution.",INVALID_REMOVE_TRACK_PUBLISHING:"cannot remove track when publishing localStream.",INVALID_REMOVE_TRACK_NOT_TRACK:"localStream has not this track.",INVALID_REMOVE_TRACK_NUMBER:"remove the only video track is not supported, please use replaceTrack or muteVideo.",INVALID_REPLACE_TRACK_NO_TRACK:A=>"cannot replace ".concat(A.kind," track because stream has not ").concat(A.kind," track"),NOT_BUG_PACKAGE:"You need to buy packages, refer to tencent console.",START_MIX_TRANSCODE_FAILED:A=>"startMixTranscode failed, errMsg: ".concat(A.message,"."),STOP_MIX_TRANSCODE_FAILED:A=>"stopMixTranscode failed, errMsg: ".concat(A.message,"."),MIX_TRANSCODE_NOT_STARTED:"mixTranscode has not been started.",CANNOT_LESS_THAN_ZERO(A){let{key:e,rule:o,fnName:a,value:c}=A;return"'".concat(e||o.name,"' cannot be less than 0 when calling ").concat(a,"().")},MIX_PARAMS_VIDEO_FRAMERATE:"'config.videoFramerate' should be an integer between 0 and 30, excluding 0.",MIX_PARAMS_VIDEO_GOP:"'config.videoGOP' should be an integer between 1 and 8.",MIX_PARAMS_AUDIO_BITRATE:"'config.audioBitrate' should be an integer between 32 and 192.",MIX_PARAMS_USER_Z_ORDER:A=>"'".concat(A,"' is required and must be between 1 and 15."),MIX_PARAMS_NOT_SELF:"'config.mixUsers' must contain self.",MIX_PARAMS_USER_STREAM:"'config.videoWidth' and 'config.videoHeight' of output stream should be contain all mix stream.",INVALID_PLAY:"duplicate play() call observed, please stop() firstly.",INVALID_ELEMENT_ID:A=>{let{key:e,fnName:o}=A;return"'".concat(e,"' is not found in the document object when calling ").concat(o,"().")},INVALID_ELEMENT_ID_TYPE:A=>{let{key:e,fnName:o,type:a}=A;return"the element corresponding to '".concat(e,"' must be instanceof HTMLElement when calling ").concat(o,"(), received: ").concat(a,".")},PLAY_FAILED:A=>"".concat(A.media," play failed, browser exception: ").concat(A.error.toString()),INVALID_USERID:"userId cannot be all spaces.",INVALID_CREATE_STREAM_SOURCE:"LocalStream must be created by createStream() with either audio/video or audioSource/videoSource, but can not be mixed with audio/video and audioSource/videoSource.",INVALID_CREATE_STREAM_SCREEN:"screen/video cannot be both true.",INVALID_CREATE_STREAM_AUDIO:"audio/screenAudio cannot be both true.",INVALID_CREATE_STREAM_SCREEN_AUDIO:"when screen is true, screenAudio can be configured.",NOT_SUPPORTED_HTTP:"http protocol does not support the ability to capture microphone, camera and screen. please use https to deploy your page.",NOT_SUPPORTED_WEBRTC:"your browser or environment does not support full WebRTC capabilities.",NOT_SUPPORTED_PROFILE:"your browser does not support setVideoProfile.",NOT_SUPPORTED_MEDIA:"your browser or environment does not support navigator.mediaDevices.",NOT_SUPPORTED_H264ENCODE:"your device does not support H.264 encoding.",NOT_SUPPORTED_H264DECODE:"your device does not support H.264 decoding.",NOT_SUPPORTED_TRACK:A=>"".concat(A,"Track is not supported on your browser."),NOT_SUPPORTED_SWITCH_DEVICE:"switchDevice is not supported on your browser.",NOT_SUPPORTED_CAPTURE:"Your browser or environment does not support screen sharing, please check whether the browser version.",MICROPHONE_NOT_FOUND:"no microphone detected, please check your microphone.",CAMERA_NOT_FOUND:"no camera detected, please check your camera.",SIGNAL_RESPONSE_FAILED:A=>"".concat(A.signalResponse," failed, response code is ").concat(A.code," , errMsg: ").concat(A.message,"."),CATCH_HANDLER_ERROR(A){let{name:e,event:o}=A;return"an error was caught in ".concat(e,".on('").concat(o,"', handler), please check your code in 'handler'.")},API_NOT_EXIST(A){let{name:e}=A;return"experimental api ".concat(e," does not exist.")},REPEAT_JOIN:A=>"please avoid repeated join.",CONNECTION_CLOSED:"remoteStream has been unsubscribed or unpublished by remote user.",SUBSCRIBE_ALL_FALSE:"cannot subscribe when both audio & video are false, use client.unsubscribe() instead",CLIENT_DESTROYED(A){let{funName:e}=A;return"failed to call ".concat(e,"() because client was destroyed.")},SEI_NOT_SUPPORT:A=>"not support to sendSEIMessage".concat(A===!1?" without using h264 codec":""),SEI_DISABLED:"SEI is disabled",SEI_BEFORE_PUBLISH:"please call sendSEIMessage() after publish() success",SEI_NOT_VIDEO:"cannot send sei when localStream has not video.",CALL_FREQUENCY_LIMIT:A=>{let{isSize:e,name:o,timesInSecond:a,maxSizeInSecond:c}=A;return"api ".concat(o," call ").concat(e?"size":"times"," is over ").concat(e?"".concat(c," bytes"):a," in a second.")},CONNECTION_ABORTED:A=>"connection aborted due to: ".concat(A),API_CALL_ABORTED(A){let e;return e=A.message.includes("REMOTE_STREAM_NOT_EXIST")?"Subscribe ".concat(A.userId," ").concat(A.streamType," stream aborted, reason: remote user ").concat(A.userId," unpublished stream."):"API aborted, reason: ".concat(A.message),e},DUPLICATE_AUX:"only one auxiliary stream can be published in a room.",NOT_SUPPORTED_AUX:"publish auxiliary stream is not supported on your browser.",INVALID_PARAMETER_STREAMTYPE:A=>"'streamType' is required when 'userId' is not '*', calling ".concat(A,"()"),SWITCH_PLAYBACK_QUALITY_TIMEOUT:A=>"switchPlaybackQuality timeout: waiting for first frame of user ".concat(A.userId,".")},R2=(A,e)=>e?"".concat(qh,"/").concat(A,"/").concat(e):"".concat(qh,"/").concat(A,"/index.html"),Mk=()=>{if(window.TRTC_ERROR_INFO&&window.TRTC_ERROR_LINK)return{TRTC_ERROR_INFO:window.TRTC_ERROR_INFO,TRTC_ERROR_LINK:window.TRTC_ERROR_LINK};let A=localStorage==null?void 0:localStorage.getItem(JS);if(A){A=JSON.parse(A);let e=document.createElement("script");e.type="text/javascript",e.text=A.message,document.body.appendChild(e);let o=window.TRTC_ERROR_INFO,a=window.TRTC_ERROR_LINK;return document.body.removeChild(e),{TRTC_ERROR_INFO:o,TRTC_ERROR_LINK:a}}return{}};function Xo(A){let{key:e,data:o,link:a,addDocLink:c=!0}=A,d="",C="",y="";Ra(cc[e])?d=cc[e](o):Yn(cc[e])&&(d=cc[e]);let{TRTC_ERROR_INFO:S,TRTC_ERROR_LINK:k}=Mk();a?y="".concat(a.className,".html#").concat(a.fnName):k&&k[e]&&(Ra(k[e])?y=k[e](o):Yn(k[e])&&(y=k[e]));let V=d;return Wd()&&(S&&S[e]&&(Ra(S[e])?C=S[e](o):Yn(S[e])&&(C=S[e])),C&&(V=c?"".concat(C,` -请查看文档: `).concat(R2("zh-cn",y),` +`}}),Sb=Kh(A=>{var e=kx(),o=Lx();A.write=o,A.parse=e.parse,A.parseParams=e.parseParams,A.parseFmtpConfig=e.parseFmtpConfig,A.parsePayloads=e.parsePayloads,A.parseRemoteCandidates=e.parseRemoteCandidates,A.parseImageAttributes=e.parseImageAttributes,A.parseSimulcastStreamList=e.parseSimulcastStreamList}),BK=gc(jl()),WB=((lo=WB||{})[lo.INVALID_PARAMETER=4096]="INVALID_PARAMETER",lo[lo.INVALID_OPERATION=4097]="INVALID_OPERATION",lo[lo.NOT_SUPPORTED=4098]="NOT_SUPPORTED",lo[lo.DEVICE_NOT_FOUND=4099]="DEVICE_NOT_FOUND",lo[lo.INITIALIZE_FAILED=4100]="INITIALIZE_FAILED",lo[lo.SIGNAL_CHANNEL_SETUP_FAILED=16385]="SIGNAL_CHANNEL_SETUP_FAILED",lo[lo.SIGNAL_CHANNEL_ERROR=16386]="SIGNAL_CHANNEL_ERROR",lo[lo.ICE_TRANSPORT_ERROR=16387]="ICE_TRANSPORT_ERROR",lo[lo.JOIN_ROOM_FAILED=16388]="JOIN_ROOM_FAILED",lo[lo.CREATE_OFFER_FAILED=16389]="CREATE_OFFER_FAILED",lo[lo.SIGNAL_CHANNEL_RECONNECTION_FAILED=16390]="SIGNAL_CHANNEL_RECONNECTION_FAILED",lo[lo.UPLINK_RECONNECTION_FAILED=16391]="UPLINK_RECONNECTION_FAILED",lo[lo.DOWNLINK_RECONNECTION_FAILED=16392]="DOWNLINK_RECONNECTION_FAILED",lo[lo.REMOTE_STREAM_NOT_EXIST=16400]="REMOTE_STREAM_NOT_EXIST",lo[lo.CLIENT_BANNED=16448]="CLIENT_BANNED",lo[lo.SERVER_TIMEOUT=16449]="SERVER_TIMEOUT",lo[lo.SUBSCRIPTION_TIMEOUT=16450]="SUBSCRIPTION_TIMEOUT",lo[lo.PLAY_NOT_ALLOWED=16451]="PLAY_NOT_ALLOWED",lo[lo.DEVICE_AUTO_RECOVER_FAILED=16452]="DEVICE_AUTO_RECOVER_FAILED",lo[lo.START_PUBLISH_CDN_FAILED=16453]="START_PUBLISH_CDN_FAILED",lo[lo.STOP_PUBLISH_CDN_FAILED=16454]="STOP_PUBLISH_CDN_FAILED",lo[lo.START_MIX_TRANSCODE_FAILED=16455]="START_MIX_TRANSCODE_FAILED",lo[lo.STOP_MIX_TRANSCODE_FAILED=16456]="STOP_MIX_TRANSCODE_FAILED",lo[lo.NOT_SUPPORTED_H264=16457]="NOT_SUPPORTED_H264",lo[lo.SWITCH_ROLE_FAILED=16458]="SWITCH_ROLE_FAILED",lo[lo.API_CALL_TIMEOUT=16459]="API_CALL_TIMEOUT",lo[lo.SCHEDULE_FAILED=16460]="SCHEDULE_FAILED",lo[lo.API_CALL_ABORTED=16461]="API_CALL_ABORTED",lo[lo.SPC_INITIALIZED_FAILED=16462]="SPC_INITIALIZED_FAILED",lo[lo.VIDEO_MANAGER_ERROR=16463]="VIDEO_MANAGER_ERROR",lo[lo.SWITCH_ROOM_FAILED=16464]="SWITCH_ROOM_FAILED",lo[lo.VIDEO_ENCODE_FAILED=16465]="VIDEO_ENCODE_FAILED",lo[lo.AUDIO_ENCODE_FAILED=16466]="AUDIO_ENCODE_FAILED",lo[lo.UNKNOWN=65535]="UNKNOWN",lo),Ct=WB,Ux=class extends Error{constructor(A){let{name:e="RtcError",message:o,code:a=Ct.UNKNOWN,extraCode:l=0,constraint:d}=A,h="<".concat(function(S){for(let k in Ct)if(Ct[k]===S)return k;return"UNKNOWN"}(a)," 0x").concat(a.toString(16),">"),y="".concat(o).concat(d?" constraint: ".concat(d):"").concat(o!=null&&o.includes(h)?"":" ".concat(h));super(y),Y(this,"code"),Y(this,"extraCode"),Y(this,"message"),Y(this,"originMessage"),Y(this,"name"),Y(this,"constraint"),this.code=a,this.extraCode=l,this.name=e,this.message=y,this.constraint=d,this.originMessage=o}getCode(){return this.code}getExtraCode(){return this.extraCode}toString(){return this.originMessage}},gi=Ux,Mb=0,Fx=!0,zB=function(A){Mb=A;let e=new Date;e.setTime(e.getTime()+A),pA[Fx?"info":"debug"]("baseTime from server: ".concat(e," offset: ").concat(A)),Fx=!1},Ox=function(){return Mb},Of=function(){return Date.now()+Mb},Px=function(){let A=new Date;return A.setTime(Of()),A.toLocaleString()},vb=function(A){let e=String(A.getMilliseconds());return"padStart"in String.prototype&&(e=e.toString().padStart(3,"0")),"".concat(A.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/,"$1"),":").concat(e)},Hd={};jh(Hd,{REPORT_TYPE:()=>G0,buildSSOPackage:()=>iQ,bytes2ms:()=>M0,calculateScaleResolutionDownNumber:()=>N0,concatArrayBuffers:()=>lM,convertObjectNumberToInt:()=>T0,copyProperties:()=>c2,deepClone:()=>$f,deepCloneBasic:()=>Ay,deepMerge:()=>Xh,delay:()=>OC,fibonacci:()=>zf,formatedTime:()=>B2,getConstructorName:()=>nM,getContainerFromElement:()=>zb,getEnv:()=>r2,getFirst16Bits:()=>p2,getInternalVersion:()=>C2,getLast16Bits:()=>b0,getLoggerUrl:()=>jf,getMediaStreamTrackInfo:()=>ek,getMuteStateFromFlag:()=>Np,getNetworkType:()=>D0,getNumNetworkType:()=>Wf,getReconnectionTimeout:()=>Tp,getStringByteLength:()=>_0,getTestSignalDomain:()=>a2,getTurnServer:()=>h2,getUint32Version:()=>Xb,getValueType:()=>Cg,getViewListFromView:()=>gM,glog:()=>I2,ipv4ToUint32:()=>aM,isArray:()=>wa,isAudioWorkletSupported:()=>u2,isBoolean:()=>Nr,isConstructor:()=>Xf,isEmpty:()=>R0,isFunction:()=>Ra,isLangChinese:()=>Wd,isMediaStreamTrack:()=>jb,isNumber:()=>kn,isObject:()=>XE,isOverseaSdkAppId:()=>Kd,isPlainObject:()=>IE,isPortrait:()=>Zb,isPromise:()=>Zf,isRemoteTrack:()=>Wb,isRotate90Or270:()=>tQ,isSetSinkIdSupported:()=>E2,isString:()=>Vn,isUndefined:()=>Ke,isVideoMixerOutputTrack:()=>Gp,loadImage:()=>cM,loadVideo:()=>Q2,ms2bytes:()=>l2,ms2samples:()=>v0,normalizeUrl:()=>Ak,performanceNow:()=>ko,promiseAny:()=>rM,samples2ms:()=>Kb,setNetworkTypeFromWebRTC:()=>S0,stringify:()=>zd,stringifyIncludeValue:()=>w0,throttlePromise:()=>$b});var xx={};jh(xx,{ASR_ROBOT_FROM_TYPE:()=>B0,AUDIO_MUTE_BIT:()=>Yf,AUDIO_STAT_BIT:()=>ZS,AUX_STAT_BIT:()=>zS,AUX_STREAM_MSID:()=>jx,BACKEND_ENV:()=>Pf,BASE_DOC_URL:()=>Wh,BASE_HOST:()=>Vx,CAPABILITIES_KEYS:()=>Ob,CLASS_NAME:()=>vK,CLOUD_CONSOLE_URL:()=>mK,CROSS_ROOM_BIT:()=>Gb,DATA_CHANNEL_FROM_TYPE_BIT:()=>$B,DATA_FREEZE_TIMING:()=>Ub,DOC_BILLING_CN:()=>a0,DOC_BILLING_OVERSEA:()=>_b,DOC_URL:()=>fK,DTLS_STATE_UNKNOWN:()=>zh,ENV_NAME:()=>ZB,EXCHANGE_SDP_TIMEOUT:()=>$x,IS_WORKER:()=>n0,IS_WORKLET:()=>r0,KIBANA_EVENT:()=>Ja,LOCAL_STREAM_PUBLISH_STATE:()=>A2,LOGGER_CMD_TYPE:()=>kI,LOGGER_DOMAIN:()=>bI,LOGGER_DOMAIN_OVERSEA:()=>vp,LOG_LEVEL:()=>XB,LOG_LEVEL_NAME:()=>wK,MAIN_STREAM_MSID:()=>Eu,MAX_RTT:()=>h0,MICROPHONE_COMMUNICATIONS:()=>RK,MICROPHONE_DEFAULT:()=>AM,MUTE_ALL_BIT:()=>Kx,NAME:()=>YA,NETWORK_TYPE:()=>g0,NOT_SUPPORTED_H264:()=>d0,PAUSED_RETRY_COUNT:()=>_p,PEERCONNECTION_CONNECTING_TIMEOUT:()=>Fb,PEER_CONNECTION_STATE:()=>ho,PEER_LEAVE_REASON:()=>i2,RECOVER_CAPTURE_INTERVAL:()=>tM,REMOTE_STREAM_TYPE_AUX:()=>bb,REMOTE_STREAM_TYPE_MAIN:()=>l0,RENDER_FREEZE_TIMING:()=>e2,SCHEDULE_DOMAIN:()=>eQ,SCHEDULE_TIMEOUT:()=>t2,SDP_SEMANTICS_PLAN_B:()=>E0,SDP_SEMANTICS_UNIFIED_PLAN:()=>$S,SECOND_HOST:()=>Jx,SIGNAL_PING_PONG_INTERVAL:()=>lE,SIGNAL_PING_TIMEOUT:()=>Hx,SIGNAL_RECONNECTION_COUNT:()=>yK,SMALL_STAT_BIT:()=>Nb,SPEAKER_DEFAULT:()=>C0,STORAGE_EXPIRES_TIME:()=>c0,STREAM_TYPE_BIG:()=>SK,STREAM_TYPE_SMALL:()=>MK,SUBSCRIBE_SMALL_RETRY_COUNT:()=>eM,SYNC_USER_LIST_INTERVAL:()=>DK,Scene:()=>xf,THIRD_HOST:()=>pK,TRANSPORT_DIRECTION:()=>Xn,TRTC_ERROR_ASSISTANCE:()=>KS,TRTC_QUALITY_BAD:()=>Vf,TRTC_QUALITY_DISCONNECTED:()=>Zx,TRTC_QUALITY_EXCELLENT:()=>I0,TRTC_QUALITY_GOOD:()=>AQ,TRTC_QUALITY_POOR:()=>Wx,TRTC_QUALITY_UNKNOWN:()=>kb,TRTC_QUALITY_VERY_BAD:()=>zx,UPDATE_OFFER_TIMEOUT:()=>Xx,VIDEO_MUTE_BIT:()=>XS,VIDEO_STAT_BIT:()=>WS,WEBGL_ATTRIBUTES:()=>Pb,audioProfileMap:()=>Rp,defaultBigVideoProfile:()=>jS,defaultSmallVideoProfile:()=>qx,getRetryCount:()=>Jf,getScriptDir:()=>QK,innerVersion:()=>s0,loggerProxy:()=>wb,screenProfileMap:()=>Tb,setLoggerProxy:()=>qS,setRetryCount:()=>u0,setVersion:()=>Yx,version:()=>qd,videoProfileMap:()=>FC});var s0="4.15.00.1600",qd="5.0.0";function Yx(A){qd=A;let[e,o,a]=A.split(".").map(l=>parseInt(l,10));s0="".concat(e,".").concat(Math.min(15,o),".").concat(Math.min(15,a),".").concat(o.toString().padStart(2,"0")).concat(a.toString().padStart(2,"0"))}var Rb,cE,n0=typeof importScripts<"u",r0=typeof registerProcessor<"u",QK=()=>{let A=n0?self.location.href:document.currentScript.src;return A.substring(0,A.lastIndexOf("/")+1)},wb="",qS=A=>wb=A,Vx="web.sdk.qcloud.com",Jx="web.sdk.tencent.cn",pK="web.sdk.cloud.tencent.cn",mK="https://console.cloud.tencent.com/trtc",Wh="https://".concat(Vx,"/trtc/webrtc/doc"),fK="".concat(Wh,"/zh-cn/"),a0="https://cloud.tencent.com/document/product/647/85386",_b="https://trtc.io/document/56025",bI="https://yun.tim.qq.com",vp="https://apisgp.my-imcloud.com",KS="trtc_error_assistance",kI={LOG:"jssdk_log",EVENT:"jssdk_event",KEY_POINT:"jssdk_new_endreport",KV_STAT:"jssdk_key_metrics_report"},ZB={QCLOUD:"qcloud",OLD_CLOUD_LADDER:"trtc",WEBRTC:"webrtc"},XB=((cE=XB||{})[cE.TRACE=0]="TRACE",cE[cE.DEBUG=1]="DEBUG",cE[cE.INFO=2]="INFO",cE[cE.WARN=3]="WARN",cE[cE.ERROR=4]="ERROR",cE[cE.NONE=5]="NONE",cE),Hx=18e3,lE=2e3,g0={unknown:0,wifi:1,"4g":2,"3g":3,"2g":4,wired:5,"5g":6},c0=6048e5,Rp={standard:{sampleRate:48e3,channelCount:1,bitrate:40},"standard-stereo":{sampleRate:48e3,channelCount:2,bitrate:64},high:{sampleRate:48e3,channelCount:1,bitrate:128},"high-stereo":{sampleRate:48e3,channelCount:2,bitrate:192}},FC={"120p":{width:160,height:120,frameRate:15,bitrate:200},"120p_2":{width:160,height:120,frameRate:15,bitrate:100},"180p":{width:320,height:180,frameRate:15,bitrate:350},"180p_2":{width:320,height:180,frameRate:15,bitrate:150},"240p":{width:320,height:240,frameRate:15,bitrate:400},"240p_2":{width:320,height:240,frameRate:15,bitrate:200},"360p":{width:640,height:360,frameRate:15,bitrate:800},"360p_2":{width:640,height:360,frameRate:15,bitrate:400},"480p":{width:640,height:480,frameRate:15,bitrate:900},"480p_2":{width:640,height:480,frameRate:15,bitrate:500},"720p":{width:1280,height:720,frameRate:15,bitrate:1500},"1080p":{width:1920,height:1080,frameRate:15,bitrate:2e3},"1440p":{width:2560,height:1440,frameRate:30,bitrate:4860},"4K":{width:3840,height:2160,frameRate:30,bitrate:9e3}},jS=FC["480p_2"],qx=FC["120p_2"],Tb={"480p":{width:640,height:480,frameRate:5,bitrate:900},"480p_2":{width:640,height:480,frameRate:30,bitrate:1e3},"720p":{width:1280,height:720,frameRate:5,bitrate:1200},"720p_2":{width:1280,height:720,frameRate:30,bitrate:3e3},"1080p":{width:1920,height:1080,frameRate:5,bitrate:1600},"1080p_2":{width:1920,height:1080,frameRate:30,bitrate:4e3}},YA={CANVAS:"canvas",AUDIO:"audio",VIDEO:"video",SCREEN:"screen",SMALL:"small",BIG:"big",AUXILIARY:"auxiliary",SMALL_VIDEO:"smallVideo",FACING_MODE_USER:"user",FACING_MODE_ENVIRONMENT:"environment",MUTE:"mute",UNMUTE:"unmute",ENDED:"ended",PLAYING:"playing",PAUSE:"pause",ERROR:"error",LOADSTART:"loadstart",LOADEDDATA:"loadeddata",LOADEDMETADATA:"loadedmetadata",AUDIO_INPUT:"audioinput",VIDEO_INPUT:"videoinput",DETAIL:"detail",TEXT:"text",MAIN:"main",BACKUP:"backup",BANNED:"banned",KICK:"kick",USER_TIME_OUT:"user_time_out",ROOM_DISBAND:"room_disband",SEI_MESSAGE:"sei-message",ADD:"add",REMOVE:"remove",REPLACE:"replace",TRACK:"track",SUBSCRIBE:"subscribe",UNSUBSCRIBE:"unsubscribe",TRANSCEIVER_DIRECTION_SENDONLY:"sendonly",TRANSCEIVER_DIRECTION_RECVONLY:"recvonly",ENTER_PICTURE_IN_PICTURE:"enterpictureinpicture",LEAVE_PICTURE_IN_PICTURE:"leavepictureinpicture",FULLSCREEN_CHANGE:"fullscreenchange",RESIZE:"resize",TIME_UPDATE:"timeupdate"},Xn={INACTIVE:"inactive",SENDONLY:"sendonly",RECVONLY:"recvonly"},Pf={OLD_CLOUD_LADDER:"wss://trtc.rtc.qq.com",WEBRTC:"wss://webrtc.qq.com"},xf=((Rb=xf||{}).LIVE="live",Rb.RTC="rtc",Rb),WS=1,Nb=2,zS=4,ZS=8,Yf=64,XS=16,Kx=112,Gb=128,$B=256,Eu="5Y2wZK8nANNAoVw6dSAHVjNxrD1ObBM2kBPV",jx="224d130c-7b5c-415b-aaa2-79c2eb5a6df2",l0=YA.MAIN,bb=YA.AUXILIARY,kb=0,I0=1,AQ=2,Wx=3,Vf=4,zx=5,Zx=6,zh="unknown",ho={NEW:"new",CONNECTING:"connecting",FAILED:"failed",CLOSED:"closed",DISCONNECTED:"disconnected",CONNECTED:"connected",COMPLETED:"completed"},Lb=1/0;function u0(A){Lb=A}function Jf(){return Lb}var wp,yK=30,Ja={JOIN:"join",DELTA_JOIN:"delta-join",REJOIN:"rejoin",LEAVE:"leave",DELTA_LEAVE:"delta-leave",PUBLISH:"publish",DELTA_PUBLISH:"delta-publish",UNPUBLISH:"unpublish",SUBSCRIBE:"subscribe",UNSUBSCRIBE:"unsubscribe",UPLINK_CONNECTION:"uplink-connection",UPLINK_RECONNECTION:"uplink-reconnection",DOWNLINK_CONNECTION:"downlink-connection",DOWNLINK_RECONNECTION:"downlink-reconnection",ON_TRACK:"ontrack",ICE_CONNECTION_STATE:"iceConnectionState",LOCAL_STREAM_INITIALIZE:"stream-initialize",SIGNAL_CONNECTION:"websocketConnectionState",SIGNAL_RECONNECTION:"websocketReconnectionState",UPDATE_STREAM:"update-stream",RECOVER_LOCAL_AUDIO_TRACK:"recover-local-audio-track",RECOVER_LOCAL_VIDEO_TRACK:"recover-local-video-track",RECOVER_SUBSCRIPTION:"recover-subscription",START_MIX_TRANSCODE:"start-mix-transcode",STOP_MIX_TRANSCODE:"stop-mix-transcode",PLAYER_ERROR:"player-error",SCHEDULE:"schedule",LOAD_WORKLET:"load-worklet",VIDEO_FROZEN_COUNT:"videoFrozenCount",GET_USER_MEDIA_RETRY:"getUserMedia-retry",VIDEO_ENCODE_FAILED_DURING_CALL:"video-encode-failed-during-call",VIDEO_ENCODE_RESUME_DURING_CALL:"video-encode-resume-during-call",AUDIO_ENCODE_FAILED_DURING_CALL:"audio-encode-failed-during-call",AUDIO_ENCODE_RESUME_DURING_CALL:"audio-encode-resume-during-call",VIDEO_DECODE_FAILED_DURING_CALL:"video-decode-failed-during-call",VIDEO_DECODE_RESUME_DURING_CALL:"video-decode-resume-during-call",AUDIO_DECODE_FAILED_DURING_CALL:"audio-decode-failed-during-call",AUDIO_DECODE_RESUME_DURING_CALL:"audio-decode-resume-during-call",VIDEO_HARDWARE_DECODE_FAILED:"video-hardware-decode-failed",VIDEO_HARDWARE_DECODE_RESUME:"video-hardware-decode-resume"},DK=1e4,Xx=1e4,$x=1e4,$S="unified-plan",E0="plan-b",d0=1028,A2=((wp=A2||{})[wp.UNPUBLISH=-1]="UNPUBLISH",wp[wp.PUBLISHING=0]="PUBLISHING",wp[wp.PUBLISHED=1]="PUBLISHED",wp),Ub=500,e2=1e3,SK=YA.BIG,MK=YA.SMALL,Fb=1e4,eQ={MAIN:"schedule.cloud-rtc.com",BACKUP:"schedule.cloud-rtc.net",MAIN_OVERSEA:"schedule.rtc-web.com",BACKUP_OVERSEA:"schedule.rtc-web.io",MAIN_OVERSEA_BACKUP:"intl-schedule.cloud-rtc.com"},t2=2e3,vK={TRTC:"TRTC",CLIENT:"Client",LOCAL_STREAM:"LocalStream",REMOTE_STREAM:"RemoteStream",STREAM:"Stream"},_p=5,AM="default",C0=AM,RK="communications",wK=Object.keys(XB),i2=["normal leave","timeout leave","kick","role change"],eM=10,tM=2e3,Ob=["width","height","frameRate","facingMode","sampleRate","sampleSize","channelCount","deviceId","min","max"],h0=1e4,B0=14,Pb={alpha:!0,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0,powerPreference:"low-power"},o2=function(A,e,o,a){return new(o||(o=Promise))(function(l,d){function h(k){try{S(a.next(k))}catch(V){d(V)}}function y(k){try{S(a.throw(k))}catch(V){d(V)}}function S(k){k.done?l(k.value):function(V){return V instanceof o?V:new o(function(J){J(V)})}(k.value).then(h,y)}S((a=a.apply(A,[])).next())})},Q0=Symbol(32),p0=Symbol(16),xb=Symbol(8),Hf=class{constructor(A){this.g=A,this.consumed=0,A&&(this.need=A.next().value)}setG(A){this.g=A,this.demand(A.next().value,!0)}consume(){this.buffer&&this.consumed&&(this.buffer.copyWithin(0,this.consumed),this.buffer=this.buffer.subarray(0,this.buffer.length-this.consumed),this.consumed=0)}demand(A,e){return e&&this.consume(),this.need=A,this.flush()}read(A){return o2(this,void 0,void 0,function*(){return this.lastReadPromise&&(yield this.lastReadPromise),this.lastReadPromise=new Promise((e,o)=>{var a;this.reject=o,this.resolve=l=>{delete this.lastReadPromise,delete this.resolve,delete this.need,e(l)},this.demand(A,!0)||(a=this.pull)===null||a===void 0||a.call(this,A)})})}readU32(){return this.read(Q0)}readU16(){return this.read(p0)}readU8(){return this.read(xb)}close(){var A;this.g&&this.g.return(),this.buffer&&this.buffer.subarray(0,0),(A=this.reject)===null||A===void 0||A.call(this,new Error("EOF")),delete this.lastReadPromise}flush(){if(!this.buffer||!this.need)return;let A=null,e=this.buffer.subarray(this.consumed),o=0,a=l=>e.length<(o=l);if(typeof this.need=="number"){if(a(this.need))return;A=e.subarray(0,o)}else if(this.need===Q0){if(a(4))return;A=e[0]<<24|e[1]<<16|e[2]<<8|e[3]}else if(this.need===p0){if(a(2))return;A=e[0]<<8|e[1]}else if(this.need===xb){if(a(1))return;A=e[0]}else if("buffer"in this.need){if("byteOffset"in this.need){if(a(this.need.byteLength-this.need.byteOffset))return;new Uint8Array(this.need.buffer,this.need.byteOffset).set(e.subarray(0,o)),A=this.need}else if(this.g)return void this.g.throw(new Error("Unsupported type"))}else{if(a(this.need.byteLength))return;new Uint8Array(this.need).set(e.subarray(0,o)),A=this.need}return this.consumed+=o,this.g?this.demand(this.g.next(A).value,!0):this.resolve&&this.resolve(A),A}write(A){if(A instanceof Uint8Array?this.malloc(A.length).set(A):"buffer"in A?this.malloc(A.byteLength).set(new Uint8Array(A.buffer,A.byteOffset,A.byteLength)):this.malloc(A.byteLength).set(new Uint8Array(A)),!this.g&&!this.resolve)return new Promise(e=>this.pull=e);this.flush()}writeU32(A){this.malloc(4).set([A>>24&255,A>>16&255,A>>8&255,255&A]),this.flush()}writeU16(A){this.malloc(2).set([A>>8&255,255&A]),this.flush()}writeU8(A){this.malloc(1)[0]=A,this.flush()}malloc(A){if(this.buffer){let e=this.buffer.length,o=e+A;if(o<=this.buffer.buffer.byteLength-this.buffer.byteOffset)this.buffer=new Uint8Array(this.buffer.buffer,this.buffer.byteOffset,o);else{let a=new Uint8Array(o);a.set(this.buffer),this.buffer=a}return this.buffer.subarray(e,o)}return this.buffer=new Uint8Array(A),this.buffer}};Hf.U32=Q0,Hf.U16=p0,Hf.U8=xb;var iM=128;function m0(A){let e=new Hf;for(;A>=128;)e.malloc(1)[0]=255&A|iM,A>>>=7;return e.malloc(1)[0]=255&A,e.buffer||new Uint8Array(0)}function f0(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=new Hf,a=e<<3;switch(typeof A){case"boolean":let l=o.malloc(2);l[0]=a,l[1]=A?1:0;break;case"number":o.malloc(1)[0]=a,o.write(m0(A));break;case"string":o.malloc(1)[0]=2|a;let d=new TextEncoder().encode(A);o.write(m0(d.length));let h=o.malloc(d.length);for(let S=0;S>>24&255),this.buffer.push(A>>>16&255),this.buffer.push(A>>>8&255),this.buffer.push(255&A)}writeInt16(A){this.buffer.push(A>>>8&255),this.buffer.push(255&A)}writeByte(A){this.buffer.push(255&A)}writeBytes(A){for(let e=0;e>>24&255,A[o+1]=e>>>16&255,A[o+2]=e>>>8&255,A[o+3]=255&e}function du(A,e){return A[e]<<24|A[e+1]<<16|A[e+2]<<8|A[e+3]}function n2(A,e){return A[e]}function Kf(A,e,o){return new TextDecoder().decode(function(a,l,d){return a.slice(l,l+d)}(A,e,o))}var oM=0,Yb=2654435769,y0=16,Zh=2,sM=7;function Vb(A,e){let o=new s2,a=function(we,Di,Le){let Qt=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"AVQualityReportSvc.C2S";return{version:arguments.length>4&&arguments[4]!==void 0?arguments[4]:2e3,encryption:arguments.length>5&&arguments[5]!==void 0?arguments[5]:2,d2:"",d2Len:0,uinType:arguments.length>6&&arguments[6]!==void 0?arguments[6]:30,uin:"",uinLen:0,reqHead:{seqNumber:Le,appId:we,appidAtThird:new Uint8Array(0),a2:"",a2Len:0,serviceCmd:Qt,serviceCmdLen:0,cookie:"",cookieLen:0,imei:"",imeiLen:0,ksid:"",ksidLen:0,clientVersionInfo:"",clientVersionInfoLen:0},busiBuff:Di}}(e,A,oM);oM=oM+1&2147483647,o.writeInt32(0),o.writeInt32(a.version),o.writeByte(a.encryption);let l=new TextEncoder().encode(a.d2);o.writeInt32(l.length+4),l&&o.writeBytes(l),o.writeByte(a.uinType);let d=new TextEncoder().encode(a.uin);o.writeInt32(d.length+4),d.length&&o.writeBytes(d);let h=new s2;h.writeInt32(0),h.writeInt32(a.reqHead.seqNumber),h.writeInt32(a.reqHead.appId),h.writeByte(a.reqHead.appId>>>24&255),h.writeByte(a.reqHead.appId>>>16&255),h.writeByte(a.reqHead.appId>>>8&255),h.writeByte(255&a.reqHead.appId);for(let we=4;we<16;we++)h.writeByte(0);let y=new TextEncoder().encode(a.reqHead.a2);h.writeInt32(y.length+4),y.length&&h.writeBytes(y);let S=new TextEncoder().encode(a.reqHead.serviceCmd);h.writeInt32(S.length+4),S.length&&h.writeBytes(S);let k=new TextEncoder().encode(a.reqHead.cookie);h.writeInt32(k.length+4),k.length&&h.writeBytes(k);let V=new TextEncoder().encode(a.reqHead.imei);h.writeInt32(V.length+4),V.length&&h.writeBytes(V);let J=new TextEncoder().encode(a.reqHead.ksid);h.writeInt32(J.length+4),J.length&&h.writeBytes(J);let cA=new TextEncoder().encode(a.reqHead.clientVersionInfo);h.writeInt16(cA.length+2),cA.length&&h.writeBytes(cA);let CA=h.length;h.data[0]=CA>>>24&255,h.data[1]=CA>>>16&255,h.data[2]=CA>>>8&255,h.data[3]=255&CA,Vn(A)&&(A=new TextEncoder().encode(A)),h.writeInt32(A.length+4),A.length&&h.writeBytes(A);let MA=new Uint8Array(h.data),ie=null;a.encryption===1?ie=new TextEncoder().encode(a.uin):a.encryption===2&&(ie=new Uint8Array(16)),ie&&(MA=function(we,Di){let Le=we.length,Qt=(Le+1+Zh+sM)%8;Qt&&(Qt=8-Qt);let Bi=Le+1+Zh+sM+Qt,Si=new Uint8Array(Bi),Jo=0,Ho=new Uint8Array(8),Qn=new Uint8Array(8),qo=new Uint8Array(8),Ns=0;Ho[0]=248&Math.floor(256*Math.random())|Qt,Ns=1;for(let ya=0;ya>>24&255,pe[1]=qe>>>16&255,pe[2]=qe>>>8&255,pe[3]=255&qe,pe}function Jb(A,e,o,a,l,d){for(let h=0;h<8;h++)A[h]^=a[h];(function(h,y,S,k){let V=du(h,0),J=du(h,4),cA=[];for(let MA=0;MA<4;MA++)cA[MA]=du(y,4*MA);let CA=0;for(let MA=0;MA>>=0,V+=(J<<4)+cA[0]^J+CA^(J>>>5)+cA[1],V>>>=0,J+=(V<<4)+cA[2]^V+CA^(V>>>5)+cA[3],J>>>=0;qf(S,V,k),qf(S,J,k+4)})(A,e,l,d);for(let h=0;h<8;h++)l[d+h]^=o[h];for(let h=0;h<8;h++)o[h]=A[h]}var r2=function(){return new URLSearchParams(location.search).get("trtc_env")||""},a2=function(A){return A.includes(".")?A:"".concat(A).concat(".rtc.qq.com")},Kd=A=>Number(A)<14e8,jf=function(A,e){let o;o=wb||(Kd(A)?vp:bI);let a=Math.floor(Math.random()*JS(2,31));return"".concat(o,"/v5/AVQualityReportSvc/C2S?random=").concat(a,"&sdkappid=").concat(A,"&cmdtype=").concat(e)},Hb="unknown";function D0(){(function(){var d;g2||(g2=!0,(d=navigator.connection)==null||d.addEventListener("typechange",_K))})();let{userAgent:A,connection:e}=navigator,o=(A.match(/NetType\/\S+/)||[])[0]||"";o=o.toLowerCase().replace("nettype/",""),o==="3gnet"&&(o="3g");let a=e&&e.type&&e.type.toLowerCase(),l=e&&e.effectiveType&&e.effectiveType.toLowerCase();return l==="slow-2"&&(l="2g"),a?qb(a,l):Hb}function _K(){pA.warn("netType changed",D0())}var g2=!1;function qb(A,e){if(g0[A])return A;switch(A){case"cellular":case"wimax":return e||"unknown";case"ethernet":return"wired";default:return"unknown"}}function S0(A){Hb=qb(A)}function Wf(){return g0[D0()]}function c2(A,e){for(let o of Reflect.ownKeys(e))if(o!=="constructor"&&o!=="prototype"&&o!=="name"){let a=Object.getOwnPropertyDescriptor(e,o)||"";Object.defineProperty(A,o,a)}return A}function M0(A){return Kb(A/4,arguments.length>1&&arguments[1]!==void 0?arguments[1]:48e3)}function Kb(A){return 1e3*A/(arguments.length>1&&arguments[1]!==void 0?arguments[1]:48e3)}function l2(A){return 4*v0(A,arguments.length>1&&arguments[1]!==void 0?arguments[1]:48e3)}function v0(A){return A*(arguments.length>1&&arguments[1]!==void 0?arguments[1]:48e3)/1e3}var I2=typeof window<"u"&&typeof window.glog=="function"?window.glog:()=>{},Wd=()=>{let A=navigator.language;return A=A.substring(0,2),A==="zh"},IE=function(A){if(!A||typeof A!="object"||Object.prototype.toString.call(A)!="[object Object]")return!1;let e=Object.getPrototypeOf(A);if(e===null)return!0;let o=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof o=="function"&&o instanceof o&&Function.prototype.toString.call(o)===Function.prototype.toString.call(Object)};function zf(A){let e=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1;return A<=1?e:zf(A-1,e,(arguments.length>1&&arguments[1]!==void 0?arguments[1]:1)+e)}function Tp(A){return A>8?3e4:1e3*zf(A)}function Cg(A){return Reflect.apply(Object.prototype.toString,A,[]).replace(/^\[object\s(\w+)\]$/,"$1").toLowerCase()}var Ra=A=>typeof A=="function",Ke=A=>A===void 0,Vn=A=>typeof A=="string",kn=A=>typeof A=="number",Nr=A=>typeof A=="boolean",XE=A=>Cg(A)==="object",wa=A=>Cg(A)==="array",jb=A=>Cg(A)==="MediaStreamTrack".toLowerCase(),Wb=A=>A.isRemote,Zf=A=>Cg(A)==="promise",Xf=A=>Ra(A)&&A.prototype.constructor===A,nM=A=>Xf(A)?A.prototype.constructor.name:"",u2=typeof AudioWorkletNode<"u",E2=typeof HTMLMediaElement<"u"&&"setSinkId"in HTMLMediaElement.prototype;function rM(A){return new Promise((e,o)=>{let a=[];A.forEach(l=>{l.then(e).catch(d=>{a.push(d),a.length===A.length&&o(a)})})})}function ko(){return performance&&performance.now?Math.floor(performance.now()):Date.now()}var d2=A=>+A<10?"0".concat(A):A,C2=A=>{let e=A.match(/^\d+\.\d+\.\d+/)[0];if(!e)return A;let o=e.split("."),a=d2(o[1])+d2(o[2]);return o[1]-15>0&&(o[1]="15"),o[2]-15>0&&(o[2]="15"),"".concat(o.join("."),".").concat(a)},TK=Object.prototype.hasOwnProperty;function R0(A){if(A==null)return!0;if(typeof A=="boolean")return!1;if(typeof A=="number")return A===0;if(typeof A=="string"||typeof A=="function"||Array.isArray(A))return A.length===0;if(A instanceof Error)return A.message==="";if(IE(A))switch(Object.prototype.toString.call(A)){case"[object File]":case"[object Map]":case"[object Set]":return A.size===0;case"[object Object]":for(let e in A)if(TK.call(A,e))return!1;return!0}return!1}function Np(A,e){return{userId:e,hasAudio:!!(A&ZS),hasVideo:!!(A&WS),hasAuxiliary:!!(A&zS),hasSmall:!!(A&Nb),audioMuted:!!(A&Yf),videoMuted:!!(A&XS),audioAvailable:!(!(A&ZS)||A&Yf),videoAvailable:!(!(A&WS)||A&XS),hasDatachannel:!!(A&$B)}}function h2(A){let e={urls:A.url.startsWith("turn:")||A.url.startsWith("turns:")?A.url:"turn:".concat(A.url)};return!Ke(A.username)&&!Ke(A.credential)&&(e.username=A.username,e.credential=A.credential,e.credentialType="password",Ke(A.credentialType)||(e.credentialType=A.credentialType)),e}function aM(A){let e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];if(!Vn(A))return 0;let o=A.split(".");return e?(Number(o[0])<<24|Number(o[1])<<16|Number(o[2])<<8|Number(o[3]))>>>0:(Number(o[3])<<24|Number(o[2])<<16|Number(o[1])<<8|Number(o[0]))>>>0}var Xh=function(A,e,o,a){if(!XE(A)||!XE(e))return 0;let l,d=0,h=Object.keys(e);for(let y=0,S=h.length;y{e[a]=$f(o)}),e}if(XE(A)){let e={};return Object.keys(A).forEach(o=>{e[o]=$f(A[o])}),e}return A}var gM=A=>{let e=[];if(wa(A))e=[...A];else if(Vn(A)){let o=document.getElementById(A);o&&e.push(o)}else A&&e.push(A);return e},zb=A=>Vn(A)?document.getElementById(A):A,B2=()=>(A=>{let e=S=>S<10?"0".concat(S):"".concat(S),o=A.getFullYear(),a=A.getMonth()+1,l=A.getDate(),d=e(A.getHours()),h=e(A.getMinutes()),y=e(A.getSeconds());return"".concat(o,"/").concat(a,"/").concat(l," ").concat(d,":").concat(h,":").concat(y)})(new Date);function zd(A,e){let{keysToInclude:o,keysToExclude:a}=e;try{if(wa(A))return"[".concat(A.map(y=>zd(y,{keysToInclude:o,keysToExclude:a})).join(","),"]");if(!IE(A)||!wa(o)&&!wa(a))return JSON.stringify(A);let l={},d=new Set(o),h=new Set(a);return Object.keys(A).forEach(y=>{(h.size===0&&d.has(y)||d.size===0&&!h.has(y))&&(l[y]=IE(A[y])||wa(A[y])?JSON.parse(zd(A[y],{keysToExclude:a,keysToInclude:o})):A[y])}),JSON.stringify(l)}catch{return"{}"}}function w0(A){let e=arguments.length>1&&arguments[1]!==void 0&&arguments[1],o=[];return Object.keys(A).forEach(a=>{e===A[a]&&o.push(a)}),zd(A,{keysToInclude:o})}function _0(A){return A.replace(/[\u4e00-\u9fa5]/g,"aa").length}var Zb=()=>{var A,e,o,a;return(A=window.screen)!=null&&A.orientation?!((a=(o=(e=window.screen)==null?void 0:e.orientation)==null?void 0:o.type)==null||!a.includes("portrait")):window.orientation===0||window.orientation===180},cM=A=>WA(null,null,function*(){return new Promise((e,o)=>{let a;if(Vn(A))a=new Image,a.crossOrigin="anonymous",a.src=A;else if(a=A,a.complete)return void e(a);a.onload=()=>e(a),a.onerror=()=>{o(new gi({code:Ct.INVALID_PARAMETER,message:"load image failed, url: ".concat(A)}))}})}),Xb=A=>{let e=A.split(".");return+e[0]<<24|+e[1]<<16|+e[2]<<8|+e[3]},T0=A=>(Object.keys(A).forEach(e=>{kn(A[e])&&(e.startsWith("uint")||e.startsWith("int"))?A[e]=Math.floor(A[e]):(IE(A[e])||wa(A[e]))&&T0(A[e])}),A);function OC(A,e){return new Promise(o=>{let a=setTimeout(o,A);e&&e(a)})}function $b(A,e){let o=null;return function(){for(var a=arguments.length,l=new Array(a),d=0;do=null),o)}}function Ak(A){return A.replace(/(^|[^:])\/{2,}/g,"$1/")}function ek(A){var e;try{let{width:o,height:a,frameRate:l,sampleRate:d,sampleSize:h,channelCount:y}=(e=A.getSettings)==null?void 0:e.call(A),S=A.kind===YA.AUDIO?"".concat(d,"x").concat(h,"@").concat(y):"".concat(o,"x").concat(a,"@").concat(l),k=A.stats?" stats: ".concat(JSON.stringify(A.stats).replaceAll('"',"")):"";return"".concat(A.id," ").concat(A.readyState," muted:").concat(A.muted," ").concat(A.kind," ").concat(A.label," ").concat(S).concat(k)}catch{return""}}function N0(A,e){return A.width*A.height===e.width*e.height?1:Zb()&&e.width>e.height&&A.height>e.width?Math.max(A.width/e.height,A.height/e.width,1):Math.max(A.width/e.width,A.height/e.height,1)}function tQ(A){return A===90||A===270}function Q2(A){return WA(this,null,function*(){return new Promise((e,o)=>{let a=document.createElement("video");a.crossOrigin="anonymous",a.src=A,a.muted=!0,a.loop=!0,a.playsInline=!0,a.play().then(()=>e(a)),a.onerror=()=>{o(a.error)}})})}function Ay(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:new WeakMap;if(typeof A!="object"||A===null)return A;if(e.has(A))return e.get(A);if(Array.isArray(A)){let o=[];return e.set(A,o),A.forEach((a,l)=>{o[l]=Ay(a,e)}),o}if(Object.prototype.toString.call(A)==="[object Object]"){let o={};return e.set(A,o),Reflect.ownKeys(A).forEach(a=>{o[a]=Ay(A[a],e)}),o}return A}var G0=(A=>(A[A.END_REPORT=2001]="END_REPORT",A[A.LOG=2002]="LOG",A[A.KEY_METRIC_REPORT=2003]="KEY_METRIC_REPORT",A))(G0||{});function iQ(A,e,o,a){try{let l=function(d,h,y,S){let k={data:d,random:Math.floor(2147483648*Math.random()),sdkAppId:y};return Ke(S)||(k=po(fi({},k),{gzip:+S})),{uint32_sdkappid:0,uint64_from_uin:0,uint32_timestamp:0,uint32_seq:0,msg_common_info:{msg_device_info:{enum_device_type:0,str_device_brand:"",str_device_model:"",str_device_board:"",str_device_cpu_abi:""},msg_system_info:{enum_os_type:0,str_os_version:"",msg_network_info:0},msg_network_info:{enum_network_type:0}},msg_report_content:{uint32_type:h,bytes_report_data:JSON.stringify(k)}}}(A,e,o,a);return Vb(f0(l),o)}catch{return JSON.stringify(A)}}function lM(A,e){let o=new Uint8Array(A.byteLength+e.byteLength);return o.set(new Uint8Array(A),0),o.set(new Uint8Array(e),A.byteLength),o.buffer}function b0(A){return(65535&A)>>>0}function p2(A){return(4294901760&A)>>>0}function Gp(A){return!!(A&&A instanceof CanvasCaptureMediaStreamTrack&&A.canvas.id.includes("trtc_mix"))}function NK(A){let e=function(o){try{let a={},l=0;a.totalLength=du(o,l),l+=4,a.version=du(o,l),l+=4,a.encryption=n2(o,l),l+=1,a.uinType=n2(o,l),l+=1,a.uinLength=du(o,l),l+=4,a.uin=a.uinLength>4?Kf(o,l,a.uinLength-4):"",l+=a.uinLength-4;let d=o.slice(l);return a.encryption===2?(o=function(h,y){let S=0,k=new Uint8Array(8).fill(0),V=new Uint8Array(h.slice(0,8)),J=k0(V,y),cA=7&J[0],CA=h.length-1-cA-Zh-sM,MA=new Uint8Array(CA),ie=0,pe=k,qe=h.slice(0,8);S=8;let we=1;we+=cA;for(let Le=1;Le<=Zh;)if(we<8)we++,Le++;else if(we===8){let Qt=ey(h,S,pe,qe,J,y);pe=Qt.ivPreCrypt,qe=Qt.ivCurCrypt,J=Qt.debiBuf,S=Qt.bufPos,we=0}let Di=CA;for(;Di>0;)if(we<8)MA[ie++]=J[we]^pe[we],we++,Di--;else if(we===8){let Le=ey(h,S,pe,qe,J,y);pe=Le.ivPreCrypt,qe=Le.ivCurCrypt,J=Le.debiBuf,S=Le.bufPos,we=0}for(let Le=1;Le<=sM;)if(we<8)J[we],pe[we],we++,Le++;else if(we===8){if(S>=h.length)break;let Qt=ey(h,S,pe,qe,J,y);if(!Qt.success)break;pe=Qt.ivPreCrypt,qe=Qt.ivCurCrypt,J=Qt.debiBuf,S=Qt.bufPos,we=0}return MA}(d,new Uint8Array(16).fill(0)),a.decrypted=!0,l=0):(o=d,l=0),a.rspHeadLength=du(o,l),l+=4,a.seqNo=du(o,l),l+=4,a.retCode=du(o,l),l+=4,a.retStrLength=du(o,l),l+=4,a.retStr=a.retStrLength?Kf(o,l,a.retStrLength-4):"",l+=a.retStrLength-4,a.serviceCmdLength=du(o,l),l+=4,a.serviceCmd=a.serviceCmdLength?Kf(o,l,a.serviceCmdLength-4):"",l+=a.serviceCmdLength-4,a.cookieLength=du(o,l),l+=4,a.cookie=a.cookieLength?Kf(o,l,a.cookieLength-4):"",l+=a.cookieLength-4,a.flag=du(o,l),l+=4,a.busiBuffLength=du(o,l),l+=4,a.busiBuff=a.busiBuffLength?Kf(o,l,a.busiBuffLength-4):"",l+=a.busiBuffLength-4,a}catch{}}(A);return e?.busiBuff}function k0(A,e){let o=A[0]<<24|A[1]<<16|A[2]<<8|A[3],a=A[4]<<24|A[5]<<16|A[6]<<8|A[7];o>>>=0,a>>>=0;let l=Yb*y0>>>0;for(let d=0;d>>5)+e[3],a>>>=0,o-=(a<<4)+e[0]^a+l^(a>>>5)+e[1],o>>>=0,l-=Yb,l>>>=0;return new Uint8Array([o>>>24&255,o>>>16&255,o>>>8&255,255&o,a>>>24&255,a>>>16&255,a>>>8&255,255&a])}function ey(A,e,o,a,l,d){if(e+8>A.length)return{success:!1};let h=new Uint8Array(a),y=A.slice(e,e+8),S=new Uint8Array(8);for(let k=0;k<8;k++)S[k]=l[k]^y[k];return{success:!0,ivPreCrypt:h,ivCurCrypt:y,debiBuf:k0(S,d),bufPos:e+8}}var bp=typeof TextDecoder<"u"?new TextDecoder:void 0;function oQ(A){let{url:e,body:o,method:a="POST",timeout:l,priority:d}=A;return new Promise((h,y)=>{if("fetch"in window)return fetch(e,{method:a,body:o,priority:d}).then(k=>k.clone().json().then(V=>({data:V}),()=>k.arrayBuffer().then(V=>({data:NK(new Uint8Array(V))||(bp?bp.decode(V):V)})))).then(h,y);let S=new XMLHttpRequest;S.onreadystatechange=()=>{if(S.readyState===4)if(S.status>=200&&S.status<300)try{let k=JSON.parse(S.response);h({data:k})}catch{h({data:S.response})}else y({status:S.status,statusText:S.statusText||"request failed!"})},S.timeout=l||5e3,S.open(a,e,!0),S.send(o)})}function tk(A){return WA(this,null,function*(){let e=ko(),o=JSON.stringify(A);try{if(!CompressionStream||o.length<=2800)return o;let a=new Blob([o],{type:"application/json"}).stream().pipeThrough(new CompressionStream("gzip")),l=yield(yield(yield new Response(a)).blob()).arrayBuffer();return pA.debug("compressJSON ".concat(o.length," -> ").concat(l.byteLength," ").concat(ko()-e,"ms")),l}catch{return o}})}var m2=Object.prototype.hasOwnProperty,kp=A=>typeof A=="function",$E=A=>A===void 0,ik=A=>typeof A=="string",f2=A=>typeof A=="boolean",ok=A=>A.isRemote,y2=function(A){if(!A||typeof A!="object"||Object.prototype.toString.call(A)!="[object Object]")return!1;let e=Object.getPrototypeOf(A);if(e===null)return!0;let o=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof o=="function"&&o instanceof o&&Function.prototype.toString.call(o)===Function.prototype.toString.call(Object)},IM=function(A){let{retryFunction:e,settings:o,onError:a,onRetrying:l,onRetryFailed:d,onRetrySuccess:h,context:y}=A;return function(){for(var S=arguments.length,k=new Array(S),V=0;VWA(this,null,function*(){let Di=y||this;try{let Le=yield e.apply(Di,k);CA>0&&h&&h.call(this,CA),CA=0,qe(Le)}catch(Le){let Qt=()=>{clearTimeout(MA),CA=0,ie=2,we(Le)},Bi=()=>{ie!==2&&CA<(kp(J)?J():J)?(CA++,ie=1,kp(l)&&l.call(this,CA,Qt),MA=window.setTimeout(()=>{MA=-1,pe(qe,we)},kp(cA)?cA(CA):cA)):(Qt(),kp(d)&&d.call(this,Le))};kp(a)?a.call(this,{error:Le,retry:Bi,reject:we,retryFuncArgs:k,retriedCount:CA}):Bi()}});return new Promise(pe)}},sk=class AX{constructor(e){Y(this,"_parentPath"),Y(this,"userId"),Y(this,"remoteUserId"),Y(this,"id"),Y(this,"sdkAppId"),Y(this,"type"),Y(this,"isLocal"),this.id=e.id,this.userId=e.userId,this.sdkAppId=e.sdkAppId,this.remoteUserId=e.remoteUserId,this.isLocal=!f2(e.isLocal)||e.isLocal,this.type=this.isLocal?"":e.type}getFullId(){return this._parentPath&&this.id?"".concat(this._parentPath,"-").concat(this.id):this._parentPath?this._parentPath:this.id}createChild(e){let o=new AX({id:e.id,userId:$E(e.userId)?this.userId:e.userId,sdkAppId:$E(e.sdkAppId)?this.sdkAppId:e.sdkAppId,type:$E(e.type)?this.type:e.type,isLocal:$E(e.isLocal)?this.isLocal:e.isLocal,remoteUserId:$E(e.remoteUserId)?this.remoteUserId:e.remoteUserId});return o.bindParent(this),o}bindParent(e){let o=e.getFullId();this._parentPath!==o&&(this.debug("bind logger parent: ".concat(e.id)),this._parentPath=o,this.userId=e.userId||this.userId,this.sdkAppId=e.sdkAppId||this.sdkAppId)}setUserId(e){this.userId=e}setSdkAppId(e){this.sdkAppId=e}log(e,o){let a=this.isLocal?this.userId:this.remoteUserId,l=this.getFullId();o.unshift("[".concat(this.isLocal?"↑":"↓").concat(this.type&&this.type!=="main"?"*":"").concat(l).concat(a?"|".concat(a):"","]")),pA.log(e,o,$E(this.userId)||function(d){if(d==null)return!0;if(typeof d=="boolean")return!1;if(typeof d=="number")return d===0;if(typeof d=="string"||typeof d=="function"||Array.isArray(d))return d.length===0;if(d instanceof Error)return d.message==="";if(y2(d))switch(Object.prototype.toString.call(d)){case"[object File]":case"[object Map]":case"[object Set]":return d.size===0;case"[object Object]":for(let h in d)if(m2.call(d,h))return!1;return!0}return!1}(this.userId),this.userId,this.sdkAppId)}info(){for(var e=arguments.length,o=new Array(e),a=0;aF0,CHROME_MAJOR_VERSION:()=>td,CHROME_VERSION:()=>j0,EDGE_VERSION:()=>rk,EDG_MAJOR_VERSION:()=>P0,EDG_VERSION:()=>ak,ELECTRON_MAJOR_VERSION:()=>T2,FIREFOX_MAJOR_VERSION:()=>O0,FIREFOX_VERSION:()=>EM,HUAWEI_VERSION:()=>Qk,IE_VERSION:()=>kK,IOS_MAIN_VERSION:()=>Zd,IOS_VERSION:()=>LI,IPADQQB_VERSION:()=>BM,IS_ANDROID:()=>Ha,IS_ANDROID_WEBVIEW:()=>fk,IS_ANY_SAFARI:()=>xp,IS_CHROME:()=>K0,IS_CHROME_OS:()=>dk,IS_CHROMIUM_128_TO_143:()=>ay,IS_CHROMIUM_BASE:()=>uE,IS_DESKTOP_IOS_CHROME:()=>b2,IS_EDG:()=>iy,IS_EDGE:()=>ty,IS_ELECTRON:()=>LK,IS_FIREFOX:()=>or,IS_HEADLESS_CHROME:()=>_2,IS_HONOR:()=>Bk,IS_HUAWEI:()=>hk,IS_HUAWEIBROWSER:()=>$h,IS_IE:()=>R2,IS_IE8:()=>bK,IS_IOS:()=>eg,IS_IOS_13_OR_14:()=>G2,IS_IOS_15_1:()=>N2,IS_IOS_CHROME:()=>DM,IS_IPAD:()=>Lp,IS_IPADQQB:()=>J0,IS_IPAD_PRO:()=>U0,IS_IPHONE:()=>Up,IS_IPOD:()=>M2,IS_LINUX:()=>ny,IS_LOCAL:()=>Yp,IS_MAC:()=>nQ,IS_MACQQB:()=>hM,IS_MIBROWSER:()=>H0,IS_MQQB:()=>CM,IS_NATIVE_ANDROID:()=>v2,IS_OLD_ANDROID:()=>GK,IS_OPENHARMONY:()=>ry,IS_OPPOBROWSER:()=>pM,IS_SAFARI:()=>Bg,IS_SAFARI_15_1:()=>UK,IS_SAMSUNGBROWSER:()=>QM,IS_SOGOU:()=>Y0,IS_SOGOUM:()=>dM,IS_TBS:()=>ed,IS_UCBROWSER:()=>Ck,IS_VIVOBROWSER:()=>mM,IS_WECHAT:()=>sQ,IS_WIN:()=>sy,IS_WQQB:()=>V0,IS_WX:()=>w2,IS_X5MQQB:()=>Op,IS_XWEB:()=>Fp,MACQQB_VERSION:()=>Ek,MI_VERSION:()=>Pp,MQQB_VERSION:()=>oy,OPENHARMONY_VERSION:()=>q0,OPPO_VERSION:()=>mk,SAFARI_VERSION:()=>rQ,SAMSUNG_VERSION:()=>pk,SOGOUM_VERSION:()=>x0,SOGOU_VERSION:()=>gk,TBS_VERSION:()=>ck,UA_DATA_STRING:()=>PC,USER_AGENT:()=>Ad,VIVO_VERSION:()=>fM,WECHAT_VERSION:()=>Ik,WQQB_VERSION:()=>uk,XWEB_VERSION:()=>lk,browserInfo:()=>gQ,getBrowserCoreNumber:()=>Wl,getBrowserInfo:()=>Dk,getChromeMajorVersion:()=>yM,getDeviceModel:()=>cQ,getDeviceModelFromUA:()=>Sk,getGPUInfo:()=>Vp,getOSName:()=>El,getOSNumber:()=>Jp,getOSString:()=>Hp,getOSType:()=>Q,getTerminalType:()=>Cn,getUserAgentData:()=>SM,isAMDGPU:()=>cy,isAppleSiliconGPU:()=>FK,isLocalStorageEnabled:()=>aQ,isMobile:()=>W0,isNvidiaGPU:()=>k2,isRealIOS:()=>uM,isVersionLargerThan:()=>gy,isVersionSmallerThan:()=>yk});var Ad=typeof navigator>"u"?"":navigator.userAgent,Ts=A=>new RegExp(A,"i").test(Ad),hg=A=>{if(Ts(A)){let e=new RegExp("".concat(A,"\\/([\\d.]+)")),o=Ad.match(e);if(o&&o[1])return o[1]}return""},L0=A=>{if(Ts(A)){let e=new RegExp("".concat(A,"\\/(\\d+)")),o=Ad.match(e);if(o&&o[1])return parseFloat(o[1])}return NaN},nk=/AppleWebKit\/([\d.]+)/i.exec(Ad),S2=nk?parseFloat(nk[1]):NaN,Lp=Ts("iPad"),U0=typeof navigator<"u"&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2&&Ts("Macintosh"),Up=Ts("iPhone")&&!Lp,M2=Ts("iPod"),eg=Up||Lp||M2||U0,uM=()=>{try{return eg&&navigator.maxTouchPoints>1&&navigator.vendor.includes("Apple")}catch{return eg}},Ha=Ts("Android"),F0=function(){if(Ha){let A=Ad.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);if(A){let e=A[1]&&parseFloat(A[1]),o=A[2]&&parseFloat(A[2]);if(e&&o)return parseFloat("".concat(A[1],".").concat(A[2]));if(e)return e}}return NaN}(),GK=Ha&&Ts("webkit")&&F0<2.3,v2=Ha&&F0<5&&S2<537,or=Ts("Firefox"),EM=hg("Firefox"),O0=L0("Firefox"),ty=Ts("Edge"),rk=hg("Edge"),iy=Ts("Edg"),ak=hg("Edg"),P0=L0("Edg"),dM=Ts("SogouMobileBrowser"),x0=hg("SogouMobileBrowser"),Y0=Ts("MetaSr\\s"),gk=hg("MetaSr\\s"),ed=Ts("TBS"),ck=hg("TBS"),Fp=Ts("XWEB"),lk=hg("XWEB"),bK=Ts("MSIE\\s8\\.0"),R2=Ts("MSIE\\/\\d+"),kK=function(){if(R2){let A=/MSIE\s(\d+)\.\d/.exec(Ad),e=A&&parseFloat(A[1]);return!e&&/Trident\/7.0/i.test(Ad)&&/rv:11.0/.test(Ad)&&(e=11),e}return NaN}(),sQ=Ts("(micromessenger|webbrowser)"),Ik=hg("MicroMessenger"),Op=!ed&&Ts("MQQBrowser")&&Ts("COVC"),CM=!ed&&Ts("MQQBrowser")&&!Ts("COVC"),oy=CM||Op?hg("MQQBrowser"):"",V0=!ed&&Ts(" QQBrowser"),uk=hg(" QQBrowser"),hM=!ed&&Ts("QQBrowserLite"),Ek=hg("QQBrowserLite"),J0=!ed&&Ts("MQBHD"),BM=hg("MQBHD"),sy=Ts("Windows"),nQ=!eg&&Ts("MAC OS X"),ny=!Ha&&Ts("Linux"),dk=Ts("CrOS"),w2=Ts("MicroMessenger"),Ck=Ts("UCBrowser"),LK=Ts("Electron"),H0=Ts("MiuiBrowser"),Pp=hg("MiuiBrowser"),$h=Ts("HuaweiBrowser"),hk=Ts("Huawei")||Ts("HUAWEI"),Bk=Ts("Honor")||Ts("HONOR"),Qk=hg("HuaweiBrowser"),QM=Ts("SamsungBrowser"),pk=hg("SamsungBrowser"),pM=Ts("HeyTapBrowser"),mk=hg("HeyTapBrowser"),mM=Ts("VivoBrowser"),fM=hg("VivoBrowser"),ry=Ts("OpenHarmony"),q0=hg("OpenHarmony"),yM=()=>L0("Chrome"),DM=Ts("CriOS"),uE=Ts("Chrome"),K0=!ty&&!Y0&&!dM&&!ed&&!Fp&&!iy&&!V0&&!H0&&!$h&&!QM&&!pM&&!mM&&uE,_2=Ts("HeadlessChrome"),td=yM(),ay=uE&&td>=128&&td<=143,j0=hg("Chrome"),T2=L0("Electron"),Bg=!uE&&!CM&&!Op&&!hM&&!J0&&Ts("Safari"),xp=Bg||eg,rQ=hg("Version"),fk=/Android.*(wv|.0.0.0)/.test(Ad),LI=(()=>{if(U0)return rQ;if(eg){let A=Ad.match(/OS (\d+)_(\d+)/i);if(A&&A[1]){let e=A[1];return A[2]&&(e+=".".concat(A[2])),e}}return""})();function yk(A,e){let o=A.split(".").map(l=>Number(l)),a=e.split(".").map(l=>Number(l));for(let l=0;lh)return!1}return!1}function gy(A,e){let o=arguments.length>2&&arguments[2]!==void 0&&arguments[2],a=A.split(".").map(d=>Number(d)),l=e.split(".").map(d=>Number(d));for(let d=0;dy)return!0;if(h{let A=Number(LI.split(".")[0]);return A===14||A===13})(),b2=DM&&rQ==="11.1.1",Yp=typeof location<"u"&&(location.protocol==="file:"||location.hostname==="localhost"||location.hostname==="127.0.0.1"),aQ=(()=>{let A;return()=>{if(A===void 0)try{A=!!window.localStorage}catch{A=!1}return A}})(),gQ=Dk();function Dk(){let A=new Map([[or,["Firefox",EM]],[iy,["Edg",ak]],[K0,["Chrome",j0]],[DM,["ChiOS",hg("CriOS")]],[Bg&&!DM,["Safari",rQ]],[ed,["TBS",ck]],[Fp,["XWEB",lk]],[sQ&&Up,["WeChat",Ik]],[V0,["QQ(Win)",uk]],[CM,["QQ(Mobile)",oy]],[Op,["QQ(Mobile X5)",oy]],[hM,["QQ(Mac)",Ek]],[J0,["QQ(iPad)",BM]],[H0,["MI",Pp]],[$h,["HW",Qk]],[QM,["Samsung",pk]],[pM,["OPPO",mk]],[mM,["VIVO",fM]],[ty,["EDGE",rk]],[dM,["SogouMobile",x0]],[Y0,["Sogou",gk]]]),e="unknown",o="unknown";return A.has(!0)&&([e,o]=A.get(!0)),{name:e,version:o}}var Pr=null;function W0(){return Pr&&typeof Pr.mobile=="boolean"?Pr.mobile:Ha||eg||Up||Lp||ry}var PC="";function SM(){return WA(this,null,function*(){if(Pr)return Pr;if(!navigator.userAgentData||typeof navigator.userAgentData.getHighEntropyValues!="function")return null;try{return(Pr=yield navigator.userAgentData.getHighEntropyValues(["architecture","bitness","model","platformVersion","fullVersionList"]))&&!PC&&(PC="UAData: ".concat(Pr.platform,"/").concat(Pr.platformVersion),Pr.architecture&&Pr.bitness&&(PC+=" ".concat(Pr.architecture,"/").concat(Pr.bitness)),Pr.mobile&&(PC+=" mobile"),Pr.model&&(PC+=" model: ".concat(Pr.model.replace(/\s+/g,"/"))),Pr.fullVersionList&&(PC+=" ".concat(Pr.fullVersionList.filter(A=>A.brand!=="Not/A)Brand").map(A=>"".concat(A.brand,"/").concat(A.version)).join(",")))),Pr}catch{return null}})}var MM="";function Vp(){try{if(MM)return MM;let A=document.createElement("canvas"),e=A.getContext("webgl")||A.getContext("experimental-webgl");if(!e)return"";let o=e.getExtension("WEBGL_debug_renderer_info");if(o){let a=e.getParameter(o.UNMASKED_VENDOR_WEBGL),l=e.getParameter(o.UNMASKED_RENDERER_WEBGL);return MM="".concat(a," ").concat(l)}return""}catch{return""}}function cy(){try{let A=Vp();return A.includes("AMD")||A.includes("ATI")}catch{return!1}}function k2(){try{let A=Vp();return A.includes("NVIDIA")||A.includes("GeForce")}catch{return!1}}function FK(){try{return Vp().includes("Apple M")}catch{return!1}}function cQ(){return Pr?.model||Sk()||""}function Sk(){let A=Ad.match(/;\s*([^;)]+)\s+Build\//);return A!=null&&A[1]?A[1].trim():null}var L2=new Map([[Ha,"Android"],[eg,"iOS"],[sy,"Windows"],[nQ,"MacOS"],[ny,"Linux"],[dk,"ChromeOS"]]),El=function(){return L2.get(!0)?L2.get(!0):Pr?Pr.platform:"unknown"};function Jp(){return sy?1:Ha?2:nQ?3:eg?4:ny?5:dk?6:ry?7:0}function Wl(){return sQ||Fp?4:uE?1:Bg?2:or?3:0}var Hp=()=>{let A=El();return Pr!=null&&Pr.platformVersion?A+="/".concat(Pr.platformVersion):eg?A+="/".concat(LI):Ha&&(A+="/".concat(F0)),A+="/".concat(gQ.name,"/").concat(Bg&&!DM?gQ.version:gQ.version.split(".")[0]),Pr!=null&&Pr.architecture&&(A+="/".concat(Pr.architecture)),A};function Cn(){return Ha?4:Up?2:Lp?3:nQ?12:sy?5:ny?13:ry?22:1}function Q(){return Ha?"Android":Up?"iPhone":Lp?"iPad":nQ?"Mac":sy?"Windows":ny?"Linux":"unknown"}var R,F=new(gc(jl(),1)).default,eA=((R=eA||{}).ROOM_DESTROY="1",R.JOIN_START="21",R.JOIN_SCHEDULE_SUCCESS="22",R.JOIN_SIGNAL_CONNECTION_START="23",R.JOIN_SIGNAL_CONNECTION_END="24",R.JOIN_SEND_CMD="25",R.JOIN_RECEIVED_CMD_RES="26",R.JOIN_SUCCESS="27",R.JOIN_FAILED="28",R.LEAVE_START="51",R.LEAVE_SEND_CMD="52",R.LEAVE_SUCCESS="53",R.PUBLISH_START="61",R.SEND_FIRST_VIDEO_FRAME="62",R.PUBLISH_FAILED="63",R.SUBSCRIBE_START="81",R.SUBSCRIBE_SUCCESS="82",R.SUBSCRIBE_FAILED="84",R.UNSUBSCRIBE_SUCCESS="83",R.LOCAL_TRACK_CAPTURE_START="101",R.LOCAL_TRACK_CAPTURE_SUCCESS="102",R.LOCAL_TRACK_CAPTURE_FAILED="103",R.LOCAL_TRACK_PUBLISHED="104",R.LOCAL_TRACK_UNPUBLISHED="105",R.LOCAL_TRACK_REPLACED="106",R.SWITCH_DEVICE_SUCCESS="107",R.TRACK_MUTED="108",R.TRACK_UNMUTED="109",R.REMOTE_TRACK_SUBSCRIBED="110",R.REMOTE_TRACK_UNSUBSCRIBED="111",R.LOCAL_TRACK_RECAPTURE="112",R.LOCAL_AUDIO_STARTED="113",R.LOCAL_AUDIO_STOPPED="114",R.REMOTE_AUDIO_STARTED="115",R.REMOTE_AUDIO_STOPPED="116",R.LOCAL_TRACK_STOPPED="117",R.LOCAL_VIDEO_TRACK_PREPROCESSED="118",R.PLAY_TRACK_START="151",R.PLAYER_STATE_CHANGED="152",R.VIDEO_LOADED_DATA="153",R.AUTOPLAY_DIALOG_CLICK_CONFIRM="154",R.AUDIO_CONTEXT_LONG_SUSPENDED="155",R.REMOTE_VIDEO_PLAY_START="156",R.REMOTE_VIDEO_PLAY_FINISH="157",R.SIGNAL_CONNECTION_STATE_CHANGED="201",R.PEER_CONNECTION_STATE_CHANGED="202",R.SINGLE_CONNECTION_STAT="203",R.SPC_RECONNECTED="204",R.HEARTBEAT_REPORT="251",R.RECEIVED_PUBLISHED_USER_LIST="252",R.REMOTE_PUBLISH_STATE_CHANGED="253",R.AUDIO_LEVEL_INTERVAL="260",R.NETWORK_QUALITY="261",R.VIDEO_CODEC_IMPLEMENTATION_CHANGED="262",R.QUALITY_LIMITATION_CHANGED="263",R.LOG="264",R.AUDIO_PROCESSOR_DEBUG="265",R.SSO_SWITCH="266",R.SEI_MESSAGE="267",R.USER_PAUSE_IN_PIP="268",R.USER_RESUME_IN_PIP="269",R.ENTER_PICTURE_IN_PICTURE="270",R.LEAVE_PICTURE_IN_PICTURE="271",R.SWITCH_ROOM_START="401",R.SWITCH_ROOM_SUCCESS="407",R.SWITCH_ROOM_FAILED="408",R),nA=eA,TA=new class{constructor(){Y(this,"enable",!1),Y(this,"ssoFailCount",0),F.on("22",A=>{let{schedule:e}=A;var o;(o=e?.config)!=null&&o.sso&&F.emit("266",{enable:!0})}),F.on("266",A=>{let{enable:e}=A;this.enable=e})}handleUploadFailed(){this.ssoFailCount++,this.ssoFailCount>3&&F.emit("266",{enable:!1})}},$A=class eX{constructor(){Y(this,"_isEnableUploadLog",!0),Y(this,"_localJoinedUser",new Map),Y(this,"_queue",[]),Y(this,"_timeoutId",-1),Y(this,"_logLevel",1),Y(this,"_logLevelToUpload",2),!n0&&!r0&&(this.checkURLParam(),this.installEvents())}get isAbleToUpload(){return this._isEnableUploadLog&&this._timeoutId!==-1}installEvents(){F.on(nA.JOIN_SCHEDULE_SUCCESS,e=>{let{schedule:o}=e;var a;(a=o?.config)!=null&&a.logLevelToUpload&&XB[o.config.logLevelToUpload]&&(this._logLevelToUpload=o.config.logLevelToUpload)}),F.on(nA.JOIN_START,e=>{let{params:o}=e;this.addJoinedUser({userId:o.userId,sdkAppId:o.sdkAppId}),this.startUpload()}),F.on(nA.LEAVE_SUCCESS,e=>{let{room:o}=e;this.deleteJoinedUser(o.userId)})}startUpload(){this._timeoutId===-1&&this.uploadInterval()}addJoinedUser(e){this._localJoinedUser.set(e.userId,e),this.startUpload()}deleteJoinedUser(e){this._localJoinedUser.delete(e)}uploadInterval(){this.upload().catch(()=>{}),this._timeoutId=window.setTimeout(()=>this.uploadInterval(),5e3)}getLogsToUpload(){let e={map:new Map,splicedQueue:[]};if(this._queue[0].forAllJoinedClients&&this._localJoinedUser.size===0)return e;let o=0;for(;o{let{userId:d,sdkAppId:h}=l;e.map.has(d)?e.map.get(d).logs.push(a):e.map.set(d,{userId:d,sdkAppId:h,logs:[a]})});else if(Vn(a.userId)&&kn(a.sdkAppId)){let{userId:l,sdkAppId:d}=a;e.map.has(l)?e.map.get(l).logs.push(a):e.map.set(l,{userId:l,sdkAppId:d,logs:[a]})}}return e.map.size>0&&(e.splicedQueue=this._queue.splice(0,o)),e}upload(){return WA(this,null,function*(){if(this._queue.length===0||!this._isEnableUploadLog)return;let{map:e,splicedQueue:o}=this.getLogsToUpload();if(e.size===0)return;try{let l=[...e.values()];for(let d=0;dcA.log).join(` +`)},V=JSON.stringify(k),J=TA.enable?iQ(k,2002,y):V;yield this.uploadLogWithRetry(J,y,J instanceof Uint8Array,V),S.forEach(cA=>cA.uploaded=!0)}}catch{}let a=o.filter(l=>!l.uploaded);a.length>0&&(this._queue=a.concat(this._queue))})}uploadLogWithRetry(e,o,a,l){return IM({retryFunction:()=>oQ({url:jf(o,kI.LOG),body:e,timeout:5e3,priority:"low"}).then(d=>{a&&d.data!=="ok"&&(TA.handleUploadFailed(),this.uploadLogWithRetry(l,o,!1,l))}),settings:{retries:3,timeout:2e3},onError:d=>{let{retry:h}=d;h()}})()}getPrefix(e){let o=new Date;return o.setTime(Of()),"[".concat(vb(o),"] <").concat(XB[e],">")}getLogLevel(){return this._logLevel}setLogLevel(e){Ke(XB[e])||(this._logLevel!==e&&this.info("setLogLevel",e),this._logLevel=e)}enableUploadLog(){this._isEnableUploadLog=!0}disableUploadLog(){this.warn("disableUploadLog"),this._isEnableUploadLog=!1}logChunkToString(e){if(Vn(e))return e;try{return e instanceof Error?e.toString():JSON.stringify(e)}catch{return""}}addLogToQueue(e,o){let a=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],l=arguments.length>3?arguments[3]:void 0,d=arguments.length>4?arguments[4]:void 0,h={log:o.reduce((y,S)=>"".concat(y," ").concat(this.logChunkToString(S)).trim(),""),level:e,userId:l,sdkAppId:d,forAllJoinedClients:a};F.emit(nA.LOG,{log:h}),this._isEnableUploadLog&&e>=this._logLevelToUpload&&this._queue.push(h)}log(e,o){let a=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],l=arguments.length>3?arguments[3]:void 0,d=arguments.length>4?arguments[4]:void 0;var h;if(o.unshift(this.getPrefix(e)),this.addLogToQueue(e,o,a,l,d),e{let e=16*Math.random()|0;return(A=="x"?e:3&e|8).toString(16)})},zA=new class{constructor(){Y(this,"_prefix","TRTC"),Y(this,"_queue",new Map)}getRealKey(A){return"".concat(this._prefix,"_").concat(A)}checkStorage(){aQ()&&(setInterval(this.doFlush.bind(this),2e4),Object.keys(localStorage).filter(A=>{if(A.startsWith(this._prefix))try{let e=localStorage.getItem(A);if(!e)return!1;let o=JSON.parse(e);if(o&&o.expiresInlocalStorage.removeItem(A)))}doFlush(){if(aQ())try{for(let[A,e]of this._queue)localStorage.setItem(A,JSON.stringify(e))}catch(A){pA.warn(A)}}getItem(A){if(!aQ())return null;try{let e=localStorage.getItem(this.getRealKey(A));if(!e)return null;let o=JSON.parse(e);return o&&o.expiresIn>=Date.now()?o.value:null}catch(e){pA.warn(e)}}setItem(A,e){if(aQ())try{let o={expiresIn:Date.now()+c0,value:e};this._queue.set(this.getRealKey(A),o)}catch(o){pA.warn(o)}}deleteItem(A){if(!aQ())return!1;try{return A=this.getRealKey(A),this._queue.delete(A),localStorage.removeItem(A),!0}catch(e){return pA.warn(e),!1}}clear(){if(aQ())try{localStorage.clear()}catch(A){pA.warn(A)}}},re={};jh(re,{HTTPS_API:()=>Pk,IS_GET_CAPABILITIES_FROM_INPUTDEVICE_SUPPORTED:()=>q2,IS_GET_CAPABILITIES_SUPPORTED:()=>H2,IS_GET_SETTINGS_SUPPORTED:()=>Qy,IS_GET_SYNCHRONIZATION_SOURCES_SUPPORTED:()=>qk,IS_INSERTABLE_STREAM_SUPPORTED:()=>zp,IS_JITTER_BUFFER_TARGET_SUPPORTED:()=>CQ,IS_RTC_RTP_SENDER_SUPPORTED:()=>xC,IS_SCRIPT_TRANSFORM_SUPPORTED:()=>o_,IS_SEI_SUPPORTED:()=>Kk,IS_SPC_SUPPORTED:()=>LM,basis:()=>j2,capabilityCheck:()=>zk,checkSystemRequirementsInternal:()=>Fk,decodeSupportStatus:()=>Uk,detectH264SupportedByFakeStreaming:()=>V2,detectVideoCodecCapabilities:()=>FM,detectVideoDecoderCapabilities:()=>Xk,detectVideoEncoderCapabilities:()=>Zk,encodeSupportStatus:()=>NM,getBrowserInfo:()=>_M,getDisplayResolution:()=>sd,getH264ProfileLevelIds:()=>Z2,isAddTransceiverSupported:()=>Xd,isBrowserSupported:()=>kk,isCanvasCaptureStreamAPISupported:()=>bM,isCanvasSmallStreamSupported:()=>i_,isGetReceiversSupported:()=>By,isGetSendersSupported:()=>UI,isGetTransceiversSupported:()=>dQ,isGetUserMediaSupported:()=>xk,isMediaDevicesSupported:()=>Lk,isMediaSessionSupported:()=>K2,isMediaStreamTrackGeneratorSupported:()=>xK,isMediaStreamTrackProcessorSupported:()=>TM,isReplaceTrackSupported:()=>J2,isRequestVideoFrameCallbackSupported:()=>Zp,isSIMDSupported:()=>UM,isScaleResolutionDownBySupported:()=>Vk,isScreenCaptureApiAvailable:()=>Wp,isSelectedCandidatePair:()=>GM,isSetParametersSupported:()=>Hk,isSetSinkIdSupported:()=>VK,isSmallStreamSupported:()=>kM,isStopTransceiverSupported:()=>oa,isTRTCSupported:()=>YK,isUnifiedPlanDefault:()=>Jk,isUsedInHttpProtocol:()=>Cu,isWebAudioSupported:()=>Yk,isWebCodecSupported:()=>s_,isWebCodecsSupported:()=>t_,isWebRTCSupported:()=>py,isWebTransportSupported:()=>fy});var Ue={};jh(Ue,{AUDIO_LEVEL_SCALE:()=>id,AlphaStitchingType:()=>dy,AudioCodecPipelineType:()=>EQ,AudioDecoderDowngradeState:()=>vM,AudioPlayerMode:()=>X0,AudioType:()=>U2,BASIC_TYPE:()=>_k,BannedReason:()=>Qg,CONNECTION_CLOSED_REASON:()=>qt,CheckPermissionType:()=>ur,ClientEvent:()=>$e,CodecType:()=>RM,ConnectionEvent:()=>Yo,ConnectionState:()=>ly,DECODE_FAILED_ERROR_CODE:()=>wM,DenoiserMode:()=>qp,DeviceType:()=>Tk,FacingMode:()=>vk,FrameWorkType:()=>oo,LeaveReason:()=>Rk,LocalTrackEvent:()=>Mo,MULTI_VIDEO_DATA_TYPE:()=>Ey,MediaType:()=>z0,MediaTypeLabel:()=>OK,MonitorEventId:()=>dl,MutedFlag:()=>$n,NetworkQualityValue:()=>EE,PlayerState:()=>Eo,ReceiveMode:()=>zl,RemoteStreamType:()=>uy,RemoteTrackEvent:()=>hn,RoomEvent:()=>uo,SMALL_MODE:()=>jp,SceneNumber:()=>qa,StreamEvent:()=>Mi,StreamType:()=>uQ,SubscribeMediaType:()=>wk,TIMER_TYPE:()=>A_,TRACK_ACTION:()=>Mk,TRACK_KIND:()=>lQ,TrackEvent:()=>Vo,UserRole:()=>Fc,UserRoleNumber:()=>is,VideoCodec:()=>Cl,VideoCodecPipelineType:()=>Kp,VideoContentHint:()=>$0,VideoDecoderDowngradeState:()=>Iy,VideoPlayerMode:()=>Z0,VideoType:()=>IQ});var be,Qe,Et,ci,et,ze,dA,ft,At,Hi,Ii,oo=(A=>(A[A.WEBRTC=30]="WEBRTC",A[A.WASM=37]="WASM",A))(oo||{}),Yo=((Ii=Yo||{}).TRACK_ADDED="track-added",Ii.TRACK_UPDATED="track-updated",Ii.TRACK_SUBSCRIBED="track-subscribed",Ii.STREAM_ADDED="stream-added",Ii.STREAM_REMOVED="stream-removed",Ii.STREAM_UPDATED="stream-updated",Ii.STREAM_PUBLISHED="stream-published",Ii.STREAM_SUBSCRIBED="stream-subscribed",Ii.STREAM_UNSUBSCRIBED="stream-unsubscribed",Ii.STATE_CHANGED="state-changed",Ii.ERROR="error",Ii.CONNECTION_STATE_CHANGED="connection-state-changed",Ii.FIREWALL_RESTRICTION="firewall-restriction",Ii.SEI_MESSAGE="sei-message",Ii.CLOSED="closed",Ii),qt=(A=>(A.REMOTE_LEAVE="remote user exitRoom",A.REMOTE_UNPUBLISH="remote user unpublished",A.LOCAL_LEAVE="you exitRoom",A.LOCAL_UNPUBLISH="you unpublished",A.LOCAL_UNSUBSCRIBE="you unsubscribed",A.SWITCH_ROLE="you switch role to audience",A))(qt||{}),$e=((Hi=$e||{}).STREAM_ADDED="stream-added",Hi.STREAM_REMOVED="stream-removed",Hi.STREAM_UPDATED="stream-updated",Hi.STREAM_SUBSCRIBED="stream-subscribed",Hi.CONNECTION_STATE_CHANGED="connection-state-changed",Hi.PEER_JOIN="peer-join",Hi.PEER_LEAVE="peer-leave",Hi.MUTE_AUDIO="mute-audio",Hi.MUTE_VIDEO="mute-video",Hi.UNMUTE_AUDIO="unmute-audio",Hi.UNMUTE_VIDEO="unmute-video",Hi.CLIENT_BANNED="client-banned",Hi.NETWORK_QUALITY="network-quality",Hi.AUDIO_VOLUME="audio-volume",Hi.SEI_MESSAGE="sei-message",Hi.ERROR="error",Hi),Mi=((At=Mi||{}).PLAYER_STATE_CHANGED="player-state-changed",At.SCREEN_SHARING_STOPPED="screen-sharing-stopped",At.CONNECTION_STATE_CHANGED="connection-state-changed",At.DEVICE_AUTO_RECOVERED="device-auto-recovered",At.ERROR="error",At),Mo=((ft=Mo||{}).DEVICE_AUTO_RECOVERED="1",ft.DEVICE_RECOVER_FAILED="5",ft.DEVICE_CHANGED="2",ft.ERROR="3",ft.PUBLISH_STATE_CHANGED="4",ft.ENCODE_FAILED="6",ft.TRACK_ENDED="7",ft.RENDER="render",ft),Eo=(A=>(A.PAUSED="PAUSED",A.PLAYING="PLAYING",A.STOPPED="STOPPED",A))(Eo||{}),uo=((dA=uo||{}).PEER_JOIN="peer-join",dA.PEER_LEAVE="peer-leave",dA.SIGNAL_CONNECTION_STATE_CHANGED="signal-connection-state-changed",dA.MEDIA_CONNECTION_STATE_CHANGED="media-connection-state-changed",dA.BANNED="banned",dA.NETWORK_QUALITY="network-quality",dA.AUDIO_VOLUME="audio-volume",dA.SEI_MESSAGE="sei-message",dA.ERROR="error",dA.REMOTE_PUBLISH_STATE_CHANGED="remote-publish-state-changed",dA.REMOTE_PUBLISHED="remote-published",dA.REMOTE_UNPUBLISHED="remote-unpublished",dA.FIREWALL_RESTRICTION="firewall-restriction",dA.HEARTBEAT_REPORT="heartbeat-report",dA.CUSTOM_MESSAGE="custom-message",dA.LAYER_DATA="layerData",dA.FIRST_VIDEO_FRAME="first-video-frame",dA.FIRST_FRAME_RENDER="first-frame-render",dA.DUMP="dump",dA.AUDIO_FRAME="audio-frame",dA.SUBSCRIBE_SMALL_VIDEO_CHANGED="subscribe-small-video-changed",dA.LOCAL_PUBLISH_FLAG_CHANGED="local-publish-flag-changed",dA.NTP_TIME_UPDATED="ntp-time-updated",dA.DATA_CHANNEL_MESSAGE="data-channel-message",dA.ASR_ROBOT_PEER_JOIN="asr-robot-peer-join",dA.ASR_ROBOT_PEER_LEAVE="asr-robot-peer-leave",dA),Vo=((ze=Vo||{}).PLAYER_STATE_CHANGED="player-state-changed",ze.MUTE="mute",ze.UNMUTE="unmute",ze.ERROR="error",ze.INPUT_MEDIA_TRACK_CHANGED="input-media-track-changed",ze.OUTPUT_MEDIA_TRACK_CHANGED="output-media-track-changed",ze.FIRST_VIDEO_FRAME="first-video-frame",ze.FIRST_FRAME_RENDER="first-frame-render",ze.VIDEO_SIZE_CHANGED="video-size-changed",ze),hn=(A=>(A.DECODE_FAILED="decode-failed",A.DECODE_FAILED_DURING_CALL="decode-failed-during-call",A.DECODE_DOWNGRADE_STATE_CHANGED="decode-downgrade-state-changed",A.REMOTE_PUBLISH_CHANGED="remote-publish-changed",A.AUDIO_FRAME_WITH_NTP="audio-frame-with-ntp",A))(hn||{}),$n=((et=$n||{})[et.VIDEO=1]="VIDEO",et[et.SMALL=2]="SMALL",et[et.AUX=4]="AUX",et[et.AUDIO=8]="AUDIO",et[et.VIDEO_MUTE=16]="VIDEO_MUTE",et[et.AUX_MUTE=32]="AUX_MUTE",et[et.AUDIO_MUTE=64]="AUDIO_MUTE",et),qa=(A=>(A[A.RTC=1]="RTC",A[A.LIVE=2]="LIVE",A))(qa||{}),is=(A=>(A[A.ANCHOR=20]="ANCHOR",A[A.AUDIENCE=21]="AUDIENCE",A))(is||{}),Fc=(A=>(A.ANCHOR="anchor",A.AUDIENCE="audience",A))(Fc||{}),ly=(A=>(A.CONNECTED="CONNECTED",A.DISCONNECTED="DISCONNECTED",A.CONNECTING="CONNECTING",A.RECONNECTED="RECONNECTED",A.RECONNECTING="RECONNECTING",A))(ly||{}),vM=((ci=vM||{}).INITIALIZED="INITIALIZED",ci.STARTING="STARTING",ci.STARTED="STARTED",ci.FAILED="FAILED",ci),Iy=(A=>(A.INITIALIZED="INITIALIZED",A.STARTING="STARTING",A.STARTED="STARTED",A.FAILED="FAILED",A))(Iy||{}),lQ=(A=>(A.AUDIO="audio",A.VIDEO="video",A.AUXILIARY="auxVideo",A))(lQ||{}),Mk=(A=>(A.ADD="add",A.REMOVE="remove",A))(Mk||{}),z0=(A=>(A[A.NULL=0]="NULL",A[A.AUDIO=1]="AUDIO",A[A.AUX_VIDEO=2]="AUX_VIDEO",A[A.BIG_VIDEO=4]="BIG_VIDEO",A[A.SMALL_VIDEO=8]="SMALL_VIDEO",A))(z0||{}),OK={1:"audio",2:"auxVideo",4:"video"},U2=((Et=U2||{})[Et.opus=111]="opus",Et),IQ=(A=>(A[A.h264=100]="h264",A[A.vp8=101]="vp8",A))(IQ||{}),uQ=(A=>(A.Big="big",A.Small="small",A))(uQ||{}),uy=(A=>(A.Main="main",A.Aux="auxiliary",A))(uy||{}),Ey=(A=>(A[A.MULTI_DATA_AUDIO=1]="MULTI_DATA_AUDIO",A[A.MULTI_DATA_BIG_IMG=2]="MULTI_DATA_BIG_IMG",A[A.MULTI_DATA_SMALL_IMG=3]="MULTI_DATA_SMALL_IMG",A[A.MULTI_DATA_AUX_IMG=7]="MULTI_DATA_AUX_IMG",A[A.MULTI_DATA_TYPE_BUTT=12]="MULTI_DATA_TYPE_BUTT",A))(Ey||{}),dl=((Qe=dl||{})[Qe.PUBLISH_VIDEO=32768]="PUBLISH_VIDEO",Qe[Qe.PUBLISH_AUDIO=32769]="PUBLISH_AUDIO",Qe[Qe.UNPUBLISH_VIDEO=32770]="UNPUBLISH_VIDEO",Qe[Qe.UNPUBLISH_AUDIO=32771]="UNPUBLISH_AUDIO",Qe[Qe.MUTE_AUDIO=32772]="MUTE_AUDIO",Qe[Qe.MUTE_VIDEO=32773]="MUTE_VIDEO",Qe[Qe.UNMUTE_AUDIO=32774]="UNMUTE_AUDIO",Qe[Qe.UNMUTE_VIDEO=32775]="UNMUTE_VIDEO",Qe[Qe.SUBSCRIBE_VIDEO=32776]="SUBSCRIBE_VIDEO",Qe[Qe.SUBSCRIBE_AUDIO=32777]="SUBSCRIBE_AUDIO",Qe[Qe.UNSUBSCRIBE_VIDEO=32778]="UNSUBSCRIBE_VIDEO",Qe[Qe.UNSUBSCRIBE_AUDIO=32779]="UNSUBSCRIBE_AUDIO",Qe[Qe.SWITCH_CAMERA=32780]="SWITCH_CAMERA",Qe[Qe.SWITCH_MICROPHONE=32781]="SWITCH_MICROPHONE",Qe[Qe.REPLACE_VIDEO=32782]="REPLACE_VIDEO",Qe[Qe.REPLACE_AUDIO=32783]="REPLACE_AUDIO",Qe[Qe.MUTE_REMOTE_VIDEO=32784]="MUTE_REMOTE_VIDEO",Qe[Qe.MUTE_REMOTE_AUDIO=32785]="MUTE_REMOTE_AUDIO",Qe[Qe.UNMUTE_REMOTE_VIDEO=32786]="UNMUTE_REMOTE_VIDEO",Qe[Qe.UNMUTE_REMOTE_AUDIO=32787]="UNMUTE_REMOTE_AUDIO",Qe[Qe.JOIN=32788]="JOIN",Qe[Qe.LEAVE=32789]="LEAVE",Qe[Qe.SIGNAL_DISCONNECTED=32790]="SIGNAL_DISCONNECTED",Qe[Qe.SIGNAL_CONNECTED=32791]="SIGNAL_CONNECTED",Qe[Qe.TRANSPORT_UPLINK_CONNECTED=32792]="TRANSPORT_UPLINK_CONNECTED",Qe[Qe.TRANSPORT_DOWNLINK_CONNECTED=32793]="TRANSPORT_DOWNLINK_CONNECTED",Qe[Qe.SIGNAl_RECONNECTING=32794]="SIGNAl_RECONNECTING",Qe[Qe.SIGNAL_RECONNECT_SUCCESS=32795]="SIGNAL_RECONNECT_SUCCESS",Qe[Qe.SIGNAL_RECONNECT_FAIL=32796]="SIGNAL_RECONNECT_FAIL",Qe[Qe.TRANSPORT_UPLINK_RECONNECTING=32797]="TRANSPORT_UPLINK_RECONNECTING",Qe[Qe.TRANSPORT_UPLINK_RECONNECT_SUCCESS=32798]="TRANSPORT_UPLINK_RECONNECT_SUCCESS",Qe[Qe.TRANSPORT_UPLINK_RECONNECT_FAIL=32799]="TRANSPORT_UPLINK_RECONNECT_FAIL",Qe[Qe.TRANSPORT_DOWNLINK_RECONNECTING=32800]="TRANSPORT_DOWNLINK_RECONNECTING",Qe[Qe.TRANSPORT_DOWNLINK_RECONNECT_SUCCESS=32801]="TRANSPORT_DOWNLINK_RECONNECT_SUCCESS",Qe[Qe.TRANSPORT_DOWNLINK_RECONNECT_FAIL=32802]="TRANSPORT_DOWNLINK_RECONNECT_FAIL",Qe[Qe.SUBSCRIBE_SMALL_VIDEO=32803]="SUBSCRIBE_SMALL_VIDEO",Qe[Qe.UNSUBSCRIBE_SMALL_VIDEO=32804]="UNSUBSCRIBE_SMALL_VIDEO",Qe[Qe.PUBLISH_AUX=32805]="PUBLISH_AUX",Qe[Qe.UNPUBLISH_AUX=32806]="UNPUBLISH_AUX",Qe[Qe.DEVICE_CAPTURE=2003]="DEVICE_CAPTURE",Qe[Qe.VIDEO_ENCODER=4004]="VIDEO_ENCODER",Qe[Qe.VIDEO_DECODER=4005]="VIDEO_DECODER",Qe),EE=(A=>(A[A.UNKNOWN=0]="UNKNOWN",A[A.EXCELLENT=1]="EXCELLENT",A[A.GOOD=2]="GOOD",A[A.POOR=3]="POOR",A[A.BAD=4]="BAD",A[A.VERY_BAD=5]="VERY_BAD",A[A.DISCONNECTED=6]="DISCONNECTED",A))(EE||{}),zl=(A=>(A[A.MANUAL=0]="MANUAL",A[A.AUTO_AUDIO=1]="AUTO_AUDIO",A[A.AUTO_VIDEO=2]="AUTO_VIDEO",A[A.AUTO_ALL=3]="AUTO_ALL",A))(zl||{}),vk=(A=>(A.user="user",A.environment="environment",A))(vk||{}),Z0=(A=>(A[A.ELEMENT=0]="ELEMENT",A[A.CANVAS_FROM_ELEMENT=1]="CANVAS_FROM_ELEMENT",A[A.CANVAS_WITHOUT_ELEMENT=2]="CANVAS_WITHOUT_ELEMENT",A))(Z0||{}),X0=(A=>(A[A.ELEMENT=0]="ELEMENT",A[A.CONTEXT=1]="CONTEXT",A))(X0||{}),Qg=(A=>(A.BANNED="banned",A.KICK="kick",A.USER_TIME_OUT="user_time_out",A.ROOM_DISBAND="room_disband",A))(Qg||{}),Rk=(A=>(A[A.USER_EXIT_REASON_TC_USER_EXIT_NORMAL=0]="USER_EXIT_REASON_TC_USER_EXIT_NORMAL",A[A.USER_EXIT_REASON_TC_USER_EXIT_TIMEOUT=1]="USER_EXIT_REASON_TC_USER_EXIT_TIMEOUT",A[A.USER_EXIT_REASON_TC_USER_EXIT_KICKED=2]="USER_EXIT_REASON_TC_USER_EXIT_KICKED",A[A.USER_EXIT_REASON_TC_USER_EXIT_CHANGED=3]="USER_EXIT_REASON_TC_USER_EXIT_CHANGED",A[A.USER_KICK_OUT_CODE_BUSINESS_USER=4]="USER_KICK_OUT_CODE_BUSINESS_USER",A[A.USER_KICK_OUT_CODE_BUSINESS_ROOM=5]="USER_KICK_OUT_CODE_BUSINESS_ROOM",A[A.USER_KICK_OUT_CODE_SERVER_USER=6]="USER_KICK_OUT_CODE_SERVER_USER",A[A.USER_KICK_OUT_CODE_SERVER_ROOM=7]="USER_KICK_OUT_CODE_SERVER_ROOM",A[A.USER_KICK_SESS_EXSIT=8]="USER_KICK_SESS_EXSIT",A))(Rk||{}),id=1e8,qp=(A=>(A[A.NORMAL=0]="NORMAL",A[A.FAR_FIELD_REDUCTION=1]="FAR_FIELD_REDUCTION",A))(qp||{}),wk=class{constructor(){Y(this,"mediaType",0)}set audio(A){A?this.mediaType|=1:this.mediaType&=-2}get audio(){return!!(1&this.mediaType)}set video(A){A?this.mediaType|=4:this.mediaType&=-5}get video(){return!!(4&this.mediaType)}set auxiliary(A){A?this.mediaType|=2:this.mediaType&=-3}get auxiliary(){return!!(2&this.mediaType)}set smallVideo(A){A?this.mediaType|=8:this.mediaType&=-9}get smallVideo(){return!!(8&this.mediaType)}},_k=(A=>(A.String="string",A.Number="number",A.Boolean="boolean",A.Array="array",A.Object="object",A))(_k||{}),Cl=(A=>(A.H264="h264",A.H265="h265",A.VP8="vp8",A.VP9="vp9",A.AV1="av1",A))(Cl||{}),Kp=(A=>(A[A.ENCRYPT_AND_DECRYPT=0]="ENCRYPT_AND_DECRYPT",A[A.DUMP=1]="DUMP",A[A.SEI=2]="SEI",A[A.ENCODE_AND_DECODE=3]="ENCODE_AND_DECODE",A))(Kp||{}),EQ=(A=>(A[A.ENCRYPT_AND_DECRYPT=0]="ENCRYPT_AND_DECRYPT",A[A.NTP_TO_AUDIO_FRAME=1]="NTP_TO_AUDIO_FRAME",A[A.DUMP=2]="DUMP",A[A.ENCODE_AND_DECODE=3]="ENCODE_AND_DECODE",A))(EQ||{}),RM=(A=>(A.WebRTC="webrtc",A.WebCodecs="webcodecs",A.WebAssembly="webassembly",A))(RM||{}),wM=((be=wM||{})[be.SUCCESS=0]="SUCCESS",be[be.FAILED=1]="FAILED",be[be.WEBCODEC_INIT=2]="WEBCODEC_INIT",be[be.WEBCODEC_CONFIG_NOT_SUPPORT=3]="WEBCODEC_CONFIG_NOT_SUPPORT",be[be.WEBCODEC_DECODER_ERROR=4]="WEBCODEC_DECODER_ERROR",be[be.WEBCODEC_TRACK_MUTE=5]="WEBCODEC_TRACK_MUTE",be[be.WASM_INIT=6]="WASM_INIT",be[be.WASM_WEBGL_UNAVALIABLE=7]="WASM_WEBGL_UNAVALIABLE",be[be.WASM_DECODER_ERROR=8]="WASM_DECODER_ERROR",be[be.WASM_TRACK_MUTE=9]="WASM_TRACK_MUTE",be[be.TEST=10]="TEST",be[be.RENDER_2D_ERROR=11]="RENDER_2D_ERROR",be),$0=(A=>(A.NONE="",A.DETAIL="detail",A.MOTION="motion",A.TEXT="text",A))($0||{}),A_=(A=>(A.INTERVAL="interval",A.TIMEOUT="timeout",A.RAF="raf",A.RIC="ric",A.INTERVAL_IN_WORKER="intervalInWorker",A))(A_||{}),jp=(A=>(A.CANVAS="canvas",A.API="api",A))(jp||{}),ur=(A=>(A[A.NONE=0]="NONE",A[A.MICROPHONE=1]="MICROPHONE",A[A.CAMERA=2]="CAMERA",A[A.BOTH=3]="BOTH",A))(ur||{}),Tk=(A=>(A.CAMERA="camera",A.MICROPHONE="microphone",A))(Tk||{}),dy=(A=>(A[A.none=0]="none",A[A.horizontal=1]="horizontal",A[A.vertical=2]="vertical",A))(dy||{}),vo={AVOID_REPEATED_CALL:"AVOID_REPEATED_CALL",INVALID_PARAMETER_REQUIRED:"INVALID_PARAMETER_REQUIRED",INVALID_PARAMETER_TYPE:"INVALID_PARAMETER_TYPE",INVALID_PARAMETER_EMPTY:"INVALID_PARAMETER_EMPTY",INVALID_PARAMETER_INSTANCE:"INVALID_PARAMETER_INSTANCE",INVALID_PARAMETER_RANGE:"INVALID_PARAMETER_RANGE",INVALID_PARAMETER_MIN:"INVALID_PARAMETER_MIN",INVALID_PARAMETER_MAX:"INVALID_PARAMETER_MAX",INVALID_PARAMETER_STREAMTYPE:"INVALID_PARAMETER_STREAMTYPE",API_CALL_TIMEOUT:"API_CALL_TIMEOUT",SIGNAL_CHANNEL_RECONNECTION_FAILED:"SIGNAL_CHANNEL_RECONNECTION_FAILED",SIGNAL_CHANNEL_SETUP_FAILED:"SIGNAL_CHANNEL_SETUP_FAILED",ERROR_MESSAGE:"ERROR_MESSAGE",EXCHANGE_SDP_TIMEOUT:"EXCHANGE_SDP_TIMEOUT",DOWNLINK_RECONNECTION_FAILED:"DOWNLINK_RECONNECTION_FAILED",EXCHANGE_SDP_FAILED:"EXCHANGE_SDP_FAILED",UPDATE_OFFER_TIMEOUT:"UPDATE_OFFER_TIMEOUT",UPLINK_RECONNECTION_FAILED:"UPLINK_RECONNECTION_FAILED",INVALID_RECORDID:"INVALID_RECORDID",INVALID_PURE_AUDIO:"INVALID_PURE_AUDIO",INVALID_STREAMID:"INVALID_STREAMID",INVALID_USER_DEFINE_RECORDID:"INVALID_USER_DEFINE_RECORDID",INVALID_USER_DEFINE_PUSH_ARGS:"INVALID_USER_DEFINE_PUSH_ARGS",INVALID_PROXY:"INVALID_PROXY",INVALID_JOIN:"INVALID_JOIN",INVALID_ROOMID_STRING:"INVALID_ROOMID_STRING",INVALID_ROOMID_INTEGER:"INVALID_ROOMID_INTEGER",INVALID_SIGNAL_CHANNEL:"INVALID_SIGNAL_CHANNEL",JOIN_ROOM_TIMEOUT:"JOIN_ROOM_TIMEOUT",JOIN_ROOM_FAILED:"JOIN_ROOM_FAILED",REJOIN_ROOM_FAILED:"REJOIN_ROOM_FAILED",INVALID_DESTROY:"INVALID_DESTROY",INVALID_PUBLISH:"INVALID_PUBLISH",INVALID_UNPUBLISH:"INVALID_UNPUBLISH",INVALID_AUDIENCE:"INVALID_AUDIENCE",INVALID_INITIALIZE:"INVALID_INITIALIZE",INVALID_DUPLICATE_PUBLISHING:"INVALID_DUPLICATE_PUBLISHING",INVALID_SUBSCRIBE_UNDEFINED:"INVALID_SUBSCRIBE_UNDEFINED",INVALID_SUBSCRIBE_LOCAL:"INVALID_SUBSCRIBE_LOCAL",INVALID_REMOTE_STREAM:"INVALID_REMOTE_STREAM",SUBSCRIBE_FAILED:"SUBSCRIBE_FAILED",INVALID_ROLE:"INVALID_ROLE",INVALID_PARAMETER_SWITCH_ROLE:"INVALID_PARAMETER_SWITCH_ROLE",INVALID_OPERATION_SWITCH_ROLE:"INVALID_OPERATION_SWITCH_ROLE",SWITCH_ROLE_TIMEOUT:"SWITCH_ROLE_TIMEOUT",SWITCH_ROLE_FAILED:"SWITCH_ROLE_FAILED",CLIENT_BANNED:"CLIENT_BANNED",INVALID_OPERATION_START_PUBLISH_CDN:"INVALID_OPERATION_START_PUBLISH_CDN",INVALID_OPERATION_STOP_PUBLISH_CDN:"INVALID_OPERATION_STOP_PUBLISH_CDN",INVALID_STREAM_ID:"INVALID_STREAM_ID",START_PUBLISH_CDN_FAILED:"START_PUBLISH_CDN_FAILED",STOP_PUBLISH_CDN_FAILED:"STOP_PUBLISH_CDN_FAILED",START_MIX_TRANSCODE:"START_MIX_TRANSCODE",STOP_MIX_TRANSCODE:"STOP_MIX_TRANSCODE",INVALID_AUDIO_VOLUME:"INVALID_AUDIO_VOLUME",ENABLE_SMALL_STREAM_PUBLISHED:"ENABLE_SMALL_STREAM_PUBLISHED",DISABLE_SMALL_STREAM_PUBLISHED:"DISABLE_SMALL_STREAM_PUBLISHED",NOT_SUPPORTED_SMALL_STREAM:"NOT_SUPPORTED_SMALL_STREAM",INVALID_SMALL_STREAM_PROFILE:"INVALID_SMALL_STREAM_PROFILE",INVALID_PARAMETER_REMOTE_STREAM:"INVALID_PARAMETER_REMOTE_STREAM",INVALID_OPERATION_CHANGE_SMALL:"INVALID_OPERATION_CHANGE_SMALL",REMOTE_NOT_PUBLISH_SMALL_STREAM:"REMOTE_NOT_PUBLISH_SMALL_STREAM",INVALID_SWITCH_DEVICE:"INVALID_SWITCH_DEVICE",INVALID_SWITCH_DEVICE_PUBLISHING:"INVALID_SWITCH_DEVICE_PUBLISHING",INVALID_REPLACE_TRACK:"INVALID_REPLACE_TRACK",INVALID_INITIALIZE_LOCAL_STREAM:"INVALID_INITIALIZE_LOCAL_STREAM",INVALID_ADD_TRACK_REPETITIVE:"INVALID_ADD_TRACK_REPETITIVE",INVALID_ADD_TRACK_REMOVING:"INVALID_ADD_TRACK_REMOVING",INVALID_ADD_TRACK_PUBLISHING:"INVALID_ADD_TRACK_PUBLISHING",INVALID_STREAM_INITIALIZED:"INVALID_STREAM_INITIALIZED",INVALID_ADD_TRACK_NUMBER:"INVALID_ADD_TRACK_NUMBER",INVALID_REMOVE_AUDIO_TRACK:"INVALID_REMOVE_AUDIO_TRACK",INVALID_REMOVE_AUDIO_ADDING:"INVALID_REMOVE_AUDIO_ADDING",INVALID_REMOVE_AUDIO_ON:"INVALID_REMOVE_AUDIO_ON",INVALID_REMOVE_TRACK_PUBLISHING:"INVALID_REMOVE_TRACK_PUBLISHING",INVALID_REMOVE_TRACK_NOT_TRACK:"INVALID_REMOVE_TRACK_NOT_TRACK",INVALID_REMOVE_TRACK_NUMBER:"INVALID_REMOVE_TRACK_NUMBER",INVALID_REPLACE_TRACK_NO_TRACK:"INVALID_REPLACE_TRACK_NO_TRACK",REPEAT_JOIN:"REPEAT_JOIN",CLIENT_DESTROYED:"CLIENT_DESTROYED",NOT_BUG_PACKAGE:"NOT_BUG_PACKAGE",START_MIX_TRANSCODE_FAILED:"START_MIX_TRANSCODE_FAILED",STOP_MIX_TRANSCODE_FAILED:"STOP_MIX_TRANSCODE_FAILED",MIX_TRANSCODE_NOT_STARTED:"MIX_TRANSCODE_NOT_STARTED",CANNOT_LESS_THAN_ZERO:"CANNOT_LESS_THAN_ZERO",MIX_PARAMS_VIDEO_FRAMERATE:"MIX_PARAMS_VIDEO_FRAMERATE",MIX_PARAMS_VIDEO_GOP:"MIX_PARAMS_VIDEO_GOP",MIX_PARAMS_AUDIO_BITRATE:"MIX_PARAMS_AUDIO_BITRATE",MIX_PARAMS_USER_Z_ORDER:"MIX_PARAMS_USER_Z_ORDER",MIX_PARAMS_NOT_SELF:"MIX_PARAMS_NOT_SELF",MIX_PARAMS_USER_STREAM:"MIX_PARAMS_USER_STREAM",INVALID_PLAY:"INVALID_PLAY",INVALID_ELEMENT_ID:"INVALID_ELEMENT_ID",INVALID_ELEMENT_ID_TYPE:"INVALID_ELEMENT_ID_TYPE",PLAY_FAILED:"PLAY_FAILED",INVALID_USERID:"INVALID_USERID",INVALID_CREATE_STREAM_SOURCE:"INVALID_CREATE_STREAM_SOURCE",INVALID_CREATE_STREAM_SCREEN:"INVALID_CREATE_STREAM_SCREEN",INVALID_CREATE_STREAM_AUDIO:"INVALID_CREATE_STREAM_AUDIO",INVALID_CREATE_STREAM_SCREEN_AUDIO:"INVALID_CREATE_STREAM_SCREEN_AUDIO",NOT_SUPPORTED_HTTP:"NOT_SUPPORTED_HTTP",NOT_SUPPORTED_WEBRTC:"NOT_SUPPORTED_WEBRTC",NOT_SUPPORTED_PROFILE:"NOT_SUPPORTED_PROFILE",NOT_SUPPORTED_MEDIA:"NOT_SUPPORTED_MEDIA",NOT_SUPPORTED_H264ENCODE:"NOT_SUPPORTED_H264ENCODE",NOT_SUPPORTED_H264DECODE:"NOT_SUPPORTED_H264DECODE",NOT_SUPPORTED_TRACK:"NOT_SUPPORTED_TRACK",NOT_SUPPORTED_SWITCH_DEVICE:"NOT_SUPPORTED_SWITCH_DEVICE",NOT_SUPPORTED_CAPTURE:"NOT_SUPPORTED_CAPTURE",NOT_SUPPORTED_AUX:"NOT_SUPPORTED_AUX",MICROPHONE_NOT_FOUND:"MICROPHONE_NOT_FOUND",CAMERA_NOT_FOUND:"CAMERA_NOT_FOUND",SIGNAL_RESPONSE_FAILED:"SIGNAL_RESPONSE_FAILED",CATCH_HANDLER_ERROR:"CATCH_HANDLER_ERROR",API_NOT_EXIST:"API_NOT_EXIST",CONNECTION_CLOSED:"CONNECTION_CLOSED",SUBSCRIBE_ALL_FALSE:"SUBSCRIBE_ALL_FALSE",SEI_NOT_SUPPORT:"SEI_NOT_SUPPORT",SEI_DISABLED:"SEI_DISABLED",SEI_BEFORE_PUBLISH:"SEI_BEFORE_PUBLISH",SEI_NOT_VIDEO:"SEI_NOT_VIDEO",CALL_FREQUENCY_LIMIT:"CALL_FREQUENCY_LIMIT",CONNECTION_ABORTED:"CONNECTION_ABORTED",API_CALL_ABORTED:"API_CALL_ABORTED",DUPLICATE_AUX:"DUPLICATE_AUX",SWITCH_PLAYBACK_QUALITY_TIMEOUT:"SWITCH_PLAYBACK_QUALITY_TIMEOUT"},cc={AVOID_REPEATED_CALL:A=>"previous ".concat(A.name,"() is ongoing, please avoid repeated calls."),INVALID_PARAMETER_REQUIRED(A){let{key:e,rule:o,fnName:a,value:l}=A;return"'".concat(e||o.name,"' is a required param when calling ").concat(a,"(), received: ").concat(l,".")},INVALID_PARAMETER_TYPE(A){let{key:e,rule:o,fnName:a,value:l}=A,d="".concat(e||o.name),h="";return h=Array.isArray(o.type)?o.type.join("|"):o.type,"'".concat(d,"' must be type of ").concat(h," when calling ").concat(a,"(), received type: ").concat(Cg(l),".")},INVALID_PARAMETER_EMPTY(A){let{key:e,rule:o,fnName:a,value:l}=A;return"'".concat(e||o.name,"' cannot be '").concat(l,"' when calling ").concat(a,"().")},INVALID_PARAMETER_INSTANCE(A){let{key:e,rule:o,fnName:a,value:l}=A,d="".concat(e||o.name),h="".concat(o.instanceOf.name||o.instanceOf);return"'".concat(d,"' must be instanceof ").concat(h," when calling ").concat(a,"(), received type: ").concat(Cg(l),".")},INVALID_PARAMETER_RANGE(A){let{key:e,rule:o,fnName:a,value:l}=A;return"'".concat(e||o.name,"' must be one of ").concat(o.values.join("|")," when calling ").concat(a,"(), received: ").concat(l,".")},INVALID_PARAMETER_MIN(A){let{key:e,rule:o,fnName:a,value:l}=A;return"the min value of ".concat(e||o.name," is ").concat(o.min,", received: ").concat(l,".")},INVALID_PARAMETER_MAX(A){let{key:e,rule:o,fnName:a,value:l}=A;return"the max value of ".concat(e||o.name," is ").concat(o.max,", received: ").concat(l,".")},API_CALL_TIMEOUT:A=>"".concat(A.commandDesc||A.command," timeout observed."),SIGNAL_CHANNEL_RECONNECTION_FAILED:"signal channel reconnection failed, please check your network.",SIGNAL_CHANNEL_SETUP_FAILED:A=>"SignalChannel setup failure: (errorCode: ".concat(A.errorCode,", errorMsg: ").concat(A.errorMsg," })."),ERROR_MESSAGE(A){let e="".concat(A.type," failed");return A.message&&(e="".concat(e,": ").concat(A.message,".")),e},EXCHANGE_SDP_TIMEOUT:"exchange sdp timeout.",DOWNLINK_RECONNECTION_FAILED:"downlink reconnection failed, please check your network and re-join room.",EXCHANGE_SDP_FAILED:A=>"exchange sdp failed ".concat(A.errMsg,"."),UPDATE_OFFER_TIMEOUT:"update offer timeout observed.",UPLINK_RECONNECTION_FAILED:"uplink reconnection failed, please check your network and publish again.",INVALID_RECORDID:"recordId must be an integer number.",INVALID_PURE_AUDIO:"pureAudioPushMode must be 1 or 2.",INVALID_STREAMID:"streamId must be a sting literal within 64 bytes, and not be empty.",INVALID_USER_DEFINE_RECORDID:"userDefineRecordId must be a sting literal contains (a-zA-Z),(0-9), underline and hyphen, within 64 bytes, and not be empty.",INVALID_USER_DEFINE_PUSH_ARGS:"userDefinePushArgs must be a sting literal within 256 bytes, and not be empty.",INVALID_PROXY:'proxy server url must start with "wss://".',INVALID_JOIN:"duplicate join() called.",INVALID_ROOMID_STRING:A=>"'".concat(A,"' must be validate string when useStringRoomId is true."),INVALID_ROOMID_INTEGER:A=>"'".concat(A,"' must be an integer between [1, 4294967294] when useStringRoomId is false."),INVALID_SIGNAL_CHANNEL:"SignalChannel is not ready yet.",JOIN_ROOM_TIMEOUT:"join room timeout.",JOIN_ROOM_FAILED(A){let{error:e,code:o}=A;return"Failed to join room - ".concat(e," code: ").concat(o)},REJOIN_ROOM_FAILED:A=>"reJoin room: ".concat(A.roomId," failed, please check your network."),INVALID_DESTROY:"please call leave() before destroy().",INVALID_PUBLISH:"please call join() before publish().",INVALID_UNPUBLISH:"stream has not been published yet.",INVALID_AUDIENCE:'no permission to publish() under live/audience, please call switchRole("anchor") firstly before publish().',INVALID_INITIALIZE:"cannot publish stream because stream is not initialized, is switching device, or has been closed.",INVALID_DUPLICATE_PUBLISHING:A=>"duplicate ".concat(A," stream publishing, please unpublish your prev ").concat(A," stream and then re-publish."),INVALID_SUBSCRIBE_UNDEFINED:"stream is undefined or null.",INVALID_SUBSCRIBE_LOCAL:"stream cannot be LocalStream.",INVALID_REMOTE_STREAM:"remoteStream does not exist because it has been unpublished by remote peer.",SUBSCRIBE_FAILED(A){let{message:e,userId:o,streamType:a}=A;return"failed to subscribe ".concat(o," ").concat(a," stream, reason: ").concat(e,".")},INVALID_ROLE:"switchRole can only be called in live mode.",INVALID_PARAMETER_SWITCH_ROLE:"role could only be set to a value as anchor or audience.",INVALID_OPERATION_SWITCH_ROLE:"please call join() before switchRole().",SWITCH_ROLE_TIMEOUT:"switchRole timeout.",SWITCH_ROLE_FAILED:A=>"switchRole failed, errCode: ".concat(A.code," errMsg: ").concat(A.message,"."),CLIENT_BANNED:A=>"client was banned because of ".concat(A.message,"."),INVALID_OPERATION_START_PUBLISH_CDN:"please call startPublishCDNStream() after join room and publish the local stream.",INVALID_OPERATION_STOP_PUBLISH_CDN:"please call startPublishCDNStream() before stopPublishCDNStream().",START_PUBLISH_CDN_FAILED:A=>"startPublishCDNStream failed, errMsg: ".concat(A.message,"."),STOP_PUBLISH_CDN_FAILED:A=>"stopPublishCDNStream failed, errMsg: ".concat(A.message,"."),INVALID_STREAM_ID:A=>"'".concat(A,"' can only consist of uppercase and lowercase english letters (a-zA-Z), numbers (0-9), hyphens and underscores."),START_MIX_TRANSCODE:"please call startMixTranscode() after join().",STOP_MIX_TRANSCODE:"please call stopMixTranscode() after startMixTranscode().",INVALID_AUDIO_VOLUME:"interval must be a number.",ENABLE_SMALL_STREAM_PUBLISHED:"Cannot enable small stream after localStream published.",DISABLE_SMALL_STREAM_PUBLISHED:"Cannot disable small stream after localStream published.",NOT_SUPPORTED_SMALL_STREAM:"your browser does not support opening small stream.",INVALID_SMALL_STREAM_PROFILE:"small stream profile is invalid.",INVALID_PARAMETER_REMOTE_STREAM:"remoteStream is invalid.",INVALID_OPERATION_CHANGE_SMALL:"cannot switch to the small stream without subscribing to the video of remoteStream.",REMOTE_NOT_PUBLISH_SMALL_STREAM:"remote peer does not publish small stream.",INVALID_SWITCH_DEVICE:"cannot switch device on current stream.",INVALID_SWITCH_DEVICE_PUBLISHING:"cannot switch device when publishing localStream.",INVALID_REPLACE_TRACK:"cannot replace track when publishing localStream.",INVALID_INITIALIZE_LOCAL_STREAM:"local stream has not initialized yet.",INVALID_ADD_TRACK_REPETITIVE:"previous addTrack is ongoing, please avoid repetitive execution.",INVALID_ADD_TRACK_REMOVING:"cannot add track when a track is removing.",INVALID_ADD_TRACK_PUBLISHING:"cannot add track when publishing localStream.",INVALID_STREAM_INITIALIZED:"your local stream haven't been initialized yet.",INVALID_ADD_TRACK_NUMBER:"a Stream has at most one audio track and one video track.",INVALID_REMOVE_AUDIO_TRACK:"remove audio track is not supported on your browser.",INVALID_REMOVE_AUDIO_ADDING:"cannot remove track when a track is adding.",INVALID_REMOVE_AUDIO_ON:"previous removeTrack is ongoing, please avoid repetitive execution.",INVALID_REMOVE_TRACK_PUBLISHING:"cannot remove track when publishing localStream.",INVALID_REMOVE_TRACK_NOT_TRACK:"localStream has not this track.",INVALID_REMOVE_TRACK_NUMBER:"remove the only video track is not supported, please use replaceTrack or muteVideo.",INVALID_REPLACE_TRACK_NO_TRACK:A=>"cannot replace ".concat(A.kind," track because stream has not ").concat(A.kind," track"),NOT_BUG_PACKAGE:"You need to buy packages, refer to tencent console.",START_MIX_TRANSCODE_FAILED:A=>"startMixTranscode failed, errMsg: ".concat(A.message,"."),STOP_MIX_TRANSCODE_FAILED:A=>"stopMixTranscode failed, errMsg: ".concat(A.message,"."),MIX_TRANSCODE_NOT_STARTED:"mixTranscode has not been started.",CANNOT_LESS_THAN_ZERO(A){let{key:e,rule:o,fnName:a,value:l}=A;return"'".concat(e||o.name,"' cannot be less than 0 when calling ").concat(a,"().")},MIX_PARAMS_VIDEO_FRAMERATE:"'config.videoFramerate' should be an integer between 0 and 30, excluding 0.",MIX_PARAMS_VIDEO_GOP:"'config.videoGOP' should be an integer between 1 and 8.",MIX_PARAMS_AUDIO_BITRATE:"'config.audioBitrate' should be an integer between 32 and 192.",MIX_PARAMS_USER_Z_ORDER:A=>"'".concat(A,"' is required and must be between 1 and 15."),MIX_PARAMS_NOT_SELF:"'config.mixUsers' must contain self.",MIX_PARAMS_USER_STREAM:"'config.videoWidth' and 'config.videoHeight' of output stream should be contain all mix stream.",INVALID_PLAY:"duplicate play() call observed, please stop() firstly.",INVALID_ELEMENT_ID:A=>{let{key:e,fnName:o}=A;return"'".concat(e,"' is not found in the document object when calling ").concat(o,"().")},INVALID_ELEMENT_ID_TYPE:A=>{let{key:e,fnName:o,type:a}=A;return"the element corresponding to '".concat(e,"' must be instanceof HTMLElement when calling ").concat(o,"(), received: ").concat(a,".")},PLAY_FAILED:A=>"".concat(A.media," play failed, browser exception: ").concat(A.error.toString()),INVALID_USERID:"userId cannot be all spaces.",INVALID_CREATE_STREAM_SOURCE:"LocalStream must be created by createStream() with either audio/video or audioSource/videoSource, but can not be mixed with audio/video and audioSource/videoSource.",INVALID_CREATE_STREAM_SCREEN:"screen/video cannot be both true.",INVALID_CREATE_STREAM_AUDIO:"audio/screenAudio cannot be both true.",INVALID_CREATE_STREAM_SCREEN_AUDIO:"when screen is true, screenAudio can be configured.",NOT_SUPPORTED_HTTP:"http protocol does not support the ability to capture microphone, camera and screen. please use https to deploy your page.",NOT_SUPPORTED_WEBRTC:"your browser or environment does not support full WebRTC capabilities.",NOT_SUPPORTED_PROFILE:"your browser does not support setVideoProfile.",NOT_SUPPORTED_MEDIA:"your browser or environment does not support navigator.mediaDevices.",NOT_SUPPORTED_H264ENCODE:"your device does not support H.264 encoding.",NOT_SUPPORTED_H264DECODE:"your device does not support H.264 decoding.",NOT_SUPPORTED_TRACK:A=>"".concat(A,"Track is not supported on your browser."),NOT_SUPPORTED_SWITCH_DEVICE:"switchDevice is not supported on your browser.",NOT_SUPPORTED_CAPTURE:"Your browser or environment does not support screen sharing, please check whether the browser version.",MICROPHONE_NOT_FOUND:"no microphone detected, please check your microphone.",CAMERA_NOT_FOUND:"no camera detected, please check your camera.",SIGNAL_RESPONSE_FAILED:A=>"".concat(A.signalResponse," failed, response code is ").concat(A.code," , errMsg: ").concat(A.message,"."),CATCH_HANDLER_ERROR(A){let{name:e,event:o}=A;return"an error was caught in ".concat(e,".on('").concat(o,"', handler), please check your code in 'handler'.")},API_NOT_EXIST(A){let{name:e}=A;return"experimental api ".concat(e," does not exist.")},REPEAT_JOIN:A=>"please avoid repeated join.",CONNECTION_CLOSED:"remoteStream has been unsubscribed or unpublished by remote user.",SUBSCRIBE_ALL_FALSE:"cannot subscribe when both audio & video are false, use client.unsubscribe() instead",CLIENT_DESTROYED(A){let{funName:e}=A;return"failed to call ".concat(e,"() because client was destroyed.")},SEI_NOT_SUPPORT:A=>"not support to sendSEIMessage".concat(A===!1?" without using h264 codec":""),SEI_DISABLED:"SEI is disabled",SEI_BEFORE_PUBLISH:"please call sendSEIMessage() after publish() success",SEI_NOT_VIDEO:"cannot send sei when localStream has not video.",CALL_FREQUENCY_LIMIT:A=>{let{isSize:e,name:o,timesInSecond:a,maxSizeInSecond:l}=A;return"api ".concat(o," call ").concat(e?"size":"times"," is over ").concat(e?"".concat(l," bytes"):a," in a second.")},CONNECTION_ABORTED:A=>"connection aborted due to: ".concat(A),API_CALL_ABORTED(A){let e;return e=A.message.includes("REMOTE_STREAM_NOT_EXIST")?"Subscribe ".concat(A.userId," ").concat(A.streamType," stream aborted, reason: remote user ").concat(A.userId," unpublished stream."):"API aborted, reason: ".concat(A.message),e},DUPLICATE_AUX:"only one auxiliary stream can be published in a room.",NOT_SUPPORTED_AUX:"publish auxiliary stream is not supported on your browser.",INVALID_PARAMETER_STREAMTYPE:A=>"'streamType' is required when 'userId' is not '*', calling ".concat(A,"()"),SWITCH_PLAYBACK_QUALITY_TIMEOUT:A=>"switchPlaybackQuality timeout: waiting for first frame of user ".concat(A.userId,".")},F2=(A,e)=>e?"".concat(Wh,"/").concat(A,"/").concat(e):"".concat(Wh,"/").concat(A,"/index.html"),Nk=()=>{if(window.TRTC_ERROR_INFO&&window.TRTC_ERROR_LINK)return{TRTC_ERROR_INFO:window.TRTC_ERROR_INFO,TRTC_ERROR_LINK:window.TRTC_ERROR_LINK};let A=localStorage==null?void 0:localStorage.getItem(KS);if(A){A=JSON.parse(A);let e=document.createElement("script");e.type="text/javascript",e.text=A.message,document.body.appendChild(e);let o=window.TRTC_ERROR_INFO,a=window.TRTC_ERROR_LINK;return document.body.removeChild(e),{TRTC_ERROR_INFO:o,TRTC_ERROR_LINK:a}}return{}};function Xo(A){let{key:e,data:o,link:a,addDocLink:l=!0}=A,d="",h="",y="";Ra(cc[e])?d=cc[e](o):Vn(cc[e])&&(d=cc[e]);let{TRTC_ERROR_INFO:S,TRTC_ERROR_LINK:k}=Nk();a?y="".concat(a.className,".html#").concat(a.fnName):k&&k[e]&&(Ra(k[e])?y=k[e](o):Vn(k[e])&&(y=k[e]));let V=d;return Wd()&&(S&&S[e]&&(Ra(S[e])?h=S[e](o):Vn(S[e])&&(h=S[e])),h&&(V=l?"".concat(h,` +请查看文档: `).concat(F2("zh-cn",y),` -`):"".concat(C,` +`):"".concat(h,` -`),V+=d)),c&&(V+=` -Refer to: `.concat(R2("en",y),` -`)),V}var Bs,Bn,vk=gc(tK(),1),Rk=class{constructor(){let A=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];Y(this,"countMap",new Map),Y(this,"distributionMap",new Map),Y(this,"version"),Y(this,"log",QA.createLogger({id:"kv"})),A&&(F.on("102",e=>{let{track:o,cost:a}=e;this.addSuccessEvent({key:o.kind===YA.AUDIO?501700:511700,cost:a})}),F.on("103",e=>{let{track:o,error:a}=e;this.addFailedEvent({key:o.kind===YA.AUDIO?501700:511700,error:a})}),F.on("266",e=>{let{enable:o}=e;this.log.info("".concat(o?"enable":"disable"," sso")),o?this.addSuccessEvent({key:525701}):this.addFailedEvent({key:525701})}))}getReportData(A,e){let o={msg_sdk_basic_info:{uint32_sdk_version:qb(this.version||qd),uint32_terminal_type:15,bytes_device_name:"",bytes_os_version:"",uint32_framework:30,uint32_network_type:0},stats_count:[...this.countMap.entries()].map(a=>{let[c,d]=a;return{uint32_key:c,uint32_count:d}}),stats_distribution:[...this.distributionMap.entries()].map(a=>{let[c,d]=a;return{uint32_key:c,distribution_items:[...d.entries()].map(C=>{let[y,S]=C;return{uint32_item_key:y,uint32_item_value:S}})}}),str_user_sig:A,bytes_report_token:e};return this.countMap.clear(),this.distributionMap.clear(),o}clear(){this.countMap.clear(),this.distributionMap.clear()}isEnumKey(A){let e=+String(A).slice(-3);return e>=700&&e<799}isErrorCodeKey(A){let e=+String(A).slice(-3);return e>=600&&e<699}isCountKey(A){let e=+String(A).slice(-3);return e>=0&&e<599}isNumberKey(A){let e=+String(A).slice(-3);return e>=800&&e<899}addCount(A){let{key:e,useUV:o=!1}=A;this.isCountKey(e)?o&&this.countMap.has(e)||this.countMap.set(e,(this.countMap.get(e)||0)+1):this.log.debug("".concat(e," is not count key, last 3 number should be 0~599"))}addEnum(A){let{key:e,value:o,useUV:a=!0}=A;var c;if(!this.isEnumKey(e))return this.log.debug("".concat(e," is not enum key, last 3 number should be 700~799"));if(a&&this.countMap.has(e))return;this.countMap.set(e,(this.countMap.get(e)||0)+1);let d=((c=this.distributionMap)==null?void 0:c.get(e))||new Map;d.set(o,(d.get(o)||0)+1),this.distributionMap.set(e,d)}addNumber(A){let{key:e,value:o,split:a=100,useUV:c=!1,max:d=5e3}=A;var C;if(!this.isNumberKey(e))return this.log.debug("".concat(e," is not number key, last 3 number should be 800~899"));if(c&&this.countMap.has(e))return;o>d&&(o=d),this.countMap.set(e,(this.countMap.get(e)||0)+1);let y=((C=this.distributionMap)==null?void 0:C.get(e))||new Map,S=0;if(bn(a))S=Math.floor(o/a);else for(let k=a.length-1;k>0;k--)if(o>a[k]){S=k;break}y.set(S,(y.get(S)||0)+1),this.distributionMap.set(e,y)}addSuccessEvent(A){let{key:e,cost:o,timeKey:a,split:c}=A;if(e&&(this.addEnum({key:e,value:1,useUV:!1}),o)){let d=+String(e).slice(-3);d<800&&d>=700?this.addNumber({key:a||e+100,value:o,split:c}):a||this.log.debug("time stat ignored, ".concat(e))}}addFailedEvent(A){let{key:e,error:o}=A;if(!e)return;let a=dt.UNKNOWN;o&&(bn(o)?a=o:(!Je(o.extraCode)||!Je(o.code))&&(a=o.extraCode||o.code)),this.addEnum({key:e,value:0,useUV:!1}),this.addEnum({key:e,value:Math.abs(a),useUV:!1})}},w2=((Bs=w2||{})[Bs.enterRoom=500700]="enterRoom",Bs[Bs.exitRoom=500701]="exitRoom",Bs[Bs.switchRole=500702]="switchRole",Bs[Bs.destroy=500703]="destroy",Bs[Bs.startLocalAudio=500704]="startLocalAudio",Bs[Bs.updateLocalAudio=500705]="updateLocalAudio",Bs[Bs.stopLocalAudio=500706]="stopLocalAudio",Bs[Bs.startLocalVideo=500707]="startLocalVideo",Bs[Bs.updateLocalVideo=500708]="updateLocalVideo",Bs[Bs.stopLocalVideo=500709]="stopLocalVideo",Bs[Bs.startScreenShare=500710]="startScreenShare",Bs[Bs.updateScreenShare=500711]="updateScreenShare",Bs[Bs.stopScreenShare=500712]="stopScreenShare",Bs[Bs.startRemoteVideo=500713]="startRemoteVideo",Bs[Bs.updateRemoteVideo=500714]="updateRemoteVideo",Bs[Bs.stopRemoteVideo=500715]="stopRemoteVideo",Bs[Bs.muteRemoteAudio=500716]="muteRemoteAudio",Bs[Bs.setRemoteAudioVolume=500717]="setRemoteAudioVolume",Bs[Bs.use=500718]="use",Bs[Bs.switchRoom=500719]="switchRoom",Bs[Bs.getPermissions=500720]="getPermissions",Bs[Bs.sendSEIMessage=5e5]="sendSEIMessage",Bs[Bs.sendCustomMessage=500001]="sendCustomMessage",Bs),_2=(A=>(A[A.AudioMixer=550700]="AudioMixer",A[A.AIDenoiser=551700]="AIDenoiser",A[A.VirtualBackground=570700]="VirtualBackground",A[A.Beauty=571700]="Beauty",A[A.Watermark=572700]="Watermark",A[A.BasicBeauty=574700]="BasicBeauty",A[A.FaceDetector=575700]="FaceDetector",A[A.CDNStreaming=590700]="CDNStreaming",A[A.DeviceDetector=591700]="DeviceDetector",A[A.Debug=592700]="Debug",A[A.SmallStreamAutoSwitcher=593700]="SmallStreamAutoSwitcher",A[A.VideoMixer=594700]="VideoMixer",A[A.AudioProcessor=595700]="AudioProcessor",A[A.LEBPlayer=596700]="LEBPlayer",A[A.RealtimeTranscriber=597700]="RealtimeTranscriber",A))(_2||{}),uy=(A=>(A[A.AudioMixer=550701]="AudioMixer",A[A.AIDenoiser=551701]="AIDenoiser",A[A.VirtualBackground=570701]="VirtualBackground",A[A.Beauty=571701]="Beauty",A[A.Watermark=572701]="Watermark",A[A.BasicBeauty=574701]="BasicBeauty",A[A.FaceDetector=575701]="FaceDetector",A[A.CDNStreaming=590701]="CDNStreaming",A[A.DeviceDetector=591701]="DeviceDetector",A[A.Debug=592701]="Debug",A[A.SmallStreamAutoSwitcher=593701]="SmallStreamAutoSwitcher",A[A.VideoMixer=594701]="VideoMixer",A[A.AudioProcessor=595701]="AudioProcessor",A[A.LEBPlayer=596701]="LEBPlayer",A[A.RealtimeTranscriber=597701]="RealtimeTranscriber",A))(uy||{}),X0=(A=>(A[A.AudioMixer=550702]="AudioMixer",A[A.AIDenoiser=551702]="AIDenoiser",A[A.VirtualBackground=570702]="VirtualBackground",A[A.Beauty=571702]="Beauty",A[A.Watermark=572702]="Watermark",A[A.BasicBeauty=574702]="BasicBeauty",A[A.FaceDetector=575702]="FaceDetector",A[A.CDNStreaming=590702]="CDNStreaming",A[A.DeviceDetector=591702]="DeviceDetector",A[A.Debug=592702]="Debug",A[A.SmallStreamAutoSwitcher=593702]="SmallStreamAutoSwitcher",A[A.VideoMixer=594702]="VideoMixer",A[A.AudioProcessor=595702]="AudioProcessor",A[A.LEBPlayer=596702]="LEBPlayer",A[A.RealtimeTranscriber=597702]="RealtimeTranscriber",A))(X0||{}),Ey=((Bn=Ey||{})[Bn.DECODER_TYPE=514700]="DECODER_TYPE",Bn[Bn.DECODER_HW_SW=514701]="DECODER_HW_SW",Bn[Bn.DECODE_RESULT=514702]="DECODE_RESULT",Bn[Bn.DECODE_FAILED_OS=514703]="DECODE_FAILED_OS",Bn[Bn.DOWNGRADE_RESULT=514704]="DOWNGRADE_RESULT",Bn[Bn.DOWNGRADE_WEBCODECS_VIDEO=514705]="DOWNGRADE_WEBCODECS_VIDEO",Bn[Bn.DOWNGRADE_WEBCODECS_2D=514706]="DOWNGRADE_WEBCODECS_2D",Bn[Bn.DOWNGRADE_WASM_WEGBL=514707]="DOWNGRADE_WASM_WEGBL",Bn[Bn.DOWNGRADE_WASM_VIDEO=514708]="DOWNGRADE_WASM_VIDEO",Bn[Bn.DOWNGRADE_WASM_2D=514709]="DOWNGRADE_WASM_2D",Bn[Bn.DECODE_H264_RESULT=514710]="DECODE_H264_RESULT",Bn[Bn.DECODE_H265_RESULT=514711]="DECODE_H265_RESULT",Bn[Bn.DECODE_VP8_RESULT=514712]="DECODE_VP8_RESULT",Bn[Bn.DECODE_CAPABILITIES=514713]="DECODE_CAPABILITIES",Bn[Bn.H264_PROFILE_LEVEL_ID_HIGH=514714]="H264_PROFILE_LEVEL_ID_HIGH",Bn[Bn.H264_PROFILE_LEVEL_ID_MAIN=514715]="H264_PROFILE_LEVEL_ID_MAIN",Bn[Bn.RENDER_FREEZE_RATE=514850]="RENDER_FREEZE_RATE",Bn[Bn.DATA_FREEZE_RATE=514851]="DATA_FREEZE_RATE",Bn[Bn.VIDEO_CONSUME_RENDER_RATE=514852]="VIDEO_CONSUME_RENDER_RATE",Bn),SK=new Rk(!0),Zh=new Rk(!1),ii=SK,Qs={result:!1,detail:{isBrowserSupported:!1,isWebRTCSupported:!1,isWebCodecsSupported:!1,isMediaDevicesSupported:!1,isScreenShareSupported:!1,isSmallStreamSupported:!1,isH264EncodeSupported:!1,isVp8EncodeSupported:!1,isH265EncodeSupported:!1,isH264DecodeSupported:!1,isVp8DecodeSupported:!1,isH265DecodeSupported:!1}},T2=new Map([[er,["Firefox",lM]],[Ay,["Edg",tk]],[J0,["Chrome",H0]],[Bg,["Safari",oQ]],[td,["TBS",ok]],[kp,["XWEB",sk]],[tQ&&bp,["WeChat",nk]],[P0,["QQ(Win)",rk]],[uM,["QQ(Mobile)",ey]],[Lp,["QQ(Mobile X5)",ey]],[EM,["QQ(Mac)",ak]],[x0,["QQ(iPad)",dM]],[Y0,["MI",Up]],[zh,["HW",uk]],[CM,["Samsung",Ek]],[hM,["OPPO",dk]],[BM,["VIVO",QM]],[$f,["EDGE",ek]],[IM,["SogouMobile",F0]],[O0,["Sogou",ik]]]);function vM(){let A=T2.get(!0);return{browserName:A?A[0]:"unknown",browserVersion:A?A[1]:"unknown"}}var wk=function(){return!(ck||$f||Ay&&U0<80||er&&L0<56)},$0=function(){return["VideoDecoder","VideoEncoder","AudioEncoder","AudioDecoder"].every(A=>A in window)},_k=function(){if(!navigator.mediaDevices)return du()||QA.error(cc.NOT_SUPPORTED_MEDIA),!1;let A=["getUserMedia","enumerateDevices"];return A.filter(e=>e in navigator.mediaDevices).length===A.length},N2=!1;function du(){return location.protocol==="http:"&&!Op&&(N2||QA.error(Xo({key:Mo.NOT_SUPPORTED_HTTP})),N2=!0,!0)}var RM=function(){return window?.OffscreenCanvas&&window?.MediaStreamTrackProcessor&&window?.MediaStreamTrackGenerator},MK=function(){return!(window==null||!window.MediaStreamTrackGenerator)},wM=function(){return KA(this,null,function*(){var A,e,o;if(Qs.detail.isH264EncodeSupported&&Qs.detail.isVp8EncodeSupported)return{isH264EncodeSupported:Qs.detail.isH264EncodeSupported,isVp8EncodeSupported:Qs.detail.isVp8EncodeSupported,isH265EncodeSupported:Qs.detail.isH265EncodeSupported};let a,c=!1,d=!1,C=!1;try{let y=new RTCPeerConnection,S=document.createElement(YA.CANVAS);S.getContext("2d");let k=S.captureStream(0);return y.addTrack(k.getVideoTracks()[0],k),a=yield y.createOffer(),c=((A=a.sdp)==null?void 0:A.toLowerCase().indexOf("h264"))!==-1,d=((e=a.sdp)==null?void 0:e.toLowerCase().indexOf("vp8"))!==-1,C=((o=a.sdp)==null?void 0:o.toLowerCase().indexOf("h265"))!==-1,y.close(),{isH264EncodeSupported:c,isVp8EncodeSupported:d,isH265EncodeSupported:C}}catch{return{isH264EncodeSupported:!1,isVp8EncodeSupported:!1,isH265EncodeSupported:!1}}})},Tk=function(){return KA(this,null,function*(){var A;if(Qs.detail.isH264DecodeSupported&&Qs.detail.isVp8DecodeSupported)return{isH264DecodeSupported:Qs.detail.isH264DecodeSupported,isVp8DecodeSupported:Qs.detail.isVp8DecodeSupported,isH265DecodeSupported:Qs.detail.isH265DecodeSupported};let e,o=!1,a=!1;try{let c=new RTCPeerConnection;Xd()?(c.addTransceiver(YA.VIDEO,{direction:"recvonly"}),e=yield c.createOffer()):e=yield c.createOffer({offerToReceiveVideo:!0}),e.sdp.toLowerCase().indexOf("h264")!==-1&&(o=!0),e.sdp.toLowerCase().indexOf("vp8")!==-1&&(a=!0);let d=((A=e.sdp)==null?void 0:A.toLowerCase().indexOf("h265"))!==-1;return c.close(),{isH264DecodeSupported:o,isVp8DecodeSupported:a,isH265DecodeSupported:d}}catch{return{isH264DecodeSupported:!1,isVp8DecodeSupported:!1,isH265DecodeSupported:!1}}})},Nk=Kb(A=>KA(null,null,function*(){let e=Date.now(),o=hy(),a=_k(),c=$0();if(Qs.detail.isWebRTCSupported=o,Qs.detail.isMediaDevicesSupported=a,Qs.detail.isWebCodecsSupported=c,Qs.detail.isScreenShareSupported=qp(),Qs.detail.isSmallStreamSupported=NM(),A===37)return Object.assign(Qs.detail,yield function(){return KA(this,null,function*(){return sd||(sd=new Promise(MA=>KA(null,null,function*(){let $A={isH264EncodeSupported:!1,isH264DecodeSupported:!1,isVp8EncodeSupported:!1,isVp8DecodeSupported:!1};if(!$0())return void MA($A);let Be=null,Ye=null,ve=null,yi=()=>{ve&&clearTimeout(ve),Be=null,Ye=null};try{Be=document.createElement("canvas"),Ye=Be.getContext("2d"),Be.width=320,Be.height=240;let Ge=0,Bt=()=>{!Ye||!Be||(Ye.fillStyle="hsl(".concat(Ge%360,", 50%, 50%)"),Ye.fillRect(0,0,Be.width,Be.height),Ye.fillStyle="white",Ye.font="20px Arial",Ye.fillText("Frame ".concat(Ge),10,30),Ge++)};ve=setTimeout(()=>{yi(),MA($A)},5e3);let hi=[{type:"h264",encodeConfig:{codec:"avc1.42E01E",avc:{format:"annexb"},width:320,height:240,bitrate:1e6},decodeConfig:{codec:"avc1.42E01E",avc:{format:"annexb"}}},{type:"vp8",encodeConfig:{codec:"vp8",width:320,height:240,bitrate:1e6},decodeConfig:{codec:"vp8"}}];(yield Promise.all(hi.map(Di=>KA(null,null,function*(){let Vo,Jo={type:Di.type,encodeSupported:!1,decodeSupported:!1};try{Vo=yield new Promise((Qn,Ho)=>KA(null,null,function*(){try{let Ns=new VideoEncoder({output:ya=>{Qn(ya),Jo.encodeSupported=!0},error:Ho});Ns.configure(Di.encodeConfig),Bt();let pg=new VideoFrame(Be,{timestamp:0});Ns.encode(pg,{keyFrame:!0}),pg.close(),yield Ns.flush(),Ns.close()}catch(Ns){Ho(Ns)}}))}catch(Qn){return QA.warn("".concat(Di.type," encoder error:"),Qn),Jo}try{yield new Promise((Qn,Ho)=>KA(null,null,function*(){try{let Ns=new VideoDecoder({output:pg=>{Jo.decodeSupported=!0,Qn(0),pg.close()},error:Ho});Ns.configure(Di.decodeConfig),Ns.decode(Vo),yield Ns.flush(),Ns.close()}catch(Ns){Ho(Ns)}}))}catch(Qn){QA.warn("".concat(Di.type," decoder error:"),Qn)}return Jo})))).forEach(Di=>{Di.type==="h264"?($A.isH264EncodeSupported=Di.encodeSupported,$A.isH264DecodeSupported=Di.decodeSupported):Di.type==="vp8"&&($A.isVp8EncodeSupported=Di.encodeSupported,$A.isVp8DecodeSupported=Di.decodeSupported)}),yi(),MA($A)}catch(Ge){yi(),QA.warn("detectWebCodecsSupported failed:",Ge),MA($A)}})),sd)})}()),Qs.detail.isBrowserSupported=c,Qs.result=a&&c,Qs.result||QA.error("".concat(navigator.userAgent," ").concat(M0(Qs.detail,!1))),Vk(A),ii.addNumber({key:523800,value:Date.now()-e}),Qs;if(Qs.result&&Qs.detail.isH264EncodeSupported&&Qs.detail.isVp8EncodeSupported&&Qs.detail.isH265EncodeSupported&&Qs.detail.isH264DecodeSupported&&Qs.detail.isVp8DecodeSupported&&Qs.detail.isH265DecodeSupported)return Qs;let d=wk(),{encode:C,decode:y}=yield function(){return KA(this,null,function*(){let[MA,$A]=yield Promise.all([wM(),Tk()]);return{encode:{h264:MA.isH264EncodeSupported,vp8:MA.isVp8EncodeSupported,h265:MA.isH265EncodeSupported},decode:{h264:$A.isH264DecodeSupported,vp8:$A.isVp8DecodeSupported,h265:$A.isH265DecodeSupported}}})}(),{h264:S,vp8:k}=C,{h264:V}=y,{h265:J}=C,{vp8:gA,h265:CA}=y;if(!S||!k){let MA=yield wM();QA.warn("detect encode again h264:".concat(S," vp8:").concat(k," result: ").concat(JSON.stringify(MA))),S=MA.isH264EncodeSupported,k=MA.isVp8EncodeSupported}if(S&&V&&Ha&&IE&&!kp&&!td&&(!hM||id!==115)){let{encode:MA,decode:$A}=yield G2();S=MA,V=$A}return Qs.result=d&&o&&a&&(S||k)&&(V||gA),Qs.detail.isBrowserSupported=d,Qs.detail.isWebRTCSupported=o,Qs.detail.isH264EncodeSupported=S,Qs.detail.isVp8EncodeSupported=k,Qs.detail.isH265EncodeSupported=J,Qs.detail.isH264DecodeSupported=V,Qs.detail.isVp8DecodeSupported=gA,Qs.detail.isH265DecodeSupported=CA,Qs.result||QA.error("".concat(navigator.userAgent," ").concat(M0(Qs.detail,!1))),Vk(),ii.addNumber({key:523800,value:Date.now()-e}),Qs})),vK=function(){return Qs.result},qp=function(){return!(!navigator.mediaDevices||!navigator.mediaDevices.getDisplayMedia)},RK=typeof HTMLMediaElement<"u"&&"setSinkId"in HTMLMediaElement.prototype,Gk=null;function G2(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:2e3;return KA(this,null,function*(){return Gk||(Gk=new Promise(e=>KA(null,null,function*(){let o={encode:!1,decode:!1},a=()=>{};try{let c=document.createElement("canvas"),d=c.getContext("2d");c.width=640,c.height=480;let C=setInterval(()=>{d.fillText("test",Math.floor(640*Math.random()),Math.floor(480*Math.random()))},66),y=-1,S=-1;a=()=>{clearInterval(y),clearInterval(C),clearTimeout(S),V.close(),J.close(),k.getTracks().forEach(Be=>Be.stop())},S=setTimeout(()=>{a(),e(o)},A);let k=c.captureStream(),V=new RTCPeerConnection({}),J=new RTCPeerConnection({offerToReceiveAudio:!0,offerToReceiveVideo:!0});V.addEventListener("icecandidate",Be=>J.addIceCandidate(Be.candidate)),J.addEventListener("icecandidate",Be=>V.addIceCandidate(Be.candidate)),V.addTrack(k.getVideoTracks()[0],k);let gA=yield V.createOffer();yield V.setLocalDescription(gA),yield J.setRemoteDescription(gA);let CA=yield J.createAnswer(),MA=vk.default.parse(CA.sdp),$A=MA.media[0].rtp.findIndex(Be=>Be.codec==="H264");MA.media[0].rtp=[MA.media[0].rtp[$A]],MA.media[0].fmtp=MA.media[0].fmtp.filter(Be=>Be.payload===MA.media[0].rtp[0].payload),MA.media[0].rtcpFb&&(MA.media[0].rtcpFb=MA.media[0].rtcpFb.filter(Be=>Be.payload===MA.media[0].rtp[0].payload)),CA.sdp=vk.default.write(MA),yield J.setLocalDescription(CA),yield V.setRemoteDescription(CA),y=setInterval(()=>KA(null,null,function*(){o.encode&&o.decode&&(a(),e(o));let[Be,Ye]=yield Promise.all([V.getSenders()[0].getStats(),J.getReceivers()[0].getStats()]);o.encode||Be.forEach(ve=>{ve.type==="outbound-rtp"&&(ve.mediaType===YA.VIDEO||ve.kind===YA.VIDEO)&&ve.bytesSent>0&&(o.encode=!0)}),o.decode||Ye.forEach(ve=>{ve.type==="inbound-rtp"&&(ve.mediaType===YA.VIDEO||ve.kind===YA.VIDEO)&&ve.bytesReceived>0&&(o.decode=!0)})}),100)}catch(c){a(),QA.warn("detectH264Supported failed",c),e({encode:!0,decode:!0})}})).then(e=>(e.encode||(e.decode=!0),(!e.encode||!e.decode)&&QA.warn("detectH264Supported encode: ".concat(e.encode," decode: ").concat(e.decode," ").concat(UC)),e)),Gk)})}var sd=null,bk=(A,e,o)=>{location.protocol==="http:"&&!Op&&(A[e]=()=>{throw new ai({code:dt.INVALID_OPERATION,message:cc.NOT_SUPPORTED_HTTP})})},_M=function(A){return!(A.type!=="candidate-pair"||!A.nominated||A.state!=="in-progress"&&A.state!=="succeeded")&&!(Nr(A.selected)&&!A.selected)};function nd(){let A="";if(screen.width){let e=screen.width?screen.width*window.devicePixelRatio:"",o=screen.height?screen.height*window.devicePixelRatio:"";A+="".concat(e," * ").concat(o)}return A}function kk(){return navigator.getUserMedia||navigator.mediaDevices&&navigator.mediaDevices.getUserMedia}function Lk(){let A={isSupported:!1},e=["AudioContext","webkitAudioContext","mozAudioContext","msAudioContext"];for(let o=0;o=86,e_="RTCRtpScriptTransform"in window,xk=FC&&(Kp||e_),hy=function(){return["RTCPeerConnection","webkitRTCPeerConnection","RTCIceGatherer"].filter(A=>A in window).length>0};function t_(){let A={AudioDecoder:!1,AudioEncoder:!1,VideoDecoder:!1,VideoEncoder:!1,ImageDecoder:!1};return Je(window.AudioDecoder)||(A.AudioDecoder=!0),Je(window.AudioEncoder)||(A.AudioEncoder=!0),Je(window.VideoDecoder)||(A.VideoDecoder=!0),Je(window.VideoEncoder)||(A.VideoEncoder=!0),Je(window.ImageDecoder)||(A.ImageDecoder=!0),A}function U2(){return"mediaSession"in navigator&&!Je(navigator.mediaSession.setActionHandler)}function By(){return!Je(window.WebTransport)}function bM(){return typeof WebAssembly<"u"&&WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]))}function F2(){let A={browser:"".concat(nQ.name,"/").concat(nQ.version),os:El(),displayResolution:nd(),isScreenShareSupported:qp(),isWebRTCSupported:hy(),isGetUserMediaSupported:kk(),isWebAudioSupported:Lk(),isWebSocketsSupported:"WebSocket"in window&&window.WebSocket.CLOSING===2,isWebCodecSupported:t_(),isMediaSessionSupported:U2(),isWebTransportSupported:By()};return navigator.userAgent.includes("miniProgram")&&(A.browser="mini/".concat(A.browser)),A}var Yk="checkResult";function Vk(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:30;jA.setItem(Yk+A,{ua:navigator.userAgent,checkResult:Qs})}function Jk(A){du();let e=jA.getItem(Yk+A);e&&e.ua===navigator.userAgent&&e.checkResult&&function(o,a){return!!$E(o)&&Object.keys(a).every(c=>c in o)}(e.checkResult.detail,Qs.detail)&&(Qs=e.checkResult),Nk(A)}function jp(){return"requestVideoFrameCallback"in HTMLVideoElement.prototype}var uQ="RTCRtpReceiver"in window&&"jitterBufferTarget"in window.RTCRtpReceiver.prototype;function O2(A){return{h264:1,h265:2,vp8:3,vp9:4,av1:5}[A]}var P2=!1;function kM(){return KA(this,null,function*(){var A;try{if(P2||(A=navigator?.mediaCapabilities)==null||!A.encodingInfo)return;let e=xp(),o=jl();if(e===0||o===0)return;P2=!0;let a=["H264","VP8","VP9","AV1","H265"],[c,d]=yield Promise.all([Hk(a),qk(a)]);c&&Object.keys(c).forEach(S=>{let k=O2(S.toLowerCase());ii.addEnum({key:513707,value:+"".concat(k).concat(+c[S].supported).concat(+c[S].powerEfficient).concat(e).concat(o),useUV:!1})}),d&&Object.keys(d).forEach(S=>{let k=O2(S.toLowerCase());ii.addEnum({key:514713,value:+"".concat(k).concat(+d[S].supported).concat(+d[S].powerEfficient).concat(e).concat(o),useUV:!1})});let{sender:C,receiver:y}=x2();ii.addEnum({key:513708,value:+"".concat(e).concat(o).concat(+C.high),useUV:!1}),ii.addEnum({key:513709,value:+"".concat(e).concat(o).concat(+C.main),useUV:!1}),ii.addEnum({key:514714,value:+"".concat(e).concat(o).concat(+y.high),useUV:!1}),ii.addEnum({key:514715,value:+"".concat(e).concat(o).concat(+y.main),useUV:!1})}catch(e){QA.info("detectVideoCodecCapabilities failed",e)}})}function Hk(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1920,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1080,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:30,c=arguments.length>4&&arguments[4]!==void 0?arguments[4]:3e3;return KA(this,null,function*(){let d={};try{for(let C of A){let y=yield navigator.mediaCapabilities.encodingInfo({type:"webrtc",video:{contentType:"video/".concat(C),width:e,height:o,bitrate:c,framerate:a}});d[C]=y}}catch{}return d})}function qk(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1920,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1080,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:30,c=arguments.length>4&&arguments[4]!==void 0?arguments[4]:3e3;return KA(this,null,function*(){let d={};try{for(let C of A){let y=yield navigator.mediaCapabilities.decodingInfo({type:"webrtc",video:{contentType:"video/".concat(C),width:e,height:o,bitrate:c,framerate:a}});d[C]=y}}catch{}return d})}function x2(){let A={sender:{base:!1,main:!1,high:!1},receiver:{base:!1,main:!1,high:!1}};try{if(RTCRtpSender&&typeof RTCRtpSender.getCapabilities=="function"){let e=RTCRtpSender.getCapabilities("video");e&&e.codecs&&e.codecs.filter(o=>o.mimeType.toLowerCase()==="video/h264").forEach(o=>{if(o.sdpFmtpLine){let a=o.sdpFmtpLine.match(/profile-level-id=([0-9a-fA-F]+)/);if(a&&a[1])switch(a[1].slice(0,2)){case"42":A.sender.base=!0;break;case"4d":A.sender.main=!0;break;case"64":A.sender.high=!0}}})}if(RTCRtpReceiver&&typeof RTCRtpReceiver.getCapabilities=="function"){let e=RTCRtpReceiver.getCapabilities("video");e&&e.codecs&&e.codecs.filter(o=>o.mimeType.toLowerCase()==="video/h264").forEach(o=>{if(o.sdpFmtpLine){let a=o.sdpFmtpLine.match(/profile-level-id=([0-9a-fA-F]+)/);if(a&&a[1])switch(a[1].slice(0,2)){case"42":A.receiver.base=!0;break;case"4d":A.receiver.main=!0;break;case"64":A.receiver.high=!0}}})}}catch(e){QA.warn("get H264 profile levelId failed",e)}return A}var wK=gc(Kl(),1),LM=Symbol("instance"),UM=Symbol("cacheResult"),OC=class{constructor(A,e,o){this.oldState=A,this.newState=e,this.action=o,this.aborted=!1}abort(A){this.aborted=!0,Wp.call(A,this.oldState,new Error("action '".concat(this.action,"' aborted")))}toString(){return"".concat(this.action,"ing")}},i_=class extends Error{constructor(A,e,o){super(e),this.state=A,this.message=e,this.cause=o}},FM=new Map;function lc(A,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return(a,c,d)=>{let C=o.action||c;if(!o.context){let S=FM.get(a)||[];FM.has(a)||FM.set(a,S),S.push({from:A,to:e,action:C})}let y=d.value;d.value=function(){let S=this;for(var k=arguments.length,V=new Array(k),J=0;J{if(o.fail&&o.fail.call(this,ve),o.sync){if(o.ignoreError)return ve;throw ve}return o.ignoreError?Promise.resolve(ve):Promise.reject(ve)};if(gA)return CA(gA);let MA=S.state,$A=new OC(MA,e,C);Wp.call(S,$A);let Be=ve=>{var yi;return S[UM]=ve,$A.aborted||(Wp.call(S,e),(yi=o.success)===null||yi===void 0||yi.call(this,S[UM])),ve},Ye=ve=>(Wp.call(S,MA,ve),CA(ve));try{let ve=y.apply(this,V);return function(yi){return typeof yi=="object"&&yi&&"then"in yi}(ve)?ve.then(Be).catch(Ye):o.sync?Be(ve):Promise.resolve(Be(ve))}catch(ve){return Ye(new i_(S._state,"".concat(S.name," ").concat(C," from ").concat(A," to ").concat(e," failed: ").concat(ve),ve instanceof Error?ve:new Error(String(ve))))}}}}var o_=typeof window<"u"&&window.__AFSM__?(A,e)=>{window.dispatchEvent(new CustomEvent(A,{detail:e}))}:typeof importScripts<"u"?(A,e)=>{postMessage({type:A,payload:e})}:()=>{};function Wp(A,e){let o=this._state;this._state=A;let a=A.toString();A&&this.emit(a,o),this.emit(Zs.STATECHANGED,A,o,e),this.updateDevTools({value:A,old:o,err:e instanceof Error?e.message:String(e)})}var Zs=class KC extends wK.default{constructor(e,o,a){super(),this.name=e,this.groupName=o,this._state=KC.INIT,e||(e=Date.now().toString(36)),a?Object.setPrototypeOf(this,a):a=Object.getPrototypeOf(this),o||(this.groupName=this.constructor.name);let c=a[LM];c?this.name=c.name+"-"+c.count++:a[LM]={name:this.name,count:0},this.updateDevTools({diagram:this.stateDiagram})}get stateDiagram(){let e=Object.getPrototypeOf(this),o=FM.get(e)||[],a=new Set,c=[],d=[],C=new Set,y=Object.getPrototypeOf(e);FM.has(y)&&(y.stateDiagram.forEach(k=>a.add(k)),y.allStates.forEach(k=>C.add(k))),o.forEach(k=>{let{from:V,to:J,action:gA}=k;typeof V=="string"?c.push({from:V,to:J,action:gA}):V.length?V.forEach(CA=>{c.push({from:CA,to:J,action:gA})}):d.push({to:J,action:gA})}),c.forEach(k=>{let{from:V,to:J,action:gA}=k;C.add(V),C.add(J),C.add(gA+"ing"),a.add("".concat(V," --> ").concat(gA,"ing : ").concat(gA)),a.add("".concat(gA,"ing --> ").concat(J," : ").concat(gA," 🟢")),a.add("".concat(gA,"ing --> ").concat(V," : ").concat(gA," 🔴"))}),d.forEach(k=>{let{to:V,action:J}=k;a.add("".concat(J,"ing --> ").concat(V," : ").concat(J," 🟢")),C.forEach(gA=>{gA!==V&&a.add("".concat(gA," --> ").concat(J,"ing : ").concat(J))})});let S=[...a];return Object.defineProperties(e,{stateDiagram:{value:S},allStates:{value:C}}),S}static get(e){let o;return typeof e=="string"?(o=KC.instances.get(e),o||KC.instances.set(e,o=new KC(e,void 0,Object.create(KC.prototype)))):(o=KC.instances2.get(e),o||KC.instances2.set(e,o=new KC(e.constructor.name,void 0,Object.create(KC.prototype)))),o}static getState(e){var o;return(o=KC.get(e))===null||o===void 0?void 0:o.state}updateDevTools(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};o_(KC.UPDATEAFSM,Object.assign({name:this.name,group:this.groupName},e))}get state(){return this._state}set state(e){Wp.call(this,e)}};Zs.STATECHANGED="stateChanged",Zs.UPDATEAFSM="updateAFSM",Zs.INIT="[*]",Zs.ON="on",Zs.OFF="off",Zs.instances=new Map,Zs.instances2=new WeakMap;var s_=typeof window<"u",Kk=s_&&window.requestIdleCallback||function(A){let e=Date.now();return setTimeout(()=>{A({didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-e))})},1e3)},hl=s_&&window.cancelIdleCallback||function(A){clearTimeout(A)},zp=s_&&(window.cancelAnimationFrame||window.mozCancelAnimationFrame),Qy=class CE{static generateTaskID(){return this.currentTaskID++}static run(e,o,a){a!=null&&a.fps&&(a.delay=a.delay||Number((1e3/a.fps).toFixed(2))),a=mi(e==="interval"?{delay:2e3,count:0,backgroundTask:!0}:e==="ric"?{delay:1e4,count:0}:e==="raf"?{fps:60,delay:16.6,count:0,backgroundTask:!0}:{delay:2e3,count:0,backgroundTask:!0},a);let c=Qo(mi({taskID:this.generateTaskID(),loopCount:0,intervalID:null,timeoutID:null,rafID:null,ricID:null,taskName:e,callback:o},a),{delay:a.delay});return this.taskMap.set(c.taskID,c),this[e](c),c.taskID}static interval(e){return e.intervalID=setInterval(()=>{e.callback(),e.loopCount+=1,CE.isBreakLoop(e)},e.delay)}static intervalInWorker(e){CE.sharedWorker||(CE.sharedWorker=new Worker(URL.createObjectURL(new Blob([` +`),V+=d)),l&&(V+=` +Refer to: `.concat(F2("en",y),` +`)),V}var Qs,Bn,Gk=gc(hK(),1),bk=class{constructor(){let A=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];Y(this,"countMap",new Map),Y(this,"distributionMap",new Map),Y(this,"version"),Y(this,"log",pA.createLogger({id:"kv"})),A&&(F.on("102",e=>{let{track:o,cost:a}=e;this.addSuccessEvent({key:o.kind===YA.AUDIO?501700:511700,cost:a})}),F.on("103",e=>{let{track:o,error:a}=e;this.addFailedEvent({key:o.kind===YA.AUDIO?501700:511700,error:a})}),F.on("266",e=>{let{enable:o}=e;this.log.info("".concat(o?"enable":"disable"," sso")),o?this.addSuccessEvent({key:525701}):this.addFailedEvent({key:525701})}))}getReportData(A,e){let o={msg_sdk_basic_info:{uint32_sdk_version:Xb(this.version||qd),uint32_terminal_type:15,bytes_device_name:"",bytes_os_version:"",uint32_framework:30,uint32_network_type:0},stats_count:[...this.countMap.entries()].map(a=>{let[l,d]=a;return{uint32_key:l,uint32_count:d}}),stats_distribution:[...this.distributionMap.entries()].map(a=>{let[l,d]=a;return{uint32_key:l,distribution_items:[...d.entries()].map(h=>{let[y,S]=h;return{uint32_item_key:y,uint32_item_value:S}})}}),str_user_sig:A,bytes_report_token:e};return this.countMap.clear(),this.distributionMap.clear(),o}clear(){this.countMap.clear(),this.distributionMap.clear()}isEnumKey(A){let e=+String(A).slice(-3);return e>=700&&e<799}isErrorCodeKey(A){let e=+String(A).slice(-3);return e>=600&&e<699}isCountKey(A){let e=+String(A).slice(-3);return e>=0&&e<599}isNumberKey(A){let e=+String(A).slice(-3);return e>=800&&e<899}addCount(A){let{key:e,useUV:o=!1}=A;this.isCountKey(e)?o&&this.countMap.has(e)||this.countMap.set(e,(this.countMap.get(e)||0)+1):this.log.debug("".concat(e," is not count key, last 3 number should be 0~599"))}addEnum(A){let{key:e,value:o,useUV:a=!0}=A;var l;if(!this.isEnumKey(e))return this.log.debug("".concat(e," is not enum key, last 3 number should be 700~799"));if(a&&this.countMap.has(e))return;this.countMap.set(e,(this.countMap.get(e)||0)+1);let d=((l=this.distributionMap)==null?void 0:l.get(e))||new Map;d.set(o,(d.get(o)||0)+1),this.distributionMap.set(e,d)}addNumber(A){let{key:e,value:o,split:a=100,useUV:l=!1,max:d=5e3}=A;var h;if(!this.isNumberKey(e))return this.log.debug("".concat(e," is not number key, last 3 number should be 800~899"));if(l&&this.countMap.has(e))return;o>d&&(o=d),this.countMap.set(e,(this.countMap.get(e)||0)+1);let y=((h=this.distributionMap)==null?void 0:h.get(e))||new Map,S=0;if(kn(a))S=Math.floor(o/a);else for(let k=a.length-1;k>0;k--)if(o>a[k]){S=k;break}y.set(S,(y.get(S)||0)+1),this.distributionMap.set(e,y)}addSuccessEvent(A){let{key:e,cost:o,timeKey:a,split:l}=A;if(e&&(this.addEnum({key:e,value:1,useUV:!1}),o)){let d=+String(e).slice(-3);d<800&&d>=700?this.addNumber({key:a||e+100,value:o,split:l}):a||this.log.debug("time stat ignored, ".concat(e))}}addFailedEvent(A){let{key:e,error:o}=A;if(!e)return;let a=Ct.UNKNOWN;o&&(kn(o)?a=o:(!Ke(o.extraCode)||!Ke(o.code))&&(a=o.extraCode||o.code)),this.addEnum({key:e,value:0,useUV:!1}),this.addEnum({key:e,value:Math.abs(a),useUV:!1})}},O2=((Qs=O2||{})[Qs.enterRoom=500700]="enterRoom",Qs[Qs.exitRoom=500701]="exitRoom",Qs[Qs.switchRole=500702]="switchRole",Qs[Qs.destroy=500703]="destroy",Qs[Qs.startLocalAudio=500704]="startLocalAudio",Qs[Qs.updateLocalAudio=500705]="updateLocalAudio",Qs[Qs.stopLocalAudio=500706]="stopLocalAudio",Qs[Qs.startLocalVideo=500707]="startLocalVideo",Qs[Qs.updateLocalVideo=500708]="updateLocalVideo",Qs[Qs.stopLocalVideo=500709]="stopLocalVideo",Qs[Qs.startScreenShare=500710]="startScreenShare",Qs[Qs.updateScreenShare=500711]="updateScreenShare",Qs[Qs.stopScreenShare=500712]="stopScreenShare",Qs[Qs.startRemoteVideo=500713]="startRemoteVideo",Qs[Qs.updateRemoteVideo=500714]="updateRemoteVideo",Qs[Qs.stopRemoteVideo=500715]="stopRemoteVideo",Qs[Qs.muteRemoteAudio=500716]="muteRemoteAudio",Qs[Qs.setRemoteAudioVolume=500717]="setRemoteAudioVolume",Qs[Qs.use=500718]="use",Qs[Qs.switchRoom=500719]="switchRoom",Qs[Qs.getPermissions=500720]="getPermissions",Qs[Qs.sendSEIMessage=5e5]="sendSEIMessage",Qs[Qs.sendCustomMessage=500001]="sendCustomMessage",Qs),P2=(A=>(A[A.AudioMixer=550700]="AudioMixer",A[A.AIDenoiser=551700]="AIDenoiser",A[A.VirtualBackground=570700]="VirtualBackground",A[A.Beauty=571700]="Beauty",A[A.Watermark=572700]="Watermark",A[A.BasicBeauty=574700]="BasicBeauty",A[A.FaceDetector=575700]="FaceDetector",A[A.CDNStreaming=590700]="CDNStreaming",A[A.DeviceDetector=591700]="DeviceDetector",A[A.Debug=592700]="Debug",A[A.SmallStreamAutoSwitcher=593700]="SmallStreamAutoSwitcher",A[A.VideoMixer=594700]="VideoMixer",A[A.AudioProcessor=595700]="AudioProcessor",A[A.LEBPlayer=596700]="LEBPlayer",A[A.RealtimeTranscriber=597700]="RealtimeTranscriber",A))(P2||{}),Cy=(A=>(A[A.AudioMixer=550701]="AudioMixer",A[A.AIDenoiser=551701]="AIDenoiser",A[A.VirtualBackground=570701]="VirtualBackground",A[A.Beauty=571701]="Beauty",A[A.Watermark=572701]="Watermark",A[A.BasicBeauty=574701]="BasicBeauty",A[A.FaceDetector=575701]="FaceDetector",A[A.CDNStreaming=590701]="CDNStreaming",A[A.DeviceDetector=591701]="DeviceDetector",A[A.Debug=592701]="Debug",A[A.SmallStreamAutoSwitcher=593701]="SmallStreamAutoSwitcher",A[A.VideoMixer=594701]="VideoMixer",A[A.AudioProcessor=595701]="AudioProcessor",A[A.LEBPlayer=596701]="LEBPlayer",A[A.RealtimeTranscriber=597701]="RealtimeTranscriber",A))(Cy||{}),e_=(A=>(A[A.AudioMixer=550702]="AudioMixer",A[A.AIDenoiser=551702]="AIDenoiser",A[A.VirtualBackground=570702]="VirtualBackground",A[A.Beauty=571702]="Beauty",A[A.Watermark=572702]="Watermark",A[A.BasicBeauty=574702]="BasicBeauty",A[A.FaceDetector=575702]="FaceDetector",A[A.CDNStreaming=590702]="CDNStreaming",A[A.DeviceDetector=591702]="DeviceDetector",A[A.Debug=592702]="Debug",A[A.SmallStreamAutoSwitcher=593702]="SmallStreamAutoSwitcher",A[A.VideoMixer=594702]="VideoMixer",A[A.AudioProcessor=595702]="AudioProcessor",A[A.LEBPlayer=596702]="LEBPlayer",A[A.RealtimeTranscriber=597702]="RealtimeTranscriber",A))(e_||{}),hy=((Bn=hy||{})[Bn.DECODER_TYPE=514700]="DECODER_TYPE",Bn[Bn.DECODER_HW_SW=514701]="DECODER_HW_SW",Bn[Bn.DECODE_RESULT=514702]="DECODE_RESULT",Bn[Bn.DECODE_FAILED_OS=514703]="DECODE_FAILED_OS",Bn[Bn.DOWNGRADE_RESULT=514704]="DOWNGRADE_RESULT",Bn[Bn.DOWNGRADE_WEBCODECS_VIDEO=514705]="DOWNGRADE_WEBCODECS_VIDEO",Bn[Bn.DOWNGRADE_WEBCODECS_2D=514706]="DOWNGRADE_WEBCODECS_2D",Bn[Bn.DOWNGRADE_WASM_WEGBL=514707]="DOWNGRADE_WASM_WEGBL",Bn[Bn.DOWNGRADE_WASM_VIDEO=514708]="DOWNGRADE_WASM_VIDEO",Bn[Bn.DOWNGRADE_WASM_2D=514709]="DOWNGRADE_WASM_2D",Bn[Bn.DECODE_H264_RESULT=514710]="DECODE_H264_RESULT",Bn[Bn.DECODE_H265_RESULT=514711]="DECODE_H265_RESULT",Bn[Bn.DECODE_VP8_RESULT=514712]="DECODE_VP8_RESULT",Bn[Bn.DECODE_CAPABILITIES=514713]="DECODE_CAPABILITIES",Bn[Bn.H264_PROFILE_LEVEL_ID_HIGH=514714]="H264_PROFILE_LEVEL_ID_HIGH",Bn[Bn.H264_PROFILE_LEVEL_ID_MAIN=514715]="H264_PROFILE_LEVEL_ID_MAIN",Bn[Bn.RENDER_FREEZE_RATE=514850]="RENDER_FREEZE_RATE",Bn[Bn.DATA_FREEZE_RATE=514851]="DATA_FREEZE_RATE",Bn[Bn.VIDEO_CONSUME_RENDER_RATE=514852]="VIDEO_CONSUME_RENDER_RATE",Bn),PK=new bk(!0),AB=new bk(!1),si=PK,ps={result:!1,detail:{isBrowserSupported:!1,isWebRTCSupported:!1,isWebCodecsSupported:!1,isMediaDevicesSupported:!1,isScreenShareSupported:!1,isSmallStreamSupported:!1,isH264EncodeSupported:!1,isVp8EncodeSupported:!1,isH265EncodeSupported:!1,isH264DecodeSupported:!1,isVp8DecodeSupported:!1,isH265DecodeSupported:!1}},x2=new Map([[or,["Firefox",EM]],[iy,["Edg",ak]],[K0,["Chrome",j0]],[Bg,["Safari",rQ]],[ed,["TBS",ck]],[Fp,["XWEB",lk]],[sQ&&Up,["WeChat",Ik]],[V0,["QQ(Win)",uk]],[CM,["QQ(Mobile)",oy]],[Op,["QQ(Mobile X5)",oy]],[hM,["QQ(Mac)",Ek]],[J0,["QQ(iPad)",BM]],[H0,["MI",Pp]],[$h,["HW",Qk]],[QM,["Samsung",pk]],[pM,["OPPO",mk]],[mM,["VIVO",fM]],[ty,["EDGE",rk]],[dM,["SogouMobile",x0]],[Y0,["Sogou",gk]]]);function _M(){let A=x2.get(!0);return{browserName:A?A[0]:"unknown",browserVersion:A?A[1]:"unknown"}}var kk=function(){return!(Ck||ty||iy&&P0<80||or&&O0<56)},t_=function(){return["VideoDecoder","VideoEncoder","AudioEncoder","AudioDecoder"].every(A=>A in window)},Lk=function(){if(!navigator.mediaDevices)return Cu()||pA.error(cc.NOT_SUPPORTED_MEDIA),!1;let A=["getUserMedia","enumerateDevices"];return A.filter(e=>e in navigator.mediaDevices).length===A.length},Y2=!1;function Cu(){return location.protocol==="http:"&&!Yp&&(Y2||pA.error(Xo({key:vo.NOT_SUPPORTED_HTTP})),Y2=!0,!0)}var TM=function(){return window?.OffscreenCanvas&&window?.MediaStreamTrackProcessor&&window?.MediaStreamTrackGenerator},xK=function(){return!(window==null||!window.MediaStreamTrackGenerator)},NM=function(){return WA(this,null,function*(){var A,e,o;if(ps.detail.isH264EncodeSupported&&ps.detail.isVp8EncodeSupported)return{isH264EncodeSupported:ps.detail.isH264EncodeSupported,isVp8EncodeSupported:ps.detail.isVp8EncodeSupported,isH265EncodeSupported:ps.detail.isH265EncodeSupported};let a,l=!1,d=!1,h=!1;try{let y=new RTCPeerConnection,S=document.createElement(YA.CANVAS);S.getContext("2d");let k=S.captureStream(0);return y.addTrack(k.getVideoTracks()[0],k),a=yield y.createOffer(),l=((A=a.sdp)==null?void 0:A.toLowerCase().indexOf("h264"))!==-1,d=((e=a.sdp)==null?void 0:e.toLowerCase().indexOf("vp8"))!==-1,h=((o=a.sdp)==null?void 0:o.toLowerCase().indexOf("h265"))!==-1,y.close(),{isH264EncodeSupported:l,isVp8EncodeSupported:d,isH265EncodeSupported:h}}catch{return{isH264EncodeSupported:!1,isVp8EncodeSupported:!1,isH265EncodeSupported:!1}}})},Uk=function(){return WA(this,null,function*(){var A;if(ps.detail.isH264DecodeSupported&&ps.detail.isVp8DecodeSupported)return{isH264DecodeSupported:ps.detail.isH264DecodeSupported,isVp8DecodeSupported:ps.detail.isVp8DecodeSupported,isH265DecodeSupported:ps.detail.isH265DecodeSupported};let e,o=!1,a=!1;try{let l=new RTCPeerConnection;Xd()?(l.addTransceiver(YA.VIDEO,{direction:"recvonly"}),e=yield l.createOffer()):e=yield l.createOffer({offerToReceiveVideo:!0}),e.sdp.toLowerCase().indexOf("h264")!==-1&&(o=!0),e.sdp.toLowerCase().indexOf("vp8")!==-1&&(a=!0);let d=((A=e.sdp)==null?void 0:A.toLowerCase().indexOf("h265"))!==-1;return l.close(),{isH264DecodeSupported:o,isVp8DecodeSupported:a,isH265DecodeSupported:d}}catch{return{isH264DecodeSupported:!1,isVp8DecodeSupported:!1,isH265DecodeSupported:!1}}})},Fk=$b(A=>WA(null,null,function*(){let e=Date.now(),o=py(),a=Lk(),l=t_();if(ps.detail.isWebRTCSupported=o,ps.detail.isMediaDevicesSupported=a,ps.detail.isWebCodecsSupported=l,ps.detail.isScreenShareSupported=Wp(),ps.detail.isSmallStreamSupported=kM(),A===37)return Object.assign(ps.detail,yield function(){return WA(this,null,function*(){return od||(od=new Promise(MA=>WA(null,null,function*(){let ie={isH264EncodeSupported:!1,isH264DecodeSupported:!1,isVp8EncodeSupported:!1,isVp8DecodeSupported:!1};if(!t_())return void MA(ie);let pe=null,qe=null,we=null,Di=()=>{we&&clearTimeout(we),pe=null,qe=null};try{pe=document.createElement("canvas"),qe=pe.getContext("2d"),pe.width=320,pe.height=240;let Le=0,Qt=()=>{!qe||!pe||(qe.fillStyle="hsl(".concat(Le%360,", 50%, 50%)"),qe.fillRect(0,0,pe.width,pe.height),qe.fillStyle="white",qe.font="20px Arial",qe.fillText("Frame ".concat(Le),10,30),Le++)};we=setTimeout(()=>{Di(),MA(ie)},5e3);let Bi=[{type:"h264",encodeConfig:{codec:"avc1.42E01E",avc:{format:"annexb"},width:320,height:240,bitrate:1e6},decodeConfig:{codec:"avc1.42E01E",avc:{format:"annexb"}}},{type:"vp8",encodeConfig:{codec:"vp8",width:320,height:240,bitrate:1e6},decodeConfig:{codec:"vp8"}}];(yield Promise.all(Bi.map(Si=>WA(null,null,function*(){let Jo,Ho={type:Si.type,encodeSupported:!1,decodeSupported:!1};try{Jo=yield new Promise((Qn,qo)=>WA(null,null,function*(){try{let Ns=new VideoEncoder({output:ya=>{Qn(ya),Ho.encodeSupported=!0},error:qo});Ns.configure(Si.encodeConfig),Qt();let pg=new VideoFrame(pe,{timestamp:0});Ns.encode(pg,{keyFrame:!0}),pg.close(),yield Ns.flush(),Ns.close()}catch(Ns){qo(Ns)}}))}catch(Qn){return pA.warn("".concat(Si.type," encoder error:"),Qn),Ho}try{yield new Promise((Qn,qo)=>WA(null,null,function*(){try{let Ns=new VideoDecoder({output:pg=>{Ho.decodeSupported=!0,Qn(0),pg.close()},error:qo});Ns.configure(Si.decodeConfig),Ns.decode(Jo),yield Ns.flush(),Ns.close()}catch(Ns){qo(Ns)}}))}catch(Qn){pA.warn("".concat(Si.type," decoder error:"),Qn)}return Ho})))).forEach(Si=>{Si.type==="h264"?(ie.isH264EncodeSupported=Si.encodeSupported,ie.isH264DecodeSupported=Si.decodeSupported):Si.type==="vp8"&&(ie.isVp8EncodeSupported=Si.encodeSupported,ie.isVp8DecodeSupported=Si.decodeSupported)}),Di(),MA(ie)}catch(Le){Di(),pA.warn("detectWebCodecsSupported failed:",Le),MA(ie)}})),od)})}()),ps.detail.isBrowserSupported=l,ps.result=a&&l,ps.result||pA.error("".concat(navigator.userAgent," ").concat(w0(ps.detail,!1))),Wk(A),si.addNumber({key:523800,value:Date.now()-e}),ps;if(ps.result&&ps.detail.isH264EncodeSupported&&ps.detail.isVp8EncodeSupported&&ps.detail.isH265EncodeSupported&&ps.detail.isH264DecodeSupported&&ps.detail.isVp8DecodeSupported&&ps.detail.isH265DecodeSupported)return ps;let d=kk(),{encode:h,decode:y}=yield function(){return WA(this,null,function*(){let[MA,ie]=yield Promise.all([NM(),Uk()]);return{encode:{h264:MA.isH264EncodeSupported,vp8:MA.isVp8EncodeSupported,h265:MA.isH265EncodeSupported},decode:{h264:ie.isH264DecodeSupported,vp8:ie.isVp8DecodeSupported,h265:ie.isH265DecodeSupported}}})}(),{h264:S,vp8:k}=h,{h264:V}=y,{h265:J}=h,{vp8:cA,h265:CA}=y;if(!S||!k){let MA=yield NM();pA.warn("detect encode again h264:".concat(S," vp8:").concat(k," result: ").concat(JSON.stringify(MA))),S=MA.isH264EncodeSupported,k=MA.isVp8EncodeSupported}if(S&&V&&Ha&&uE&&!Fp&&!ed&&(!pM||td!==115)){let{encode:MA,decode:ie}=yield V2();S=MA,V=ie}return ps.result=d&&o&&a&&(S||k)&&(V||cA),ps.detail.isBrowserSupported=d,ps.detail.isWebRTCSupported=o,ps.detail.isH264EncodeSupported=S,ps.detail.isVp8EncodeSupported=k,ps.detail.isH265EncodeSupported=J,ps.detail.isH264DecodeSupported=V,ps.detail.isVp8DecodeSupported=cA,ps.detail.isH265DecodeSupported=CA,ps.result||pA.error("".concat(navigator.userAgent," ").concat(w0(ps.detail,!1))),Wk(),si.addNumber({key:523800,value:Date.now()-e}),ps})),YK=function(){return ps.result},Wp=function(){return!(!navigator.mediaDevices||!navigator.mediaDevices.getDisplayMedia)},VK=typeof HTMLMediaElement<"u"&&"setSinkId"in HTMLMediaElement.prototype,Ok=null;function V2(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:2e3;return WA(this,null,function*(){return Ok||(Ok=new Promise(e=>WA(null,null,function*(){let o={encode:!1,decode:!1},a=()=>{};try{let l=document.createElement("canvas"),d=l.getContext("2d");l.width=640,l.height=480;let h=setInterval(()=>{d.fillText("test",Math.floor(640*Math.random()),Math.floor(480*Math.random()))},66),y=-1,S=-1;a=()=>{clearInterval(y),clearInterval(h),clearTimeout(S),V.close(),J.close(),k.getTracks().forEach(pe=>pe.stop())},S=setTimeout(()=>{a(),e(o)},A);let k=l.captureStream(),V=new RTCPeerConnection({}),J=new RTCPeerConnection({offerToReceiveAudio:!0,offerToReceiveVideo:!0});V.addEventListener("icecandidate",pe=>J.addIceCandidate(pe.candidate)),J.addEventListener("icecandidate",pe=>V.addIceCandidate(pe.candidate)),V.addTrack(k.getVideoTracks()[0],k);let cA=yield V.createOffer();yield V.setLocalDescription(cA),yield J.setRemoteDescription(cA);let CA=yield J.createAnswer(),MA=Gk.default.parse(CA.sdp),ie=MA.media[0].rtp.findIndex(pe=>pe.codec==="H264");MA.media[0].rtp=[MA.media[0].rtp[ie]],MA.media[0].fmtp=MA.media[0].fmtp.filter(pe=>pe.payload===MA.media[0].rtp[0].payload),MA.media[0].rtcpFb&&(MA.media[0].rtcpFb=MA.media[0].rtcpFb.filter(pe=>pe.payload===MA.media[0].rtp[0].payload)),CA.sdp=Gk.default.write(MA),yield J.setLocalDescription(CA),yield V.setRemoteDescription(CA),y=setInterval(()=>WA(null,null,function*(){o.encode&&o.decode&&(a(),e(o));let[pe,qe]=yield Promise.all([V.getSenders()[0].getStats(),J.getReceivers()[0].getStats()]);o.encode||pe.forEach(we=>{we.type==="outbound-rtp"&&(we.mediaType===YA.VIDEO||we.kind===YA.VIDEO)&&we.bytesSent>0&&(o.encode=!0)}),o.decode||qe.forEach(we=>{we.type==="inbound-rtp"&&(we.mediaType===YA.VIDEO||we.kind===YA.VIDEO)&&we.bytesReceived>0&&(o.decode=!0)})}),100)}catch(l){a(),pA.warn("detectH264Supported failed",l),e({encode:!0,decode:!0})}})).then(e=>(e.encode||(e.decode=!0),(!e.encode||!e.decode)&&pA.warn("detectH264Supported encode: ".concat(e.encode," decode: ").concat(e.decode," ").concat(PC)),e)),Ok)})}var od=null,Pk=(A,e,o)=>{location.protocol==="http:"&&!Yp&&(A[e]=()=>{throw new gi({code:Ct.INVALID_OPERATION,message:cc.NOT_SUPPORTED_HTTP})})},GM=function(A){return!(A.type!=="candidate-pair"||!A.nominated||A.state!=="in-progress"&&A.state!=="succeeded")&&!(Nr(A.selected)&&!A.selected)};function sd(){let A="";if(screen.width){let e=screen.width?screen.width*window.devicePixelRatio:"",o=screen.height?screen.height*window.devicePixelRatio:"";A+="".concat(e," * ").concat(o)}return A}function xk(){return navigator.getUserMedia||navigator.mediaDevices&&navigator.mediaDevices.getUserMedia}function Yk(){let A={isSupported:!1},e=["AudioContext","webkitAudioContext","mozAudioContext","msAudioContext"];for(let o=0;o=86,o_="RTCRtpScriptTransform"in window,Kk=xC&&(zp||o_),py=function(){return["RTCPeerConnection","webkitRTCPeerConnection","RTCIceGatherer"].filter(A=>A in window).length>0};function s_(){let A={AudioDecoder:!1,AudioEncoder:!1,VideoDecoder:!1,VideoEncoder:!1,ImageDecoder:!1};return Ke(window.AudioDecoder)||(A.AudioDecoder=!0),Ke(window.AudioEncoder)||(A.AudioEncoder=!0),Ke(window.VideoDecoder)||(A.VideoDecoder=!0),Ke(window.VideoEncoder)||(A.VideoEncoder=!0),Ke(window.ImageDecoder)||(A.ImageDecoder=!0),A}function K2(){return"mediaSession"in navigator&&!Ke(navigator.mediaSession.setActionHandler)}function fy(){return!Ke(window.WebTransport)}function UM(){return typeof WebAssembly<"u"&&WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]))}function j2(){let A={browser:"".concat(gQ.name,"/").concat(gQ.version),os:El(),displayResolution:sd(),isScreenShareSupported:Wp(),isWebRTCSupported:py(),isGetUserMediaSupported:xk(),isWebAudioSupported:Yk(),isWebSocketsSupported:"WebSocket"in window&&window.WebSocket.CLOSING===2,isWebCodecSupported:s_(),isMediaSessionSupported:K2(),isWebTransportSupported:fy()};return navigator.userAgent.includes("miniProgram")&&(A.browser="mini/".concat(A.browser)),A}var jk="checkResult";function Wk(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:30;zA.setItem(jk+A,{ua:navigator.userAgent,checkResult:ps})}function zk(A){Cu();let e=zA.getItem(jk+A);e&&e.ua===navigator.userAgent&&e.checkResult&&function(o,a){return!!XE(o)&&Object.keys(a).every(l=>l in o)}(e.checkResult.detail,ps.detail)&&(ps=e.checkResult),Fk(A)}function Zp(){return"requestVideoFrameCallback"in HTMLVideoElement.prototype}var CQ="RTCRtpReceiver"in window&&"jitterBufferTarget"in window.RTCRtpReceiver.prototype;function W2(A){return{h264:1,h265:2,vp8:3,vp9:4,av1:5}[A]}var z2=!1;function FM(){return WA(this,null,function*(){var A;try{if(z2||(A=navigator?.mediaCapabilities)==null||!A.encodingInfo)return;let e=Jp(),o=Wl();if(e===0||o===0)return;z2=!0;let a=["H264","VP8","VP9","AV1","H265"],[l,d]=yield Promise.all([Zk(a),Xk(a)]);l&&Object.keys(l).forEach(S=>{let k=W2(S.toLowerCase());si.addEnum({key:513707,value:+"".concat(k).concat(+l[S].supported).concat(+l[S].powerEfficient).concat(e).concat(o),useUV:!1})}),d&&Object.keys(d).forEach(S=>{let k=W2(S.toLowerCase());si.addEnum({key:514713,value:+"".concat(k).concat(+d[S].supported).concat(+d[S].powerEfficient).concat(e).concat(o),useUV:!1})});let{sender:h,receiver:y}=Z2();si.addEnum({key:513708,value:+"".concat(e).concat(o).concat(+h.high),useUV:!1}),si.addEnum({key:513709,value:+"".concat(e).concat(o).concat(+h.main),useUV:!1}),si.addEnum({key:514714,value:+"".concat(e).concat(o).concat(+y.high),useUV:!1}),si.addEnum({key:514715,value:+"".concat(e).concat(o).concat(+y.main),useUV:!1})}catch(e){pA.info("detectVideoCodecCapabilities failed",e)}})}function Zk(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1920,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1080,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:30,l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:3e3;return WA(this,null,function*(){let d={};try{for(let h of A){let y=yield navigator.mediaCapabilities.encodingInfo({type:"webrtc",video:{contentType:"video/".concat(h),width:e,height:o,bitrate:l,framerate:a}});d[h]=y}}catch{}return d})}function Xk(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1920,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1080,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:30,l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:3e3;return WA(this,null,function*(){let d={};try{for(let h of A){let y=yield navigator.mediaCapabilities.decodingInfo({type:"webrtc",video:{contentType:"video/".concat(h),width:e,height:o,bitrate:l,framerate:a}});d[h]=y}}catch{}return d})}function Z2(){let A={sender:{base:!1,main:!1,high:!1},receiver:{base:!1,main:!1,high:!1}};try{if(RTCRtpSender&&typeof RTCRtpSender.getCapabilities=="function"){let e=RTCRtpSender.getCapabilities("video");e&&e.codecs&&e.codecs.filter(o=>o.mimeType.toLowerCase()==="video/h264").forEach(o=>{if(o.sdpFmtpLine){let a=o.sdpFmtpLine.match(/profile-level-id=([0-9a-fA-F]+)/);if(a&&a[1])switch(a[1].slice(0,2)){case"42":A.sender.base=!0;break;case"4d":A.sender.main=!0;break;case"64":A.sender.high=!0}}})}if(RTCRtpReceiver&&typeof RTCRtpReceiver.getCapabilities=="function"){let e=RTCRtpReceiver.getCapabilities("video");e&&e.codecs&&e.codecs.filter(o=>o.mimeType.toLowerCase()==="video/h264").forEach(o=>{if(o.sdpFmtpLine){let a=o.sdpFmtpLine.match(/profile-level-id=([0-9a-fA-F]+)/);if(a&&a[1])switch(a[1].slice(0,2)){case"42":A.receiver.base=!0;break;case"4d":A.receiver.main=!0;break;case"64":A.receiver.high=!0}}})}}catch(e){pA.warn("get H264 profile levelId failed",e)}return A}var JK=gc(jl(),1),OM=Symbol("instance"),PM=Symbol("cacheResult"),YC=class{constructor(A,e,o){this.oldState=A,this.newState=e,this.action=o,this.aborted=!1}abort(A){this.aborted=!0,Xp.call(A,this.oldState,new Error("action '".concat(this.action,"' aborted")))}toString(){return"".concat(this.action,"ing")}},n_=class extends Error{constructor(A,e,o){super(e),this.state=A,this.message=e,this.cause=o}},xM=new Map;function lc(A,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return(a,l,d)=>{let h=o.action||l;if(!o.context){let S=xM.get(a)||[];xM.has(a)||xM.set(a,S),S.push({from:A,to:e,action:h})}let y=d.value;d.value=function(){let S=this;for(var k=arguments.length,V=new Array(k),J=0;J{if(o.fail&&o.fail.call(this,we),o.sync){if(o.ignoreError)return we;throw we}return o.ignoreError?Promise.resolve(we):Promise.reject(we)};if(cA)return CA(cA);let MA=S.state,ie=new YC(MA,e,h);Xp.call(S,ie);let pe=we=>{var Di;return S[PM]=we,ie.aborted||(Xp.call(S,e),(Di=o.success)===null||Di===void 0||Di.call(this,S[PM])),we},qe=we=>(Xp.call(S,MA,we),CA(we));try{let we=y.apply(this,V);return function(Di){return typeof Di=="object"&&Di&&"then"in Di}(we)?we.then(pe).catch(qe):o.sync?pe(we):Promise.resolve(pe(we))}catch(we){return qe(new n_(S._state,"".concat(S.name," ").concat(h," from ").concat(A," to ").concat(e," failed: ").concat(we),we instanceof Error?we:new Error(String(we))))}}}}var r_=typeof window<"u"&&window.__AFSM__?(A,e)=>{window.dispatchEvent(new CustomEvent(A,{detail:e}))}:typeof importScripts<"u"?(A,e)=>{postMessage({type:A,payload:e})}:()=>{};function Xp(A,e){let o=this._state;this._state=A;let a=A.toString();A&&this.emit(a,o),this.emit(Zs.STATECHANGED,A,o,e),this.updateDevTools({value:A,old:o,err:e instanceof Error?e.message:String(e)})}var Zs=class zC extends JK.default{constructor(e,o,a){super(),this.name=e,this.groupName=o,this._state=zC.INIT,e||(e=Date.now().toString(36)),a?Object.setPrototypeOf(this,a):a=Object.getPrototypeOf(this),o||(this.groupName=this.constructor.name);let l=a[OM];l?this.name=l.name+"-"+l.count++:a[OM]={name:this.name,count:0},this.updateDevTools({diagram:this.stateDiagram})}get stateDiagram(){let e=Object.getPrototypeOf(this),o=xM.get(e)||[],a=new Set,l=[],d=[],h=new Set,y=Object.getPrototypeOf(e);xM.has(y)&&(y.stateDiagram.forEach(k=>a.add(k)),y.allStates.forEach(k=>h.add(k))),o.forEach(k=>{let{from:V,to:J,action:cA}=k;typeof V=="string"?l.push({from:V,to:J,action:cA}):V.length?V.forEach(CA=>{l.push({from:CA,to:J,action:cA})}):d.push({to:J,action:cA})}),l.forEach(k=>{let{from:V,to:J,action:cA}=k;h.add(V),h.add(J),h.add(cA+"ing"),a.add("".concat(V," --> ").concat(cA,"ing : ").concat(cA)),a.add("".concat(cA,"ing --> ").concat(J," : ").concat(cA," 🟢")),a.add("".concat(cA,"ing --> ").concat(V," : ").concat(cA," 🔴"))}),d.forEach(k=>{let{to:V,action:J}=k;a.add("".concat(J,"ing --> ").concat(V," : ").concat(J," 🟢")),h.forEach(cA=>{cA!==V&&a.add("".concat(cA," --> ").concat(J,"ing : ").concat(J))})});let S=[...a];return Object.defineProperties(e,{stateDiagram:{value:S},allStates:{value:h}}),S}static get(e){let o;return typeof e=="string"?(o=zC.instances.get(e),o||zC.instances.set(e,o=new zC(e,void 0,Object.create(zC.prototype)))):(o=zC.instances2.get(e),o||zC.instances2.set(e,o=new zC(e.constructor.name,void 0,Object.create(zC.prototype)))),o}static getState(e){var o;return(o=zC.get(e))===null||o===void 0?void 0:o.state}updateDevTools(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};r_(zC.UPDATEAFSM,Object.assign({name:this.name,group:this.groupName},e))}get state(){return this._state}set state(e){Xp.call(this,e)}};Zs.STATECHANGED="stateChanged",Zs.UPDATEAFSM="updateAFSM",Zs.INIT="[*]",Zs.ON="on",Zs.OFF="off",Zs.instances=new Map,Zs.instances2=new WeakMap;var a_=typeof window<"u",$k=a_&&window.requestIdleCallback||function(A){let e=Date.now();return setTimeout(()=>{A({didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-e))})},1e3)},hl=a_&&window.cancelIdleCallback||function(A){clearTimeout(A)},$p=a_&&(window.cancelAnimationFrame||window.mozCancelAnimationFrame),yy=class hE{static generateTaskID(){return this.currentTaskID++}static run(e,o,a){a!=null&&a.fps&&(a.delay=a.delay||Number((1e3/a.fps).toFixed(2))),a=fi(e==="interval"?{delay:2e3,count:0,backgroundTask:!0}:e==="ric"?{delay:1e4,count:0}:e==="raf"?{fps:60,delay:16.6,count:0,backgroundTask:!0}:{delay:2e3,count:0,backgroundTask:!0},a);let l=po(fi({taskID:this.generateTaskID(),loopCount:0,intervalID:null,timeoutID:null,rafID:null,ricID:null,taskName:e,callback:o},a),{delay:a.delay});return this.taskMap.set(l.taskID,l),this[e](l),l.taskID}static interval(e){return e.intervalID=setInterval(()=>{e.callback(),e.loopCount+=1,hE.isBreakLoop(e)},e.delay)}static intervalInWorker(e){hE.sharedWorker||(hE.sharedWorker=new Worker(URL.createObjectURL(new Blob([` const timers = new Map(); self.onmessage = function(e) { const { taskId, delay, type } = e.data; @@ -274,15 +274,15 @@ Refer to: `.concat(R2("en",y),` timers.delete(taskId); } }; - `],{type:"application/javascript"}))),CE.sharedWorker.onmessage=o=>{var a;if(o.data.type==="tick"){let c=CE.workerTasks.get(o.data.taskId);c&&(CE.isBreakLoop(c)?((a=CE.sharedWorker)==null||a.postMessage({type:"stop",taskId:c.taskID}),CE.workerTasks.delete(c.taskID)):(c.callback(),c.loopCount+=1))}}),CE.workerTasks.set(e.taskID,e),CE.sharedWorker.postMessage({taskId:e.taskID,delay:e.delay,type:"start"})}static timeout(e){let o=()=>{if(e.callback(),e.loopCount+=1,!CE.isBreakLoop(e))return e.timeoutID=setTimeout(o,e.delay)};return e.timeoutID=setTimeout(o,e.delay)}static ric(e){let o,a=ko(),c=()=>{if(o=ko()-a,o>=e.delay&&(a=ko()-Math.floor(o%e.delay),e.callback(),e.loopCount+=1),!CE.isBreakLoop(e))return e.ricID=Kk(c,{timeout:e.delay})};return e.ricID=Kk(c,{timeout:e.delay})}static raf(e){let o,a=ko(),c=()=>document.hidden&&e.backgroundTask?(o=ko()-a,a=ko(),e.callback(),e.loopCount+=1,CE.isBreakLoop(e)?void 0:e.timeoutID=setTimeout(c,e.delay-Math.floor(o%e.delay))):(o=ko()-a,o>=e.delay&&(a=ko()-Math.floor(o%e.delay),e.callback(),e.loopCount+=1),CE.isBreakLoop(e)?void 0:e.rafID=requestAnimationFrame(c));if(e.rafID=requestAnimationFrame(c),e.backgroundTask){let d=()=>{if(document.hidden){let C=ko()-a;C>=e.delay?c():e.timeoutID=setTimeout(c,e.delay-C)}};document.addEventListener("visibilitychange",d),e.onVisibilitychange=d,document.hidden&&d()}return e.taskID}static hasTask(e){return this.taskMap.has(e)}static clearTask(e){if(!this.taskMap.has(e))return!0;let{intervalID:o,timeoutID:a,rafID:c,ricID:d,onVisibilitychange:C}=this.taskMap.get(e);return o&&clearInterval(o),a&&clearTimeout(a),c&&zp&&zp(c),d&&hl(d),C&&document.removeEventListener("visibilitychange",C),this.taskMap.delete(e),!0}static isBreakLoop(e){return!this.hasTask(e.taskID)||e.count!==0&&e.loopCount>=e.count&&(this.clearTask(e.taskID),!0)}};Y(Qy,"taskMap",new Map),Y(Qy,"currentTaskID",1),Y(Qy,"sharedWorker",null),Y(Qy,"workerTasks",new Map);var Gr=Qy,fo={LOAD_START:YA.LOADSTART,LOADED_DATA:YA.LOADEDDATA,LOADED_META_DATA:YA.LOADEDMETADATA,MEDIA_TRACK_CHANGED:"media-track-changed",PLAYER_STATE_CHANGED:"player-state-changed",ERROR:"error",AUTOPLAY_FAILED:"autoplay-failed",RESIZE:YA.RESIZE,TIME_UPDATE:"time-update",LEAVE_PICTURE_IN_PICTURE:YA.LEAVE_PICTURE_IN_PICTURE,ENTER_PICTURE_IN_PICTURE:YA.ENTER_PICTURE_IN_PICTURE,USER_RESUME_IN_PIP_OR_FULL_SCREEN:"user-resume-in-pip-or-full-screen",USER_PAUSE_IN_PIP_OR_FULL_SCREEN:"user-pause-in-pip-or-full-screen",ENTER_FULL_SCREEN:"enter-full-screen",LEAVE_FULL_SCREEN:"leave-full-screen",VOLUME_CHANGE:"volume-change",FIRST_FRAME_RENDER:"first-frame-render"},jk={};Hh(jk,{create:()=>rd,remove:()=>kn});var Xh=new WeakMap;function rd(A,e){Xh.has(A)||Xh.set(A,[]);let o=Xh.get(A),a={add:(c,d)=>("addEventListener"in e?(o.push(e.removeEventListener.bind(e,c,d)),e.addEventListener(c,d)):(o.push(e.off.bind(e,c,d)),e.on(c,d)),a)};return a}function kn(A){let e=Xh.get(A);e&&(e.forEach(o=>o()),Xh.delete(A))}var sn=new class{constructor(){Y(this,"_roomIdMap",new Map),Y(this,"_configs"),typeof registerProcessor>"u"&&(this._configs={sdkAppId:"",userId:"",version:qd,env:jB.QCLOUD,browserVersion:nQ.name+nQ.version,ua:navigator.userAgent})}setConfig(A){let{sdkAppId:e,env:o,userId:a,roomId:c}=A;e!==this._configs.sdkAppId&&(this._configs.sdkAppId=String(e)),this._configs.env=o,this._configs.userId=a,this._roomIdMap.set(a,String(c))}logSuccessEvent(A){Op||!QA.isAbleToUpload||this._configs.env===jB.QCLOUD&&this.uploadEventToKibana(Qo(mi({},A),{result:"success"}))}logFailedEvent(A){if(Op||!QA.isAbleToUpload)return;let{eventType:e,code:o,error:a,userId:c}=A,d={roomId:this._roomIdMap.get(c||this._configs.userId),userId:c,eventType:e,result:"failed",code:o||a?.extraCode||a?.code||dt.UNKNOWN};this._configs.env===jB.QCLOUD&&this.uploadEventToKibana(Qo(mi({},d),{error:a}))}uploadEventToKibana(A){let e="stat-".concat(A.eventType,"-").concat(A.result);(A.eventType==="delta-join"||A.eventType==="delta-leave"||A.eventType==="delta-publish")&&(e="".concat(A.eventType,":").concat(A.delta)),this.uploadEvent({log:e,userId:A.userId}),A.result==="failed"&&(e="stat-".concat(A.eventType,"-").concat(A.result,"-").concat(A.code),this.uploadEvent({log:e,userId:A.userId,error:A.error}))}uploadEvent(A){let{log:e,userId:o,error:a}=A,c={timestamp:_x(),sdkAppId:this._configs.sdkAppId,userId:o||this._configs.userId,version:qd,log:e};a&&(c.errorInfo=a.message,a.stack&&(c.errorInfo+=` -`.concat(a.stack)));let d=_A.enable?AQ(c,2002,Number(this._configs.sdkAppId)):JSON.stringify(c);this.sendRequest(Hf(this._configs.sdkAppId,bI.LOG),d)}sendRequest(A,e){setTimeout(()=>eQ({url:A,body:e,priority:"low"}).catch(()=>{}),2e3)}},PC=new WeakMap;function $h(A){let{settings:e={retries:5,timeout:2e3},onError:o,onRetrying:a,onRetryFailed:c}=A;return function(d,C,y){let S=gM({retryFunction:y.value,settings:e,onError(k){let{error:V,retry:J,reject:gA,retryFuncArgs:CA}=k;var MA;o?o.call(this,V,()=>{var $A;($A=PC.get(d))!=null&&$A.has(C)?J():gA(V)},gA,CA):(MA=PC.get(d))!=null&&MA.has(C)?J():gA(V)},onRetrying(k,V){var J;Np(a)&&a.call(this,k,V),(J=PC.get(d))!=null&&J.has(C)&&(PC.get(d).get(C).stopRetry=V)},onRetryFailed:c});return y.value=function(){let k=PC.get(d);for(var V=arguments.length,J=new Array(V),gA=0;gA{var CA;return(CA=PC.get(d))==null?void 0:CA.delete(C)})},y}}function n_(A){let{fnName:e,callback:o,validateArgs:a=!0}=A;return function(c,d,C){let y=C.value;return C.value=function(){for(var S,k,V=arguments.length,J=new Array(V),gA=0;gAYe===Be)){$A=!1;break}}$A&&(o&&o.apply(this,J),CA&&CA(),(k=PC.get(c))==null||k.delete(e))}return y.apply(this,J)},C}}var xC=class extends Zs{constructor(A,e){super(A.id,"".concat(e,"-player")),this.options=A,this.kind=e,Y(this,"id"),Y(this,"element",null),Y(this,"track"),Y(this,"url"),Y(this,"attr"),Y(this,"mode"),Y(this,"muted"),Y(this,"_log"),Y(this,"isPausedByUserCall",!1),Y(this,"_pausedRetryCount"),Y(this,"_isElementPlayingFired",!1),Y(this,"_interval"),Y(this,"_delayDestroyTimeoutId",0),Y(this,"_playSuccessResolve"),Y(this,"_isReplayByRecreateMediaStreamCalled",!1),Y(this,"isPlayCalled",!1),Y(this,"isInAutoPlayFailedState",!1),Y(this,"isBindAutoPlayEvent",!1),this.id=A.id,this._log=A.log,this.track=A.track,this.muted=A.muted,this._pausedRetryCount=vp,this._state="STOPPED",this.bindTrackEvents(),this._log.info("create ".concat(e,"-player ").concat(this.id))}get isPlaying(){var A;return this._state==="PLAYING"&&((A=this.element)==null?void 0:A.paused)===!1}get isPaused(){var A;return this._state==="PAUSED"||((A=this.element)==null?void 0:A.paused)===!0}get isStopped(){return this._state==="STOPPED"}setAttr(A){this.attr=A}setUrl(A){this.track&&(this.unbindTrackEvents(),this.element&&(this.element.srcObject=null),this.track=null),A!==this.url&&(this.url=A,A!==null&&this.element&&(this.element.crossOrigin="anonymous",this.element.src=A))}play(){return KA(this,null,function*(){if(!this.isPlaying)try{this.isPlayCalled=!0,this._delayDestroyTimeoutId&&(clearTimeout(this._delayDestroyTimeoutId),this._delayDestroyTimeoutId=0,this.bindTrackEvents(),this.bindElementEvents()),this.bindAutoPlayEvent(),yield new Promise((A,e)=>{this._playSuccessResolve=A,this.element.play().then(A,e)})}catch(A){let e=Xo({key:Mo.PLAY_FAILED,data:{media:this.kind,error:A}});if(this._log.warn(A),e.includes("NotAllowedError"))throw this.isInAutoPlayFailedState=!0,new ai({code:dt.PLAY_NOT_ALLOWED,message:e})}})}stop(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;var e;this.isPlayCalled=!1,this.isPausedByUserCall=!1,this._isElementPlayingFired=!1,this.unbindEvents(),A>0&&!Fp?this._delayDestroyTimeoutId||((e=this.element)==null||e.remove(),this._log.info("destroy element after 3 * ".concat(A)),this._delayDestroyTimeoutId=setTimeout(()=>this.destroyElement(),3*A)):this.destroyElement(),this.handleStopped(YA.ENDED),this._interval>0&&Gr.clearTask(this._interval)}destroyElement(){this.element&&(this._log.debug("destroy element"),this.element.remove(),this.element.src="",this.element.srcObject=null,this.element=null),clearTimeout(this._delayDestroyTimeoutId),this._delayDestroyTimeoutId=0}pause(){this._log.info("pause"),this.isPausedByUserCall=!0,this.doPause()}doPause(){var A;(A=this.element)==null||A.pause()}resume(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return this.isPausedByUserCall=!1,this.doResume(A)}doResume(){return this._log.info("resume"),this.isPausedByUserCall||this.isPlaying?Promise.resolve():f2?this.replay():this.play().catch(()=>{})}setMuted(A){this.element&&(this.element.muted=A),this.muted=A}replay(){return this.stop(),this.play().catch(()=>{})}bindElementEvents(){if(this.element){let A=this.handleElementEvent.bind(this);return rd(this.element,this.element).add(YA.PLAYING,A).add(YA.ENDED,A).add(YA.PAUSE,A).add(YA.ERROR,A).add(YA.LOADSTART,A).add(YA.LOADEDDATA,A).add(YA.LOADEDMETADATA,A)}}bindTrackEvents(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.track;if(A){let e=this.handleTrackEvent.bind(this);jk?.create(A,A).add(YA.ENDED,e).add(YA.MUTE,e).add(YA.UNMUTE,e),A.readyState===YA.ENDED&&this.handleTrackEvent({type:YA.ENDED}),A.muted&&this.handleTrackEvent({type:YA.MUTE})}}bindAutoPlayEvent(){this.isBindAutoPlayEvent||(this._log.warn("bindAutoPlayEvent"),F.on(nA.AUTOPLAY_DIALOG_CLICK_CONFIRM,this.resume,this),this.isBindAutoPlayEvent=!0)}unbindTrackEvents(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.track;A&&kn(A)}unbindEvents(){this.element&&kn(this.element),this.unbindTrackEvents(),F.off(nA.AUTOPLAY_DIALOG_CLICK_CONFIRM,this.resume,this),this.isBindAutoPlayEvent=!1}handleElementEvent(A){switch(A.type){case YA.PLAYING:fi()||(this.isInAutoPlayFailedState=!1),this._isElementPlayingFired=!0,this._log.info("".concat(this.kind," player is playing")),this.handlePlaying(YA.PLAYING),this._interval&&(Gr.clearTask(this._interval),this._interval=-1);break;case YA.ENDED:this._log.info("".concat(this.kind," player is ended")),this.handleStopped(YA.ENDED);break;case YA.PAUSE:this._log.info("".concat(this.kind," player is paused")),this.handlePaused(YA.PAUSE);break;case YA.ERROR:if(this.element&&this.element.error){this.handlePaused(YA.ERROR);let{code:e,message:o}=this.element.error;this._log.error("".concat(this.kind," ").concat(this._log.isLocal?"local":"remote"," MediaError code: ").concat(e," message: ").concat(o," userAgent: ").concat(navigator.userAgent)),sn.uploadEvent({log:"stat-".concat(this.kind,"-").concat(Ja.PLAYER_ERROR,"-").concat(e,"-").concat(navigator.userAgent),error:this.element.error}),Ik||lk?this.emit(fo.ERROR,this.element.error):this.replayByRecreateMediaStream(this.element.error)}break;case YA.LOADEDDATA:this.kind===YA.VIDEO&&this.emit(fo.LOADED_DATA);break;case YA.LOADEDMETADATA:this.kind===YA.VIDEO&&this.emit(fo.LOADED_META_DATA);break;case YA.LOADSTART:this.emit(fo.LOAD_START)}}replayByRecreateMediaStream(A){if(!this._isReplayByRecreateMediaStreamCalled)return this._isReplayByRecreateMediaStreamCalled=!0,this.doReplayByRecreateMediaStream(1e3).then(()=>{this._log.warn("replayByRecreateMediaStream success"),sn.uploadEvent({log:"stat-replayByRecreateMediaStream-success"}),ii.addSuccessEvent({key:this.kind===YA.AUDIO?506700:516700})}).catch(()=>{var e;this._log.error("replayByRecreateMediaStream failed"),sn.uploadEvent({log:"stat-replayByRecreateMediaStream-failed"}),ii.addFailedEvent({key:this.kind===YA.AUDIO?506700:516700,error:(e=this.element)==null?void 0:e.error}),this.emit(fo.ERROR,A)})}doReplayByRecreateMediaStream(A){return this._log.warn("delay ".concat(A,"ms to recreate mediaStream")),new Promise((e,o)=>{LC(A).then(()=>{this.element&&(this.element.srcObject=null,this.element.srcObject=new MediaStream([this.track]),this._log.warn("recreated mediaStream"),this.element.onerror=()=>{var a,c,d;this._log.warn("element onerror ".concat((c=(a=this.element)==null?void 0:a.error)==null?void 0:c.code," fired after recreated mediaStream")),o((d=this.element)==null?void 0:d.error)}),LC(5e3).then(()=>{var a,c;(!this.isPlaying||(a=this.element)!=null&&a.error)&&o((c=this.element)==null?void 0:c.error),e()})})}).finally(()=>{this.element&&(this.element.onerror=null)})}handleTrackEvent(A){return KA(this,null,function*(){let e=A.type;switch(this.options.enableLogTrackState&&this._log[e===YA.UNMUTE?"info":"warn"]("track ".concat(e)),e){case YA.ENDED:this.handleStopped(YA.ENDED);break;case YA.MUTE:this.handlePaused(YA.MUTE);break;case YA.UNMUTE:this.mode>0?this.handlePlaying(this.mode.toString()):this.element&&(this.element.paused&&!this.isPausedByUserCall&&(this._log.warn("track unmuted and element is paused, resume"),yield this.doResume()),this.element&&!this.element.paused&&this._isElementPlayingFired&&this.handlePlaying(YA.UNMUTE))}})}handlePlaying(A){var e;return this._log.debug("handlePlaying",A),(e=this._playSuccessResolve)==null||e.call(this,A),A}handlePaused(A){return this._log.debug("handlePaused",A),A}handleStopped(A){return this._log.debug("handleStopped",A),A}getElement(){return this.element}};Y(xC,"PlayerEvent",fo),Ci([$h({settings:{retries:2,timeout:0},onError(A,e,o,a){a[0]=(a[0]||1e3)+1e3,e()}})],xC.prototype,"doReplayByRecreateMediaStream"),Ci([lc([],"PLAYING",{sync:!0,success(A){this.emit(fo.PLAYER_STATE_CHANGED,{type:this.kind,state:"PLAYING",reason:A})}})],xC.prototype,"handlePlaying"),Ci([lc("PLAYING","PAUSED",{ignoreError:!0,sync:!0,success(A){this.emit(fo.PLAYER_STATE_CHANGED,{type:this.kind,state:"PAUSED",reason:A})}})],xC.prototype,"handlePaused"),Ci([lc([],"STOPPED",{sync:!0,success(A){this.emit(fo.PLAYER_STATE_CHANGED,{type:this.kind,state:"STOPPED",reason:A})}})],xC.prototype,"handleStopped");var AB="trtc_autoplay",Wk="".concat(AB,"_mask"),OM="".concat(AB,"_wrapper"),PM="".concat(AB,"_header"),xM="".concat(AB,"_content"),r_="".concat(AB,"_action_wrapper"),AA="".concat(AB,"_question"),Z="".concat(AB,"_collapse"),hA="".concat(AB,"_action_confirm"),bA="".concat(AB,"_detail"),Ie="#2473E8",De="dialog",Re="".concat(De,"-show"),Le="".concat(De,"-1"),st="".concat(De,"-2"),He=!1,kt=!1,fi=()=>kt,wi="".concat(qh,"/").concat(Wd()?"zh-cn":"en","/tutorial-21-advanced-auto-play-policy.html"),Ds="
").concat(Wd()?"其他方案?":"Any other solution?",""),Tn="".concat(Wd()?"浏览器自动播放策略:在用户与页面产生交互(点击、触摸)之前,浏览器禁止播放有声媒体。该弹窗用于帮助用户恢复音视频播放。".concat(Ds):"Autoplay Policy: Before user interacts with the web page (clicking, touching), page will not be allowed to play media with sound. This Dialog is used to help users resume playback. ".concat(Ds)),oa=class{constructor(){if(Y(this,"content","音视频播放被浏览器拦截,请点击“恢复播放”。"),Y(this,"_dialogNode",null),Y(this,"_bodyPosition",""),Y(this,"_showDetail",!1),Y(this,"_isCollapseClicked",!1),Y(this,"_isQuestionClicked",!1),Wd()||(this.content='Media playback failed. Click the "Resume" to resume playback.'),!He){let A=document.createElement("style");A.innerHTML=".".concat(Wk,"{position:fixed;top:0;left:0;right:0;bottom:0;width:100vw;height:100vh;display:flex;justify-content:center;align-items:center;background:rgba(0,0,0,0.5);z-index:1500;}.").concat(Wk," div:not(.").concat(r_,"){display:block !important;}.").concat(OM,"{padding:14px;background:#fff;border-radius:3px;box-shadow:0px 3px 15px #434343;border:1px solid #d1cfcf;max-width:500px;}.").concat(OM," a{color:").concat(Ie,";}.").concat(PM,"{overflow:hidden;text-overflow:ellipsis;font-size:16px;font-weight:600;}.").concat(xM,"{margin:8px 0;}.").concat(r_,"{width:100%;display:flex !important;align-items:center;justify-content:right;float:right;}.").concat(Z,"{margin-right:auto;cursor:pointer}.").concat(AA,"{height:100%;line-height:16px;cursor:pointer;}.").concat(hA,"{margin-left:8px;color:#fff;background:").concat(Ie,";padding:4px 12px;outline:none;border:1px solid;border-radius:3px;font-weight:bold;}.").concat(hA,":hover{opacity:0.9;}.").concat(Z,",.").concat(hA,",.").concat(xM,",.").concat(AA,"{font-size:14px;}@media screen and (max-width:750px){.").concat(OM,"{width:80vw;}}"),document.head.appendChild(A),He=!0}this.addDiaLog()}createDiaLog(){let A=document.createElement("template");A.innerHTML='
").concat(location.host,"
").concat(this.content,"
").trim();let e=document.createElement("button");e.className=hA,e.innerText=Wd()?"恢复播放":"Resume",e.onclick=this.onConfirm.bind(this);let o=document.createElement("div");o.className=AA,o.innerHTML=` + `],{type:"application/javascript"}))),hE.sharedWorker.onmessage=o=>{var a;if(o.data.type==="tick"){let l=hE.workerTasks.get(o.data.taskId);l&&(hE.isBreakLoop(l)?((a=hE.sharedWorker)==null||a.postMessage({type:"stop",taskId:l.taskID}),hE.workerTasks.delete(l.taskID)):(l.callback(),l.loopCount+=1))}}),hE.workerTasks.set(e.taskID,e),hE.sharedWorker.postMessage({taskId:e.taskID,delay:e.delay,type:"start"})}static timeout(e){let o=()=>{if(e.callback(),e.loopCount+=1,!hE.isBreakLoop(e))return e.timeoutID=setTimeout(o,e.delay)};return e.timeoutID=setTimeout(o,e.delay)}static ric(e){let o,a=ko(),l=()=>{if(o=ko()-a,o>=e.delay&&(a=ko()-Math.floor(o%e.delay),e.callback(),e.loopCount+=1),!hE.isBreakLoop(e))return e.ricID=$k(l,{timeout:e.delay})};return e.ricID=$k(l,{timeout:e.delay})}static raf(e){let o,a=ko(),l=()=>document.hidden&&e.backgroundTask?(o=ko()-a,a=ko(),e.callback(),e.loopCount+=1,hE.isBreakLoop(e)?void 0:e.timeoutID=setTimeout(l,e.delay-Math.floor(o%e.delay))):(o=ko()-a,o>=e.delay&&(a=ko()-Math.floor(o%e.delay),e.callback(),e.loopCount+=1),hE.isBreakLoop(e)?void 0:e.rafID=requestAnimationFrame(l));if(e.rafID=requestAnimationFrame(l),e.backgroundTask){let d=()=>{if(document.hidden){let h=ko()-a;h>=e.delay?l():e.timeoutID=setTimeout(l,e.delay-h)}};document.addEventListener("visibilitychange",d),e.onVisibilitychange=d,document.hidden&&d()}return e.taskID}static hasTask(e){return this.taskMap.has(e)}static clearTask(e){if(!this.taskMap.has(e))return!0;let{intervalID:o,timeoutID:a,rafID:l,ricID:d,onVisibilitychange:h}=this.taskMap.get(e);return o&&clearInterval(o),a&&clearTimeout(a),l&&$p&&$p(l),d&&hl(d),h&&document.removeEventListener("visibilitychange",h),this.taskMap.delete(e),!0}static isBreakLoop(e){return!this.hasTask(e.taskID)||e.count!==0&&e.loopCount>=e.count&&(this.clearTask(e.taskID),!0)}};Y(yy,"taskMap",new Map),Y(yy,"currentTaskID",1),Y(yy,"sharedWorker",null),Y(yy,"workerTasks",new Map);var Gr=yy,yo={LOAD_START:YA.LOADSTART,LOADED_DATA:YA.LOADEDDATA,LOADED_META_DATA:YA.LOADEDMETADATA,MEDIA_TRACK_CHANGED:"media-track-changed",PLAYER_STATE_CHANGED:"player-state-changed",ERROR:"error",AUTOPLAY_FAILED:"autoplay-failed",RESIZE:YA.RESIZE,TIME_UPDATE:"time-update",LEAVE_PICTURE_IN_PICTURE:YA.LEAVE_PICTURE_IN_PICTURE,ENTER_PICTURE_IN_PICTURE:YA.ENTER_PICTURE_IN_PICTURE,USER_RESUME_IN_PIP_OR_FULL_SCREEN:"user-resume-in-pip-or-full-screen",USER_PAUSE_IN_PIP_OR_FULL_SCREEN:"user-pause-in-pip-or-full-screen",ENTER_FULL_SCREEN:"enter-full-screen",LEAVE_FULL_SCREEN:"leave-full-screen",VOLUME_CHANGE:"volume-change",FIRST_FRAME_RENDER:"first-frame-render"},AL={};jh(AL,{create:()=>nd,remove:()=>Ln});var eB=new WeakMap;function nd(A,e){eB.has(A)||eB.set(A,[]);let o=eB.get(A),a={add:(l,d)=>("addEventListener"in e?(o.push(e.removeEventListener.bind(e,l,d)),e.addEventListener(l,d)):(o.push(e.off.bind(e,l,d)),e.on(l,d)),a)};return a}function Ln(A){let e=eB.get(A);e&&(e.forEach(o=>o()),eB.delete(A))}var sn=new class{constructor(){Y(this,"_roomIdMap",new Map),Y(this,"_configs"),typeof registerProcessor>"u"&&(this._configs={sdkAppId:"",userId:"",version:qd,env:ZB.QCLOUD,browserVersion:gQ.name+gQ.version,ua:navigator.userAgent})}setConfig(A){let{sdkAppId:e,env:o,userId:a,roomId:l}=A;e!==this._configs.sdkAppId&&(this._configs.sdkAppId=String(e)),this._configs.env=o,this._configs.userId=a,this._roomIdMap.set(a,String(l))}logSuccessEvent(A){Yp||!pA.isAbleToUpload||this._configs.env===ZB.QCLOUD&&this.uploadEventToKibana(po(fi({},A),{result:"success"}))}logFailedEvent(A){if(Yp||!pA.isAbleToUpload)return;let{eventType:e,code:o,error:a,userId:l}=A,d={roomId:this._roomIdMap.get(l||this._configs.userId),userId:l,eventType:e,result:"failed",code:o||a?.extraCode||a?.code||Ct.UNKNOWN};this._configs.env===ZB.QCLOUD&&this.uploadEventToKibana(po(fi({},d),{error:a}))}uploadEventToKibana(A){let e="stat-".concat(A.eventType,"-").concat(A.result);(A.eventType==="delta-join"||A.eventType==="delta-leave"||A.eventType==="delta-publish")&&(e="".concat(A.eventType,":").concat(A.delta)),this.uploadEvent({log:e,userId:A.userId}),A.result==="failed"&&(e="stat-".concat(A.eventType,"-").concat(A.result,"-").concat(A.code),this.uploadEvent({log:e,userId:A.userId,error:A.error}))}uploadEvent(A){let{log:e,userId:o,error:a}=A,l={timestamp:Px(),sdkAppId:this._configs.sdkAppId,userId:o||this._configs.userId,version:qd,log:e};a&&(l.errorInfo=a.message,a.stack&&(l.errorInfo+=` +`.concat(a.stack)));let d=TA.enable?iQ(l,2002,Number(this._configs.sdkAppId)):JSON.stringify(l);this.sendRequest(jf(this._configs.sdkAppId,kI.LOG),d)}sendRequest(A,e){setTimeout(()=>oQ({url:A,body:e,priority:"low"}).catch(()=>{}),2e3)}},VC=new WeakMap;function tB(A){let{settings:e={retries:5,timeout:2e3},onError:o,onRetrying:a,onRetryFailed:l}=A;return function(d,h,y){let S=IM({retryFunction:y.value,settings:e,onError(k){let{error:V,retry:J,reject:cA,retryFuncArgs:CA}=k;var MA;o?o.call(this,V,()=>{var ie;(ie=VC.get(d))!=null&&ie.has(h)?J():cA(V)},cA,CA):(MA=VC.get(d))!=null&&MA.has(h)?J():cA(V)},onRetrying(k,V){var J;kp(a)&&a.call(this,k,V),(J=VC.get(d))!=null&&J.has(h)&&(VC.get(d).get(h).stopRetry=V)},onRetryFailed:l});return y.value=function(){let k=VC.get(d);for(var V=arguments.length,J=new Array(V),cA=0;cA{var CA;return(CA=VC.get(d))==null?void 0:CA.delete(h)})},y}}function g_(A){let{fnName:e,callback:o,validateArgs:a=!0}=A;return function(l,d,h){let y=h.value;return h.value=function(){for(var S,k,V=arguments.length,J=new Array(V),cA=0;cAqe===pe)){ie=!1;break}}ie&&(o&&o.apply(this,J),CA&&CA(),(k=VC.get(l))==null||k.delete(e))}return y.apply(this,J)},h}}var JC=class extends Zs{constructor(A,e){super(A.id,"".concat(e,"-player")),this.options=A,this.kind=e,Y(this,"id"),Y(this,"element",null),Y(this,"track"),Y(this,"url"),Y(this,"attr"),Y(this,"mode"),Y(this,"muted"),Y(this,"_log"),Y(this,"isPausedByUserCall",!1),Y(this,"_pausedRetryCount"),Y(this,"_isElementPlayingFired",!1),Y(this,"_interval"),Y(this,"_delayDestroyTimeoutId",0),Y(this,"_playSuccessResolve"),Y(this,"_isReplayByRecreateMediaStreamCalled",!1),Y(this,"isPlayCalled",!1),Y(this,"isInAutoPlayFailedState",!1),Y(this,"isBindAutoPlayEvent",!1),this.id=A.id,this._log=A.log,this.track=A.track,this.muted=A.muted,this._pausedRetryCount=_p,this._state="STOPPED",this.bindTrackEvents(),this._log.info("create ".concat(e,"-player ").concat(this.id))}get isPlaying(){var A;return this._state==="PLAYING"&&((A=this.element)==null?void 0:A.paused)===!1}get isPaused(){var A;return this._state==="PAUSED"||((A=this.element)==null?void 0:A.paused)===!0}get isStopped(){return this._state==="STOPPED"}setAttr(A){this.attr=A}setUrl(A){this.track&&(this.unbindTrackEvents(),this.element&&(this.element.srcObject=null),this.track=null),A!==this.url&&(this.url=A,A!==null&&this.element&&(this.element.crossOrigin="anonymous",this.element.src=A))}play(){return WA(this,null,function*(){if(!this.isPlaying)try{this.isPlayCalled=!0,this._delayDestroyTimeoutId&&(clearTimeout(this._delayDestroyTimeoutId),this._delayDestroyTimeoutId=0,this.bindTrackEvents(),this.bindElementEvents()),this.bindAutoPlayEvent(),yield new Promise((A,e)=>{this._playSuccessResolve=A,this.element.play().then(A,e)})}catch(A){let e=Xo({key:vo.PLAY_FAILED,data:{media:this.kind,error:A}});if(this._log.warn(A),e.includes("NotAllowedError"))throw this.isInAutoPlayFailedState=!0,new gi({code:Ct.PLAY_NOT_ALLOWED,message:e})}})}stop(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;var e;this.isPlayCalled=!1,this.isPausedByUserCall=!1,this._isElementPlayingFired=!1,this.unbindEvents(),A>0&&!xp?this._delayDestroyTimeoutId||((e=this.element)==null||e.remove(),this._log.info("destroy element after 3 * ".concat(A)),this._delayDestroyTimeoutId=setTimeout(()=>this.destroyElement(),3*A)):this.destroyElement(),this.handleStopped(YA.ENDED),this._interval>0&&Gr.clearTask(this._interval)}destroyElement(){this.element&&(this._log.debug("destroy element"),this.element.remove(),this.element.src="",this.element.srcObject=null,this.element=null),clearTimeout(this._delayDestroyTimeoutId),this._delayDestroyTimeoutId=0}pause(){this._log.info("pause"),this.isPausedByUserCall=!0,this.doPause()}doPause(){var A;(A=this.element)==null||A.pause()}resume(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return this.isPausedByUserCall=!1,this.doResume(A)}doResume(){return this._log.info("resume"),this.isPausedByUserCall||this.isPlaying?Promise.resolve():N2?this.replay():this.play().catch(()=>{})}setMuted(A){this.element&&(this.element.muted=A),this.muted=A}replay(){return this.stop(),this.play().catch(()=>{})}bindElementEvents(){if(this.element){let A=this.handleElementEvent.bind(this);return nd(this.element,this.element).add(YA.PLAYING,A).add(YA.ENDED,A).add(YA.PAUSE,A).add(YA.ERROR,A).add(YA.LOADSTART,A).add(YA.LOADEDDATA,A).add(YA.LOADEDMETADATA,A)}}bindTrackEvents(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.track;if(A){let e=this.handleTrackEvent.bind(this);AL?.create(A,A).add(YA.ENDED,e).add(YA.MUTE,e).add(YA.UNMUTE,e),A.readyState===YA.ENDED&&this.handleTrackEvent({type:YA.ENDED}),A.muted&&this.handleTrackEvent({type:YA.MUTE})}}bindAutoPlayEvent(){this.isBindAutoPlayEvent||(this._log.warn("bindAutoPlayEvent"),F.on(nA.AUTOPLAY_DIALOG_CLICK_CONFIRM,this.resume,this),this.isBindAutoPlayEvent=!0)}unbindTrackEvents(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.track;A&&Ln(A)}unbindEvents(){this.element&&Ln(this.element),this.unbindTrackEvents(),F.off(nA.AUTOPLAY_DIALOG_CLICK_CONFIRM,this.resume,this),this.isBindAutoPlayEvent=!1}handleElementEvent(A){switch(A.type){case YA.PLAYING:yi()||(this.isInAutoPlayFailedState=!1),this._isElementPlayingFired=!0,this._log.info("".concat(this.kind," player is playing")),this.handlePlaying(YA.PLAYING),this._interval&&(Gr.clearTask(this._interval),this._interval=-1);break;case YA.ENDED:this._log.info("".concat(this.kind," player is ended")),this.handleStopped(YA.ENDED);break;case YA.PAUSE:this._log.info("".concat(this.kind," player is paused")),this.handlePaused(YA.PAUSE);break;case YA.ERROR:if(this.element&&this.element.error){this.handlePaused(YA.ERROR);let{code:e,message:o}=this.element.error;this._log.error("".concat(this.kind," ").concat(this._log.isLocal?"local":"remote"," MediaError code: ").concat(e," message: ").concat(o," userAgent: ").concat(navigator.userAgent)),sn.uploadEvent({log:"stat-".concat(this.kind,"-").concat(Ja.PLAYER_ERROR,"-").concat(e,"-").concat(navigator.userAgent),error:this.element.error}),Bk||hk?this.emit(yo.ERROR,this.element.error):this.replayByRecreateMediaStream(this.element.error)}break;case YA.LOADEDDATA:this.kind===YA.VIDEO&&this.emit(yo.LOADED_DATA);break;case YA.LOADEDMETADATA:this.kind===YA.VIDEO&&this.emit(yo.LOADED_META_DATA);break;case YA.LOADSTART:this.emit(yo.LOAD_START)}}replayByRecreateMediaStream(A){if(!this._isReplayByRecreateMediaStreamCalled)return this._isReplayByRecreateMediaStreamCalled=!0,this.doReplayByRecreateMediaStream(1e3).then(()=>{this._log.warn("replayByRecreateMediaStream success"),sn.uploadEvent({log:"stat-replayByRecreateMediaStream-success"}),si.addSuccessEvent({key:this.kind===YA.AUDIO?506700:516700})}).catch(()=>{var e;this._log.error("replayByRecreateMediaStream failed"),sn.uploadEvent({log:"stat-replayByRecreateMediaStream-failed"}),si.addFailedEvent({key:this.kind===YA.AUDIO?506700:516700,error:(e=this.element)==null?void 0:e.error}),this.emit(yo.ERROR,A)})}doReplayByRecreateMediaStream(A){return this._log.warn("delay ".concat(A,"ms to recreate mediaStream")),new Promise((e,o)=>{OC(A).then(()=>{this.element&&(this.element.srcObject=null,this.element.srcObject=new MediaStream([this.track]),this._log.warn("recreated mediaStream"),this.element.onerror=()=>{var a,l,d;this._log.warn("element onerror ".concat((l=(a=this.element)==null?void 0:a.error)==null?void 0:l.code," fired after recreated mediaStream")),o((d=this.element)==null?void 0:d.error)}),OC(5e3).then(()=>{var a,l;(!this.isPlaying||(a=this.element)!=null&&a.error)&&o((l=this.element)==null?void 0:l.error),e()})})}).finally(()=>{this.element&&(this.element.onerror=null)})}handleTrackEvent(A){return WA(this,null,function*(){let e=A.type;switch(this.options.enableLogTrackState&&this._log[e===YA.UNMUTE?"info":"warn"]("track ".concat(e)),e){case YA.ENDED:this.handleStopped(YA.ENDED);break;case YA.MUTE:this.handlePaused(YA.MUTE);break;case YA.UNMUTE:this.mode>0?this.handlePlaying(this.mode.toString()):this.element&&(this.element.paused&&!this.isPausedByUserCall&&(this._log.warn("track unmuted and element is paused, resume"),yield this.doResume()),this.element&&!this.element.paused&&this._isElementPlayingFired&&this.handlePlaying(YA.UNMUTE))}})}handlePlaying(A){var e;return this._log.debug("handlePlaying",A),(e=this._playSuccessResolve)==null||e.call(this,A),A}handlePaused(A){return this._log.debug("handlePaused",A),A}handleStopped(A){return this._log.debug("handleStopped",A),A}getElement(){return this.element}};Y(JC,"PlayerEvent",yo),hi([tB({settings:{retries:2,timeout:0},onError(A,e,o,a){a[0]=(a[0]||1e3)+1e3,e()}})],JC.prototype,"doReplayByRecreateMediaStream"),hi([lc([],"PLAYING",{sync:!0,success(A){this.emit(yo.PLAYER_STATE_CHANGED,{type:this.kind,state:"PLAYING",reason:A})}})],JC.prototype,"handlePlaying"),hi([lc("PLAYING","PAUSED",{ignoreError:!0,sync:!0,success(A){this.emit(yo.PLAYER_STATE_CHANGED,{type:this.kind,state:"PAUSED",reason:A})}})],JC.prototype,"handlePaused"),hi([lc([],"STOPPED",{sync:!0,success(A){this.emit(yo.PLAYER_STATE_CHANGED,{type:this.kind,state:"STOPPED",reason:A})}})],JC.prototype,"handleStopped");var iB="trtc_autoplay",eL="".concat(iB,"_mask"),YM="".concat(iB,"_wrapper"),VM="".concat(iB,"_header"),JM="".concat(iB,"_content"),c_="".concat(iB,"_action_wrapper"),AA="".concat(iB,"_question"),Z="".concat(iB,"_collapse"),hA="".concat(iB,"_action_confirm"),bA="".concat(iB,"_detail"),Ce="#2473E8",Me="dialog",_e="".concat(Me,"-show"),Fe="".concat(Me,"-1"),nt="".concat(Me,"-2"),je=!1,bt=!1,yi=()=>bt,Ti="".concat(Wh,"/").concat(Wd()?"zh-cn":"en","/tutorial-21-advanced-auto-play-policy.html"),Ss="
").concat(Wd()?"其他方案?":"Any other solution?",""),Tn="".concat(Wd()?"浏览器自动播放策略:在用户与页面产生交互(点击、触摸)之前,浏览器禁止播放有声媒体。该弹窗用于帮助用户恢复音视频播放。".concat(Ss):"Autoplay Policy: Before user interacts with the web page (clicking, touching), page will not be allowed to play media with sound. This Dialog is used to help users resume playback. ".concat(Ss)),sa=class{constructor(){if(Y(this,"content","音视频播放被浏览器拦截,请点击“恢复播放”。"),Y(this,"_dialogNode",null),Y(this,"_bodyPosition",""),Y(this,"_showDetail",!1),Y(this,"_isCollapseClicked",!1),Y(this,"_isQuestionClicked",!1),Wd()||(this.content='Media playback failed. Click the "Resume" to resume playback.'),!je){let A=document.createElement("style");A.innerHTML=".".concat(eL,"{position:fixed;top:0;left:0;right:0;bottom:0;width:100vw;height:100vh;display:flex;justify-content:center;align-items:center;background:rgba(0,0,0,0.5);z-index:1500;}.").concat(eL," div:not(.").concat(c_,"){display:block !important;}.").concat(YM,"{padding:14px;background:#fff;border-radius:3px;box-shadow:0px 3px 15px #434343;border:1px solid #d1cfcf;max-width:500px;}.").concat(YM," a{color:").concat(Ce,";}.").concat(VM,"{overflow:hidden;text-overflow:ellipsis;font-size:16px;font-weight:600;}.").concat(JM,"{margin:8px 0;}.").concat(c_,"{width:100%;display:flex !important;align-items:center;justify-content:right;float:right;}.").concat(Z,"{margin-right:auto;cursor:pointer}.").concat(AA,"{height:100%;line-height:16px;cursor:pointer;}.").concat(hA,"{margin-left:8px;color:#fff;background:").concat(Ce,";padding:4px 12px;outline:none;border:1px solid;border-radius:3px;font-weight:bold;}.").concat(hA,":hover{opacity:0.9;}.").concat(Z,",.").concat(hA,",.").concat(JM,",.").concat(AA,"{font-size:14px;}@media screen and (max-width:750px){.").concat(YM,"{width:80vw;}}"),document.head.appendChild(A),je=!0}this.addDiaLog()}createDiaLog(){let A=document.createElement("template");A.innerHTML='
").concat(location.host,"
").concat(this.content,"
").trim();let e=document.createElement("button");e.className=hA,e.innerText=Wd()?"恢复播放":"Resume",e.onclick=this.onConfirm.bind(this);let o=document.createElement("div");o.className=AA,o.innerHTML=` - `,o.onclick=this.onQuestionClick.bind(this);let a=document.createElement("div");a.className=Z,a.innerText="".concat(Wd()?"详情 >":"Detail >"),a.onclick=this.onCollapseClick.bind(this);let c=A.content.firstChild,d=c.querySelector(".".concat(r_));return d.appendChild(a),d.appendChild(o),d.appendChild(e),c}addDiaLog(){fi()||(kt=!0,this._dialogNode=this.createDiaLog(),document.body.appendChild(this._dialogNode),this._dialogNode.onclick=this.onConfirm.bind(this),this._dialogNode.querySelector(".".concat(OM)).onclick=A=>A.stopPropagation(),this._bodyPosition=document.body.style.position,document.body.style.position="fixed",QA.info("show autoplay dialog"),sn.uploadEvent({log:Re}))}deleteDialog(){this._dialogNode&&(document.body.removeChild(this._dialogNode),document.body.style.position=this._bodyPosition,this._dialogNode=null,kt=!1),Oc=null}onConfirm(){QA.warn("confirm clicked, try resume stream"),F.emit(nA.AUTOPLAY_DIALOG_CLICK_CONFIRM),this.deleteDialog()}onCollapseClick(){let A=this._dialogNode.querySelector(".".concat(bA));A.style.visibility="".concat(this._showDetail?"hidden":"visible"),A.style.height="".concat(this._showDetail?0:"fit-content"),this._showDetail=!this._showDetail,this._isCollapseClicked||sn.uploadEvent({log:Le}),this._isCollapseClicked=!0}onQuestionClick(){window.open(wi,"_blank"),this._isQuestionClicked||sn.uploadEvent({log:st}),this._isQuestionClicked=!0}},Oc=null;function YC(){Oc||(Oc=new oa)}var di,vo=class G9 extends xC{constructor(e){super(e,YA.VIDEO),Y(this,"stat",{}),Y(this,"_calculateTimeout",-1),Y(this,"viewMirror",!1),Y(this,"objectFit","cover"),Y(this,"container"),Y(this,"canvas"),Y(this,"shouldRenderAlpha",!1),Y(this,"_preSize",{width:0,height:0}),Y(this,"posterImg"),Y(this,"pipWindow"),Y(this,"enterPIPPromise"),Y(this,"_originContainerPosition"),Y(this,"_isResettingSrcObject",!1),Y(this,"_wrapper",null),Y(this,"_useWrapper",!1),Y(this,"_isFirstFrameRenderEmitted",!1),this.mode=e.canvas?1:0,this.container=e.container,this.canvas=e.canvas,Je(e.viewMirror)||(this.viewMirror=e.viewMirror),Je(e.objectFit)||(this.objectFit=e.objectFit),this.initializeElement()}get isPlaying(){var e;return!(this._state!=="PLAYING"||this.element&&this.element.paused)&&((e=this.track)==null?void 0:e.readyState)==="live"&&!this.track.muted}initializeElement(){let e=document.createElement(YA.VIDEO);this.track&&this.mode!==2&&(e.srcObject=new MediaStream([this.track])),e.muted=!0,e.setAttribute("id","video_".concat(this.id)),e.setAttribute("style",this.styleAttribute),this.canvas&&this.canvas.setAttribute("style",this.styleAttribute),e.setAttribute("autoplay","autoplay"),e.setAttribute("playsinline","playsinline"),this.element=e,Ha&&(e.poster="data:,"),this._appendToWrapper(),this.bindElementEvents(),this.calculateStat(),this._bindFirstFrameRenderEvent(e)}_bindFirstFrameRenderEvent(e){let o=()=>{if(this._isFirstFrameRenderEmitted)return;this._isFirstFrameRenderEmitted=!0;let a=e.videoWidth||0,c=e.videoHeight||0;this._log.info("first frame render: ".concat(a,"x").concat(c)),this.emit(fo.FIRST_FRAME_RENDER,{width:a,height:c})};typeof e.requestVideoFrameCallback=="function"?e.requestVideoFrameCallback(o):e.addEventListener("loadeddata",o,{once:!0})}get styleAttribute(){let e=this._useWrapper?"grid-area:1/1;width:100%;height:100%;object-fit:".concat(this.objectFit,";").concat(this.shouldRenderAlpha?"":"background-color:black",";"):"width:100%;height:100%;object-fit:".concat(this.objectFit,";").concat(this.shouldRenderAlpha?"":"background-color:black",";");return this.viewMirror&&(e+="transform:scaleX(-1);"),e}setLiveMode(e){if(this._useWrapper!==e&&(this._useWrapper=e,this.elementToRender&&this.elementToRender.setAttribute("style",this.styleAttribute),this.container&&this.elementToRender))if(e){let o=this._getOrCreateWrapper();o.insertBefore(this.elementToRender,o.firstChild)}else this.container.appendChild(this.elementToRender),this._cleanupWrapper()}setContainer(e){if(this.container===e)return;let o=this._wrapper,a=this.container;this.container=e,this._pausedRetryCount=vp,this.track&&this.elementToRender&&this._appendToWrapper(),o&&a&&a!==this.container&&o.isConnected&&o.children.length===0&&o.remove()}_getOrCreateWrapper(){if(!this.container)throw new Error("[VideoPlayer] container is required");let e=this.container.querySelector("[data-trtc-video-wrapper]");return e||(e=document.createElement("div"),e.setAttribute("data-trtc-video-wrapper","true"),e.style.cssText="display:grid;width:100%;height:100%;",this.container.appendChild(e)),this._wrapper=e,e}_appendToWrapper(e){let o=e??this.elementToRender;if(this.container&&o)if(this._useWrapper){let a=this._getOrCreateWrapper();a.insertBefore(o,a.firstChild)}else this.container.appendChild(o)}bindElementEvents(){let e=super.bindElementEvents();this.handleElementEvent=this.handleElementEvent.bind(this),this.handleFullscreenChange=this.handleFullscreenChange.bind(this),this.handleVolumeChange=this.handleVolumeChange.bind(this),e&&e.add(YA.ENTER_PICTURE_IN_PICTURE,this.handleElementEvent).add(YA.LEAVE_PICTURE_IN_PICTURE,this.handleElementEvent).add(YA.RESIZE,this.handleElementEvent),this.element&&(this.element.addEventListener(YA.FULLSCREEN_CHANGE,this.handleFullscreenChange),this.element.addEventListener("webkitbeginfullscreen",this.handleFullscreenChange),this.element.addEventListener("webkitendfullscreen",this.handleFullscreenChange),this.element.addEventListener("volumechange",this.handleVolumeChange))}handleTrackEvent(e){var o;return e.type===YA.MUTE&&((o=this.stat)!=null&&o.fps&&(this.stat.fps=0),this.isFullscreen()&&this.resetSrcObjectToReplay()),super.handleTrackEvent(e)}handleFullscreenChange(){this.isFullscreen()?(this._log.info("enter fullscreen"),this.emit(fo.ENTER_FULL_SCREEN)):(this._log.info("leave fullscreen"),this.emit(fo.LEAVE_FULL_SCREEN))}handleVolumeChange(){var e;(this.isPictureInPicture()||this.isFullscreen())&&this.emit(fo.VOLUME_CHANGE,{muted:(e=this.element)==null?void 0:e.muted})}handleElementEvent(e){var o,a,c,d,C,y;if(this.mode===2)return;super.handleElementEvent(e);let S=e.type,k=this.isPictureInPicture(),V=this.isFullscreen(),J=e.isTrusted&&(k&&Bg||V);if(S===YA.PLAYING&&J&&!this._isResettingSrcObject&&(this._log.warn("user resume in ".concat(V?"fullscreen":"pip")),this.emit(fo.USER_RESUME_IN_PIP_OR_FULL_SCREEN)),S===YA.PAUSE&&(J&&(this._log.warn("user pause in ".concat(V?"fullscreen":"pip")),this.emit(fo.USER_PAUSE_IN_PIP_OR_FULL_SCREEN)),this.container&&!this.container.isConnected&&(this._log.warn("".concat(this.kind," player has been remove, element ID: ").concat(this.container.id)),LC(500).then(()=>{var gA;(gA=this.container)!=null&&gA.isConnected&&(this._pausedRetryCount=vp,this._log.info("view container ".concat(this.container.id," is in dom, reset pausedRetryCount")))})),this._pausedRetryCount>0&&!fi()&&!this.isPausedByUserCall&&!J&&(this._log.info("[".concat(vp-this._pausedRetryCount+1,"/").concat(vp,"] ").concat(this.kind," player auto resume when paused")),this.doResume(),this._pausedRetryCount--),eg&&!J&&(this._interval=Gr.run("timeout",()=>{this.element&&this._state==="PAUSED"&&!this.isPausedByUserCall&&this.doResume()},{delay:3e3})),this.stat.fps&&(this.stat.fps=0)),this.viewMirror&&this.element){let gA=this.element.style.transform;S===YA.ENTER_PICTURE_IN_PICTURE?this.element.style.transform=gA.replace("scaleX(-1)",""):S===YA.LEAVE_PICTURE_IN_PICTURE&&!gA.includes("scaleX")&&(this.element.style.transform="".concat(gA," scaleX(-1)"))}S===YA.RESIZE&&(this._preSize.height!==((o=this.element)==null?void 0:o.videoHeight)||this._preSize.width!==((a=this.element)==null?void 0:a.videoWidth))&&(this._log.info("video size changed to ".concat((c=this.element)==null?void 0:c.videoWidth,"x").concat((d=this.element)==null?void 0:d.videoHeight)),this._preSize.height=((C=this.element)==null?void 0:C.videoHeight)||0,this._preSize.width=((y=this.element)==null?void 0:y.videoWidth)||0,this.emit(fo.RESIZE,{newWidth:this._preSize.width,newHeight:this._preSize.height})),S===YA.LEAVE_PICTURE_IN_PICTURE&&(this._log.warn("exit pip"),this.isPaused&&!this.isPausedByUserCall&&(this._log.warn("resume after exit pip"),this.doResume()),this.resetSrcObjectToReplay(),this.emit(fo.LEAVE_PICTURE_IN_PICTURE)),S===YA.ENTER_PICTURE_IN_PICTURE&&this.emit(fo.ENTER_PICTURE_IN_PICTURE)}resetSrcObjectToReplay(){Ha&&sy&&this.isPlayCalled&&this.element&&this.track&&!this.isPausedByUserCall&&(this._log.warn("reset srcObject to replay for android chromium"),this._isResettingSrcObject=!0,this.element.srcObject=new MediaStream([this.track]),this.element.play().catch(e=>{this._log.warn("play failed after reset srcObject",e)}).finally(()=>{this._isResettingSrcObject=!1}))}setCanvas(e){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;var a,c;this.canvas!==e&&((a=this.canvas)==null||a.remove(),e?.setAttribute("style",this.styleAttribute),this.canvas=e,this.mode=e?o:0,this.mode===2&&this.setTrack(e.captureStream().getVideoTracks()[0]),e?((c=this.element)==null||c.remove(),this._appendToWrapper(e)):this.element&&this._appendToWrapper(this.element))}setAttr(e){let o=Object.assign({autoplay:"autoplay",playsinline:"playsinline",muted:!0},e);o.style=Object.assign({width:"100%",height:"100%"},o.style),super.setAttr(o)}get mirror(){return this.viewMirror}setRect(e,o){this.elementToRender&&(this.elementToRender.style.width="".concat(e,"px"),this.elementToRender.style.height="".concat(o,"px"))}setViewMirror(e){this.elementToRender&&(this.elementToRender.style.transform=e?"scaleX(-1)":""),this.viewMirror=e}setObjectFit(e){this.elementToRender&&(this.elementToRender.style.objectFit="".concat(e)),this.objectFit=e}setPoster(e){let o=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return new Promise(a=>{if(!this.element||(this._log.info("setPoster",e.slice(0,10)),e===""?this.element.removeAttribute("poster"):this.element.poster=e,!o||!Bg&&!er))return a();if(e==="")return this.removePosterImg(),a();if(this.posterImg)return a();let c=document.createElement("img");c.src=e;let d=window.getComputedStyle(this.element),C=d.objectFit||this.objectFit,y=1;if(this._useWrapper){let S=parseInt(d.zIndex,10);isNaN(S)||(y=S+1)}c.style.cssText=this._useWrapper?"grid-area:1/1;z-index:".concat(y,";width:100%;height:100%;object-fit:").concat(C,";"):"position:absolute;top:0;left:0;width:100%;height:100%;object-fit:".concat(C,";"),c.onload=()=>KA(this,null,function*(){try{c.decode&&(yield c.decode()),this.container&&!this._useWrapper&&window.getComputedStyle(this.container).position==="static"&&(this._originContainerPosition=this.container.style.position,this.container.style.position="relative"),this.posterImg=c;let S=this._useWrapper?this._wrapper:this.container;S?.appendChild(c),cM()&&Zd<=17&&this.elementToRender&&(this.elementToRender.style.visibility="hidden")}catch(S){this._log.warn("decode poster image error",S)}return a()}),c.onerror=()=>(this._log.warn("load poster image error"),a())})}removePosterImg(){this.posterImg&&(cM()&&Zd<=17&&this.elementToRender&&(this.elementToRender.style.visibility=""),this.posterImg.remove(),URL.revokeObjectURL(this.posterImg.src),!this._useWrapper&&this.container&&!Je(this._originContainerPosition)&&this.container.style.position==="relative"&&(this.container.style.position=this._originContainerPosition),delete this.posterImg)}get hasPoster(){var e;return!!this.posterImg||!((e=this.element)==null||!e.getAttribute("poster"))}pause(){let e=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];return KA(this,null,function*(){NI(G9.prototype,this,"pause").call(this),!this.isPictureInPicture()&&!this.hasPoster&&(sy||e&&(er||Bg))&&(yield this.setPoster(this.getVideoFrame(),!0))})}resume(){let e=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return super.resume(e).then(()=>{var o;(this.posterImg||(o=this.element)!=null&&o.poster)&&this.setPoster("",!0)})}doResume(){let e=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return this.isPaused&&e&&this.element&&this.track&&sy&&this.track.kind==="video"&&(this.element.srcObject=new MediaStream([this.track])),super.doResume()}stop(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;var o;this.isPictureInPicture()&&this.exitPictureInPicture().catch(a=>{}),this.isFullscreen()&&this.exitFullscreen().catch(a=>{}),this.element&&(this.element.removeEventListener(YA.FULLSCREEN_CHANGE,this.handleFullscreenChange),this.element.removeEventListener("webkitbeginfullscreen",this.handleFullscreenChange),this.element.removeEventListener("webkitendfullscreen",this.handleFullscreenChange),this.element.removeEventListener("volumechange",this.handleVolumeChange)),this._isFirstFrameRenderEmitted=!1,super.stop(e),(o=this.canvas)==null||o.remove(),this.removePosterImg(),this._useWrapper&&this._cleanupWrapper()}_cleanupWrapper(){this._wrapper&&this._wrapper.children.length===0&&this._wrapper.remove(),this._wrapper=null}play(e){if(Je(e?.isLiveStream)||this.setLiveMode(e.isLiveStream),this.element){if(this.elementToRender&&this.container)if(this._useWrapper){let o=this._getOrCreateWrapper();this.elementToRender.parentElement!==o&&o.insertBefore(this.elementToRender,o.firstChild)}else this.elementToRender.parentElement!==this.container&&this.container.append(this.elementToRender)}else this.initializeElement();return this.mode===2?Promise.resolve():super.play()}get elementToRender(){return this.canvas||this.element}setTrack(e){e!==this.track&&(this.unbindTrackEvents(),this.track=e,this.emit(fo.MEDIA_TRACK_CHANGED,e),e!==null&&(this.bindTrackEvents(),this.element&&this.mode!==2&&(this.element.srcObject=new MediaStream([e]),this.element.remove()),this._appendToWrapper()))}getVideoFrame(){if(this.canvas)return this.canvas.toDataURL("image/png");if(!this.element)return"";let e=document.createElement("canvas");return e.width=this.element.videoWidth,e.height=this.element.videoHeight,e.getContext("2d").drawImage(this.element,0,0),e.toDataURL("image/png")}getElement(){return this.element}calculateStat(){try{if(jp()&&this.element&&this._calculateTimeout<0){let e=0,o=null,a=(c,d)=>{this.stat.width=d.width,this.stat.height=d.height,o&&(this.stat.fps=Math.round((d.presentedFrames-o.presentedFrames)/(c-e)*1e3)),e=c,o=d,this._calculateTimeout=-1,this.element&&(this._calculateTimeout=setTimeout(()=>{var C;return(C=this.element)==null?void 0:C.requestVideoFrameCallback(a)},2e3))};this.element.requestVideoFrameCallback(a)}}catch(e){this._log.warn("init stat failed",e)}}enterFullscreen(){return KA(this,null,function*(){let e=this.elementToRender;if(!e)throw this._log.warn("no element to render, cannot enter fullscreen"),new Error("No element available for fullscreen");if(eg&&this.isPictureInPicture()){this._log.info("exit pip before entering fullscreen");try{yield this.exitPictureInPicture()}catch(o){this._log.warn("exit pip failed before fullscreen:",o)}}try{if(e.requestFullscreen)yield e.requestFullscreen();else if(e.webkitRequestFullscreen)yield e.webkitRequestFullscreen();else if(e.webkitEnterFullscreen)yield e.webkitEnterFullscreen();else if(e.mozRequestFullScreen)yield e.mozRequestFullScreen();else{if(!e.msRequestFullscreen)throw new Error("Fullscreen API not supported");yield e.msRequestFullscreen()}this._log.info("entered fullscreen mode")}catch(o){throw this._log.error("failed to enter fullscreen:",o),o}})}exitFullscreen(){return KA(this,null,function*(){try{if(!this.isFullscreen())return;if(document.exitFullscreen)yield document.exitFullscreen();else if(document.webkitExitFullscreen)yield document.webkitExitFullscreen();else if(document.mozCancelFullScreen)yield document.mozCancelFullScreen();else{if(!document.msExitFullscreen)throw new Error("Exit fullscreen API not supported");yield document.msExitFullscreen()}this._log.info("exited fullscreen mode")}catch(e){throw this._log.error("failed to exit fullscreen:",e),e}})}isFullscreen(){let e=this.elementToRender;return!!e&&(this.element&&this.element.webkitDisplayingFullscreen?!this.isPictureInPicture():(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)===e)}toggleFullscreen(){return KA(this,null,function*(){this.isFullscreen()?yield this.exitFullscreen():yield this.enterFullscreen()})}enterPictureInPicture(){return KA(this,null,function*(){this.enterPIPPromise=this._enterPictureInPicture();try{return yield this.enterPIPPromise}finally{delete this.enterPIPPromise}})}_enterPictureInPicture(){return KA(this,null,function*(){try{if(!this.element)throw new Error("No video element available for pip");if(this.canvas&&this.mode!==1)throw new Error("pip is not supported for canvas-only mode");let{element:e}=this;if(e.requestPictureInPicture){this._log.info("requestPictureInPicture");let o=yield e.requestPictureInPicture();return this.pipWindow=o,this._log.info("entered pip mode"),this.elementToRender===this.canvas&&(this.canvas.remove(),this._appendToWrapper(this.element)),o}if(e.webkitSetPresentationMode)return this._log.info("webkitSetPresentationMode"),yield e.webkitSetPresentationMode("picture-in-picture"),this._log.info("entered pip mode (webkit)"),{};throw new Error("pip API not supported")}catch(e){throw this._log.error("failed to enter pip:",e.name,e.message),e}})}exitPictureInPicture(){return KA(this,null,function*(){var e;try{if(!this.isPictureInPicture())return;if(delete this.pipWindow,document.pictureInPictureElement&&document.exitPictureInPicture)yield document.exitPictureInPicture(),this.elementToRender===this.canvas&&((e=this.element)==null||e.remove(),this._pausedRetryCount=vp,this._appendToWrapper(this.canvas)),this._log.info("exited pip mode");else{if(!this.element||!this.element.webkitSetPresentationMode)throw new Error("Exit pip API not supported or not in PiP mode");yield this.element.webkitSetPresentationMode("inline"),this._log.info("exited pip mode (webkit)")}}catch(o){throw this._log.error("failed to exit pip:",o),o}})}isPictureInPicture(){if(!this.element)return!1;let{element:e}=this;return document.pictureInPictureElement?document.pictureInPictureElement===e:!!e.webkitPresentationMode&&e.webkitPresentationMode==="picture-in-picture"}togglePictureInPicture(){return KA(this,null,function*(){this.isPictureInPicture()?yield this.exitPictureInPicture():yield this.enterPictureInPicture()})}};function Vg(A,e){return KA(this,null,function*(){if(!A.audioWorklet)return Promise.reject("audioWorklet is not supported");try{yield A.audioWorklet.addModule(e),QA.info("worklet addModule success")}catch(o){throw QA.info("worklet addModule catch error. ".concat(o.message)),o}})}typeof AudioContext<"u"?di=AudioContext:typeof webkitAudioContext<"u"?di=webkitAudioContext:typeof mozAudioContext<"u"&&(di=mozAudioContext);var Ln,Cu=1500,$d=-1,Zp=0,ad=-1,UI=!1,Y2=0,a_=-1,zk=-1;(function A(){try{if(Ln)return;(Ln=new di({sampleRate:48e3})).onstatechange=()=>{QA.info("context state: ".concat(Ln.state).concat(Ln.state!=="running"?" visibilityState: ".concat(document.visibilityState):"")),g_()},clearTimeout($d)}catch(e){QA.error("initAudioContext failed: ".concat(e," typeof AudioContextClass: ").concat(typeof di)),$d=setTimeout(A,1e3)}})();var g_=()=>{Ln.state==="suspended"?(Zp=ko(),ad===-1&&(ad=setTimeout(()=>{Ln.state==="suspended"&&(UI=!0,F.emit("155",{isSuspended:!0}))},Cu)),Zk(),document.addEventListener("click",g_)):Ln.state==="interrupted"?Zk():(Zp&&(ii.addNumber({key:507800,value:ko()-Zp,split:[0,500,1e3,1500,2e3,3e3,4e3,5e3,1e4,3e4],max:6e4}),Zp=0),ad!==-1&&(clearTimeout(ad),ad=-1,UI&&(UI=!1,F.emit("155",{isSuspended:!1}))),document.removeEventListener("visibilitychange",g_),document.removeEventListener("click",g_))},_K=0,TK=-1;function Zk(){return new Promise((A,e)=>{if(Ln.state==="running")return A();Date.now()-_K<1e3?(clearTimeout(TK),TK=setTimeout(()=>{_K=Date.now(),Ln.resume().then(A,e)},1e3)):(clearTimeout(TK),_K=Date.now(),Ln.resume().then(A,e))}).catch(A=>{QA.warn("context resume failed: ".concat(A)),document.addEventListener("visibilitychange",g_)})}document.addEventListener("click",g_);var FI=A=>Ln,OI=class{constructor(A){this.name=A,Y(this,"node"),Y(this,"node2"),Y(this,"pre",new Set),Y(this,"next",new Set),Y(this,"context"),Y(this,"connectedNodes",new Set),Y(this,"nextInputChannelMap",new Map),Y(this,"_channelCount",1)}get channelCount(){return this._channelCount}set channelCount(A){this._channelCount=A,this.setChannelCount(this.node,A),this.setChannelCount(this.node2,A),this.next.forEach(e=>e.channelCount=A)}setChannelCount(A,e){!A||A instanceof ScriptProcessorNode||(A.channelCountMode="explicit",A.channelCount=e||this.channelCount||1)}setContext(A){this.context=A,this.node&&A.addMixWeight()}removeContext(){var A;this.node&&((A=this.context)==null||A.reduceMixWeight()),delete this.context}replaceNode(A){var e;if(A!==this.node)try{this.node?this._disconnect():(e=this.context)==null||e.addMixWeight(),this.node=A,this.setChannelCount(this.node),this.preNodeReconnect(),this.reconnect()}catch(o){QA.error(o)}}setNode(A,e){var o;if(!this.node)try{(o=this.context)==null||o.addMixWeight(),this.node=A,this.setChannelCount(this.node),e&&(this.node2=e,this.setChannelCount(this.node2)),this.preNodeReconnect(),this.reconnect(),ii.addSuccessEvent({key:502701})}catch(a){QA.error(a),ii.addFailedEvent({key:502701,error:a})}}deleteNode(){var A;if(this.node)try{this._disconnect(),delete this.node,delete this.node2,(A=this.context)==null||A.reduceMixWeight(),this.preNodeReconnect(),ii.addSuccessEvent({key:502702})}catch(e){QA.error(e),ii.addFailedEvent({key:502702,error:e})}}preNodeReconnect(){this.pre.forEach(A=>{A.node?A.reconnect():A.preNodeReconnect()})}connectNext(A){this.next.forEach(e=>{let o=this.nextInputChannelMap.get(e);A._connect(e.node,o)||e.connectNext(A)})}_connect(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return!(!this.node||!A)&&((this.node2||this.node).connect(A,0,e),this.connectedNodes.add(A),!0)}_disconnect(){this.connectedNodes.forEach(A=>{var e;return(e=this.node2||this.node)==null?void 0:e.disconnect(A)}),this.connectedNodes.clear()}reconnect(){this._disconnect(),this.connectNext(this)}pipeTo(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return this.next.add(A),A.pre.add(this),this.nextInputChannelMap.set(A,e),A}},BeA=class extends OI{constructor(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:256;super(),this.fftSize=A,Y(this,"dataArray",new Uint8Array(0))}setNode(A){A.fftSize=this.fftSize,this.dataArray=new Uint8Array(A.frequencyBinCount),super.setNode(A)}getByteTimeDomainData(){var A;return(A=this.node)==null||A.getByteTimeDomainData(this.dataArray),this.dataArray}get level(){var A;return(A=this.node)==null||A.getByteTimeDomainData(this.dataArray),Math.max(...this.dataArray)/128-1}get timeDomainPathData(){let A=this.getByteTimeDomainData(),e=0,o=0,a="M".concat(e,",").concat(o);for(let c=0;c0&&arguments[0]!==void 0?arguments[0]:1;this.mixWeight+=A,this.mixWeight-1==A+1>>1&&this.mixOnChange()}reduceMixWeight(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;this.addMixWeight(-A)}close(){this.inputs.forEach(A=>A.remove())}get mixTrack(){return this.destination.stream.getAudioTracks()[0]}},X4=new WeakMap;function V2(A){try{let e=X4.get(A);if(e)return e;let o=FI();if(A instanceof HTMLAudioElement)e=o.createMediaElementSource(A);else{if(!(A instanceof MediaStreamTrack))return A;e=o.createMediaStreamSource(new MediaStream([A]))}return X4.set(A,e),e}catch(e){if(!(er&&e instanceof Error&&e.name==="NotSupportedError"))throw e;QA.warn(e)}}var J2=class sm{constructor(e){Y(this,"_volume",0),Y(this,"_volumeDb",0),Y(this,"_log"),Y(this,"_scriptProcessorNode",null),Y(this,"_audioWorkletNode",null),Y(this,"_interval",200),Y(this,"ready",this.preload());let{log:o}=e;this._log=o,F.on(nA.AUDIO_LEVEL_INTERVAL,this.handleAudioLevelInterval,this)}static get isRunning(){return Date.now()-sm.lastMessageTime<2e3}get node(){return this._audioWorkletNode||this._scriptProcessorNode}preload(){if(!sm.workletReady){let e='class VolumeMeterWorklet extends AudioWorkletProcessor{constructor(){super(),this.volume=0,this.intervalTime=200,this.tick=200,this.isStop=!1,this.cache=[],this.sentFirstInfo1=!1,this.unmute=!1,this.port.onmessage=t=>{var e=t.data;switch(e.name){case"chunk":this.cache.push(...e.data),this.sentFirstInfo1||(this.port.postMessage({cl:e.data.length}),this.sentFirstInfo1=!0);break;case"setIntervalTime":this.intervalTime=e.intervalTime;break;case"unmute":this.unmute=!0;break;case"stop":this.isStop=!0}}}process(t,s){t=t[0],s=s[0];if(t||s){if(this.isStop)return!1;var i=s&&s[0]?s[0].length:0,h=this.cache.length,a=(it+e*e,0)/a.length;this.volume=e,this.tick-=a.length,this.tick<0&&(this.tick+=this.intervalTime/1e3*sampleRate,this.port.postMessage({volume:this.volume,volumeDb:Math.max(10*Math.log10(s)+100,0)/100,cacheLen:h,outputLen:i}))}}return!0}}registerProcessor("volume-meter",VolumeMeterWorklet);';sm.workletReady=Vg(sm.audioContext,URL.createObjectURL(new Blob([e],{type:"application/javascript"})))}return sm.workletReady.then(()=>this.initAudioWorklet()).catch(e=>(this._log.error("volumeMeter preload error: ".concat(e)),this.initScriptProcessor()))}initAudioWorklet(){if(!this._audioWorkletNode)try{this._audioWorkletNode=new AudioWorkletNode(sm.audioContext,"volume-meter");let e=!1;this._audioWorkletNode.port.onmessage=o=>{sm.lastMessageTime=Date.now(),this._volume=o.data.volume||0,this._volumeDb=o.data.volumeDb||0,!e&&o.data.cacheLen&&o.data.outputLen&&(this._log.warn("worklet play success"),e=!0)},this.handleAudioLevelInterval({interval:this._interval})}catch(e){this._log.error("volumeMeter init audio worklet error: ".concat(e)),sn.logFailedEvent({userId:this._log.userId,eventType:Ja.LOAD_WORKLET,error:e}),this.initScriptProcessor()}}initScriptProcessor(){if(!this._scriptProcessorNode)try{this._scriptProcessorNode=FI().createScriptProcessor(2048,1,1),this._scriptProcessorNode.onaudioprocess=e=>{sm.lastMessageTime=Date.now();let o=e.inputBuffer.getChannelData(0),a=0;for(let c=0;c>2);A.copyTo(o,{planeIndex:0}),this.node.port.postMessage({name:"chunk",data:o},[o.buffer]),A.close()}}},H2=$4,peA=gc(Kl(),1),e5=A=>e=>e.deviceId===A,NK=class{constructor(A,e){Y(this,"kind"),Y(this,"type"),Y(this,"devices",[]),this.kind=A,this.type=e}update(A,e){let o=A.filter(a=>a.kind==="".concat(this.kind).concat(this.type.toLocaleLowerCase()));this.devices.length===1&&Xk(this.devices[0])||e&&(o.forEach(a=>{if(a.deviceId&&!this.devices.find(e5(a.deviceId))){let c="".concat(this.kind).concat(this.type,"Added");QA.warn("".concat(c,": ").concat(JSON.stringify(a))),e.emit(c,a)}}),this.devices.forEach(a=>{if(a.deviceId&&!o.find(e5(a.deviceId))){let c="".concat(this.kind).concat(this.type,"Removed");QA.warn("".concat(c,": ").concat(JSON.stringify(a))),e.emit(c,a)}})),this.devices=o}hasDevice(A){return!!this.devices.find(e=>e.deviceId===A)}},meA=class extends peA.EventEmitter{constructor(){super(),Y(this,"audioInputs",new NK(YA.AUDIO,"Input")),Y(this,"videoInputs",new NK(YA.VIDEO,"Input")),Y(this,"audioOutputs",new NK(YA.AUDIO,"Output")),this.init(),navigator.mediaDevices&&(navigator.mediaDevices.addEventListener&&navigator.mediaDevices.addEventListener("devicechange",()=>this.update()),"ondevicechange"in navigator.mediaDevices||Gr.run("interval",()=>{this.update()},{delay:1e4}))}init(){q2().then(A=>{this.audioInputs.update(A),this.videoInputs.update(A),this.audioOutputs.update(A)})}update(){return KA(this,arguments,function(){var A=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return function*(){let o=yield q2(e);return A.audioInputs.update(o,A),A.videoInputs.update(o,A),A.audioOutputs.update(o,A),A}()})}hasBlueTooth(){var A;if(1e3*((A=FI())==null?void 0:A.outputLatency)>150)return!0;let e=["bluetooth","air","wireless","bt","tws","buds","headset","headphone"];return this.audioOutputs.devices.some(o=>e.some(a=>o.label.toLowerCase().includes(a)))||this.audioInputs.devices.some(o=>e.some(a=>o.label.toLowerCase().includes(a)))}},Pc=o0||i0?null:new meA;function Xk(A){return A.deviceId===A.groupId&&A.groupId===""}function q2(){return KA(this,arguments,function(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return function*(){if(du()||!_k())return[];let e=yield navigator.mediaDevices.enumerateDevices();if(A!==0){let o={audio:!1,video:!1};if(e.forEach(a=>{Xk(a)&&(a.kind===YA.AUDIO_INPUT?o.audio=!0:a.kind===YA.VIDEO_INPUT&&(o.video=!0))}),A===2&&(o.audio=!1),A===1&&(o.video=!1),o.audio||o.video){let a;try{a=yield navigator.mediaDevices.getUserMedia(o),o.audio&&Zk()}catch(c){QA.debug("capture before getDevices failed: ",c)}e=yield navigator.mediaDevices.enumerateDevices(),a?.getTracks().forEach(c=>c.stop())}}return e.map((o,a)=>{let c={kind:o.kind,deviceId:o.deviceId,groupId:o.groupId,label:o.label||"".concat(o.kind,"_").concat(a)};return o.deviceId.length>0&&GK.add("".concat(o.deviceId,"_").concat(o.kind)),o.getCapabilities&&(c.getCapabilities=()=>o.getCapabilities()),c})}()})}function Xp(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return Pc.update(A?1:0).then(e=>e.audioInputs.devices)}function $p(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return Pc.update(A?2:0).then(e=>e.videoInputs.devices)}var t5=!1;function YM(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return KA(this,null,function*(){return(eg||Bg)&&(A=!1),Pc.update(A?1:0).then(e=>e.audioOutputs.devices)})}var GK=new Set;function i5(A,e){return KA(this,null,function*(){let o=(yield Xp()).find(a=>a.deviceId===ZS);return!e&&o?.groupId===A||o?.groupId===A&&o.label===e})}var K2,feA=class extends z4{constructor(A){super(),this.log=A,Y(this,"volumeMeter"),Y(this,"volumeMeterAfter3A"),Y(this,"volumeDestination"),Y(this,"analyser",new BeA),this.volumeMeter=new A5({log:this.log}),this.volumeMeterAfter3A=new A5({log:this.log}),this.volumeDestination=new OI,this.volumeMeter.pipeTo(this.volumeDestination)}destroy(){this.gain.deleteNode(),this.volumeMeter.deleteNode(),this.analyser.deleteNode(),this.source.deleteNode(),this.destination.deleteNode(),this.volumeDestination.deleteNode()}},bK=class b9 extends xC{constructor(e){super(e,YA.AUDIO),Y(this,"_outputDeviceId"),Y(this,"_floatVolume",1),Y(this,"_destination"),Y(this,"pipeline"),Y(this,"volumeMeterMode","worklet"),Y(this,"enableVolumeControlInIOS"),this.enableVolumeControlInIOS=e.enableVolumeControlInIOS,this.mode=0,e.url&&(this.url=e.url),this.pipeline=new feA(this._log)}setTrack(e){}get duration(){var e;return Math.floor(1e3*(((e=this.element)==null?void 0:e.duration)||0))}get currentTime(){var e;return Math.floor(1e3*(((e=this.element)==null?void 0:e.currentTime)||0))}set currentTime(e){this.element&&(this.element.currentTime=e/1e3)}getMediaStream(){return this.pipeline.stream||(this.track?new MediaStream([this.track]):null)}initializeElement(e){if((kI==="15.2"||kI==="15.3"||kI==="15.4")&&this.muted)return void this._log.info("audioElement is muted.");this._log.info("audio player initializeElement");let o=K2||new Audio;o.setAttribute("autoplay","autoplay"),o.srcObject=this.getMediaStream(),o.muted=this.muted,this.url&&(o.crossOrigin="anonymous",o.src=this.url),this.element=o,this.setVolume(bn(e)?e/100:this._floatVolume),o===K2&&(K2=void 0),this.options.enableTimeupdateEvent&&(this.element.ontimeupdate=()=>this.emit(fo.TIME_UPDATE,this.currentTime)),this.bindElementEvents()}play(e){return KA(this,null,function*(){if(this.track||this.url){try{!this.pipeline.source.node&&this.track&&this.pipeline.replaceSource(this.track),this.element||this.initializeElement(e?.volume),this._outputDeviceId&&(yield this.setSinkId(this._outputDeviceId)),this.volumeMeterMode==="worklet"?(this.pipeline.volumeMeter.init(),this.pipeline.volumeMeterAfter3A.init()):this.volumeMeterMode==="analyser"&&this.pipeline.analyser.setNode(FI().createAnalyser()),function(){KA(this,null,function*(){try{t5||(t5=!0,QA.info("speakers:".concat((yield YM()).map(o=>" ".concat(o.deviceId.slice(0,8),": ").concat(o.label)))))}catch{}})}()}catch(o){throw this._log.warn("audio play error: ".concat(o)),ny(kI,"18.7",!0)&&this.bindAutoPlayEvent(),o}return NI(b9.prototype,this,"play").call(this)}})}stop(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;this.pipeline.destroy(),super.stop(e)}setVolume(e){this._floatVolume=e,this.element&&(this.element.volume=e)}setSinkId(e){return KA(this,null,function*(){var o,a;this._outputDeviceId!==e&&(this._outputDeviceId=e),this.element&&this.element.sinkId!==e&&(yield(a=(o=this.element).setSinkId)==null?void 0:a.call(o,e))})}get useDestination(){return!!this.pipeline.stream}setLoop(e){this.element&&(this.element.loop=e)}getAudioLevel(){return this.pipeline.volumeMeter.getCalculatedVolume()}getInternalAudioLevel(){return this.pipeline.volumeMeter.getInternalAudioLevel()}getInternalAudioLevelAfter3A(){return this.pipeline.volumeMeterAfter3A.getInternalAudioLevel()}},yeA=class extends bK{setTrack(A){this.track!==A&&(this.unbindTrackEvents(),this.track=A,this.emit(fo.MEDIA_TRACK_CHANGED,A),A&&(this.bindTrackEvents(),this.element&&(this.element.srcObject=new MediaStream([A]))))}},o5=class extends bK{constructor(A){super(A),Y(this,"_sourceElement"),Y(this,"_output",new OI),this.pipeline.source.pipeTo(this.pipeline.gain),this.pipeline.gain.pipeTo(this.pipeline.volumeMeter).pipeTo(this._output),this.pipeline.gain.pipeTo(this.pipeline.destination)}setOutput(){this.mode=1,this._output.setNode(FI().destination)}write(A){this.pipeline.volumeMeter.write(A)}setTrack(A){var e,o,a;((o=(e=this.element)==null?void 0:e.error)==null?void 0:o.code)!==MediaError.MEDIA_ERR_DECODE&&this.track!==A&&(this.unbindTrackEvents(),this.track=A,this.emit(fo.MEDIA_TRACK_CHANGED,A),A?(this.bindTrackEvents(),this._sourceElement?this._sourceElement.srcObject=new MediaStream([A]):!this.useDestination&&this.element&&(this.element.srcObject=new MediaStream([A])),this.pipeline.source.channelCount=((a=A.getSettings())==null?void 0:a.channelCount)||1,this.pipeline.replaceSource(A)):this.pipeline.source.deleteNode())}setVolume(A){var e;let o=A<=1&&!cM();if(this._floatVolume!==A||!(o&&((e=this.element)==null?void 0:e.volume)===A||!o&&this.pipeline.volume===A))if(this._floatVolume=A,this.useDestination)this.pipeline.setVolume(A),this._log.info("set pipeline volume: ".concat(A));else if(o)this.element?(this._log.info("set element volume: ".concat(A)),this.element.volume=A):this._log.info("set element volume: no element");else{if(cM()){if(!this.enableVolumeControlInIOS)return;(function(){if(!eg||zk!==-1)return;let a=()=>{ko()-Y2<500||(Ln&&Ln.state==="running"&&Ln.currentTime===a_&&(QA.warn("context is fake running, auto resume"),Ln.suspend().catch(c=>{QA.warn("context suspend failed: ".concat(c))})),a_=Ln.currentTime,Y2=ko())};zk=setInterval(()=>{a()},2e3),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&a()})})()}if(er&&!this.pipeline.source.node)return void this._log.warn("set pipeline volume failed: no source node");this._log.info("start set pipeline volume: ".concat(A)),this.pipeline.setVolume(A),this.element&&!this._sourceElement&&(this._destination||(this._destination=FI().createMediaStreamDestination()),this.pipeline.destination.setNode(this._destination),kn(this.element),this._sourceElement=this.element,this._sourceElement.muted=!0,this.element=null,this.play().catch(a=>{this.emit(fo.AUTOPLAY_FAILED,a)}))}}stop(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;this.pipeline.destroy();let e=this._sourceElement||this.element;e&&Fp&&(K2=e),this._sourceElement&&(this._sourceElement.srcObject=null,delete this._sourceElement),super.stop(A)}},kK=class extends Zs{constructor(A){let{userId:e,sdkAppId:o,mediaType:a,room:c,PlayerClass:d=a===1?o5:vo}=A;var C;super(),Y(this,"id",PA()),Y(this,"userId",""),Y(this,"isRemote"),Y(this,"mediaType"),Y(this,"room"),Y(this,"user"),Y(this,"_log"),Y(this,"_inputTrack"),Y(this,"_outputTrack"),Y(this,"isPlayCalled"),Y(this,"container",null),Y(this,"player"),Y(this,"subVideoPlayerMap"),Y(this,"muted",!1),Y(this,"abortCtrl"),Y(this,"objectFit","cover"),Y(this,"mirror"),Y(this,"rotation"),Y(this,"isScreen",!1),Y(this,"manager"),Y(this,"trackSettings"),Y(this,"isFirstVideoFrameEmitted",!1),this.userId=e||"",this.mediaType=a,this._log=QA.createLogger({parent:c?.getLogger(),id:"".concat(this.kind[0],"t"),userId:(C=c||this.room)==null?void 0:C.userId,remoteUserId:this instanceof sL?void 0:this.userId,sdkAppId:o,type:this.mediaType===2?"auxiliary":"main",isLocal:this instanceof sL}),this.player=new d({id:this.userId||this.id,track:null,muted:!1,container:null,log:this._log,enableVolumeControlInIOS:c?.enableVolumeControlInIOS}),this.player.on(fo.PLAYER_STATE_CHANGED,y=>{if(F.emit(nA.PLAYER_STATE_CHANGED,mi({track:this},y)),this.emit("player-state-changed",y),y.state==="PLAYING"&&this.room){let S=!0;for(let{remoteAudioTrack:k,remoteVideoTrack:V,remoteAuxiliaryTrack:J}of[...this.room.remotePublishedUserMap.values()])if(k.isAvailable&&!k.player.isPlaying||V.isAvailable&&!V.player.isPlaying||J.isAvailable&&!J.player.isPlaying){S=!1;break}S&&fi()&&Oc&&Oc.deleteDialog()}}),this.kind===YA.VIDEO&&(this.player.on(fo.LOADED_DATA,()=>{this.emitFirstVideoFrameEvent(fo.LOADED_DATA),F.emit(nA.VIDEO_LOADED_DATA,{track:this})}),this.player.on(fo.LOADED_META_DATA,()=>{this.emitFirstVideoFrameEvent(fo.LOADED_META_DATA)}),this.player.on(fo.MEDIA_TRACK_CHANGED,y=>{var S;(S=this.subVideoPlayerMap)==null||S.forEach(k=>k.setTrack(y))}),this.player.on(fo.RESIZE,y=>{this.emitFirstVideoFrameEvent(fo.RESIZE),this.emit("video-size-changed",mi({userId:this.userId,streamType:this.mediaType===2?"auxiliary":"main"},y))}),this.player.on(fo.FIRST_FRAME_RENDER,y=>{this.emit("first-frame-render",Qo(mi({},y),{streamType:this.streamType,userId:this.isRemote?this.userId:""}))})),this.onTrackMuted=this.onTrackMuted.bind(this),this.onTrackUnmuted=this.onTrackUnmuted.bind(this),this.onTrackEnded=this.onTrackEnded.bind(this),this.onPlayerError&&this.player.on(fo.ERROR,this.onPlayerError.bind(this)),this.player.on(fo.AUTOPLAY_FAILED,this.handleAutoPlayFailed,this)}get log(){return this._log||QA}get kind(){return this.mediaType===1?YA.AUDIO:YA.VIDEO}get isAudio(){return this.kind===YA.AUDIO}get strMediaType(){return this.mediaType===4?YA.VIDEO:this.mediaType===2?YA.SCREEN:YA.AUDIO}get streamType(){return 2&this.mediaType?"auxiliary":"main"}get isMediaTrackActive(){return!!this.mediaTrack&&!this.mediaTrack.muted&&this.mediaTrack.readyState==="live"&&this.mediaTrack.enabled}play(A,e){return KA(this,null,function*(){let o=wa(A)?A[0]:A;if(this.isPlayCalled)return this.log.info("play update options: ".concat(JSON.stringify(e))),e&&!Je(e.muted)&&this.setPlayerMute(e.muted),e&&!Je(e.objectFit)&&(this.objectFit=e.objectFit),void(this.player instanceof vo&&(this.player.setObjectFit(this.objectFit),this.container!==o&&o&&(wa(A)&&A.length>=1&&this.container&&A.includes(this.container)&&this.container.contains(this.player.elementToRender)?(A.splice(A.indexOf(this.container),1),A.unshift(this.container)):(this.container=o,this.player.setContainer(o))),wa(A)&&A.length>=1&&(yield this.playSubContainer(A.slice(1),e))));if(e&&!Je(e.muted)?this.setPlayerMute(e.muted):(!this.isRemote||this.kind===YA.VIDEO)&&this.setPlayerMute(!0),e&&!Je(e.objectFit)&&(this.objectFit=e.objectFit),this.player instanceof vo&&(Je(e?.isLiveStream)||this.player.setLiveMode(e.isLiveStream),this.player.setObjectFit(this.objectFit),e&&!Je(e.poster)&&this.player.setPoster(e.poster)),this.isPlayCalled=!0,o&&(this.container=o,this.player instanceof vo&&this.player.setContainer(o)),F.emit(nA.PLAY_TRACK_START,{track:this}),this._outputTrack){this._log.info("play with options: ".concat(JSON.stringify(e)));try{this.player.setTrack(this.playerMediaTrack),yield this.player.play(e),wa(A)&&A.length>1&&(yield this.playSubContainer(A.slice(1),e))}catch(a){throw this.handleAutoPlayFailed(a),a}}else this.log.info("play has not mediaTrack, abort")})}setMirror(A,e){if(this.isScreen||this.kind!==YA.VIDEO||Je(A)||A===this.mirror)return;this.mirror=A;let o=this.player;e&&(o=e);let a=this.manager;if(Nr(this.mirror))return o.setViewMirror(this.mirror),void(!this.isRemote&&a&&(a.mirror=!1));switch(this.mirror){case"view":a&&(a.mirror=!1),o.setViewMirror(!0);break;case"publish":a&&(a.mirror=!0),o.setViewMirror(!0);break;case"both":a&&(a.mirror=!0),o.setViewMirror(!1)}}playSubContainer(A,e){return KA(this,null,function*(){if(!this._outputTrack||this.kind===YA.AUDIO)return;this.subVideoPlayerMap||(this.subVideoPlayerMap=new Map),this.subVideoPlayerMap.forEach((a,c)=>{var d;A.find(C=>c===C)||(a.stop(),(d=this.subVideoPlayerMap)==null||d.delete(c))});for(let[a,c]of A.entries()){let d=this.subVideoPlayerMap.get(c);d?e&&(Je(e.objectFit)||d.setObjectFit(e.objectFit)):this.subVideoPlayerMap.set(c,new vo({id:this.userId||this.id,track:this.playerMediaTrack,container:c,muted:this.player.muted,objectFit:this.objectFit,log:this.log.createChild({id:"vp-sub".concat(a+1)})}))}let o=[...this.subVideoPlayerMap.values()];for(let a of o)a.setViewMirror(this.player.mirror),yield a.play()})}setAudioOutput(A){return this.player.setSinkId(A)}setAudioVolume(A){this.player.setVolume(A)}getAudioLevel(){return this.player.getAudioLevel()||0}getInternalAudioLevel(){var A;return((A=this.player)==null?void 0:A.getInternalAudioLevel())||0}stop(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.isPlayCalled&&(this.isPlayCalled=!1,this.isFirstVideoFrameEmitted=!1,this.player&&(this.log.info("stop ".concat(this.kind," player")),this.player.stop(Xb(this)&&!A?this.jitterBufferDelay:0)),this.subVideoPlayerMap&&this.subVideoPlayerMap.size>0&&this.subVideoPlayerMap.forEach(e=>{e.stop()}),this.container=null)}resume(){return KA(this,null,function*(){var A;this.isPlayCalled&&(yield(A=this.player)==null?void 0:A.resume())})}close(){this._toInitState(),this.log.info("close"),this.isPlayCalled&&this.stop(!0)}_toInitState(){}setMute(A){this.muted=A,this._inputTrack&&(this._inputTrack.enabled=!A),this._outputTrack&&(this._outputTrack.enabled=!A),this.emit(A?"mute":"unmute",this),F.emit(A?nA.TRACK_MUTED:nA.TRACK_UNMUTED,{track:this})}setPlayerMute(A){this.player.setMuted(A)}get mediaTrack(){return this._inputTrack||null}get outMediaTrack(){return this._outputTrack||null}get playerMediaTrack(){return this.outMediaTrack}installTrackEvent(A){rd(A,A).add(YA.MUTE,this.onTrackMuted).add(YA.UNMUTE,this.onTrackUnmuted).add(YA.ENDED,this.onTrackEnded),A.muted&&this.onTrackMuted(),A.readyState===YA.ENDED&&this.onTrackEnded()}uninstallTrackEvent(A){kn(A)}setInputMediaStreamTrack(A){var e;let o=this._inputTrack;if(A!==o)return this._inputTrack=A,this.trackSettings=(e=A.getSettings)==null?void 0:e.call(A),A.enabled=!this.muted,o&&this.uninstallTrackEvent(o),this.installTrackEvent(A),this.emit("input-media-track-changed",A||null,o||null),this.manager?this.manager.changeInput(this):this.setOutputMediaStreamTrack(A)}setOutputMediaStreamTrack(A){var e;let o=this._outputTrack;this instanceof dQ&&_p(o)||A!==o&&(this.isRemote?this.log.debug("setOutputMediaStreamTrack",A.label):this.log.info("setOutputMediaStreamTrack",(e=A.getSettings)==null?void 0:e.call(A).deviceId,A.label),this._outputTrack=A,this._inputTrack&&(this._outputTrack.contentHint=this._inputTrack.contentHint,this._outputTrack.enabled=this._inputTrack.enabled),this.updatePlayingState(!!A),this.emit("output-media-track-changed",A))}setMediaType(A){this.mediaType=A}updatePlayingState(A){var e,o;if(this.isPlayCalled){if(A){if(this.player.setTrack(this.playerMediaTrack),this.player.isStopped)return this.player.play().catch(a=>this.handleAutoPlayFailed(a)),void this.log.info("playing state updated, play ".concat(this.kind))}else if(!this.player.isStopped)return Xb(this)&&this.isAudio&&(e=this.user)!=null&&e.muteState.hasAudio&&(o=this.user)!=null&&o.muteState.audioMuted?void 0:(this.player.stop(Xb(this)?this.jitterBufferDelay:0),void this.log.info("playing state updated, stop ".concat(this.kind)))}this.log.debug("updatePlayingState abort ".concat(this.isPlayCalled," ").concat(A," ").concat(this.player.isStopped))}handleAutoPlayFailed(A){return KA(this,null,function*(){var e;this.log.warn("handleAutoPlayFailed",A);let o=()=>{this.resume().then(()=>{document.removeEventListener("click",o,!0)})};if(this.room&&this.room.enableAutoPlayDialog){if((kp||tQ)&&(yield LC(100),(e=this.player)!=null&&e.isPlaying))return;YC()}else document.addEventListener("click",o,!0);F.once(nA.LOCAL_TRACK_CAPTURE_SUCCESS,a=>{let{track:c}=a;c.kind==="audio"&&fi()&&!this.player.isPlaying&&this.isRemote&&this.isAvailable&&o()}),this.emit("error",A)})}getVideoFrame(){return this.player instanceof vo?this.player.getVideoFrame():""}emitFirstVideoFrameEvent(A){var e,o,a;if(this.isFirstVideoFrameEmitted)return;let c=(e=this.mediaTrack)==null?void 0:e.getSettings(),d=c?.width||((o=this.player.element)==null?void 0:o.videoWidth)||0,C=c?.height||((a=this.player.element)==null?void 0:a.videoHeight)||0;A===fo.RESIZE&&!d&&!C||A===fo.LOADED_META_DATA&&!d&&!C||(A===fo.LOADED_DATA&&!d&&!C&&this._log.warn("the dimension of video is 0x0 in first-video-frame event"),this.isFirstVideoFrameEmitted=!0,$B(this.rotation)&&([d,C]=[C,d]),this.emit("first-video-frame",{width:d,height:C,streamType:this.streamType,userId:this.isRemote?this.userId:""}))}onTrackMuted(){this._log.warn("".concat(this.kind," track is unable to provide media output"))}onTrackUnmuted(){this._log.info("".concat(this.kind," track is able to provide media output"))}onTrackEnded(){this._log.warn("".concat(this.kind," track ended"))}};Ci([lc([],Zs.INIT,{sync:!0})],kK.prototype,"_toInitState");var DeA=Object.prototype.hasOwnProperty,Am=function(A){if(A==null)return!0;if(typeof A=="boolean")return!1;if(typeof A=="number")return A===0;if(typeof A=="string"||typeof A=="function"||Array.isArray(A))return A.length===0;if(A instanceof Error)return A.message==="";if(lE(A))switch(Object.prototype.toString.call(A)){case"[object File]":case"[object Map]":case"[object Set]":return A.size===0;case"[object Object]":for(let e in A)if(DeA.call(A,e))return!1;return!0}return!1},SeA=gM({retryFunction:function(A){return KA(this,null,function*(){let e=function(d){return{audio:MeA(d),video:veA(d)}}(A);QA.info("getUserMedia with constraints: ".concat(JSON.stringify(e)));let o=[],a=[],c=["label","deviceId","groupId"];if(e.audio&&(o=yield Xp(),QA.info("microphones: ".concat(zd(o.map(d=>Qo(mi({},d),{groupId:d.groupId.substring(0,8)})),{keysToInclude:c})))),e.video&&(a=yield $p(),QA.info("cameras: ".concat(zd(a,{keysToInclude:c}))),!Nr(e.video)&&e.video.facingMode==="user"&&!e.video.deviceId)){let d=a.filter(C=>!C.label.includes("infrared")).find(C=>C.label.includes("facing front"));d&&(e.video.deviceId=d.deviceId,QA.info("exclude infrared camera: ".concat(JSON.stringify(e))))}try{let d=yield navigator.mediaDevices.getUserMedia(e);return k2&&d.getTracks().forEach(C=>{var y;let S=C.getCapabilities();QA.info("".concat(C.kind," capabilities: ").concat(zd(S,{keysToInclude:Gb}))),!Je(A.echoCancellation)&&((y=S.echoCancellation)==null?void 0:y.indexOf(A.echoCancellation))===-1&&QA.warn("Invalid argument for 'echoCancellation'. Expected one of [".concat(JSON.stringify(S.echoCancellation),"], but received '").concat(A.echoCancellation,"'"))}),e.audio&&Zk(),d}catch(d){let{message:C}=d;throw d.name==="NotFoundError"&&(A.video&&a&&a.length===0&&(C=Xo({key:Mo.CAMERA_NOT_FOUND})),A.audio&&o&&o.length===0&&(C=Xo({key:Mo.MICROPHONE_NOT_FOUND}))),new ai({code:dt.INITIALIZE_FAILED,name:d.name,message:C,constraint:d.constraint})}})},settings:{retries:3,timeout:500},onError:A=>{let{error:e,retry:o,reject:a,retryFuncArgs:c,retriedCount:d}=A,C=d+1;e.name==="NotReadableError"||e.name==="OverconstrainedError"||e.name==="AbortError"?(C===1?(c[0].video&&(c[0].maxResolution=!1,(!Bg||c[0].width*c[0].height<=2073600)&&c[0].frameRate&&(c[0].frameRate=c[0].frameRate>10?10:5)),c[0].retryWhenExactFailed&&c[0].useExactDeviceId&&(c[0].useExactDeviceId=!1)):C===2?c[0].useDeviceIdOnly=!0:C===3&&!c[0].useExactDeviceId&&(c[0].useTrueAsConstraint=!0),o()):a(e),c[0].microphoneId&&s5(c[0].microphoneId,!1),c[0].cameraId&&s5(c[0].cameraId,!0)},onRetrying:A=>{QA.warn("getUserMedia NotReadableError observed, retrying [".concat(A,"/3]"))},onRetryFailed:A=>{sn.logFailedEvent({eventType:Ja.GET_USER_MEDIA_RETRY,error:A})},onRetrySuccess:A=>{sn.logSuccessEvent({eventType:Ja.GET_USER_MEDIA_RETRY}),sn.uploadEvent({log:"stat-".concat(Ja.GET_USER_MEDIA_RETRY,"-success-").concat(A)})}});function s5(A,e){return KA(this,null,function*(){let o=(e?yield $p():yield Xp()).find(a=>a.deviceId===A);o&&Ra(o.getCapabilities)&&QA.warn(zd(o.getCapabilities(),{keysToInclude:Gb}))})}function MeA(A){if(!A.audio)return!1;if(A.useTrueAsConstraint)return!0;let e={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,sampleRate:A.sampleRate};return!Am(A.microphoneId)&&(e.deviceId=A.useExactDeviceId?{exact:A.microphoneId}:A.microphoneId,A.useDeviceIdOnly)?e:(bn(A.channelCount)&&(e.channelCount=A.channelCount),(Nr(A.echoCancellation)||A.echoCancellation==="remote-only"||A.echoCancellation==="all")&&(e.echoCancellation=A.echoCancellation),Nr(A.noiseSuppression)&&!A.noiseSuppression&&(e.noiseSuppression=!1),Nr(A.autoGainControl)&&!A.autoGainControl&&(e.autoGainControl=!1),!!Am(e)||e)}function veA(A){if(!A.video)return!1;if(A.useTrueAsConstraint)return!0;let{maxResolution:e=!0}=A,o={};return A.cameraId?o.deviceId=A.useExactDeviceId?{exact:A.cameraId}:A.cameraId:A.facingMode&&(o.facingMode=A.facingMode),A.useDeviceIdOnly&&!Am(o)?o:(A.width&&(o.width={ideal:A.width},e&&!er&&(o.width.max=A.width)),A.height&&(o.height={ideal:A.height},e&&!er&&(o.height.max=A.height)),er&&iQ&&A.width&&A.height&&A.width*A.height<101376&&(o.width=A.width,o.height=A.height),A.frameRate&&(o.frameRate=A.frameRate),!!Am(o)||o)}var ReA=SeA;function n5(A){return jr((e,o)=>function(){for(var a=arguments.length,c=new Array(a),d=0;dfunction(){for(var a=arguments.length,c=new Array(a),d=0;dfunction(){for(var a=arguments.length,c=new Array(a),d=0;d{let A=!1,e=document.visibilityState;return()=>{document.visibilityState!==e&&QA.info("visibility change: ".concat(document.visibilityState)),!A&&(document.addEventListener("visibilitychange",()=>{QA.info("visibility change: ".concat(document.visibilityState)),e=document.visibilityState}),A=!0)}})(),_eA=0,a5=class{constructor(A){Y(this,"log"),Y(this,"isRunning",!1),Y(this,"queue",[]);let e="fq".concat(++_eA);A&&(e+="|".concat(A)),this.log=QA.createLogger({id:e})}get length(){return this.queue.length}get lastQueueItem(){return this.length===0?null:this.queue[this.length-1]}push(A){let e=arguments.length>1&&arguments[1]!==void 0&&arguments[1];var o,a;let c=mi({},A),d=new Promise((C,y)=>{c.resolve=C,c.reject=y});return c.promise=d,e?this.length<=1?this.queue.push(c):(a=(o=this.lastQueueItem)==null?void 0:o.promise)==null||a.then(c.resolve,c.reject):this.queue.push(c),this.log.debug("push ".concat(this.length),A.funcName,A.args),this.isRunning||this.callNext(),d}shift(){let A=this.queue.shift();return this.log.debug("shift ".concat(this.length),A?.funcName,A?.args),A}callNext(){if(this.isRunning||this.length===0)return;let{fn:A,args:e,context:o,resolve:a,reject:c,funcName:d}=this.queue[0];this.log.debug("callNext",this.length,d,e),this.isRunning=!0,A.apply(o,e).then(a,c).finally(()=>{this.isRunning=!1,this.shift(),this.callNext()})}},j2=new WeakMap,W2=new WeakMap;function $k(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return function(e,o,a){let c=a.value;return a.value=function(){let d=j2.get(this)||new a5;for(var C=arguments.length,y=new Array(C),S=0;SS.push(gA)),(y=W2.get(this))==null||y.forEach(gA=>gA?.queue.forEach(CA=>S.push(CA))),S.forEach(gA=>{gA.reject(new ai({code:dt.API_CALL_ABORTED,message:A}))}),j2.delete(this),W2.delete(this),c.apply(this,V)},a}}function py(A,e){return function(o,a,c){let d=c.value,C=y=>A(...y);return c.value=function(){for(var y=arguments.length,S=new Array(y),k=0;kfunction(){let c=A;try{for(var d=arguments.length,C=new Array(d),y=0;y(e?ii.addSuccessEvent({key:c,cost:ko()-k}):ii.addSuccessEvent({key:c}),V)).catch(V=>{throw ii.addFailedEvent({key:c,error:V}),V}):(ii.addSuccessEvent({key:c}),S)}catch(S){throw ii.addFailedEvent({key:c,error:S}),S}})}var c5={};function tg(){}Hh(c5,{Events:()=>Ic,Inspect:()=>yy,LastSink:()=>z2,Sink:()=>Os,Subscribe:()=>Z2,TimeoutError:()=>u5,audit:()=>dtA,bindCallback:()=>XeA,bindNodeCallback:()=>$eA,buffer:()=>PeA,bufferCount:()=>OeA,bufferTime:()=>FtA,call:()=>l5,catchError:()=>N5,combineLatest:()=>C5,concat:()=>beA,concatMap:()=>RtA,concatMapTo:()=>wtA,count:()=>ttA,create:()=>lr,debounce:()=>htA,debounceTime:()=>BtA,defer:()=>h5,delay:()=>OtA,deliver:()=>Ps,dispose:()=>LK,elementAt:()=>QtA,empty:()=>xK,every:()=>DtA,exhaustMap:()=>btA,exhaustMapTo:()=>ktA,expand:()=>xtA,filter:()=>JM,find:()=>ptA,findIndex:()=>mtA,first:()=>ftA,fromAnimationFrame:()=>zeA,fromArray:()=>JeA,fromEvent:()=>ca,fromEventPattern:()=>HeA,fromFetch:()=>qeA,fromIterable:()=>KeA,fromPromise:()=>m5,fromReadableStream:()=>WeA,fromReader:()=>jeA,groupBy:()=>LtA,identity:()=>TeA,ignoreElements:()=>ntA,iif:()=>LeA,inspect:()=>I5,interval:()=>p5,last:()=>ytA,map:()=>VK,mapTo:()=>MtA,max:()=>itA,merge:()=>UK,mergeMap:()=>TtA,mergeMapTo:()=>NtA,min:()=>otA,never:()=>AtA,nothing:()=>tg,of:()=>VeA,pairwise:()=>StA,pipe:()=>ma,race:()=>d5,range:()=>ZeA,reduce:()=>f5,retry:()=>HtA,scan:()=>S5,setAsapScheduler:()=>YeA,share:()=>AL,shareReplay:()=>keA,skip:()=>gtA,skipUntil:()=>ctA,skipWhile:()=>YK,startWith:()=>FK,subject:()=>EQ,subscribe:()=>Bl,sum:()=>stA,switchMap:()=>$2,switchMapTo:()=>e1,take:()=>l_,takeLast:()=>atA,takeUntil:()=>EE,takeWhile:()=>rtA,tap:()=>JK,throttle:()=>utA,throwError:()=>etA,timeInterval:()=>UtA,timeout:()=>JtA,timer:()=>PK,toPromise:()=>YtA,toReadableStream:()=>VtA,withLatestFrom:()=>FeA,zip:()=>UeA});var l5=A=>A(),TeA=A=>A;function LK(){this.dispose()}var I5=()=>typeof __FASTRX_DEVTOOLS__<"u",NeA=1,yy=class extends Function{toString(){return"".concat(this.name,"(").concat(this.args.length?[...this.args].join(", "):"",")")}subscribe(A){let e=new GeA(A,this,this.streamId++);return Ic.subscribe({id:this.id,end:!1},{nodeId:e.sourceId,streamId:e.id}),this(e),e}},z2=class{constructor(){this.defers=new Set,this.disposed=!1}next(A){}complete(){this.dispose()}error(A){this.dispose()}get bindDispose(){return()=>this.dispose()}dispose(){this.disposed=!0,this.complete=tg,this.error=tg,this.next=tg,this.dispose=tg,this.subscribe=tg,this.doDefer()}subscribe(A){return A instanceof yy?A.subscribe(this):A(this),this}get bindSubscribe(){return A=>this.subscribe(A)}doDefer(){this.defers.forEach(l5),this.defers.clear()}defer(A){this.defers.add(A)}removeDefer(A){this.defers.delete(A)}reset(){this.disposed=!1,delete this.complete,delete this.next,delete this.dispose,delete this.next,delete this.subscribe}resetNext(){delete this.next}resetComplete(){delete this.complete}resetError(){delete this.error}},Os=class extends z2{constructor(A){super(),this.sink=A,A.defer(this.bindDispose)}next(A){this.sink.next(A)}complete(){this.sink.complete()}error(A){this.sink.error(A)}},Z2=class extends z2{constructor(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:tg,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:tg,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:tg;if(super(),this._next=e,this._error=o,this._complete=a,this.then=tg,A instanceof yy){let c={toString:()=>"subscribe",id:0,source:A};this.defer(()=>{Ic.defer(c,0)}),Ic.create(c),Ic.pipe(c),this.sourceId=c.id,this.subscribe(A),Ic.subscribe({id:c.id,end:!0}),e==tg?this._next=d=>Ic.next(c,0,d):this.next=d=>{Ic.next(c,0,d),e(d)},a==tg?this._complete=()=>Ic.complete(c,0):this.complete=()=>{this.dispose(),Ic.complete(c,0),a()},o==tg?this._error=d=>Ic.complete(c,0,d):this.error=d=>{this.dispose(),Ic.complete(c,0,d),o(d)}}else this.subscribe(A)}next(A){this._next(A)}complete(){this.dispose(),this._complete()}error(A){this.dispose(),this._error(A)}};function ma(A){for(var e=arguments.length,o=new Array(e>1?e-1:0),a=1;ad(c),A)}function lr(A,e,o){if(I5()){let a=Object.defineProperties(Object.setPrototypeOf(A,yy.prototype),{streamId:{value:0,writable:!0,configurable:!0},name:{value:e,writable:!0,configurable:!0},args:{value:o,writable:!0,configurable:!0},id:{value:0,writable:!0,configurable:!0}});Ic.create(a);for(let c=0;c{if(d instanceof yy){let C=lr(y=>{let S=new A(y,...a);S.sourceId=C.id,S.subscribe(d)},e,arguments);return C.source=d,Ic.pipe(C),C}return C=>d(new A(C,...a))}}}function Dy(A,e){window.postMessage({source:"fastrx-devtools-backend",payload:{event:A,payload:e}})}var GeA=class extends Os{constructor(A,e,o){super(A),this.source=e,this.id=o,this.sourceId=A.sourceId,this.defer(()=>{Ic.defer(this.source,this.id)})}next(A){Ic.next(this.source,this.id,A),this.sink.next(A)}complete(){Ic.complete(this.source,this.id),this.sink.complete()}error(A){Ic.complete(this.source,this.id,A),this.sink.error(A)}},Ic={addSource(A,e){Dy("addSource",{id:A.id,name:A.toString(),source:{id:e.id,name:e.toString()}})},next(A,e,o){Dy("next",{id:A.id,streamId:e,data:o&&o.toString()})},subscribe(A,e){let{id:o,end:a}=A;Dy("subscribe",{id:o,end:a,sink:{nodeId:e&&e.nodeId,streamId:e&&e.streamId}})},complete(A,e,o){Dy("complete",{id:A.id,streamId:e,err:o?o.toString():null})},defer(A,e){Dy("defer",{id:A.id,streamId:e})},pipe(A){Dy("pipe",{name:A.toString(),id:A.id,source:{id:A.source.id,name:A.source.toString()}})},update(A){Dy("update",{id:A.id,name:A.toString()})},create(A){A.id||(A.id=NeA++),Dy("create",{name:A.toString(),id:A.id})}},u5=class extends Error{constructor(A){super("timeout after ".concat(A,"ms")),this.timeout=A}},E5=class extends z2{constructor(A){super(),this.source=A,this.sinks=new Set}add(A){A.defer(()=>this.remove(A)),this.sinks.add(A).size===1&&(this.reset(),this.subscribe(this.source))}remove(A){this.sinks.delete(A),this.sinks.size===0&&this.dispose()}next(A){this.sinks.forEach(e=>e.next(A))}complete(){this.sinks.forEach(A=>A.complete()),this.sinks.clear()}error(A){this.sinks.forEach(e=>e.error(A)),this.sinks.clear()}};function AL(){return A=>{let e=new E5(A);if(A instanceof yy){let o=lr(a=>{e.add(a)},"share",arguments);return e.sourceId=o.id,o.source=A,Ic.pipe(o),o}return lr(e.add.bind(e),"share",arguments)}}function UK(){for(var A=arguments.length,e=new Array(A),o=0;o{let c=new Os(a),d=e.length;c.complete=()=>{--d===0&&a.complete()},e.forEach(c.bindSubscribe)},"merge",arguments)}function d5(){for(var A=arguments.length,e=new Array(A),o=0;o{let c=new Map;e.forEach(d=>{let C=new Os(a);c.set(d,C),C.complete=()=>{c.delete(d),c.size===0?a.complete():C.dispose()},C.next=y=>{c.delete(d),c.forEach(S=>S.dispose()),C.resetNext(),C.resetComplete(),C.next(y)}}),e.forEach(d=>c.get(d).subscribe(d))},"race",arguments)}function beA(){for(var A=arguments.length,e=new Array(A),o=0;o{let c=0,d=e.length,C=new Os(a);C.complete=()=>{c{let o=new E5(e),a=[];return o.next=function(c){a.push(c),a.length>A&&a.shift(),this.sinks.forEach(d=>d.next(c))},lr(c=>{c.defer(()=>o.remove(c)),a.forEach(d=>c.next(d)),o.add(c)},"shareReplay",arguments)}}function LeA(A,e,o){return lr(a=>A()?e(a):o(a),"iif",arguments)}function C5(){for(var A=arguments.length,e=new Array(A),o=0;o{let c=e.length,d=c,C=c,y=new Array(c),S=()=>{--C===0&&a.complete()};e.forEach((k,V)=>{let J=new Os(a);J.next=gA=>{d--,J.next=CA=>{y[V]=CA,d===0&&a.next(y)},J.next(gA)},J.complete=S,J.subscribe(k)})},"combineLatest",arguments)}function UeA(){for(var A=arguments.length,e=new Array(A),o=0;o{let c=e.length,d=c,C=new Array(c),y=()=>{--d===0&&a.complete()};e.forEach((S,k)=>{let V=new Os(a),J=[];C[k]=J,V.next=gA=>{J.push(gA),C.every(CA=>CA.length)&&a.next(C.map(CA=>CA.shift()))},V.complete=y,V.subscribe(S)})},"zip",arguments)}function FK(){for(var A=arguments.length,e=new Array(A),o=0;olr(function(c){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,C=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length;for(;d1?o-1:0),c=1;cthis.buffer=d,e.complete=tg,e.subscribe(C5(...a))}next(A){this.buffer&&this.sink.next([A,...this.buffer])}},"withLatestFrom"),OeA=Ps(class extends Os{constructor(A,e,o){super(A),this.bufferSize=e,this.startBufferEvery=o,this.buffer=[],this.count=0,this.startBufferEvery&&(this.buffers=[[]])}next(A){this.startBufferEvery?(this.count++===this.startBufferEvery&&(this.buffers.push([]),this.count=1),this.buffers.forEach(e=>{e.push(A)}),this.buffers[0].length===this.bufferSize&&this.sink.next(this.buffers.shift())):(this.buffer.push(A),this.buffer.length===this.bufferSize&&(this.sink.next(this.buffer),this.buffer=[]))}complete(){this.buffer.length?this.sink.next(this.buffer):this.buffers.length&&this.buffers.forEach(A=>this.sink.next(A)),super.complete()}},"bufferCount"),PeA=Ps(class extends Os{constructor(A,e){super(A),this.buffer=[];let o=new Os(A);o.next=a=>{A.next(this.buffer),this.buffer=[]},o.complete=tg,o.subscribe(e)}next(A){this.buffer.push(A)}complete(){this.buffer.length&&this.sink.next(this.buffer),super.complete()}},"buffer"),xeA=function(A,e,o,a){return new(o||(o=Promise))(function(c,d){function C(k){try{S(a.next(k))}catch(V){d(V)}}function y(k){try{S(a.throw(k))}catch(V){d(V)}}function S(k){k.done?c(k.value):function(V){return V instanceof o?V:new o(function(J){J(V)})}(k.value).then(C,y)}S((a=a.apply(A,[])).next())})};function EQ(A){let e=arguments,o=AL()(lr(a=>{o.next=c=>a.next(c),o.complete=()=>a.complete(),o.error=c=>a.error(c),A&&a.subscribe(A)},"subject",e));return o.next=tg,o.complete=tg,o.error=tg,o}function h5(A){return lr(e=>e.subscribe(A()),"defer",arguments)}var c_={promise:A=>{Promise.resolve().then(A)},setImmediate:typeof setImmediate<"u"?A=>setImmediate(A):null,setTimeout:A=>setTimeout(A,0)},OK=typeof Promise<"u"?c_.promise:c_.setImmediate?c_.setImmediate:c_.setTimeout,B5=A=>e=>{OK(()=>A(e))},YeA=A=>{typeof A=="function"?OK=A:c_[A]&&(OK=c_[A])},Q5=A=>B5(e=>{for(let o=0;!e.disposed&&o{let o=0,a=setInterval(()=>e.next(o++),A);return e.defer(()=>{clearInterval(a)}),"interval"},"interval",arguments)}function PK(A,e){return lr(o=>{let a=0,c=setTimeout(()=>{if(o.removeDefer(d),o.next(a++),e){let C=setInterval(()=>o.next(a++),e);o.defer(()=>{clearInterval(C)})}else o.complete()},A),d=()=>clearTimeout(c);o.defer(d)},"timer",arguments)}function X2(A,e){return o=>{let a=c=>o.next(c);o.defer(()=>e(a)),A(a)}}function HeA(A,e){return lr(X2(A,e),"fromEventPattern",arguments)}function ca(A,e){if("on"in A&&"off"in A)return lr(X2(o=>A.on(e,o),o=>A.off(e,o)),"fromEvent",arguments);if("addListener"in A&&"removeListener"in A)return lr(X2(o=>A.addListener(e,o),o=>A.removeListener(e,o)),"fromEvent",arguments);if("addEventListener"in A)return lr(X2(o=>A.addEventListener(e,o),o=>A.removeEventListener(e,o)),"fromEvent",arguments);throw"target is not a EventDispachter"}function m5(A){return lr(e=>{A.then(o=>{e.next(o),e.complete()},e.error.bind(e))},"fromPromise",arguments)}function qeA(A,e){return lr(h5(()=>m5(fetch(A,e))),"fromFetch",arguments)}function KeA(A){return lr(B5(e=>{try{for(let o of A){if(e.disposed)return;e.next(o)}e.complete()}catch(o){e.error(o)}}),"fromIterable",arguments)}function jeA(A){let e=o=>xeA(this,void 0,void 0,function*(){try{if(o.disposed)return;let{done:a,value:c}=yield A.read();if(a)return void o.complete();o.next(c),e(o)}catch(a){o.error(a)}});return lr(o=>{e(o)},"fromReader",arguments)}function WeA(A){return lr(e=>{let o=new AbortController,a=o.signal;e.defer(()=>o.abort("cancelled")),A.pipeTo(new WritableStream({write(c){e.next(c)},close(){e.complete()},abort(c){e.error(c)}}),{signal:a}).then(()=>e.complete(),c=>e.error(c))},"fromReadableStream",arguments)}function zeA(){return lr(A=>{let e=requestAnimationFrame(function o(a){A.disposed||(A.next(a),e=requestAnimationFrame(o))});A.defer(()=>cancelAnimationFrame(e))},"fromAnimationFrame",arguments)}function ZeA(A,e){return lr(function(o){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:A,c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e+A;for(;a2?o-2:0),c=2;c{let C=a.concat(y=>(d.next(y),d.complete()));A.apply(e,C)},"bindCallback",arguments)}function $eA(A,e){for(var o=arguments.length,a=new Array(o>2?o-2:0),c=2;c{let C=a.concat((y,S)=>y?d.error(y):(d.next(S),d.complete()));A.apply(e,C)},"bindNodeCallback",arguments)}function AtA(){return lr(()=>{},"never",arguments)}function etA(A){return lr(e=>e.error(A),"throwError",arguments)}function xK(){return lr(A=>A.complete(),"empty",arguments)}var eL=class extends Os{constructor(A,e,o){super(A),this.f=e;let a=()=>{this.sink.next(this.acc),this.sink.complete()};o===void 0?this.next=c=>{this.acc=c,this.complete=a,this.resetNext()}:(this.acc=o,this.complete=a)}next(A){this.acc=this.f(this.acc,A)}},f5=Ps(eL,"reduce"),ttA=A=>Ps(eL,"count")((e,o)=>A(o)?e+1:e,0),itA=()=>Ps(eL,"max")(Math.max),otA=()=>Ps(eL,"min")(Math.min),stA=()=>Ps(eL,"sum")((A,e)=>A+e,0),JM=Ps(class extends Os{constructor(A,e,o){super(A),this.filter=e,this.thisArg=o}next(A){this.filter.call(this.thisArg,A)&&this.sink.next(A)}},"filter"),ntA=Ps(class extends Os{next(A){}},"ignoreElements"),l_=Ps(class extends Os{constructor(A,e){super(A),this.count=e}next(A){this.sink.next(A),--this.count===0&&(this.doDefer(),this.complete())}},"take"),EE=Ps(class extends Os{constructor(A,e){super(A);let o=new Os(A);o.next=()=>{o.doDefer(),A.complete()},o.complete=LK,o.subscribe(e)}},"takeUntil"),rtA=Ps(class extends Os{constructor(A,e){super(A),this.f=e}next(A){this.f(A)?this.sink.next(A):(this.doDefer(),this.complete())}},"takeWhile"),atA=A=>f5((e,o)=>(e.push(o),e.length>A&&e.shift(),e),[]),gtA=Ps(class extends Os{constructor(A,e){super(A),this.count=e}next(A){--this.count===0&&(this.next=super.next)}},"skip"),ctA=Ps(class extends Os{constructor(A,e){super(A),A.next=tg;let o=new Os(A);o.next=()=>{o.doDefer(),A.resetNext()},o.complete=LK,o.subscribe(e)}},"skipUntil"),YK=Ps(class extends Os{constructor(A,e){super(A),this.f=e}next(A){this.f(A)||(this.next=super.next,this.next(A))}},"skipWhile"),ltA={leading:!0,trailing:!1},ItA=class extends Os{constructor(A,e,o){super(A),this.durationSelector=e,this.trailing=o}cacheValue(A){this.last=A,this.disposed&&this.throttle(A)}send(A){this.sink.next(A),this.throttle(A)}throttle(A){this.reset(),this.subscribe(this.durationSelector(A))}next(){this.complete()}complete(){this.dispose(),this.trailing&&this.send(this.last)}},y5=class extends Os{constructor(A,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:ltA;super(A),this.durationSelector=e,this.config=o,this._throttle=new ItA(this.sink,this.durationSelector,this.config.trailing),this._throttle.dispose()}next(A){this._throttle.disposed&&this.config.leading?this._throttle.send(A):this._throttle.cacheValue(A)}complete(){this._throttle.throttle=tg,this._throttle.complete(),super.complete()}},utA=Ps(y5,"throttle"),EtA={leading:!1,trailing:!0},dtA=A=>Ps(y5,"audit")(A,EtA),CtA=class extends Os{next(){this.complete()}complete(){this.dispose(),this.sink.next(this.last)}},D5=class extends Os{constructor(A,e){super(A),this.durationSelector=e,this._debounce=new CtA(this.sink),this._debounce.dispose()}next(A){this._debounce.dispose(),this._debounce.reset(),this._debounce.last=A,this._debounce.subscribe(this.durationSelector(A))}complete(){this._debounce.complete(),super.complete()}},htA=Ps(D5,"debounce"),BtA=A=>Ps(D5,"debounceTime")(e=>PK(A)),QtA=Ps(class extends Os{constructor(A,e,o){super(A),this.count=e,this.defaultValue=o}next(A){this.count--===0&&(this.defaultValue=A,this.doDefer(),this.complete())}complete(){this.defaultValue!==void 0?(this.sink.next(this.defaultValue),super.complete()):this.error(new Error("not enough elements in sequence"))}},"elementAt"),ptA=A=>e=>l_(1)(YK(o=>!A(o))(e)),mtA=Ps(class extends Os{constructor(A,e){super(A),this.f=e,this.i=0}next(A){this.f(A)?(this.sink.next(this.i++),this.doDefer(),this.complete()):++this.i}},"findIndex"),ftA=Ps(class extends Os{constructor(A,e,o){super(A),this.f=e,this.defaultValue=o,this.index=0}next(A){(!this.f||this.f(A,this.index++))&&(this.defaultValue=A,this.doDefer(),this.complete())}complete(){this.defaultValue!==void 0?(this.sink.next(this.defaultValue),super.complete()):this.error(new Error("no elements in sequence"))}},"first"),ytA=Ps(class extends Os{constructor(A,e,o){super(A),this.f=e,this.defaultValue=o,this.index=0}next(A){(!this.f||this.f(A,this.index++))&&(this.defaultValue=A)}complete(){this.defaultValue!==void 0?(this.sink.next(this.defaultValue),super.complete()):this.error(new Error("no elements in sequence"))}},"last"),DtA=Ps(class extends Os{constructor(A,e){super(A),this.predicate=e,this.index=0}next(A){this.predicate(A,this.index++)?this.result=!0:(this.result=!1,this.doDefer(),this.complete())}complete(){this.result!==void 0?(this.sink.next(this.result),super.complete()):this.error(new Error("no elements in sequence"))}},"every"),S5=Ps(class extends Os{constructor(A,e,o){super(A),this.f=e,o===void 0?this.next=a=>{this.acc=a,this.resetNext(),this.sink.next(this.acc)}:this.acc=o}next(A){this.sink.next(this.acc=this.f(this.acc,A))}},"scan"),StA=Ps(class extends Os{constructor(){super(...arguments),this.hasLast=!1}next(A){this.hasLast?this.sink.next([this.last,A]):this.hasLast=!0,this.last=A}},"pairwise"),M5=class extends Os{constructor(A,e,o){super(A),this.mapper=e,this.thisArg=o}next(A){super.next(this.mapper.call(this.thisArg,A))}},VK=Ps(M5,"map"),MtA=A=>Ps(M5,"mapTo")(e=>A),tL=class extends Os{constructor(A,e,o){super(A),this.data=e,this.context=o}next(A){let e=this.context.combineResults;e?this.sink.next(e(this.data,A)):this.sink.next(A)}tryComplete(){this.context.resetComplete(),this.dispose()}},iL=class k9 extends Os{constructor(e,o,a){super(e),this.makeSource=o,this.combineResults=a,this.index=0}subInner(e,o){let a=this.currentSink=new o(this.sink,e,this);this.complete===k9.prototype.complete&&(this.complete=this.tryComplete),a.complete=a.tryComplete,a.subscribe(this.makeSource(e,this.index++))}complete(){this.sink.complete()}tryComplete(){this.currentSink.resetComplete(),this.dispose()}},v5=class extends tL{},R5=class extends iL{next(A){this.subInner(A,v5),this.next=e=>{this.currentSink.dispose(),this.subInner(e,v5)}}},$2=Ps(R5,"switchMap");function A1(A){return(e,o)=>A(()=>e,o)}var e1=A1(Ps(R5,"switchMapTo")),vtA=class extends tL{tryComplete(){this.dispose(),this.context.sources.length?this.context.subNext():(this.context.resetNext(),this.context.resetComplete())}},w5=class extends iL{constructor(){super(...arguments),this.sources=[],this.next2=this.sources.push.bind(this.sources)}next(A){this.next2(A),this.subNext()}subNext(){this.next=this.next2,this.subInner(this.sources.shift(),vtA),this.disposed&&this.sources.length===0&&this.currentSink.resetComplete()}tryComplete(){this.sources.length===0&&this.currentSink.resetComplete(),this.dispose()}},RtA=Ps(w5,"concatMap"),wtA=A1(Ps(w5,"concatMapTo")),_tA=class extends tL{tryComplete(){this.context.inners.delete(this),super.dispose(),this.context.inners.size===0&&this.context.resetComplete()}},_5=class extends iL{constructor(){super(...arguments),this.inners=new Set}next(A){this.subInner(A,_tA),this.inners.add(this.currentSink)}tryComplete(){this.inners.size===1?this.inners.forEach(A=>A.resetComplete()):this.dispose()}},TtA=Ps(_5,"mergeMap"),NtA=A1(Ps(_5,"mergeMapTo")),GtA=class extends tL{dispose(){this.context.resetNext(),super.dispose()}},T5=class extends iL{next(A){this.next=tg,this.subInner(A,GtA)}},btA=Ps(T5,"exhaustMap"),ktA=A1(Ps(T5,"exhaustMapTo")),LtA=Ps(class extends Os{constructor(A,e){super(A),this.f=e,this.groups=new Map}next(A){let e=this.f(A),o=this.groups.get(e);o===void 0&&(o=EQ(),o.key=e,this.groups.set(e,o),super.next(o)),o.next(A)}complete(){this.groups.forEach(A=>A.complete()),super.complete()}error(A){this.groups.forEach(e=>e.error(A)),super.error(A)}},"groupBy"),UtA=Ps(class extends Os{constructor(){super(...arguments),this.start=new Date}next(A){this.sink.next({value:A,interval:Number(new Date)-Number(this.start)}),this.start=new Date}},"timeInterval"),FtA=Ps(class extends Os{constructor(A,e){super(A),this.miniseconds=e,this.buffer=[],this.id=setInterval(()=>{this.sink.next(this.buffer.concat()),this.buffer.length=0},this.miniseconds)}next(A){this.buffer.push(A)}complete(){this.sink.next(this.buffer),super.complete()}dispose(){clearInterval(this.id),super.dispose()}},"bufferTime"),OtA=Ps(class extends Os{constructor(A,e){super(A),this.buffer=[],this.delayTime=e}dispose(){clearTimeout(this.timeoutId),super.dispose()}delay(A){this.timeoutId=setTimeout(()=>{let e=this.buffer.shift();if(e){let{time:o,data:a}=e;super.next(a),this.buffer.length&&this.delay(Number(this.buffer[0].time)-Number(o))}},A)}next(A){this.buffer.length||this.delay(this.delayTime),this.buffer.push({time:new Date,data:A})}complete(){this.timeoutId=setTimeout(()=>super.complete(),this.delayTime)}},"delay"),N5=Ps(class extends Os{constructor(A,e){super(A),this.selector=e}error(A){this.dispose(),this.selector(A)(this.sink)}},"catchError"),PtA=class extends tL{tryComplete(){let A=this.context.inners.delete(this);super.dispose(),A&&this.context.checkComplete()}next(A){this.sink.next(A),this.context.expandValue(A)}},xtA=Ps(class extends iL{constructor(A,e){super(A,e),this.project=e,this.inners=new Set,this.sourceCompleted=!1}next(A){this.sink.next(A),this.expandValue(A)}expandValue(A){let e=new PtA(this.sink,A,this);this.currentSink=e,this.complete=this.tryComplete,e.complete=e.tryComplete,this.inners.add(e),e.subscribe(this.makeSource(A,this.index++))}complete(){this.sourceCompleted=!0,this.checkComplete()}checkComplete(){this.sourceCompleted&&this.inners.size===0&&(this.resetComplete(),super.complete())}tryComplete(){this.sourceCompleted=!0,this.checkComplete()}},"expand"),YtA=()=>A=>new Promise((e,o)=>{let a;new Z2(A,c=>a=c,o,()=>e(a))}),VtA=()=>A=>{let e;return new ReadableStream({start(o){e=new Z2(A,o.enqueue.bind(o),o.error.bind(o),o.close.bind(o))},cancel(){e.dispose()}})},Bl=function(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:tg,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:tg,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:tg;return a=>new Z2(a,A,e,o)},JK=Ps(class extends Os{constructor(A,e){super(A),e instanceof Function?this.next=o=>{e(o),A.next(o)}:(e.next&&(this.next=o=>{e.next(o),A.next(o)}),e.complete&&(this.complete=()=>{e.complete(),A.complete()}),e.error&&(this.error=o=>{e.error(o),A.error(o)}))}},"tap"),JtA=Ps(class extends Os{constructor(A,e){super(A),this.timeout=e,this.id=setTimeout(()=>this.error(new u5(this.timeout)),this.timeout)}next(A){super.next(A),clearTimeout(this.id),this.next=super.next}dispose(){clearTimeout(this.id),super.dispose()}},"timeout"),HtA=function(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1/0;return e=>{if(e instanceof yy){let o=lr(a=>{let c=A,d=new Os(a);d.error=C=>{c-- >0?d.subscribe(e):a.error(C)},d.sourceId=o.id,d.subscribe(e)},"retry",[A]);return o.source=e,Ic.pipe(o),o}return o=>{let a=A,c=new Os(o);c.error=d=>{a-- >0?e(c):o.error(d)},e(c)}}},HK=(A=>(A[A.AUTO_SWITCH_NEW_DEVICE=0]="AUTO_SWITCH_NEW_DEVICE",A[A.WAIT_CURRENT_DEVICE=1]="WAIT_CURRENT_DEVICE",A))(HK||{}),oL=class L9 extends kK{constructor(e,o){super({mediaType:e,PlayerClass:o}),Y(this,"isRemote",!1),Y(this,"deviceId"),Y(this,"groupId",""),Y(this,"label",""),Y(this,"sourceTrack"),Y(this,"enableAutoSwitchWhenRecapturing",!0),Y(this,"_isRecapturing",!1),Y(this,"_lastRecaptureTime",0),Y(this,"_onMuteTimeoutId",-1),Y(this,"_encodeCheckTimeoutId",-1),Y(this,"recaptureMode",0),Y(this,"profile"),Y(this,"retryEncodeFailed")}get enableEncodeFrame(){return!1}get isPublishing(){return this.state.toString()==="publishing"}get isPublished(){return this.state==="publish"}get isUseCustomSource(){return!(!this.mediaTrack||this.sourceTrack===this.mediaTrack)}encodeFrame(e,o){throw new Error("Method not implemented.")}installTrackEvent(e){e.addEventListener(YA.MUTE,this.onTrackMuted),e.addEventListener(YA.UNMUTE,this.onTrackUnmuted),e.addEventListener(YA.ENDED,this.onTrackEnded),e.muted&&this.onTrackMuted(),e.readyState===YA.ENDED&&this.onTrackEnded()}uninstallTrackEvent(e){e.removeEventListener(YA.MUTE,this.onTrackMuted),e.removeEventListener(YA.UNMUTE,this.onTrackUnmuted),e.removeEventListener(YA.ENDED,this.onTrackEnded)}setStateToReady(){}capture(e){let o=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return KA(this,null,function*(){var a,c;let d=this.sourceTrack;try{let C,y=ko();F.emit(nA.LOCAL_TRACK_CAPTURE_START,{track:this}),e.customSource?(C=new MediaStream,C.addTrack(e.customSource)):(o||(a=this.sourceTrack)==null||a.stop(),C=yield ReA(e));let S=C.getTracks()[0];return yield this.setInputMediaStreamTrack(S),e.customSource||(this.sourceTrack=S,this.updateDeviceIdInUse(),this.listenDeviceChange()),F.emit(nA.LOCAL_TRACK_CAPTURE_SUCCESS,{track:this,cost:ko()-y,profile:this.profile,room:(c=this.manager)==null?void 0:c.room}),C}catch(C){throw F.emit(nA.LOCAL_TRACK_CAPTURE_FAILED,{track:this,error:C}),this.log.error("getUserMedia error observed ".concat(C)),C}finally{o&&d?.stop()}})}setOutputMediaStreamTrack(e){var o;if(super.setOutputMediaStreamTrack(e),this.setStateToReady(),this.isPublishing||this.isPublished)return(o=this.room)==null?void 0:o.replaceTrack(this)}get hasFlag(){var e,o;let a=wp(((e=this.room)==null?void 0:e.localPublishFlag)||0,((o=this.room)==null?void 0:o.userId)||"");return this.mediaType===4&&a.hasVideo||this.mediaType===1&&a.hasAudio||this.mediaType===2&&a.hasAuxiliary}publish(e,o){return KA(this,null,function*(){return this.room=e,this.room.localTracks.add(this),this.emit("4",{mediaType:this.strMediaType,state:"starting",prevState:"stopped"}),this.userId=e.userId,this._log.bindParent(e.getLogger()),yield o,this._checkPublishFlag(e)})}_checkPublishFlag(e){return new Promise((o,a)=>KA(this,null,function*(){var c,d,C,y,S;let k=()=>a(new ai({code:dt.API_CALL_ABORTED,message:"publish aborted"}));if(this.hasFlag||this.muted?o():((this.state===Zs.INIT||this.state==="ready")&&k(),ma(ca(e,"local-publish-flag-changed"),JM(()=>this.hasFlag),EE(UK(ca(this,Zs.INIT),ca(this,"ready"))),Bl(o,a,k))),(C=(d=(c=this.room)==null?void 0:c.networkQuality)==null?void 0:d.hadRecentBadUplink)!=null&&C.call(d,2))return o();let V=e.heartbeatCount,J=((S=(y=this.mediaTrack)==null?void 0:y.stats)==null?void 0:S.totalFrames)||0;this._encodeCheckTimeoutId=setTimeout(()=>KA(this,null,function*(){var gA,CA,MA,$A,Be,Ye,ve,yi;if((MA=(CA=(gA=this.room)==null?void 0:gA.networkQuality)==null?void 0:CA.hadRecentBadUplink)!=null&&MA.call(CA,2)||e.heartbeatCount-V<3)return o();if((this.isPublished||this.isPublishing)&&this.isMediaTrackActive){if(($A=this.mediaTrack)!=null&&$A.stats){let hi=this.mediaTrack.stats.totalFrames||0;hi-J===0&&this.log.warn("capture totalFrames is 0 during encode check, totalFrames",hi)}let Ge=this.kind===YA.AUDIO,Bt=this.stat.bytesSent>0;if(ii[Bt?"addSuccessEvent":"addFailedEvent"]({key:Ge?503700:513702}),!Ge){let hi={H264:513704,H265:513705,VP8:513706}[((Ye=(Be=this.room)==null?void 0:Be.videoCodec)==null?void 0:Ye.toUpperCase())||"H264"];hi&&ii[Bt?"addSuccessEvent":"addFailedEvent"]({key:hi})}if(!Bt){if(ii.addEnum({key:Ge?503701:513703,value:xp()}),sn.uploadEvent({log:"stat-encode-failed-".concat(this.kind,"-").concat(rQ()||Yp()),userId:this.userId}),this.log.warn(Ge?"encode failed":"".concat((yi=(ve=this.room)==null?void 0:ve.videoCodec)==null?void 0:yi.toUpperCase()," encode failed")),this.retryEncodeFailed&&(this.log.warn("retry encode"),yield this.retryEncodeFailed(this),this.stat.bytesSent>0||this.hasFlag||(yield LC(5e3),this.stat.bytesSent>0||this.hasFlag)))return o();this.emit("6",this),a(new ai({message:"".concat(this.strMediaType," encode failed"),code:Ge?dt.AUDIO_ENCODE_FAILED:dt.VIDEO_ENCODE_FAILED}))}}}),1e4)}))}unpublish(){this.room&&this.room.localTracks.delete(this),this.log.info("unpublish"),F.emit(nA.LOCAL_TRACK_UNPUBLISHED,{track:this})}updateDeviceIdInUse(){return KA(this,null,function*(){if(this.sourceTrack&&Cy){let{deviceId:e,groupId:o}=this.sourceTrack.getSettings(),{label:a}=this.sourceTrack;(yield function(c){return KA(this,arguments,function(d){let{newDeviceId:C,oldDeviceId:y,oldGroupId:S,oldLabel:k,kind:V}=d;return function*(){return C===y&&(V!==YA.AUDIO||C!==ZS||(yield i5(S,k)))}()})}({newDeviceId:e,oldDeviceId:this.deviceId,oldGroupId:this.groupId,oldLabel:this.label,kind:this.kind}))||(this.deviceId=e,this.label=a,o&&(this.groupId=o),q2().then(c=>{let d=c.find(C=>{let y=C.deviceId===e;return o&&(y=y&&C.groupId===o),y});d&&this.emit("2",d)}))}})}setProfile(e){this.log.info("setProfile",e),Object.assign(this.profile,e)}isNeedToRecapture(){let e=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return!(!this.deviceId||!this.sourceTrack||this.kind===YA.AUDIO&&!function(o){if(o instanceof CanvasCaptureMediaStreamTrack||!(o instanceof MediaStreamTrack))return!1;let a=o.label.toLocaleLowerCase();if(a.includes("mic")||a.includes("麦克风"))return!0;let c="".concat((o?.getSettings()||{}).deviceId,"_").concat(YA.AUDIO_INPUT);return!!GK.has(c)}(this.sourceTrack)||this.kind===YA.VIDEO&&!function(o){if(o instanceof CanvasCaptureMediaStreamTrack||!(o instanceof MediaStreamTrack))return!1;let a=o.label.toLocaleLowerCase();if(a.includes("camera")||a.includes("webcam"))return!0;let c="".concat((o?.getSettings()||{}).deviceId,"_").concat(YA.VIDEO_INPUT);return!!GK.has(c)}(this.sourceTrack)||this._isRecapturing||e&&iQ&&Bg)}onTrackMuted(){if(super.onTrackMuted(),weA(),this.isNeedToRecapture(!0)){if(Date.now()-this._lastRecaptureTime<$S)return void setTimeout(()=>this.onTrackMuted(),$S);this._onMuteTimeoutId=setTimeout(()=>KA(this,null,function*(){var e;if((e=this.sourceTrack)!=null&&e.muted){if((eg||Ha)&&document.visibilityState!=="visible")return;this.recapture(yield this.getRecoverCaptureDeviceId())}}),5e3)}}onTrackUnmuted(){super.onTrackUnmuted(),this._onMuteTimeoutId>0&&clearTimeout(this._onMuteTimeoutId)}onTrackEnded(){return KA(this,null,function*(){if(NI(L9.prototype,this,"onTrackEnded").call(this),this.isNeedToRecapture()&&this.recaptureMode===0){if(Date.now()-this._lastRecaptureTime<$S)return void setTimeout(()=>this.onTrackEnded(),$S);this.emit("7"),this.recapture(yield this.getRecoverCaptureDeviceId())}})}recapture(e){let o=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return KA(this,null,function*(){var a;if(this._isRecapturing||!this.sourceTrack)return;this.log.warn("recapture trying");let c=this.sourceTrack;o||(a=this.sourceTrack)==null||a.stop(),this._isRecapturing=!0,this._lastRecaptureTime=Date.now();let d={useExactDeviceId:!0};if(e==="user"||e==="environment")d.facingMode=e;else{let C;(this.kind==="audio"?yield Xp():yield $p()).find(y=>y.deviceId===e)&&(C=e),d.deviceId=C}return this.capture(d,o).then(()=>{this._isRecapturing=!1,this.log.warn("recapture success"),this.emit("1",{deviceId:this.deviceId}),F.emit(nA.LOCAL_TRACK_RECAPTURE,{track:this})}).catch(C=>{this._isRecapturing=!1,this.log.warn("recapture failed ".concat(C.message)),this.emit("5",C),F.emit(nA.LOCAL_TRACK_RECAPTURE,{track:this,error:C})}).finally(()=>{o&&c?.stop()})})}getRecoverCaptureDeviceId(){return KA(this,null,function*(){let e=this instanceof dQ;if(e&&this.facingMode)return this.facingMode;let{deviceId:o}=this;if(o){let a=(nL.get(o)||0)+1;if(nL.set(o,a),a>=3&&this.enableAutoSwitchWhenRecapturing){let c=e?(yield $p()).find(d=>!nL.has(d.deviceId)):(yield Xp()).find(d=>!nL.has(d.deviceId));c&&(this.log.warn("".concat(o," capture fail ").concat(a," times, change new ").concat(c.deviceId)),o=c.deviceId)}}return o})}stopCapture(){var e;this.sourceTrack&&(this.sourceTrack.stop(),F.emit(nA.LOCAL_TRACK_STOPPED,{track:this}),this.uninstallTrackEvent(this.sourceTrack)),this._inputTrack&&this.uninstallTrackEvent(this._inputTrack),(e=this.manager)==null||e.removeInput(this),this._onMuteTimeoutId&&clearTimeout(this._onMuteTimeoutId)}close(){super.close(),this.stopCapture()}};Ci([lc(Zs.INIT,"ready",{ignoreError:!0,sync:!0})],oL.prototype,"setStateToReady"),Ci([$k()],oL.prototype,"capture"),Ci([lc("ready","publish",{ignoreError:!0,success(){F.emit(nA.LOCAL_TRACK_PUBLISHED,{track:this,room:this.room}),this.emit("4",{mediaType:this.strMediaType,state:"started",prevState:"starting"}),this.log.info("published")},fail(A){var e;(e=this.room)==null||e.localTracks.delete(this);let o="error",a=A instanceof ai?A:A.cause instanceof ai?A.cause:A,c=!1;a instanceof ai&&(a.message.includes("timeout")?o="timeout":a.code===dt.API_CALL_ABORTED&&(c=!0,o="api-call")),this.emit("4",{mediaType:this.strMediaType,state:"stopped",prevState:"starting",reason:o,error:a}),this.log[c?"info":"error"]("publish failed",a)}}),fy(521714,!1)],oL.prototype,"publish"),Ci([jr(A=>function(){return KA(this,null,function*(){let e=this.state==="publish"?"started":"starting";A.call(this),this.emit("4",{mediaType:this.strMediaType,state:"stopped",prevState:e,reason:"api-call"}),clearTimeout(this._encodeCheckTimeoutId)})}),lc([],"ready",{sync:!0})],oL.prototype,"unpublish");var sL=oL,nL=new Map;F.on(nA.SWITCH_DEVICE_SUCCESS,A=>{A.track.deviceId&&nL.delete(A.track.deviceId)});var HM=class NL extends sL{constructor(e){super(1,yeA),Y(this,"mediaType",1),Y(this,"volume",0),Y(this,"profile",{echoCancellation:!0,autoGainControl:!0,noiseSuppression:!0,sampleRate:48e3,channelCount:1,bitrate:40}),Y(this,"playerMuted",!0),Y(this,"pipeline"),Y(this,"earMonitorGainNode",new OI),Y(this,"_output",new OI),Y(this,"codecPipeline",[]),Y(this,"stat",{bytesSent:0,packetsSent:0,audioLevel:0,totalAudioEnergy:0}),Y(this,"mixedAudioReferenceMap",new Map),Y(this,"isAudioContextLongSuspended",!1),Y(this,"after3aSilenceStartTime",0),Y(this,"_micMuted",!1),Y(this,"_volumeDetectionTrack",null),Y(this,"_volumeDetectionSource",new OI),this.manager=e,this.pipeline=new Z4(e),this.pipeline.source.pipeTo(this.player.pipeline.volumeMeter),this.pipeline.gain.pipeTo(this.earMonitorGainNode).pipeTo(this._output),this.pipeline.gain.pipeTo(this.player.pipeline.volumeMeterAfter3A),this._volumeDetectionSource.pipeTo(this.player.pipeline.volumeMeter),this.handleMicrophoneAdded=this.handleMicrophoneAdded.bind(this),this.handleMicrophoneRemoved=this.handleMicrophoneRemoved.bind(this),F.on(nA.AUDIO_CONTEXT_LONG_SUSPENDED,this.handleAudioContextLongSuspended,this)}get dbVolume(){return H2.isRunning?this.player.pipeline.volumeMeter.getVolumeDb():Math.floor(Math.max(10*Math.log10(this.volume)+100,0))}getAudioLevel(){let e=(this.volume||super.getAudioLevel())*this.captureVolume;return e>1?1:e}getInternalAudioLevelAfter3A(){if(this.pipeline.isProcessEnabled)return this.player.getInternalAudioLevelAfter3A()}updateAfter3aSilenceStartTime(e){Je(e)||(e!==0||this.after3aSilenceStartTime?e>0&&(this.after3aSilenceStartTime=0):this.after3aSilenceStartTime=ko())}setInputMediaStreamTrack(e){return KA(this,null,function*(){let o=this.trackSettings||{};ii.addEnum({key:501701,value:o.channelCount||0,useUV:!1}),ii.addEnum({key:501702,value:o.sampleRate||0,useUV:!1}),ii.addEnum({key:502700,value:0});let{sampleRate:a,channelCount:c}=o;this._log.info("local audio track input ".concat(JSON.stringify({sampleRate:a,channelCount:c}))),this.pipeline.source.channelCount=c||1,this.pipeline.replaceSource(e),yield NI(NL.prototype,this,"setInputMediaStreamTrack").call(this,e),this.updatePlayingState(!!e)})}capture(e){return KA(this,arguments,function(o){var a=this;let{deviceId:c,customSource:d,useExactDeviceId:C=!0,retryWhenExactFailed:y}=o,S=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return function*(){let k=yield NI(NL.prototype,a,"capture").call(a,{video:!1,audio:!0,microphoneId:c,echoCancellation:a.profile.echoCancellation,autoGainControl:a.profile.autoGainControl,noiseSuppression:a.profile.noiseSuppression,sampleRate:a.profile.sampleRate,channelCount:a.profile.channelCount,useExactDeviceId:C,retryWhenExactFailed:y,customSource:d},S);return Zk(),k}()})}switchDevice(e){return KA(this,null,function*(){if(this.mediaTrack){if(this.deviceId===e&&!this.isUseCustomSource&&(e!==ZS||(yield i5(this.groupId,this.label))))return;try{this.log.info("switchDevice audio to: ".concat(e)),this.sourceTrack&&this.sourceTrack.stop(),yield this.capture({deviceId:e,useExactDeviceId:!0,retryWhenExactFailed:!1}),F.emit(nA.SWITCH_DEVICE_SUCCESS,{track:this}),this.log.info("switch microphone success")}catch(o){throw this.log.error("switch microphone failed ".concat(o)),this.deviceId&&this.recapture(this.deviceId),o}}})}listenDeviceChange(){Pc&&!Pc.listeners("audioInputRemoved").includes(this.handleMicrophoneRemoved)&&Pc.on("audioInputRemoved",this.handleMicrophoneRemoved,this)}handleMicrophoneRemoved(e){return KA(this,null,function*(){if(e.deviceId===this.deviceId){let o=this.recaptureMode===1;if(this.log.warn("RecaptureMode: ".concat(HK[this.recaptureMode],". Current microphone is lost: ").concat(JSON.stringify(e))),this.recaptureMode===0){Jg(this.userId,{eventId:2003,param1:6,streamType:1});let a=yield Xp();a[0]?this.recapture(a[0].deviceId):o=!0}o&&Pc.on("audioInputAdded",this.handleMicrophoneAdded,this)}})}handleMicrophoneAdded(e){this.recaptureMode===1&&e.deviceId!==this.deviceId||(Pc.off("audioInputAdded",this.handleMicrophoneAdded,this),this.log.warn("microphone added: ".concat(JSON.stringify(e))),this.recapture(e.deviceId))}update3A(e){return KA(this,arguments,function(o){var a=this;let{echoCancellation:c,noiseSuppression:d,autoGainControl:C}=o;return function*(){let y=a.sourceTrack||a.mediaTrack;if(!y)return;let S=y.getConstraints(),k=!1;!Je(c)&&c!==a.profile.echoCancellation&&(a.profile.echoCancellation=c,S.echoCancellation=c,k=!0),!Je(d)&&d!==a.profile.noiseSuppression&&(a.profile.noiseSuppression=d,S.noiseSuppression=d,k=!0),!Je(C)&&C!==a.profile.autoGainControl&&(a.profile.autoGainControl=C,S.autoGainControl=C,k=!0),k&&(er||Bg?yield y.applyConstraints(S).catch(V=>a._log.warn("update3A failed: ",V)):a.deviceId&&(yield a.recapture(a.deviceId,!0)))}()})}get captureVolume(){return this.pipeline.volume}setCaptureVolume(e){this.pipeline.setVolume(e/100),this.pipeline.gain.node&&ii.addEnum({key:502700,value:2})}setMute(e,o){var a;this._cleanupVolumeDetectionTrack(),e==="microphone"?(this._micMuted=!0,this.sourceTrack&&(this.sourceTrack.enabled=!1),o&&this._setupVolumeDetectionTrack(),((a=this.manager)==null?void 0:a.mixWeight)<=1?(this.muted=!0,this._inputTrack&&(this._inputTrack.enabled=!1),this._outputTrack&&(this._outputTrack.enabled=!1),this.emit("mute",this),F.emit(nA.TRACK_MUTED,{track:this})):this._outputTrack&&(this._outputTrack.enabled=!0)):e===!0?(this._micMuted=!1,this.muted=!0,this.sourceTrack&&(this.sourceTrack.enabled=!1),this._inputTrack&&(this._inputTrack.enabled=!1),this._outputTrack&&(this._outputTrack.enabled=!1),o&&this._setupVolumeDetectionTrack(),this.emit("mute",this),F.emit(nA.TRACK_MUTED,{track:this})):(this._micMuted=!1,this.muted=!1,this.sourceTrack&&(this.sourceTrack.enabled=!0),this._inputTrack&&(this._inputTrack.enabled=!0),this._outputTrack&&(this._outputTrack.enabled=!0),this.emit("unmute",this),F.emit(nA.TRACK_UNMUTED,{track:this}))}_setupVolumeDetectionTrack(){let e=this.sourceTrack||this.mediaTrack;if(!e)return;this._volumeDetectionTrack=e.clone(),this._volumeDetectionTrack.enabled=!0;let o=V2(this._volumeDetectionTrack);o&&this._volumeDetectionSource.setNode(o)}_cleanupVolumeDetectionTrack(){this._volumeDetectionTrack&&(this._volumeDetectionTrack.stop(),this._volumeDetectionTrack=null),this._volumeDetectionSource.deleteNode()}get isMicMuted(){return this._micMuted}setAudioVolume(e){super.setAudioVolume(0),eg&&this.player.setMuted(!0),this.earMonitorGainNode.node||(this.earMonitorGainNode.setNode(FI().createGain()),this._output.setNode(FI().destination)),this.earMonitorGainNode.node.gain.value=e}enableTrackANS(e){return this.update3A({noiseSuppression:e})}enableTrackAEC(e){if(this.sourceTrack&&!Bg&&!eg)return this.update3A({echoCancellation:e})}addDenoiser(e){var o;id<=92&&((o=this.trackSettings)==null?void 0:o.sampleRate)!==48e3?this._log.warn("denoiser only support sampleRate 48000 before chrome 93"):(ii.addEnum({key:502700,value:1}),this.pipeline.denoiser.setNode(e),this.enableTrackANS(!1))}mixAudioReference(e,o){if(this.mixedAudioReferenceMap.has(o))return;this.log.info("mixAudioReference() => ".concat(o));let a=V2(e);if(!a)return;let c=new OI,d=FI().createGain();d.gain.value=1;let C=new OI;c.pipeTo(C).pipeTo(this.pipeline.mixNode),c.setNode(a),C.setNode(d),this.mixedAudioReferenceMap.set(o,[c,C])}unMixAudioReference(e){let[o,a]=this.mixedAudioReferenceMap.get(e)||[];o&&(this.log.info("unMixAudioReference() => ".concat(e)),o.deleteNode(),a?.deleteNode(),this.mixedAudioReferenceMap.delete(e))}setAudioReferenceVolume(e,o){let[a,c]=this.mixedAudioReferenceMap.get(e)||[];c!=null&&c.node&&(c.node.gain.value=o/100,this.log.info("setAudioReferenceVolume() => ".concat(e," ").concat(c.node.gain.value)))}addAudioProcessor(e,o,a){this.pipeline.silentNode.setNode(a),this.pipeline.mixNode.setNode(o),this.pipeline.aec.setNode(e)}removeDenoiser(e){if(this.pipeline.denoiser.node===e)return this.pipeline.denoiser.deleteNode(),this.enableTrackANS(!0)}removeAudioProcessor(e){this.pipeline.aec.node===e&&(this.pipeline.aec.deleteNode(),this.pipeline.silentNode.deleteNode(),this.pipeline.mixNode.deleteNode())}close(){this._cleanupVolumeDetectionTrack(),this.mixedAudioReferenceMap.forEach(e=>{let[o,a]=e;o.deleteNode(),a.deleteNode()}),this.mixedAudioReferenceMap.clear(),this.pipeline.remove(),this.earMonitorGainNode.deleteNode(),this._output.deleteNode(),Pc.off("audioInputAdded",this.handleMicrophoneAdded,this),Pc.off("audioInputRemoved",this.handleMicrophoneRemoved,this),F.off(nA.AUDIO_CONTEXT_LONG_SUSPENDED,this.handleAudioContextLongSuspended,this),super.close()}recapture(e){let o=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return KA(this,null,function*(){try{yield NI(NL.prototype,this,"recapture").call(this,e,o)}catch(a){let c=(yield Xp()).find(d=>d.deviceId!==e);if(!c)throw a;yield NI(NL.prototype,this,"recapture").call(this,c.deviceId)}})}encodeFrame(e){return this.manager?this.manager.encodePipeline.reduceRight((o,a)=>a?a({frame:o,ntp:Lf()}):o,e):e}get enableEncodeFrame(){return!!this.manager&&this.manager.encodePipeline.some(e=>e)}get enableEncryptFrame(){return this.manager&&!!this.manager.encodePipeline[0]}handleAudioContextLongSuspended(e){let{isSuspended:o}=e;if(this.pipeline.isProcessEnabled)if(o){this.isAudioContextLongSuspended=!0,this.log.warn("context has suspended for ".concat(1.5," seconds, change to source audio").concat(Fp?"":", non-Safari"));let a=this.sourceTrack||this.mediaTrack;a&&this.setOutputMediaStreamTrack(a)}else this.isAudioContextLongSuspended=!1,this.log.warn("context has resumed, change to processed audio"),this.pipeline.track&&this.setOutputMediaStreamTrack(this.pipeline.track)}setOutputMediaStreamTrack(e){if(this.isAudioContextLongSuspended){let o=this.sourceTrack||this.mediaTrack;o&&(e=o)}super.setOutputMediaStreamTrack(e)}};function t1(A,e){return e+4<=A.byteLength&&A.getUint8(e)===0&&A.getUint8(e+1)===0&&A.getUint8(e+2)===0&&A.getUint8(e+3)===1?4:e+3<=A.byteLength&&A.getUint8(e)===0&&A.getUint8(e+1)===0&&A.getUint8(e+2)===1?3:0}function G5(A){let e=arguments.length>1&&arguments[1]!==void 0&&arguments[1],o=new DataView(A),a=[],c=0;for(;c0){C=J;break}let y=C===-1?o.byteLength:C,S=y-c,k=new ArrayBuffer(S),V=new DataView(k);for(let J=0;J1&&arguments[1]!==void 0&&arguments[1];this.dataView=A,this.isSEI&&(e?this.addPreventionByte():this.removePreventionByte())}addPreventionByte(){let{seiPayloadStartIndex:A}=this,e=this.dataView.byteLength-2,o=[],a=0;for(let d=A;d<=e;d++){let C=this.dataView.getInt8(d);switch(C){case 0:case 1:case 2:case 3:a===2&&(o.push(3),a=0),C===0?a+=1:a=0,o.push(C);break;default:a=0,o.push(C)}}o.push(this.dataView.getInt8(this.dataView.byteLength-1));let c=new DataView(new Uint8Array([...new Uint8Array(this.dataView.buffer).slice(0,A),...o]).buffer);this.dataView=c}removePreventionByte(){let{seiPayloadStartIndex:A}=this,e=this.dataView.byteLength-1,o=[],a=0;for(let d=A;d<=e;d++)switch(this.dataView.getInt8(d)){case 0:a++,o.push(this.dataView.getInt8(d));break;case 3:a!==2&&o.push(this.dataView.getInt8(d)),a=0;break;default:o.push(this.dataView.getInt8(d)),a=0}let c=new DataView(new Uint8Array([...new Uint8Array(this.dataView.buffer).slice(0,A),...o]).buffer);this.dataView=c}get seiPayloadStartIndex(){let A=6;for(let e=6;e=this.dataView.byteLength?0:31&this.dataView.getUint8(A)}getStartCodeLength(){return this.dataView.byteLength>=4&&this.dataView.getUint8(0)===0&&this.dataView.getUint8(1)===0&&this.dataView.getUint8(2)===0&&this.dataView.getUint8(3)===1?4:this.dataView.byteLength>=3&&this.dataView.getUint8(0)===0&&this.dataView.getUint8(1)===0&&this.dataView.getUint8(2)===1?3:0}get isIDR(){return this.naluType===5}get isSPS(){return this.naluType===7}get isPPS(){return this.naluType===8}get isSEI(){return this.naluType===6}},qtA=class{constructor(){Y(this,"_seiMessageList",[]),Y(this,"_smallSeiMessageList",[]),Y(this,"_seiPayloadType",243)}encodeSEINalu(A){let e=A.byteLength,o=parseInt(String(e/255),10),a=e%255,c=[];c.push(0,0,0,1,6,this._seiPayloadType);for(let C=0;C0&&A.data.byteLength>0){let a=9-this.getNaluCount(A.data);if(a<=0)return 0;let c=o.splice(0,a).reverse().map(this.encodeSEINalu.bind(this)),d=c.reduce((V,J)=>V+J.dataView.byteLength,0),C=new ArrayBuffer(d+A.data.byteLength),y=new DataView(C),S=new DataView(A.data),k=0;for(let V=0;V1&&arguments[1]!==void 0?arguments[1]:4,vo),Y(this,"profile",mi({},HS)),Y(this,"avoidCropping",!1),Y(this,"_scaleResolutionDownBy"),Y(this,"stat",{bytesSent:0,packetsSent:0,framesEncoded:0,framesSent:0,frameWidth:0,frameHeight:0,fpsCapture:0,framesCaptured:0}),Y(this,"small"),Y(this,"isNeedToSetBandwidth"),Y(this,"muteImage"),Y(this,"manager"),Y(this,"_seiCodec",new qtA),this.manager=e;let o=()=>{var a;if(this.isAllowed2k4k(this.profile))this.room&&this.settings.height>=1440&&this.state==="publish"&&this.room.sendAbilityStatus({"2k4k":1});else{let c=Kd(((a=this.room)==null?void 0:a.sdkAppId)||0)?Db:s0;this.log.warn("Resolution is reset to 1080p, need to upgrade ability here ".concat(c)),this.setProfile(Qo(mi({},this.profile),{width:1920,height:1080})),this.applyProfile()}};this.on("input-media-track-changed",o),this.on("publish",o),this.handleCameraAdded=this.handleCameraAdded.bind(this),this.handleCameraRemoved=this.handleCameraRemoved.bind(this)}get facingMode(){if(Cy&&this.mediaTrack)return this.mediaTrack.getSettings().facingMode}get contentHint(){var e;return((e=this._inputTrack)==null?void 0:e.contentHint)||""}get isQosClearFirst(){var e;return((e=this._inputTrack)==null?void 0:e.contentHint)==="detail"}get hasSmall(){var e;return!((e=this.manager)==null||!e.hasSmall)}setMute(e){return KA(this,null,function*(){var o,a,c;if(Yn(e)){if(this.muteImage===e)return;yield(o=this.manager)==null?void 0:o.deleteWatermark("mute"),yield(a=this.manager)==null?void 0:a.setWatermark({x:0,y:0,width:this.settings.width,height:this.settings.height,type:"mute",zIndex:999,imageUrl:e,fillVideo:!0}),this.muteImage=e,NI(w_.prototype,this,"setMute").call(this,!1)}else this.muteImage&&(yield(c=this.manager)==null?void 0:c.deleteWatermark("mute"),this.muteImage=void 0),NI(w_.prototype,this,"setMute").call(this,e)})}capture(e){return KA(this,arguments,function(o){var a=this;let{deviceId:c,facingMode:d,useExactDeviceId:C=!0,customSource:y,retryWhenExactFailed:S=!0}=o;return function*(){let k={audio:!1,video:!0,facingMode:d||a.facingMode,cameraId:c,width:a.profile.width,height:a.profile.height,frameRate:a.profile.frameRate,useExactDeviceId:C,retryWhenExactFailed:S,customSource:y};if(k.facingMode==="environment"){let V=yield a.getDeviceIdWhenUsingBackCamera();V&&(k.cameraId=V)}return NI(w_.prototype,a,"capture").call(a,k)}()})}setProfile(e){var o;let a=this.fallbackProfile(e);if(a.bitrate&&(this.isNeedToSetBandwidth=a.bitrate!==this.profile.bitrate),this.isAllowed2k4k(this.profile))super.setProfile(a);else{let c=Kd(((o=this.room)==null?void 0:o.sdkAppId)||0)?Db:s0;this.log.warn("Resolution is reset to 1080p, need to upgrade ability here ".concat(c)),super.setProfile(Qo(mi({},this.profile),{width:1920,height:1080}))}}applyProfile(){return KA(this,null,function*(){var e,o;if(!this.mediaTrack)return;let{width:a=0,height:c=0}=(this.sourceTrack||this.mediaTrack).getSettings(),d=a*c,C=this.settings,y=C.height!==this.profile.height||C.width!==this.profile.width||C.frameRate!==this.profile.frameRate;if(y&&(Zd===16&&this.deviceId?yield this.recapture(this.deviceId):(_p(this.outMediaTrack)?yield(e=this.outMediaTrack)==null?void 0:e.applyConstraints({width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate}):yield(o=this.sourceTrack||this.mediaTrack)==null?void 0:o.applyConstraints({width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate}),this.manager&&this.manager.changeInput(this)),this.room&&this.settings.height>=1440&&this.state==="publish"&&this.room.sendAbilityStatus({"2k4k":1})),this.isNeedToSetBandwidth&&this.room&&this.room.setBandWidth){this.isNeedToSetBandwidth=!1;let{width:S=0,height:k=0}=(this.sourceTrack||this.mediaTrack).getSettings(),V=S*k;return y&&V&&d&&V===d?void this.log.warn("set bandwidth failed: resolution is not changed"):this.room.setBandWidth({bandwidth:this.profile.bitrate,type:YA.VIDEO,videoType:YA.BIG})}})}get settings(){let e={width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate},o=this.sourceTrack||this.mediaTrack;return Cy&&o&&Object.assign(e,o.getSettings()),e}get scaleResolutionDownBy(){return this._scaleResolutionDownBy?this._scaleResolutionDownBy:w0(this.settings,this.profile)}isAllowed2k4k(e){var o;return!(this.room&&this.room.scheduleResult&&!this.isScreen&&!(e.height*e.width<3686400))||((o=this.room.scheduleResult.trtcAutoConf)==null?void 0:o["2k4k"])===1}isNeedToSwitchDevice(e){return!(!this.mediaTrack||this.deviceId===e||this.facingMode===e)}switchDevice(e){return KA(this,null,function*(){try{if(!this.isNeedToSwitchDevice(e)&&!this.isUseCustomSource)return;let o={useExactDeviceId:!0,retryWhenExactFailed:!1};e==="user"||e==="environment"?o.facingMode=e:o.deviceId=e,this.sourceTrack&&this.sourceTrack.stop(),yield this.capture(o),F.emit(nA.SWITCH_DEVICE_SUCCESS,{track:this}),this.log.info("switch camera success")}catch(o){throw this.log.error("switch camera failed ".concat(o)),this.deviceId&&this.recapture(this.deviceId),o}})}getDeviceIdWhenUsingBackCamera(){return KA(this,null,function*(){let e;try{if(lk&&!oy&&L2){let o=(yield $p(!0)).map(c=>{var d;return Qo(mi({},c),{capabilities:(d=c.getCapabilities)==null?void 0:d.call(c)})}).filter(c=>{var d,C;return(C=(d=c.capabilities)==null?void 0:d.facingMode)==null?void 0:C.includes("environment")}),a=o[0];o.forEach(c=>{var d,C,y,S;let{capabilities:k}=c;((d=k.width)!=null&&d.max&&(C=k.height)!=null&&C.max?k.width.max*k.height.max:0)>((y=a.capabilities.width)!=null&&y.max&&(S=a.capabilities.height)!=null&&S.max?a.capabilities.width.max*a.capabilities.height.max:0)&&(a=c)}),a!=null&&a.capabilities&&(this._log.info("use max resolution back camera",a),e=a.deviceId)}}catch(o){this._log.warn("get max res camera failed",o)}return e})}updateSmallConfig(e){return KA(this,null,function*(){var o,a;this._log.info("update small stream config: ".concat(JSON.stringify(e)));let c=!this.small;this.small=this.fallbackProfile(e,!0),yield(o=this.manager)==null?void 0:o.update(),c&&(yield(a=this.room)==null?void 0:a.enableSmall(!0)),this.log.info("update small stream config success")})}fallbackProfile(e){let o=arguments.length>1&&arguments[1]!==void 0&&arguments[1],a=e.width>e.height,c=mi({},e);return e.width*e.height<=19200&&Ha&&IE&&(this.log.warn("".concat(o?"small ":"","resolution is ").concat(e.width,"*").concat(e.height,", fallback to 240*180 for android chrome")),c.width=a?240:180,c.height=a?180:240,c.bitrate=Math.max(e.bitrate,150)),e.width*e.height>921600&&y2&&(c.width=a?1280:720,c.height=a?720:1280,this.log.warn("reset to 1280 * 720 on iOS 13~14")),hk(kI,"14.3")&&ny(kI,"14.0",!0)&&this.on("7",()=>{let d=this.profile.width>this.profile.height;this.profile.width*this.profile.height>307200?(this.profile.width=d?640:480,this.profile.height=d?480:640,this.log.warn("reduce the resolution to 480p on iOS 14.0 ~ 14.2")):this.profile.width*this.profile.height>230400&&(this.profile.width=d?640:360,this.profile.height=d?360:640,this.log.warn("reduce the resolution to 360p on iOS 14.0 ~ 14.2"))}),!o&&this.avoidCropping&&(IE||er)&&!q0()&&e.width*e.height<=230400&&e.width/e.height===16/9&&(this._scaleResolutionDownBy=1280/e.width,c.width=1280,c.height=720,this.log.warn("capture 720p, scale: ".concat(this._scaleResolutionDownBy))),c}stopSmall(){var e,o;this.small&&(delete this.small,(e=this.manager)==null||e.update(),(o=this.room)==null||o.enableSmall(!1))}listenDeviceChange(){Pc&&!Pc.listeners("videoInputRemoved").includes(this.handleCameraRemoved)&&Pc.on("videoInputRemoved",this.handleCameraRemoved,this)}handleCameraRemoved(e){return KA(this,null,function*(){if(e.deviceId===this.deviceId){let o=this.recaptureMode===1;if(this.log.warn("RecaptureMode: ".concat(HK[this.recaptureMode],". Current camera is lost: ").concat(JSON.stringify(e))),this.recaptureMode===0){Jg(this.userId,{eventId:2003,param1:7,streamType:2});let a=yield $p();a[0]?this.recapture(a[0].deviceId):o=!0}o&&Pc.on("videoInputAdded",this.handleCameraAdded,this)}})}handleCameraAdded(e){return KA(this,null,function*(){this.recaptureMode===1&&e.deviceId!==this.deviceId||(Pc.off("videoInputAdded",this.handleCameraAdded,this),this.log.warn("camera added: ".concat(JSON.stringify(e))),this.recapture(e.deviceId))})}encodeFrame(e,o){if(!this.manager)return e;let a=o?8:this.mediaType;return this.manager.encodePipeline.reduceRight((c,d)=>d?d({frame:c,mediaType:a}):c,e)}get enableEncodeFrame(){return!!this.manager&&this.manager.encodePipeline.some(e=>e)}play(e,o){return Je(this.mirror)&&!this.isScreen&&this.setMirror("view"),super.play(e,o)}close(){Pc.off("videoInputAdded",this.handleCameraAdded,this),Pc.off("videoInputRemoved",this.handleCameraRemoved,this),super.close()}recapture(e){return KA(this,null,function*(){try{yield NI(w_.prototype,this,"recapture").call(this,e)}catch(o){let a=(yield $p()).find(c=>c.deviceId!==e);if(!a)throw o;yield NI(w_.prototype,this,"recapture").call(this,a.deviceId)}})}setContentHint(e){this.mediaTrack&&"contentHint"in this.mediaTrack&&(this.mediaTrack.contentHint!==e&&(this.log.info("setContentHint ".concat(e)),this.mediaTrack.contentHint=e),this.outMediaTrack&&this.outMediaTrack.contentHint!==e&&(this.outMediaTrack.contentHint=e))}setRotation(e){this.manager&&(this.isScreen||Je(e)||e!==this.rotation&&(this.rotation=e,this.manager.rotation=e))}};Ci([VM(function(A){this.setContentHint(A.contentHint||"motion")})],b5.prototype,"capture");var dQ=b5,k5={};Hh(k5,{REPORT_TYPE:()=>_0,buildSSOPackage:()=>AQ,bytes2ms:()=>y0,calculateScaleResolutionDownNumber:()=>w0,concatArrayBuffers:()=>aM,convertObjectNumberToInt:()=>R0,copyProperties:()=>A2,deepClone:()=>zf,deepCloneBasic:()=>Zf,deepMerge:()=>Wh,delay:()=>LC,fibonacci:()=>Kf,formatedTime:()=>a2,getConstructorName:()=>iM,getContainerFromElement:()=>Jb,getEnv:()=>Zx,getFirst16Bits:()=>c2,getInternalVersion:()=>n2,getLast16Bits:()=>T0,getLoggerUrl:()=>Hf,getMediaStreamTrackInfo:()=>Wb,getMuteStateFromFlag:()=>wp,getNetworkType:()=>m0,getNumNetworkType:()=>qf,getReconnectionTimeout:()=>Rp,getStringByteLength:()=>v0,getTestSignalDomain:()=>Xx,getTurnServer:()=>r2,getUint32Version:()=>qb,getValueType:()=>Cg,getViewListFromView:()=>nM,glog:()=>t2,ipv4ToUint32:()=>sM,isArray:()=>wa,isAudioWorkletSupported:()=>i2,isBoolean:()=>Nr,isConstructor:()=>Wf,isEmpty:()=>S0,isFunction:()=>Ra,isLangChinese:()=>Wd,isMediaStreamTrack:()=>Yb,isNumber:()=>bn,isObject:()=>$E,isOverseaSdkAppId:()=>Kd,isPlainObject:()=>lE,isPortrait:()=>Hb,isPromise:()=>jf,isRemoteTrack:()=>Vb,isRotate90Or270:()=>$B,isSetSinkIdSupported:()=>o2,isString:()=>Yn,isUndefined:()=>Je,isVideoMixerOutputTrack:()=>_p,loadImage:()=>rM,loadVideo:()=>g2,ms2bytes:()=>e2,ms2samples:()=>D0,normalizeUrl:()=>jb,performanceNow:()=>ko,promiseAny:()=>oM,samples2ms:()=>xb,setNetworkTypeFromWebRTC:()=>f0,stringify:()=>zd,stringifyIncludeValue:()=>M0,throttlePromise:()=>Kb});var KtA=[-1,-1,1,-1,-1,1,1,1],jtA=[0,0,1,0,0,1,1,1],rL=class k3 extends Zs{constructor(e,o){if(super(),this.context=e,Y(this,"name"),Y(this,"input"),Y(this,"output"),Y(this,"texture"),Y(this,"ctx2d",null),Y(this,"fbo"),Y(this,"width",0),Y(this,"height",0),Y(this,"x",0),Y(this,"y",0),Y(this,"program"),Y(this,"vertexShader"),Y(this,"fragmentShader"),Y(this,"totalFrames",0),Y(this,"dropFrames",0),Y(this,"matchInputSize",!0),Y(this,"texCoordBuffer"),Y(this,"positionBuffer"),Y(this,"lastInfo",{name:"",timestamp:0,totalFrames:0,x:0,y:0,width:0,height:0,fps:0}),Y(this,"cost",0),Y(this,"_canvas",null),Y(this,"_image"),Y(this,"log"),this.context.on("disconnect",this.close,this),this.name=o.name,this.log=o.logger,this.matchInputSize=o.matchInputSize!==!1,this.width=o.width||e.width,this.height=o.height||e.height,this._image=o.image,e instanceof CQ)e.ctx&&o.create2d&&(typeof OffscreenCanvas=="function"&&Zd!==16?this._canvas=new OffscreenCanvas(this.width,this.height):(this._canvas=document.createElement("canvas"),this._canvas.width=this.width,this._canvas.height=this.height),this.ctx2d=this._canvas.getContext("2d"),this._image=this._canvas);else try{let a=e.ctx;this.texCoordBuffer=this.createBuffer(jtA),this.positionBuffer=this.createBuffer(KtA),o.createTexture!==!1&&(this.texture=a.createTexture(),this.useTexture(),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.pixelStorei(a.UNPACK_ALIGNMENT,1)),o.useFbo&&(this.fbo=a.createFramebuffer(),this.useBufferFrame(),this.useTexture(),a.texImage2D(a.TEXTURE_2D,0,a.RGBA,this.width,this.height,0,a.RGBA,a.UNSIGNED_BYTE,null),a.framebufferTexture2D(a.FRAMEBUFFER,a.COLOR_ATTACHMENT0,a.TEXTURE_2D,this.texture,0)),o.useDefaultProgram?this.program=e.defaultProgam:(o.vertexShaderSource||o.fragmentShaderSource)&&(this.vertexShader=o.vertexShaderSource?e.createShader(a.VERTEX_SHADER,o.vertexShaderSource):e.defaultVShader,this.fragmentShader=o.fragmentShaderSource?e.createShader(a.FRAGMENT_SHADER,o.fragmentShaderSource):e.defaultFShader,this.program=e.createProgram(this.vertexShader,this.fragmentShader))}catch(a){this.context.destroy(new ai({code:dt.VIDEO_MANAGER_ERROR,extraCode:3,message:"create video node ".concat(this.name," error ").concat(a.message||a)}))}}get image(){return this._image}set image(e){this._image=e}createFramebuffer(e){let o=this.context.ctx,a=o.createFramebuffer();return o.bindFramebuffer(o.FRAMEBUFFER,a),o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0,o.TEXTURE_2D,e,0),a}connect(e){for(var o=arguments.length,a=new Array(o>1?o-1:0),c=1;c0&&arguments[0]!==void 0?arguments[0]:0;var o;(o=this.output)==null||o.update(e)}disconnect(){for(var e,o=arguments.length,a=new Array(o),c=0;c{d&&(e.activeTexture(e.TEXTURE0+C),e.bindTexture(e.TEXTURE_2D,d))})}useProgram(){this.context.ctx.useProgram(this.program)}useBufferFrame(){let e=this.context.ctx;e.bindFramebuffer(e.FRAMEBUFFER,this.fbo||null)}createBuffer(e){let o=this.context.ctx,a=o.createBuffer();return o.bindBuffer(o.ARRAY_BUFFER,a),o.bufferData(o.ARRAY_BUFFER,new Float32Array(e),o.STATIC_DRAW),a}setTexBuffer(e){let o=this.context.ctx;o.bindBuffer(o.ARRAY_BUFFER,this.texCoordBuffer),o.bufferData(o.ARRAY_BUFFER,new Float32Array(e),o.STATIC_DRAW)}setPosBuffer(e){let o=this.context.ctx;o.bindBuffer(o.ARRAY_BUFFER,this.positionBuffer),o.bufferData(o.ARRAY_BUFFER,new Float32Array(e),o.STATIC_DRAW)}changeBufferData(e,o){let a=this.context.ctx;a.bindBuffer(a.ARRAY_BUFFER,e),a.bufferData(a.ARRAY_BUFFER,new Float32Array(o),a.STATIC_DRAW)}setAttributes(){let e=this.context.ctx;for(var o=arguments.length,a=new Array(o),c=0;c{e.enableVertexAttribArray(C),e.bindBuffer(e.ARRAY_BUFFER,d),e.vertexAttribPointer(C,2,e.FLOAT,!1,0,0)})}getVertexPoint(e,o){return[e/this.width*2-1,o/this.height*2-1]}layout2texCoords(e){return[...this.getVertexPoint(e.x,e.y),...this.getVertexPoint(e.x+e.width,e.y),...this.getVertexPoint(e.x,e.y+e.height),...this.getVertexPoint(e.x+e.width,e.y+e.height)]}resize(e,o){if(this.width!==e||this.height!==o){if(this.width=e,this.height=o,this._canvas&&(this._canvas.width=e,this._canvas.height=o),this.texture&&this.fbo){this.useTexture();let a=this.context.ctx;a.texImage2D(a.TEXTURE_2D,0,a.RGBA,e,o,0,a.RGBA,a.UNSIGNED_BYTE,null)}this.output&&this.output.matchInputSize&&this.output.resize(e,o)}}draw(e,o){this.setAttributes(e||this.positionBuffer,o||this.texCoordBuffer);let a=this.context.ctx;a.drawArrays(a.TRIANGLE_STRIP,0,4)}draw2d(e,o,a,c,d,C,y,S,k){let V=!(Je(C)||Je(y)||Je(S)||Je(k));return!(!this.ctx2d||!e)&&(e instanceof ImageData?(V?this.ctx2d.putImageData(e,o,a,C,y,S,k):this.ctx2d.putImageData(e,o,a),this.emit(k3.RENDER,this.ctx2d.canvas)):(V?this.ctx2d.drawImage(e,C,y,S,k,o,a,c,d):this.ctx2d.drawImage(e,o,a,c,d),this.emit(k3.RENDER,e)),typeof VideoFrame<"u"&&e instanceof VideoFrame&&e.close(),!0)}drawBackGround2d(e){this.ctx2d&&(this.ctx2d.save(),this.ctx2d.fillStyle=e,this.ctx2d.fillRect(0,0,this.width,this.height),this.ctx2d.restore())}getInfo(){var e;let{totalFrames:o,x:a,y:c,width:d,height:C,name:y,cost:S}=this,k=Date.now(),V=(o-this.lastInfo.totalFrames)/((k-this.lastInfo.timestamp)/1e3)|0;return this.lastInfo={totalFrames:o,x:a,y:c,width:d,height:C,timestamp:k,fps:V,name:y,cost:S},mi({parent:(e=this.input)==null?void 0:e.getInfo()},this.lastInfo)}createTexture(e){let o=this.context.ctx,a=o.createTexture();return this.useTextures(a),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MIN_FILTER,o.LINEAR),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MAG_FILTER,o.LINEAR),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),o.pixelStorei(o.UNPACK_ALIGNMENT,1),o.texImage2D(o.TEXTURE_2D,0,o.RGBA,o.RGBA,o.UNSIGNED_BYTE,e),a}};Y(rL,"RENDER","render"),Ci([lc(Zs.INIT,"connected",{sync:!0})],rL.prototype,"connect"),Ci([lc("connected",Zs.INIT,{ignoreError:!0,sync:!0})],rL.prototype,"disconnect"),Ci([lc([],"closed",{sync:!0})],rL.prototype,"close");var AC=rL,WtA=ma(p5(250),VK(()=>performance.now()),AL()),ztA=[0,1,1,1,0,0,1,0],qK=class extends AC{constructor(A,e){super(A,Object.assign({useDefaultProgram:!0,createTexture:!1,name:"destination"},e)),Y(this,"_intervalId",0),Y(this,"_sequence",0),Y(this,"checkGLError",!1),Y(this,"checkVisibilityChange"),A instanceof CQ?this.ctx2d=A.ctx||null:A.available&&e!=null&&e.mirrorUpAndDown&&this.setTexBuffer(ztA)}start(A){this.log.info("".concat(this.name," start render ").concat(A," fps")),Gr.clearTask(this._intervalId),this._intervalId=Gr.run("intervalInWorker",()=>{if(A!==this.context.frameRate&&(Gr.clearTask(this._intervalId),this.start(this.context.frameRate)),this.requestFrame(this._sequence++),this.checkGLError&&this.context instanceof VC){let e=this.context.ctx.getError();e&&this.context.destroy(new ai({code:dt.VIDEO_MANAGER_ERROR,extraCode:5,message:"".concat(this.name," req ").concat(this._sequence," render ").concat(this.totalFrames," faild ").concat(e)}))}},{fps:this.context.frameRate})}render(A){var e;return!((e=this.input)==null||!e.requestFrame(A))&&(this.useProgram(),this.useBufferFrame(),this.useInputTexture(),this.draw(),this.emit(AC.RENDER,this.context._canvas),!0)}addInput(A){for(var e=arguments.length,o=new Array(e>1?e-1:0),a=1;a0&&arguments[0]!==void 0?arguments[0]:0;this.state!=="closed"&&(this._intervalId&&(Gr.clearTask(this._intervalId),this._intervalId=0,A===1&&(this.log.info("".concat(this.name," use requestVideoFrameCallback")),this.checkVisibilityChange=()=>{document.hidden&&(this.start(this.context.frameRate),this.log.info("".concat(this.name," use timer")),document.removeEventListener("visibilitychange",this.checkVisibilityChange))},document.addEventListener("visibilitychange",this.checkVisibilityChange))),this.requestFrame(this._sequence++))}removeInput(A){super.removeInput(A),Gr.clearTask(this._intervalId)}resize(A,e){super.resize(A,e),this.context.setSize(A,e)}close(){super.close(),Gr.clearTask(this._intervalId),document.removeEventListener("visibilitychange",this.checkVisibilityChange)}},KK=class extends qK{constructor(A,e){super(A,e),Y(this,"_videoTrack"),Y(this,"_muteOb"),Y(this,"_closedOb",ca(this,"closed")),Y(this,"_subscription"),Y(this,"_canvasContainer"),Number(oQ)<17&&(this._canvasContainer=document.createElement("div"),this._canvasContainer.style.display="none"),[this._videoTrack]=A.canvas.captureStream().getVideoTracks(),this._muteOb=ca(this._videoTrack,"mute"),ma(ca(this._videoTrack,"ended"),EE(this._closedOb),Bl(()=>{this.context.destroy(new ai({code:dt.VIDEO_MANAGER_ERROR,extraCode:8,message:"video track ended"}))}))}enableCheckMute(){var A;this._subscription=ma(this._muteOb,EE(this._closedOb),e1((A=5e3,e=>{let o=performance.now();ma(WtA,YK(a=>a-o{var e;return!((e=this._videoTrack)==null||!e.muted||document.hidden)}),Bl(()=>{this.context.destroy(new ai({code:dt.VIDEO_MANAGER_ERROR,extraCode:7,message:"video track muted"}))}))}disableCheckMute(){var A;(A=this._subscription)==null||A.dispose()}get videoTrack(){return this._videoTrack}putCanvasIntoDom(){!this.context._canvas||!this._canvasContainer||document.getElementById(this.context._canvas.id)||(this.log.info("".concat(this.name," put canvas to body")),document.body.appendChild(this._canvasContainer),this._canvasContainer.appendChild(this.context._canvas))}render(A){return this.putCanvasIntoDom(),super.render(A)}render2d(A){return this.putCanvasIntoDom(),super.render2d(A)}close(){var A,e;super.close(),(A=this._videoTrack)==null||A.stop(),delete this._videoTrack,(e=this._canvasContainer)==null||e.remove()}},ZtA=class extends KK{render(A){var e;let o=!((e=this.input)==null||!e.requestFrame(A));if(this.context._canvas2d){let a=this.context._canvas2d.getContext("2d");a.clearRect(0,0,this.context._canvas2d.width,this.context._canvas2d.height),a.drawImage(this.context._canvas,0,0,this.context._canvas2d.width,this.context._canvas2d.height),this.emit(AC.RENDER,this.context._canvas2d)}else this.emit(AC.RENDER,this.context._canvas);return o}},XtA=class extends KK{constructor(A,e,o){super(A,{name:"smallDestination",logger:o}),this.resolution=e}resize(A,e){let o,a=A*e,c=this.resolution.width*this.resolution.height;this.log.info("big res: ".concat(A,"*").concat(e," small res: ").concat(this.resolution.width,"*").concat(this.resolution.height," ")),a>c?o=a/c:(this.log.warn("Small stream resolution is not smaller than big stream, which is invalid. big: ".concat(A," * ").concat(e," small: ").concat(this.resolution.width," * ").concat(this.resolution.height)),o=a/19200),super.resize(A/Math.sqrt(o),e/Math.sqrt(o))}},L5=class extends AC{constructor(A,e){super(A,mi({name:"imageSource"},e)),Y(this,"_lastImage"),Y(this,"_totalFrames",0),Y(this,"_autoResize",!1),Y(this,"_canvasRendered"),Y(this,"videoCallbackId",0),Y(this,"waitingFirstFrame",!0),Y(this,"shouldUpdate",!0),this._autoResize=e?.autoResize!==!1,Zd===16&&(this._canvasRendered=EQ(),ma(this._canvasRendered,FK(this._image),$2(o=>o instanceof HTMLCanvasElement?ca(o,"rendered"):xK()),EE(ca(this,"closed")),Bl(()=>{this.update()})))}onFirstFrame(){this.waitingFirstFrame=!1}tryVideoFrameCallback(){if(!this.shouldUpdate)return;let A=this.image;this.videoCallbackId&&A.cancelVideoFrameCallback(this.videoCallbackId),jp()&&!document.hidden&&(this.videoCallbackId=A.requestVideoFrameCallback((e,o)=>{this.waitingFirstFrame&&this.onFirstFrame(),document.hidden||(this._totalFrames=o.presentedFrames,this.update(1))}))}_render(A,e){var o;let{width:a,height:c}=this,{image:d}=this;if(d instanceof HTMLVideoElement){if(this.tryVideoFrameCallback(),{videoWidth:a,videoHeight:c}=d,!a||!c)return!1;d.width=a,d.height=c}else if(d instanceof HTMLImageElement||d instanceof ImageData||d instanceof ImageBitmap){if({width:a,height:c}=d,d!==this._lastImage)this._lastImage=d;else if(a===this.width&&c===this.height)return!0}else d instanceof HTMLCanvasElement||d instanceof OffscreenCanvas?({width:a,height:c}=d,this._lastImage=d):typeof VideoFrame<"u"&&d instanceof VideoFrame&&({displayWidth:a,displayHeight:c}=d,(o=this._lastImage)==null||o.close(),this._lastImage=d);if(!this._autoResize)return!0;if(this.width===a&&this.height===c&&this.totalFrames){if(e){this.useTexture();let C=this.context.ctx;C.texSubImage2D(C.TEXTURE_2D,0,0,0,C.RGBA,C.UNSIGNED_BYTE,d)}}else{if(e){this.useTexture();let C=this.context.ctx;C.texImage2D(C.TEXTURE_2D,0,C.RGBA,C.RGBA,C.UNSIGNED_BYTE,d)}this.resize(a,c)}return!0}get image(){return this._image}set image(A){var e;(e=this._canvasRendered)==null||e.next(A),this._image=A}render(A){return this._render(A,!0)}render2d(A){return this._render(A,!1)}},U5=class extends L5{constructor(A,e,o){super(A,o),this._player=e,this.name="videoPlayerSource",ma(ca(this._player,fo.PLAYER_STATE_CHANGED),EE(ca(this,"closed")),JM(a=>{let{state:c}=a;return c==="PLAYING"}),Bl(()=>{this.tryVideoFrameCallback()}))}get image(){return this._player.element}},I_=class extends U5{get available(){return this._player.isPlaying&&!this.waitingFirstFrame}constructor(A,e,o){super(A,new vo({id:o.name,track:e,muted:!0,container:null,objectFit:"contain",log:o.logger}),o),this.name="videoTrackSource",this._player.play()}replaceTrack(A){this.waitingFirstFrame=!0,this._player.setTrack(A),this._player.play()}close(){super.close(),this._player.stop()}},$tA=class extends AC{constructor(A,e,o){super(A,Qo(mi({name:"textSource"},o),{create2d:!0})),Y(this,"hasChange",!0),Y(this,"content",""),this.ctx2d.textBaseline="top",this.content=e.content||"",e.font&&(this.font=e.font),e.color&&(this.color=e.color)}set font(A){this.ctx2d&&(this.ctx2d.font=A,this.hasChange=!0)}get font(){var A;return((A=this.ctx2d)==null?void 0:A.font)||""}set color(A){this.ctx2d&&(this.ctx2d.fillStyle=A,this.hasChange=!0)}get color(){var A;return((A=this.ctx2d)==null?void 0:A.fillStyle)||""}render2d(A){return!(!this.ctx2d||!this.hasChange)&&(this.ctx2d.clearRect(0,0,this.width,this.height),this.drawMultilineText(0,0),this.hasChange=!1,!0)}render(A){return!1}resize(A,e){if(!this.ctx2d)return;let{color:o,font:a}=this;super.resize(A,e),this.color=o,this.font=a}drawMultilineText(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1.2;if(!this.ctx2d)return;let a=this.ctx2d.measureText(this.content);e+=a.fontBoundingBoxAscent||a.actualBoundingBoxAscent||0;let c=this.font.match(/(\d+)px/),d=(c?parseInt(c[1],10):16)*o,C=this.content.split(` -`);for(let y=0;y0&&arguments[0]!==void 0&&arguments[0];if(this._canvas||(this._canvas=document.createElement("canvas"),this._canvas.id="trtc_".concat(this.name,"_").concat(aL._ids++)),A&&(this._canvas2d=document.createElement("canvas")),this.ctx=this._canvas.getContext("webgl2",bb),!this.ctx)throw new ai({code:dt.VIDEO_MANAGER_ERROR,extraCode:2,message:"webgl2 not supported"});this.defaultVShader=this.createShader(this.ctx.VERTEX_SHADER,` + `,o.onclick=this.onQuestionClick.bind(this);let a=document.createElement("div");a.className=Z,a.innerText="".concat(Wd()?"详情 >":"Detail >"),a.onclick=this.onCollapseClick.bind(this);let l=A.content.firstChild,d=l.querySelector(".".concat(c_));return d.appendChild(a),d.appendChild(o),d.appendChild(e),l}addDiaLog(){yi()||(bt=!0,this._dialogNode=this.createDiaLog(),document.body.appendChild(this._dialogNode),this._dialogNode.onclick=this.onConfirm.bind(this),this._dialogNode.querySelector(".".concat(YM)).onclick=A=>A.stopPropagation(),this._bodyPosition=document.body.style.position,document.body.style.position="fixed",pA.info("show autoplay dialog"),sn.uploadEvent({log:_e}))}deleteDialog(){this._dialogNode&&(document.body.removeChild(this._dialogNode),document.body.style.position=this._bodyPosition,this._dialogNode=null,bt=!1),Oc=null}onConfirm(){pA.warn("confirm clicked, try resume stream"),F.emit(nA.AUTOPLAY_DIALOG_CLICK_CONFIRM),this.deleteDialog()}onCollapseClick(){let A=this._dialogNode.querySelector(".".concat(bA));A.style.visibility="".concat(this._showDetail?"hidden":"visible"),A.style.height="".concat(this._showDetail?0:"fit-content"),this._showDetail=!this._showDetail,this._isCollapseClicked||sn.uploadEvent({log:Fe}),this._isCollapseClicked=!0}onQuestionClick(){window.open(Ti,"_blank"),this._isQuestionClicked||sn.uploadEvent({log:nt}),this._isQuestionClicked=!0}},Oc=null;function HC(){Oc||(Oc=new sa)}var Ci,Ro=class tX extends JC{constructor(e){super(e,YA.VIDEO),Y(this,"stat",{}),Y(this,"_calculateTimeout",-1),Y(this,"viewMirror",!1),Y(this,"objectFit","cover"),Y(this,"container"),Y(this,"canvas"),Y(this,"shouldRenderAlpha",!1),Y(this,"_preSize",{width:0,height:0}),Y(this,"posterImg"),Y(this,"pipWindow"),Y(this,"enterPIPPromise"),Y(this,"_originContainerPosition"),Y(this,"_isResettingSrcObject",!1),Y(this,"_wrapper",null),Y(this,"_useWrapper",!1),Y(this,"_isFirstFrameRenderEmitted",!1),this.mode=e.canvas?1:0,this.container=e.container,this.canvas=e.canvas,Ke(e.viewMirror)||(this.viewMirror=e.viewMirror),Ke(e.objectFit)||(this.objectFit=e.objectFit),this.initializeElement()}get isPlaying(){var e;return!(this._state!=="PLAYING"||this.element&&this.element.paused)&&((e=this.track)==null?void 0:e.readyState)==="live"&&!this.track.muted}initializeElement(){let e=document.createElement(YA.VIDEO);this.track&&this.mode!==2&&(e.srcObject=new MediaStream([this.track])),e.muted=!0,e.setAttribute("id","video_".concat(this.id)),e.setAttribute("style",this.styleAttribute),this.canvas&&this.canvas.setAttribute("style",this.styleAttribute),e.setAttribute("autoplay","autoplay"),e.setAttribute("playsinline","playsinline"),this.element=e,Ha&&(e.poster="data:,"),this._appendToWrapper(),this.bindElementEvents(),this.calculateStat(),this._bindFirstFrameRenderEvent(e)}_bindFirstFrameRenderEvent(e){let o=()=>{if(this._isFirstFrameRenderEmitted)return;this._isFirstFrameRenderEmitted=!0;let a=e.videoWidth||0,l=e.videoHeight||0;this._log.info("first frame render: ".concat(a,"x").concat(l)),this.emit(yo.FIRST_FRAME_RENDER,{width:a,height:l})};typeof e.requestVideoFrameCallback=="function"?e.requestVideoFrameCallback(o):e.addEventListener("loadeddata",o,{once:!0})}get styleAttribute(){let e=this._useWrapper?"grid-area:1/1;width:100%;height:100%;object-fit:".concat(this.objectFit,";").concat(this.shouldRenderAlpha?"":"background-color:black",";"):"width:100%;height:100%;object-fit:".concat(this.objectFit,";").concat(this.shouldRenderAlpha?"":"background-color:black",";");return this.viewMirror&&(e+="transform:scaleX(-1);"),e}setLiveMode(e){if(this._useWrapper!==e&&(this._useWrapper=e,this.elementToRender&&this.elementToRender.setAttribute("style",this.styleAttribute),this.container&&this.elementToRender))if(e){let o=this._getOrCreateWrapper();o.insertBefore(this.elementToRender,o.firstChild)}else this.container.appendChild(this.elementToRender),this._cleanupWrapper()}setContainer(e){if(this.container===e)return;let o=this._wrapper,a=this.container;this.container=e,this._pausedRetryCount=_p,this.track&&this.elementToRender&&this._appendToWrapper(),o&&a&&a!==this.container&&o.isConnected&&o.children.length===0&&o.remove()}_getOrCreateWrapper(){if(!this.container)throw new Error("[VideoPlayer] container is required");let e=this.container.querySelector("[data-trtc-video-wrapper]");return e||(e=document.createElement("div"),e.setAttribute("data-trtc-video-wrapper","true"),e.style.cssText="display:grid;width:100%;height:100%;",this.container.appendChild(e)),this._wrapper=e,e}_appendToWrapper(e){let o=e??this.elementToRender;if(this.container&&o)if(this._useWrapper){let a=this._getOrCreateWrapper();a.insertBefore(o,a.firstChild)}else this.container.appendChild(o)}bindElementEvents(){let e=super.bindElementEvents();this.handleElementEvent=this.handleElementEvent.bind(this),this.handleFullscreenChange=this.handleFullscreenChange.bind(this),this.handleVolumeChange=this.handleVolumeChange.bind(this),e&&e.add(YA.ENTER_PICTURE_IN_PICTURE,this.handleElementEvent).add(YA.LEAVE_PICTURE_IN_PICTURE,this.handleElementEvent).add(YA.RESIZE,this.handleElementEvent),this.element&&(this.element.addEventListener(YA.FULLSCREEN_CHANGE,this.handleFullscreenChange),this.element.addEventListener("webkitbeginfullscreen",this.handleFullscreenChange),this.element.addEventListener("webkitendfullscreen",this.handleFullscreenChange),this.element.addEventListener("volumechange",this.handleVolumeChange))}handleTrackEvent(e){var o;return e.type===YA.MUTE&&((o=this.stat)!=null&&o.fps&&(this.stat.fps=0),this.isFullscreen()&&this.resetSrcObjectToReplay()),super.handleTrackEvent(e)}handleFullscreenChange(){this.isFullscreen()?(this._log.info("enter fullscreen"),this.emit(yo.ENTER_FULL_SCREEN)):(this._log.info("leave fullscreen"),this.emit(yo.LEAVE_FULL_SCREEN))}handleVolumeChange(){var e;(this.isPictureInPicture()||this.isFullscreen())&&this.emit(yo.VOLUME_CHANGE,{muted:(e=this.element)==null?void 0:e.muted})}handleElementEvent(e){var o,a,l,d,h,y;if(this.mode===2)return;super.handleElementEvent(e);let S=e.type,k=this.isPictureInPicture(),V=this.isFullscreen(),J=e.isTrusted&&(k&&Bg||V);if(S===YA.PLAYING&&J&&!this._isResettingSrcObject&&(this._log.warn("user resume in ".concat(V?"fullscreen":"pip")),this.emit(yo.USER_RESUME_IN_PIP_OR_FULL_SCREEN)),S===YA.PAUSE&&(J&&(this._log.warn("user pause in ".concat(V?"fullscreen":"pip")),this.emit(yo.USER_PAUSE_IN_PIP_OR_FULL_SCREEN)),this.container&&!this.container.isConnected&&(this._log.warn("".concat(this.kind," player has been remove, element ID: ").concat(this.container.id)),OC(500).then(()=>{var cA;(cA=this.container)!=null&&cA.isConnected&&(this._pausedRetryCount=_p,this._log.info("view container ".concat(this.container.id," is in dom, reset pausedRetryCount")))})),this._pausedRetryCount>0&&!yi()&&!this.isPausedByUserCall&&!J&&(this._log.info("[".concat(_p-this._pausedRetryCount+1,"/").concat(_p,"] ").concat(this.kind," player auto resume when paused")),this.doResume(),this._pausedRetryCount--),eg&&!J&&(this._interval=Gr.run("timeout",()=>{this.element&&this._state==="PAUSED"&&!this.isPausedByUserCall&&this.doResume()},{delay:3e3})),this.stat.fps&&(this.stat.fps=0)),this.viewMirror&&this.element){let cA=this.element.style.transform;S===YA.ENTER_PICTURE_IN_PICTURE?this.element.style.transform=cA.replace("scaleX(-1)",""):S===YA.LEAVE_PICTURE_IN_PICTURE&&!cA.includes("scaleX")&&(this.element.style.transform="".concat(cA," scaleX(-1)"))}S===YA.RESIZE&&(this._preSize.height!==((o=this.element)==null?void 0:o.videoHeight)||this._preSize.width!==((a=this.element)==null?void 0:a.videoWidth))&&(this._log.info("video size changed to ".concat((l=this.element)==null?void 0:l.videoWidth,"x").concat((d=this.element)==null?void 0:d.videoHeight)),this._preSize.height=((h=this.element)==null?void 0:h.videoHeight)||0,this._preSize.width=((y=this.element)==null?void 0:y.videoWidth)||0,this.emit(yo.RESIZE,{newWidth:this._preSize.width,newHeight:this._preSize.height})),S===YA.LEAVE_PICTURE_IN_PICTURE&&(this._log.warn("exit pip"),this.isPaused&&!this.isPausedByUserCall&&(this._log.warn("resume after exit pip"),this.doResume()),this.resetSrcObjectToReplay(),this.emit(yo.LEAVE_PICTURE_IN_PICTURE)),S===YA.ENTER_PICTURE_IN_PICTURE&&this.emit(yo.ENTER_PICTURE_IN_PICTURE)}resetSrcObjectToReplay(){Ha&&ay&&this.isPlayCalled&&this.element&&this.track&&!this.isPausedByUserCall&&(this._log.warn("reset srcObject to replay for android chromium"),this._isResettingSrcObject=!0,this.element.srcObject=new MediaStream([this.track]),this.element.play().catch(e=>{this._log.warn("play failed after reset srcObject",e)}).finally(()=>{this._isResettingSrcObject=!1}))}setCanvas(e){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;var a,l;this.canvas!==e&&((a=this.canvas)==null||a.remove(),e?.setAttribute("style",this.styleAttribute),this.canvas=e,this.mode=e?o:0,this.mode===2&&this.setTrack(e.captureStream().getVideoTracks()[0]),e?((l=this.element)==null||l.remove(),this._appendToWrapper(e)):this.element&&this._appendToWrapper(this.element))}setAttr(e){let o=Object.assign({autoplay:"autoplay",playsinline:"playsinline",muted:!0},e);o.style=Object.assign({width:"100%",height:"100%"},o.style),super.setAttr(o)}get mirror(){return this.viewMirror}setRect(e,o){this.elementToRender&&(this.elementToRender.style.width="".concat(e,"px"),this.elementToRender.style.height="".concat(o,"px"))}setViewMirror(e){this.elementToRender&&(this.elementToRender.style.transform=e?"scaleX(-1)":""),this.viewMirror=e}setObjectFit(e){this.elementToRender&&(this.elementToRender.style.objectFit="".concat(e)),this.objectFit=e}setPoster(e){let o=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return new Promise(a=>{if(!this.element||(this._log.info("setPoster",e.slice(0,10)),e===""?this.element.removeAttribute("poster"):this.element.poster=e,!o||!Bg&&!or))return a();if(e==="")return this.removePosterImg(),a();if(this.posterImg)return a();let l=document.createElement("img");l.src=e;let d=window.getComputedStyle(this.element),h=d.objectFit||this.objectFit,y=1;if(this._useWrapper){let S=parseInt(d.zIndex,10);isNaN(S)||(y=S+1)}l.style.cssText=this._useWrapper?"grid-area:1/1;z-index:".concat(y,";width:100%;height:100%;object-fit:").concat(h,";"):"position:absolute;top:0;left:0;width:100%;height:100%;object-fit:".concat(h,";"),l.onload=()=>WA(this,null,function*(){try{l.decode&&(yield l.decode()),this.container&&!this._useWrapper&&window.getComputedStyle(this.container).position==="static"&&(this._originContainerPosition=this.container.style.position,this.container.style.position="relative"),this.posterImg=l;let S=this._useWrapper?this._wrapper:this.container;S?.appendChild(l),uM()&&Zd<=17&&this.elementToRender&&(this.elementToRender.style.visibility="hidden")}catch(S){this._log.warn("decode poster image error",S)}return a()}),l.onerror=()=>(this._log.warn("load poster image error"),a())})}removePosterImg(){this.posterImg&&(uM()&&Zd<=17&&this.elementToRender&&(this.elementToRender.style.visibility=""),this.posterImg.remove(),URL.revokeObjectURL(this.posterImg.src),!this._useWrapper&&this.container&&!Ke(this._originContainerPosition)&&this.container.style.position==="relative"&&(this.container.style.position=this._originContainerPosition),delete this.posterImg)}get hasPoster(){var e;return!!this.posterImg||!((e=this.element)==null||!e.getAttribute("poster"))}pause(){let e=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];return WA(this,null,function*(){GI(tX.prototype,this,"pause").call(this),!this.isPictureInPicture()&&!this.hasPoster&&(ay||e&&(or||Bg))&&(yield this.setPoster(this.getVideoFrame(),!0))})}resume(){let e=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return super.resume(e).then(()=>{var o;(this.posterImg||(o=this.element)!=null&&o.poster)&&this.setPoster("",!0)})}doResume(){let e=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return this.isPaused&&e&&this.element&&this.track&&ay&&this.track.kind==="video"&&(this.element.srcObject=new MediaStream([this.track])),super.doResume()}stop(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;var o;this.isPictureInPicture()&&this.exitPictureInPicture().catch(a=>{}),this.isFullscreen()&&this.exitFullscreen().catch(a=>{}),this.element&&(this.element.removeEventListener(YA.FULLSCREEN_CHANGE,this.handleFullscreenChange),this.element.removeEventListener("webkitbeginfullscreen",this.handleFullscreenChange),this.element.removeEventListener("webkitendfullscreen",this.handleFullscreenChange),this.element.removeEventListener("volumechange",this.handleVolumeChange)),this._isFirstFrameRenderEmitted=!1,super.stop(e),(o=this.canvas)==null||o.remove(),this.removePosterImg(),this._useWrapper&&this._cleanupWrapper()}_cleanupWrapper(){this._wrapper&&this._wrapper.children.length===0&&this._wrapper.remove(),this._wrapper=null}play(e){if(Ke(e?.isLiveStream)||this.setLiveMode(e.isLiveStream),this.element){if(this.elementToRender&&this.container)if(this._useWrapper){let o=this._getOrCreateWrapper();this.elementToRender.parentElement!==o&&o.insertBefore(this.elementToRender,o.firstChild)}else this.elementToRender.parentElement!==this.container&&this.container.append(this.elementToRender)}else this.initializeElement();return this.mode===2?Promise.resolve():super.play()}get elementToRender(){return this.canvas||this.element}setTrack(e){e!==this.track&&(this.unbindTrackEvents(),this.track=e,this.emit(yo.MEDIA_TRACK_CHANGED,e),e!==null&&(this.bindTrackEvents(),this.element&&this.mode!==2&&(this.element.srcObject=new MediaStream([e]),this.element.remove()),this._appendToWrapper()))}getVideoFrame(){if(this.canvas)return this.canvas.toDataURL("image/png");if(!this.element)return"";let e=document.createElement("canvas");return e.width=this.element.videoWidth,e.height=this.element.videoHeight,e.getContext("2d").drawImage(this.element,0,0),e.toDataURL("image/png")}getElement(){return this.element}calculateStat(){try{if(Zp()&&this.element&&this._calculateTimeout<0){let e=0,o=null,a=(l,d)=>{this.stat.width=d.width,this.stat.height=d.height,o&&(this.stat.fps=Math.round((d.presentedFrames-o.presentedFrames)/(l-e)*1e3)),e=l,o=d,this._calculateTimeout=-1,this.element&&(this._calculateTimeout=setTimeout(()=>{var h;return(h=this.element)==null?void 0:h.requestVideoFrameCallback(a)},2e3))};this.element.requestVideoFrameCallback(a)}}catch(e){this._log.warn("init stat failed",e)}}enterFullscreen(){return WA(this,null,function*(){let e=this.elementToRender;if(!e)throw this._log.warn("no element to render, cannot enter fullscreen"),new Error("No element available for fullscreen");if(eg&&this.isPictureInPicture()){this._log.info("exit pip before entering fullscreen");try{yield this.exitPictureInPicture()}catch(o){this._log.warn("exit pip failed before fullscreen:",o)}}try{if(e.requestFullscreen)yield e.requestFullscreen();else if(e.webkitRequestFullscreen)yield e.webkitRequestFullscreen();else if(e.webkitEnterFullscreen)yield e.webkitEnterFullscreen();else if(e.mozRequestFullScreen)yield e.mozRequestFullScreen();else{if(!e.msRequestFullscreen)throw new Error("Fullscreen API not supported");yield e.msRequestFullscreen()}this._log.info("entered fullscreen mode")}catch(o){throw this._log.error("failed to enter fullscreen:",o),o}})}exitFullscreen(){return WA(this,null,function*(){try{if(!this.isFullscreen())return;if(document.exitFullscreen)yield document.exitFullscreen();else if(document.webkitExitFullscreen)yield document.webkitExitFullscreen();else if(document.mozCancelFullScreen)yield document.mozCancelFullScreen();else{if(!document.msExitFullscreen)throw new Error("Exit fullscreen API not supported");yield document.msExitFullscreen()}this._log.info("exited fullscreen mode")}catch(e){throw this._log.error("failed to exit fullscreen:",e),e}})}isFullscreen(){let e=this.elementToRender;return!!e&&(this.element&&this.element.webkitDisplayingFullscreen?!this.isPictureInPicture():(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)===e)}toggleFullscreen(){return WA(this,null,function*(){this.isFullscreen()?yield this.exitFullscreen():yield this.enterFullscreen()})}enterPictureInPicture(){return WA(this,null,function*(){this.enterPIPPromise=this._enterPictureInPicture();try{return yield this.enterPIPPromise}finally{delete this.enterPIPPromise}})}_enterPictureInPicture(){return WA(this,null,function*(){try{if(!this.element)throw new Error("No video element available for pip");if(this.canvas&&this.mode!==1)throw new Error("pip is not supported for canvas-only mode");let{element:e}=this;if(e.requestPictureInPicture){this._log.info("requestPictureInPicture");let o=yield e.requestPictureInPicture();return this.pipWindow=o,this._log.info("entered pip mode"),this.elementToRender===this.canvas&&(this.canvas.remove(),this._appendToWrapper(this.element)),o}if(e.webkitSetPresentationMode)return this._log.info("webkitSetPresentationMode"),yield e.webkitSetPresentationMode("picture-in-picture"),this._log.info("entered pip mode (webkit)"),{};throw new Error("pip API not supported")}catch(e){throw this._log.error("failed to enter pip:",e.name,e.message),e}})}exitPictureInPicture(){return WA(this,null,function*(){var e;try{if(!this.isPictureInPicture())return;if(delete this.pipWindow,document.pictureInPictureElement&&document.exitPictureInPicture)yield document.exitPictureInPicture(),this.elementToRender===this.canvas&&((e=this.element)==null||e.remove(),this._pausedRetryCount=_p,this._appendToWrapper(this.canvas)),this._log.info("exited pip mode");else{if(!this.element||!this.element.webkitSetPresentationMode)throw new Error("Exit pip API not supported or not in PiP mode");yield this.element.webkitSetPresentationMode("inline"),this._log.info("exited pip mode (webkit)")}}catch(o){throw this._log.error("failed to exit pip:",o),o}})}isPictureInPicture(){if(!this.element)return!1;let{element:e}=this;return document.pictureInPictureElement?document.pictureInPictureElement===e:!!e.webkitPresentationMode&&e.webkitPresentationMode==="picture-in-picture"}togglePictureInPicture(){return WA(this,null,function*(){this.isPictureInPicture()?yield this.exitPictureInPicture():yield this.enterPictureInPicture()})}};function Vg(A,e){return WA(this,null,function*(){if(!A.audioWorklet)return Promise.reject("audioWorklet is not supported");try{yield A.audioWorklet.addModule(e),pA.info("worklet addModule success")}catch(o){throw pA.info("worklet addModule catch error. ".concat(o.message)),o}})}typeof AudioContext<"u"?Ci=AudioContext:typeof webkitAudioContext<"u"?Ci=webkitAudioContext:typeof mozAudioContext<"u"&&(Ci=mozAudioContext);var Un,hu=1500,$d=-1,Am=0,rd=-1,FI=!1,X2=0,l_=-1,tL=-1;(function A(){try{if(Un)return;(Un=new Ci({sampleRate:48e3})).onstatechange=()=>{pA.info("context state: ".concat(Un.state).concat(Un.state!=="running"?" visibilityState: ".concat(document.visibilityState):"")),I_()},clearTimeout($d)}catch(e){pA.error("initAudioContext failed: ".concat(e," typeof AudioContextClass: ").concat(typeof Ci)),$d=setTimeout(A,1e3)}})();var I_=()=>{Un.state==="suspended"?(Am=ko(),rd===-1&&(rd=setTimeout(()=>{Un.state==="suspended"&&(FI=!0,F.emit("155",{isSuspended:!0}))},hu)),iL(),document.addEventListener("click",I_)):Un.state==="interrupted"?iL():(Am&&(si.addNumber({key:507800,value:ko()-Am,split:[0,500,1e3,1500,2e3,3e3,4e3,5e3,1e4,3e4],max:6e4}),Am=0),rd!==-1&&(clearTimeout(rd),rd=-1,FI&&(FI=!1,F.emit("155",{isSuspended:!1}))),document.removeEventListener("visibilitychange",I_),document.removeEventListener("click",I_))},HK=0,qK=-1;function iL(){return new Promise((A,e)=>{if(Un.state==="running")return A();Date.now()-HK<1e3?(clearTimeout(qK),qK=setTimeout(()=>{HK=Date.now(),Un.resume().then(A,e)},1e3)):(clearTimeout(qK),HK=Date.now(),Un.resume().then(A,e))}).catch(A=>{pA.warn("context resume failed: ".concat(A)),document.addEventListener("visibilitychange",I_)})}document.addEventListener("click",I_);var OI=A=>Un,PI=class{constructor(A){this.name=A,Y(this,"node"),Y(this,"node2"),Y(this,"pre",new Set),Y(this,"next",new Set),Y(this,"context"),Y(this,"connectedNodes",new Set),Y(this,"nextInputChannelMap",new Map),Y(this,"_channelCount",1)}get channelCount(){return this._channelCount}set channelCount(A){this._channelCount=A,this.setChannelCount(this.node,A),this.setChannelCount(this.node2,A),this.next.forEach(e=>e.channelCount=A)}setChannelCount(A,e){!A||A instanceof ScriptProcessorNode||(A.channelCountMode="explicit",A.channelCount=e||this.channelCount||1)}setContext(A){this.context=A,this.node&&A.addMixWeight()}removeContext(){var A;this.node&&((A=this.context)==null||A.reduceMixWeight()),delete this.context}replaceNode(A){var e;if(A!==this.node)try{this.node?this._disconnect():(e=this.context)==null||e.addMixWeight(),this.node=A,this.setChannelCount(this.node),this.preNodeReconnect(),this.reconnect()}catch(o){pA.error(o)}}setNode(A,e){var o;if(!this.node)try{(o=this.context)==null||o.addMixWeight(),this.node=A,this.setChannelCount(this.node),e&&(this.node2=e,this.setChannelCount(this.node2)),this.preNodeReconnect(),this.reconnect(),si.addSuccessEvent({key:502701})}catch(a){pA.error(a),si.addFailedEvent({key:502701,error:a})}}deleteNode(){var A;if(this.node)try{this._disconnect(),delete this.node,delete this.node2,(A=this.context)==null||A.reduceMixWeight(),this.preNodeReconnect(),si.addSuccessEvent({key:502702})}catch(e){pA.error(e),si.addFailedEvent({key:502702,error:e})}}preNodeReconnect(){this.pre.forEach(A=>{A.node?A.reconnect():A.preNodeReconnect()})}connectNext(A){this.next.forEach(e=>{let o=this.nextInputChannelMap.get(e);A._connect(e.node,o)||e.connectNext(A)})}_connect(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return!(!this.node||!A)&&((this.node2||this.node).connect(A,0,e),this.connectedNodes.add(A),!0)}_disconnect(){this.connectedNodes.forEach(A=>{var e;return(e=this.node2||this.node)==null?void 0:e.disconnect(A)}),this.connectedNodes.clear()}reconnect(){this._disconnect(),this.connectNext(this)}pipeTo(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return this.next.add(A),A.pre.add(this),this.nextInputChannelMap.set(A,e),A}},KeA=class extends PI{constructor(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:256;super(),this.fftSize=A,Y(this,"dataArray",new Uint8Array(0))}setNode(A){A.fftSize=this.fftSize,this.dataArray=new Uint8Array(A.frequencyBinCount),super.setNode(A)}getByteTimeDomainData(){var A;return(A=this.node)==null||A.getByteTimeDomainData(this.dataArray),this.dataArray}get level(){var A;return(A=this.node)==null||A.getByteTimeDomainData(this.dataArray),Math.max(...this.dataArray)/128-1}get timeDomainPathData(){let A=this.getByteTimeDomainData(),e=0,o=0,a="M".concat(e,",").concat(o);for(let l=0;l0&&arguments[0]!==void 0?arguments[0]:1;this.mixWeight+=A,this.mixWeight-1==A+1>>1&&this.mixOnChange()}reduceMixWeight(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;this.addMixWeight(-A)}close(){this.inputs.forEach(A=>A.remove())}get mixTrack(){return this.destination.stream.getAudioTracks()[0]}},m5=new WeakMap;function $2(A){try{let e=m5.get(A);if(e)return e;let o=OI();if(A instanceof HTMLAudioElement)e=o.createMediaElementSource(A);else{if(!(A instanceof MediaStreamTrack))return A;e=o.createMediaStreamSource(new MediaStream([A]))}return m5.set(A,e),e}catch(e){if(!(or&&e instanceof Error&&e.name==="NotSupportedError"))throw e;pA.warn(e)}}var A1=class am{constructor(e){Y(this,"_volume",0),Y(this,"_volumeDb",0),Y(this,"_log"),Y(this,"_scriptProcessorNode",null),Y(this,"_audioWorkletNode",null),Y(this,"_interval",200),Y(this,"ready",this.preload());let{log:o}=e;this._log=o,F.on(nA.AUDIO_LEVEL_INTERVAL,this.handleAudioLevelInterval,this)}static get isRunning(){return Date.now()-am.lastMessageTime<2e3}get node(){return this._audioWorkletNode||this._scriptProcessorNode}preload(){if(!am.workletReady){let e='class VolumeMeterWorklet extends AudioWorkletProcessor{constructor(){super(),this.volume=0,this.intervalTime=200,this.tick=200,this.isStop=!1,this.cache=[],this.sentFirstInfo1=!1,this.unmute=!1,this.port.onmessage=t=>{var e=t.data;switch(e.name){case"chunk":this.cache.push(...e.data),this.sentFirstInfo1||(this.port.postMessage({cl:e.data.length}),this.sentFirstInfo1=!0);break;case"setIntervalTime":this.intervalTime=e.intervalTime;break;case"unmute":this.unmute=!0;break;case"stop":this.isStop=!0}}}process(t,s){t=t[0],s=s[0];if(t||s){if(this.isStop)return!1;var i=s&&s[0]?s[0].length:0,h=this.cache.length,a=(it+e*e,0)/a.length;this.volume=e,this.tick-=a.length,this.tick<0&&(this.tick+=this.intervalTime/1e3*sampleRate,this.port.postMessage({volume:this.volume,volumeDb:Math.max(10*Math.log10(s)+100,0)/100,cacheLen:h,outputLen:i}))}}return!0}}registerProcessor("volume-meter",VolumeMeterWorklet);';am.workletReady=Vg(am.audioContext,URL.createObjectURL(new Blob([e],{type:"application/javascript"})))}return am.workletReady.then(()=>this.initAudioWorklet()).catch(e=>(this._log.error("volumeMeter preload error: ".concat(e)),this.initScriptProcessor()))}initAudioWorklet(){if(!this._audioWorkletNode)try{this._audioWorkletNode=new AudioWorkletNode(am.audioContext,"volume-meter");let e=!1;this._audioWorkletNode.port.onmessage=o=>{am.lastMessageTime=Date.now(),this._volume=o.data.volume||0,this._volumeDb=o.data.volumeDb||0,!e&&o.data.cacheLen&&o.data.outputLen&&(this._log.warn("worklet play success"),e=!0)},this.handleAudioLevelInterval({interval:this._interval})}catch(e){this._log.error("volumeMeter init audio worklet error: ".concat(e)),sn.logFailedEvent({userId:this._log.userId,eventType:Ja.LOAD_WORKLET,error:e}),this.initScriptProcessor()}}initScriptProcessor(){if(!this._scriptProcessorNode)try{this._scriptProcessorNode=OI().createScriptProcessor(2048,1,1),this._scriptProcessorNode.onaudioprocess=e=>{am.lastMessageTime=Date.now();let o=e.inputBuffer.getChannelData(0),a=0;for(let l=0;l>2);A.copyTo(o,{planeIndex:0}),this.node.port.postMessage({name:"chunk",data:o},[o.buffer]),A.close()}}},e1=f5,WeA=gc(jl(),1),D5=A=>e=>e.deviceId===A,KK=class{constructor(A,e){Y(this,"kind"),Y(this,"type"),Y(this,"devices",[]),this.kind=A,this.type=e}update(A,e){let o=A.filter(a=>a.kind==="".concat(this.kind).concat(this.type.toLocaleLowerCase()));this.devices.length===1&&oL(this.devices[0])||e&&(o.forEach(a=>{if(a.deviceId&&!this.devices.find(D5(a.deviceId))){let l="".concat(this.kind).concat(this.type,"Added");pA.warn("".concat(l,": ").concat(JSON.stringify(a))),e.emit(l,a)}}),this.devices.forEach(a=>{if(a.deviceId&&!o.find(D5(a.deviceId))){let l="".concat(this.kind).concat(this.type,"Removed");pA.warn("".concat(l,": ").concat(JSON.stringify(a))),e.emit(l,a)}})),this.devices=o}hasDevice(A){return!!this.devices.find(e=>e.deviceId===A)}},zeA=class extends WeA.EventEmitter{constructor(){super(),Y(this,"audioInputs",new KK(YA.AUDIO,"Input")),Y(this,"videoInputs",new KK(YA.VIDEO,"Input")),Y(this,"audioOutputs",new KK(YA.AUDIO,"Output")),this.init(),navigator.mediaDevices&&(navigator.mediaDevices.addEventListener&&navigator.mediaDevices.addEventListener("devicechange",()=>this.update()),"ondevicechange"in navigator.mediaDevices||Gr.run("interval",()=>{this.update()},{delay:1e4}))}init(){t1().then(A=>{this.audioInputs.update(A),this.videoInputs.update(A),this.audioOutputs.update(A)})}update(){return WA(this,arguments,function(){var A=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return function*(){let o=yield t1(e);return A.audioInputs.update(o,A),A.videoInputs.update(o,A),A.audioOutputs.update(o,A),A}()})}hasBlueTooth(){var A;if(1e3*((A=OI())==null?void 0:A.outputLatency)>150)return!0;let e=["bluetooth","air","wireless","bt","tws","buds","headset","headphone"];return this.audioOutputs.devices.some(o=>e.some(a=>o.label.toLowerCase().includes(a)))||this.audioInputs.devices.some(o=>e.some(a=>o.label.toLowerCase().includes(a)))}},Pc=r0||n0?null:new zeA;function oL(A){return A.deviceId===A.groupId&&A.groupId===""}function t1(){return WA(this,arguments,function(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return function*(){if(Cu()||!Lk())return[];let e=yield navigator.mediaDevices.enumerateDevices();if(A!==0){let o={audio:!1,video:!1};if(e.forEach(a=>{oL(a)&&(a.kind===YA.AUDIO_INPUT?o.audio=!0:a.kind===YA.VIDEO_INPUT&&(o.video=!0))}),A===2&&(o.audio=!1),A===1&&(o.video=!1),o.audio||o.video){let a;try{a=yield navigator.mediaDevices.getUserMedia(o),o.audio&&iL()}catch(l){pA.debug("capture before getDevices failed: ",l)}e=yield navigator.mediaDevices.enumerateDevices(),a?.getTracks().forEach(l=>l.stop())}}return e.map((o,a)=>{let l={kind:o.kind,deviceId:o.deviceId,groupId:o.groupId,label:o.label||"".concat(o.kind,"_").concat(a)};return o.deviceId.length>0&&jK.add("".concat(o.deviceId,"_").concat(o.kind)),o.getCapabilities&&(l.getCapabilities=()=>o.getCapabilities()),l})}()})}function em(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return Pc.update(A?1:0).then(e=>e.audioInputs.devices)}function tm(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return Pc.update(A?2:0).then(e=>e.videoInputs.devices)}var S5=!1;function HM(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return WA(this,null,function*(){return(eg||Bg)&&(A=!1),Pc.update(A?1:0).then(e=>e.audioOutputs.devices)})}var jK=new Set;function M5(A,e){return WA(this,null,function*(){let o=(yield em()).find(a=>a.deviceId===AM);return!e&&o?.groupId===A||o?.groupId===A&&o.label===e})}var i1,ZeA=class extends Q5{constructor(A){super(),this.log=A,Y(this,"volumeMeter"),Y(this,"volumeMeterAfter3A"),Y(this,"volumeDestination"),Y(this,"analyser",new KeA),this.volumeMeter=new y5({log:this.log}),this.volumeMeterAfter3A=new y5({log:this.log}),this.volumeDestination=new PI,this.volumeMeter.pipeTo(this.volumeDestination)}destroy(){this.gain.deleteNode(),this.volumeMeter.deleteNode(),this.analyser.deleteNode(),this.source.deleteNode(),this.destination.deleteNode(),this.volumeDestination.deleteNode()}},WK=class iX extends JC{constructor(e){super(e,YA.AUDIO),Y(this,"_outputDeviceId"),Y(this,"_floatVolume",1),Y(this,"_destination"),Y(this,"pipeline"),Y(this,"volumeMeterMode","worklet"),Y(this,"enableVolumeControlInIOS"),this.enableVolumeControlInIOS=e.enableVolumeControlInIOS,this.mode=0,e.url&&(this.url=e.url),this.pipeline=new ZeA(this._log)}setTrack(e){}get duration(){var e;return Math.floor(1e3*(((e=this.element)==null?void 0:e.duration)||0))}get currentTime(){var e;return Math.floor(1e3*(((e=this.element)==null?void 0:e.currentTime)||0))}set currentTime(e){this.element&&(this.element.currentTime=e/1e3)}getMediaStream(){return this.pipeline.stream||(this.track?new MediaStream([this.track]):null)}initializeElement(e){if((LI==="15.2"||LI==="15.3"||LI==="15.4")&&this.muted)return void this._log.info("audioElement is muted.");this._log.info("audio player initializeElement");let o=i1||new Audio;o.setAttribute("autoplay","autoplay"),o.srcObject=this.getMediaStream(),o.muted=this.muted,this.url&&(o.crossOrigin="anonymous",o.src=this.url),this.element=o,this.setVolume(kn(e)?e/100:this._floatVolume),o===i1&&(i1=void 0),this.options.enableTimeupdateEvent&&(this.element.ontimeupdate=()=>this.emit(yo.TIME_UPDATE,this.currentTime)),this.bindElementEvents()}play(e){return WA(this,null,function*(){if(this.track||this.url){try{!this.pipeline.source.node&&this.track&&this.pipeline.replaceSource(this.track),this.element||this.initializeElement(e?.volume),this._outputDeviceId&&(yield this.setSinkId(this._outputDeviceId)),this.volumeMeterMode==="worklet"?(this.pipeline.volumeMeter.init(),this.pipeline.volumeMeterAfter3A.init()):this.volumeMeterMode==="analyser"&&this.pipeline.analyser.setNode(OI().createAnalyser()),function(){WA(this,null,function*(){try{S5||(S5=!0,pA.info("speakers:".concat((yield HM()).map(o=>" ".concat(o.deviceId.slice(0,8),": ").concat(o.label)))))}catch{}})}()}catch(o){throw this._log.warn("audio play error: ".concat(o)),gy(LI,"18.7",!0)&&this.bindAutoPlayEvent(),o}return GI(iX.prototype,this,"play").call(this)}})}stop(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;this.pipeline.destroy(),super.stop(e)}setVolume(e){this._floatVolume=e,this.element&&(this.element.volume=e)}setSinkId(e){return WA(this,null,function*(){var o,a;this._outputDeviceId!==e&&(this._outputDeviceId=e),this.element&&this.element.sinkId!==e&&(yield(a=(o=this.element).setSinkId)==null?void 0:a.call(o,e))})}get useDestination(){return!!this.pipeline.stream}setLoop(e){this.element&&(this.element.loop=e)}getAudioLevel(){return this.pipeline.volumeMeter.getCalculatedVolume()}getInternalAudioLevel(){return this.pipeline.volumeMeter.getInternalAudioLevel()}getInternalAudioLevelAfter3A(){return this.pipeline.volumeMeterAfter3A.getInternalAudioLevel()}},XeA=class extends WK{setTrack(A){this.track!==A&&(this.unbindTrackEvents(),this.track=A,this.emit(yo.MEDIA_TRACK_CHANGED,A),A&&(this.bindTrackEvents(),this.element&&(this.element.srcObject=new MediaStream([A]))))}},v5=class extends WK{constructor(A){super(A),Y(this,"_sourceElement"),Y(this,"_output",new PI),this.pipeline.source.pipeTo(this.pipeline.gain),this.pipeline.gain.pipeTo(this.pipeline.volumeMeter).pipeTo(this._output),this.pipeline.gain.pipeTo(this.pipeline.destination)}setOutput(){this.mode=1,this._output.setNode(OI().destination)}write(A){this.pipeline.volumeMeter.write(A)}setTrack(A){var e,o,a;((o=(e=this.element)==null?void 0:e.error)==null?void 0:o.code)!==MediaError.MEDIA_ERR_DECODE&&this.track!==A&&(this.unbindTrackEvents(),this.track=A,this.emit(yo.MEDIA_TRACK_CHANGED,A),A?(this.bindTrackEvents(),this._sourceElement?this._sourceElement.srcObject=new MediaStream([A]):!this.useDestination&&this.element&&(this.element.srcObject=new MediaStream([A])),this.pipeline.source.channelCount=((a=A.getSettings())==null?void 0:a.channelCount)||1,this.pipeline.replaceSource(A)):this.pipeline.source.deleteNode())}setVolume(A){var e;let o=A<=1&&!uM();if(this._floatVolume!==A||!(o&&((e=this.element)==null?void 0:e.volume)===A||!o&&this.pipeline.volume===A))if(this._floatVolume=A,this.useDestination)this.pipeline.setVolume(A),this._log.info("set pipeline volume: ".concat(A));else if(o)this.element?(this._log.info("set element volume: ".concat(A)),this.element.volume=A):this._log.info("set element volume: no element");else{if(uM()){if(!this.enableVolumeControlInIOS)return;(function(){if(!eg||tL!==-1)return;let a=()=>{ko()-X2<500||(Un&&Un.state==="running"&&Un.currentTime===l_&&(pA.warn("context is fake running, auto resume"),Un.suspend().catch(l=>{pA.warn("context suspend failed: ".concat(l))})),l_=Un.currentTime,X2=ko())};tL=setInterval(()=>{a()},2e3),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&a()})})()}if(or&&!this.pipeline.source.node)return void this._log.warn("set pipeline volume failed: no source node");this._log.info("start set pipeline volume: ".concat(A)),this.pipeline.setVolume(A),this.element&&!this._sourceElement&&(this._destination||(this._destination=OI().createMediaStreamDestination()),this.pipeline.destination.setNode(this._destination),Ln(this.element),this._sourceElement=this.element,this._sourceElement.muted=!0,this.element=null,this.play().catch(a=>{this.emit(yo.AUTOPLAY_FAILED,a)}))}}stop(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;this.pipeline.destroy();let e=this._sourceElement||this.element;e&&xp&&(i1=e),this._sourceElement&&(this._sourceElement.srcObject=null,delete this._sourceElement),super.stop(A)}},zK=class extends Zs{constructor(A){let{userId:e,sdkAppId:o,mediaType:a,room:l,PlayerClass:d=a===1?v5:Ro}=A;var h;super(),Y(this,"id",PA()),Y(this,"userId",""),Y(this,"isRemote"),Y(this,"mediaType"),Y(this,"room"),Y(this,"user"),Y(this,"_log"),Y(this,"_inputTrack"),Y(this,"_outputTrack"),Y(this,"isPlayCalled"),Y(this,"container",null),Y(this,"player"),Y(this,"subVideoPlayerMap"),Y(this,"muted",!1),Y(this,"abortCtrl"),Y(this,"objectFit","cover"),Y(this,"mirror"),Y(this,"rotation"),Y(this,"isScreen",!1),Y(this,"manager"),Y(this,"trackSettings"),Y(this,"isFirstVideoFrameEmitted",!1),this.userId=e||"",this.mediaType=a,this._log=pA.createLogger({parent:l?.getLogger(),id:"".concat(this.kind[0],"t"),userId:(h=l||this.room)==null?void 0:h.userId,remoteUserId:this instanceof lL?void 0:this.userId,sdkAppId:o,type:this.mediaType===2?"auxiliary":"main",isLocal:this instanceof lL}),this.player=new d({id:this.userId||this.id,track:null,muted:!1,container:null,log:this._log,enableVolumeControlInIOS:l?.enableVolumeControlInIOS}),this.player.on(yo.PLAYER_STATE_CHANGED,y=>{if(F.emit(nA.PLAYER_STATE_CHANGED,fi({track:this},y)),this.emit("player-state-changed",y),y.state==="PLAYING"&&this.room){let S=!0;for(let{remoteAudioTrack:k,remoteVideoTrack:V,remoteAuxiliaryTrack:J}of[...this.room.remotePublishedUserMap.values()])if(k.isAvailable&&!k.player.isPlaying||V.isAvailable&&!V.player.isPlaying||J.isAvailable&&!J.player.isPlaying){S=!1;break}S&&yi()&&Oc&&Oc.deleteDialog()}}),this.kind===YA.VIDEO&&(this.player.on(yo.LOADED_DATA,()=>{this.emitFirstVideoFrameEvent(yo.LOADED_DATA),F.emit(nA.VIDEO_LOADED_DATA,{track:this})}),this.player.on(yo.LOADED_META_DATA,()=>{this.emitFirstVideoFrameEvent(yo.LOADED_META_DATA)}),this.player.on(yo.MEDIA_TRACK_CHANGED,y=>{var S;(S=this.subVideoPlayerMap)==null||S.forEach(k=>k.setTrack(y))}),this.player.on(yo.RESIZE,y=>{this.emitFirstVideoFrameEvent(yo.RESIZE),this.emit("video-size-changed",fi({userId:this.userId,streamType:this.mediaType===2?"auxiliary":"main"},y))}),this.player.on(yo.FIRST_FRAME_RENDER,y=>{this.emit("first-frame-render",po(fi({},y),{streamType:this.streamType,userId:this.isRemote?this.userId:""}))})),this.onTrackMuted=this.onTrackMuted.bind(this),this.onTrackUnmuted=this.onTrackUnmuted.bind(this),this.onTrackEnded=this.onTrackEnded.bind(this),this.onPlayerError&&this.player.on(yo.ERROR,this.onPlayerError.bind(this)),this.player.on(yo.AUTOPLAY_FAILED,this.handleAutoPlayFailed,this)}get log(){return this._log||pA}get kind(){return this.mediaType===1?YA.AUDIO:YA.VIDEO}get isAudio(){return this.kind===YA.AUDIO}get strMediaType(){return this.mediaType===4?YA.VIDEO:this.mediaType===2?YA.SCREEN:YA.AUDIO}get streamType(){return 2&this.mediaType?"auxiliary":"main"}get isMediaTrackActive(){return!!this.mediaTrack&&!this.mediaTrack.muted&&this.mediaTrack.readyState==="live"&&this.mediaTrack.enabled}play(A,e){return WA(this,null,function*(){let o=wa(A)?A[0]:A;if(this.isPlayCalled)return this.log.info("play update options: ".concat(JSON.stringify(e))),e&&!Ke(e.muted)&&this.setPlayerMute(e.muted),e&&!Ke(e.objectFit)&&(this.objectFit=e.objectFit),void(this.player instanceof Ro&&(this.player.setObjectFit(this.objectFit),this.container!==o&&o&&(wa(A)&&A.length>=1&&this.container&&A.includes(this.container)&&this.container.contains(this.player.elementToRender)?(A.splice(A.indexOf(this.container),1),A.unshift(this.container)):(this.container=o,this.player.setContainer(o))),wa(A)&&A.length>=1&&(yield this.playSubContainer(A.slice(1),e))));if(e&&!Ke(e.muted)?this.setPlayerMute(e.muted):(!this.isRemote||this.kind===YA.VIDEO)&&this.setPlayerMute(!0),e&&!Ke(e.objectFit)&&(this.objectFit=e.objectFit),this.player instanceof Ro&&(Ke(e?.isLiveStream)||this.player.setLiveMode(e.isLiveStream),this.player.setObjectFit(this.objectFit),e&&!Ke(e.poster)&&this.player.setPoster(e.poster)),this.isPlayCalled=!0,o&&(this.container=o,this.player instanceof Ro&&this.player.setContainer(o)),F.emit(nA.PLAY_TRACK_START,{track:this}),this._outputTrack){this._log.info("play with options: ".concat(JSON.stringify(e)));try{this.player.setTrack(this.playerMediaTrack),yield this.player.play(e),wa(A)&&A.length>1&&(yield this.playSubContainer(A.slice(1),e))}catch(a){throw this.handleAutoPlayFailed(a),a}}else this.log.info("play has not mediaTrack, abort")})}setMirror(A,e){if(this.isScreen||this.kind!==YA.VIDEO||Ke(A)||A===this.mirror)return;this.mirror=A;let o=this.player;e&&(o=e);let a=this.manager;if(Nr(this.mirror))return o.setViewMirror(this.mirror),void(!this.isRemote&&a&&(a.mirror=!1));switch(this.mirror){case"view":a&&(a.mirror=!1),o.setViewMirror(!0);break;case"publish":a&&(a.mirror=!0),o.setViewMirror(!0);break;case"both":a&&(a.mirror=!0),o.setViewMirror(!1)}}playSubContainer(A,e){return WA(this,null,function*(){if(!this._outputTrack||this.kind===YA.AUDIO)return;this.subVideoPlayerMap||(this.subVideoPlayerMap=new Map),this.subVideoPlayerMap.forEach((a,l)=>{var d;A.find(h=>l===h)||(a.stop(),(d=this.subVideoPlayerMap)==null||d.delete(l))});for(let[a,l]of A.entries()){let d=this.subVideoPlayerMap.get(l);d?e&&(Ke(e.objectFit)||d.setObjectFit(e.objectFit)):this.subVideoPlayerMap.set(l,new Ro({id:this.userId||this.id,track:this.playerMediaTrack,container:l,muted:this.player.muted,objectFit:this.objectFit,log:this.log.createChild({id:"vp-sub".concat(a+1)})}))}let o=[...this.subVideoPlayerMap.values()];for(let a of o)a.setViewMirror(this.player.mirror),yield a.play()})}setAudioOutput(A){return this.player.setSinkId(A)}setAudioVolume(A){this.player.setVolume(A)}getAudioLevel(){return this.player.getAudioLevel()||0}getInternalAudioLevel(){var A;return((A=this.player)==null?void 0:A.getInternalAudioLevel())||0}stop(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.isPlayCalled&&(this.isPlayCalled=!1,this.isFirstVideoFrameEmitted=!1,this.player&&(this.log.info("stop ".concat(this.kind," player")),this.player.stop(ok(this)&&!A?this.jitterBufferDelay:0)),this.subVideoPlayerMap&&this.subVideoPlayerMap.size>0&&this.subVideoPlayerMap.forEach(e=>{e.stop()}),this.container=null)}resume(){return WA(this,null,function*(){var A;this.isPlayCalled&&(yield(A=this.player)==null?void 0:A.resume())})}close(){this._toInitState(),this.log.info("close"),this.isPlayCalled&&this.stop(!0)}_toInitState(){}setMute(A){this.muted=A,this._inputTrack&&(this._inputTrack.enabled=!A),this._outputTrack&&(this._outputTrack.enabled=!A),this.emit(A?"mute":"unmute",this),F.emit(A?nA.TRACK_MUTED:nA.TRACK_UNMUTED,{track:this})}setPlayerMute(A){this.player.setMuted(A)}get mediaTrack(){return this._inputTrack||null}get outMediaTrack(){return this._outputTrack||null}get playerMediaTrack(){return this.outMediaTrack}installTrackEvent(A){nd(A,A).add(YA.MUTE,this.onTrackMuted).add(YA.UNMUTE,this.onTrackUnmuted).add(YA.ENDED,this.onTrackEnded),A.muted&&this.onTrackMuted(),A.readyState===YA.ENDED&&this.onTrackEnded()}uninstallTrackEvent(A){Ln(A)}setInputMediaStreamTrack(A){var e;let o=this._inputTrack;if(A!==o)return this._inputTrack=A,this.trackSettings=(e=A.getSettings)==null?void 0:e.call(A),A.enabled=!this.muted,o&&this.uninstallTrackEvent(o),this.installTrackEvent(A),this.emit("input-media-track-changed",A||null,o||null),this.manager?this.manager.changeInput(this):this.setOutputMediaStreamTrack(A)}setOutputMediaStreamTrack(A){var e;let o=this._outputTrack;this instanceof BQ&&Gp(o)||A!==o&&(this.isRemote?this.log.debug("setOutputMediaStreamTrack",A.label):this.log.info("setOutputMediaStreamTrack",(e=A.getSettings)==null?void 0:e.call(A).deviceId,A.label),this._outputTrack=A,this._inputTrack&&(this._outputTrack.contentHint=this._inputTrack.contentHint,this._outputTrack.enabled=this._inputTrack.enabled),this.updatePlayingState(!!A),this.emit("output-media-track-changed",A))}setMediaType(A){this.mediaType=A}updatePlayingState(A){var e,o;if(this.isPlayCalled){if(A){if(this.player.setTrack(this.playerMediaTrack),this.player.isStopped)return this.player.play().catch(a=>this.handleAutoPlayFailed(a)),void this.log.info("playing state updated, play ".concat(this.kind))}else if(!this.player.isStopped)return ok(this)&&this.isAudio&&(e=this.user)!=null&&e.muteState.hasAudio&&(o=this.user)!=null&&o.muteState.audioMuted?void 0:(this.player.stop(ok(this)?this.jitterBufferDelay:0),void this.log.info("playing state updated, stop ".concat(this.kind)))}this.log.debug("updatePlayingState abort ".concat(this.isPlayCalled," ").concat(A," ").concat(this.player.isStopped))}handleAutoPlayFailed(A){return WA(this,null,function*(){var e;this.log.warn("handleAutoPlayFailed",A);let o=()=>{this.resume().then(()=>{document.removeEventListener("click",o,!0)})};if(this.room&&this.room.enableAutoPlayDialog){if((Fp||sQ)&&(yield OC(100),(e=this.player)!=null&&e.isPlaying))return;HC()}else document.addEventListener("click",o,!0);F.once(nA.LOCAL_TRACK_CAPTURE_SUCCESS,a=>{let{track:l}=a;l.kind==="audio"&&yi()&&!this.player.isPlaying&&this.isRemote&&this.isAvailable&&o()}),this.emit("error",A)})}getVideoFrame(){return this.player instanceof Ro?this.player.getVideoFrame():""}emitFirstVideoFrameEvent(A){var e,o,a;if(this.isFirstVideoFrameEmitted)return;let l=(e=this.mediaTrack)==null?void 0:e.getSettings(),d=l?.width||((o=this.player.element)==null?void 0:o.videoWidth)||0,h=l?.height||((a=this.player.element)==null?void 0:a.videoHeight)||0;A===yo.RESIZE&&!d&&!h||A===yo.LOADED_META_DATA&&!d&&!h||(A===yo.LOADED_DATA&&!d&&!h&&this._log.warn("the dimension of video is 0x0 in first-video-frame event"),this.isFirstVideoFrameEmitted=!0,tQ(this.rotation)&&([d,h]=[h,d]),this.emit("first-video-frame",{width:d,height:h,streamType:this.streamType,userId:this.isRemote?this.userId:""}))}onTrackMuted(){this._log.warn("".concat(this.kind," track is unable to provide media output"))}onTrackUnmuted(){this._log.info("".concat(this.kind," track is able to provide media output"))}onTrackEnded(){this._log.warn("".concat(this.kind," track ended"))}};hi([lc([],Zs.INIT,{sync:!0})],zK.prototype,"_toInitState");var $eA=Object.prototype.hasOwnProperty,im=function(A){if(A==null)return!0;if(typeof A=="boolean")return!1;if(typeof A=="number")return A===0;if(typeof A=="string"||typeof A=="function"||Array.isArray(A))return A.length===0;if(A instanceof Error)return A.message==="";if(IE(A))switch(Object.prototype.toString.call(A)){case"[object File]":case"[object Map]":case"[object Set]":return A.size===0;case"[object Object]":for(let e in A)if($eA.call(A,e))return!1;return!0}return!1},AtA=IM({retryFunction:function(A){return WA(this,null,function*(){let e=function(d){return{audio:etA(d),video:ttA(d)}}(A);pA.info("getUserMedia with constraints: ".concat(JSON.stringify(e)));let o=[],a=[],l=["label","deviceId","groupId"];if(e.audio&&(o=yield em(),pA.info("microphones: ".concat(zd(o.map(d=>po(fi({},d),{groupId:d.groupId.substring(0,8)})),{keysToInclude:l})))),e.video&&(a=yield tm(),pA.info("cameras: ".concat(zd(a,{keysToInclude:l}))),!Nr(e.video)&&e.video.facingMode==="user"&&!e.video.deviceId)){let d=a.filter(h=>!h.label.includes("infrared")).find(h=>h.label.includes("facing front"));d&&(e.video.deviceId=d.deviceId,pA.info("exclude infrared camera: ".concat(JSON.stringify(e))))}try{let d=yield navigator.mediaDevices.getUserMedia(e);return H2&&d.getTracks().forEach(h=>{var y;let S=h.getCapabilities();pA.info("".concat(h.kind," capabilities: ").concat(zd(S,{keysToInclude:Ob}))),!Ke(A.echoCancellation)&&((y=S.echoCancellation)==null?void 0:y.indexOf(A.echoCancellation))===-1&&pA.warn("Invalid argument for 'echoCancellation'. Expected one of [".concat(JSON.stringify(S.echoCancellation),"], but received '").concat(A.echoCancellation,"'"))}),e.audio&&iL(),d}catch(d){let{message:h}=d;throw d.name==="NotFoundError"&&(A.video&&a&&a.length===0&&(h=Xo({key:vo.CAMERA_NOT_FOUND})),A.audio&&o&&o.length===0&&(h=Xo({key:vo.MICROPHONE_NOT_FOUND}))),new gi({code:Ct.INITIALIZE_FAILED,name:d.name,message:h,constraint:d.constraint})}})},settings:{retries:3,timeout:500},onError:A=>{let{error:e,retry:o,reject:a,retryFuncArgs:l,retriedCount:d}=A,h=d+1;e.name==="NotReadableError"||e.name==="OverconstrainedError"||e.name==="AbortError"?(h===1?(l[0].video&&(l[0].maxResolution=!1,(!Bg||l[0].width*l[0].height<=2073600)&&l[0].frameRate&&(l[0].frameRate=l[0].frameRate>10?10:5)),l[0].retryWhenExactFailed&&l[0].useExactDeviceId&&(l[0].useExactDeviceId=!1)):h===2?l[0].useDeviceIdOnly=!0:h===3&&!l[0].useExactDeviceId&&(l[0].useTrueAsConstraint=!0),o()):a(e),l[0].microphoneId&&R5(l[0].microphoneId,!1),l[0].cameraId&&R5(l[0].cameraId,!0)},onRetrying:A=>{pA.warn("getUserMedia NotReadableError observed, retrying [".concat(A,"/3]"))},onRetryFailed:A=>{sn.logFailedEvent({eventType:Ja.GET_USER_MEDIA_RETRY,error:A})},onRetrySuccess:A=>{sn.logSuccessEvent({eventType:Ja.GET_USER_MEDIA_RETRY}),sn.uploadEvent({log:"stat-".concat(Ja.GET_USER_MEDIA_RETRY,"-success-").concat(A)})}});function R5(A,e){return WA(this,null,function*(){let o=(e?yield tm():yield em()).find(a=>a.deviceId===A);o&&Ra(o.getCapabilities)&&pA.warn(zd(o.getCapabilities(),{keysToInclude:Ob}))})}function etA(A){if(!A.audio)return!1;if(A.useTrueAsConstraint)return!0;let e={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,sampleRate:A.sampleRate};return!im(A.microphoneId)&&(e.deviceId=A.useExactDeviceId?{exact:A.microphoneId}:A.microphoneId,A.useDeviceIdOnly)?e:(kn(A.channelCount)&&(e.channelCount=A.channelCount),(Nr(A.echoCancellation)||A.echoCancellation==="remote-only"||A.echoCancellation==="all")&&(e.echoCancellation=A.echoCancellation),Nr(A.noiseSuppression)&&!A.noiseSuppression&&(e.noiseSuppression=!1),Nr(A.autoGainControl)&&!A.autoGainControl&&(e.autoGainControl=!1),!!im(e)||e)}function ttA(A){if(!A.video)return!1;if(A.useTrueAsConstraint)return!0;let{maxResolution:e=!0}=A,o={};return A.cameraId?o.deviceId=A.useExactDeviceId?{exact:A.cameraId}:A.cameraId:A.facingMode&&(o.facingMode=A.facingMode),A.useDeviceIdOnly&&!im(o)?o:(A.width&&(o.width={ideal:A.width},e&&!or&&(o.width.max=A.width)),A.height&&(o.height={ideal:A.height},e&&!or&&(o.height.max=A.height)),or&&nQ&&A.width&&A.height&&A.width*A.height<101376&&(o.width=A.width,o.height=A.height),A.frameRate&&(o.frameRate=A.frameRate),!!im(o)||o)}var itA=AtA;function w5(A){return jr((e,o)=>function(){for(var a=arguments.length,l=new Array(a),d=0;dfunction(){for(var a=arguments.length,l=new Array(a),d=0;dfunction(){for(var a=arguments.length,l=new Array(a),d=0;d{let A=!1,e=document.visibilityState;return()=>{document.visibilityState!==e&&pA.info("visibility change: ".concat(document.visibilityState)),!A&&(document.addEventListener("visibilitychange",()=>{pA.info("visibility change: ".concat(document.visibilityState)),e=document.visibilityState}),A=!0)}})(),stA=0,T5=class{constructor(A){Y(this,"log"),Y(this,"isRunning",!1),Y(this,"queue",[]);let e="fq".concat(++stA);A&&(e+="|".concat(A)),this.log=pA.createLogger({id:e})}get length(){return this.queue.length}get lastQueueItem(){return this.length===0?null:this.queue[this.length-1]}push(A){let e=arguments.length>1&&arguments[1]!==void 0&&arguments[1];var o,a;let l=fi({},A),d=new Promise((h,y)=>{l.resolve=h,l.reject=y});return l.promise=d,e?this.length<=1?this.queue.push(l):(a=(o=this.lastQueueItem)==null?void 0:o.promise)==null||a.then(l.resolve,l.reject):this.queue.push(l),this.log.debug("push ".concat(this.length),A.funcName,A.args),this.isRunning||this.callNext(),d}shift(){let A=this.queue.shift();return this.log.debug("shift ".concat(this.length),A?.funcName,A?.args),A}callNext(){if(this.isRunning||this.length===0)return;let{fn:A,args:e,context:o,resolve:a,reject:l,funcName:d}=this.queue[0];this.log.debug("callNext",this.length,d,e),this.isRunning=!0,A.apply(o,e).then(a,l).finally(()=>{this.isRunning=!1,this.shift(),this.callNext()})}},o1=new WeakMap,s1=new WeakMap;function sL(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return function(e,o,a){let l=a.value;return a.value=function(){let d=o1.get(this)||new T5;for(var h=arguments.length,y=new Array(h),S=0;SS.push(cA)),(y=s1.get(this))==null||y.forEach(cA=>cA?.queue.forEach(CA=>S.push(CA))),S.forEach(cA=>{cA.reject(new gi({code:Ct.API_CALL_ABORTED,message:A}))}),o1.delete(this),s1.delete(this),l.apply(this,V)},a}}function Dy(A,e){return function(o,a,l){let d=l.value,h=y=>A(...y);return l.value=function(){for(var y=arguments.length,S=new Array(y),k=0;kfunction(){let l=A;try{for(var d=arguments.length,h=new Array(d),y=0;y(e?si.addSuccessEvent({key:l,cost:ko()-k}):si.addSuccessEvent({key:l}),V)).catch(V=>{throw si.addFailedEvent({key:l,error:V}),V}):(si.addSuccessEvent({key:l}),S)}catch(S){throw si.addFailedEvent({key:l,error:S}),S}})}var G5={};function tg(){}jh(G5,{Events:()=>Ic,Inspect:()=>My,LastSink:()=>n1,Sink:()=>Ps,Subscribe:()=>r1,TimeoutError:()=>L5,audit:()=>JtA,bindCallback:()=>vtA,bindNodeCallback:()=>RtA,buffer:()=>dtA,bufferCount:()=>EtA,bufferTime:()=>uiA,call:()=>b5,catchError:()=>ez,combineLatest:()=>O5,concat:()=>gtA,concatMap:()=>iiA,concatMapTo:()=>oiA,count:()=>TtA,create:()=>Er,debounce:()=>qtA,debounceTime:()=>KtA,defer:()=>P5,delay:()=>EiA,deliver:()=>xs,dispose:()=>ZK,elementAt:()=>jtA,empty:()=>tj,every:()=>$tA,exhaustMap:()=>giA,exhaustMapTo:()=>ciA,expand:()=>CiA,filter:()=>KM,find:()=>WtA,findIndex:()=>ztA,first:()=>ZtA,fromAnimationFrame:()=>StA,fromArray:()=>QtA,fromEvent:()=>la,fromEventPattern:()=>ptA,fromFetch:()=>mtA,fromIterable:()=>ftA,fromPromise:()=>J5,fromReadableStream:()=>DtA,fromReader:()=>ytA,groupBy:()=>liA,identity:()=>ntA,ignoreElements:()=>ktA,iif:()=>ltA,inspect:()=>k5,interval:()=>V5,last:()=>XtA,map:()=>oj,mapTo:()=>eiA,max:()=>NtA,merge:()=>XK,mergeMap:()=>niA,mergeMapTo:()=>riA,min:()=>GtA,never:()=>wtA,nothing:()=>tg,of:()=>BtA,pairwise:()=>AiA,pipe:()=>ma,race:()=>F5,range:()=>MtA,reduce:()=>H5,retry:()=>piA,scan:()=>j5,setAsapScheduler:()=>htA,share:()=>nL,shareReplay:()=>ctA,skip:()=>FtA,skipUntil:()=>OtA,skipWhile:()=>ij,startWith:()=>$K,subject:()=>hQ,subscribe:()=>Bl,sum:()=>btA,switchMap:()=>g1,switchMapTo:()=>l1,take:()=>E_,takeLast:()=>UtA,takeUntil:()=>dE,takeWhile:()=>LtA,tap:()=>sj,throttle:()=>YtA,throwError:()=>_tA,timeInterval:()=>IiA,timeout:()=>QiA,timer:()=>ej,toPromise:()=>hiA,toReadableStream:()=>BiA,withLatestFrom:()=>utA,zip:()=>ItA});var b5=A=>A(),ntA=A=>A;function ZK(){this.dispose()}var k5=()=>typeof __FASTRX_DEVTOOLS__<"u",rtA=1,My=class extends Function{toString(){return"".concat(this.name,"(").concat(this.args.length?[...this.args].join(", "):"",")")}subscribe(A){let e=new atA(A,this,this.streamId++);return Ic.subscribe({id:this.id,end:!1},{nodeId:e.sourceId,streamId:e.id}),this(e),e}},n1=class{constructor(){this.defers=new Set,this.disposed=!1}next(A){}complete(){this.dispose()}error(A){this.dispose()}get bindDispose(){return()=>this.dispose()}dispose(){this.disposed=!0,this.complete=tg,this.error=tg,this.next=tg,this.dispose=tg,this.subscribe=tg,this.doDefer()}subscribe(A){return A instanceof My?A.subscribe(this):A(this),this}get bindSubscribe(){return A=>this.subscribe(A)}doDefer(){this.defers.forEach(b5),this.defers.clear()}defer(A){this.defers.add(A)}removeDefer(A){this.defers.delete(A)}reset(){this.disposed=!1,delete this.complete,delete this.next,delete this.dispose,delete this.next,delete this.subscribe}resetNext(){delete this.next}resetComplete(){delete this.complete}resetError(){delete this.error}},Ps=class extends n1{constructor(A){super(),this.sink=A,A.defer(this.bindDispose)}next(A){this.sink.next(A)}complete(){this.sink.complete()}error(A){this.sink.error(A)}},r1=class extends n1{constructor(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:tg,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:tg,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:tg;if(super(),this._next=e,this._error=o,this._complete=a,this.then=tg,A instanceof My){let l={toString:()=>"subscribe",id:0,source:A};this.defer(()=>{Ic.defer(l,0)}),Ic.create(l),Ic.pipe(l),this.sourceId=l.id,this.subscribe(A),Ic.subscribe({id:l.id,end:!0}),e==tg?this._next=d=>Ic.next(l,0,d):this.next=d=>{Ic.next(l,0,d),e(d)},a==tg?this._complete=()=>Ic.complete(l,0):this.complete=()=>{this.dispose(),Ic.complete(l,0),a()},o==tg?this._error=d=>Ic.complete(l,0,d):this.error=d=>{this.dispose(),Ic.complete(l,0,d),o(d)}}else this.subscribe(A)}next(A){this._next(A)}complete(){this.dispose(),this._complete()}error(A){this.dispose(),this._error(A)}};function ma(A){for(var e=arguments.length,o=new Array(e>1?e-1:0),a=1;ad(l),A)}function Er(A,e,o){if(k5()){let a=Object.defineProperties(Object.setPrototypeOf(A,My.prototype),{streamId:{value:0,writable:!0,configurable:!0},name:{value:e,writable:!0,configurable:!0},args:{value:o,writable:!0,configurable:!0},id:{value:0,writable:!0,configurable:!0}});Ic.create(a);for(let l=0;l{if(d instanceof My){let h=Er(y=>{let S=new A(y,...a);S.sourceId=h.id,S.subscribe(d)},e,arguments);return h.source=d,Ic.pipe(h),h}return h=>d(new A(h,...a))}}}function vy(A,e){window.postMessage({source:"fastrx-devtools-backend",payload:{event:A,payload:e}})}var atA=class extends Ps{constructor(A,e,o){super(A),this.source=e,this.id=o,this.sourceId=A.sourceId,this.defer(()=>{Ic.defer(this.source,this.id)})}next(A){Ic.next(this.source,this.id,A),this.sink.next(A)}complete(){Ic.complete(this.source,this.id),this.sink.complete()}error(A){Ic.complete(this.source,this.id,A),this.sink.error(A)}},Ic={addSource(A,e){vy("addSource",{id:A.id,name:A.toString(),source:{id:e.id,name:e.toString()}})},next(A,e,o){vy("next",{id:A.id,streamId:e,data:o&&o.toString()})},subscribe(A,e){let{id:o,end:a}=A;vy("subscribe",{id:o,end:a,sink:{nodeId:e&&e.nodeId,streamId:e&&e.streamId}})},complete(A,e,o){vy("complete",{id:A.id,streamId:e,err:o?o.toString():null})},defer(A,e){vy("defer",{id:A.id,streamId:e})},pipe(A){vy("pipe",{name:A.toString(),id:A.id,source:{id:A.source.id,name:A.source.toString()}})},update(A){vy("update",{id:A.id,name:A.toString()})},create(A){A.id||(A.id=rtA++),vy("create",{name:A.toString(),id:A.id})}},L5=class extends Error{constructor(A){super("timeout after ".concat(A,"ms")),this.timeout=A}},U5=class extends n1{constructor(A){super(),this.source=A,this.sinks=new Set}add(A){A.defer(()=>this.remove(A)),this.sinks.add(A).size===1&&(this.reset(),this.subscribe(this.source))}remove(A){this.sinks.delete(A),this.sinks.size===0&&this.dispose()}next(A){this.sinks.forEach(e=>e.next(A))}complete(){this.sinks.forEach(A=>A.complete()),this.sinks.clear()}error(A){this.sinks.forEach(e=>e.error(A)),this.sinks.clear()}};function nL(){return A=>{let e=new U5(A);if(A instanceof My){let o=Er(a=>{e.add(a)},"share",arguments);return e.sourceId=o.id,o.source=A,Ic.pipe(o),o}return Er(e.add.bind(e),"share",arguments)}}function XK(){for(var A=arguments.length,e=new Array(A),o=0;o{let l=new Ps(a),d=e.length;l.complete=()=>{--d===0&&a.complete()},e.forEach(l.bindSubscribe)},"merge",arguments)}function F5(){for(var A=arguments.length,e=new Array(A),o=0;o{let l=new Map;e.forEach(d=>{let h=new Ps(a);l.set(d,h),h.complete=()=>{l.delete(d),l.size===0?a.complete():h.dispose()},h.next=y=>{l.delete(d),l.forEach(S=>S.dispose()),h.resetNext(),h.resetComplete(),h.next(y)}}),e.forEach(d=>l.get(d).subscribe(d))},"race",arguments)}function gtA(){for(var A=arguments.length,e=new Array(A),o=0;o{let l=0,d=e.length,h=new Ps(a);h.complete=()=>{l{let o=new U5(e),a=[];return o.next=function(l){a.push(l),a.length>A&&a.shift(),this.sinks.forEach(d=>d.next(l))},Er(l=>{l.defer(()=>o.remove(l)),a.forEach(d=>l.next(d)),o.add(l)},"shareReplay",arguments)}}function ltA(A,e,o){return Er(a=>A()?e(a):o(a),"iif",arguments)}function O5(){for(var A=arguments.length,e=new Array(A),o=0;o{let l=e.length,d=l,h=l,y=new Array(l),S=()=>{--h===0&&a.complete()};e.forEach((k,V)=>{let J=new Ps(a);J.next=cA=>{d--,J.next=CA=>{y[V]=CA,d===0&&a.next(y)},J.next(cA)},J.complete=S,J.subscribe(k)})},"combineLatest",arguments)}function ItA(){for(var A=arguments.length,e=new Array(A),o=0;o{let l=e.length,d=l,h=new Array(l),y=()=>{--d===0&&a.complete()};e.forEach((S,k)=>{let V=new Ps(a),J=[];h[k]=J,V.next=cA=>{J.push(cA),h.every(CA=>CA.length)&&a.next(h.map(CA=>CA.shift()))},V.complete=y,V.subscribe(S)})},"zip",arguments)}function $K(){for(var A=arguments.length,e=new Array(A),o=0;oEr(function(l){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length;for(;d1?o-1:0),l=1;lthis.buffer=d,e.complete=tg,e.subscribe(O5(...a))}next(A){this.buffer&&this.sink.next([A,...this.buffer])}},"withLatestFrom"),EtA=xs(class extends Ps{constructor(A,e,o){super(A),this.bufferSize=e,this.startBufferEvery=o,this.buffer=[],this.count=0,this.startBufferEvery&&(this.buffers=[[]])}next(A){this.startBufferEvery?(this.count++===this.startBufferEvery&&(this.buffers.push([]),this.count=1),this.buffers.forEach(e=>{e.push(A)}),this.buffers[0].length===this.bufferSize&&this.sink.next(this.buffers.shift())):(this.buffer.push(A),this.buffer.length===this.bufferSize&&(this.sink.next(this.buffer),this.buffer=[]))}complete(){this.buffer.length?this.sink.next(this.buffer):this.buffers.length&&this.buffers.forEach(A=>this.sink.next(A)),super.complete()}},"bufferCount"),dtA=xs(class extends Ps{constructor(A,e){super(A),this.buffer=[];let o=new Ps(A);o.next=a=>{A.next(this.buffer),this.buffer=[]},o.complete=tg,o.subscribe(e)}next(A){this.buffer.push(A)}complete(){this.buffer.length&&this.sink.next(this.buffer),super.complete()}},"buffer"),CtA=function(A,e,o,a){return new(o||(o=Promise))(function(l,d){function h(k){try{S(a.next(k))}catch(V){d(V)}}function y(k){try{S(a.throw(k))}catch(V){d(V)}}function S(k){k.done?l(k.value):function(V){return V instanceof o?V:new o(function(J){J(V)})}(k.value).then(h,y)}S((a=a.apply(A,[])).next())})};function hQ(A){let e=arguments,o=nL()(Er(a=>{o.next=l=>a.next(l),o.complete=()=>a.complete(),o.error=l=>a.error(l),A&&a.subscribe(A)},"subject",e));return o.next=tg,o.complete=tg,o.error=tg,o}function P5(A){return Er(e=>e.subscribe(A()),"defer",arguments)}var u_={promise:A=>{Promise.resolve().then(A)},setImmediate:typeof setImmediate<"u"?A=>setImmediate(A):null,setTimeout:A=>setTimeout(A,0)},Aj=typeof Promise<"u"?u_.promise:u_.setImmediate?u_.setImmediate:u_.setTimeout,x5=A=>e=>{Aj(()=>A(e))},htA=A=>{typeof A=="function"?Aj=A:u_[A]&&(Aj=u_[A])},Y5=A=>x5(e=>{for(let o=0;!e.disposed&&o{let o=0,a=setInterval(()=>e.next(o++),A);return e.defer(()=>{clearInterval(a)}),"interval"},"interval",arguments)}function ej(A,e){return Er(o=>{let a=0,l=setTimeout(()=>{if(o.removeDefer(d),o.next(a++),e){let h=setInterval(()=>o.next(a++),e);o.defer(()=>{clearInterval(h)})}else o.complete()},A),d=()=>clearTimeout(l);o.defer(d)},"timer",arguments)}function a1(A,e){return o=>{let a=l=>o.next(l);o.defer(()=>e(a)),A(a)}}function ptA(A,e){return Er(a1(A,e),"fromEventPattern",arguments)}function la(A,e){if("on"in A&&"off"in A)return Er(a1(o=>A.on(e,o),o=>A.off(e,o)),"fromEvent",arguments);if("addListener"in A&&"removeListener"in A)return Er(a1(o=>A.addListener(e,o),o=>A.removeListener(e,o)),"fromEvent",arguments);if("addEventListener"in A)return Er(a1(o=>A.addEventListener(e,o),o=>A.removeEventListener(e,o)),"fromEvent",arguments);throw"target is not a EventDispachter"}function J5(A){return Er(e=>{A.then(o=>{e.next(o),e.complete()},e.error.bind(e))},"fromPromise",arguments)}function mtA(A,e){return Er(P5(()=>J5(fetch(A,e))),"fromFetch",arguments)}function ftA(A){return Er(x5(e=>{try{for(let o of A){if(e.disposed)return;e.next(o)}e.complete()}catch(o){e.error(o)}}),"fromIterable",arguments)}function ytA(A){let e=o=>CtA(this,void 0,void 0,function*(){try{if(o.disposed)return;let{done:a,value:l}=yield A.read();if(a)return void o.complete();o.next(l),e(o)}catch(a){o.error(a)}});return Er(o=>{e(o)},"fromReader",arguments)}function DtA(A){return Er(e=>{let o=new AbortController,a=o.signal;e.defer(()=>o.abort("cancelled")),A.pipeTo(new WritableStream({write(l){e.next(l)},close(){e.complete()},abort(l){e.error(l)}}),{signal:a}).then(()=>e.complete(),l=>e.error(l))},"fromReadableStream",arguments)}function StA(){return Er(A=>{let e=requestAnimationFrame(function o(a){A.disposed||(A.next(a),e=requestAnimationFrame(o))});A.defer(()=>cancelAnimationFrame(e))},"fromAnimationFrame",arguments)}function MtA(A,e){return Er(function(o){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:A,l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e+A;for(;a2?o-2:0),l=2;l{let h=a.concat(y=>(d.next(y),d.complete()));A.apply(e,h)},"bindCallback",arguments)}function RtA(A,e){for(var o=arguments.length,a=new Array(o>2?o-2:0),l=2;l{let h=a.concat((y,S)=>y?d.error(y):(d.next(S),d.complete()));A.apply(e,h)},"bindNodeCallback",arguments)}function wtA(){return Er(()=>{},"never",arguments)}function _tA(A){return Er(e=>e.error(A),"throwError",arguments)}function tj(){return Er(A=>A.complete(),"empty",arguments)}var rL=class extends Ps{constructor(A,e,o){super(A),this.f=e;let a=()=>{this.sink.next(this.acc),this.sink.complete()};o===void 0?this.next=l=>{this.acc=l,this.complete=a,this.resetNext()}:(this.acc=o,this.complete=a)}next(A){this.acc=this.f(this.acc,A)}},H5=xs(rL,"reduce"),TtA=A=>xs(rL,"count")((e,o)=>A(o)?e+1:e,0),NtA=()=>xs(rL,"max")(Math.max),GtA=()=>xs(rL,"min")(Math.min),btA=()=>xs(rL,"sum")((A,e)=>A+e,0),KM=xs(class extends Ps{constructor(A,e,o){super(A),this.filter=e,this.thisArg=o}next(A){this.filter.call(this.thisArg,A)&&this.sink.next(A)}},"filter"),ktA=xs(class extends Ps{next(A){}},"ignoreElements"),E_=xs(class extends Ps{constructor(A,e){super(A),this.count=e}next(A){this.sink.next(A),--this.count===0&&(this.doDefer(),this.complete())}},"take"),dE=xs(class extends Ps{constructor(A,e){super(A);let o=new Ps(A);o.next=()=>{o.doDefer(),A.complete()},o.complete=ZK,o.subscribe(e)}},"takeUntil"),LtA=xs(class extends Ps{constructor(A,e){super(A),this.f=e}next(A){this.f(A)?this.sink.next(A):(this.doDefer(),this.complete())}},"takeWhile"),UtA=A=>H5((e,o)=>(e.push(o),e.length>A&&e.shift(),e),[]),FtA=xs(class extends Ps{constructor(A,e){super(A),this.count=e}next(A){--this.count===0&&(this.next=super.next)}},"skip"),OtA=xs(class extends Ps{constructor(A,e){super(A),A.next=tg;let o=new Ps(A);o.next=()=>{o.doDefer(),A.resetNext()},o.complete=ZK,o.subscribe(e)}},"skipUntil"),ij=xs(class extends Ps{constructor(A,e){super(A),this.f=e}next(A){this.f(A)||(this.next=super.next,this.next(A))}},"skipWhile"),PtA={leading:!0,trailing:!1},xtA=class extends Ps{constructor(A,e,o){super(A),this.durationSelector=e,this.trailing=o}cacheValue(A){this.last=A,this.disposed&&this.throttle(A)}send(A){this.sink.next(A),this.throttle(A)}throttle(A){this.reset(),this.subscribe(this.durationSelector(A))}next(){this.complete()}complete(){this.dispose(),this.trailing&&this.send(this.last)}},q5=class extends Ps{constructor(A,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:PtA;super(A),this.durationSelector=e,this.config=o,this._throttle=new xtA(this.sink,this.durationSelector,this.config.trailing),this._throttle.dispose()}next(A){this._throttle.disposed&&this.config.leading?this._throttle.send(A):this._throttle.cacheValue(A)}complete(){this._throttle.throttle=tg,this._throttle.complete(),super.complete()}},YtA=xs(q5,"throttle"),VtA={leading:!1,trailing:!0},JtA=A=>xs(q5,"audit")(A,VtA),HtA=class extends Ps{next(){this.complete()}complete(){this.dispose(),this.sink.next(this.last)}},K5=class extends Ps{constructor(A,e){super(A),this.durationSelector=e,this._debounce=new HtA(this.sink),this._debounce.dispose()}next(A){this._debounce.dispose(),this._debounce.reset(),this._debounce.last=A,this._debounce.subscribe(this.durationSelector(A))}complete(){this._debounce.complete(),super.complete()}},qtA=xs(K5,"debounce"),KtA=A=>xs(K5,"debounceTime")(e=>ej(A)),jtA=xs(class extends Ps{constructor(A,e,o){super(A),this.count=e,this.defaultValue=o}next(A){this.count--===0&&(this.defaultValue=A,this.doDefer(),this.complete())}complete(){this.defaultValue!==void 0?(this.sink.next(this.defaultValue),super.complete()):this.error(new Error("not enough elements in sequence"))}},"elementAt"),WtA=A=>e=>E_(1)(ij(o=>!A(o))(e)),ztA=xs(class extends Ps{constructor(A,e){super(A),this.f=e,this.i=0}next(A){this.f(A)?(this.sink.next(this.i++),this.doDefer(),this.complete()):++this.i}},"findIndex"),ZtA=xs(class extends Ps{constructor(A,e,o){super(A),this.f=e,this.defaultValue=o,this.index=0}next(A){(!this.f||this.f(A,this.index++))&&(this.defaultValue=A,this.doDefer(),this.complete())}complete(){this.defaultValue!==void 0?(this.sink.next(this.defaultValue),super.complete()):this.error(new Error("no elements in sequence"))}},"first"),XtA=xs(class extends Ps{constructor(A,e,o){super(A),this.f=e,this.defaultValue=o,this.index=0}next(A){(!this.f||this.f(A,this.index++))&&(this.defaultValue=A)}complete(){this.defaultValue!==void 0?(this.sink.next(this.defaultValue),super.complete()):this.error(new Error("no elements in sequence"))}},"last"),$tA=xs(class extends Ps{constructor(A,e){super(A),this.predicate=e,this.index=0}next(A){this.predicate(A,this.index++)?this.result=!0:(this.result=!1,this.doDefer(),this.complete())}complete(){this.result!==void 0?(this.sink.next(this.result),super.complete()):this.error(new Error("no elements in sequence"))}},"every"),j5=xs(class extends Ps{constructor(A,e,o){super(A),this.f=e,o===void 0?this.next=a=>{this.acc=a,this.resetNext(),this.sink.next(this.acc)}:this.acc=o}next(A){this.sink.next(this.acc=this.f(this.acc,A))}},"scan"),AiA=xs(class extends Ps{constructor(){super(...arguments),this.hasLast=!1}next(A){this.hasLast?this.sink.next([this.last,A]):this.hasLast=!0,this.last=A}},"pairwise"),W5=class extends Ps{constructor(A,e,o){super(A),this.mapper=e,this.thisArg=o}next(A){super.next(this.mapper.call(this.thisArg,A))}},oj=xs(W5,"map"),eiA=A=>xs(W5,"mapTo")(e=>A),aL=class extends Ps{constructor(A,e,o){super(A),this.data=e,this.context=o}next(A){let e=this.context.combineResults;e?this.sink.next(e(this.data,A)):this.sink.next(A)}tryComplete(){this.context.resetComplete(),this.dispose()}},gL=class oX extends Ps{constructor(e,o,a){super(e),this.makeSource=o,this.combineResults=a,this.index=0}subInner(e,o){let a=this.currentSink=new o(this.sink,e,this);this.complete===oX.prototype.complete&&(this.complete=this.tryComplete),a.complete=a.tryComplete,a.subscribe(this.makeSource(e,this.index++))}complete(){this.sink.complete()}tryComplete(){this.currentSink.resetComplete(),this.dispose()}},z5=class extends aL{},Z5=class extends gL{next(A){this.subInner(A,z5),this.next=e=>{this.currentSink.dispose(),this.subInner(e,z5)}}},g1=xs(Z5,"switchMap");function c1(A){return(e,o)=>A(()=>e,o)}var l1=c1(xs(Z5,"switchMapTo")),tiA=class extends aL{tryComplete(){this.dispose(),this.context.sources.length?this.context.subNext():(this.context.resetNext(),this.context.resetComplete())}},X5=class extends gL{constructor(){super(...arguments),this.sources=[],this.next2=this.sources.push.bind(this.sources)}next(A){this.next2(A),this.subNext()}subNext(){this.next=this.next2,this.subInner(this.sources.shift(),tiA),this.disposed&&this.sources.length===0&&this.currentSink.resetComplete()}tryComplete(){this.sources.length===0&&this.currentSink.resetComplete(),this.dispose()}},iiA=xs(X5,"concatMap"),oiA=c1(xs(X5,"concatMapTo")),siA=class extends aL{tryComplete(){this.context.inners.delete(this),super.dispose(),this.context.inners.size===0&&this.context.resetComplete()}},$5=class extends gL{constructor(){super(...arguments),this.inners=new Set}next(A){this.subInner(A,siA),this.inners.add(this.currentSink)}tryComplete(){this.inners.size===1?this.inners.forEach(A=>A.resetComplete()):this.dispose()}},niA=xs($5,"mergeMap"),riA=c1(xs($5,"mergeMapTo")),aiA=class extends aL{dispose(){this.context.resetNext(),super.dispose()}},Az=class extends gL{next(A){this.next=tg,this.subInner(A,aiA)}},giA=xs(Az,"exhaustMap"),ciA=c1(xs(Az,"exhaustMapTo")),liA=xs(class extends Ps{constructor(A,e){super(A),this.f=e,this.groups=new Map}next(A){let e=this.f(A),o=this.groups.get(e);o===void 0&&(o=hQ(),o.key=e,this.groups.set(e,o),super.next(o)),o.next(A)}complete(){this.groups.forEach(A=>A.complete()),super.complete()}error(A){this.groups.forEach(e=>e.error(A)),super.error(A)}},"groupBy"),IiA=xs(class extends Ps{constructor(){super(...arguments),this.start=new Date}next(A){this.sink.next({value:A,interval:Number(new Date)-Number(this.start)}),this.start=new Date}},"timeInterval"),uiA=xs(class extends Ps{constructor(A,e){super(A),this.miniseconds=e,this.buffer=[],this.id=setInterval(()=>{this.sink.next(this.buffer.concat()),this.buffer.length=0},this.miniseconds)}next(A){this.buffer.push(A)}complete(){this.sink.next(this.buffer),super.complete()}dispose(){clearInterval(this.id),super.dispose()}},"bufferTime"),EiA=xs(class extends Ps{constructor(A,e){super(A),this.buffer=[],this.delayTime=e}dispose(){clearTimeout(this.timeoutId),super.dispose()}delay(A){this.timeoutId=setTimeout(()=>{let e=this.buffer.shift();if(e){let{time:o,data:a}=e;super.next(a),this.buffer.length&&this.delay(Number(this.buffer[0].time)-Number(o))}},A)}next(A){this.buffer.length||this.delay(this.delayTime),this.buffer.push({time:new Date,data:A})}complete(){this.timeoutId=setTimeout(()=>super.complete(),this.delayTime)}},"delay"),ez=xs(class extends Ps{constructor(A,e){super(A),this.selector=e}error(A){this.dispose(),this.selector(A)(this.sink)}},"catchError"),diA=class extends aL{tryComplete(){let A=this.context.inners.delete(this);super.dispose(),A&&this.context.checkComplete()}next(A){this.sink.next(A),this.context.expandValue(A)}},CiA=xs(class extends gL{constructor(A,e){super(A,e),this.project=e,this.inners=new Set,this.sourceCompleted=!1}next(A){this.sink.next(A),this.expandValue(A)}expandValue(A){let e=new diA(this.sink,A,this);this.currentSink=e,this.complete=this.tryComplete,e.complete=e.tryComplete,this.inners.add(e),e.subscribe(this.makeSource(A,this.index++))}complete(){this.sourceCompleted=!0,this.checkComplete()}checkComplete(){this.sourceCompleted&&this.inners.size===0&&(this.resetComplete(),super.complete())}tryComplete(){this.sourceCompleted=!0,this.checkComplete()}},"expand"),hiA=()=>A=>new Promise((e,o)=>{let a;new r1(A,l=>a=l,o,()=>e(a))}),BiA=()=>A=>{let e;return new ReadableStream({start(o){e=new r1(A,o.enqueue.bind(o),o.error.bind(o),o.close.bind(o))},cancel(){e.dispose()}})},Bl=function(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:tg,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:tg,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:tg;return a=>new r1(a,A,e,o)},sj=xs(class extends Ps{constructor(A,e){super(A),e instanceof Function?this.next=o=>{e(o),A.next(o)}:(e.next&&(this.next=o=>{e.next(o),A.next(o)}),e.complete&&(this.complete=()=>{e.complete(),A.complete()}),e.error&&(this.error=o=>{e.error(o),A.error(o)}))}},"tap"),QiA=xs(class extends Ps{constructor(A,e){super(A),this.timeout=e,this.id=setTimeout(()=>this.error(new L5(this.timeout)),this.timeout)}next(A){super.next(A),clearTimeout(this.id),this.next=super.next}dispose(){clearTimeout(this.id),super.dispose()}},"timeout"),piA=function(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1/0;return e=>{if(e instanceof My){let o=Er(a=>{let l=A,d=new Ps(a);d.error=h=>{l-- >0?d.subscribe(e):a.error(h)},d.sourceId=o.id,d.subscribe(e)},"retry",[A]);return o.source=e,Ic.pipe(o),o}return o=>{let a=A,l=new Ps(o);l.error=d=>{a-- >0?e(l):o.error(d)},e(l)}}},nj=(A=>(A[A.AUTO_SWITCH_NEW_DEVICE=0]="AUTO_SWITCH_NEW_DEVICE",A[A.WAIT_CURRENT_DEVICE=1]="WAIT_CURRENT_DEVICE",A))(nj||{}),cL=class sX extends zK{constructor(e,o){super({mediaType:e,PlayerClass:o}),Y(this,"isRemote",!1),Y(this,"deviceId"),Y(this,"groupId",""),Y(this,"label",""),Y(this,"sourceTrack"),Y(this,"enableAutoSwitchWhenRecapturing",!0),Y(this,"_isRecapturing",!1),Y(this,"_lastRecaptureTime",0),Y(this,"_onMuteTimeoutId",-1),Y(this,"_encodeCheckTimeoutId",-1),Y(this,"recaptureMode",0),Y(this,"profile"),Y(this,"retryEncodeFailed")}get enableEncodeFrame(){return!1}get isPublishing(){return this.state.toString()==="publishing"}get isPublished(){return this.state==="publish"}get isUseCustomSource(){return!(!this.mediaTrack||this.sourceTrack===this.mediaTrack)}encodeFrame(e,o){throw new Error("Method not implemented.")}installTrackEvent(e){e.addEventListener(YA.MUTE,this.onTrackMuted),e.addEventListener(YA.UNMUTE,this.onTrackUnmuted),e.addEventListener(YA.ENDED,this.onTrackEnded),e.muted&&this.onTrackMuted(),e.readyState===YA.ENDED&&this.onTrackEnded()}uninstallTrackEvent(e){e.removeEventListener(YA.MUTE,this.onTrackMuted),e.removeEventListener(YA.UNMUTE,this.onTrackUnmuted),e.removeEventListener(YA.ENDED,this.onTrackEnded)}setStateToReady(){}capture(e){let o=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return WA(this,null,function*(){var a,l;let d=this.sourceTrack;try{let h,y=ko();F.emit(nA.LOCAL_TRACK_CAPTURE_START,{track:this}),e.customSource?(h=new MediaStream,h.addTrack(e.customSource)):(o||(a=this.sourceTrack)==null||a.stop(),h=yield itA(e));let S=h.getTracks()[0];return yield this.setInputMediaStreamTrack(S),e.customSource||(this.sourceTrack=S,this.updateDeviceIdInUse(),this.listenDeviceChange()),F.emit(nA.LOCAL_TRACK_CAPTURE_SUCCESS,{track:this,cost:ko()-y,profile:this.profile,room:(l=this.manager)==null?void 0:l.room}),h}catch(h){throw F.emit(nA.LOCAL_TRACK_CAPTURE_FAILED,{track:this,error:h}),this.log.error("getUserMedia error observed ".concat(h)),h}finally{o&&d?.stop()}})}setOutputMediaStreamTrack(e){var o;if(super.setOutputMediaStreamTrack(e),this.setStateToReady(),this.isPublishing||this.isPublished)return(o=this.room)==null?void 0:o.replaceTrack(this)}get hasFlag(){var e,o;let a=Np(((e=this.room)==null?void 0:e.localPublishFlag)||0,((o=this.room)==null?void 0:o.userId)||"");return this.mediaType===4&&a.hasVideo||this.mediaType===1&&a.hasAudio||this.mediaType===2&&a.hasAuxiliary}publish(e,o){return WA(this,null,function*(){return this.room=e,this.room.localTracks.add(this),this.emit("4",{mediaType:this.strMediaType,state:"starting",prevState:"stopped"}),this.userId=e.userId,this._log.bindParent(e.getLogger()),yield o,this._checkPublishFlag(e)})}_checkPublishFlag(e){return new Promise((o,a)=>WA(this,null,function*(){var l,d,h,y,S;let k=()=>a(new gi({code:Ct.API_CALL_ABORTED,message:"publish aborted"}));if(this.hasFlag||this.muted?o():((this.state===Zs.INIT||this.state==="ready")&&k(),ma(la(e,"local-publish-flag-changed"),KM(()=>this.hasFlag),dE(XK(la(this,Zs.INIT),la(this,"ready"))),Bl(o,a,k))),(h=(d=(l=this.room)==null?void 0:l.networkQuality)==null?void 0:d.hadRecentBadUplink)!=null&&h.call(d,2))return o();let V=e.heartbeatCount,J=((S=(y=this.mediaTrack)==null?void 0:y.stats)==null?void 0:S.totalFrames)||0;this._encodeCheckTimeoutId=setTimeout(()=>WA(this,null,function*(){var cA,CA,MA,ie,pe,qe,we,Di;if((MA=(CA=(cA=this.room)==null?void 0:cA.networkQuality)==null?void 0:CA.hadRecentBadUplink)!=null&&MA.call(CA,2)||e.heartbeatCount-V<3)return o();if((this.isPublished||this.isPublishing)&&this.isMediaTrackActive){if((ie=this.mediaTrack)!=null&&ie.stats){let Bi=this.mediaTrack.stats.totalFrames||0;Bi-J===0&&this.log.warn("capture totalFrames is 0 during encode check, totalFrames",Bi)}let Le=this.kind===YA.AUDIO,Qt=this.stat.bytesSent>0;if(si[Qt?"addSuccessEvent":"addFailedEvent"]({key:Le?503700:513702}),!Le){let Bi={H264:513704,H265:513705,VP8:513706}[((qe=(pe=this.room)==null?void 0:pe.videoCodec)==null?void 0:qe.toUpperCase())||"H264"];Bi&&si[Qt?"addSuccessEvent":"addFailedEvent"]({key:Bi})}if(!Qt){if(si.addEnum({key:Le?503701:513703,value:Jp()}),sn.uploadEvent({log:"stat-encode-failed-".concat(this.kind,"-").concat(cQ()||Hp()),userId:this.userId}),this.log.warn(Le?"encode failed":"".concat((Di=(we=this.room)==null?void 0:we.videoCodec)==null?void 0:Di.toUpperCase()," encode failed")),this.retryEncodeFailed&&(this.log.warn("retry encode"),yield this.retryEncodeFailed(this),this.stat.bytesSent>0||this.hasFlag||(yield OC(5e3),this.stat.bytesSent>0||this.hasFlag)))return o();this.emit("6",this),a(new gi({message:"".concat(this.strMediaType," encode failed"),code:Le?Ct.AUDIO_ENCODE_FAILED:Ct.VIDEO_ENCODE_FAILED}))}}}),1e4)}))}unpublish(){this.room&&this.room.localTracks.delete(this),this.log.info("unpublish"),F.emit(nA.LOCAL_TRACK_UNPUBLISHED,{track:this})}updateDeviceIdInUse(){return WA(this,null,function*(){if(this.sourceTrack&&Qy){let{deviceId:e,groupId:o}=this.sourceTrack.getSettings(),{label:a}=this.sourceTrack;(yield function(l){return WA(this,arguments,function(d){let{newDeviceId:h,oldDeviceId:y,oldGroupId:S,oldLabel:k,kind:V}=d;return function*(){return h===y&&(V!==YA.AUDIO||h!==AM||(yield M5(S,k)))}()})}({newDeviceId:e,oldDeviceId:this.deviceId,oldGroupId:this.groupId,oldLabel:this.label,kind:this.kind}))||(this.deviceId=e,this.label=a,o&&(this.groupId=o),t1().then(l=>{let d=l.find(h=>{let y=h.deviceId===e;return o&&(y=y&&h.groupId===o),y});d&&this.emit("2",d)}))}})}setProfile(e){this.log.info("setProfile",e),Object.assign(this.profile,e)}isNeedToRecapture(){let e=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return!(!this.deviceId||!this.sourceTrack||this.kind===YA.AUDIO&&!function(o){if(o instanceof CanvasCaptureMediaStreamTrack||!(o instanceof MediaStreamTrack))return!1;let a=o.label.toLocaleLowerCase();if(a.includes("mic")||a.includes("麦克风"))return!0;let l="".concat((o?.getSettings()||{}).deviceId,"_").concat(YA.AUDIO_INPUT);return!!jK.has(l)}(this.sourceTrack)||this.kind===YA.VIDEO&&!function(o){if(o instanceof CanvasCaptureMediaStreamTrack||!(o instanceof MediaStreamTrack))return!1;let a=o.label.toLocaleLowerCase();if(a.includes("camera")||a.includes("webcam"))return!0;let l="".concat((o?.getSettings()||{}).deviceId,"_").concat(YA.VIDEO_INPUT);return!!jK.has(l)}(this.sourceTrack)||this._isRecapturing||e&&nQ&&Bg)}onTrackMuted(){if(super.onTrackMuted(),otA(),this.isNeedToRecapture(!0)){if(Date.now()-this._lastRecaptureTimethis.onTrackMuted(),tM);this._onMuteTimeoutId=setTimeout(()=>WA(this,null,function*(){var e;if((e=this.sourceTrack)!=null&&e.muted){if((eg||Ha)&&document.visibilityState!=="visible")return;this.recapture(yield this.getRecoverCaptureDeviceId())}}),5e3)}}onTrackUnmuted(){super.onTrackUnmuted(),this._onMuteTimeoutId>0&&clearTimeout(this._onMuteTimeoutId)}onTrackEnded(){return WA(this,null,function*(){if(GI(sX.prototype,this,"onTrackEnded").call(this),this.isNeedToRecapture()&&this.recaptureMode===0){if(Date.now()-this._lastRecaptureTimethis.onTrackEnded(),tM);this.emit("7"),this.recapture(yield this.getRecoverCaptureDeviceId())}})}recapture(e){let o=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return WA(this,null,function*(){var a;if(this._isRecapturing||!this.sourceTrack)return;this.log.warn("recapture trying");let l=this.sourceTrack;o||(a=this.sourceTrack)==null||a.stop(),this._isRecapturing=!0,this._lastRecaptureTime=Date.now();let d={useExactDeviceId:!0};if(e==="user"||e==="environment")d.facingMode=e;else{let h;(this.kind==="audio"?yield em():yield tm()).find(y=>y.deviceId===e)&&(h=e),d.deviceId=h}return this.capture(d,o).then(()=>{this._isRecapturing=!1,this.log.warn("recapture success"),this.emit("1",{deviceId:this.deviceId}),F.emit(nA.LOCAL_TRACK_RECAPTURE,{track:this})}).catch(h=>{this._isRecapturing=!1,this.log.warn("recapture failed ".concat(h.message)),this.emit("5",h),F.emit(nA.LOCAL_TRACK_RECAPTURE,{track:this,error:h})}).finally(()=>{o&&l?.stop()})})}getRecoverCaptureDeviceId(){return WA(this,null,function*(){let e=this instanceof BQ;if(e&&this.facingMode)return this.facingMode;let{deviceId:o}=this;if(o){let a=(IL.get(o)||0)+1;if(IL.set(o,a),a>=3&&this.enableAutoSwitchWhenRecapturing){let l=e?(yield tm()).find(d=>!IL.has(d.deviceId)):(yield em()).find(d=>!IL.has(d.deviceId));l&&(this.log.warn("".concat(o," capture fail ").concat(a," times, change new ").concat(l.deviceId)),o=l.deviceId)}}return o})}stopCapture(){var e;this.sourceTrack&&(this.sourceTrack.stop(),F.emit(nA.LOCAL_TRACK_STOPPED,{track:this}),this.uninstallTrackEvent(this.sourceTrack)),this._inputTrack&&this.uninstallTrackEvent(this._inputTrack),(e=this.manager)==null||e.removeInput(this),this._onMuteTimeoutId&&clearTimeout(this._onMuteTimeoutId)}close(){super.close(),this.stopCapture()}};hi([lc(Zs.INIT,"ready",{ignoreError:!0,sync:!0})],cL.prototype,"setStateToReady"),hi([sL()],cL.prototype,"capture"),hi([lc("ready","publish",{ignoreError:!0,success(){F.emit(nA.LOCAL_TRACK_PUBLISHED,{track:this,room:this.room}),this.emit("4",{mediaType:this.strMediaType,state:"started",prevState:"starting"}),this.log.info("published")},fail(A){var e;(e=this.room)==null||e.localTracks.delete(this);let o="error",a=A instanceof gi?A:A.cause instanceof gi?A.cause:A,l=!1;a instanceof gi&&(a.message.includes("timeout")?o="timeout":a.code===Ct.API_CALL_ABORTED&&(l=!0,o="api-call")),this.emit("4",{mediaType:this.strMediaType,state:"stopped",prevState:"starting",reason:o,error:a}),this.log[l?"info":"error"]("publish failed",a)}}),Sy(521714,!1)],cL.prototype,"publish"),hi([jr(A=>function(){return WA(this,null,function*(){let e=this.state==="publish"?"started":"starting";A.call(this),this.emit("4",{mediaType:this.strMediaType,state:"stopped",prevState:e,reason:"api-call"}),clearTimeout(this._encodeCheckTimeoutId)})}),lc([],"ready",{sync:!0})],cL.prototype,"unpublish");var lL=cL,IL=new Map;F.on(nA.SWITCH_DEVICE_SUCCESS,A=>{A.track.deviceId&&IL.delete(A.track.deviceId)});var jM=class FL extends lL{constructor(e){super(1,XeA),Y(this,"mediaType",1),Y(this,"volume",0),Y(this,"profile",{echoCancellation:!0,autoGainControl:!0,noiseSuppression:!0,sampleRate:48e3,channelCount:1,bitrate:40}),Y(this,"playerMuted",!0),Y(this,"pipeline"),Y(this,"earMonitorGainNode",new PI),Y(this,"_output",new PI),Y(this,"codecPipeline",[]),Y(this,"stat",{bytesSent:0,packetsSent:0,audioLevel:0,totalAudioEnergy:0}),Y(this,"mixedAudioReferenceMap",new Map),Y(this,"isAudioContextLongSuspended",!1),Y(this,"after3aSilenceStartTime",0),Y(this,"_micMuted",!1),Y(this,"_volumeDetectionTrack",null),Y(this,"_volumeDetectionSource",new PI),this.manager=e,this.pipeline=new p5(e),this.pipeline.source.pipeTo(this.player.pipeline.volumeMeter),this.pipeline.gain.pipeTo(this.earMonitorGainNode).pipeTo(this._output),this.pipeline.gain.pipeTo(this.player.pipeline.volumeMeterAfter3A),this._volumeDetectionSource.pipeTo(this.player.pipeline.volumeMeter),this.handleMicrophoneAdded=this.handleMicrophoneAdded.bind(this),this.handleMicrophoneRemoved=this.handleMicrophoneRemoved.bind(this),F.on(nA.AUDIO_CONTEXT_LONG_SUSPENDED,this.handleAudioContextLongSuspended,this)}get dbVolume(){return e1.isRunning?this.player.pipeline.volumeMeter.getVolumeDb():Math.floor(Math.max(10*Math.log10(this.volume)+100,0))}getAudioLevel(){let e=(this.volume||super.getAudioLevel())*this.captureVolume;return e>1?1:e}getInternalAudioLevelAfter3A(){if(this.pipeline.isProcessEnabled)return this.player.getInternalAudioLevelAfter3A()}updateAfter3aSilenceStartTime(e){Ke(e)||(e!==0||this.after3aSilenceStartTime?e>0&&(this.after3aSilenceStartTime=0):this.after3aSilenceStartTime=ko())}setInputMediaStreamTrack(e){return WA(this,null,function*(){let o=this.trackSettings||{};si.addEnum({key:501701,value:o.channelCount||0,useUV:!1}),si.addEnum({key:501702,value:o.sampleRate||0,useUV:!1}),si.addEnum({key:502700,value:0});let{sampleRate:a,channelCount:l}=o;this._log.info("local audio track input ".concat(JSON.stringify({sampleRate:a,channelCount:l}))),this.pipeline.source.channelCount=l||1,this.pipeline.replaceSource(e),yield GI(FL.prototype,this,"setInputMediaStreamTrack").call(this,e),this.updatePlayingState(!!e)})}capture(e){return WA(this,arguments,function(o){var a=this;let{deviceId:l,customSource:d,useExactDeviceId:h=!0,retryWhenExactFailed:y}=o,S=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return function*(){let k=yield GI(FL.prototype,a,"capture").call(a,{video:!1,audio:!0,microphoneId:l,echoCancellation:a.profile.echoCancellation,autoGainControl:a.profile.autoGainControl,noiseSuppression:a.profile.noiseSuppression,sampleRate:a.profile.sampleRate,channelCount:a.profile.channelCount,useExactDeviceId:h,retryWhenExactFailed:y,customSource:d},S);return iL(),k}()})}switchDevice(e){return WA(this,null,function*(){if(this.mediaTrack){if(this.deviceId===e&&!this.isUseCustomSource&&(e!==AM||(yield M5(this.groupId,this.label))))return;try{this.log.info("switchDevice audio to: ".concat(e)),this.sourceTrack&&this.sourceTrack.stop(),yield this.capture({deviceId:e,useExactDeviceId:!0,retryWhenExactFailed:!1}),F.emit(nA.SWITCH_DEVICE_SUCCESS,{track:this}),this.log.info("switch microphone success")}catch(o){throw this.log.error("switch microphone failed ".concat(o)),this.deviceId&&this.recapture(this.deviceId),o}}})}listenDeviceChange(){Pc&&!Pc.listeners("audioInputRemoved").includes(this.handleMicrophoneRemoved)&&Pc.on("audioInputRemoved",this.handleMicrophoneRemoved,this)}handleMicrophoneRemoved(e){return WA(this,null,function*(){if(e.deviceId===this.deviceId){let o=this.recaptureMode===1;if(this.log.warn("RecaptureMode: ".concat(nj[this.recaptureMode],". Current microphone is lost: ").concat(JSON.stringify(e))),this.recaptureMode===0){Jg(this.userId,{eventId:2003,param1:6,streamType:1});let a=yield em();a[0]?this.recapture(a[0].deviceId):o=!0}o&&Pc.on("audioInputAdded",this.handleMicrophoneAdded,this)}})}handleMicrophoneAdded(e){this.recaptureMode===1&&e.deviceId!==this.deviceId||(Pc.off("audioInputAdded",this.handleMicrophoneAdded,this),this.log.warn("microphone added: ".concat(JSON.stringify(e))),this.recapture(e.deviceId))}update3A(e){return WA(this,arguments,function(o){var a=this;let{echoCancellation:l,noiseSuppression:d,autoGainControl:h}=o;return function*(){let y=a.sourceTrack||a.mediaTrack;if(!y)return;let S=y.getConstraints(),k=!1;!Ke(l)&&l!==a.profile.echoCancellation&&(a.profile.echoCancellation=l,S.echoCancellation=l,k=!0),!Ke(d)&&d!==a.profile.noiseSuppression&&(a.profile.noiseSuppression=d,S.noiseSuppression=d,k=!0),!Ke(h)&&h!==a.profile.autoGainControl&&(a.profile.autoGainControl=h,S.autoGainControl=h,k=!0),k&&(or||Bg?yield y.applyConstraints(S).catch(V=>a._log.warn("update3A failed: ",V)):a.deviceId&&(yield a.recapture(a.deviceId,!0)))}()})}get captureVolume(){return this.pipeline.volume}setCaptureVolume(e){this.pipeline.setVolume(e/100),this.pipeline.gain.node&&si.addEnum({key:502700,value:2})}setMute(e,o){var a;this._cleanupVolumeDetectionTrack(),e==="microphone"?(this._micMuted=!0,this.sourceTrack&&(this.sourceTrack.enabled=!1),o&&this._setupVolumeDetectionTrack(),((a=this.manager)==null?void 0:a.mixWeight)<=1?(this.muted=!0,this._inputTrack&&(this._inputTrack.enabled=!1),this._outputTrack&&(this._outputTrack.enabled=!1),this.emit("mute",this),F.emit(nA.TRACK_MUTED,{track:this})):this._outputTrack&&(this._outputTrack.enabled=!0)):e===!0?(this._micMuted=!1,this.muted=!0,this.sourceTrack&&(this.sourceTrack.enabled=!1),this._inputTrack&&(this._inputTrack.enabled=!1),this._outputTrack&&(this._outputTrack.enabled=!1),o&&this._setupVolumeDetectionTrack(),this.emit("mute",this),F.emit(nA.TRACK_MUTED,{track:this})):(this._micMuted=!1,this.muted=!1,this.sourceTrack&&(this.sourceTrack.enabled=!0),this._inputTrack&&(this._inputTrack.enabled=!0),this._outputTrack&&(this._outputTrack.enabled=!0),this.emit("unmute",this),F.emit(nA.TRACK_UNMUTED,{track:this}))}_setupVolumeDetectionTrack(){let e=this.sourceTrack||this.mediaTrack;if(!e)return;this._volumeDetectionTrack=e.clone(),this._volumeDetectionTrack.enabled=!0;let o=$2(this._volumeDetectionTrack);o&&this._volumeDetectionSource.setNode(o)}_cleanupVolumeDetectionTrack(){this._volumeDetectionTrack&&(this._volumeDetectionTrack.stop(),this._volumeDetectionTrack=null),this._volumeDetectionSource.deleteNode()}get isMicMuted(){return this._micMuted}setAudioVolume(e){super.setAudioVolume(0),eg&&this.player.setMuted(!0),this.earMonitorGainNode.node||(this.earMonitorGainNode.setNode(OI().createGain()),this._output.setNode(OI().destination)),this.earMonitorGainNode.node.gain.value=e}enableTrackANS(e){return this.update3A({noiseSuppression:e})}enableTrackAEC(e){if(this.sourceTrack&&!Bg&&!eg)return this.update3A({echoCancellation:e})}addDenoiser(e){var o;td<=92&&((o=this.trackSettings)==null?void 0:o.sampleRate)!==48e3?this._log.warn("denoiser only support sampleRate 48000 before chrome 93"):(si.addEnum({key:502700,value:1}),this.pipeline.denoiser.setNode(e),this.enableTrackANS(!1))}mixAudioReference(e,o){if(this.mixedAudioReferenceMap.has(o))return;this.log.info("mixAudioReference() => ".concat(o));let a=$2(e);if(!a)return;let l=new PI,d=OI().createGain();d.gain.value=1;let h=new PI;l.pipeTo(h).pipeTo(this.pipeline.mixNode),l.setNode(a),h.setNode(d),this.mixedAudioReferenceMap.set(o,[l,h])}unMixAudioReference(e){let[o,a]=this.mixedAudioReferenceMap.get(e)||[];o&&(this.log.info("unMixAudioReference() => ".concat(e)),o.deleteNode(),a?.deleteNode(),this.mixedAudioReferenceMap.delete(e))}setAudioReferenceVolume(e,o){let[a,l]=this.mixedAudioReferenceMap.get(e)||[];l!=null&&l.node&&(l.node.gain.value=o/100,this.log.info("setAudioReferenceVolume() => ".concat(e," ").concat(l.node.gain.value)))}addAudioProcessor(e,o,a){this.pipeline.silentNode.setNode(a),this.pipeline.mixNode.setNode(o),this.pipeline.aec.setNode(e)}removeDenoiser(e){if(this.pipeline.denoiser.node===e)return this.pipeline.denoiser.deleteNode(),this.enableTrackANS(!0)}removeAudioProcessor(e){this.pipeline.aec.node===e&&(this.pipeline.aec.deleteNode(),this.pipeline.silentNode.deleteNode(),this.pipeline.mixNode.deleteNode())}close(){this._cleanupVolumeDetectionTrack(),this.mixedAudioReferenceMap.forEach(e=>{let[o,a]=e;o.deleteNode(),a.deleteNode()}),this.mixedAudioReferenceMap.clear(),this.pipeline.remove(),this.earMonitorGainNode.deleteNode(),this._output.deleteNode(),Pc.off("audioInputAdded",this.handleMicrophoneAdded,this),Pc.off("audioInputRemoved",this.handleMicrophoneRemoved,this),F.off(nA.AUDIO_CONTEXT_LONG_SUSPENDED,this.handleAudioContextLongSuspended,this),super.close()}recapture(e){let o=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return WA(this,null,function*(){try{yield GI(FL.prototype,this,"recapture").call(this,e,o)}catch(a){let l=(yield em()).find(d=>d.deviceId!==e);if(!l)throw a;yield GI(FL.prototype,this,"recapture").call(this,l.deviceId)}})}encodeFrame(e){return this.manager?this.manager.encodePipeline.reduceRight((o,a)=>a?a({frame:o,ntp:Of()}):o,e):e}get enableEncodeFrame(){return!!this.manager&&this.manager.encodePipeline.some(e=>e)}get enableEncryptFrame(){return this.manager&&!!this.manager.encodePipeline[0]}handleAudioContextLongSuspended(e){let{isSuspended:o}=e;if(this.pipeline.isProcessEnabled)if(o){this.isAudioContextLongSuspended=!0,this.log.warn("context has suspended for ".concat(1.5," seconds, change to source audio").concat(xp?"":", non-Safari"));let a=this.sourceTrack||this.mediaTrack;a&&this.setOutputMediaStreamTrack(a)}else this.isAudioContextLongSuspended=!1,this.log.warn("context has resumed, change to processed audio"),this.pipeline.track&&this.setOutputMediaStreamTrack(this.pipeline.track)}setOutputMediaStreamTrack(e){if(this.isAudioContextLongSuspended){let o=this.sourceTrack||this.mediaTrack;o&&(e=o)}super.setOutputMediaStreamTrack(e)}};function I1(A,e){return e+4<=A.byteLength&&A.getUint8(e)===0&&A.getUint8(e+1)===0&&A.getUint8(e+2)===0&&A.getUint8(e+3)===1?4:e+3<=A.byteLength&&A.getUint8(e)===0&&A.getUint8(e+1)===0&&A.getUint8(e+2)===1?3:0}function tz(A){let e=arguments.length>1&&arguments[1]!==void 0&&arguments[1],o=new DataView(A),a=[],l=0;for(;l0){h=J;break}let y=h===-1?o.byteLength:h,S=y-l,k=new ArrayBuffer(S),V=new DataView(k);for(let J=0;J1&&arguments[1]!==void 0&&arguments[1];this.dataView=A,this.isSEI&&(e?this.addPreventionByte():this.removePreventionByte())}addPreventionByte(){let{seiPayloadStartIndex:A}=this,e=this.dataView.byteLength-2,o=[],a=0;for(let d=A;d<=e;d++){let h=this.dataView.getInt8(d);switch(h){case 0:case 1:case 2:case 3:a===2&&(o.push(3),a=0),h===0?a+=1:a=0,o.push(h);break;default:a=0,o.push(h)}}o.push(this.dataView.getInt8(this.dataView.byteLength-1));let l=new DataView(new Uint8Array([...new Uint8Array(this.dataView.buffer).slice(0,A),...o]).buffer);this.dataView=l}removePreventionByte(){let{seiPayloadStartIndex:A}=this,e=this.dataView.byteLength-1,o=[],a=0;for(let d=A;d<=e;d++)switch(this.dataView.getInt8(d)){case 0:a++,o.push(this.dataView.getInt8(d));break;case 3:a!==2&&o.push(this.dataView.getInt8(d)),a=0;break;default:o.push(this.dataView.getInt8(d)),a=0}let l=new DataView(new Uint8Array([...new Uint8Array(this.dataView.buffer).slice(0,A),...o]).buffer);this.dataView=l}get seiPayloadStartIndex(){let A=6;for(let e=6;e=this.dataView.byteLength?0:31&this.dataView.getUint8(A)}getStartCodeLength(){return this.dataView.byteLength>=4&&this.dataView.getUint8(0)===0&&this.dataView.getUint8(1)===0&&this.dataView.getUint8(2)===0&&this.dataView.getUint8(3)===1?4:this.dataView.byteLength>=3&&this.dataView.getUint8(0)===0&&this.dataView.getUint8(1)===0&&this.dataView.getUint8(2)===1?3:0}get isIDR(){return this.naluType===5}get isSPS(){return this.naluType===7}get isPPS(){return this.naluType===8}get isSEI(){return this.naluType===6}},miA=class{constructor(){Y(this,"_seiMessageList",[]),Y(this,"_smallSeiMessageList",[]),Y(this,"_seiPayloadType",243)}encodeSEINalu(A){let e=A.byteLength,o=parseInt(String(e/255),10),a=e%255,l=[];l.push(0,0,0,1,6,this._seiPayloadType);for(let h=0;h0&&A.data.byteLength>0){let a=9-this.getNaluCount(A.data);if(a<=0)return 0;let l=o.splice(0,a).reverse().map(this.encodeSEINalu.bind(this)),d=l.reduce((V,J)=>V+J.dataView.byteLength,0),h=new ArrayBuffer(d+A.data.byteLength),y=new DataView(h),S=new DataView(A.data),k=0;for(let V=0;V1&&arguments[1]!==void 0?arguments[1]:4,Ro),Y(this,"profile",fi({},jS)),Y(this,"avoidCropping",!1),Y(this,"_scaleResolutionDownBy"),Y(this,"stat",{bytesSent:0,packetsSent:0,framesEncoded:0,framesSent:0,frameWidth:0,frameHeight:0,fpsCapture:0,framesCaptured:0}),Y(this,"small"),Y(this,"isNeedToSetBandwidth"),Y(this,"muteImage"),Y(this,"manager"),Y(this,"_seiCodec",new miA),this.manager=e;let o=()=>{var a;if(this.isAllowed2k4k(this.profile))this.room&&this.settings.height>=1440&&this.state==="publish"&&this.room.sendAbilityStatus({"2k4k":1});else{let l=Kd(((a=this.room)==null?void 0:a.sdkAppId)||0)?_b:a0;this.log.warn("Resolution is reset to 1080p, need to upgrade ability here ".concat(l)),this.setProfile(po(fi({},this.profile),{width:1920,height:1080})),this.applyProfile()}};this.on("input-media-track-changed",o),this.on("publish",o),this.handleCameraAdded=this.handleCameraAdded.bind(this),this.handleCameraRemoved=this.handleCameraRemoved.bind(this)}get facingMode(){if(Qy&&this.mediaTrack)return this.mediaTrack.getSettings().facingMode}get contentHint(){var e;return((e=this._inputTrack)==null?void 0:e.contentHint)||""}get isQosClearFirst(){var e;return((e=this._inputTrack)==null?void 0:e.contentHint)==="detail"}get hasSmall(){var e;return!((e=this.manager)==null||!e.hasSmall)}setMute(e){return WA(this,null,function*(){var o,a,l;if(Vn(e)){if(this.muteImage===e)return;yield(o=this.manager)==null?void 0:o.deleteWatermark("mute"),yield(a=this.manager)==null?void 0:a.setWatermark({x:0,y:0,width:this.settings.width,height:this.settings.height,type:"mute",zIndex:999,imageUrl:e,fillVideo:!0}),this.muteImage=e,GI(N_.prototype,this,"setMute").call(this,!1)}else this.muteImage&&(yield(l=this.manager)==null?void 0:l.deleteWatermark("mute"),this.muteImage=void 0),GI(N_.prototype,this,"setMute").call(this,e)})}capture(e){return WA(this,arguments,function(o){var a=this;let{deviceId:l,facingMode:d,useExactDeviceId:h=!0,customSource:y,retryWhenExactFailed:S=!0}=o;return function*(){let k={audio:!1,video:!0,facingMode:d||a.facingMode,cameraId:l,width:a.profile.width,height:a.profile.height,frameRate:a.profile.frameRate,useExactDeviceId:h,retryWhenExactFailed:S,customSource:y};if(k.facingMode==="environment"){let V=yield a.getDeviceIdWhenUsingBackCamera();V&&(k.cameraId=V)}return GI(N_.prototype,a,"capture").call(a,k)}()})}setProfile(e){var o;let a=this.fallbackProfile(e);if(a.bitrate&&(this.isNeedToSetBandwidth=a.bitrate!==this.profile.bitrate),this.isAllowed2k4k(this.profile))super.setProfile(a);else{let l=Kd(((o=this.room)==null?void 0:o.sdkAppId)||0)?_b:a0;this.log.warn("Resolution is reset to 1080p, need to upgrade ability here ".concat(l)),super.setProfile(po(fi({},this.profile),{width:1920,height:1080}))}}applyProfile(){return WA(this,null,function*(){var e,o;if(!this.mediaTrack)return;let{width:a=0,height:l=0}=(this.sourceTrack||this.mediaTrack).getSettings(),d=a*l,h=this.settings,y=h.height!==this.profile.height||h.width!==this.profile.width||h.frameRate!==this.profile.frameRate;if(y&&(Zd===16&&this.deviceId?yield this.recapture(this.deviceId):(Gp(this.outMediaTrack)?yield(e=this.outMediaTrack)==null?void 0:e.applyConstraints({width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate}):yield(o=this.sourceTrack||this.mediaTrack)==null?void 0:o.applyConstraints({width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate}),this.manager&&this.manager.changeInput(this)),this.room&&this.settings.height>=1440&&this.state==="publish"&&this.room.sendAbilityStatus({"2k4k":1})),this.isNeedToSetBandwidth&&this.room&&this.room.setBandWidth){this.isNeedToSetBandwidth=!1;let{width:S=0,height:k=0}=(this.sourceTrack||this.mediaTrack).getSettings(),V=S*k;return y&&V&&d&&V===d?void this.log.warn("set bandwidth failed: resolution is not changed"):this.room.setBandWidth({bandwidth:this.profile.bitrate,type:YA.VIDEO,videoType:YA.BIG})}})}get settings(){let e={width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate},o=this.sourceTrack||this.mediaTrack;return Qy&&o&&Object.assign(e,o.getSettings()),e}get scaleResolutionDownBy(){return this._scaleResolutionDownBy?this._scaleResolutionDownBy:N0(this.settings,this.profile)}isAllowed2k4k(e){var o;return!(this.room&&this.room.scheduleResult&&!this.isScreen&&!(e.height*e.width<3686400))||((o=this.room.scheduleResult.trtcAutoConf)==null?void 0:o["2k4k"])===1}isNeedToSwitchDevice(e){return!(!this.mediaTrack||this.deviceId===e||this.facingMode===e)}switchDevice(e){return WA(this,null,function*(){try{if(!this.isNeedToSwitchDevice(e)&&!this.isUseCustomSource)return;let o={useExactDeviceId:!0,retryWhenExactFailed:!1};e==="user"||e==="environment"?o.facingMode=e:o.deviceId=e,this.sourceTrack&&this.sourceTrack.stop(),yield this.capture(o),F.emit(nA.SWITCH_DEVICE_SUCCESS,{track:this}),this.log.info("switch camera success")}catch(o){throw this.log.error("switch camera failed ".concat(o)),this.deviceId&&this.recapture(this.deviceId),o}})}getDeviceIdWhenUsingBackCamera(){return WA(this,null,function*(){let e;try{if(hk&&!ry&&q2){let o=(yield tm(!0)).map(l=>{var d;return po(fi({},l),{capabilities:(d=l.getCapabilities)==null?void 0:d.call(l)})}).filter(l=>{var d,h;return(h=(d=l.capabilities)==null?void 0:d.facingMode)==null?void 0:h.includes("environment")}),a=o[0];o.forEach(l=>{var d,h,y,S;let{capabilities:k}=l;((d=k.width)!=null&&d.max&&(h=k.height)!=null&&h.max?k.width.max*k.height.max:0)>((y=a.capabilities.width)!=null&&y.max&&(S=a.capabilities.height)!=null&&S.max?a.capabilities.width.max*a.capabilities.height.max:0)&&(a=l)}),a!=null&&a.capabilities&&(this._log.info("use max resolution back camera",a),e=a.deviceId)}}catch(o){this._log.warn("get max res camera failed",o)}return e})}updateSmallConfig(e){return WA(this,null,function*(){var o,a;this._log.info("update small stream config: ".concat(JSON.stringify(e)));let l=!this.small;this.small=this.fallbackProfile(e,!0),yield(o=this.manager)==null?void 0:o.update(),l&&(yield(a=this.room)==null?void 0:a.enableSmall(!0)),this.log.info("update small stream config success")})}fallbackProfile(e){let o=arguments.length>1&&arguments[1]!==void 0&&arguments[1],a=e.width>e.height,l=fi({},e);return e.width*e.height<=19200&&Ha&&uE&&(this.log.warn("".concat(o?"small ":"","resolution is ").concat(e.width,"*").concat(e.height,", fallback to 240*180 for android chrome")),l.width=a?240:180,l.height=a?180:240,l.bitrate=Math.max(e.bitrate,150)),e.width*e.height>921600&&G2&&(l.width=a?1280:720,l.height=a?720:1280,this.log.warn("reset to 1280 * 720 on iOS 13~14")),yk(LI,"14.3")&&gy(LI,"14.0",!0)&&this.on("7",()=>{let d=this.profile.width>this.profile.height;this.profile.width*this.profile.height>307200?(this.profile.width=d?640:480,this.profile.height=d?480:640,this.log.warn("reduce the resolution to 480p on iOS 14.0 ~ 14.2")):this.profile.width*this.profile.height>230400&&(this.profile.width=d?640:360,this.profile.height=d?360:640,this.log.warn("reduce the resolution to 360p on iOS 14.0 ~ 14.2"))}),!o&&this.avoidCropping&&(uE||or)&&!W0()&&e.width*e.height<=230400&&e.width/e.height===16/9&&(this._scaleResolutionDownBy=1280/e.width,l.width=1280,l.height=720,this.log.warn("capture 720p, scale: ".concat(this._scaleResolutionDownBy))),l}stopSmall(){var e,o;this.small&&(delete this.small,(e=this.manager)==null||e.update(),(o=this.room)==null||o.enableSmall(!1))}listenDeviceChange(){Pc&&!Pc.listeners("videoInputRemoved").includes(this.handleCameraRemoved)&&Pc.on("videoInputRemoved",this.handleCameraRemoved,this)}handleCameraRemoved(e){return WA(this,null,function*(){if(e.deviceId===this.deviceId){let o=this.recaptureMode===1;if(this.log.warn("RecaptureMode: ".concat(nj[this.recaptureMode],". Current camera is lost: ").concat(JSON.stringify(e))),this.recaptureMode===0){Jg(this.userId,{eventId:2003,param1:7,streamType:2});let a=yield tm();a[0]?this.recapture(a[0].deviceId):o=!0}o&&Pc.on("videoInputAdded",this.handleCameraAdded,this)}})}handleCameraAdded(e){return WA(this,null,function*(){this.recaptureMode===1&&e.deviceId!==this.deviceId||(Pc.off("videoInputAdded",this.handleCameraAdded,this),this.log.warn("camera added: ".concat(JSON.stringify(e))),this.recapture(e.deviceId))})}encodeFrame(e,o){if(!this.manager)return e;let a=o?8:this.mediaType;return this.manager.encodePipeline.reduceRight((l,d)=>d?d({frame:l,mediaType:a}):l,e)}get enableEncodeFrame(){return!!this.manager&&this.manager.encodePipeline.some(e=>e)}play(e,o){return Ke(this.mirror)&&!this.isScreen&&this.setMirror("view"),super.play(e,o)}close(){Pc.off("videoInputAdded",this.handleCameraAdded,this),Pc.off("videoInputRemoved",this.handleCameraRemoved,this),super.close()}recapture(e){return WA(this,null,function*(){try{yield GI(N_.prototype,this,"recapture").call(this,e)}catch(o){let a=(yield tm()).find(l=>l.deviceId!==e);if(!a)throw o;yield GI(N_.prototype,this,"recapture").call(this,a.deviceId)}})}setContentHint(e){this.mediaTrack&&"contentHint"in this.mediaTrack&&(this.mediaTrack.contentHint!==e&&(this.log.info("setContentHint ".concat(e)),this.mediaTrack.contentHint=e),this.outMediaTrack&&this.outMediaTrack.contentHint!==e&&(this.outMediaTrack.contentHint=e))}setRotation(e){this.manager&&(this.isScreen||Ke(e)||e!==this.rotation&&(this.rotation=e,this.manager.rotation=e))}};hi([qM(function(A){this.setContentHint(A.contentHint||"motion")})],iz.prototype,"capture");var BQ=iz,oz={};jh(oz,{REPORT_TYPE:()=>G0,buildSSOPackage:()=>iQ,bytes2ms:()=>M0,calculateScaleResolutionDownNumber:()=>N0,concatArrayBuffers:()=>lM,convertObjectNumberToInt:()=>T0,copyProperties:()=>c2,deepClone:()=>$f,deepCloneBasic:()=>Ay,deepMerge:()=>Xh,delay:()=>OC,fibonacci:()=>zf,formatedTime:()=>B2,getConstructorName:()=>nM,getContainerFromElement:()=>zb,getEnv:()=>r2,getFirst16Bits:()=>p2,getInternalVersion:()=>C2,getLast16Bits:()=>b0,getLoggerUrl:()=>jf,getMediaStreamTrackInfo:()=>ek,getMuteStateFromFlag:()=>Np,getNetworkType:()=>D0,getNumNetworkType:()=>Wf,getReconnectionTimeout:()=>Tp,getStringByteLength:()=>_0,getTestSignalDomain:()=>a2,getTurnServer:()=>h2,getUint32Version:()=>Xb,getValueType:()=>Cg,getViewListFromView:()=>gM,glog:()=>I2,ipv4ToUint32:()=>aM,isArray:()=>wa,isAudioWorkletSupported:()=>u2,isBoolean:()=>Nr,isConstructor:()=>Xf,isEmpty:()=>R0,isFunction:()=>Ra,isLangChinese:()=>Wd,isMediaStreamTrack:()=>jb,isNumber:()=>kn,isObject:()=>XE,isOverseaSdkAppId:()=>Kd,isPlainObject:()=>IE,isPortrait:()=>Zb,isPromise:()=>Zf,isRemoteTrack:()=>Wb,isRotate90Or270:()=>tQ,isSetSinkIdSupported:()=>E2,isString:()=>Vn,isUndefined:()=>Ke,isVideoMixerOutputTrack:()=>Gp,loadImage:()=>cM,loadVideo:()=>Q2,ms2bytes:()=>l2,ms2samples:()=>v0,normalizeUrl:()=>Ak,performanceNow:()=>ko,promiseAny:()=>rM,samples2ms:()=>Kb,setNetworkTypeFromWebRTC:()=>S0,stringify:()=>zd,stringifyIncludeValue:()=>w0,throttlePromise:()=>$b});var fiA=[-1,-1,1,-1,-1,1,1,1],yiA=[0,0,1,0,0,1,1,1],uL=class Z3 extends Zs{constructor(e,o){if(super(),this.context=e,Y(this,"name"),Y(this,"input"),Y(this,"output"),Y(this,"texture"),Y(this,"ctx2d",null),Y(this,"fbo"),Y(this,"width",0),Y(this,"height",0),Y(this,"x",0),Y(this,"y",0),Y(this,"program"),Y(this,"vertexShader"),Y(this,"fragmentShader"),Y(this,"totalFrames",0),Y(this,"dropFrames",0),Y(this,"matchInputSize",!0),Y(this,"texCoordBuffer"),Y(this,"positionBuffer"),Y(this,"lastInfo",{name:"",timestamp:0,totalFrames:0,x:0,y:0,width:0,height:0,fps:0}),Y(this,"cost",0),Y(this,"_canvas",null),Y(this,"_image"),Y(this,"log"),this.context.on("disconnect",this.close,this),this.name=o.name,this.log=o.logger,this.matchInputSize=o.matchInputSize!==!1,this.width=o.width||e.width,this.height=o.height||e.height,this._image=o.image,e instanceof QQ)e.ctx&&o.create2d&&(typeof OffscreenCanvas=="function"&&Zd!==16?this._canvas=new OffscreenCanvas(this.width,this.height):(this._canvas=document.createElement("canvas"),this._canvas.width=this.width,this._canvas.height=this.height),this.ctx2d=this._canvas.getContext("2d"),this._image=this._canvas);else try{let a=e.ctx;this.texCoordBuffer=this.createBuffer(yiA),this.positionBuffer=this.createBuffer(fiA),o.createTexture!==!1&&(this.texture=a.createTexture(),this.useTexture(),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.pixelStorei(a.UNPACK_ALIGNMENT,1)),o.useFbo&&(this.fbo=a.createFramebuffer(),this.useBufferFrame(),this.useTexture(),a.texImage2D(a.TEXTURE_2D,0,a.RGBA,this.width,this.height,0,a.RGBA,a.UNSIGNED_BYTE,null),a.framebufferTexture2D(a.FRAMEBUFFER,a.COLOR_ATTACHMENT0,a.TEXTURE_2D,this.texture,0)),o.useDefaultProgram?this.program=e.defaultProgam:(o.vertexShaderSource||o.fragmentShaderSource)&&(this.vertexShader=o.vertexShaderSource?e.createShader(a.VERTEX_SHADER,o.vertexShaderSource):e.defaultVShader,this.fragmentShader=o.fragmentShaderSource?e.createShader(a.FRAGMENT_SHADER,o.fragmentShaderSource):e.defaultFShader,this.program=e.createProgram(this.vertexShader,this.fragmentShader))}catch(a){this.context.destroy(new gi({code:Ct.VIDEO_MANAGER_ERROR,extraCode:3,message:"create video node ".concat(this.name," error ").concat(a.message||a)}))}}get image(){return this._image}set image(e){this._image=e}createFramebuffer(e){let o=this.context.ctx,a=o.createFramebuffer();return o.bindFramebuffer(o.FRAMEBUFFER,a),o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0,o.TEXTURE_2D,e,0),a}connect(e){for(var o=arguments.length,a=new Array(o>1?o-1:0),l=1;l0&&arguments[0]!==void 0?arguments[0]:0;var o;(o=this.output)==null||o.update(e)}disconnect(){for(var e,o=arguments.length,a=new Array(o),l=0;l{d&&(e.activeTexture(e.TEXTURE0+h),e.bindTexture(e.TEXTURE_2D,d))})}useProgram(){this.context.ctx.useProgram(this.program)}useBufferFrame(){let e=this.context.ctx;e.bindFramebuffer(e.FRAMEBUFFER,this.fbo||null)}createBuffer(e){let o=this.context.ctx,a=o.createBuffer();return o.bindBuffer(o.ARRAY_BUFFER,a),o.bufferData(o.ARRAY_BUFFER,new Float32Array(e),o.STATIC_DRAW),a}setTexBuffer(e){let o=this.context.ctx;o.bindBuffer(o.ARRAY_BUFFER,this.texCoordBuffer),o.bufferData(o.ARRAY_BUFFER,new Float32Array(e),o.STATIC_DRAW)}setPosBuffer(e){let o=this.context.ctx;o.bindBuffer(o.ARRAY_BUFFER,this.positionBuffer),o.bufferData(o.ARRAY_BUFFER,new Float32Array(e),o.STATIC_DRAW)}changeBufferData(e,o){let a=this.context.ctx;a.bindBuffer(a.ARRAY_BUFFER,e),a.bufferData(a.ARRAY_BUFFER,new Float32Array(o),a.STATIC_DRAW)}setAttributes(){let e=this.context.ctx;for(var o=arguments.length,a=new Array(o),l=0;l{e.enableVertexAttribArray(h),e.bindBuffer(e.ARRAY_BUFFER,d),e.vertexAttribPointer(h,2,e.FLOAT,!1,0,0)})}getVertexPoint(e,o){return[e/this.width*2-1,o/this.height*2-1]}layout2texCoords(e){return[...this.getVertexPoint(e.x,e.y),...this.getVertexPoint(e.x+e.width,e.y),...this.getVertexPoint(e.x,e.y+e.height),...this.getVertexPoint(e.x+e.width,e.y+e.height)]}resize(e,o){if(this.width!==e||this.height!==o){if(this.width=e,this.height=o,this._canvas&&(this._canvas.width=e,this._canvas.height=o),this.texture&&this.fbo){this.useTexture();let a=this.context.ctx;a.texImage2D(a.TEXTURE_2D,0,a.RGBA,e,o,0,a.RGBA,a.UNSIGNED_BYTE,null)}this.output&&this.output.matchInputSize&&this.output.resize(e,o)}}draw(e,o){this.setAttributes(e||this.positionBuffer,o||this.texCoordBuffer);let a=this.context.ctx;a.drawArrays(a.TRIANGLE_STRIP,0,4)}draw2d(e,o,a,l,d,h,y,S,k){let V=!(Ke(h)||Ke(y)||Ke(S)||Ke(k));return!(!this.ctx2d||!e)&&(e instanceof ImageData?(V?this.ctx2d.putImageData(e,o,a,h,y,S,k):this.ctx2d.putImageData(e,o,a),this.emit(Z3.RENDER,this.ctx2d.canvas)):(V?this.ctx2d.drawImage(e,h,y,S,k,o,a,l,d):this.ctx2d.drawImage(e,o,a,l,d),this.emit(Z3.RENDER,e)),typeof VideoFrame<"u"&&e instanceof VideoFrame&&e.close(),!0)}drawBackGround2d(e){this.ctx2d&&(this.ctx2d.save(),this.ctx2d.fillStyle=e,this.ctx2d.fillRect(0,0,this.width,this.height),this.ctx2d.restore())}getInfo(){var e;let{totalFrames:o,x:a,y:l,width:d,height:h,name:y,cost:S}=this,k=Date.now(),V=(o-this.lastInfo.totalFrames)/((k-this.lastInfo.timestamp)/1e3)|0;return this.lastInfo={totalFrames:o,x:a,y:l,width:d,height:h,timestamp:k,fps:V,name:y,cost:S},fi({parent:(e=this.input)==null?void 0:e.getInfo()},this.lastInfo)}createTexture(e){let o=this.context.ctx,a=o.createTexture();return this.useTextures(a),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MIN_FILTER,o.LINEAR),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MAG_FILTER,o.LINEAR),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),o.pixelStorei(o.UNPACK_ALIGNMENT,1),o.texImage2D(o.TEXTURE_2D,0,o.RGBA,o.RGBA,o.UNSIGNED_BYTE,e),a}};Y(uL,"RENDER","render"),hi([lc(Zs.INIT,"connected",{sync:!0})],uL.prototype,"connect"),hi([lc("connected",Zs.INIT,{ignoreError:!0,sync:!0})],uL.prototype,"disconnect"),hi([lc([],"closed",{sync:!0})],uL.prototype,"close");var AC=uL,DiA=ma(V5(250),oj(()=>performance.now()),nL()),SiA=[0,1,1,1,0,0,1,0],rj=class extends AC{constructor(A,e){super(A,Object.assign({useDefaultProgram:!0,createTexture:!1,name:"destination"},e)),Y(this,"_intervalId",0),Y(this,"_sequence",0),Y(this,"checkGLError",!1),Y(this,"checkVisibilityChange"),A instanceof QQ?this.ctx2d=A.ctx||null:A.available&&e!=null&&e.mirrorUpAndDown&&this.setTexBuffer(SiA)}start(A){this.log.info("".concat(this.name," start render ").concat(A," fps")),Gr.clearTask(this._intervalId),this._intervalId=Gr.run("intervalInWorker",()=>{if(A!==this.context.frameRate&&(Gr.clearTask(this._intervalId),this.start(this.context.frameRate)),this.requestFrame(this._sequence++),this.checkGLError&&this.context instanceof qC){let e=this.context.ctx.getError();e&&this.context.destroy(new gi({code:Ct.VIDEO_MANAGER_ERROR,extraCode:5,message:"".concat(this.name," req ").concat(this._sequence," render ").concat(this.totalFrames," faild ").concat(e)}))}},{fps:this.context.frameRate})}render(A){var e;return!((e=this.input)==null||!e.requestFrame(A))&&(this.useProgram(),this.useBufferFrame(),this.useInputTexture(),this.draw(),this.emit(AC.RENDER,this.context._canvas),!0)}addInput(A){for(var e=arguments.length,o=new Array(e>1?e-1:0),a=1;a0&&arguments[0]!==void 0?arguments[0]:0;this.state!=="closed"&&(this._intervalId&&(Gr.clearTask(this._intervalId),this._intervalId=0,A===1&&(this.log.info("".concat(this.name," use requestVideoFrameCallback")),this.checkVisibilityChange=()=>{document.hidden&&(this.start(this.context.frameRate),this.log.info("".concat(this.name," use timer")),document.removeEventListener("visibilitychange",this.checkVisibilityChange))},document.addEventListener("visibilitychange",this.checkVisibilityChange))),this.requestFrame(this._sequence++))}removeInput(A){super.removeInput(A),Gr.clearTask(this._intervalId)}resize(A,e){super.resize(A,e),this.context.setSize(A,e)}close(){super.close(),Gr.clearTask(this._intervalId),document.removeEventListener("visibilitychange",this.checkVisibilityChange)}},aj=class extends rj{constructor(A,e){super(A,e),Y(this,"_videoTrack"),Y(this,"_muteOb"),Y(this,"_closedOb",la(this,"closed")),Y(this,"_subscription"),Y(this,"_canvasContainer"),Number(rQ)<17&&(this._canvasContainer=document.createElement("div"),this._canvasContainer.style.display="none"),[this._videoTrack]=A.canvas.captureStream().getVideoTracks(),this._muteOb=la(this._videoTrack,"mute"),ma(la(this._videoTrack,"ended"),dE(this._closedOb),Bl(()=>{this.context.destroy(new gi({code:Ct.VIDEO_MANAGER_ERROR,extraCode:8,message:"video track ended"}))}))}enableCheckMute(){var A;this._subscription=ma(this._muteOb,dE(this._closedOb),l1((A=5e3,e=>{let o=performance.now();ma(DiA,ij(a=>a-o{var e;return!((e=this._videoTrack)==null||!e.muted||document.hidden)}),Bl(()=>{this.context.destroy(new gi({code:Ct.VIDEO_MANAGER_ERROR,extraCode:7,message:"video track muted"}))}))}disableCheckMute(){var A;(A=this._subscription)==null||A.dispose()}get videoTrack(){return this._videoTrack}putCanvasIntoDom(){!this.context._canvas||!this._canvasContainer||document.getElementById(this.context._canvas.id)||(this.log.info("".concat(this.name," put canvas to body")),document.body.appendChild(this._canvasContainer),this._canvasContainer.appendChild(this.context._canvas))}render(A){return this.putCanvasIntoDom(),super.render(A)}render2d(A){return this.putCanvasIntoDom(),super.render2d(A)}close(){var A,e;super.close(),(A=this._videoTrack)==null||A.stop(),delete this._videoTrack,(e=this._canvasContainer)==null||e.remove()}},MiA=class extends aj{render(A){var e;let o=!((e=this.input)==null||!e.requestFrame(A));if(this.context._canvas2d){let a=this.context._canvas2d.getContext("2d");a.clearRect(0,0,this.context._canvas2d.width,this.context._canvas2d.height),a.drawImage(this.context._canvas,0,0,this.context._canvas2d.width,this.context._canvas2d.height),this.emit(AC.RENDER,this.context._canvas2d)}else this.emit(AC.RENDER,this.context._canvas);return o}},viA=class extends aj{constructor(A,e,o){super(A,{name:"smallDestination",logger:o}),this.resolution=e}resize(A,e){let o,a=A*e,l=this.resolution.width*this.resolution.height;this.log.info("big res: ".concat(A,"*").concat(e," small res: ").concat(this.resolution.width,"*").concat(this.resolution.height," ")),a>l?o=a/l:(this.log.warn("Small stream resolution is not smaller than big stream, which is invalid. big: ".concat(A," * ").concat(e," small: ").concat(this.resolution.width," * ").concat(this.resolution.height)),o=a/19200),super.resize(A/Math.sqrt(o),e/Math.sqrt(o))}},sz=class extends AC{constructor(A,e){super(A,fi({name:"imageSource"},e)),Y(this,"_lastImage"),Y(this,"_totalFrames",0),Y(this,"_autoResize",!1),Y(this,"_canvasRendered"),Y(this,"videoCallbackId",0),Y(this,"waitingFirstFrame",!0),Y(this,"shouldUpdate",!0),this._autoResize=e?.autoResize!==!1,Zd===16&&(this._canvasRendered=hQ(),ma(this._canvasRendered,$K(this._image),g1(o=>o instanceof HTMLCanvasElement?la(o,"rendered"):tj()),dE(la(this,"closed")),Bl(()=>{this.update()})))}onFirstFrame(){this.waitingFirstFrame=!1}tryVideoFrameCallback(){if(!this.shouldUpdate)return;let A=this.image;this.videoCallbackId&&A.cancelVideoFrameCallback(this.videoCallbackId),Zp()&&!document.hidden&&(this.videoCallbackId=A.requestVideoFrameCallback((e,o)=>{this.waitingFirstFrame&&this.onFirstFrame(),document.hidden||(this._totalFrames=o.presentedFrames,this.update(1))}))}_render(A,e){var o;let{width:a,height:l}=this,{image:d}=this;if(d instanceof HTMLVideoElement){if(this.tryVideoFrameCallback(),{videoWidth:a,videoHeight:l}=d,!a||!l)return!1;d.width=a,d.height=l}else if(d instanceof HTMLImageElement||d instanceof ImageData||d instanceof ImageBitmap){if({width:a,height:l}=d,d!==this._lastImage)this._lastImage=d;else if(a===this.width&&l===this.height)return!0}else d instanceof HTMLCanvasElement||d instanceof OffscreenCanvas?({width:a,height:l}=d,this._lastImage=d):typeof VideoFrame<"u"&&d instanceof VideoFrame&&({displayWidth:a,displayHeight:l}=d,(o=this._lastImage)==null||o.close(),this._lastImage=d);if(!this._autoResize)return!0;if(this.width===a&&this.height===l&&this.totalFrames){if(e){this.useTexture();let h=this.context.ctx;h.texSubImage2D(h.TEXTURE_2D,0,0,0,h.RGBA,h.UNSIGNED_BYTE,d)}}else{if(e){this.useTexture();let h=this.context.ctx;h.texImage2D(h.TEXTURE_2D,0,h.RGBA,h.RGBA,h.UNSIGNED_BYTE,d)}this.resize(a,l)}return!0}get image(){return this._image}set image(A){var e;(e=this._canvasRendered)==null||e.next(A),this._image=A}render(A){return this._render(A,!0)}render2d(A){return this._render(A,!1)}},nz=class extends sz{constructor(A,e,o){super(A,o),this._player=e,this.name="videoPlayerSource",ma(la(this._player,yo.PLAYER_STATE_CHANGED),dE(la(this,"closed")),KM(a=>{let{state:l}=a;return l==="PLAYING"}),Bl(()=>{this.tryVideoFrameCallback()}))}get image(){return this._player.element}},d_=class extends nz{get available(){return this._player.isPlaying&&!this.waitingFirstFrame}constructor(A,e,o){super(A,new Ro({id:o.name,track:e,muted:!0,container:null,objectFit:"contain",log:o.logger}),o),this.name="videoTrackSource",this._player.play()}replaceTrack(A){this.waitingFirstFrame=!0,this._player.setTrack(A),this._player.play()}close(){super.close(),this._player.stop()}},RiA=class extends AC{constructor(A,e,o){super(A,po(fi({name:"textSource"},o),{create2d:!0})),Y(this,"hasChange",!0),Y(this,"content",""),this.ctx2d.textBaseline="top",this.content=e.content||"",e.font&&(this.font=e.font),e.color&&(this.color=e.color)}set font(A){this.ctx2d&&(this.ctx2d.font=A,this.hasChange=!0)}get font(){var A;return((A=this.ctx2d)==null?void 0:A.font)||""}set color(A){this.ctx2d&&(this.ctx2d.fillStyle=A,this.hasChange=!0)}get color(){var A;return((A=this.ctx2d)==null?void 0:A.fillStyle)||""}render2d(A){return!(!this.ctx2d||!this.hasChange)&&(this.ctx2d.clearRect(0,0,this.width,this.height),this.drawMultilineText(0,0),this.hasChange=!1,!0)}render(A){return!1}resize(A,e){if(!this.ctx2d)return;let{color:o,font:a}=this;super.resize(A,e),this.color=o,this.font=a}drawMultilineText(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1.2;if(!this.ctx2d)return;let a=this.ctx2d.measureText(this.content);e+=a.fontBoundingBoxAscent||a.actualBoundingBoxAscent||0;let l=this.font.match(/(\d+)px/),d=(l?parseInt(l[1],10):16)*o,h=this.content.split(` +`);for(let y=0;y0&&arguments[0]!==void 0&&arguments[0];if(this._canvas||(this._canvas=document.createElement("canvas"),this._canvas.id="trtc_".concat(this.name,"_").concat(EL._ids++)),A&&(this._canvas2d=document.createElement("canvas")),this.ctx=this._canvas.getContext("webgl2",Pb),!this.ctx)throw new gi({code:Ct.VIDEO_MANAGER_ERROR,extraCode:2,message:"webgl2 not supported"});this.defaultVShader=this.createShader(this.ctx.VERTEX_SHADER,` // 顶点着色器 attribute vec4 a_position; attribute vec2 a_texCoord; @@ -300,27 +300,27 @@ uniform sampler2D u_texture; void main() { gl_FragColor = texture2D(u_texture, v_texCoord); -} `),this.defaultProgam=this.createProgram(this.defaultVShader,this.defaultFShader),this._canvas.addEventListener("webglcontextlost",()=>{this.destroy(new ai({code:dt.VIDEO_MANAGER_ERROR,extraCode:4,message:"webgl context lost"}))})}destroy(A){let e="";return A&&(e=A.message,this.error=A,ii.addFailedEvent({key:512702,error:A})),this.disconnect(),this.log.info("video context destroy".concat(e)?": ".concat(e):""),this.ctx&&(this.ctx.deleteShader(this.defaultVShader),this.ctx.deleteShader(this.defaultFShader),this.ctx.deleteProgram(this.defaultProgam),delete this.ctx),A}set width(A){var e;(e=this.ctx)==null||e.viewport(0,0,A,this.height),super.width=A,this._canvas2d&&(this._canvas2d.width=A)}set height(A){var e;(e=this.ctx)==null||e.viewport(0,0,this.width,A),super.height=A,this._canvas2d&&(this._canvas2d.height=A)}setSize(A,e){var o;(o=this.ctx)==null||o.viewport(0,0,A,e),super.setSize(A,e),this._canvas2d&&(this._canvas2d.width=A,this._canvas2d.height=e)}createShader(A,e){let o=this.ctx,a=o.createShader(A);return o.shaderSource(a,e),o.compileShader(a),a}createProgram(A,e){let o=this.ctx,a=o.createProgram();return o.attachShader(a,A),o.attachShader(a,e),o.linkProgram(a),o.getProgramParameter(a,o.LINK_STATUS)||this.log.error(o.getProgramInfoLog(a)),a}};Y(gL,"UNAVAILABLE","unavailable"),Ci([lc(Zs.INIT,"created",{sync:!0,fail(A){this.log.error("video gl context create failed",A.cause),ii.addFailedEvent({key:512700,error:A.cause||A})},success(){this.log.info("video context created use webgl"),ii.addSuccessEvent({key:512700})}})],gL.prototype,"create"),Ci([lc("created",Zs.INIT,{ignoreError:!0,sync:!0,success(A){A&&this.emit(gL.UNAVAILABLE,A),this.removeAllListeners()}})],gL.prototype,"destroy");var VC=gL,CQ=class extends aL{constructor(){super(...arguments),Y(this,"ctx")}create(A){if(this.hasAlpha=A.alpha,this._canvas=document.createElement("canvas"),this._canvas.id="trtc_".concat(this.name,"_").concat(aL._ids++),this.ctx=this._canvas.getContext("2d",{alpha:A.alpha,willReadFrequently:A.willReadFrequently}),!this.ctx)throw new ai({code:dt.VIDEO_MANAGER_ERROR,extraCode:2,message:"2d context not supported"});this._canvas.addEventListener("contextlost",()=>{this.log.error("2d context lost")}),this._canvas.addEventListener("contextrestored",()=>{this.log.warn("2d context restored")})}destroy(A){let e="";A&&(e=A.message,this.error=A,ii.addFailedEvent({key:512703,error:A})),this.disconnect(),this.log.info("video context destroy ".concat(e?": ".concat(e):"")),delete this.ctx,this._canvas&&(this._canvas.remove(),this._canvas.width=0,this._canvas.height=0,delete this._canvas),this.removeAllListeners(),ii.addSuccessEvent({key:512703})}};function AiA(A,e,o,a,c){arguments.length>5&&arguments[5]!==void 0&&arguments[5]&&([o,a]=[a,o]);let d={sWidth:A,sHeight:e,dWidth:o,dHeight:a,sx:0,sy:0,dx:0,dy:0};if(A===0||e===0)return d;switch(c){case void 0:case"fill":break;case"contain":{let C=Math.min(o/A,a/e);d.dWidth=A*C,d.dHeight=e*C,d.dx=(o-d.dWidth)/2,d.dy=(a-d.dHeight)/2;break}case"cover":{let C=Math.max(o/A,a/e),y=o/C,S=a/C;d.sx=(A-y)/2,d.sy=(e-S)/2,d.sWidth=y,d.sHeight=S;break}}return d}Ci([lc(Zs.INIT,"created",{sync:!0,fail(A){this.log.error("video 2d context create failed",A.cause),ii.addFailedEvent({key:512701,error:A.cause||A})},success(){this.log.info("video context created use 2d"),ii.addSuccessEvent({key:512701})}})],CQ.prototype,"create"),Ci([lc("created",Zs.INIT,{ignoreError:!0,sync:!0})],CQ.prototype,"destroy");var eiA=class{constructor(A,e){this.node=A,this.layout=e,Y(this,"positionBuffer")}get x(){return this.layout.x||this.node.x}get y(){return this.layout.y||this.node.y}get width(){return this.layout.width||this.node.width}get height(){return this.layout.height||this.node.height}get right(){return this.x+this.width}get bottom(){return this.y+this.height}get fillMode(){return this.layout.fillMode}get rotation(){return this.layout.rotation}get hidden(){return!!this.layout.hidden}},F5=class extends AC{constructor(A,e){super(A,{useDefaultProgram:!0,useFbo:!0,name:"mix",create2d:!0,logger:e}),Y(this,"inputs",[]),Y(this,"backgroundColor","black")}addInput(A,e){let o=0,a=this.inputs.length;for(;oe.zIndex))throw new Error("input already exists at zIndex ".concat(e.zIndex));a=d}}let c=new eiA(A,e);this.inputs.splice(o,0,c)}changeInputLayout(A,e){let o=this.inputs.findIndex(gA=>gA.node===A);if(o<0)return;let{x:a,y:c,width:d,height:C,zIndex:y,fillMode:S,rotation:k,hidden:V}=e;if(!Je(y)&&this.inputs.some(gA=>gA.layout.zIndex===y&&gA.node!==A))throw new Error("input already exists at zIndex ".concat(e.zIndex));let J=this.inputs[o];Je(a)||(J.layout.x=a),Je(c)||(J.layout.y=c),Je(d)||(J.layout.width=d),Je(C)||(J.layout.height=C),Je(k)||(J.layout.rotation=k),Je(V)||(J.layout.hidden=V),S&&(J.layout.fillMode=S),!Je(y)&&y!==J.layout.zIndex&&(J.layout.zIndex=y,this.inputs.sort((gA,CA)=>gA.layout.zIndex-CA.layout.zIndex))}hasInput(A){return this.inputs.some(e=>e.node===A)}hasNoInput(){return this.inputs.length===0}resize(A,e){if(!this.matchInputSize)return void super.resize(A,e);let o=this.inputs.reduce((a,c)=>c?Object.assign(a,{width:Math.max(a.width,c.right),height:Math.max(a.height,c.bottom)}):a,{width:0,height:0});super.resize(o.width,o.height),this.context instanceof VC&&this.inputs.forEach(a=>{if(a){let c=this.layout2texCoords(a);a.positionBuffer?this.changeBufferData(a.positionBuffer,c):a.positionBuffer=this.createBuffer(c)}})}connect(A){for(var e=arguments.length,o=new Array(e>1?e-1:0),a=1;ae.node!==A),this.inputs.length===0&&this.drawBackGround2d(this.backgroundColor)}render(A){let e=this.context.ctx;if(e.clearColor(0,0,0,0),this.inputs.reduce((o,a)=>a.node.requestFrame(A)||o,!1)&&e){this.useProgram(),e.enable(e.BLEND),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA),this.useBufferFrame();for(let o=0;oe.node.requestFrame(A)),this.ctx2d){this.drawBackGround2d(this.backgroundColor);for(let e=0;e4&&arguments[4]!==void 0&&arguments[4];this.ctx2d&&(c&&([o,a]=[a,o]),this.ctx2d.save(),this.ctx2d.strokeStyle="red",this.ctx2d.lineWidth=2,this.ctx2d.strokeRect(A,e,o,a),this.ctx2d.restore())}getInfo(){let{totalFrames:A,x:e,y:o,width:a,height:c,name:d}=this,C=Date.now(),y=(A-this.lastInfo.totalFrames)/((C-this.lastInfo.timestamp)/1e3)|0;return this.lastInfo={totalFrames:A,x:e,y:o,width:a,height:c,timestamp:C,fps:y,name:d},mi({parent:this.inputs.filter(S=>S).map(S=>S.node.getInfo())},this.lastInfo)}removeAllInputs(){this.inputs.forEach(A=>{var e;if(A.node.disconnect(),A.positionBuffer&&this.context instanceof VC)try{(e=this.context.ctx)==null||e.deleteBuffer(A.positionBuffer)}catch{}})}close(){super.close(),this.removeAllInputs()}},tiA=[1,0,0,0,1,1,0,1],Sy=class extends AC{constructor(A,e,o,a){if(super(A,{useDefaultProgram:!0,useFbo:!0,create2d:!0,name:"transform",logger:e}),Y(this,"mirror",!1),Y(this,"rotation",0),o&&(this.mirror=o),a&&(this.rotation=a),A instanceof VC)try{this.setTexBuffer(tiA)}catch(c){A.destroy(new ai({code:dt.VIDEO_MANAGER_ERROR,extraCode:3,message:"create video node ".concat(this.name," error ").concat(c.message||c)}))}}draw2d(A,e,o,a,c){if(this.ctx2d){this.ctx2d.clearRect(0,0,this.width,this.height),this.ctx2d.save(),this.mirror&&(this.ctx2d.scale(-1,1),this.ctx2d.translate(-this.width,0)),this.rotation===90?(this.ctx2d.translate(a,0),this.ctx2d.rotate(Math.PI/2),this.ctx2d.scale(c/a,a/c)):this.rotation===180?(this.ctx2d.translate(this.width,this.height),this.ctx2d.rotate(Math.PI)):this.rotation===270&&(this.ctx2d.translate(0,c),this.ctx2d.rotate(3*Math.PI/2),this.ctx2d.scale(c/a,a/c));let d=super.draw2d(A,e,o,a,c);return this.ctx2d.restore(),d}return!1}render(A){var e;return!((e=this.input)==null||!e.requestFrame(A))&&(this.useProgram(),this.useBufferFrame(),this.useInputTexture(),this.draw(),!0)}resize(A,e){$B(this.rotation)&&([A,e]=[e,A]),super.resize(A,e)}},jK=class extends sL{constructor(A){super(arguments.length>1&&arguments[1]!==void 0?arguments[1]:4,vo),Y(this,"inputLocalVideoTracks",new Map),Y(this,"inputLocalScreenTracks",new Map),Y(this,"cameraNodeMap",new Map),Y(this,"screenNodeMap",new Map),Y(this,"textNodeMap",new Map),Y(this,"imageNodeMap",new Map),Y(this,"videoNodeMap",new Map),Y(this,"endedIds",new Set),Y(this,"videoContext"),Y(this,"mixNode"),Y(this,"destination"),Y(this,"manager"),Y(this,"stat"),Y(this,"_checkId",0),Y(this,"autoSetFps",!0),this.manager=A,this.log.id+="mix",this.create2dVideoContext(),this.destination=this.videoContext.createVideoTrackDestination({name:"mainDestination2d",logger:this.log}),this.destination.on(AC.RENDER,e=>{this.emit("render",e)}),this.mixNode=new F5(this.videoContext,this.log),this.mixNode.matchInputSize=!1}listenDeviceChange(){throw new Error("Method not implemented.")}enablePrintDetail(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:2e3;this._checkId=Gr.run("interval",()=>{this.destination&&this.log.debug(this.destination.getInfo())},{delay:A})}create2dVideoContext(){this.videoContext?this.videoContext.destroy():this.videoContext=new CQ({frameRate:15,logger:this.log,name:"mix-ctx"}),this.videoContext.create({alpha:!1})}setFps(A){this.autoSetFps=!1,this.videoContext.frameRate=A;for(let e of[...this.cameraNodeMap.values(),...this.screenNodeMap.values()])e.shouldUpdate=!1;setTimeout(()=>{var e;return(e=this.destination)==null?void 0:e.start(this.videoContext.frameRate)},500)}setFpsAuto(){var A;if(!this.autoSetFps)return;for(let c of[...this.cameraNodeMap.values(),...this.screenNodeMap.values()])c.shouldUpdate=!1;let e=null,o=0,a=!0;for(let[c,d]of this.inputLocalVideoTracks)if(d.profile.frameRate>o){if(this.endedIds.has(c)){let C=this.cameraNodeMap.get(c);C&&C.image.cancelVideoFrameCallback(C.videoCallbackId);continue}o=d.profile.frameRate,e=c}for(let[c,d]of this.inputLocalScreenTracks)if(d.profile.frameRate>o){if(this.endedIds.has(c)){let C=this.screenNodeMap.get(c);C&&C.image.cancelVideoFrameCallback(C.videoCallbackId);continue}o=d.profile.frameRate,e=c,a=!1}if(e!==null){let c=a?this.cameraNodeMap.get(e):this.screenNodeMap.get(e);c&&(c.shouldUpdate=!0,c.tryVideoFrameCallback()),this.log.info("set mix fps: ",o)}else(A=this.destination)==null||A.start(this.videoContext.frameRate),this.log.info("fallback to timer, fps: ",this.videoContext.frameRate)}setMixBackground(A){this.mixNode&&(this.mixNode.backgroundColor=A)}resizeMixCanvas(A,e){var o;(o=this.mixNode)==null||o.resize(A,e)}startMix(){return KA(this,null,function*(){var A;if(!this.mixNode||!this.destination)throw new Error("can't mix without necessary conditions");this.mixNode.disconnect(),this.mixNode.connect(this.destination),Fp&&this.player.setCanvas(this.videoContext._canvas),this.setOutputMediaStreamTrack(this.destination.videoTrack),(A=this.manager)==null||A.changeInput(this)})}addCameraSource(A,e,o){if(this.inputLocalVideoTracks.has(A)||this.cameraNodeMap.has(A))throw new Error("There is already a cameraSource with the same ID: ".concat(A));let a,{mediaTrack:c}=e;if(!c)throw new Error("no mediaTrack, add cameraSource failed");e.recaptureMode=1,rd(this,Pc).add("videoInputRemoved",d=>{d.deviceId===e.deviceId&&(this.endedIds.add(A),this.setFpsAuto())}),e.on("output-media-track-changed",()=>{this.endedIds.delete(A),this.updateCameraSource(A,o,e.mediaTrack)}),a=Zd===16&&c instanceof CanvasCaptureMediaStreamTrack?this.videoContext.createVideoImageSource(c.canvas,{name:"cameraCanvasSource",logger:this.log}):this.videoContext.createVideoTrackSource(c,"cameraNodeSource"),a.resize(e.settings.width,e.settings.height),a.shouldUpdate=!1,this._connectMix(a,o,"cover"),this.inputLocalVideoTracks.set(A,e),this.cameraNodeMap.set(A,a),this.setFpsAuto()}addScreenSource(A,e,o){if(this.inputLocalScreenTracks.has(A)||this.screenNodeMap.has(A))throw new Error("There is already a screenSource with the same ID: ".concat(A));let{mediaTrack:a}=e;if(!a)throw new Error("no mediaTrack, add screenSource failed");e.on("output-media-track-changed",()=>{this.updateScreenSource(A,o,e.mediaTrack)});let c=this.videoContext.createVideoTrackSource(a,"screenNodeSource");c.resize(e.settings.width,e.settings.height),c.shouldUpdate=!1,this._connectMix(c,o),this.inputLocalScreenTracks.set(A,e),this.screenNodeMap.set(A,c),this.setFpsAuto()}addTextSource(A){let{id:e,content:o="",font:a,color:c,layout:d}=A;if(this.textNodeMap.has(e))throw new Error("There is already a textSource with the same ID: ".concat(e));let C=this.videoContext.createTextSource({content:o,font:a,color:c});C.resize(d.width,d.height),this._connectMix(C,d),this.textNodeMap.set(e,C)}addImageSource(A,e,o){if(this.imageNodeMap.has(A))throw new Error("There is already a imageSource with the same ID: ".concat(A));let a=this.videoContext.createVideoImageSource(e,{autoResize:!1,logger:this.log});a.resize(e.width,e.height),this._connectMix(a,o),this.imageNodeMap.set(A,a)}addVideoSource(A,e,o){if(this.videoNodeMap.has(A))throw new Error("There is already a videoSource with the same ID: ".concat(A));let a=this.videoContext.createVideoImageSource(e,{autoResize:!1,logger:this.log});a.resize(e.videoWidth,e.videoHeight),a.shouldUpdate=!1,this._connectMix(a,o),this.videoNodeMap.set(A,a)}updateCameraSource(A,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,a=arguments.length>3?arguments[3]:void 0,c=this.inputLocalVideoTracks.get(A);c&&o&&o!==c.mediaTrack&&(this.log.debug("updateCameraSource mixerLocalVideoTrack newTrack:",o,"oldTrack:",c.mediaTrack),c.setInputMediaStreamTrack(o));let d=this.cameraNodeMap.get(A);if(d){if(o){if(Zd===16&&o instanceof CanvasCaptureMediaStreamTrack)if(d instanceof I_){let S=d.output;d.close(),d=this.videoContext.createVideoImageSource(o.canvas,{name:"cameraCanvasSource",logger:this.log}),d.connect(S),this.cameraNodeMap.set(A,d)}else d.image=o.canvas;else if(d instanceof I_)d.replaceTrack(o);else{let S=d.output;d.close(),d=this.videoContext.createVideoTrackSource(o,"cameraNodeSource"),d.connect(S),this.cameraNodeMap.set(A,d)}let{width:C,height:y}=o.getSettings();C&&y&&d.resize(C,y)}a&&d.resize(a.width,a.height),(a||o)&&this.setFpsAuto(),this._changeMixLayout(d,e)}}updateScreenSource(A,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,a=this.inputLocalScreenTracks.get(A);this.log.debug("updateScreenSource mixerLocalScreenTrack",a,o),a&&o&&o!==a.mediaTrack&&a.setInputMediaStreamTrack(o);let c=this.screenNodeMap.get(A);c&&(o&&c.replaceTrack(o),this._changeMixLayout(c,e))}updateTextSource(A){let{id:e,content:o,font:a,color:c,layout:d}=A,C=this.textNodeMap.get(e);C&&(Je(o)||(C.content=o),Je(a)||(C.font=a),Je(c)||(C.color=c),C.resize(d.width,d.height),this._changeMixLayout(C,d))}updateImageSource(A,e,o){let a=this.imageNodeMap.get(A);a&&(o&&(a.image=o,a.resize(o.width,o.height)),this._changeMixLayout(a,e))}updateVideoSource(A,e,o){let a=this.videoNodeMap.get(A);if(a){if(o){let c=a.image;c instanceof HTMLVideoElement&&this.stopVideoElement(c),a.image=o,a.resize(o.videoWidth,o.videoHeight)}this._changeMixLayout(a,e)}}_connectMix(A,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"contain";if(!this.mixNode)return;let{mirror:a,rotation:c}=e;A.disconnect();let d=new Sy(this.videoContext,this.log,a,c);d=A.connect(d),e.fillMode||(e.fillMode=o),d.connect(this.mixNode,e)}_changeMixLayout(A,e){if(!this.mixNode)return;let{mirror:o,rotation:a}=e,c=A.output||A;c instanceof Sy&&(Je(o)||(c.mirror=o),Je(a)||(c.rotation=a),c.resize(A.width,A.height)),this.mixNode.changeInputLayout(c,e)}removeCameraSource(A){let e=this.inputLocalVideoTracks.get(A);if(!e)return;e.close(),this.inputLocalVideoTracks.delete(A);let o=this.cameraNodeMap.get(A);o&&(o.output instanceof Sy&&o.output.close(),o.close(),this.cameraNodeMap.delete(A)),this.checkAfterRemove(!0)}removeScreenSource(A){let e=this.inputLocalScreenTracks.get(A);if(!e)return;e.close(),this.inputLocalScreenTracks.delete(A);let o=this.screenNodeMap.get(A);o&&(o.output instanceof Sy&&o.output.close(),o.close(),this.screenNodeMap.delete(A)),this.checkAfterRemove(!0)}removeTextSource(A){let e=this.textNodeMap.get(A);e&&(e.output instanceof Sy&&e.output.close(),e.close(),this.textNodeMap.delete(A)),this.checkAfterRemove()}removeImageSource(A){let e=this.imageNodeMap.get(A);e&&(e.output instanceof Sy&&e.output.close(),e.close(),this.imageNodeMap.delete(A)),this.checkAfterRemove()}removeVideoSource(A){let e=this.videoNodeMap.get(A);e&&(e.output instanceof Sy&&e.output.close(),e.image instanceof HTMLVideoElement&&this.stopVideoElement(e.image),e.close(),this.videoNodeMap.delete(A)),this.checkAfterRemove()}checkAfterRemove(){arguments.length>0&&arguments[0]!==void 0&&arguments[0]&&this.setFpsAuto()}stopVideoElement(A){A.pause(),A.src="",A.srcObject=null,A.remove()}close(){var A;super.close(),Gr.clearTask(this._checkId),(A=this.videoContext)==null||A.destroy(),delete this.mixNode,delete this.destination;for(let e of[...this.inputLocalVideoTracks.values(),...this.inputLocalScreenTracks.values()])e.close();this.inputLocalVideoTracks.clear(),this.inputLocalScreenTracks.clear(),this.cameraNodeMap.clear(),this.screenNodeMap.clear(),this.textNodeMap.clear(),this.imageNodeMap.clear(),kn(this);for(let e of this.videoNodeMap.values())e.image instanceof HTMLVideoElement&&this.stopVideoElement(e.image);this.videoNodeMap.clear(),this.log.info("localMixVideoTrack close, stop mix")}},WK=PA();if(typeof navigator<"u"&&navigator.mediaDevices&&"setCaptureHandleConfig"in navigator.mediaDevices)try{navigator.mediaDevices.setCaptureHandleConfig({handle:WK,exposeOrigin:!0,permittedOrigins:["*"]})}catch{}var iiA=function(A){return KA(this,null,function*(){let e=null,o=function(d){let C={preferCurrentTab:d.preferDisplaySurface==="current-tab"||!!d.captureElement,systemAudio:"include",selfBrowserSurface:"include",surfaceSwitching:"include"},y={width:Bg?{max:d.width}:{ideal:d.width,max:d.width},height:Bg?{max:d.height}:{ideal:d.height,max:d.height},frameRate:d.frameRate,displaySurface:d.preferDisplaySurface||"monitor"};if(C.video=y,d.systemAudio){let{echoCancellation:S=!0,noiseSuppression:k=!1,autoGainControl:V=!1}=d;C.audio={echoCancellation:S,noiseSuppression:k,autoGainControl:V,sampleRate:48e3}}return C}(A);QA.info("getDisplayMedia with constraints: ".concat(JSON.stringify(o)));let a=yield navigator.mediaDevices.getDisplayMedia(o);A.systemAudio&&a.getAudioTracks().length===0&&(J0&&id<74||Bg||er)&&QA.warn("Your browser not support capture system audio");let c=a.getVideoTracks()[0];if(c){if(A.frameRate)try{yield c.applyConstraints({frameRate:{min:A.frameRate,ideal:A.frameRate},width:A.width,height:A.height})}catch(d){QA.warn("screen applyConstraints failed: ".concat(d))}A.captureElement&&(yield function(d,C){return KA(this,null,function*(){var y;if("CropTarget"in window&&"fromElement"in CropTarget&&Ra(d.cropTo))try{if(((y=d.getCaptureHandle())==null?void 0:y.handle)!==WK)return;let S=yield CropTarget.fromElement(C);yield d.cropTo(S)}catch(S){QA.warn("cropTo target failed ".concat(S))}})}(c,A.captureElement))}if(A.audio){let d=function(C){let y={echoCancellation:C.echoCancellation,autoGainControl:C.autoGainControl,noiseSuppression:C.noiseSuppression,sampleRate:C.sampleRate,channelCount:C.channelCount};return Je(C.microphoneId)||(y.deviceId=C.microphoneId),{audio:y,video:!1}}(A);QA.info("getUserMedia with constraints: ".concat(JSON.stringify(d))),e=yield navigator.mediaDevices.getUserMedia(d),a.addTrack(e.getAudioTracks()[0])}return a})},qM=class extends dQ{constructor(A){super(A,2),Y(this,"profile",{width:1920,height:1080,frameRate:5,bitrate:1600}),Y(this,"objectFit","contain"),Y(this,"isScreen",!0),this._log.id="s-".concat(this._log.id)}get isShareCurrentTab(){var A,e;try{return WK===((e=(A=this.mediaTrack)==null?void 0:A.getCaptureHandle())==null?void 0:e.handle)}catch{return}}capture(A){return KA(this,arguments,function(e){var o=this;let{systemAudio:a=!1,autoGainControl:c,echoCancellation:d,noiseSuppression:C,audioTrack:y,videoTrack:S,captureElement:k,preferDisplaySurface:V}=e;return function*(){var J;try{let gA,CA=ko();return S||y?(gA=new MediaStream,S&&gA.addTrack(S),y&&gA.addTrack(y)):(gA=yield iiA({audio:!1,systemAudio:a,width:o.profile.width,height:o.profile.height,frameRate:o.profile.frameRate,autoGainControl:c,echoCancellation:d,noiseSuppression:C,captureElement:k,preferDisplaySurface:V}),o.sourceTrack=gA.getVideoTracks()[0]),yield o.setInputMediaStreamTrack(gA.getVideoTracks()[0]),F.emit(nA.LOCAL_TRACK_CAPTURE_SUCCESS,{track:o,cost:ko()-CA,profile:o.profile,room:(J=o.manager)==null?void 0:J.room}),gA}catch(gA){throw o.log.error("getDisplayMedia error observed ".concat(gA)),gA instanceof ai?gA:new ai({code:dt.INITIALIZE_FAILED,name:gA.name,message:gA.message})}}()})}switchDevice(A){return KA(this,null,function*(){throw new Error("Method not implemented.")})}};Ci([VM(function(A){this.setContentHint(A.contentHint||"detail")})],qM.prototype,"capture");var zK,ZK=class extends HM{constructor(A){super(A),this._log.id="s-".concat(this._log.id),this.isScreen=!0}addAudioProcessor(A,e,o){this.pipeline.silentNode.setNode(o),this.pipeline.mixNode.setNode(e),this.pipeline.aec.setNode(A),this.enableTrackAEC(!1)}removeAudioProcessor(A){this.pipeline.aec.node===A&&(this.pipeline.aec.deleteNode(),this.pipeline.silentNode.deleteNode(),this.pipeline.mixNode.deleteNode(),this.enableTrackAEC(!0))}};function XK(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:48e3,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,a=arguments.length>3?arguments[3]:void 0;return KA(this,null,function*(){let c=FI();zK||(zK=Vg(c,URL.createObjectURL(new Blob(['registerProcessor("dumper",class extends AudioWorkletProcessor{constructor(e){super(),this.sourceSampleRate=e.processorOptions.sourceSampleRate||48e3,this.targetSampleRate=e.processorOptions.targetSampleRate||48e3,this.port.onmessage=e=>{this.port2=e.data.port}}process(e){return(this.port2||this.port).postMessage(this.resampleAll(e,this.sourceSampleRate,this.targetSampleRate)),!0}resampleAll(r,s,a){if(s===a)return r;var o=[];for(let t=0;ty.connect(C,0,S)),new ReadableStream({start(y){C.port.onmessage=S=>{y.enqueue(S.data)}},cancel(){A.forEach(y=>y.disconnect(C)),C.port.close()}})})}var oiA=class extends QeA{constructor(A){super(),this.room=A,Y(this,"_localAudioTrack"),Y(this,"_localScreenAudioTrack"),Y(this,"log"),Y(this,"denoiser"),Y(this,"voiceChanger"),Y(this,"mixChangedDebounce"),Y(this,"audioProcessor"),Y(this,"encodePipeline",[]),Y(this,"decodePipeline",[]),Y(this,"getPCMAbortCtrlMap",new Map),Y(this,"audioFrameEventConfigMap",new Map),Y(this,"audioReferenceMap",new Map),Y(this,"isLocalAudioNeedAudioProcess",!1),Y(this,"isScreenAudioNeedAudioProcess",!1),this.log=QA.createLogger({parent:A?.getLogger(),id:"am",userId:A?.userId,sdkAppId:A?.sdkAppId}),this.installEvent()}get localAudioTrack(){return this._localAudioTrack}get _localAudioPipline(){var A;return(A=this._localAudioTrack)==null?void 0:A.pipeline}get _localScreenAudioPipeline(){var A;return(A=this._localScreenAudioTrack)==null?void 0:A.pipeline}dump(A){var e,o;if(!this._localAudioTrack)return;let a=[],c=[];(e=this._localAudioPipline)!=null&&e.source.node&&(a.push(this._localAudioPipline.source.node),c.push("mic")),(o=this._localAudioPipline)!=null&&o.denoiser.node&&(a.push(this._localAudioPipline.denoiser.node),c.push("mic-processed")),this.mixWeight>1&&(a.push(this.audioContext.createMediaStreamSource(this._localAudioPipline.stream)),c.push("mix")),this.log.info("dump audio track ".concat(c,", duration: ").concat(A));let d=new AbortController,C=[],y=setTimeout(()=>{this.log.info('dump audio track complete please input "download()" to download.'),d.abort("timeout")},1e3*A),S=()=>{for(let V=0;VV.pipeTo(new WritableStream({write(J){J.forEach((gA,CA)=>C[CA]=C[CA]?C[CA].concat(gA[0]):[gA[0]])}}),d).catch(J=>S));return{then:k.then.bind(k),download:S}}getPCM(A,e){var o,a,c;if(typeof WritableStream>"u")return void this.log.warn("getPCM failed: browser not support WritableStream");let{enable:d,sampleRate:C=48e3,channelCount:y=1,port:S}=(e===""?this.audioFrameEventConfigMap.get(""):this.audioFrameEventConfigMap.get(e)||this.audioFrameEventConfigMap.get("*"))||{};if(!d)return;this.log.info("getPCM ".concat(e||"local"));let k,V,J=Math.floor(.04*C),gA=new Float32Array(J),CA=new Float32Array(J),MA=0,$A=new AbortController,Be=e===""?(o=this._localAudioTrack)==null?void 0:o.mediaTrack:(c=(a=this.room)==null?void 0:a.remotePublishedUserMap.get(e))==null?void 0:c.remoteAudioTrack.mediaTrack;if(Be)return XK([FI().createMediaStreamSource(new MediaStream([Be]))],C,y,S).then(Ye=>Ye.pipeTo(new WritableStream({write(ve){ve[0][0]&&(MA+ve[0][0].length>J?(gA.set(ve[0][0].subarray(0,J-MA),MA),k=ve[0][0].subarray(J-MA),ve[0][1]&&(CA.set(ve[0][1].subarray(0,J-MA),MA),V=ve[0][1].subarray(J-MA)),MA+=J-MA):(k&&(gA.set(k,MA),MA+=k.length,k=void 0),V&&(CA.set(V,MA),V=void 0),gA.set(ve[0][0],MA),ve[0][1]&&CA.set(ve[0][1],MA),MA+=ve[0][0].length),MA>=J&&(MA=0,A({userId:e,sampleRate:C,channelCount:y,data:y===1?gA:[gA,CA]}),gA=new Float32Array(J),CA=new Float32Array(J)))}}),$A).catch(ve=>this.log.warn("stop getPCM reason:".concat(ve)))),$A;this.log.info("getPCM failed: ".concat(e||"local"," has no audio track"))}get hasScreenAudioTrack(){return!Je(this._localScreenAudioTrack)}get hasAudioTrack(){return!Je(this._localAudioTrack)}changeInput(A){var e,o;return A instanceof ZK?(this._localScreenAudioTrack=A,this.isScreenAudioNeedAudioProcess&&(e=this.audioProcessor)!=null&&e.screenAudioWorkletNode&&(A.addAudioProcessor(this.audioProcessor.screenAudioWorkletNode,this.audioProcessor.mixNode,this.audioProcessor.silentNode),this.audioReferenceMap.forEach((a,c)=>{A.mixAudioReference(a,c)})),A.pipeline.connect(),this.mixOnChange()):A instanceof HM?(this._localAudioTrack=A,this.denoiser&&A.addDenoiser(this.denoiser),this.isLocalAudioNeedAudioProcess&&(o=this.audioProcessor)!=null&&o.localAudioWorkletNode&&(A.addAudioProcessor(this.audioProcessor.localAudioWorkletNode,this.audioProcessor.mixNode,this.audioProcessor.silentNode),this.audioReferenceMap.forEach((a,c)=>{A.mixAudioReference(a,c)})),A.pipeline.connect(),this.mixOnChange()):A instanceof s1?A.setOutputMediaStreamTrack(A.mediaTrack):void 0}mixAudioReference(A,e){var o;(o=this._localAudioTrack)==null||o.mixAudioReference(A,e)}unMixAudioReference(A){var e;(e=this._localAudioTrack)==null||e.unMixAudioReference(A)}setAudioReferenceVolume(A,e){var o;(o=this._localAudioTrack)==null||o.setAudioReferenceVolume(A,e)}mixOnChange(){return this.mixChangedDebounce||(this.mixChangedDebounce=Promise.resolve().then(()=>{var A,e;return delete this.mixChangedDebounce,Promise.all([(A=this._localAudioTrack)==null?void 0:A.setOutputMediaStreamTrack(this.mixWeight>1?this.mixTrack:this._localAudioTrack.mediaTrack),(e=this._localScreenAudioTrack)==null?void 0:e.setOutputMediaStreamTrack(this.mixWeight>1?this.mixTrack:this._localScreenAudioTrack.mediaTrack)])})),this.mixChangedDebounce}removeInput(A){A instanceof ZK?delete this._localScreenAudioTrack:A instanceof HM&&delete this._localAudioTrack}addDenoiser(A){var e;this.denoiser=A,(e=this._localAudioTrack)==null||e.addDenoiser(A)}addAudioProcessor(A,e,o,a){var c;this.audioProcessor={localAudioWorkletNode:o,mixNode:A,silentNode:e,screenAudioWorkletNode:a},this.isLocalAudioNeedAudioProcess&&this._localAudioTrack&&o&&(this._localAudioTrack.addAudioProcessor(o,A,e),this.audioReferenceMap.forEach((d,C)=>{var y;(y=this._localAudioTrack)==null||y.mixAudioReference(d,C)})),this.isScreenAudioNeedAudioProcess&&this._localScreenAudioTrack&&a&&((c=this._localScreenAudioTrack)==null||c.addAudioProcessor(a,A,e),this.audioReferenceMap.forEach((d,C)=>{var y;(y=this._localScreenAudioTrack)==null||y.mixAudioReference(d,C)}))}removeDenoiser(A){var e;return delete this.denoiser,(e=this._localAudioTrack)==null?void 0:e.removeDenoiser(A)}addVoiceChanger(A,e){var o;this.voiceChanger=[A,e],(o=this._localAudioTrack)==null||o.pipeline.voiceChanger.setNode(A,e)}removeVoiceChanger(){var A;delete this.voiceChanger,(A=this._localAudioTrack)==null||A.pipeline.voiceChanger.deleteNode()}removeAudioProcessor(A,e){var o,a;delete this.audioProcessor,(o=this._localAudioTrack)==null||o.removeAudioProcessor(A),(a=this._localScreenAudioTrack)==null||a.removeAudioProcessor(e)}destroy(){this.close(),this.audioReferenceMap.clear(),this.getPCMAbortCtrlMap.forEach(A=>A?.abort("destroy")),this.getPCMAbortCtrlMap.clear(),this.audioFrameEventConfigMap.clear(),this.uninstallEvent()}addEncodeProcessor(A){let{processor:e,type:o}=A;var a;this.encodePipeline.includes(e)||(this.encodePipeline[o]=e,(a=this.room)==null||a.enableInsertableStreams())}addDecodeProcessor(A){let{processor:e,type:o}=A;var a;this.decodePipeline.includes(e)||(this.decodePipeline[o]=e,(a=this.room)==null||a.enableInsertableStreams())}removeEncodeProcessor(A){let{type:e}=A;this.encodePipeline[e]=void 0}removeDecodeProcessor(A){let{type:e}=A;this.decodePipeline[e]=void 0}handleLocalTrackStarted(A){let{room:e,userId:o}=A;var a;if(e!==this.room||this.getPCMAbortCtrlMap.get(o))return;let c=this.getPCM(d=>{var C;(C=this.room)==null||C.emit("audio-frame",d)},"");this.getPCMAbortCtrlMap.set(o,c),this.getPCMAbortCtrlMap.get(o)&&((a=this._localAudioTrack)==null||a.on("input-media-track-changed",()=>{let d=this.getPCMAbortCtrlMap.get(o);d&&(d.abort("inputMediaTrackChanged"),d=this.getPCM(C=>{var y;(y=this.room)==null||y.emit("audio-frame",C)},""),this.getPCMAbortCtrlMap.set(o,d))}))}handleLocalTrackStopped(A){let{room:e,userId:o}=A;if(e!==this.room)return;let a=this.getPCMAbortCtrlMap.get(o);a&&(a.abort("stopLocalAudio"),this.getPCMAbortCtrlMap.delete(o))}handleRemoteTrackStarted(A){let{room:e,userId:o}=A;if(e===this.room&&!this.getPCMAbortCtrlMap.get(o)){let a=this.room.audioManager.getPCM(c=>{var d;(d=this.room)==null||d.emit("audio-frame",c)},o);this.getPCMAbortCtrlMap.set(o,a)}}handleRemoteTrackStopped(A){let{room:e,userId:o}=A;if(e!==this.room)return;let a=this.getPCMAbortCtrlMap.get(o);a&&(a.abort("stopRemoteAudio"),this.getPCMAbortCtrlMap.delete(o))}installEvent(){F.on("113",this.handleLocalTrackStarted,this),F.on("114",this.handleLocalTrackStopped,this),F.on("115",this.handleRemoteTrackStarted,this),F.on("116",this.handleRemoteTrackStopped,this)}uninstallEvent(){F.off("113",this.handleLocalTrackStarted),F.off("114",this.handleLocalTrackStopped),F.off("115",this.handleRemoteTrackStarted),F.off("116",this.handleRemoteTrackStopped)}updateAudioReference(A){let{type:e,audioReference:o,refId:a,volume:c}=A;if(e==="add"){if(this.audioReferenceMap.get(a)||!o||(this.audioReferenceMap.set(a,o),!this.audioProcessor))return;this.mixAudioReference(o,a)}else if(e==="remove")this.audioReferenceMap.get(a)&&(this.audioReferenceMap.delete(a),this.unMixAudioReference(a));else if(e==="updateVolume"){if(!this.audioProcessor||Je(c))return;this.setAudioReferenceVolume(a,c)}}};function o1(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:30,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return jr((o,a)=>function(){for(var c=arguments.length,d=new Array(c),C=0;C{let k=setTimeout(()=>{let V=new ai({code:dt.API_CALL_TIMEOUT,message:"checkPendingPromise ".concat(a,"() timeout ").concat(A,"s")});(this.log||this._log||QA).warn(V),e===2?S(V):e===1&&y()},1e3*A);this._checkPendingPromiseSet||(this._checkPendingPromiseSet=new Set),this._checkPendingPromiseSet.add(k),o.apply(this,d).then(y,S).finally(()=>{clearTimeout(k),this._checkPendingPromiseSet&&k&&this._checkPendingPromiseSet.delete(k)})})})}var KM=class L3 extends kK{constructor(e,o,a){super({userId:o.userId,sdkAppId:e.sdkAppId,mediaType:a,room:e}),this.room=e,this.user=o,Y(this,"tinyId"),Y(this,"isRemote",!0),Y(this,"jitterBufferDelay",0),Y(this,"availableState"),Y(this,"remotePublishState"),Y(this,"_triggerCheckDecodeSubject",EQ(ca(this,L3.STATE_SUBSCRIBE))),Y(this,"ignoreUpdatePlayingState"),this.tinyId=o.tinyId,this.availableState=new Zs("".concat(o.userId,"-").concat(this.mediaType,"-available"),"remote-track-available"),this.remotePublishState=new Zs("".concat(o.userId,"-").concat(this.mediaType,"-remote-publish"),"remote-track-publish"),ma(UK(ca(this,Zs.STATECHANGED),ca(this.remotePublishState,Zs.STATECHANGED)),VK(()=>this.isRemotePublished&&(this.isSubscribed||this.isSubscribing)),Bl(y=>{this.availableState.state!==(y?Zs.ON:Zs.OFF)&&(this.availableState.state=y?Zs.ON:Zs.OFF),(!this.isRemotePublished||!this.ignoreUpdatePlayingState)&&this.updatePlayingState(y)}));let c=ma(ca(this.player,fo.ERROR),JM(y=>y.code===MediaError.MEDIA_ERR_DECODE)),d=ma(PK(5e3),JM(()=>!!(!this.ignoreDecodeError&&this.isSubscribed&&this.isPlayCalled&&this.stat.bytesReceived&&this.isRemotePublished)&&(!this.player.isPlaying&&!(this.kind===YA.AUDIO?this.getAudioLevel()>0:this.stat.framesDecoded>0)||(this.reportDecodeResult(!0),!1)))),C=ma(d5(c,d),EE(ca(this,Zs.INIT)));ma(this._triggerCheckDecodeSubject,JM(()=>!this.ignoreDecodeError),e1(C),Bl(y=>{this.reportDecodeResult(!1,y)}))}setMute(e){this.isRemotePublished&&super.setMute(e)}setInputMediaStreamTrack(e){super.setInputMediaStreamTrack(e),this.isRemotePublished&&this.isSubscribed&&this.player.setTrack(this.outMediaTrack)}checkDecodeResult(){this._triggerCheckDecodeSubject.next(!0)}waitHasMediaTrack(){return new Promise(e=>{this.mediaTrack?e():this.once("input-media-track-changed",e)})}get ignoreDecodeError(){var e,o,a,c;return(c=(a=(o=(e=this.room)==null?void 0:e.networkQuality)==null?void 0:o.hadRecentBadDownlink)==null?void 0:a.call(o,2))!=null&&c||this.player.isInAutoPlayFailedState}get isSubscribing(){return this.state.toString()==="subscribeing"}get isSubscribed(){return this.state===L3.STATE_SUBSCRIBE}get isAvailable(){return this.availableState.state===Zs.ON}get isNeedPlay(){return this.isAvailable&&this.isPlayCalled}subscribe(e){return e}unsubscribe(){this.streamType==="main"&&this.kind==="video"&&this.room.changeType(!1,this.user)}reportDecodeResult(e,o){var a,c;let d=this.kind===YA.AUDIO;if(ii[e?"addSuccessEvent":"addFailedEvent"]({key:d?504700:514702}),!d){let C=((a=this.room)==null?void 0:a.downlinkVideoCodec.toUpperCase())||"H264";ii[e?"addSuccessEvent":"addFailedEvent"]({key:Ey["DECODE_".concat(C,"_RESULT")]}),e||this.log.warn("".concat((c=this.room)==null?void 0:c.downlinkVideoCodec," decode failed"))}e||(ii.addEnum({key:d?504701:514703,value:xp()}),sn.uploadEvent({log:"stat-decode-failed-".concat(this.kind,"-").concat(rQ()||Yp()),userId:this.room.userId}),this._log.warn("decode failed: isPlaying: ".concat(this.player.isPlaying," ").concat(this.kind===YA.AUDIO?"audioLevel: ".concat(this.getAudioLevel()):"framesDecoded: ".concat(this.stat.framesDecoded>0))),this.emit("decode-failed",{error:o}))}updatePlayingState(e){if(this.player.isPlayCalled&&this.player.setTrack(this.playerMediaTrack),this.isPlayCalled&&this.player.isStopped===e){if(e&&(!this.isSubscribed||!this.isRemotePublished||!this.outMediaTrack))return void this.log.info("abort play, isSubscribed: ".concat(this.isSubscribed," isAvailable: ").concat(this.isRemotePublished," hasTrack: ").concat(!!this.outMediaTrack," "));super.updatePlayingState(e)}}close(){super.close(),this.outMediaTrack&&this.uninstallTrackEvent(this.outMediaTrack)}onFlagChanged(){this.remotePublishState.state=this.isRemotePublished?Zs.ON:Zs.OFF,this.emit("remote-publish-changed",this.isRemotePublished)}onTrackMuted(){this.isNeedPlay&&super.onTrackMuted()}onTrackUnmuted(){this.isNeedPlay&&super.onTrackUnmuted()}onTrackEnded(){this.isNeedPlay&&super.onTrackEnded()}};Y(KM,"STATE_SUBSCRIBE","subscribe"),Ci([o1(5,1)],KM.prototype,"waitHasMediaTrack"),Ci([lc(Zs.INIT,KM.STATE_SUBSCRIBE,{success(){this.log.info("subscribed"),F.emit(nA.REMOTE_TRACK_SUBSCRIBED,{track:this})},ignoreError:!0}),fy(521716,!1)],KM.prototype,"subscribe"),Ci([lc(KM.STATE_SUBSCRIBE,Zs.INIT,{sync:!0,success(){this.log.info("unsubscribed"),F.emit(nA.REMOTE_TRACK_UNSUBSCRIBED,{track:this})}})],KM.prototype,"unsubscribe");var O5=KM,s1=class extends O5{constructor(A,e){super(A,e,1),Y(this,"volume",0),Y(this,"mediaType",1),Y(this,"stat",{bytesReceived:0,packetsReceived:0,packetsLost:0,end2EndDelay:0,jitterBufferDelay:0}),this.manager=A.audioManager}get dbVolume(){return H2.isRunning?this.player.pipeline.volumeMeter.getVolumeDb():Math.floor(Math.max(10*Math.log10(this.volume)+100,0))}onPlayerError(A){this.enableDecodeFrame&&(this._log.warn("use audio decoder"),this.room.enableInsertableStreams())}get enableDecodeFrame(){var A,e;return!!this.manager&&(this.manager.decodePipeline.some(o=>o)||((e=(A=this.player.element)==null?void 0:A.error)==null?void 0:e.code)===MediaError.MEDIA_ERR_DECODE&&t_().AudioDecoder&&Kp)}get enableDecryptFrame(){return this.manager&&!!this.manager.decodePipeline[0]}decodeFrame(A){if(!this.manager)return A;let e=A;for(let[o,a]of this.manager.decodePipeline.entries()){if(!a)continue;let c={frame:A,track:this};if(o===1&&this.isAvailable&&this.room.role==="audience"&&(c.onAudioFrameNTPTime=d=>{let{ntp:C,frame:y,hasLeavingTag:S}=d;this.emit("audio-frame-with-ntp",{ntp:C,frame:y,hasLeavingTag:S})}),e=a(c),!e)return}return e}getAudioLevel(){if(!this.isAvailable)return 0;let A=this.volume||super.getAudioLevel();return A>1?1:A}getInternalAudioLevel(){return this.isAvailable?super.getInternalAudioLevel():0}get isRemotePublished(){return this.user.muteState.audioAvailable}},siA=class extends AC{constructor(A,e,o,a,c){super(A,{useDefaultProgram:!0,useFbo:!0,name:"alpha",create2d:!0,logger:e}),this.setContainer=a,Y(this,"initStat",{alphaStitchingType:1}),Y(this,"end",EQ()),Y(this,"minSize",320),Y(this,"maxSize",1280),Y(this,"draggable",!1),Y(this,"startDragX",0),Y(this,"startDragY",0),Y(this,"left",0),Y(this,"top",0),Y(this,"baseWidth",320),Y(this,"baseRatio"),Y(this,"container"),this.initStat=c,this.draggable=o,this.bindDragEvents(),ii.addEnum({key:515700,value:1}),this.draggable&&ii.addEnum({key:515700,value:11})}bindDragEvents(){let A=this.context._canvas;if(A)if(this.draggable){let e=EE(this.end);ma(ca(A,"mousedown"),JK(this.startDrag.bind(this)),$2(()=>ma(ca(window,"mousemove"),EE(ca(window,"mouseup")))),e,Bl(this.doDrag.bind(this))),ma(ca(A,"dblclick"),e,Bl(this.resetPosition.bind(this))),ma(ca(A,"wheel"),e,Bl(this.handleZoom.bind(this))),this.renderCanvas()}else{if(!this.container)return;this.container.style.removeProperty("left"),this.container.style.removeProperty("top"),this.end.next()}}render(A){var e;return!((e=this.input)==null||!e.requestFrame(A))&&(this.useProgram(),this.useBufferFrame(),this.useInputTexture(),this.draw(),!0)}startDrag(A){A.preventDefault(),A.button===0&&(this.startDragX=A.clientX-this.left,this.startDragY=A.clientY-this.top)}renderCanvas(){let{container:A}=this;A||this.setContainer(),A&&this.baseRatio&&this.draggable&&(A.style.setProperty("width","".concat(this.baseWidth,"px")),A.style.setProperty("height","".concat(this.baseWidth/this.baseRatio,"px")),A.style.setProperty("position","fixed"),A.style.setProperty("left","".concat(this.left,"px")),A.style.setProperty("top","".concat(this.top,"px")))}doDrag(A){A.preventDefault(),this.left=A.clientX-this.startDragX,this.top=A.clientY-this.startDragY,this.renderCanvas()}handleZoom(A){A.preventDefault();let e=A.deltaY,o=this.context._canvas;o&&(this.baseWidth||(this.baseWidth=o.offsetWidth),this.baseWidth=e<0?Math.min(1.1*this.baseWidth,this.maxSize):Math.max(.9*this.baseWidth,this.minSize),this.renderCanvas())}resetPosition(){this.left=0,this.top=0,this.renderCanvas()}onRatioReset(){this.renderCanvas()}draw2d(A,e,o,a,c){var d;let{ctx2d:C}=this,y=this.context._canvas;if(!C||!y)return!1;let S=super.draw2d(A,e,o,a,c),k=C.getImageData(0,0,a,c),{data:V}=k,J=!1;if(this.initStat.alphaStitchingType===1){let gA=Math.floor(a/2);for(let CA=0;CA=100;V[$A+3]=ve?255:0}J=super.draw2d(k,0,0,0,0,gA,c),y.width=gA}else if(this.initStat.alphaStitchingType===2){let gA=Math.floor(c/2);for(let CA=0;CA=100;V[$A+3]=ve?255:0}J=super.draw2d(k,0,0,0,0,a,gA),y.height=gA}return(d=this.context.ctx)==null||d.clearRect(0,0,a,c),S&&J}close(){this.baseRatio=void 0,this.end.next(),this.end.complete()}},cL=class extends O5{constructor(A,e){super(A,e,arguments.length>2&&arguments[2]!==void 0?arguments[2]:4),Y(this,"mediaType",4),Y(this,"source"),Y(this,"shouldRenderAlpha",!1),Y(this,"alphaNode"),Y(this,"shouldBeDraggable",!0),Y(this,"stat",{bytesReceived:0,packetsReceived:0,packetsLost:0,framesReceived:0,framesDecoded:0,frameWidth:0,frameHeight:0,end2EndDelay:0,jitterBufferDelay:0,keyFramesDecoded:0}),Y(this,"_keyFrameCountLogged",!1),Y(this,"_keyFrameStartTimestamp",0),Y(this,"_keyFrameStartCount",0),Y(this,"_keyFrameIntervals",[]),Y(this,"_prevKeyFrameTimestamp",0),this.manager=A.videoManager,this.on("first-video-frame",o=>{this.room.emit("first-video-frame",o)}),this.on("first-frame-render",o=>{this.room.emit("first-frame-render",o)})}isAlphaSei(A){if(this.userId!==A.userId||A.seiPayloadType!==50)return!1;let e=new Uint8Array(A.data);return e.length%3==0&&e[0]===0&&e[1]===1&&e}play(A,e){return e!=null&&e.canvasRender&&!this.source&&this.useCanvasPlayer(),super.play(A,e).then(()=>{this.player.calculateStat(),F.emit("156",{track:this,player:this.player})})}updateAlphaRenderInfo(A){let e=this.isAlphaSei(A);if(e)if(this.alphaNode){let o=e[2];if(this.alphaNode.baseRatio&&this.alphaNode.initStat.alphaStitchingType===o)return;this.alphaNode.initStat={alphaStitchingType:o};let a=this.player.getElement();if(a){let c=a.videoWidth/a.videoHeight;c&&(this.alphaNode.baseRatio=c*(o===1?.5:2),this.alphaNode.onRatioReset())}this.player.canvas&&(this.player.canvas.id=this.generateAlphaCanvasName(o))}else this.shouldRenderAlpha=!0,this.player.shouldRenderAlpha=!0,this.useCanvasPlayer(e[2])}generateAlphaCanvasName(A){let e=Iy[A];return"".concat("alpha","_").concat(e,"_").concat(this.userId)}useCanvasPlayer(A){if(this.log.info("useCanvasPlayer(), has element:".concat(!!this.player.element)),!this.player.element)return;let e=new CQ({frameRate:15,logger:this.log,name:this.shouldRenderAlpha&&A?this.generateAlphaCanvasName(A):this.userId});e.create({alpha:this.shouldRenderAlpha,willReadFrequently:this.shouldRenderAlpha});let o=new qK(e,{name:"remotePlayer",logger:this.log});if(this.source=e.createVideoPlayerSource(this.player),this.player.setCanvas(e._canvas),this.shouldRenderAlpha&&A){let a=()=>{!this.player.container||!this.alphaNode||(this.alphaNode.container=this.player.container,this.alphaNode.renderCanvas())},c=new siA(e,this.log,this.shouldBeDraggable,a,{alphaStitchingType:A});this.source.connect(c),c.connect(o),this.alphaNode=c}else this.source.connect(o);jp()||(this.updateCanvasPlayerFPS=this.updateCanvasPlayerFPS.bind(this,e),this.room.on("heartbeat-report",this.updateCanvasPlayerFPS,this))}updateCanvasPlayerFPS(A){let e=this.decodeFPS,o=(a=e,[15,30,45,60].reduce((c,d)=>Math.abs(d-a)c.msg_user_info.str_identifier===this.userId))||{},o=this.mediaType===2?7:this.isSmall?3:2;if(!e||e.length===0)return 0;let a=e.find(c=>c.uint32_video_stream_type===o);return a?.uint32_video_dec_fps||0}stop(){return this.room.off("heartbeat-report",this.updateCanvasPlayerFPS,this),F.emit("157",{track:this,player:this.player}),this.alphaNode&&this.alphaNode.close(),super.stop()}decodeFrame(A){if(!this.manager)return A;for(let e of this.manager.decodePipeline)if(e&&!(A=e({frame:A,track:this})))return;return A}get isBig(){return this.mediaType===4}get isSmall(){return this.mediaType===8}changeType(A){this.room.changeType(A,this.user)}get isRemotePublished(){return this.user.muteState.videoAvailable}setMirror(A){A==="publish"||A==="both"||super.setMirror(A)}setDraggable(A){this.shouldBeDraggable=A,this.alphaNode&&(this.alphaNode.draggable=A,this.alphaNode.bindDragEvents())}onDecodeDowngradeStateChanged(A){this.emit("decode-downgrade-state-changed",A)}updateKeyFramesDecoded(A){let e=this.stat.keyFramesDecoded||0;if(this.stat.keyFramesDecoded=A,this._keyFrameCountLogged)return;let o=Date.now();if(!this._keyFrameStartTimestamp)return this._keyFrameStartTimestamp=o,this._keyFrameStartCount=A,void(this._prevKeyFrameTimestamp=o);if(this._prevKeyFrameTimestamp&&A>e){let c=A-e,d=(o-this._prevKeyFrameTimestamp)/1e3/c;this._keyFrameIntervals.push(d)}this._prevKeyFrameTimestamp=o;let a=o-this._keyFrameStartTimestamp;if(a>=16e3){let c=A-this._keyFrameStartCount,d=c>0?a/1e3/c:0,C="".concat(c," keyframes in 16s ").concat(d," [").concat(this._keyFrameIntervals.map(S=>S.toFixed(1)).join(","),"] keyFramesDecoded ").concat(A),y=d<=2.5?"debug":"info";this.log[y](C),this._keyFrameCountLogged=!0}}},P5=class extends cL{constructor(A,e){super(A,e,2),Y(this,"mediaType",2),Y(this,"objectFit","contain")}get isRemotePublished(){return this.user.muteState.hasAuxiliary}},u_=new Map;function Jg(A,e){let o=Qo(mi({},e),{timestamp:Lf()});u_.has(A)?u_.get(A).push(o):u_.set(A,[o])}function x5(){for(var A=arguments.length,e=new Array(A),o=0;ofunction(){for(var d=arguments.length,C=new Array(d),y=0;yWf(k)?iM(k):Yn(k)?k:Cg(k))},fnName:c,value:o},link:{className:d,fnName:c}})})}else if(!Je(e.type)&&Cg(o)!==e.type)throw new ai({code:dt.INVALID_PARAMETER,message:Xo({key:Mo.INVALID_PARAMETER_TYPE,data:{key:a,rule:e,fnName:c,value:o},link:{className:d,fnName:c}})});if(e.allowEmpty===!1){let S=bn(o)&&(o===0||Number.isNaN(o)),k=Yn(o)&&o.trim()==="";if(S||k)throw new ai({code:dt.INVALID_PARAMETER,message:Xo({key:Mo.INVALID_PARAMETER_EMPTY,data:{key:a,rule:e,fnName:c,value:o},link:{className:d,fnName:c}})})}if(e.notLessThanZero&&bn(o)&&o<0)throw new ai({code:dt.INVALID_PARAMETER,message:Xo({key:Mo.CANNOT_LESS_THAN_ZERO,data:{key:a,rule:e,fnName:c,value:o},link:{className:d,fnName:c}})});if(!Je(e.min)&&bn(o)&&oe.max)throw new ai({code:dt.INVALID_PARAMETER,message:Xo({key:Mo.INVALID_PARAMETER_MAX,data:{key:a,rule:e,fnName:c,value:o},link:{className:d,fnName:c}})});if(Yn(e.instanceOf)){if(!o||o._name!==e.instanceOf)throw new ai({code:dt.INVALID_PARAMETER,message:Xo({key:Mo.INVALID_PARAMETER_INSTANCE,data:{key:a,rule:e,fnName:c,value:o},link:{className:d,fnName:c}})})}else if(Ra(e.instanceOf)&&!(o instanceof e.instanceOf))throw new ai({code:dt.INVALID_PARAMETER,message:Xo({key:Mo.INVALID_PARAMETER_INSTANCE,data:{key:a,rule:e,fnName:c,value:o},link:{className:d,fnName:c}})});if(e.values&&!e.values.includes(o))throw new ai({code:dt.INVALID_PARAMETER,message:Xo({key:Mo.INVALID_PARAMETER_RANGE,data:{key:a,rule:e,fnName:c,value:o},link:{className:d,fnName:c}})});let{properties:C}=e;lE(C)&&$E(o)&&Object.keys(C).forEach(S=>{n1.call(this,{rule:C[S],value:o&&o[S],key:"".concat(a,".").concat(S),fnName:c,className:d})});let{arrayItem:y}=e;lE(y)&&wa(o)&&o.forEach((S,k)=>{n1.call(this,{rule:y,value:S,key:"".concat(a,"[").concat(k,"]"),fnName:c,className:d})}),Ra(e.validate)&&e.validate.call(this,o,a,c,d,this)}F.on(nA.JOIN_SUCCESS,A=>{let{room:e}=A;Jg(e.userId,{eventId:32788})}),F.on(nA.LEAVE_START,A=>{let{room:e}=A;Jg(e.userId,{eventId:32789})}),F.on(nA.LOCAL_TRACK_PUBLISHED,A=>{let{track:e}=A;if(e.room){let o=32769;e.mediaType===4?o=32768:e.mediaType===2&&(o=32805),Jg(e.room.userId,{eventId:o})}}),F.on(nA.LOCAL_TRACK_UNPUBLISHED,A=>{let{track:e}=A;if(e.room){let o=32771;e.mediaType===4?o=32770:e.mediaType===2&&(o=32806),Jg(e.room.userId,{eventId:o})}}),F.on(nA.TRACK_MUTED,A=>{let{track:e}=A;e.room&&(e.kind===YA.AUDIO?Jg(e.room.userId,{eventId:e.isRemote?32785:32772,remoteUserId:e.isRemote?e.userId:void 0}):Jg(e.room.userId,{eventId:e.isRemote?32784:32773,remoteUserId:e.isRemote?e.userId:void 0}))}),F.on(nA.TRACK_UNMUTED,A=>{let{track:e}=A;e.room&&(e.kind===YA.AUDIO?Jg(e.room.userId,{eventId:e.isRemote?32787:32774,remoteUserId:e.isRemote?e.userId:void 0}):Jg(e.room.userId,{eventId:e.isRemote?32786:32775,remoteUserId:e.isRemote?e.userId:void 0}))}),F.on(nA.REMOTE_TRACK_SUBSCRIBED,A=>{let{track:e}=A;e.room&&(e.mediaType===1&&Jg(e.room.userId,{eventId:32777,remoteUserId:e.userId}),e.mediaType===4&&Jg(e.room.userId,{eventId:32776,remoteUserId:e.userId}),e.mediaType===8&&Jg(e.room.userId,{eventId:32803,remoteUserId:e.userId}))}),F.on(nA.REMOTE_TRACK_UNSUBSCRIBED,A=>{let{track:e}=A;e.room&&(e.mediaType===1&&Jg(e.room.userId,{eventId:32779,remoteUserId:e.userId}),e.mediaType===4&&Jg(e.room.userId,{eventId:32778,remoteUserId:e.userId}),e.mediaType===8&&Jg(e.room.userId,{eventId:32804,remoteUserId:e.userId}))}),F.on(nA.SWITCH_DEVICE_SUCCESS,A=>{let{track:e}=A;e.room&&Jg(e.room.userId,{eventId:e.kind===YA.VIDEO?32780:32781})}),F.on(nA.LOCAL_TRACK_REPLACED,A=>{let{track:e}=A;e.room&&Jg(e.room.userId,{eventId:e.kind===YA.VIDEO?32782:32783})}),F.on(nA.SIGNAL_CONNECTION_STATE_CHANGED,A=>{let e,{room:o,prevState:a,state:c}=A;switch(c){case"CONNECTED":e=a==="RECONNECTING"?32795:32791;break;case"DISCONNECTED":e=a==="RECONNECTING"?32796:32790;break;case"RECONNECTING":e=32794}e&&Jg(o.userId,{eventId:e})}),F.on(nA.PEER_CONNECTION_STATE_CHANGED,A=>{let e,{room:o,prevState:a,state:c,remoteUserId:d}=A,C=!!d;switch(c){case"CONNECTED":e=a==="RECONNECTING"?C?32801:32798:C?32793:32792;break;case"DISCONNECTED":a==="RECONNECTING"&&(e=C?32802:32799);break;case"RECONNECTING":e=C?32800:32797}e&&Jg(o.userId,{eventId:e,remoteUserId:d})}),F.on(nA.VIDEO_CODEC_IMPLEMENTATION_CHANGED,A=>{let{implementation:e,userId:o,remoteUserId:a,codec:c,isHWCodec:d,prevImplementation:C,streamType:y}=A,S=d?1:0;C||(S=d?3:2);let k={H264:0,H265:1,VP8:2}[c.toUpperCase()],V={eventId:4004,param1:S,param2:k,streamType:y||2};a&&(V.remoteUserId=a,V.eventId=4005),Jg(o,V),ii.addEnum({key:a?514701:513701,value:S}),ii.addEnum({key:a?514700:513700,value:k})}),F.on(nA.LOCAL_TRACK_RECAPTURE,A=>{let{track:e,error:o}=A;if(e.userId){let a={eventId:2003,param1:0};e.kind===YA.AUDIO?(a.streamType=1,o&&(a.param1=2)):(a.streamType=e.streamType==="auxiliary"?7:2,o&&(a.param1=8)),Jg(e.userId,a)}});var riA=gc(Kl(),1),aiA=class extends riA.EventEmitter{constructor(A,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"userId";super(),this.mySelfId=A,this._log=e,this.key=o,Y(this,"userMap",new Map),Y(this,"remotePublishedUserMap",new Map),Y(this,"asrRobotUserMap",new Map)}get hasRobotUser(){return!![...this.remotePublishedUserMap.values()].find(A=>A.isRobot)}getPublishedUser(A){return this.remotePublishedUserMap.get(A)}addUser(A){let e=A[this.key],{userId:o,tinyId:a,role:c,fromType:d}=A;if(d===d0)return void this.addAsrRobotUser(A);if(this.userMap.has(e))return;let C={userId:o,tinyId:a,role:c===20?"anchor":"audience"};this.userMap.set(e,C),this.emit("1",C)}addAsrRobotUser(A){let e=A[this.key],{userId:o,tinyId:a,role:c}=A;if(this.asrRobotUserMap.has(e))return;let d={userId:o,tinyId:a,role:c===20?"anchor":"audience"};this.asrRobotUserMap.set(e,d),this.emit("8",d)}deleteUser(A,e){let o=this.userMap.get(A);if(!o)return;if(this.asrRobotUserMap.has(A))return void this.deleteAsrRobotUser(A);let a="peer leave [".concat(A,"]");Je(e)||(a+=":".concat(Kx[e])),this._log.info(a);let c=this.remotePublishedUserMap.get(A);if(c){let d=c.muteState;c.flag=0,this.emit("5",c.userId),this.deleteRemotePublishedUser(A),this.emit("6",{prevMuteState:d,muteState:c.muteState,flag:0})}this.userMap.delete(A),this.emit("2",{userId:o.userId,reason:e})}deleteAsrRobotUser(A){if(!this.asrRobotUserMap.has(A))return;let e=this.asrRobotUserMap.get(A);e&&(this.asrRobotUserMap.delete(A),this.emit("9",e))}setUserList(A){this.userMap.forEach(e=>{A.findIndex(o=>o[this.key]===e[this.key])<0&&this.deleteUser(e[this.key],0)}),A.forEach(e=>{!this.userMap.has(e[this.key])&&e[this.key]!==this.mySelfId&&this.addUser(e)})}addRemotePublishedUser(A){this.remotePublishedUserMap.has(A[this.key])||this.remotePublishedUserMap.set(A[this.key],A)}deleteRemotePublishedUser(A){this.remotePublishedUserMap.has(A)&&this.remotePublishedUserMap.delete(A)}setRemotePublishedUserList(A){this.remotePublishedUserMap.forEach(e=>{let o=e[this.key];if(A.findIndex(a=>a[this.key]===e[this.key])<0){this._log.info("remote [".concat(o,"] unpublish"));let a=e.muteState;e.flag=0,this.emit("5",e.userId),this.deleteRemotePublishedUser(o),this.emit("6",{prevMuteState:a,muteState:e.muteState,flag:0})}}),A.forEach(e=>{var o;let a=e[this.key];if(a===this.mySelfId)return void this.emit("7",e);let{flag:c,userId:d,tinyId:C,fromType:y}=e,S=wp(c,d),k=(o=this.remotePublishedUserMap.get(a))==null?void 0:o.muteState;if(k){let V=this.remotePublishedUserMap.get(a);V&&V.flag!==c&&(V.flag=c,this._log.info("remote publish updated: ".concat(JSON.stringify(V.muteState))),this.emit("6",{prevMuteState:k,muteState:S,flag:c}))}else this._log.info("remote publish. state: ".concat(JSON.stringify(S))),this.addUser({userId:d,tinyId:C,role:20,fromType:y}),this.emit("3",e),this.emit("6",{prevMuteState:wp(0,d),muteState:S,flag:c})})}clear(){this.userMap.clear(),this.remotePublishedUserMap.clear()}},giA=gc(Kl(),1),ciA=class extends giA.default{constructor(){super(...arguments),Y(this,"_connectionTimeoutCount",0),Y(this,"_isFirewallRestrictionEventEmitted",!1)}increaseTimeoutCount(){this._connectionTimeoutCount+=1,this.checkAndEmitFirewallRestriction()}resetTimeoutCount(){this._connectionTimeoutCount=0}checkAndEmitFirewallRestriction(){this._connectionTimeoutCount>=3&&!this._isFirewallRestrictionEventEmitted&&(this._isFirewallRestrictionEventEmitted=!0,this.emit("firewall-restriction"))}destroy(){this._connectionTimeoutCount=0,this._isFirewallRestrictionEventEmitted=!1,this.removeAllListeners()}};function Y5(A){let{timesInSecond:e,maxSizeInSecond:o,getSize:a}=A;return jr((c,d)=>{let C=new WeakMap;return F.on(nA.ROOM_DESTROY,y=>{let{room:S}=y;return C.delete(S)}),function(){let y=C.get(this);for(var S=arguments.length,k=new Array(S),V=0;V1e3&&(y.timestamp=Date.now(),y.callCountInSecond=0,y.totalSizeInSecond=0),a&&(y.totalSizeInSecond+=a(...k)),y.timestamp!==0&&Date.now()-y.timestamp<1e3&&(y.callCountInSecond>=e||y.totalSizeInSecond>o))throw new ai({code:dt.INVALID_OPERATION,message:Xo({key:Mo.CALL_FREQUENCY_LIMIT,data:{isTimes:y.callCountInSecond>=e,isSize:y.totalSizeInSecond>o,name:d,timesInSecond:e,maxSizeInSecond:o}})});y.callCountInSecond++,c.call(this,...k)}})}var St,V5=!0,lL={SCENE_LIVE:"live",SCENE_RTC:"rtc",ROLE_ANCHOR:"anchor",ROLE_AUDIENCE:"audience",STREAM_TYPE_MAIN:"main",STREAM_TYPE_SUB:"sub",AUDIO_PROFILE_STANDARD:"standard",AUDIO_PROFILE_STANDARD_STEREO:"standard-stereo",AUDIO_PROFILE_HIGH:"high",AUDIO_PROFILE_HIGH_STEREO:"high-stereo",QOS_PREFERENCE_SMOOTH:"smooth",QOS_PREFERENCE_CLEAR:"clear",SPEAKER:"Speakerphone",HEADSET:"Headset earpiece"},Ro={INVALID_PARAMETER:5e3,INVALID_OPERATION:5100,ENV_NOT_SUPPORTED:5200,DEVICE_ERROR:5300,SERVER_ERROR:5400,OPERATION_FAILED:5500,OPERATION_ABORT:5998,UNKNOWN_ERROR:5999},r1=((St=r1||{})[St.INVALID_PARAMETER=5e3]="INVALID_PARAMETER",St[St.INVALID_PARAMETER_REQUIRED=5001]="INVALID_PARAMETER_REQUIRED",St[St.INVALID_PARAMETER_TYPE=5002]="INVALID_PARAMETER_TYPE",St[St.INVALID_PARAMETER_EMPTY=5003]="INVALID_PARAMETER_EMPTY",St[St.INVALID_PARAMETER_INSTANCE=5004]="INVALID_PARAMETER_INSTANCE",St[St.INVALID_PARAMETER_RANGE=5005]="INVALID_PARAMETER_RANGE",St[St.INVALID_PARAMETER_LESS_THAN_ZERO=5006]="INVALID_PARAMETER_LESS_THAN_ZERO",St[St.INVALID_PARAMETER_MIN=5007]="INVALID_PARAMETER_MIN",St[St.INVALID_PARAMETER_MAX=5008]="INVALID_PARAMETER_MAX",St[St.INVALID_ELEMENT_ID=5009]="INVALID_ELEMENT_ID",St[St.INVALID_ELEMENT_ID_TYPE=5010]="INVALID_ELEMENT_ID_TYPE",St[St.INVALID_STREAM_ID=5011]="INVALID_STREAM_ID",St[St.INVALID_ROOM_ID_STRING=5012]="INVALID_ROOM_ID_STRING",St[St.INVALID_ROOM_ID_INTEGER=5013]="INVALID_ROOM_ID_INTEGER",St[St.INVALID_STREAM_TYPE=5014]="INVALID_STREAM_TYPE",St[St.INVALID_ROOM_ID_REQUIRED=5015]="INVALID_ROOM_ID_REQUIRED",St[St.INVALID_ROOM_ID_INTEGER_STRING=5016]="INVALID_ROOM_ID_INTEGER_STRING",St[St.INVALID_BUFFER_EMPTY=5017]="INVALID_BUFFER_EMPTY",St[St.INVALID_BUFFER_OVERSIZE=5018]="INVALID_BUFFER_OVERSIZE",St[St.INVALID_ROOM_ID_TYPE_MISMATCH=5019]="INVALID_ROOM_ID_TYPE_MISMATCH",St[St.INVALID_ROOM_ID_DUPLICATE=5020]="INVALID_ROOM_ID_DUPLICATE",St[St.INVALID_OPERATION=5100]="INVALID_OPERATION",St[St.INVALID_OPERATION_NOT_JOINED=5101]="INVALID_OPERATION_NOT_JOINED",St[St.INVALID_OPERATION_REMOTE_USER_NOT_EXIST=5102]="INVALID_OPERATION_REMOTE_USER_NOT_EXIST",St[St.INVALID_OPERATION_STREAM_TYPE_NOT_EXIST=5103]="INVALID_OPERATION_STREAM_TYPE_NOT_EXIST",St[St.INVALID_OPERATION_REPEAT_CALL=5104]="INVALID_OPERATION_REPEAT_CALL",St[St.INVALID_OPERATION_NEED_VIDEO=5105]="INVALID_OPERATION_NEED_VIDEO",St[St.INVALID_OPERATION_NEED_AUDIO=5106]="INVALID_OPERATION_NEED_AUDIO",St[St.INVALID_ROLE_AUDIENCE=5107]="INVALID_ROLE_AUDIENCE",St[St.INVALID_NOT_ENABLE_SEI=5108]="INVALID_NOT_ENABLE_SEI",St[St.INVALID_NEED_CALL_PUBLISHED=5109]="INVALID_NEED_CALL_PUBLISHED",St[St.ENV_NOT_SUPPORTED=5200]="ENV_NOT_SUPPORTED",St[St.NOT_SUPPORTED_HTTP=5201]="NOT_SUPPORTED_HTTP",St[St.NOT_SUPPORTED_WEBRTC=5202]="NOT_SUPPORTED_WEBRTC",St[St.NOT_SUPPORTED_H264_ENCODE=5203]="NOT_SUPPORTED_H264_ENCODE",St[St.NOT_SUPPORTED_H264_DECODE=5204]="NOT_SUPPORTED_H264_DECODE",St[St.NOT_SUPPORTED_SCREEN_SHARE=5205]="NOT_SUPPORTED_SCREEN_SHARE",St[St.NOT_SUPPORTED_SMALL_VIDEO=5206]="NOT_SUPPORTED_SMALL_VIDEO",St[St.NOT_SUPPORTED_SEI=5207]="NOT_SUPPORTED_SEI",St[St.NOT_SUPPORTED_WEBGL=5208]="NOT_SUPPORTED_WEBGL",St[St.NOT_SUPPORTED_CHROME_VERSION=5209]="NOT_SUPPORTED_CHROME_VERSION",St[St.NOT_SUPPORTED_PLUGIN=5210]="NOT_SUPPORTED_PLUGIN",St[St.DEVICE_ERROR=5300]="DEVICE_ERROR",St[St.DEVICE_NOT_FOUND_ERROR=5301]="DEVICE_NOT_FOUND_ERROR",St[St.DEVICE_NOT_ALLOWED_ERROR=5302]="DEVICE_NOT_ALLOWED_ERROR",St[St.DEVICE_NOT_READABLE_ERROR=5303]="DEVICE_NOT_READABLE_ERROR",St[St.DEVICE_OVERCONSTRAINED_ERROR=5304]="DEVICE_OVERCONSTRAINED_ERROR",St[St.DEVICE_INVALID_STATE_ERROR=5305]="DEVICE_INVALID_STATE_ERROR",St[St.DEVICE_SECURITY_ERROR=5306]="DEVICE_SECURITY_ERROR",St[St.DEVICE_ABORT_ERROR=5307]="DEVICE_ABORT_ERROR",St[St.CAMERA_RECOVER_FAILED=5308]="CAMERA_RECOVER_FAILED",St[St.MICROPHONE_RECOVER_FAILED=5309]="MICROPHONE_RECOVER_FAILED",St[St.NOT_SUPPORTED_MISMATCH_SAMPLE_RATE_IN_FIREFOX=5310]="NOT_SUPPORTED_MISMATCH_SAMPLE_RATE_IN_FIREFOX",St[St.SERVER_ERROR=5400]="SERVER_ERROR",St[St.NEED_TO_BUY=5401]="NEED_TO_BUY",St[St.ACCOUNT_NO_MONEY=-100013]="ACCOUNT_NO_MONEY",St[St.OPERATION_FAILED=5500]="OPERATION_FAILED",St[St.FIREWALL_RESTRICTION=5501]="FIREWALL_RESTRICTION",St[St.REJOIN_FAILED=5502]="REJOIN_FAILED",St[St.EVENT_HANDLER_ERROR=5503]="EVENT_HANDLER_ERROR",St[St.VIDEO_CONTEXT_ERROR=5504]="VIDEO_CONTEXT_ERROR",St[St.VIDEO_ENCODE_FAILED=5505]="VIDEO_ENCODE_FAILED",St[St.AUDIO_ENCODE_FAILED=5506]="AUDIO_ENCODE_FAILED",St[St.VIDEO_DECODE_FAILED=5507]="VIDEO_DECODE_FAILED",St[St.AUDIO_DECODE_FAILED=5508]="AUDIO_DECODE_FAILED",St[St.OPERATION_ABORT=5998]="OPERATION_ABORT",St[St.UNKNOWN_ERROR=5999]="UNKNOWN_ERROR",St),J5=Qo(mi({},cc),{INVALID_PARAMETER(A){let{fnName:e}=A;return"the parameters of the '".concat(e,"' you called does not meet the requirements, please check the API documentation.")},INVALID_PARAMETER_REQUIRED(A){let{key:e,rule:o,fnName:a,value:c}=A;return"'".concat(e||o.name,"' is a required param when calling ").concat(a,"(), received: ").concat(c,".")},INVALID_PARAMETER_TYPE(A){let{key:e,rule:o,fnName:a,value:c}=A,d="".concat(e||o.name),C="";return C=Array.isArray(o.type)?o.type.join("|"):o.type,"'".concat(d,"' must be type of ").concat(C," when calling ").concat(a,"(), received type: ").concat(Cg(c),".")},INVALID_PARAMETER_EMPTY(A){let{key:e,rule:o,fnName:a,value:c}=A;return"'".concat(e||o.name,"' cannot be '").concat(c,"' when calling ").concat(a,"().")},INVALID_PARAMETER_INSTANCE(A){let{key:e,rule:o,fnName:a,value:c}=A,d="".concat(e||o.name),C="".concat(o.instanceOf.name||o.instanceOf);return"'".concat(d,"' must be instanceof ").concat(C," when calling ").concat(a,"(), received type: ").concat(Cg(c),".")},INVALID_PARAMETER_RANGE(A){let{key:e,rule:o,fnName:a,value:c}=A;return"'".concat(e||o.name,"' must be one of ").concat(o.values.join("|")," when calling ").concat(a,"(), received: ").concat(c,".")},INVALID_PARAMETER_LESS_THAN_ZERO(A){let{key:e,rule:o,fnName:a}=A;return"'".concat(e||o.name,"' cannot be less than 0 when calling ").concat(a,"().")},INVALID_PARAMETER_MIN(A){let{key:e,rule:o,value:a}=A;return"the min value of ".concat(e||o.name," is ").concat(o.min,", received: ").concat(a,".")},INVALID_PARAMETER_MAX(A){let{key:e,rule:o,value:a}=A;return"the max value of ".concat(e||o.name," is ").concat(o.max,", received: ").concat(a,".")},INVALID_ELEMENT_ID(A){let{key:e,fnName:o}=A;return"'".concat(e,"' is not found in the document object when calling ").concat(o,"().")},INVALID_ELEMENT_ID_TYPE(A){let{key:e,fnName:o,type:a}=A;return"the element corresponding to '".concat(e,"' must be instanceof HTMLElement when calling ").concat(o,"(), received: ").concat(a,".")},INVALID_STREAM_ID(A){let{key:e}=A;return"'".concat(e,"' can only consist of uppercase and lowercase english letters (a-zA-Z), numbers (0-9), hyphens and underscores.")},INVALID_ROOM_ID_STRING(A){let{key:e}=A;return"'".concat(e,"' must be a valid string.")},INVALID_ROOM_ID_INTEGER(A){let{key:e}=A;return"'".concat(e,"' must be an integer between [1, 4294967294].")},INVALID_ROOM_ID_INTEGER_STRING(A){let{key:e}=A;return"'".concat(e,"' must be an integer but go a string, use 'parseInt' to convert it or use 'strRoomId' instead.")},INVALID_ROOM_ID_REQUIRED:()=>"at least one of 'roomId'(between [1, 4294967294]) and 'strRoomId'(not empty) is required.",INVALID_ROOM_ID_TYPE_MISMATCH(A){let{key:e}=A;return"The type of target roomId must match the current roomId. Current room is using '".concat(e,"', but received '").concat(e==="strRoomId"?"roomId":"strRoomId","'.")},INVALID_ROOM_ID_DUPLICATE(A){let{key:e}=A;return"the target '".concat(e,"' must not be the same as the current '").concat(e,"'.")},INVALID_STREAM_TYPE:A=>{let{fnName:e}=A;return"'streamType' is required when 'userId' is not '*', calling ".concat(e,"()")},INVALID_IMAGE_URL:"The 'src' param must be filled in when the background type is image.",INVALID_OPERATION(A){let{fnName:e}=A;return"the API '".concat(e,"' you called does not meet the requirements, please check the API documentation.")},INVALID_OPERATION_NOT_JOINED(A){let{fnName:e}=A;return"cannot ".concat(e," because you are not enter room yet.")},INVALID_OPERATION_REMOTE_USER_NOT_EXIST(A){let{fnName:e,value:o}=A;return"cannot ".concat(e," because remote user(userId: ").concat(o.userId,") does not publishing stream.")},INVALID_OPERATION_STREAM_TYPE_NOT_EXIST(A){let{fnName:e,value:o}=A;return"cannot ".concat(e," because remote user(userId: ").concat(o.userId,") does not publishing ").concat(o.streamType," video.")},INVALID_OPERATION_REPEAT_CALL(A){let{fnName:e}=A;return"you are already ".concat(e,"(), cannot repeated call '").concat(e,"'.")},INVALID_OPERATION_NEED_VIDEO(A){let{fnName:e}=A;return"cannot call '".concat(e,"' because the camera is not turned on.")},INVALID_OPERATION_NEED_AUDIO(A){let{fnName:e}=A;return"cannot call '".concat(e,"' because the microphone or screen share is not turned on.")},INVALID_BUFFER_EMPTY:A=>{let{key:e}=A;return"the buffer size of paramerter '".concat(e,"' cannot be empty")},INVALID_BUFFER_OVERSIZE:()=>"buffer size is over 1000 Bytes",INVALID_ROLE_AUDIENCE:()=>"role: 'audience' cannot call this api.",INVALID_NOT_ENABLE_SEI:()=>"you need to enable SEI in TRTC.create({ enableSEI: true })",INVALID_NEED_CALL_PUBLISHED:A=>{let{fnName:e}=A;return"you need to call ".concat(e,"() after publish stream.")},ENV_NOT_SUPPORTED(A){let{fnName:e}=A;return"the current browser does not support the capability of the function '".concat(e,"' you are calling, please check the API documentation.")},NOT_SUPPORTED_WEBRTC:"the current browser does not support WebRTC capability, please check the SDK documentation.",NOT_SUPPORTED_H264_ENCODE:"this browser does not support H264 encode.",NOT_SUPPORTED_H264_DECODE:"this browser does not support H264 decode.",NOT_SUPPORTED_SCREEN_SHARE:"this browser does not support screen share, please check the browser version.",NOT_SUPPORTED_SMALL_VIDEO:"this browser does not support small video, please check the browser version.",NOT_SUPPORTED_SEI:"this browser does not support SEI, please check the browser version.",NOT_SUPPORTED_WEBGL:"this browser does not support WebGL, please check the browser version.",NOT_SUPPORTED_CHROME_VERSION(A){let{fnName:e}=A;return"cannot call ".concat(e," because the browser version is too low, please upgrade to the latest version")},DEVICE_ERROR(A){let{fnName:e,error:o}=A;return"'".concat(e,"' got device exception").concat(o?", error: ".concat(o.toString(),"."):".")},DEVICE_NOT_FOUND_ERROR(A){let{fnName:e,deviceType:o=jM(e),error:a}=A;return"NotFoundError, no ".concat(o," detected, please check your device and the configuration on '").concat(e,"'").concat(a?", error: ".concat(a.toString(),"."):".")},DEVICE_NOT_ALLOWED_ERROR(A){let{fnName:e,deviceType:o=jM(e),error:a}=A;return"NotAllowedError, you have disabled ".concat(o," access, please allow the current application to use the ").concat(o).concat(a?", error: ".concat(a.toString(),"."):".")},DEVICE_NOT_READABLE_ERROR(A){let{fnName:e,deviceType:o=jM(e),error:a}=A;return"NotReadableError, the ".concat(o," maybe in use by another APP, please check if the device is pre-occupied by another APP.")},DEVICE_OVERCONSTRAINED_ERROR(A){let{fnName:e,deviceType:o=jM(e),error:a}=A;return"OverconstrainedError, the device ID is incorrect, please check whether the device ID passed in is correct".concat(a?", error: ".concat(a.toString(),"."):".")},DEVICE_INVALID_STATE_ERROR(A){let{fnName:e,deviceType:o=jM(e),error:a}=A;return"InvalidStateError, after the user clicks and interacts with the page, turn on the ".concat(o).concat(a?", error: ".concat(a.toString(),"."):".")},DEVICE_SECURITY_ERROR(A){let{fnName:e,deviceType:o=jM(e),error:a}=A;return"SecurityError, check whether the system security policy restricts the use of the ".concat(o,", and it is recommended to turn on the ").concat(o," after the user interacts with the page").concat(a?", error: ".concat(a.toString(),"."):".")},DEVICE_ABORT_ERROR(A){let{fnName:e,deviceType:o=jM(e),error:a}=A;return"AbortError, an unknown exception in the system makes the device unusable, recommended to change the device or browser and re-check whether the device is normal".concat(a?" error: ".concat(a.toString(),"."):".")},CAMERA_RECOVER_FAILED(A){let{error:e}=A;return"camera recover capture failed ".concat(e?.name||"",": ").concat(e?.originMessage||e?.message)},MICROPHONE_RECOVER_FAILED(A){let{error:e}=A;return"microphone recover capture failed ".concat(e?.name||"",": ").concat(e?.originMessage||e?.message)},OPERATION_FAILED(A){let{fnName:e,error:o}=A;return"'".concat(e,"' failed, reason: ").concat(o?.toString())},FIREWALL_RESTRICTION:()=>"media connection failure due to firewall restrictions, please try to change your network.",EVENT_HANDLER_ERROR(A){let{eventName:e}=A;return"an error was caught on trtc.on('".concat(e,"', handler), please check your code on 'handler'.")},VIDEO_CONTEXT_ERROR(A){let{reason:e,error:o}=A;return"video context error ".concat(e," ").concat(o?.name||""," ").concat(o?.message||"")},SERVER_ERROR(A){let{fnName:e,error:o}=A;return"'".concat(e,"' got server error: ").concat(o?.toString(),", please check the SDK documentation.")},NEED_TO_BUY(A){let{value:e,url:o}=A;return"You need to buy packages for ".concat(e,". Refer to: ").concat(o)},ACCOUNT_NO_MONEY:A=>{let{fnParams:e}=A;return"your TRTC account run out of credit, please recharge.".concat(e.sdkAppId?" SDKAppId: ".concat(e.sdkAppId):"")},OPERATION_ABORT(A){let{fnName:e}=A;return"'".concat(e,"' abort")},UNKNOWN_ERROR(A){let{fnName:e,error:o}=A;return"'".concat(e,"' throw unknown exception").concat(o?", error: ".concat(o.toString(),"."):".")}});function jM(A){if(!A)return"camera";let e=A.toLowerCase();return e.includes("screen")?"screen share":e.includes("audio")?"microphone":"camera"}var liA=class oY extends Error{constructor(e){let{code:o,extraCode:a,message:c="",messageParams:d,fnName:C="",originError:y,data:S}=e;var k;let V;V=c||function(J){let gA,{code:CA,params:MA,enableDocLink:$A=!1}=J,Be="",Ye=r1[CA];try{gA=J5[Ye]}catch{gA=J5.UNKNOWN_ERROR}return Ra(gA)?Be=gA(MA):Yn(gA)&&(Be=gA),MA.fnName&&!Be.includes(MA.fnName)&&(Be[Be.length-1]!=="."&&(Be+="."),Be+=" thrown from ".concat(MA.fnName,"()")),$A&&(Be+=" doc:"),Be}({code:o===Ro.SERVER_ERROR?o:a||o,params:mi({fnName:C,error:y},d)}),super(V),Y(this,"name","RtcError"),Y(this,"code"),Y(this,"extraCode"),Y(this,"functionName"),Y(this,"message"),Y(this,"data"),Y(this,"handler"),Y(this,"originError"),this.name=r1[o],this.code=o,this.extraCode=a,this.functionName=C,this.originError=y,this.message=V,this.data=S,this.extraCode===5302&&(k=this.originError)!=null&&k.message.includes("system")&&(this.handler=()=>{let J=document.createElement("a");ty?J.href="ms-settings:privacy-".concat({startLocalVideo:"webcam",startLocalAudio:"microphone"}[this.functionName]):iQ&&(J.href="x-apple.systempreferences:com.apple.preference.security?Privacy_".concat({startLocalVideo:"Camera",startLocalAudio:"Microphone",startScreenShare:"ScreenCapture"}[this.functionName])),J.href.length>0&&J.click()})}static convertFrom(e,o,a){let c=e;if(e instanceof ai){let{stack:d}=e,C={code:Ro.UNKNOWN_ERROR,fnName:o,originError:e};switch(e.getCode()){case dt.INVALID_PARAMETER:C.code=Ro.INVALID_PARAMETER,C.message=e.message;break;case dt.INVALID_OPERATION:C.code=Ro.INVALID_OPERATION,C.message=e.message;break;case dt.NOT_SUPPORTED:case dt.NOT_SUPPORTED_H264:C.code=Ro.ENV_NOT_SUPPORTED,e.getCode()===dt.NOT_SUPPORTED_H264&&(C.extraCode=e.message.includes(cc.NOT_SUPPORTED_H264ENCODE)?5203:5204);break;case dt.JOIN_ROOM_FAILED:C.messageParams={fnParams:a};case dt.SERVER_TIMEOUT:case dt.SWITCH_ROLE_FAILED:case dt.SWITCH_ROOM_FAILED:C.code=Ro.SERVER_ERROR,C.extraCode=e.getExtraCode();break;case dt.API_CALL_ABORTED:C.code=Ro.OPERATION_ABORT;break;case dt.DEVICE_NOT_FOUND:case dt.DEVICE_AUTO_RECOVER_FAILED:case dt.INITIALIZE_FAILED:C.code=5300,e.name&&(C.extraCode=function(y){let S;switch(y){case"NotFoundError":S=5301;break;case"NotAllowedError":S=5302;break;case"NotReadableError":S=5303;break;case"OverconstrainedError":S=5304;break;case"InvalidStateError":S=5305;break;case"SecurityError":S=5306;break;case"AbortError":S=5307;break;default:S=5300}return S}(e.name));break;case dt.VIDEO_ENCODE_FAILED:C.extraCode=5505;case dt.AUDIO_ENCODE_FAILED:C.extraCode=5506,C.code=Ro.OPERATION_FAILED;break;case dt.UNKNOWN:break;default:C.code=Ro.OPERATION_FAILED}c=new oY(C),d&&(c.stack+=d.substr(d.indexOf(` -`)))}else{if(e instanceof oY)return e;c=new oY({code:Ro.UNKNOWN_ERROR,fnName:o,originError:e})}return c}},wo=liA;function eC(A){return A==="sub"?"auxiliary":A==="auxiliary"?"sub":"main"}function a1(A){return A===lL.QOS_PREFERENCE_CLEAR?"detail":A===lL.QOS_PREFERENCE_SMOOTH?"motion":""}function g1(A,e){let o=e?Lx:HS;return u2(A)?mi(mi({},o),A):kC[A]?kC[A]:o}var H5={type:"object",properties:{cameraId:{type:"string"},useFrontCamera:{type:"boolean"},fillMode:{type:"string",values:["contain","cover","fill"]},mirror:{type:["string","boolean"],values:[!0,!1,"view","publish","both"]},small:{type:["string","object","boolean"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},videoTrack:{instanceOf:MediaStreamTrack}}},q5={type:"object",properties:{systemAudio:{type:"boolean"},fillMode:{type:"string",values:["contain","cover","fill"]},profile:{type:["string","object"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},videoTrack:{instanceOf:MediaStreamTrack},audioTrack:{instanceOf:MediaStreamTrack}}},E_={type:["string",HTMLElement,null,"array"],arrayItem:{instanceOf:HTMLElement},validate(A,e,o){if(Yn(A)&&!document.getElementById(A))throw new wo({code:Ro.INVALID_PARAMETER,extraCode:5009,fnName:o,messageParams:{key:e}})}},K5={name:"userId",required:!0,type:"string"},j5={type:"object",properties:{microphoneId:{type:"string"},audioTrack:{instanceOf:MediaStreamTrack},captureVolume:{type:"number",min:0},earMonitorVolume:{type:"number",min:0,max:100},profile:{type:["string","object"],properties:{bitrate:{type:"number"},channelCount:{type:"number"}}},echoCancellation:{values:[!0,!1,"remote-only","all"]},autoGainControl:{type:"boolean"},noiseSuppression:{type:"boolean"}}};function d_(A,e){if(!A)throw new wo({code:Ro.INVALID_OPERATION,extraCode:5101,fnName:e})}function W5(A,e,o){if(!A)throw new wo({code:Ro.INVALID_OPERATION,extraCode:5102,fnName:e,messageParams:{value:o}})}function z5(A,e,o){if(!(/^[1-9]\d*$/.test(String(A))&&A<4294967295))throw new wo({code:Ro.INVALID_PARAMETER,extraCode:5013,fnName:e,messageParams:{key:o}})}function Z5(A,e,o){if(!/^[A-Za-z\d\s!#$%&()+\-:;<=.>?@[\]^_{}|~,]{1,64}$/.test(A))throw new wo({code:Ro.INVALID_PARAMETER,extraCode:5012,fnName:e,messageParams:{key:o}})}function X5(A){var e;if((e=A?.option)==null||!e.small)return;if(!NM())return QA.warn("small stream is not supported"),void delete A.option.small;let o=g1(A.option.profile),a=g1(A.option.small,!0);return((c,d)=>c.width*c.height>=d.width*d.height&&c.frameRate>=d.frameRate&&c.bitrate>=d.bitrate)(o,a)?void 0:(QA.warn("small stream profile must be less than big stream profile. Big: ".concat(JSON.stringify(o),", Small: ").concat(JSON.stringify(a))),void delete A.option.small)}var IiA={create:[{name:"RoomConfig",instanceOf:Function},{name:"CreateConfig",type:"object",properties:{plugins:{type:"array",arrayItem:{instanceOf:Function}}}}],enterRoom:{name:"EnterRoomConfig",type:"object",required:!0,validate(A,e,o){if(this._room.isJoined)throw new wo({code:Ro.INVALID_OPERATION,extraCode:5104,fnName:o});if(A.roomId){if(Yn(A.roomId))throw new wo({code:Ro.INVALID_PARAMETER,extraCode:5016,fnName:o,messageParams:{key:e}});z5(A.roomId,o,e)}else{if(!A.strRoomId)throw new wo({code:Ro.INVALID_PARAMETER,extraCode:5015,fnName:o});Z5(A.strRoomId,o,e)}},properties:{sdkAppId:{required:!0,type:"number",allowEmpty:!1},userId:{required:!0,type:"string",allowEmpty:!1},userSig:{required:!0,type:"string",allowEmpty:!1},scene:{type:"string",values:["live","rtc"]},role:{type:"string",values:["audience","anchor"]},roomId:{type:["string","number"]},strRoomId:{type:"string"},proxy:{type:["object","string"],properties:{websocketProxy:{type:"string"},turnServer:{type:["object","array"],properties:{url:{required:!0,type:"string"},username:{type:"string"},credential:{type:"string"},credentialType:{type:"string",values:["password"]}}},loggerProxy:{type:"string"},webtransportProxy:{type:"string"}}},enableAutoPlayDialog:{type:"boolean"},userDefineRecordId:{type:"string"},latencyLevel:{type:"number"},playoutDelay:{type:"object",properties:{min:{type:"number",min:0,max:1e3},max:{type:"number",min:0,max:1e4}}}}},startLocalVideo:{name:"LocalVideoConfig",type:"object",properties:{view:E_,mute:{type:["boolean","string"]},publish:{type:"boolean"},capture:{required:!1,type:"boolean"},option:H5},validate(A){var e,o;if(((e=A?.option)==null||!e.videoTrack)&&du())throw new wo({code:Ro.ENV_NOT_SUPPORTED,extraCode:5201});(o=A?.option)!=null&&o.small&&X5(A)}},updateLocalVideo:{name:"updateLocalVideoConfig",type:"object",required:!0,properties:{view:Qo(mi({},E_),{required:!1}),publish:{type:"boolean"},capture:{required:!1,type:"boolean"},mute:{type:["boolean","string"]},option:H5},validate(A){var e;(e=A?.option)!=null&&e.small&&X5(A)}},startLocalAudio:{name:"LocalAudioConfig",type:"object",properties:{publish:{type:"boolean"},mute:{type:["boolean","string"],values:[!0,!1,"microphone"]},muteKeepVolumeDetection:{type:"boolean"},option:j5},validate(A){var e;if(((e=A?.option)==null||!e.audioTrack)&&du())throw new wo({code:Ro.ENV_NOT_SUPPORTED,extraCode:5201})}},updateLocalAudio:{name:"updateLocalAudioConfig",type:"object",required:!0,properties:{publish:{type:"boolean"},mute:{type:["boolean","string"],values:[!0,!1,"microphone"]},muteKeepVolumeDetection:{type:"boolean"},option:j5}},startScreenShare:{name:"ScreenShareConfig",type:"object",properties:{view:E_,publish:{type:"boolean"},option:q5},validate(A,e,o,a,c){var d;if((d=A?.option)==null||!d.videoTrack){if(du())throw new wo({code:Ro.ENV_NOT_SUPPORTED,extraCode:5201});if(!qp())throw new wo({code:Ro.ENV_NOT_SUPPORTED,fnName:o,extraCode:5205})}}},updateScreenShare:{name:"updateScreenShareConfig",type:"object",required:!0,properties:{view:E_,publish:{type:"boolean"},option:q5}},muteRemoteAudio:[K5,{name:"mute",required:!0,type:"boolean"}],setRemoteAudioVolume:[K5,{name:"volume",required:!0,type:"number",min:0}],startRemoteVideo:{name:"startRemoteVideoConfig",type:"object",required:!0,properties:{view:E_,userId:{type:"string",required:!0},streamType:{values:["main","sub"],required:!0},option:{type:"object",properties:{fillMode:{type:"string",values:["contain","cover","fill"]},mirror:{type:"boolean"}}}},validate(A,e,o){d_(this._room.isJoined,o);let a=this._room.remotePublishedUserMap.get(A.userId);if(W5(!!a,o,A),a&&(A.streamType==="main"&&!a.muteState.videoAvailable||A.streamType==="sub"&&!a.muteState.hasAuxiliary))throw new wo({code:Ro.INVALID_OPERATION,extraCode:5103,fnName:o,messageParams:{value:A}})}},updateRemoteVideo:{name:"updateRemoteVideoConfig",type:"object",required:!0,properties:{view:Qo(mi({},E_),{required:!1}),userId:{type:"string",required:!0},streamType:{values:["main","sub"],required:!0},option:{type:"object",properties:{fillMode:{type:"string",values:["contain","cover","fill"]},mirror:{type:"boolean"}}}},validate(A,e,o){d_(this._room.isJoined,o);let a=this._room.remotePublishedUserMap.get(A.userId);if(W5(!!a,o,A),a){if(A.streamType==="main"&&!a.muteState.videoAvailable||A.streamType==="sub"&&!a.muteState.hasAuxiliary)throw new wo({code:Ro.INVALID_OPERATION,extraCode:5103,fnName:o,messageParams:{value:A}});if(A.option){let c=A.streamType==="main"?a.remoteVideoTrack:a.remoteAuxiliaryTrack;if((A.option.pictureInPicture||A.option.fullScreen||A.option.fullScreen)&&(!c.isSubscribed||!c.player.isPlaying))throw new wo({code:Ro.INVALID_OPERATION,message:"cannot set pictureInPicture or fullScreen when remote video is not playing"})}}}},stopRemoteVideo:{name:"stopRemoteVideoConfig",type:"object",required:!0,properties:{userId:{type:"string",required:!0},streamType:{values:["main","sub"]}},validate(A,e,o){if(A.userId!=="*"&&Je(A.streamType))throw new wo({code:Ro.INVALID_PARAMETER,extraCode:5014,fnName:o})}},switchRole:{name:"role",required:!0,values:["anchor","audience"],validate(A,e,o){d_(this._room.isJoining||this._room.isJoined,o)}},enableAudioVolumeEvaluation:[{name:"interval",type:"number"},{name:"enableInBackground",type:"boolean"}],sendSEIMessage:[{name:"buffer",required:!0,instanceOf:ArrayBuffer,validate(A,e,o,a){if(!xk)throw new wo({code:Ro.ENV_NOT_SUPPORTED,fnName:o,extraCode:5207});if(!this._room.enableSEI)throw new wo({code:Ro.INVALID_OPERATION,fnName:o,extraCode:5108});if(A.byteLength>1e3)throw new wo({code:Ro.INVALID_PARAMETER,extraCode:5018,fnName:o});if(A.byteLength===0)throw new wo({code:Ro.INVALID_PARAMETER,extraCode:5017,messageParams:{key:e},fnName:o});d_(this._room.isJoined,o)}},{name:"options",type:"object",properties:{seiPayloadType:{type:"number",values:[5,243]},toSubStream:{type:"boolean",validate(A,e,o){if(!A&&!this._room.isMainStreamPublished||A&&!this._room.isAuxStreamPublished)throw new wo({code:Ro.INVALID_OPERATION,extraCode:5109,messageParams:{key:e},fnName:o})}}}}],sendCustomMessage:{name:"message",required:!0,type:"object",properties:{cmdId:{type:"number",required:!0,min:1,max:10},data:{instanceOf:ArrayBuffer,required:!0,validate(A,e,o,a){if(A.byteLength>1e3)throw new wo({code:Ro.INVALID_PARAMETER,extraCode:5018,fnName:o});if(A.byteLength===0)throw new wo({code:Ro.INVALID_PARAMETER,extraCode:5017,fnName:o,messageParams:{key:e}})}}},validate(A,e,o){if(d_(this._room.isJoined,o),this._room.scene==="live"&&this._room.role==="audience")throw new wo({code:Ro.INVALID_OPERATION,extraCode:5107,fnName:o,messageParams:{key:e}})}},switchRoom:{name:"switchRoomConfig",type:"object",required:!0,validate(A,e,o){if(d_(this._room.isJoined,o),this._room.useStringRoomId&&A.strRoomId===this._room.roomId||!this._room.useStringRoomId&&A.roomId===Number(this._room.roomId))throw new wo({code:Ro.INVALID_PARAMETER,extraCode:5020,fnName:o,messageParams:{key:this._room.useStringRoomId?"strRoomId":"roomId"}});if(A.roomId&&this._room.useStringRoomId||!A.roomId&&A.strRoomId&&!this._room.useStringRoomId)throw new wo({code:Ro.INVALID_PARAMETER,extraCode:5019,fnName:o,messageParams:{key:this._room.useStringRoomId?"strRoomId":"roomId"}});if(A.roomId)z5(A.roomId,o,e);else{if(!A.strRoomId)throw new wo({code:Ro.INVALID_PARAMETER,extraCode:5015,fnName:o});Z5(A.strRoomId,o,e)}},properties:{roomId:{type:"number"},strRoomId:{type:"string"},privateMapKey:{type:"string"},userSig:{type:"string",required:!0},autoSubscribeCount:{type:"number",min:0,max:50}}}},zl={TRTC:IiA},tC=class extends Error{};function uiA(A,e){let o=zf(A);for(let a=0;a!0),Y(this,"mergeUpdate",uiA);let a=__.instances.get(e);a?a.set(o,this):__.instances.set(e,new Map([[o,this]]))}static get(e,o){if(!o)return;let a=__.instances.get(e);return a&&a.get(o)||new __(e,o)}static gets(e,o){let a=__.instances.get(e),c=[];return a&&a.forEach((d,C)=>{o.test(C)&&c.push(d)}),c}action(e,o,a){let c=y=>{var S;return e===0?this.started=!0:e===3&&(this.started=!1),this.ops.shift(),(S=this.currentOp)==null||S.action(),y},d=y=>{var S,k;throw this.ops.shift(),e===0&&((S=this.currentOp)==null?void 0:S.type)===2&&this.ops.shift().reject(new tC("start failed")),(k=this.currentOp)==null||k.action(),y},C={type:e,action:()=>o(...C.args).then(c,d),args:a,resolve:EiA,reject:diA};try{switch(this.state){case 1:if(e===0)throw new tC("already started");break;case 4:if(e===2)throw new tC("not started");break;default:return this.cacheOp(C)}}catch(y){return Promise.reject(y)}return this.ops.push(C),C.promise=o(...C.args).then(c,d)}cacheOp(e){if(this.ops.length===1)switch(this.state){case 0:case 2:if(e.type===0)throw new tC("already start");break;case 3:switch(e.type){case 2:throw new tC("update not allowed when stopping");case 3:return this.currentOp.promise}break;default:throw new tC("unknown state")}else switch(e.type){case 3:if(this.lastOpType===3)return this.lastOp.promise;{let a=new tC("keep stop");if(this.ops.slice(1).forEach(c=>c.reject(a)),this.ops=this.ops.slice(0,1),this.state===3)return this.currentOp.promise}break;case 2:switch(this.lastOpType){case 2:return this.lastOp.args=this.mergeUpdate(this.lastOp.args,e.args),this.lastOp.promise;case 3:throw new tC("update not allowed after stop")}break;case 0:switch(this.lastOpType){case 2:throw new tC("start not allowed after update");case 0:throw new tC("duplicate start");case 3:if(this.startSame(this.currentOp.args,e.args))throw this.ops.pop().reject(new tC("keep start")),new tC("already start")}}e.promise=new Promise((a,c)=>{e._resolve?e._resolve.then(a):e.resolve=a,e._reject?e._reject.catch(c):e.reject=c});let{action:o}=e;return e.action=()=>o().then(e.resolve,e.reject),this.ops.push(e),e.promise}get lastOp(){return this.ops[this.ops.length-1]}get lastOpType(){return this.lastOp.type}get currentOp(){return this.ops[0]}get state(){return this.currentOp?this.currentOp.type:this.started?1:4}};Y($5,"instances",new WeakMap);var IL=$5,c1=new WeakMap,l1=(A,e)=>{if(e instanceof tC){let{stack:o}=e;e=new wo({code:Ro.OPERATION_ABORT,message:"".concat(A," abort: ").concat(e.message),fnName:A}),o&&(e.stack+=o.substr(o.indexOf(` -`)))}throw e};function WM(A,e){return jr((o,a)=>function(){for(var c=arguments.length,d=new Array(c),C=0;Cfunction(){for(var C=arguments.length,y=new Array(C),S=0;S{var MA,$A;let Be=(MA=c1.get(this))==null?void 0:MA.get(J(...y));if(Be){let{timeoutId:ve,resolve:yi}=Be;clearTimeout(ve),yi()}let Ye=setTimeout(()=>{if(k.state===3||k.state===4)return gA();k.action(2,c.bind(this),y).catch(l1.bind(null,d)).then(gA,CA)},V);c1.has(this)?($A=c1.get(this))==null||$A.set(J(...y),{timeoutId:Ye,resolve:gA}):c1.set(this,new Map([[J(...y),{timeoutId:Ye,resolve:gA}]]))})}return k.action(2,c.bind(this),y).catch(l1.bind(null,d))})}function zM(A){return jr((e,o)=>function(){for(var a=arguments.length,c=new Array(a),d=0;dS.action(3,()=>Promise.resolve(),c))).then(()=>e.call(this,...c));let y=IL.get(this,C);return y?y.action(3,e.bind(this),c).catch(l1.bind(null,o)):e.apply(this,c)})}function ZM(){return function(A,e,o){return A.prototype[e]=function(){let a=this._log||console,c='"'.concat(e,'" is a static method. Use TRTC.').concat(e,"() instead. See: ").concat(qh,"/en/TRTC.html#.").concat(e);a.warn(c)},o}}var Hi={ERROR:"error",AUTOPLAY_FAILED:"autoplay-failed",KICKED_OUT:"kicked-out",REMOTE_USER_ENTER:"remote-user-enter",REMOTE_USER_EXIT:"remote-user-exit",REMOTE_AUDIO_AVAILABLE:"remote-audio-available",REMOTE_AUDIO_UNAVAILABLE:"remote-audio-unavailable",REMOTE_VIDEO_AVAILABLE:"remote-video-available",REMOTE_VIDEO_UNAVAILABLE:"remote-video-unavailable",AUDIO_VOLUME:"audio-volume",AUDIO_FRAME:"audio-frame",NETWORK_QUALITY:"network-quality",CONNECTION_STATE_CHANGED:"connection-state-changed",AUDIO_PLAY_STATE_CHANGED:"audio-play-state-changed",VIDEO_PLAY_STATE_CHANGED:"video-play-state-changed",SCREEN_SHARE_STOPPED:"screen-share-stopped",DEVICE_CHANGED:"device-changed",PUBLISH_STATE_CHANGED:"publish-state-changed",TRACK:"track",STATISTICS:"statistics",SEI_MESSAGE:"sei-message",CUSTOM_MESSAGE:"custom-message",VIDEO_DECODE_DOWNGRADE_STATE_CHANGED:"video-decode-downgrade-state-changed",LAYER_DATA:"layerData",FIRST_VIDEO_FRAME:"first-video-frame",PERMISSION_STATE_CHANGE:"permission-state-change",VIDEO_SIZE_CHANGED:"video-size-changed",REALTIME_TRANSCRIBER_MESSAGE:"realtime-transcriber-message",REALTIME_TRANSCRIBER_STATE_CHANGED:"realtime-transcriber-state-changed",PICTURE_IN_PICTURE_STATE_CHANGED:"picture-in-picture-state-changed",FULL_SCREEN_STATE_CHANGED:"full-screen-state-changed"},CiA=new Set([Hi.AUDIO_VOLUME,Hi.AUDIO_FRAME,Hi.NETWORK_QUALITY,Hi.STATISTICS,Hi.SEI_MESSAGE,Hi.CUSTOM_MESSAGE,Hi.LAYER_DATA]),Az={};Hh(Az,{ScheduleRequestType:()=>iz,getAbilityConfig:()=>hiA,getScheduleDomain:()=>Aj,isNeedToSchedule:()=>uL,scheduleProxy:()=>em,sendScheduleRequest:()=>tz,setIsNeedToSchedule:()=>hQ,setScheduleProxy:()=>$K});var I1=null,u1=0,ez=72e5,E1="trtc_schedule_cache",uL=!0;function hQ(A){Nr(A)&&A!==uL&&(uL=A,QA.info("setIsNeedToSchedule ".concat(A)),A?function(){if(typeof window<"u"&&typeof localStorage<"u")try{localStorage.removeItem(E1)}catch(e){QA.error("clearScheduleCache error",e)}}():u1=Date.now()+ez)}function tz(A){return KA(this,arguments,function(e){let{userId:o,sdkAppId:a,useStringRoomId:c,roomId:d,userSig:C,version:y,frameWorkType:S,role:k,latencyLevel:V}=e;return function*(){var J;if(!uL&&I1&&u1>Date.now())return{isCached:!0,result:I1};let gA={delta:0,count:[1,1],msg:[],detail:[]};try{let CA=new FormData;CA.append("userId",String(o)),CA.append("sdkAppId",String(a)),CA.append("isStrGroupId",String(c)),CA.append("groupId",String(d)),CA.append("sdkVersion",y),CA.append("userSig",String(C));let MA=((J=yield fM())==null?void 0:J.model)||Qk();MA&&CA.append("model",MA);let $A=Yp();$A&&CA.append("osString",$A);let Be=Pp();Be&&CA.append("gpu",Be),k&&CA.append("role",String(k)),V&&CA.append("latencyLevel",String(V)),S&&CA.append("frameWorkType",String(S));let Ye=ko(),ve=yield function(Ge,Bt,hi){return new Promise((Di,Vo)=>{let Jo=null;oM([oz(Qn=>Bt.count[0]=Qn+1,Qn=>{let{error:Ho,retry:Ns,retriedCount:pg,retryFuncArgs:ya}=Qn;Bt.msg[0]=Ho.message,Jo||(pg>=1&&(ya[0]=My(hi,"config",YA.MAIN,!0)),Ns())})(My(hi,"config",YA.MAIN),Ge,{get timeout(){return 1e3*Kf(2+Bt.count[0])}}),oz(Qn=>Bt.count[1]=Qn+1,Qn=>{let{error:Ho,retry:Ns,retriedCount:pg,retryFuncArgs:ya}=Qn;Bt.msg[1]=Ho.message,Jo||(pg>=2&&(ya[0]=My(hi,"config",YA.BACKUP,!0)),Ns())})(My(hi,"config",YA.BACKUP),Ge,{get timeout(){return 1e3*Kf(2+Bt.count[1])}})]).then(Qn=>{Jo=Qn,Di(Jo)}).catch(Vo)})}(CA,gA,a);ve.config&&(ve.config.loggerDomain&&VS(ve.config.loggerDomain),Nr(ve.config.scheduleCache)&&hQ(!ve.config.scheduleCache)),gA.delta=ko()-Ye;let yi=function(Ge,Bt,hi){let Di={totalCost:0,local:0,dns:0,tcp:0,tls:0,request:0,response:0};try{let Vo=performance.getEntriesByType("resource"),Jo=My(Ge,"config",YA.MAIN),Qn=My(Ge,"config",YA.BACKUP);for(let Ho of Vo)if(Ho.startTime>=hi&&(Ho.name===Jo||Ho.name===Qn)&&Ho.transferSize>0){let Ns=Ho.name===Jo?YA.MAIN:YA.BACKUP,pg=Math.round(Ho.duration),ya=Math.round(Ho.domainLookupStart-Ho.startTime),Bu=Ho.redirectStart>0?Math.round(Ho.redirectEnd-Ho.redirectStart):0,BL=Ho.fetchStart>0?Math.round(Ho.domainLookupStart-Ho.fetchStart):0,m_=Math.round(Ho.domainLookupEnd-Ho.domainLookupStart),i8=Math.round(Ho.requestStart-Ho.secureConnectionStart),o8=Math.round(Ho.secureConnectionStart-Ho.connectStart),s8=Math.round(Ho.responseStart-Ho.requestStart),n8=Math.round(Ho.responseEnd-Ho.responseStart),JoA=[m_,i8,o8,s8,n8];sn.uploadEvent({log:"stat-schedule-net:".concat(pg,"(").concat(ya,"(").concat(Bu,"->").concat(BL,")->").concat(JoA.join("->"),") ").concat(Ns),userId:Bt}),Di=Qo(mi({},Di),{totalCost:pg,local:ya,dns:m_,tcp:o8,tls:i8,request:s8,response:n8});break}}catch(Vo){QA.error("getScheduleDetailCost error",Vo)}return Di}(Number(a),o,Ye);return I1=ve,function(Ge){if(typeof window<"u"&&typeof localStorage<"u")try{let Bt=Date.now()+ez;localStorage.setItem(E1,JSON.stringify({result:Ge,expireIn:Bt})),u1=Bt}catch(Bt){QA.error("saveScheduleToLocalStorage error",Bt)}}(ve),{isCached:!1,result:ve,detailCost:yi}}catch(CA){let MA=wa(CA)?CA[0]:CA,$A=bn(MA.code)?MA.code:0,Be="schedule failed".concat(MA.message?": ".concat(MA.message):""),Ye=new ai({code:dt.SCHEDULE_FAILED,extraCode:$A,message:Xo({key:Mo.JOIN_ROOM_FAILED,data:{error:Be,code:$A}})});throw QA.error(Be,$A),Ye}}()})}typeof document<"u"&&document.head.insertAdjacentHTML("beforeend",Object.values(XB).map(A=>'')).join(`\r -`)),function(){if(typeof window<"u"&&typeof localStorage<"u")try{let A=localStorage.getItem(E1);if(A){let{result:e,expireIn:o}=JSON.parse(A);o>Date.now()?(I1=e,u1=o,uL=!1):localStorage.removeItem(E1)}}catch(A){QA.error("loadScheduleFromLocalStorage error",A)}}(),F.on("28",()=>hQ(!0)),F.on("63",()=>hQ(!0)),F.on("84",()=>hQ(!0)),F.on("201",A=>{A.state==="RECONNECTING"&&hQ(!0)}),F.on("202",A=>{A.state==="RECONNECTING"&&hQ(!0)});var em={main:"",backup:""};function $K(A){wa(A)?(em.main=A[0],em.backup=A[1]):(em.main=A,em.backup=A)}var iz=(A=>(A.CONFIG="config",A.TRTC_AUTO_CONF="trtcAutoConf",A.AUDIO_AI_AUTH="audioAiAuth",A))(iz||{});function My(A,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:YA.MAIN,a=arguments.length>3&&arguments[3]!==void 0&&arguments[3];return"https://".concat(em[o]||Aj(A,o,a),"/api/v1/").concat(e)}function hiA(A,e,o){let a=My(A,e),c=My(A,e,YA.BACKUP),d=new URLSearchParams(o).toString(),C=fetch("".concat(a,"?").concat(d)).then(S=>S.json()),y=fetch("".concat(c,"?").concat(d)).then(S=>S.json());return oM([C,y])}function Aj(A){let e,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:YA.MAIN,a=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return e=Kd(A)?a?o===YA.MAIN?XB.MAIN_OVERSEA_BACKUP:XB.BACKUP_OVERSEA:o===YA.MAIN?XB.MAIN_OVERSEA:XB.BACKUP_OVERSEA:o===YA.MAIN?XB.MAIN:XB.BACKUP,e}function BiA(A,e,o){return new Promise((a,c)=>{eQ({url:A,body:e,timeout:o.timeout,priority:"high"}).then(d=>{d.data.code===0?a(d.data.data):c({code:d.data.code,message:d.data.msg})}).catch(c)})}var oz=(A,e)=>gM({retryFunction:BiA,settings:{retries:3,timeout:0},onError:e,onRetrying:A}),ej=class{constructor(){Y(this,"_log"),this._log=QA.createLogger({id:"fd"})}download(A,e){return KA(this,null,function*(){let{type:o="blob"}=e||{};A=jb(A);try{let a,c=ko();if(a=Ra(fetch)?yield this.downloadWithFetch(A,o):yield this.downloadWithXHR(A,o),!a||!a.data)throw new Error("data is empty");let d=ko()-c;return this._log.info("downloaded: ".concat(A,", return type: ").concat(o,", cost: ").concat(d,"ms")),ii.addSuccessEvent({key:522700,cost:ko()-c}),a.data}catch(a){throw this._log.error("failed to download: ".concat(A,", error: ").concat(a)),ii.addFailedEvent({key:522700,error:a}),a}})}downloadWithFetch(A,e){return KA(this,null,function*(){this._log.info("download with fetch: ".concat(A,", return type: ").concat(e));try{let o,a=yield fetch(A);if(!a.ok){let c=new Error("network response was not ok: ".concat(a.status));throw c.status=a.status,c}return o=e==="arraybuffer"?yield a.arrayBuffer():yield a.blob(),{data:o}}catch(o){throw o}})}downloadWithXHR(A,e){return this._log.info("download with xhr: ".concat(A,", return type: ").concat(e)),new Promise((o,a)=>{let c=new XMLHttpRequest;c.open("GET",A,!0),c.responseType=e,c.onload=()=>{if(c.status===200||c.status===0&&c.response)o({data:c.response});else{let d=new Error("XHR failed, status: ".concat(c.status));d.status=c.status,a(d)}},c.onerror=a,c.send(null)})}loadWasm(A,e){return KA(this,null,function*(){this._log.info("loadWasm ".concat(A,", importObject: ").concat(JSON.stringify(e)));let o=ko(),a=null,c=null;if(Ra(WebAssembly.instantiateStreaming)&&!A.startsWith("data:application/octet-stream;base64,")&&!(d=>d.startsWith("file://"))(A)&&Ra(fetch))try{let d=fetch(A);a=(yield WebAssembly.instantiateStreaming(d,e)).instance}catch(d){c=d}if(!a)try{let d=yield this.download(A,{type:"arraybuffer"});a=(yield WebAssembly.instantiate(d,e)).instance}catch(d){c=d}if(a){let d=ko()-o;return this._log.info("loadedWasm ".concat(A,", cost: ").concat(d,"ms")),ii.addSuccessEvent({key:522701,cost:d}),a}throw this._log.error("failed to loadWasm ".concat(A,", error: ").concat(c)),ii.addFailedEvent({key:522701,error:c}),c})}loadScript(A){this._log.info("loadScript ".concat(A));let e=ko();return new Promise((o,a)=>{let c=document.createElement("script");c.type="text/javascript",c.onload=()=>{this._log.info("loadedScript ".concat(A,", cost: ").concat(ko()-e,"ms")),ii.addSuccessEvent({key:522702,cost:ko()-e,split:1e3}),o(c)},c.onerror=d=>{this._log.error("failed to loadScript ".concat(A,", error: ").concat(d?.message||JSON.stringify(d))),ii.addFailedEvent({key:522702}),a(d)},c.crossOrigin="anonymous",c.src=A,document.head.append?document.head.append(c):document.getElementsByTagName("head")[0].appendChild(c)})}};Ci([$h({settings:{timeout:0,retries:3},onError(A,e,o){var a;A?.status===404||(a=A?.message)!=null&&a.includes("404")?(this._log.warn("download 404, stop retry"),o(A)):e()},onRetrying(A){this._log.warn("download retrying: ".concat(A))}})],ej.prototype,"download"),Ci([$h({settings:{timeout:3e3,retries:3},onRetrying(A){this._log.warn("loadScript retrying: ".concat(A))}})],ej.prototype,"loadScript");var tj=new ej;function sz(A){let[e,o]=A,a=o.byteLength,c=parseInt(String(a/255),10),d=a%255,C=[];C.push(0,0,0,1,6,e);for(let S=0;SV+J.dataView.byteLength,0),C=new ArrayBuffer(d+e.data.byteLength),y=new DataView(C),S=new DataView(e.data),k=0;for(let V=0;Vc.isSEI);o?.(a.reverse())}catch{}return e}function lz(A){let{seiMessageList:e,isAudio:o,getNtpTime:a,isMain:c}=A;return new TransformStream({transform(d,C){let y=d;o?audioEncodePipeline.forEach(S=>{y=S({frame:y,ntp:a(),onDump:()=>{self.postMessage({type:"dump",isAudio:o,data:y.data,userId:""})}})}):videoEncodePipeline.forEach(S=>{y=S({frame:y,seiMessageList:e,onDump:()=>{self.postMessage({type:"dump",isAudio:o,data:y.data,userId:"",streamType:c?"main":"auxiliary"})}})}),C.enqueue(y)}})}function Iz(A){let{userId:e,streamType:o,isAudio:a}=A;return new TransformStream({transform(c,d){let C=c;a?(audioDecodePipeline.forEach(y=>{C=y({frame:C,onAudioFrameNTPTime:S=>{self.postMessage({type:"audio-ntp",data:S,userId:e,streamType:o})},onDump:()=>{self.postMessage({type:"dump",isAudio:a,data:C.data,userId:e})}})}),d.enqueue(C)):videoDecodePipeline.forEach(y=>{C=y({frame:C,onSEI:S=>{S.forEach(k=>{self.postMessage({type:"sei",seiPayloadType:k.seiPayloadType,data:k.seiPayload.buffer,userId:e,streamType:o})})},onDump:()=>{self.postMessage({type:"dump",isAudio:a,data:C.data,userId:e,streamType:o})}})}),d.enqueue(C)}})}function uz(A){let e=[i1],o=[az,nz,G5,rz,sz,lz,Iz,T0,aM,t1],a="const videoEncodePipeline=[".concat(A.videoEncodePipeline.toString(),`]; +} `),this.defaultProgam=this.createProgram(this.defaultVShader,this.defaultFShader),this._canvas.addEventListener("webglcontextlost",()=>{this.destroy(new gi({code:Ct.VIDEO_MANAGER_ERROR,extraCode:4,message:"webgl context lost"}))})}destroy(A){let e="";return A&&(e=A.message,this.error=A,si.addFailedEvent({key:512702,error:A})),this.disconnect(),this.log.info("video context destroy".concat(e)?": ".concat(e):""),this.ctx&&(this.ctx.deleteShader(this.defaultVShader),this.ctx.deleteShader(this.defaultFShader),this.ctx.deleteProgram(this.defaultProgam),delete this.ctx),A}set width(A){var e;(e=this.ctx)==null||e.viewport(0,0,A,this.height),super.width=A,this._canvas2d&&(this._canvas2d.width=A)}set height(A){var e;(e=this.ctx)==null||e.viewport(0,0,this.width,A),super.height=A,this._canvas2d&&(this._canvas2d.height=A)}setSize(A,e){var o;(o=this.ctx)==null||o.viewport(0,0,A,e),super.setSize(A,e),this._canvas2d&&(this._canvas2d.width=A,this._canvas2d.height=e)}createShader(A,e){let o=this.ctx,a=o.createShader(A);return o.shaderSource(a,e),o.compileShader(a),a}createProgram(A,e){let o=this.ctx,a=o.createProgram();return o.attachShader(a,A),o.attachShader(a,e),o.linkProgram(a),o.getProgramParameter(a,o.LINK_STATUS)||this.log.error(o.getProgramInfoLog(a)),a}};Y(dL,"UNAVAILABLE","unavailable"),hi([lc(Zs.INIT,"created",{sync:!0,fail(A){this.log.error("video gl context create failed",A.cause),si.addFailedEvent({key:512700,error:A.cause||A})},success(){this.log.info("video context created use webgl"),si.addSuccessEvent({key:512700})}})],dL.prototype,"create"),hi([lc("created",Zs.INIT,{ignoreError:!0,sync:!0,success(A){A&&this.emit(dL.UNAVAILABLE,A),this.removeAllListeners()}})],dL.prototype,"destroy");var qC=dL,QQ=class extends EL{constructor(){super(...arguments),Y(this,"ctx")}create(A){if(this.hasAlpha=A.alpha,this._canvas=document.createElement("canvas"),this._canvas.id="trtc_".concat(this.name,"_").concat(EL._ids++),this.ctx=this._canvas.getContext("2d",{alpha:A.alpha,willReadFrequently:A.willReadFrequently}),!this.ctx)throw new gi({code:Ct.VIDEO_MANAGER_ERROR,extraCode:2,message:"2d context not supported"});this._canvas.addEventListener("contextlost",()=>{this.log.error("2d context lost")}),this._canvas.addEventListener("contextrestored",()=>{this.log.warn("2d context restored")})}destroy(A){let e="";A&&(e=A.message,this.error=A,si.addFailedEvent({key:512703,error:A})),this.disconnect(),this.log.info("video context destroy ".concat(e?": ".concat(e):"")),delete this.ctx,this._canvas&&(this._canvas.remove(),this._canvas.width=0,this._canvas.height=0,delete this._canvas),this.removeAllListeners(),si.addSuccessEvent({key:512703})}};function wiA(A,e,o,a,l){arguments.length>5&&arguments[5]!==void 0&&arguments[5]&&([o,a]=[a,o]);let d={sWidth:A,sHeight:e,dWidth:o,dHeight:a,sx:0,sy:0,dx:0,dy:0};if(A===0||e===0)return d;switch(l){case void 0:case"fill":break;case"contain":{let h=Math.min(o/A,a/e);d.dWidth=A*h,d.dHeight=e*h,d.dx=(o-d.dWidth)/2,d.dy=(a-d.dHeight)/2;break}case"cover":{let h=Math.max(o/A,a/e),y=o/h,S=a/h;d.sx=(A-y)/2,d.sy=(e-S)/2,d.sWidth=y,d.sHeight=S;break}}return d}hi([lc(Zs.INIT,"created",{sync:!0,fail(A){this.log.error("video 2d context create failed",A.cause),si.addFailedEvent({key:512701,error:A.cause||A})},success(){this.log.info("video context created use 2d"),si.addSuccessEvent({key:512701})}})],QQ.prototype,"create"),hi([lc("created",Zs.INIT,{ignoreError:!0,sync:!0})],QQ.prototype,"destroy");var _iA=class{constructor(A,e){this.node=A,this.layout=e,Y(this,"positionBuffer")}get x(){return this.layout.x||this.node.x}get y(){return this.layout.y||this.node.y}get width(){return this.layout.width||this.node.width}get height(){return this.layout.height||this.node.height}get right(){return this.x+this.width}get bottom(){return this.y+this.height}get fillMode(){return this.layout.fillMode}get rotation(){return this.layout.rotation}get hidden(){return!!this.layout.hidden}},rz=class extends AC{constructor(A,e){super(A,{useDefaultProgram:!0,useFbo:!0,name:"mix",create2d:!0,logger:e}),Y(this,"inputs",[]),Y(this,"backgroundColor","black")}addInput(A,e){let o=0,a=this.inputs.length;for(;oe.zIndex))throw new Error("input already exists at zIndex ".concat(e.zIndex));a=d}}let l=new _iA(A,e);this.inputs.splice(o,0,l)}changeInputLayout(A,e){let o=this.inputs.findIndex(cA=>cA.node===A);if(o<0)return;let{x:a,y:l,width:d,height:h,zIndex:y,fillMode:S,rotation:k,hidden:V}=e;if(!Ke(y)&&this.inputs.some(cA=>cA.layout.zIndex===y&&cA.node!==A))throw new Error("input already exists at zIndex ".concat(e.zIndex));let J=this.inputs[o];Ke(a)||(J.layout.x=a),Ke(l)||(J.layout.y=l),Ke(d)||(J.layout.width=d),Ke(h)||(J.layout.height=h),Ke(k)||(J.layout.rotation=k),Ke(V)||(J.layout.hidden=V),S&&(J.layout.fillMode=S),!Ke(y)&&y!==J.layout.zIndex&&(J.layout.zIndex=y,this.inputs.sort((cA,CA)=>cA.layout.zIndex-CA.layout.zIndex))}hasInput(A){return this.inputs.some(e=>e.node===A)}hasNoInput(){return this.inputs.length===0}resize(A,e){if(!this.matchInputSize)return void super.resize(A,e);let o=this.inputs.reduce((a,l)=>l?Object.assign(a,{width:Math.max(a.width,l.right),height:Math.max(a.height,l.bottom)}):a,{width:0,height:0});super.resize(o.width,o.height),this.context instanceof qC&&this.inputs.forEach(a=>{if(a){let l=this.layout2texCoords(a);a.positionBuffer?this.changeBufferData(a.positionBuffer,l):a.positionBuffer=this.createBuffer(l)}})}connect(A){for(var e=arguments.length,o=new Array(e>1?e-1:0),a=1;ae.node!==A),this.inputs.length===0&&this.drawBackGround2d(this.backgroundColor)}render(A){let e=this.context.ctx;if(e.clearColor(0,0,0,0),this.inputs.reduce((o,a)=>a.node.requestFrame(A)||o,!1)&&e){this.useProgram(),e.enable(e.BLEND),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA),this.useBufferFrame();for(let o=0;oe.node.requestFrame(A)),this.ctx2d){this.drawBackGround2d(this.backgroundColor);for(let e=0;e4&&arguments[4]!==void 0&&arguments[4];this.ctx2d&&(l&&([o,a]=[a,o]),this.ctx2d.save(),this.ctx2d.strokeStyle="red",this.ctx2d.lineWidth=2,this.ctx2d.strokeRect(A,e,o,a),this.ctx2d.restore())}getInfo(){let{totalFrames:A,x:e,y:o,width:a,height:l,name:d}=this,h=Date.now(),y=(A-this.lastInfo.totalFrames)/((h-this.lastInfo.timestamp)/1e3)|0;return this.lastInfo={totalFrames:A,x:e,y:o,width:a,height:l,timestamp:h,fps:y,name:d},fi({parent:this.inputs.filter(S=>S).map(S=>S.node.getInfo())},this.lastInfo)}removeAllInputs(){this.inputs.forEach(A=>{var e;if(A.node.disconnect(),A.positionBuffer&&this.context instanceof qC)try{(e=this.context.ctx)==null||e.deleteBuffer(A.positionBuffer)}catch{}})}close(){super.close(),this.removeAllInputs()}},TiA=[1,0,0,0,1,1,0,1],Ry=class extends AC{constructor(A,e,o,a){if(super(A,{useDefaultProgram:!0,useFbo:!0,create2d:!0,name:"transform",logger:e}),Y(this,"mirror",!1),Y(this,"rotation",0),o&&(this.mirror=o),a&&(this.rotation=a),A instanceof qC)try{this.setTexBuffer(TiA)}catch(l){A.destroy(new gi({code:Ct.VIDEO_MANAGER_ERROR,extraCode:3,message:"create video node ".concat(this.name," error ").concat(l.message||l)}))}}draw2d(A,e,o,a,l){if(this.ctx2d){this.ctx2d.clearRect(0,0,this.width,this.height),this.ctx2d.save(),this.mirror&&(this.ctx2d.scale(-1,1),this.ctx2d.translate(-this.width,0)),this.rotation===90?(this.ctx2d.translate(a,0),this.ctx2d.rotate(Math.PI/2),this.ctx2d.scale(l/a,a/l)):this.rotation===180?(this.ctx2d.translate(this.width,this.height),this.ctx2d.rotate(Math.PI)):this.rotation===270&&(this.ctx2d.translate(0,l),this.ctx2d.rotate(3*Math.PI/2),this.ctx2d.scale(l/a,a/l));let d=super.draw2d(A,e,o,a,l);return this.ctx2d.restore(),d}return!1}render(A){var e;return!((e=this.input)==null||!e.requestFrame(A))&&(this.useProgram(),this.useBufferFrame(),this.useInputTexture(),this.draw(),!0)}resize(A,e){tQ(this.rotation)&&([A,e]=[e,A]),super.resize(A,e)}},gj=class extends lL{constructor(A){super(arguments.length>1&&arguments[1]!==void 0?arguments[1]:4,Ro),Y(this,"inputLocalVideoTracks",new Map),Y(this,"inputLocalScreenTracks",new Map),Y(this,"cameraNodeMap",new Map),Y(this,"screenNodeMap",new Map),Y(this,"textNodeMap",new Map),Y(this,"imageNodeMap",new Map),Y(this,"videoNodeMap",new Map),Y(this,"endedIds",new Set),Y(this,"videoContext"),Y(this,"mixNode"),Y(this,"destination"),Y(this,"manager"),Y(this,"stat"),Y(this,"_checkId",0),Y(this,"autoSetFps",!0),this.manager=A,this.log.id+="mix",this.create2dVideoContext(),this.destination=this.videoContext.createVideoTrackDestination({name:"mainDestination2d",logger:this.log}),this.destination.on(AC.RENDER,e=>{this.emit("render",e)}),this.mixNode=new rz(this.videoContext,this.log),this.mixNode.matchInputSize=!1}listenDeviceChange(){throw new Error("Method not implemented.")}enablePrintDetail(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:2e3;this._checkId=Gr.run("interval",()=>{this.destination&&this.log.debug(this.destination.getInfo())},{delay:A})}create2dVideoContext(){this.videoContext?this.videoContext.destroy():this.videoContext=new QQ({frameRate:15,logger:this.log,name:"mix-ctx"}),this.videoContext.create({alpha:!1})}setFps(A){this.autoSetFps=!1,this.videoContext.frameRate=A;for(let e of[...this.cameraNodeMap.values(),...this.screenNodeMap.values()])e.shouldUpdate=!1;setTimeout(()=>{var e;return(e=this.destination)==null?void 0:e.start(this.videoContext.frameRate)},500)}setFpsAuto(){var A;if(!this.autoSetFps)return;for(let l of[...this.cameraNodeMap.values(),...this.screenNodeMap.values()])l.shouldUpdate=!1;let e=null,o=0,a=!0;for(let[l,d]of this.inputLocalVideoTracks)if(d.profile.frameRate>o){if(this.endedIds.has(l)){let h=this.cameraNodeMap.get(l);h&&h.image.cancelVideoFrameCallback(h.videoCallbackId);continue}o=d.profile.frameRate,e=l}for(let[l,d]of this.inputLocalScreenTracks)if(d.profile.frameRate>o){if(this.endedIds.has(l)){let h=this.screenNodeMap.get(l);h&&h.image.cancelVideoFrameCallback(h.videoCallbackId);continue}o=d.profile.frameRate,e=l,a=!1}if(e!==null){let l=a?this.cameraNodeMap.get(e):this.screenNodeMap.get(e);l&&(l.shouldUpdate=!0,l.tryVideoFrameCallback()),this.log.info("set mix fps: ",o)}else(A=this.destination)==null||A.start(this.videoContext.frameRate),this.log.info("fallback to timer, fps: ",this.videoContext.frameRate)}setMixBackground(A){this.mixNode&&(this.mixNode.backgroundColor=A)}resizeMixCanvas(A,e){var o;(o=this.mixNode)==null||o.resize(A,e)}startMix(){return WA(this,null,function*(){var A;if(!this.mixNode||!this.destination)throw new Error("can't mix without necessary conditions");this.mixNode.disconnect(),this.mixNode.connect(this.destination),xp&&this.player.setCanvas(this.videoContext._canvas),this.setOutputMediaStreamTrack(this.destination.videoTrack),(A=this.manager)==null||A.changeInput(this)})}addCameraSource(A,e,o){if(this.inputLocalVideoTracks.has(A)||this.cameraNodeMap.has(A))throw new Error("There is already a cameraSource with the same ID: ".concat(A));let a,{mediaTrack:l}=e;if(!l)throw new Error("no mediaTrack, add cameraSource failed");e.recaptureMode=1,nd(this,Pc).add("videoInputRemoved",d=>{d.deviceId===e.deviceId&&(this.endedIds.add(A),this.setFpsAuto())}),e.on("output-media-track-changed",()=>{this.endedIds.delete(A),this.updateCameraSource(A,o,e.mediaTrack)}),a=Zd===16&&l instanceof CanvasCaptureMediaStreamTrack?this.videoContext.createVideoImageSource(l.canvas,{name:"cameraCanvasSource",logger:this.log}):this.videoContext.createVideoTrackSource(l,"cameraNodeSource"),a.resize(e.settings.width,e.settings.height),a.shouldUpdate=!1,this._connectMix(a,o,"cover"),this.inputLocalVideoTracks.set(A,e),this.cameraNodeMap.set(A,a),this.setFpsAuto()}addScreenSource(A,e,o){if(this.inputLocalScreenTracks.has(A)||this.screenNodeMap.has(A))throw new Error("There is already a screenSource with the same ID: ".concat(A));let{mediaTrack:a}=e;if(!a)throw new Error("no mediaTrack, add screenSource failed");e.on("output-media-track-changed",()=>{this.updateScreenSource(A,o,e.mediaTrack)});let l=this.videoContext.createVideoTrackSource(a,"screenNodeSource");l.resize(e.settings.width,e.settings.height),l.shouldUpdate=!1,this._connectMix(l,o),this.inputLocalScreenTracks.set(A,e),this.screenNodeMap.set(A,l),this.setFpsAuto()}addTextSource(A){let{id:e,content:o="",font:a,color:l,layout:d}=A;if(this.textNodeMap.has(e))throw new Error("There is already a textSource with the same ID: ".concat(e));let h=this.videoContext.createTextSource({content:o,font:a,color:l});h.resize(d.width,d.height),this._connectMix(h,d),this.textNodeMap.set(e,h)}addImageSource(A,e,o){if(this.imageNodeMap.has(A))throw new Error("There is already a imageSource with the same ID: ".concat(A));let a=this.videoContext.createVideoImageSource(e,{autoResize:!1,logger:this.log});a.resize(e.width,e.height),this._connectMix(a,o),this.imageNodeMap.set(A,a)}addVideoSource(A,e,o){if(this.videoNodeMap.has(A))throw new Error("There is already a videoSource with the same ID: ".concat(A));let a=this.videoContext.createVideoImageSource(e,{autoResize:!1,logger:this.log});a.resize(e.videoWidth,e.videoHeight),a.shouldUpdate=!1,this._connectMix(a,o),this.videoNodeMap.set(A,a)}updateCameraSource(A,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,a=arguments.length>3?arguments[3]:void 0,l=this.inputLocalVideoTracks.get(A);l&&o&&o!==l.mediaTrack&&(this.log.debug("updateCameraSource mixerLocalVideoTrack newTrack:",o,"oldTrack:",l.mediaTrack),l.setInputMediaStreamTrack(o));let d=this.cameraNodeMap.get(A);if(d){if(o){if(Zd===16&&o instanceof CanvasCaptureMediaStreamTrack)if(d instanceof d_){let S=d.output;d.close(),d=this.videoContext.createVideoImageSource(o.canvas,{name:"cameraCanvasSource",logger:this.log}),d.connect(S),this.cameraNodeMap.set(A,d)}else d.image=o.canvas;else if(d instanceof d_)d.replaceTrack(o);else{let S=d.output;d.close(),d=this.videoContext.createVideoTrackSource(o,"cameraNodeSource"),d.connect(S),this.cameraNodeMap.set(A,d)}let{width:h,height:y}=o.getSettings();h&&y&&d.resize(h,y)}a&&d.resize(a.width,a.height),(a||o)&&this.setFpsAuto(),this._changeMixLayout(d,e)}}updateScreenSource(A,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,a=this.inputLocalScreenTracks.get(A);this.log.debug("updateScreenSource mixerLocalScreenTrack",a,o),a&&o&&o!==a.mediaTrack&&a.setInputMediaStreamTrack(o);let l=this.screenNodeMap.get(A);l&&(o&&l.replaceTrack(o),this._changeMixLayout(l,e))}updateTextSource(A){let{id:e,content:o,font:a,color:l,layout:d}=A,h=this.textNodeMap.get(e);h&&(Ke(o)||(h.content=o),Ke(a)||(h.font=a),Ke(l)||(h.color=l),h.resize(d.width,d.height),this._changeMixLayout(h,d))}updateImageSource(A,e,o){let a=this.imageNodeMap.get(A);a&&(o&&(a.image=o,a.resize(o.width,o.height)),this._changeMixLayout(a,e))}updateVideoSource(A,e,o){let a=this.videoNodeMap.get(A);if(a){if(o){let l=a.image;l instanceof HTMLVideoElement&&this.stopVideoElement(l),a.image=o,a.resize(o.videoWidth,o.videoHeight)}this._changeMixLayout(a,e)}}_connectMix(A,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"contain";if(!this.mixNode)return;let{mirror:a,rotation:l}=e;A.disconnect();let d=new Ry(this.videoContext,this.log,a,l);d=A.connect(d),e.fillMode||(e.fillMode=o),d.connect(this.mixNode,e)}_changeMixLayout(A,e){if(!this.mixNode)return;let{mirror:o,rotation:a}=e,l=A.output||A;l instanceof Ry&&(Ke(o)||(l.mirror=o),Ke(a)||(l.rotation=a),l.resize(A.width,A.height)),this.mixNode.changeInputLayout(l,e)}removeCameraSource(A){let e=this.inputLocalVideoTracks.get(A);if(!e)return;e.close(),this.inputLocalVideoTracks.delete(A);let o=this.cameraNodeMap.get(A);o&&(o.output instanceof Ry&&o.output.close(),o.close(),this.cameraNodeMap.delete(A)),this.checkAfterRemove(!0)}removeScreenSource(A){let e=this.inputLocalScreenTracks.get(A);if(!e)return;e.close(),this.inputLocalScreenTracks.delete(A);let o=this.screenNodeMap.get(A);o&&(o.output instanceof Ry&&o.output.close(),o.close(),this.screenNodeMap.delete(A)),this.checkAfterRemove(!0)}removeTextSource(A){let e=this.textNodeMap.get(A);e&&(e.output instanceof Ry&&e.output.close(),e.close(),this.textNodeMap.delete(A)),this.checkAfterRemove()}removeImageSource(A){let e=this.imageNodeMap.get(A);e&&(e.output instanceof Ry&&e.output.close(),e.close(),this.imageNodeMap.delete(A)),this.checkAfterRemove()}removeVideoSource(A){let e=this.videoNodeMap.get(A);e&&(e.output instanceof Ry&&e.output.close(),e.image instanceof HTMLVideoElement&&this.stopVideoElement(e.image),e.close(),this.videoNodeMap.delete(A)),this.checkAfterRemove()}checkAfterRemove(){arguments.length>0&&arguments[0]!==void 0&&arguments[0]&&this.setFpsAuto()}stopVideoElement(A){A.pause(),A.src="",A.srcObject=null,A.remove()}close(){var A;super.close(),Gr.clearTask(this._checkId),(A=this.videoContext)==null||A.destroy(),delete this.mixNode,delete this.destination;for(let e of[...this.inputLocalVideoTracks.values(),...this.inputLocalScreenTracks.values()])e.close();this.inputLocalVideoTracks.clear(),this.inputLocalScreenTracks.clear(),this.cameraNodeMap.clear(),this.screenNodeMap.clear(),this.textNodeMap.clear(),this.imageNodeMap.clear(),Ln(this);for(let e of this.videoNodeMap.values())e.image instanceof HTMLVideoElement&&this.stopVideoElement(e.image);this.videoNodeMap.clear(),this.log.info("localMixVideoTrack close, stop mix")}},cj=PA();if(typeof navigator<"u"&&navigator.mediaDevices&&"setCaptureHandleConfig"in navigator.mediaDevices)try{navigator.mediaDevices.setCaptureHandleConfig({handle:cj,exposeOrigin:!0,permittedOrigins:["*"]})}catch{}var NiA=function(A){return WA(this,null,function*(){let e=null,o=function(d){let h={preferCurrentTab:d.preferDisplaySurface==="current-tab"||!!d.captureElement,systemAudio:"include",selfBrowserSurface:"include",surfaceSwitching:"include"},y={width:Bg?{max:d.width}:{ideal:d.width,max:d.width},height:Bg?{max:d.height}:{ideal:d.height,max:d.height},frameRate:d.frameRate,displaySurface:d.preferDisplaySurface||"monitor"};if(h.video=y,d.systemAudio){let{echoCancellation:S=!0,noiseSuppression:k=!1,autoGainControl:V=!1}=d;h.audio={echoCancellation:S,noiseSuppression:k,autoGainControl:V,sampleRate:48e3}}return h}(A);pA.info("getDisplayMedia with constraints: ".concat(JSON.stringify(o)));let a=yield navigator.mediaDevices.getDisplayMedia(o);A.systemAudio&&a.getAudioTracks().length===0&&(K0&&td<74||Bg||or)&&pA.warn("Your browser not support capture system audio");let l=a.getVideoTracks()[0];if(l){if(A.frameRate)try{yield l.applyConstraints({frameRate:{min:A.frameRate,ideal:A.frameRate},width:A.width,height:A.height})}catch(d){pA.warn("screen applyConstraints failed: ".concat(d))}A.captureElement&&(yield function(d,h){return WA(this,null,function*(){var y;if("CropTarget"in window&&"fromElement"in CropTarget&&Ra(d.cropTo))try{if(((y=d.getCaptureHandle())==null?void 0:y.handle)!==cj)return;let S=yield CropTarget.fromElement(h);yield d.cropTo(S)}catch(S){pA.warn("cropTo target failed ".concat(S))}})}(l,A.captureElement))}if(A.audio){let d=function(h){let y={echoCancellation:h.echoCancellation,autoGainControl:h.autoGainControl,noiseSuppression:h.noiseSuppression,sampleRate:h.sampleRate,channelCount:h.channelCount};return Ke(h.microphoneId)||(y.deviceId=h.microphoneId),{audio:y,video:!1}}(A);pA.info("getUserMedia with constraints: ".concat(JSON.stringify(d))),e=yield navigator.mediaDevices.getUserMedia(d),a.addTrack(e.getAudioTracks()[0])}return a})},WM=class extends BQ{constructor(A){super(A,2),Y(this,"profile",{width:1920,height:1080,frameRate:5,bitrate:1600}),Y(this,"objectFit","contain"),Y(this,"isScreen",!0),this._log.id="s-".concat(this._log.id)}get isShareCurrentTab(){var A,e;try{return cj===((e=(A=this.mediaTrack)==null?void 0:A.getCaptureHandle())==null?void 0:e.handle)}catch{return}}capture(A){return WA(this,arguments,function(e){var o=this;let{systemAudio:a=!1,autoGainControl:l,echoCancellation:d,noiseSuppression:h,audioTrack:y,videoTrack:S,captureElement:k,preferDisplaySurface:V}=e;return function*(){var J;try{let cA,CA=ko();return S||y?(cA=new MediaStream,S&&cA.addTrack(S),y&&cA.addTrack(y)):(cA=yield NiA({audio:!1,systemAudio:a,width:o.profile.width,height:o.profile.height,frameRate:o.profile.frameRate,autoGainControl:l,echoCancellation:d,noiseSuppression:h,captureElement:k,preferDisplaySurface:V}),o.sourceTrack=cA.getVideoTracks()[0]),yield o.setInputMediaStreamTrack(cA.getVideoTracks()[0]),F.emit(nA.LOCAL_TRACK_CAPTURE_SUCCESS,{track:o,cost:ko()-CA,profile:o.profile,room:(J=o.manager)==null?void 0:J.room}),cA}catch(cA){throw o.log.error("getDisplayMedia error observed ".concat(cA)),cA instanceof gi?cA:new gi({code:Ct.INITIALIZE_FAILED,name:cA.name,message:cA.message})}}()})}switchDevice(A){return WA(this,null,function*(){throw new Error("Method not implemented.")})}};hi([qM(function(A){this.setContentHint(A.contentHint||"detail")})],WM.prototype,"capture");var lj,Ij=class extends jM{constructor(A){super(A),this._log.id="s-".concat(this._log.id),this.isScreen=!0}addAudioProcessor(A,e,o){this.pipeline.silentNode.setNode(o),this.pipeline.mixNode.setNode(e),this.pipeline.aec.setNode(A),this.enableTrackAEC(!1)}removeAudioProcessor(A){this.pipeline.aec.node===A&&(this.pipeline.aec.deleteNode(),this.pipeline.silentNode.deleteNode(),this.pipeline.mixNode.deleteNode(),this.enableTrackAEC(!0))}};function uj(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:48e3,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,a=arguments.length>3?arguments[3]:void 0;return WA(this,null,function*(){let l=OI();lj||(lj=Vg(l,URL.createObjectURL(new Blob(['registerProcessor("dumper",class extends AudioWorkletProcessor{constructor(e){super(),this.sourceSampleRate=e.processorOptions.sourceSampleRate||48e3,this.targetSampleRate=e.processorOptions.targetSampleRate||48e3,this.port.onmessage=e=>{this.port2=e.data.port}}process(e){return(this.port2||this.port).postMessage(this.resampleAll(e,this.sourceSampleRate,this.targetSampleRate)),!0}resampleAll(r,s,a){if(s===a)return r;var o=[];for(let t=0;ty.connect(h,0,S)),new ReadableStream({start(y){h.port.onmessage=S=>{y.enqueue(S.data)}},cancel(){A.forEach(y=>y.disconnect(h)),h.port.close()}})})}var GiA=class extends jeA{constructor(A){super(),this.room=A,Y(this,"_localAudioTrack"),Y(this,"_localScreenAudioTrack"),Y(this,"log"),Y(this,"denoiser"),Y(this,"voiceChanger"),Y(this,"mixChangedDebounce"),Y(this,"audioProcessor"),Y(this,"encodePipeline",[]),Y(this,"decodePipeline",[]),Y(this,"getPCMAbortCtrlMap",new Map),Y(this,"audioFrameEventConfigMap",new Map),Y(this,"audioReferenceMap",new Map),Y(this,"isLocalAudioNeedAudioProcess",!1),Y(this,"isScreenAudioNeedAudioProcess",!1),this.log=pA.createLogger({parent:A?.getLogger(),id:"am",userId:A?.userId,sdkAppId:A?.sdkAppId}),this.installEvent()}get localAudioTrack(){return this._localAudioTrack}get _localAudioPipline(){var A;return(A=this._localAudioTrack)==null?void 0:A.pipeline}get _localScreenAudioPipeline(){var A;return(A=this._localScreenAudioTrack)==null?void 0:A.pipeline}dump(A){var e,o;if(!this._localAudioTrack)return;let a=[],l=[];(e=this._localAudioPipline)!=null&&e.source.node&&(a.push(this._localAudioPipline.source.node),l.push("mic")),(o=this._localAudioPipline)!=null&&o.denoiser.node&&(a.push(this._localAudioPipline.denoiser.node),l.push("mic-processed")),this.mixWeight>1&&(a.push(this.audioContext.createMediaStreamSource(this._localAudioPipline.stream)),l.push("mix")),this.log.info("dump audio track ".concat(l,", duration: ").concat(A));let d=new AbortController,h=[],y=setTimeout(()=>{this.log.info('dump audio track complete please input "download()" to download.'),d.abort("timeout")},1e3*A),S=()=>{for(let V=0;VV.pipeTo(new WritableStream({write(J){J.forEach((cA,CA)=>h[CA]=h[CA]?h[CA].concat(cA[0]):[cA[0]])}}),d).catch(J=>S));return{then:k.then.bind(k),download:S}}getPCM(A,e){var o,a,l;if(typeof WritableStream>"u")return void this.log.warn("getPCM failed: browser not support WritableStream");let{enable:d,sampleRate:h=48e3,channelCount:y=1,port:S}=(e===""?this.audioFrameEventConfigMap.get(""):this.audioFrameEventConfigMap.get(e)||this.audioFrameEventConfigMap.get("*"))||{};if(!d)return;this.log.info("getPCM ".concat(e||"local"));let k,V,J=Math.floor(.04*h),cA=new Float32Array(J),CA=new Float32Array(J),MA=0,ie=new AbortController,pe=e===""?(o=this._localAudioTrack)==null?void 0:o.mediaTrack:(l=(a=this.room)==null?void 0:a.remotePublishedUserMap.get(e))==null?void 0:l.remoteAudioTrack.mediaTrack;if(pe)return uj([OI().createMediaStreamSource(new MediaStream([pe]))],h,y,S).then(qe=>qe.pipeTo(new WritableStream({write(we){we[0][0]&&(MA+we[0][0].length>J?(cA.set(we[0][0].subarray(0,J-MA),MA),k=we[0][0].subarray(J-MA),we[0][1]&&(CA.set(we[0][1].subarray(0,J-MA),MA),V=we[0][1].subarray(J-MA)),MA+=J-MA):(k&&(cA.set(k,MA),MA+=k.length,k=void 0),V&&(CA.set(V,MA),V=void 0),cA.set(we[0][0],MA),we[0][1]&&CA.set(we[0][1],MA),MA+=we[0][0].length),MA>=J&&(MA=0,A({userId:e,sampleRate:h,channelCount:y,data:y===1?cA:[cA,CA]}),cA=new Float32Array(J),CA=new Float32Array(J)))}}),ie).catch(we=>this.log.warn("stop getPCM reason:".concat(we)))),ie;this.log.info("getPCM failed: ".concat(e||"local"," has no audio track"))}get hasScreenAudioTrack(){return!Ke(this._localScreenAudioTrack)}get hasAudioTrack(){return!Ke(this._localAudioTrack)}changeInput(A){var e,o;return A instanceof Ij?(this._localScreenAudioTrack=A,this.isScreenAudioNeedAudioProcess&&(e=this.audioProcessor)!=null&&e.screenAudioWorkletNode&&(A.addAudioProcessor(this.audioProcessor.screenAudioWorkletNode,this.audioProcessor.mixNode,this.audioProcessor.silentNode),this.audioReferenceMap.forEach((a,l)=>{A.mixAudioReference(a,l)})),A.pipeline.connect(),this.mixOnChange()):A instanceof jM?(this._localAudioTrack=A,this.denoiser&&A.addDenoiser(this.denoiser),this.isLocalAudioNeedAudioProcess&&(o=this.audioProcessor)!=null&&o.localAudioWorkletNode&&(A.addAudioProcessor(this.audioProcessor.localAudioWorkletNode,this.audioProcessor.mixNode,this.audioProcessor.silentNode),this.audioReferenceMap.forEach((a,l)=>{A.mixAudioReference(a,l)})),A.pipeline.connect(),this.mixOnChange()):A instanceof d1?A.setOutputMediaStreamTrack(A.mediaTrack):void 0}mixAudioReference(A,e){var o;(o=this._localAudioTrack)==null||o.mixAudioReference(A,e)}unMixAudioReference(A){var e;(e=this._localAudioTrack)==null||e.unMixAudioReference(A)}setAudioReferenceVolume(A,e){var o;(o=this._localAudioTrack)==null||o.setAudioReferenceVolume(A,e)}mixOnChange(){return this.mixChangedDebounce||(this.mixChangedDebounce=Promise.resolve().then(()=>{var A,e;return delete this.mixChangedDebounce,Promise.all([(A=this._localAudioTrack)==null?void 0:A.setOutputMediaStreamTrack(this.mixWeight>1?this.mixTrack:this._localAudioTrack.mediaTrack),(e=this._localScreenAudioTrack)==null?void 0:e.setOutputMediaStreamTrack(this.mixWeight>1?this.mixTrack:this._localScreenAudioTrack.mediaTrack)])})),this.mixChangedDebounce}removeInput(A){A instanceof Ij?delete this._localScreenAudioTrack:A instanceof jM&&delete this._localAudioTrack}addDenoiser(A){var e;this.denoiser=A,(e=this._localAudioTrack)==null||e.addDenoiser(A)}addAudioProcessor(A,e,o,a){var l;this.audioProcessor={localAudioWorkletNode:o,mixNode:A,silentNode:e,screenAudioWorkletNode:a},this.isLocalAudioNeedAudioProcess&&this._localAudioTrack&&o&&(this._localAudioTrack.addAudioProcessor(o,A,e),this.audioReferenceMap.forEach((d,h)=>{var y;(y=this._localAudioTrack)==null||y.mixAudioReference(d,h)})),this.isScreenAudioNeedAudioProcess&&this._localScreenAudioTrack&&a&&((l=this._localScreenAudioTrack)==null||l.addAudioProcessor(a,A,e),this.audioReferenceMap.forEach((d,h)=>{var y;(y=this._localScreenAudioTrack)==null||y.mixAudioReference(d,h)}))}removeDenoiser(A){var e;return delete this.denoiser,(e=this._localAudioTrack)==null?void 0:e.removeDenoiser(A)}addVoiceChanger(A,e){var o;this.voiceChanger=[A,e],(o=this._localAudioTrack)==null||o.pipeline.voiceChanger.setNode(A,e)}removeVoiceChanger(){var A;delete this.voiceChanger,(A=this._localAudioTrack)==null||A.pipeline.voiceChanger.deleteNode()}removeAudioProcessor(A,e){var o,a;delete this.audioProcessor,(o=this._localAudioTrack)==null||o.removeAudioProcessor(A),(a=this._localScreenAudioTrack)==null||a.removeAudioProcessor(e)}destroy(){this.close(),this.audioReferenceMap.clear(),this.getPCMAbortCtrlMap.forEach(A=>A?.abort("destroy")),this.getPCMAbortCtrlMap.clear(),this.audioFrameEventConfigMap.clear(),this.uninstallEvent()}addEncodeProcessor(A){let{processor:e,type:o}=A;var a;this.encodePipeline.includes(e)||(this.encodePipeline[o]=e,(a=this.room)==null||a.enableInsertableStreams())}addDecodeProcessor(A){let{processor:e,type:o}=A;var a;this.decodePipeline.includes(e)||(this.decodePipeline[o]=e,(a=this.room)==null||a.enableInsertableStreams())}removeEncodeProcessor(A){let{type:e}=A;this.encodePipeline[e]=void 0}removeDecodeProcessor(A){let{type:e}=A;this.decodePipeline[e]=void 0}handleLocalTrackStarted(A){let{room:e,userId:o}=A;var a;if(e!==this.room||this.getPCMAbortCtrlMap.get(o))return;let l=this.getPCM(d=>{var h;(h=this.room)==null||h.emit("audio-frame",d)},"");this.getPCMAbortCtrlMap.set(o,l),this.getPCMAbortCtrlMap.get(o)&&((a=this._localAudioTrack)==null||a.on("input-media-track-changed",()=>{let d=this.getPCMAbortCtrlMap.get(o);d&&(d.abort("inputMediaTrackChanged"),d=this.getPCM(h=>{var y;(y=this.room)==null||y.emit("audio-frame",h)},""),this.getPCMAbortCtrlMap.set(o,d))}))}handleLocalTrackStopped(A){let{room:e,userId:o}=A;if(e!==this.room)return;let a=this.getPCMAbortCtrlMap.get(o);a&&(a.abort("stopLocalAudio"),this.getPCMAbortCtrlMap.delete(o))}handleRemoteTrackStarted(A){let{room:e,userId:o}=A;if(e===this.room&&!this.getPCMAbortCtrlMap.get(o)){let a=this.room.audioManager.getPCM(l=>{var d;(d=this.room)==null||d.emit("audio-frame",l)},o);this.getPCMAbortCtrlMap.set(o,a)}}handleRemoteTrackStopped(A){let{room:e,userId:o}=A;if(e!==this.room)return;let a=this.getPCMAbortCtrlMap.get(o);a&&(a.abort("stopRemoteAudio"),this.getPCMAbortCtrlMap.delete(o))}installEvent(){F.on("113",this.handleLocalTrackStarted,this),F.on("114",this.handleLocalTrackStopped,this),F.on("115",this.handleRemoteTrackStarted,this),F.on("116",this.handleRemoteTrackStopped,this)}uninstallEvent(){F.off("113",this.handleLocalTrackStarted),F.off("114",this.handleLocalTrackStopped),F.off("115",this.handleRemoteTrackStarted),F.off("116",this.handleRemoteTrackStopped)}updateAudioReference(A){let{type:e,audioReference:o,refId:a,volume:l}=A;if(e==="add"){if(this.audioReferenceMap.get(a)||!o||(this.audioReferenceMap.set(a,o),!this.audioProcessor))return;this.mixAudioReference(o,a)}else if(e==="remove")this.audioReferenceMap.get(a)&&(this.audioReferenceMap.delete(a),this.unMixAudioReference(a));else if(e==="updateVolume"){if(!this.audioProcessor||Ke(l))return;this.setAudioReferenceVolume(a,l)}}};function E1(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:30,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return jr((o,a)=>function(){for(var l=arguments.length,d=new Array(l),h=0;h{let k=setTimeout(()=>{let V=new gi({code:Ct.API_CALL_TIMEOUT,message:"checkPendingPromise ".concat(a,"() timeout ").concat(A,"s")});(this.log||this._log||pA).warn(V),e===2?S(V):e===1&&y()},1e3*A);this._checkPendingPromiseSet||(this._checkPendingPromiseSet=new Set),this._checkPendingPromiseSet.add(k),o.apply(this,d).then(y,S).finally(()=>{clearTimeout(k),this._checkPendingPromiseSet&&k&&this._checkPendingPromiseSet.delete(k)})})})}var zM=class X3 extends zK{constructor(e,o,a){super({userId:o.userId,sdkAppId:e.sdkAppId,mediaType:a,room:e}),this.room=e,this.user=o,Y(this,"tinyId"),Y(this,"isRemote",!0),Y(this,"jitterBufferDelay",0),Y(this,"availableState"),Y(this,"remotePublishState"),Y(this,"_triggerCheckDecodeSubject",hQ(la(this,X3.STATE_SUBSCRIBE))),Y(this,"ignoreUpdatePlayingState"),this.tinyId=o.tinyId,this.availableState=new Zs("".concat(o.userId,"-").concat(this.mediaType,"-available"),"remote-track-available"),this.remotePublishState=new Zs("".concat(o.userId,"-").concat(this.mediaType,"-remote-publish"),"remote-track-publish"),ma(XK(la(this,Zs.STATECHANGED),la(this.remotePublishState,Zs.STATECHANGED)),oj(()=>this.isRemotePublished&&(this.isSubscribed||this.isSubscribing)),Bl(y=>{this.availableState.state!==(y?Zs.ON:Zs.OFF)&&(this.availableState.state=y?Zs.ON:Zs.OFF),(!this.isRemotePublished||!this.ignoreUpdatePlayingState)&&this.updatePlayingState(y)}));let l=ma(la(this.player,yo.ERROR),KM(y=>y.code===MediaError.MEDIA_ERR_DECODE)),d=ma(ej(5e3),KM(()=>!!(!this.ignoreDecodeError&&this.isSubscribed&&this.isPlayCalled&&this.stat.bytesReceived&&this.isRemotePublished)&&(!this.player.isPlaying&&!(this.kind===YA.AUDIO?this.getAudioLevel()>0:this.stat.framesDecoded>0)||(this.reportDecodeResult(!0),!1)))),h=ma(F5(l,d),dE(la(this,Zs.INIT)));ma(this._triggerCheckDecodeSubject,KM(()=>!this.ignoreDecodeError),l1(h),Bl(y=>{this.reportDecodeResult(!1,y)}))}setMute(e){this.isRemotePublished&&super.setMute(e)}setInputMediaStreamTrack(e){super.setInputMediaStreamTrack(e),this.isRemotePublished&&this.isSubscribed&&this.player.setTrack(this.outMediaTrack)}checkDecodeResult(){this._triggerCheckDecodeSubject.next(!0)}waitHasMediaTrack(){return new Promise(e=>{this.mediaTrack?e():this.once("input-media-track-changed",e)})}get ignoreDecodeError(){var e,o,a,l;return(l=(a=(o=(e=this.room)==null?void 0:e.networkQuality)==null?void 0:o.hadRecentBadDownlink)==null?void 0:a.call(o,2))!=null&&l||this.player.isInAutoPlayFailedState}get isSubscribing(){return this.state.toString()==="subscribeing"}get isSubscribed(){return this.state===X3.STATE_SUBSCRIBE}get isAvailable(){return this.availableState.state===Zs.ON}get isNeedPlay(){return this.isAvailable&&this.isPlayCalled}subscribe(e){return e}unsubscribe(){this.streamType==="main"&&this.kind==="video"&&this.room.changeType(!1,this.user)}reportDecodeResult(e,o){var a,l;let d=this.kind===YA.AUDIO;if(si[e?"addSuccessEvent":"addFailedEvent"]({key:d?504700:514702}),!d){let h=((a=this.room)==null?void 0:a.downlinkVideoCodec.toUpperCase())||"H264";si[e?"addSuccessEvent":"addFailedEvent"]({key:hy["DECODE_".concat(h,"_RESULT")]}),e||this.log.warn("".concat((l=this.room)==null?void 0:l.downlinkVideoCodec," decode failed"))}e||(si.addEnum({key:d?504701:514703,value:Jp()}),sn.uploadEvent({log:"stat-decode-failed-".concat(this.kind,"-").concat(cQ()||Hp()),userId:this.room.userId}),this._log.warn("decode failed: isPlaying: ".concat(this.player.isPlaying," ").concat(this.kind===YA.AUDIO?"audioLevel: ".concat(this.getAudioLevel()):"framesDecoded: ".concat(this.stat.framesDecoded>0))),this.emit("decode-failed",{error:o}))}updatePlayingState(e){if(this.player.isPlayCalled&&this.player.setTrack(this.playerMediaTrack),this.isPlayCalled&&this.player.isStopped===e){if(e&&(!this.isSubscribed||!this.isRemotePublished||!this.outMediaTrack))return void this.log.info("abort play, isSubscribed: ".concat(this.isSubscribed," isAvailable: ").concat(this.isRemotePublished," hasTrack: ").concat(!!this.outMediaTrack," "));super.updatePlayingState(e)}}close(){super.close(),this.outMediaTrack&&this.uninstallTrackEvent(this.outMediaTrack)}onFlagChanged(){this.remotePublishState.state=this.isRemotePublished?Zs.ON:Zs.OFF,this.emit("remote-publish-changed",this.isRemotePublished)}onTrackMuted(){this.isNeedPlay&&super.onTrackMuted()}onTrackUnmuted(){this.isNeedPlay&&super.onTrackUnmuted()}onTrackEnded(){this.isNeedPlay&&super.onTrackEnded()}};Y(zM,"STATE_SUBSCRIBE","subscribe"),hi([E1(5,1)],zM.prototype,"waitHasMediaTrack"),hi([lc(Zs.INIT,zM.STATE_SUBSCRIBE,{success(){this.log.info("subscribed"),F.emit(nA.REMOTE_TRACK_SUBSCRIBED,{track:this})},ignoreError:!0}),Sy(521716,!1)],zM.prototype,"subscribe"),hi([lc(zM.STATE_SUBSCRIBE,Zs.INIT,{sync:!0,success(){this.log.info("unsubscribed"),F.emit(nA.REMOTE_TRACK_UNSUBSCRIBED,{track:this})}})],zM.prototype,"unsubscribe");var az=zM,d1=class extends az{constructor(A,e){super(A,e,1),Y(this,"volume",0),Y(this,"mediaType",1),Y(this,"stat",{bytesReceived:0,packetsReceived:0,packetsLost:0,end2EndDelay:0,jitterBufferDelay:0}),this.manager=A.audioManager}get dbVolume(){return e1.isRunning?this.player.pipeline.volumeMeter.getVolumeDb():Math.floor(Math.max(10*Math.log10(this.volume)+100,0))}onPlayerError(A){this.enableDecodeFrame&&(this._log.warn("use audio decoder"),this.room.enableInsertableStreams())}get enableDecodeFrame(){var A,e;return!!this.manager&&(this.manager.decodePipeline.some(o=>o)||((e=(A=this.player.element)==null?void 0:A.error)==null?void 0:e.code)===MediaError.MEDIA_ERR_DECODE&&s_().AudioDecoder&&zp)}get enableDecryptFrame(){return this.manager&&!!this.manager.decodePipeline[0]}decodeFrame(A){if(!this.manager)return A;let e=A;for(let[o,a]of this.manager.decodePipeline.entries()){if(!a)continue;let l={frame:A,track:this};if(o===1&&this.isAvailable&&this.room.role==="audience"&&(l.onAudioFrameNTPTime=d=>{let{ntp:h,frame:y,hasLeavingTag:S}=d;this.emit("audio-frame-with-ntp",{ntp:h,frame:y,hasLeavingTag:S})}),e=a(l),!e)return}return e}getAudioLevel(){if(!this.isAvailable)return 0;let A=this.volume||super.getAudioLevel();return A>1?1:A}getInternalAudioLevel(){return this.isAvailable?super.getInternalAudioLevel():0}get isRemotePublished(){return this.user.muteState.audioAvailable}},biA=class extends AC{constructor(A,e,o,a,l){super(A,{useDefaultProgram:!0,useFbo:!0,name:"alpha",create2d:!0,logger:e}),this.setContainer=a,Y(this,"initStat",{alphaStitchingType:1}),Y(this,"end",hQ()),Y(this,"minSize",320),Y(this,"maxSize",1280),Y(this,"draggable",!1),Y(this,"startDragX",0),Y(this,"startDragY",0),Y(this,"left",0),Y(this,"top",0),Y(this,"baseWidth",320),Y(this,"baseRatio"),Y(this,"container"),this.initStat=l,this.draggable=o,this.bindDragEvents(),si.addEnum({key:515700,value:1}),this.draggable&&si.addEnum({key:515700,value:11})}bindDragEvents(){let A=this.context._canvas;if(A)if(this.draggable){let e=dE(this.end);ma(la(A,"mousedown"),sj(this.startDrag.bind(this)),g1(()=>ma(la(window,"mousemove"),dE(la(window,"mouseup")))),e,Bl(this.doDrag.bind(this))),ma(la(A,"dblclick"),e,Bl(this.resetPosition.bind(this))),ma(la(A,"wheel"),e,Bl(this.handleZoom.bind(this))),this.renderCanvas()}else{if(!this.container)return;this.container.style.removeProperty("left"),this.container.style.removeProperty("top"),this.end.next()}}render(A){var e;return!((e=this.input)==null||!e.requestFrame(A))&&(this.useProgram(),this.useBufferFrame(),this.useInputTexture(),this.draw(),!0)}startDrag(A){A.preventDefault(),A.button===0&&(this.startDragX=A.clientX-this.left,this.startDragY=A.clientY-this.top)}renderCanvas(){let{container:A}=this;A||this.setContainer(),A&&this.baseRatio&&this.draggable&&(A.style.setProperty("width","".concat(this.baseWidth,"px")),A.style.setProperty("height","".concat(this.baseWidth/this.baseRatio,"px")),A.style.setProperty("position","fixed"),A.style.setProperty("left","".concat(this.left,"px")),A.style.setProperty("top","".concat(this.top,"px")))}doDrag(A){A.preventDefault(),this.left=A.clientX-this.startDragX,this.top=A.clientY-this.startDragY,this.renderCanvas()}handleZoom(A){A.preventDefault();let e=A.deltaY,o=this.context._canvas;o&&(this.baseWidth||(this.baseWidth=o.offsetWidth),this.baseWidth=e<0?Math.min(1.1*this.baseWidth,this.maxSize):Math.max(.9*this.baseWidth,this.minSize),this.renderCanvas())}resetPosition(){this.left=0,this.top=0,this.renderCanvas()}onRatioReset(){this.renderCanvas()}draw2d(A,e,o,a,l){var d;let{ctx2d:h}=this,y=this.context._canvas;if(!h||!y)return!1;let S=super.draw2d(A,e,o,a,l),k=h.getImageData(0,0,a,l),{data:V}=k,J=!1;if(this.initStat.alphaStitchingType===1){let cA=Math.floor(a/2);for(let CA=0;CA=100;V[ie+3]=we?255:0}J=super.draw2d(k,0,0,0,0,cA,l),y.width=cA}else if(this.initStat.alphaStitchingType===2){let cA=Math.floor(l/2);for(let CA=0;CA=100;V[ie+3]=we?255:0}J=super.draw2d(k,0,0,0,0,a,cA),y.height=cA}return(d=this.context.ctx)==null||d.clearRect(0,0,a,l),S&&J}close(){this.baseRatio=void 0,this.end.next(),this.end.complete()}},CL=class extends az{constructor(A,e){super(A,e,arguments.length>2&&arguments[2]!==void 0?arguments[2]:4),Y(this,"mediaType",4),Y(this,"source"),Y(this,"shouldRenderAlpha",!1),Y(this,"alphaNode"),Y(this,"shouldBeDraggable",!0),Y(this,"stat",{bytesReceived:0,packetsReceived:0,packetsLost:0,framesReceived:0,framesDecoded:0,frameWidth:0,frameHeight:0,end2EndDelay:0,jitterBufferDelay:0,keyFramesDecoded:0}),Y(this,"_keyFrameCountLogged",!1),Y(this,"_keyFrameStartTimestamp",0),Y(this,"_keyFrameStartCount",0),Y(this,"_keyFrameIntervals",[]),Y(this,"_prevKeyFrameTimestamp",0),this.manager=A.videoManager,this.on("first-video-frame",o=>{this.room.emit("first-video-frame",o)}),this.on("first-frame-render",o=>{this.room.emit("first-frame-render",o)})}isAlphaSei(A){if(this.userId!==A.userId||A.seiPayloadType!==50)return!1;let e=new Uint8Array(A.data);return e.length%3==0&&e[0]===0&&e[1]===1&&e}play(A,e){return e!=null&&e.canvasRender&&!this.source&&this.useCanvasPlayer(),super.play(A,e).then(()=>{this.player.calculateStat(),F.emit("156",{track:this,player:this.player})})}updateAlphaRenderInfo(A){let e=this.isAlphaSei(A);if(e)if(this.alphaNode){let o=e[2];if(this.alphaNode.baseRatio&&this.alphaNode.initStat.alphaStitchingType===o)return;this.alphaNode.initStat={alphaStitchingType:o};let a=this.player.getElement();if(a){let l=a.videoWidth/a.videoHeight;l&&(this.alphaNode.baseRatio=l*(o===1?.5:2),this.alphaNode.onRatioReset())}this.player.canvas&&(this.player.canvas.id=this.generateAlphaCanvasName(o))}else this.shouldRenderAlpha=!0,this.player.shouldRenderAlpha=!0,this.useCanvasPlayer(e[2])}generateAlphaCanvasName(A){let e=dy[A];return"".concat("alpha","_").concat(e,"_").concat(this.userId)}useCanvasPlayer(A){if(this.log.info("useCanvasPlayer(), has element:".concat(!!this.player.element)),!this.player.element)return;let e=new QQ({frameRate:15,logger:this.log,name:this.shouldRenderAlpha&&A?this.generateAlphaCanvasName(A):this.userId});e.create({alpha:this.shouldRenderAlpha,willReadFrequently:this.shouldRenderAlpha});let o=new rj(e,{name:"remotePlayer",logger:this.log});if(this.source=e.createVideoPlayerSource(this.player),this.player.setCanvas(e._canvas),this.shouldRenderAlpha&&A){let a=()=>{!this.player.container||!this.alphaNode||(this.alphaNode.container=this.player.container,this.alphaNode.renderCanvas())},l=new biA(e,this.log,this.shouldBeDraggable,a,{alphaStitchingType:A});this.source.connect(l),l.connect(o),this.alphaNode=l}else this.source.connect(o);Zp()||(this.updateCanvasPlayerFPS=this.updateCanvasPlayerFPS.bind(this,e),this.room.on("heartbeat-report",this.updateCanvasPlayerFPS,this))}updateCanvasPlayerFPS(A){let e=this.decodeFPS,o=(a=e,[15,30,45,60].reduce((l,d)=>Math.abs(d-a)l.msg_user_info.str_identifier===this.userId))||{},o=this.mediaType===2?7:this.isSmall?3:2;if(!e||e.length===0)return 0;let a=e.find(l=>l.uint32_video_stream_type===o);return a?.uint32_video_dec_fps||0}stop(){return this.room.off("heartbeat-report",this.updateCanvasPlayerFPS,this),F.emit("157",{track:this,player:this.player}),this.alphaNode&&this.alphaNode.close(),super.stop()}decodeFrame(A){if(!this.manager)return A;for(let e of this.manager.decodePipeline)if(e&&!(A=e({frame:A,track:this})))return;return A}get isBig(){return this.mediaType===4}get isSmall(){return this.mediaType===8}changeType(A){this.room.changeType(A,this.user)}get isRemotePublished(){return this.user.muteState.videoAvailable}setMirror(A){A==="publish"||A==="both"||super.setMirror(A)}setDraggable(A){this.shouldBeDraggable=A,this.alphaNode&&(this.alphaNode.draggable=A,this.alphaNode.bindDragEvents())}onDecodeDowngradeStateChanged(A){this.emit("decode-downgrade-state-changed",A)}updateKeyFramesDecoded(A){let e=this.stat.keyFramesDecoded||0;if(this.stat.keyFramesDecoded=A,this._keyFrameCountLogged)return;let o=Date.now();if(!this._keyFrameStartTimestamp)return this._keyFrameStartTimestamp=o,this._keyFrameStartCount=A,void(this._prevKeyFrameTimestamp=o);if(this._prevKeyFrameTimestamp&&A>e){let l=A-e,d=(o-this._prevKeyFrameTimestamp)/1e3/l;this._keyFrameIntervals.push(d)}this._prevKeyFrameTimestamp=o;let a=o-this._keyFrameStartTimestamp;if(a>=16e3){let l=A-this._keyFrameStartCount,d=l>0?a/1e3/l:0,h="".concat(l," keyframes in 16s ").concat(d," [").concat(this._keyFrameIntervals.map(S=>S.toFixed(1)).join(","),"] keyFramesDecoded ").concat(A),y=d<=2.5?"debug":"info";this.log[y](h),this._keyFrameCountLogged=!0}}},gz=class extends CL{constructor(A,e){super(A,e,2),Y(this,"mediaType",2),Y(this,"objectFit","contain")}get isRemotePublished(){return this.user.muteState.hasAuxiliary}},C_=new Map;function Jg(A,e){let o=po(fi({},e),{timestamp:Of()});C_.has(A)?C_.get(A).push(o):C_.set(A,[o])}function cz(){for(var A=arguments.length,e=new Array(A),o=0;ofunction(){for(var d=arguments.length,h=new Array(d),y=0;yXf(k)?nM(k):Vn(k)?k:Cg(k))},fnName:l,value:o},link:{className:d,fnName:l}})})}else if(!Ke(e.type)&&Cg(o)!==e.type)throw new gi({code:Ct.INVALID_PARAMETER,message:Xo({key:vo.INVALID_PARAMETER_TYPE,data:{key:a,rule:e,fnName:l,value:o},link:{className:d,fnName:l}})});if(e.allowEmpty===!1){let S=kn(o)&&(o===0||Number.isNaN(o)),k=Vn(o)&&o.trim()==="";if(S||k)throw new gi({code:Ct.INVALID_PARAMETER,message:Xo({key:vo.INVALID_PARAMETER_EMPTY,data:{key:a,rule:e,fnName:l,value:o},link:{className:d,fnName:l}})})}if(e.notLessThanZero&&kn(o)&&o<0)throw new gi({code:Ct.INVALID_PARAMETER,message:Xo({key:vo.CANNOT_LESS_THAN_ZERO,data:{key:a,rule:e,fnName:l,value:o},link:{className:d,fnName:l}})});if(!Ke(e.min)&&kn(o)&&oe.max)throw new gi({code:Ct.INVALID_PARAMETER,message:Xo({key:vo.INVALID_PARAMETER_MAX,data:{key:a,rule:e,fnName:l,value:o},link:{className:d,fnName:l}})});if(Vn(e.instanceOf)){if(!o||o._name!==e.instanceOf)throw new gi({code:Ct.INVALID_PARAMETER,message:Xo({key:vo.INVALID_PARAMETER_INSTANCE,data:{key:a,rule:e,fnName:l,value:o},link:{className:d,fnName:l}})})}else if(Ra(e.instanceOf)&&!(o instanceof e.instanceOf))throw new gi({code:Ct.INVALID_PARAMETER,message:Xo({key:vo.INVALID_PARAMETER_INSTANCE,data:{key:a,rule:e,fnName:l,value:o},link:{className:d,fnName:l}})});if(e.values&&!e.values.includes(o))throw new gi({code:Ct.INVALID_PARAMETER,message:Xo({key:vo.INVALID_PARAMETER_RANGE,data:{key:a,rule:e,fnName:l,value:o},link:{className:d,fnName:l}})});let{properties:h}=e;IE(h)&&XE(o)&&Object.keys(h).forEach(S=>{C1.call(this,{rule:h[S],value:o&&o[S],key:"".concat(a,".").concat(S),fnName:l,className:d})});let{arrayItem:y}=e;IE(y)&&wa(o)&&o.forEach((S,k)=>{C1.call(this,{rule:y,value:S,key:"".concat(a,"[").concat(k,"]"),fnName:l,className:d})}),Ra(e.validate)&&e.validate.call(this,o,a,l,d,this)}F.on(nA.JOIN_SUCCESS,A=>{let{room:e}=A;Jg(e.userId,{eventId:32788})}),F.on(nA.LEAVE_START,A=>{let{room:e}=A;Jg(e.userId,{eventId:32789})}),F.on(nA.LOCAL_TRACK_PUBLISHED,A=>{let{track:e}=A;if(e.room){let o=32769;e.mediaType===4?o=32768:e.mediaType===2&&(o=32805),Jg(e.room.userId,{eventId:o})}}),F.on(nA.LOCAL_TRACK_UNPUBLISHED,A=>{let{track:e}=A;if(e.room){let o=32771;e.mediaType===4?o=32770:e.mediaType===2&&(o=32806),Jg(e.room.userId,{eventId:o})}}),F.on(nA.TRACK_MUTED,A=>{let{track:e}=A;e.room&&(e.kind===YA.AUDIO?Jg(e.room.userId,{eventId:e.isRemote?32785:32772,remoteUserId:e.isRemote?e.userId:void 0}):Jg(e.room.userId,{eventId:e.isRemote?32784:32773,remoteUserId:e.isRemote?e.userId:void 0}))}),F.on(nA.TRACK_UNMUTED,A=>{let{track:e}=A;e.room&&(e.kind===YA.AUDIO?Jg(e.room.userId,{eventId:e.isRemote?32787:32774,remoteUserId:e.isRemote?e.userId:void 0}):Jg(e.room.userId,{eventId:e.isRemote?32786:32775,remoteUserId:e.isRemote?e.userId:void 0}))}),F.on(nA.REMOTE_TRACK_SUBSCRIBED,A=>{let{track:e}=A;e.room&&(e.mediaType===1&&Jg(e.room.userId,{eventId:32777,remoteUserId:e.userId}),e.mediaType===4&&Jg(e.room.userId,{eventId:32776,remoteUserId:e.userId}),e.mediaType===8&&Jg(e.room.userId,{eventId:32803,remoteUserId:e.userId}))}),F.on(nA.REMOTE_TRACK_UNSUBSCRIBED,A=>{let{track:e}=A;e.room&&(e.mediaType===1&&Jg(e.room.userId,{eventId:32779,remoteUserId:e.userId}),e.mediaType===4&&Jg(e.room.userId,{eventId:32778,remoteUserId:e.userId}),e.mediaType===8&&Jg(e.room.userId,{eventId:32804,remoteUserId:e.userId}))}),F.on(nA.SWITCH_DEVICE_SUCCESS,A=>{let{track:e}=A;e.room&&Jg(e.room.userId,{eventId:e.kind===YA.VIDEO?32780:32781})}),F.on(nA.LOCAL_TRACK_REPLACED,A=>{let{track:e}=A;e.room&&Jg(e.room.userId,{eventId:e.kind===YA.VIDEO?32782:32783})}),F.on(nA.SIGNAL_CONNECTION_STATE_CHANGED,A=>{let e,{room:o,prevState:a,state:l}=A;switch(l){case"CONNECTED":e=a==="RECONNECTING"?32795:32791;break;case"DISCONNECTED":e=a==="RECONNECTING"?32796:32790;break;case"RECONNECTING":e=32794}e&&Jg(o.userId,{eventId:e})}),F.on(nA.PEER_CONNECTION_STATE_CHANGED,A=>{let e,{room:o,prevState:a,state:l,remoteUserId:d}=A,h=!!d;switch(l){case"CONNECTED":e=a==="RECONNECTING"?h?32801:32798:h?32793:32792;break;case"DISCONNECTED":a==="RECONNECTING"&&(e=h?32802:32799);break;case"RECONNECTING":e=h?32800:32797}e&&Jg(o.userId,{eventId:e,remoteUserId:d})}),F.on(nA.VIDEO_CODEC_IMPLEMENTATION_CHANGED,A=>{let{implementation:e,userId:o,remoteUserId:a,codec:l,isHWCodec:d,prevImplementation:h,streamType:y}=A,S=d?1:0;h||(S=d?3:2);let k={H264:0,H265:1,VP8:2}[l.toUpperCase()],V={eventId:4004,param1:S,param2:k,streamType:y||2};a&&(V.remoteUserId=a,V.eventId=4005),Jg(o,V),si.addEnum({key:a?514701:513701,value:S}),si.addEnum({key:a?514700:513700,value:k})}),F.on(nA.LOCAL_TRACK_RECAPTURE,A=>{let{track:e,error:o}=A;if(e.userId){let a={eventId:2003,param1:0};e.kind===YA.AUDIO?(a.streamType=1,o&&(a.param1=2)):(a.streamType=e.streamType==="auxiliary"?7:2,o&&(a.param1=8)),Jg(e.userId,a)}});var LiA=gc(jl(),1),UiA=class extends LiA.EventEmitter{constructor(A,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"userId";super(),this.mySelfId=A,this._log=e,this.key=o,Y(this,"userMap",new Map),Y(this,"remotePublishedUserMap",new Map),Y(this,"asrRobotUserMap",new Map)}get hasRobotUser(){return!![...this.remotePublishedUserMap.values()].find(A=>A.isRobot)}getPublishedUser(A){return this.remotePublishedUserMap.get(A)}addUser(A){let e=A[this.key],{userId:o,tinyId:a,role:l,fromType:d}=A;if(d===B0)return void this.addAsrRobotUser(A);if(this.userMap.has(e))return;let h={userId:o,tinyId:a,role:l===20?"anchor":"audience"};this.userMap.set(e,h),this.emit("1",h)}addAsrRobotUser(A){let e=A[this.key],{userId:o,tinyId:a,role:l}=A;if(this.asrRobotUserMap.has(e))return;let d={userId:o,tinyId:a,role:l===20?"anchor":"audience"};this.asrRobotUserMap.set(e,d),this.emit("8",d)}deleteUser(A,e){let o=this.userMap.get(A);if(!o)return;if(this.asrRobotUserMap.has(A))return void this.deleteAsrRobotUser(A);let a="peer leave [".concat(A,"]");Ke(e)||(a+=":".concat(i2[e])),this._log.info(a);let l=this.remotePublishedUserMap.get(A);if(l){let d=l.muteState;l.flag=0,this.emit("5",l.userId),this.deleteRemotePublishedUser(A),this.emit("6",{prevMuteState:d,muteState:l.muteState,flag:0})}this.userMap.delete(A),this.emit("2",{userId:o.userId,reason:e})}deleteAsrRobotUser(A){if(!this.asrRobotUserMap.has(A))return;let e=this.asrRobotUserMap.get(A);e&&(this.asrRobotUserMap.delete(A),this.emit("9",e))}setUserList(A){this.userMap.forEach(e=>{A.findIndex(o=>o[this.key]===e[this.key])<0&&this.deleteUser(e[this.key],0)}),A.forEach(e=>{!this.userMap.has(e[this.key])&&e[this.key]!==this.mySelfId&&this.addUser(e)})}addRemotePublishedUser(A){this.remotePublishedUserMap.has(A[this.key])||this.remotePublishedUserMap.set(A[this.key],A)}deleteRemotePublishedUser(A){this.remotePublishedUserMap.has(A)&&this.remotePublishedUserMap.delete(A)}setRemotePublishedUserList(A){this.remotePublishedUserMap.forEach(e=>{let o=e[this.key];if(A.findIndex(a=>a[this.key]===e[this.key])<0){this._log.info("remote [".concat(o,"] unpublish"));let a=e.muteState;e.flag=0,this.emit("5",e.userId),this.deleteRemotePublishedUser(o),this.emit("6",{prevMuteState:a,muteState:e.muteState,flag:0})}}),A.forEach(e=>{var o;let a=e[this.key];if(a===this.mySelfId)return void this.emit("7",e);let{flag:l,userId:d,tinyId:h,fromType:y}=e,S=Np(l,d),k=(o=this.remotePublishedUserMap.get(a))==null?void 0:o.muteState;if(k){let V=this.remotePublishedUserMap.get(a);V&&V.flag!==l&&(V.flag=l,this._log.info("remote publish updated: ".concat(JSON.stringify(V.muteState))),this.emit("6",{prevMuteState:k,muteState:S,flag:l}))}else this._log.info("remote publish. state: ".concat(JSON.stringify(S))),this.addUser({userId:d,tinyId:h,role:20,fromType:y}),this.emit("3",e),this.emit("6",{prevMuteState:Np(0,d),muteState:S,flag:l})})}clear(){this.userMap.clear(),this.remotePublishedUserMap.clear()}},FiA=gc(jl(),1),OiA=class extends FiA.default{constructor(){super(...arguments),Y(this,"_connectionTimeoutCount",0),Y(this,"_isFirewallRestrictionEventEmitted",!1)}increaseTimeoutCount(){this._connectionTimeoutCount+=1,this.checkAndEmitFirewallRestriction()}resetTimeoutCount(){this._connectionTimeoutCount=0}checkAndEmitFirewallRestriction(){this._connectionTimeoutCount>=3&&!this._isFirewallRestrictionEventEmitted&&(this._isFirewallRestrictionEventEmitted=!0,this.emit("firewall-restriction"))}destroy(){this._connectionTimeoutCount=0,this._isFirewallRestrictionEventEmitted=!1,this.removeAllListeners()}};function lz(A){let{timesInSecond:e,maxSizeInSecond:o,getSize:a}=A;return jr((l,d)=>{let h=new WeakMap;return F.on(nA.ROOM_DESTROY,y=>{let{room:S}=y;return h.delete(S)}),function(){let y=h.get(this);for(var S=arguments.length,k=new Array(S),V=0;V1e3&&(y.timestamp=Date.now(),y.callCountInSecond=0,y.totalSizeInSecond=0),a&&(y.totalSizeInSecond+=a(...k)),y.timestamp!==0&&Date.now()-y.timestamp<1e3&&(y.callCountInSecond>=e||y.totalSizeInSecond>o))throw new gi({code:Ct.INVALID_OPERATION,message:Xo({key:vo.CALL_FREQUENCY_LIMIT,data:{isTimes:y.callCountInSecond>=e,isSize:y.totalSizeInSecond>o,name:d,timesInSecond:e,maxSizeInSecond:o}})});y.callCountInSecond++,l.call(this,...k)}})}var vt,Iz=!0,hL={SCENE_LIVE:"live",SCENE_RTC:"rtc",ROLE_ANCHOR:"anchor",ROLE_AUDIENCE:"audience",STREAM_TYPE_MAIN:"main",STREAM_TYPE_SUB:"sub",AUDIO_PROFILE_STANDARD:"standard",AUDIO_PROFILE_STANDARD_STEREO:"standard-stereo",AUDIO_PROFILE_HIGH:"high",AUDIO_PROFILE_HIGH_STEREO:"high-stereo",QOS_PREFERENCE_SMOOTH:"smooth",QOS_PREFERENCE_CLEAR:"clear",SPEAKER:"Speakerphone",HEADSET:"Headset earpiece"},wo={INVALID_PARAMETER:5e3,INVALID_OPERATION:5100,ENV_NOT_SUPPORTED:5200,DEVICE_ERROR:5300,SERVER_ERROR:5400,OPERATION_FAILED:5500,OPERATION_ABORT:5998,UNKNOWN_ERROR:5999},h1=((vt=h1||{})[vt.INVALID_PARAMETER=5e3]="INVALID_PARAMETER",vt[vt.INVALID_PARAMETER_REQUIRED=5001]="INVALID_PARAMETER_REQUIRED",vt[vt.INVALID_PARAMETER_TYPE=5002]="INVALID_PARAMETER_TYPE",vt[vt.INVALID_PARAMETER_EMPTY=5003]="INVALID_PARAMETER_EMPTY",vt[vt.INVALID_PARAMETER_INSTANCE=5004]="INVALID_PARAMETER_INSTANCE",vt[vt.INVALID_PARAMETER_RANGE=5005]="INVALID_PARAMETER_RANGE",vt[vt.INVALID_PARAMETER_LESS_THAN_ZERO=5006]="INVALID_PARAMETER_LESS_THAN_ZERO",vt[vt.INVALID_PARAMETER_MIN=5007]="INVALID_PARAMETER_MIN",vt[vt.INVALID_PARAMETER_MAX=5008]="INVALID_PARAMETER_MAX",vt[vt.INVALID_ELEMENT_ID=5009]="INVALID_ELEMENT_ID",vt[vt.INVALID_ELEMENT_ID_TYPE=5010]="INVALID_ELEMENT_ID_TYPE",vt[vt.INVALID_STREAM_ID=5011]="INVALID_STREAM_ID",vt[vt.INVALID_ROOM_ID_STRING=5012]="INVALID_ROOM_ID_STRING",vt[vt.INVALID_ROOM_ID_INTEGER=5013]="INVALID_ROOM_ID_INTEGER",vt[vt.INVALID_STREAM_TYPE=5014]="INVALID_STREAM_TYPE",vt[vt.INVALID_ROOM_ID_REQUIRED=5015]="INVALID_ROOM_ID_REQUIRED",vt[vt.INVALID_ROOM_ID_INTEGER_STRING=5016]="INVALID_ROOM_ID_INTEGER_STRING",vt[vt.INVALID_BUFFER_EMPTY=5017]="INVALID_BUFFER_EMPTY",vt[vt.INVALID_BUFFER_OVERSIZE=5018]="INVALID_BUFFER_OVERSIZE",vt[vt.INVALID_ROOM_ID_TYPE_MISMATCH=5019]="INVALID_ROOM_ID_TYPE_MISMATCH",vt[vt.INVALID_ROOM_ID_DUPLICATE=5020]="INVALID_ROOM_ID_DUPLICATE",vt[vt.INVALID_OPERATION=5100]="INVALID_OPERATION",vt[vt.INVALID_OPERATION_NOT_JOINED=5101]="INVALID_OPERATION_NOT_JOINED",vt[vt.INVALID_OPERATION_REMOTE_USER_NOT_EXIST=5102]="INVALID_OPERATION_REMOTE_USER_NOT_EXIST",vt[vt.INVALID_OPERATION_STREAM_TYPE_NOT_EXIST=5103]="INVALID_OPERATION_STREAM_TYPE_NOT_EXIST",vt[vt.INVALID_OPERATION_REPEAT_CALL=5104]="INVALID_OPERATION_REPEAT_CALL",vt[vt.INVALID_OPERATION_NEED_VIDEO=5105]="INVALID_OPERATION_NEED_VIDEO",vt[vt.INVALID_OPERATION_NEED_AUDIO=5106]="INVALID_OPERATION_NEED_AUDIO",vt[vt.INVALID_ROLE_AUDIENCE=5107]="INVALID_ROLE_AUDIENCE",vt[vt.INVALID_NOT_ENABLE_SEI=5108]="INVALID_NOT_ENABLE_SEI",vt[vt.INVALID_NEED_CALL_PUBLISHED=5109]="INVALID_NEED_CALL_PUBLISHED",vt[vt.ENV_NOT_SUPPORTED=5200]="ENV_NOT_SUPPORTED",vt[vt.NOT_SUPPORTED_HTTP=5201]="NOT_SUPPORTED_HTTP",vt[vt.NOT_SUPPORTED_WEBRTC=5202]="NOT_SUPPORTED_WEBRTC",vt[vt.NOT_SUPPORTED_H264_ENCODE=5203]="NOT_SUPPORTED_H264_ENCODE",vt[vt.NOT_SUPPORTED_H264_DECODE=5204]="NOT_SUPPORTED_H264_DECODE",vt[vt.NOT_SUPPORTED_SCREEN_SHARE=5205]="NOT_SUPPORTED_SCREEN_SHARE",vt[vt.NOT_SUPPORTED_SMALL_VIDEO=5206]="NOT_SUPPORTED_SMALL_VIDEO",vt[vt.NOT_SUPPORTED_SEI=5207]="NOT_SUPPORTED_SEI",vt[vt.NOT_SUPPORTED_WEBGL=5208]="NOT_SUPPORTED_WEBGL",vt[vt.NOT_SUPPORTED_CHROME_VERSION=5209]="NOT_SUPPORTED_CHROME_VERSION",vt[vt.NOT_SUPPORTED_PLUGIN=5210]="NOT_SUPPORTED_PLUGIN",vt[vt.DEVICE_ERROR=5300]="DEVICE_ERROR",vt[vt.DEVICE_NOT_FOUND_ERROR=5301]="DEVICE_NOT_FOUND_ERROR",vt[vt.DEVICE_NOT_ALLOWED_ERROR=5302]="DEVICE_NOT_ALLOWED_ERROR",vt[vt.DEVICE_NOT_READABLE_ERROR=5303]="DEVICE_NOT_READABLE_ERROR",vt[vt.DEVICE_OVERCONSTRAINED_ERROR=5304]="DEVICE_OVERCONSTRAINED_ERROR",vt[vt.DEVICE_INVALID_STATE_ERROR=5305]="DEVICE_INVALID_STATE_ERROR",vt[vt.DEVICE_SECURITY_ERROR=5306]="DEVICE_SECURITY_ERROR",vt[vt.DEVICE_ABORT_ERROR=5307]="DEVICE_ABORT_ERROR",vt[vt.CAMERA_RECOVER_FAILED=5308]="CAMERA_RECOVER_FAILED",vt[vt.MICROPHONE_RECOVER_FAILED=5309]="MICROPHONE_RECOVER_FAILED",vt[vt.NOT_SUPPORTED_MISMATCH_SAMPLE_RATE_IN_FIREFOX=5310]="NOT_SUPPORTED_MISMATCH_SAMPLE_RATE_IN_FIREFOX",vt[vt.SERVER_ERROR=5400]="SERVER_ERROR",vt[vt.NEED_TO_BUY=5401]="NEED_TO_BUY",vt[vt.ACCOUNT_NO_MONEY=-100013]="ACCOUNT_NO_MONEY",vt[vt.OPERATION_FAILED=5500]="OPERATION_FAILED",vt[vt.FIREWALL_RESTRICTION=5501]="FIREWALL_RESTRICTION",vt[vt.REJOIN_FAILED=5502]="REJOIN_FAILED",vt[vt.EVENT_HANDLER_ERROR=5503]="EVENT_HANDLER_ERROR",vt[vt.VIDEO_CONTEXT_ERROR=5504]="VIDEO_CONTEXT_ERROR",vt[vt.VIDEO_ENCODE_FAILED=5505]="VIDEO_ENCODE_FAILED",vt[vt.AUDIO_ENCODE_FAILED=5506]="AUDIO_ENCODE_FAILED",vt[vt.VIDEO_DECODE_FAILED=5507]="VIDEO_DECODE_FAILED",vt[vt.AUDIO_DECODE_FAILED=5508]="AUDIO_DECODE_FAILED",vt[vt.OPERATION_ABORT=5998]="OPERATION_ABORT",vt[vt.UNKNOWN_ERROR=5999]="UNKNOWN_ERROR",vt),uz=po(fi({},cc),{INVALID_PARAMETER(A){let{fnName:e}=A;return"the parameters of the '".concat(e,"' you called does not meet the requirements, please check the API documentation.")},INVALID_PARAMETER_REQUIRED(A){let{key:e,rule:o,fnName:a,value:l}=A;return"'".concat(e||o.name,"' is a required param when calling ").concat(a,"(), received: ").concat(l,".")},INVALID_PARAMETER_TYPE(A){let{key:e,rule:o,fnName:a,value:l}=A,d="".concat(e||o.name),h="";return h=Array.isArray(o.type)?o.type.join("|"):o.type,"'".concat(d,"' must be type of ").concat(h," when calling ").concat(a,"(), received type: ").concat(Cg(l),".")},INVALID_PARAMETER_EMPTY(A){let{key:e,rule:o,fnName:a,value:l}=A;return"'".concat(e||o.name,"' cannot be '").concat(l,"' when calling ").concat(a,"().")},INVALID_PARAMETER_INSTANCE(A){let{key:e,rule:o,fnName:a,value:l}=A,d="".concat(e||o.name),h="".concat(o.instanceOf.name||o.instanceOf);return"'".concat(d,"' must be instanceof ").concat(h," when calling ").concat(a,"(), received type: ").concat(Cg(l),".")},INVALID_PARAMETER_RANGE(A){let{key:e,rule:o,fnName:a,value:l}=A;return"'".concat(e||o.name,"' must be one of ").concat(o.values.join("|")," when calling ").concat(a,"(), received: ").concat(l,".")},INVALID_PARAMETER_LESS_THAN_ZERO(A){let{key:e,rule:o,fnName:a}=A;return"'".concat(e||o.name,"' cannot be less than 0 when calling ").concat(a,"().")},INVALID_PARAMETER_MIN(A){let{key:e,rule:o,value:a}=A;return"the min value of ".concat(e||o.name," is ").concat(o.min,", received: ").concat(a,".")},INVALID_PARAMETER_MAX(A){let{key:e,rule:o,value:a}=A;return"the max value of ".concat(e||o.name," is ").concat(o.max,", received: ").concat(a,".")},INVALID_ELEMENT_ID(A){let{key:e,fnName:o}=A;return"'".concat(e,"' is not found in the document object when calling ").concat(o,"().")},INVALID_ELEMENT_ID_TYPE(A){let{key:e,fnName:o,type:a}=A;return"the element corresponding to '".concat(e,"' must be instanceof HTMLElement when calling ").concat(o,"(), received: ").concat(a,".")},INVALID_STREAM_ID(A){let{key:e}=A;return"'".concat(e,"' can only consist of uppercase and lowercase english letters (a-zA-Z), numbers (0-9), hyphens and underscores.")},INVALID_ROOM_ID_STRING(A){let{key:e}=A;return"'".concat(e,"' must be a valid string.")},INVALID_ROOM_ID_INTEGER(A){let{key:e}=A;return"'".concat(e,"' must be an integer between [1, 4294967294].")},INVALID_ROOM_ID_INTEGER_STRING(A){let{key:e}=A;return"'".concat(e,"' must be an integer but go a string, use 'parseInt' to convert it or use 'strRoomId' instead.")},INVALID_ROOM_ID_REQUIRED:()=>"at least one of 'roomId'(between [1, 4294967294]) and 'strRoomId'(not empty) is required.",INVALID_ROOM_ID_TYPE_MISMATCH(A){let{key:e}=A;return"The type of target roomId must match the current roomId. Current room is using '".concat(e,"', but received '").concat(e==="strRoomId"?"roomId":"strRoomId","'.")},INVALID_ROOM_ID_DUPLICATE(A){let{key:e}=A;return"the target '".concat(e,"' must not be the same as the current '").concat(e,"'.")},INVALID_STREAM_TYPE:A=>{let{fnName:e}=A;return"'streamType' is required when 'userId' is not '*', calling ".concat(e,"()")},INVALID_IMAGE_URL:"The 'src' param must be filled in when the background type is image.",INVALID_OPERATION(A){let{fnName:e}=A;return"the API '".concat(e,"' you called does not meet the requirements, please check the API documentation.")},INVALID_OPERATION_NOT_JOINED(A){let{fnName:e}=A;return"cannot ".concat(e," because you are not enter room yet.")},INVALID_OPERATION_REMOTE_USER_NOT_EXIST(A){let{fnName:e,value:o}=A;return"cannot ".concat(e," because remote user(userId: ").concat(o.userId,") does not publishing stream.")},INVALID_OPERATION_STREAM_TYPE_NOT_EXIST(A){let{fnName:e,value:o}=A;return"cannot ".concat(e," because remote user(userId: ").concat(o.userId,") does not publishing ").concat(o.streamType," video.")},INVALID_OPERATION_REPEAT_CALL(A){let{fnName:e}=A;return"you are already ".concat(e,"(), cannot repeated call '").concat(e,"'.")},INVALID_OPERATION_NEED_VIDEO(A){let{fnName:e}=A;return"cannot call '".concat(e,"' because the camera is not turned on.")},INVALID_OPERATION_NEED_AUDIO(A){let{fnName:e}=A;return"cannot call '".concat(e,"' because the microphone or screen share is not turned on.")},INVALID_BUFFER_EMPTY:A=>{let{key:e}=A;return"the buffer size of paramerter '".concat(e,"' cannot be empty")},INVALID_BUFFER_OVERSIZE:()=>"buffer size is over 1000 Bytes",INVALID_ROLE_AUDIENCE:()=>"role: 'audience' cannot call this api.",INVALID_NOT_ENABLE_SEI:()=>"you need to enable SEI in TRTC.create({ enableSEI: true })",INVALID_NEED_CALL_PUBLISHED:A=>{let{fnName:e}=A;return"you need to call ".concat(e,"() after publish stream.")},ENV_NOT_SUPPORTED(A){let{fnName:e}=A;return"the current browser does not support the capability of the function '".concat(e,"' you are calling, please check the API documentation.")},NOT_SUPPORTED_WEBRTC:"the current browser does not support WebRTC capability, please check the SDK documentation.",NOT_SUPPORTED_H264_ENCODE:"this browser does not support H264 encode.",NOT_SUPPORTED_H264_DECODE:"this browser does not support H264 decode.",NOT_SUPPORTED_SCREEN_SHARE:"this browser does not support screen share, please check the browser version.",NOT_SUPPORTED_SMALL_VIDEO:"this browser does not support small video, please check the browser version.",NOT_SUPPORTED_SEI:"this browser does not support SEI, please check the browser version.",NOT_SUPPORTED_WEBGL:"this browser does not support WebGL, please check the browser version.",NOT_SUPPORTED_CHROME_VERSION(A){let{fnName:e}=A;return"cannot call ".concat(e," because the browser version is too low, please upgrade to the latest version")},DEVICE_ERROR(A){let{fnName:e,error:o}=A;return"'".concat(e,"' got device exception").concat(o?", error: ".concat(o.toString(),"."):".")},DEVICE_NOT_FOUND_ERROR(A){let{fnName:e,deviceType:o=ZM(e),error:a}=A;return"NotFoundError, no ".concat(o," detected, please check your device and the configuration on '").concat(e,"'").concat(a?", error: ".concat(a.toString(),"."):".")},DEVICE_NOT_ALLOWED_ERROR(A){let{fnName:e,deviceType:o=ZM(e),error:a}=A;return"NotAllowedError, you have disabled ".concat(o," access, please allow the current application to use the ").concat(o).concat(a?", error: ".concat(a.toString(),"."):".")},DEVICE_NOT_READABLE_ERROR(A){let{fnName:e,deviceType:o=ZM(e),error:a}=A;return"NotReadableError, the ".concat(o," maybe in use by another APP, please check if the device is pre-occupied by another APP.")},DEVICE_OVERCONSTRAINED_ERROR(A){let{fnName:e,deviceType:o=ZM(e),error:a}=A;return"OverconstrainedError, the device ID is incorrect, please check whether the device ID passed in is correct".concat(a?", error: ".concat(a.toString(),"."):".")},DEVICE_INVALID_STATE_ERROR(A){let{fnName:e,deviceType:o=ZM(e),error:a}=A;return"InvalidStateError, after the user clicks and interacts with the page, turn on the ".concat(o).concat(a?", error: ".concat(a.toString(),"."):".")},DEVICE_SECURITY_ERROR(A){let{fnName:e,deviceType:o=ZM(e),error:a}=A;return"SecurityError, check whether the system security policy restricts the use of the ".concat(o,", and it is recommended to turn on the ").concat(o," after the user interacts with the page").concat(a?", error: ".concat(a.toString(),"."):".")},DEVICE_ABORT_ERROR(A){let{fnName:e,deviceType:o=ZM(e),error:a}=A;return"AbortError, an unknown exception in the system makes the device unusable, recommended to change the device or browser and re-check whether the device is normal".concat(a?" error: ".concat(a.toString(),"."):".")},CAMERA_RECOVER_FAILED(A){let{error:e}=A;return"camera recover capture failed ".concat(e?.name||"",": ").concat(e?.originMessage||e?.message)},MICROPHONE_RECOVER_FAILED(A){let{error:e}=A;return"microphone recover capture failed ".concat(e?.name||"",": ").concat(e?.originMessage||e?.message)},OPERATION_FAILED(A){let{fnName:e,error:o}=A;return"'".concat(e,"' failed, reason: ").concat(o?.toString())},FIREWALL_RESTRICTION:()=>"media connection failure due to firewall restrictions, please try to change your network.",EVENT_HANDLER_ERROR(A){let{eventName:e}=A;return"an error was caught on trtc.on('".concat(e,"', handler), please check your code on 'handler'.")},VIDEO_CONTEXT_ERROR(A){let{reason:e,error:o}=A;return"video context error ".concat(e," ").concat(o?.name||""," ").concat(o?.message||"")},SERVER_ERROR(A){let{fnName:e,error:o}=A;return"'".concat(e,"' got server error: ").concat(o?.toString(),", please check the SDK documentation.")},NEED_TO_BUY(A){let{value:e,url:o}=A;return"You need to buy packages for ".concat(e,". Refer to: ").concat(o)},ACCOUNT_NO_MONEY:A=>{let{fnParams:e}=A;return"your TRTC account run out of credit, please recharge.".concat(e.sdkAppId?" SDKAppId: ".concat(e.sdkAppId):"")},OPERATION_ABORT(A){let{fnName:e}=A;return"'".concat(e,"' abort")},UNKNOWN_ERROR(A){let{fnName:e,error:o}=A;return"'".concat(e,"' throw unknown exception").concat(o?", error: ".concat(o.toString(),"."):".")}});function ZM(A){if(!A)return"camera";let e=A.toLowerCase();return e.includes("screen")?"screen share":e.includes("audio")?"microphone":"camera"}var PiA=class CY extends Error{constructor(e){let{code:o,extraCode:a,message:l="",messageParams:d,fnName:h="",originError:y,data:S}=e;var k;let V;V=l||function(J){let cA,{code:CA,params:MA,enableDocLink:ie=!1}=J,pe="",qe=h1[CA];try{cA=uz[qe]}catch{cA=uz.UNKNOWN_ERROR}return Ra(cA)?pe=cA(MA):Vn(cA)&&(pe=cA),MA.fnName&&!pe.includes(MA.fnName)&&(pe[pe.length-1]!=="."&&(pe+="."),pe+=" thrown from ".concat(MA.fnName,"()")),ie&&(pe+=" doc:"),pe}({code:o===wo.SERVER_ERROR?o:a||o,params:fi({fnName:h,error:y},d)}),super(V),Y(this,"name","RtcError"),Y(this,"code"),Y(this,"extraCode"),Y(this,"functionName"),Y(this,"message"),Y(this,"data"),Y(this,"handler"),Y(this,"originError"),this.name=h1[o],this.code=o,this.extraCode=a,this.functionName=h,this.originError=y,this.message=V,this.data=S,this.extraCode===5302&&(k=this.originError)!=null&&k.message.includes("system")&&(this.handler=()=>{let J=document.createElement("a");sy?J.href="ms-settings:privacy-".concat({startLocalVideo:"webcam",startLocalAudio:"microphone"}[this.functionName]):nQ&&(J.href="x-apple.systempreferences:com.apple.preference.security?Privacy_".concat({startLocalVideo:"Camera",startLocalAudio:"Microphone",startScreenShare:"ScreenCapture"}[this.functionName])),J.href.length>0&&J.click()})}static convertFrom(e,o,a){let l=e;if(e instanceof gi){let{stack:d}=e,h={code:wo.UNKNOWN_ERROR,fnName:o,originError:e};switch(e.getCode()){case Ct.INVALID_PARAMETER:h.code=wo.INVALID_PARAMETER,h.message=e.message;break;case Ct.INVALID_OPERATION:h.code=wo.INVALID_OPERATION,h.message=e.message;break;case Ct.NOT_SUPPORTED:case Ct.NOT_SUPPORTED_H264:h.code=wo.ENV_NOT_SUPPORTED,e.getCode()===Ct.NOT_SUPPORTED_H264&&(h.extraCode=e.message.includes(cc.NOT_SUPPORTED_H264ENCODE)?5203:5204);break;case Ct.JOIN_ROOM_FAILED:h.messageParams={fnParams:a};case Ct.SERVER_TIMEOUT:case Ct.SWITCH_ROLE_FAILED:case Ct.SWITCH_ROOM_FAILED:h.code=wo.SERVER_ERROR,h.extraCode=e.getExtraCode();break;case Ct.API_CALL_ABORTED:h.code=wo.OPERATION_ABORT;break;case Ct.DEVICE_NOT_FOUND:case Ct.DEVICE_AUTO_RECOVER_FAILED:case Ct.INITIALIZE_FAILED:h.code=5300,e.name&&(h.extraCode=function(y){let S;switch(y){case"NotFoundError":S=5301;break;case"NotAllowedError":S=5302;break;case"NotReadableError":S=5303;break;case"OverconstrainedError":S=5304;break;case"InvalidStateError":S=5305;break;case"SecurityError":S=5306;break;case"AbortError":S=5307;break;default:S=5300}return S}(e.name));break;case Ct.VIDEO_ENCODE_FAILED:h.extraCode=5505;case Ct.AUDIO_ENCODE_FAILED:h.extraCode=5506,h.code=wo.OPERATION_FAILED;break;case Ct.UNKNOWN:break;default:h.code=wo.OPERATION_FAILED}l=new CY(h),d&&(l.stack+=d.substr(d.indexOf(` +`)))}else{if(e instanceof CY)return e;l=new CY({code:wo.UNKNOWN_ERROR,fnName:o,originError:e})}return l}},_o=PiA;function eC(A){return A==="sub"?"auxiliary":A==="auxiliary"?"sub":"main"}function B1(A){return A===hL.QOS_PREFERENCE_CLEAR?"detail":A===hL.QOS_PREFERENCE_SMOOTH?"motion":""}function Q1(A,e){let o=e?qx:jS;return y2(A)?fi(fi({},o),A):FC[A]?FC[A]:o}var Ez={type:"object",properties:{cameraId:{type:"string"},useFrontCamera:{type:"boolean"},fillMode:{type:"string",values:["contain","cover","fill"]},mirror:{type:["string","boolean"],values:[!0,!1,"view","publish","both"]},small:{type:["string","object","boolean"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},videoTrack:{instanceOf:MediaStreamTrack}}},dz={type:"object",properties:{systemAudio:{type:"boolean"},fillMode:{type:"string",values:["contain","cover","fill"]},profile:{type:["string","object"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},videoTrack:{instanceOf:MediaStreamTrack},audioTrack:{instanceOf:MediaStreamTrack}}},h_={type:["string",HTMLElement,null,"array"],arrayItem:{instanceOf:HTMLElement},validate(A,e,o){if(Vn(A)&&!document.getElementById(A))throw new _o({code:wo.INVALID_PARAMETER,extraCode:5009,fnName:o,messageParams:{key:e}})}},Cz={name:"userId",required:!0,type:"string"},hz={type:"object",properties:{microphoneId:{type:"string"},audioTrack:{instanceOf:MediaStreamTrack},captureVolume:{type:"number",min:0},earMonitorVolume:{type:"number",min:0,max:100},profile:{type:["string","object"],properties:{bitrate:{type:"number"},channelCount:{type:"number"}}},echoCancellation:{values:[!0,!1,"remote-only","all"]},autoGainControl:{type:"boolean"},noiseSuppression:{type:"boolean"}}};function B_(A,e){if(!A)throw new _o({code:wo.INVALID_OPERATION,extraCode:5101,fnName:e})}function Bz(A,e,o){if(!A)throw new _o({code:wo.INVALID_OPERATION,extraCode:5102,fnName:e,messageParams:{value:o}})}function Qz(A,e,o){if(!(/^[1-9]\d*$/.test(String(A))&&A<4294967295))throw new _o({code:wo.INVALID_PARAMETER,extraCode:5013,fnName:e,messageParams:{key:o}})}function pz(A,e,o){if(!/^[A-Za-z\d\s!#$%&()+\-:;<=.>?@[\]^_{}|~,]{1,64}$/.test(A))throw new _o({code:wo.INVALID_PARAMETER,extraCode:5012,fnName:e,messageParams:{key:o}})}function mz(A){var e;if((e=A?.option)==null||!e.small)return;if(!kM())return pA.warn("small stream is not supported"),void delete A.option.small;let o=Q1(A.option.profile),a=Q1(A.option.small,!0);return((l,d)=>l.width*l.height>=d.width*d.height&&l.frameRate>=d.frameRate&&l.bitrate>=d.bitrate)(o,a)?void 0:(pA.warn("small stream profile must be less than big stream profile. Big: ".concat(JSON.stringify(o),", Small: ").concat(JSON.stringify(a))),void delete A.option.small)}var xiA={create:[{name:"RoomConfig",instanceOf:Function},{name:"CreateConfig",type:"object",properties:{plugins:{type:"array",arrayItem:{instanceOf:Function}}}}],enterRoom:{name:"EnterRoomConfig",type:"object",required:!0,validate(A,e,o){if(this._room.isJoined)throw new _o({code:wo.INVALID_OPERATION,extraCode:5104,fnName:o});if(A.roomId){if(Vn(A.roomId))throw new _o({code:wo.INVALID_PARAMETER,extraCode:5016,fnName:o,messageParams:{key:e}});Qz(A.roomId,o,e)}else{if(!A.strRoomId)throw new _o({code:wo.INVALID_PARAMETER,extraCode:5015,fnName:o});pz(A.strRoomId,o,e)}},properties:{sdkAppId:{required:!0,type:"number",allowEmpty:!1},userId:{required:!0,type:"string",allowEmpty:!1},userSig:{required:!0,type:"string",allowEmpty:!1},scene:{type:"string",values:["live","rtc"]},role:{type:"string",values:["audience","anchor"]},roomId:{type:["string","number"]},strRoomId:{type:"string"},proxy:{type:["object","string"],properties:{websocketProxy:{type:"string"},turnServer:{type:["object","array"],properties:{url:{required:!0,type:"string"},username:{type:"string"},credential:{type:"string"},credentialType:{type:"string",values:["password"]}}},loggerProxy:{type:"string"},webtransportProxy:{type:"string"}}},enableAutoPlayDialog:{type:"boolean"},userDefineRecordId:{type:"string"},latencyLevel:{type:"number"},playoutDelay:{type:"object",properties:{min:{type:"number",min:0,max:1e3},max:{type:"number",min:0,max:1e4}}}}},startLocalVideo:{name:"LocalVideoConfig",type:"object",properties:{view:h_,mute:{type:["boolean","string"]},publish:{type:"boolean"},capture:{required:!1,type:"boolean"},option:Ez},validate(A){var e,o;if(((e=A?.option)==null||!e.videoTrack)&&Cu())throw new _o({code:wo.ENV_NOT_SUPPORTED,extraCode:5201});(o=A?.option)!=null&&o.small&&mz(A)}},updateLocalVideo:{name:"updateLocalVideoConfig",type:"object",required:!0,properties:{view:po(fi({},h_),{required:!1}),publish:{type:"boolean"},capture:{required:!1,type:"boolean"},mute:{type:["boolean","string"]},option:Ez},validate(A){var e;(e=A?.option)!=null&&e.small&&mz(A)}},startLocalAudio:{name:"LocalAudioConfig",type:"object",properties:{publish:{type:"boolean"},mute:{type:["boolean","string"],values:[!0,!1,"microphone"]},muteKeepVolumeDetection:{type:"boolean"},option:hz},validate(A){var e;if(((e=A?.option)==null||!e.audioTrack)&&Cu())throw new _o({code:wo.ENV_NOT_SUPPORTED,extraCode:5201})}},updateLocalAudio:{name:"updateLocalAudioConfig",type:"object",required:!0,properties:{publish:{type:"boolean"},mute:{type:["boolean","string"],values:[!0,!1,"microphone"]},muteKeepVolumeDetection:{type:"boolean"},option:hz}},startScreenShare:{name:"ScreenShareConfig",type:"object",properties:{view:h_,publish:{type:"boolean"},option:dz},validate(A,e,o,a,l){var d;if((d=A?.option)==null||!d.videoTrack){if(Cu())throw new _o({code:wo.ENV_NOT_SUPPORTED,extraCode:5201});if(!Wp())throw new _o({code:wo.ENV_NOT_SUPPORTED,fnName:o,extraCode:5205})}}},updateScreenShare:{name:"updateScreenShareConfig",type:"object",required:!0,properties:{view:h_,publish:{type:"boolean"},option:dz}},muteRemoteAudio:[Cz,{name:"mute",required:!0,type:"boolean"}],setRemoteAudioVolume:[Cz,{name:"volume",required:!0,type:"number",min:0}],startRemoteVideo:{name:"startRemoteVideoConfig",type:"object",required:!0,properties:{view:h_,userId:{type:"string",required:!0},streamType:{values:["main","sub"],required:!0},option:{type:"object",properties:{fillMode:{type:"string",values:["contain","cover","fill"]},mirror:{type:"boolean"}}}},validate(A,e,o){B_(this._room.isJoined,o);let a=this._room.remotePublishedUserMap.get(A.userId);if(Bz(!!a,o,A),a&&(A.streamType==="main"&&!a.muteState.videoAvailable||A.streamType==="sub"&&!a.muteState.hasAuxiliary))throw new _o({code:wo.INVALID_OPERATION,extraCode:5103,fnName:o,messageParams:{value:A}})}},updateRemoteVideo:{name:"updateRemoteVideoConfig",type:"object",required:!0,properties:{view:po(fi({},h_),{required:!1}),userId:{type:"string",required:!0},streamType:{values:["main","sub"],required:!0},option:{type:"object",properties:{fillMode:{type:"string",values:["contain","cover","fill"]},mirror:{type:"boolean"}}}},validate(A,e,o){B_(this._room.isJoined,o);let a=this._room.remotePublishedUserMap.get(A.userId);if(Bz(!!a,o,A),a){if(A.streamType==="main"&&!a.muteState.videoAvailable||A.streamType==="sub"&&!a.muteState.hasAuxiliary)throw new _o({code:wo.INVALID_OPERATION,extraCode:5103,fnName:o,messageParams:{value:A}});if(A.option){let l=A.streamType==="main"?a.remoteVideoTrack:a.remoteAuxiliaryTrack;if((A.option.pictureInPicture||A.option.fullScreen||A.option.fullScreen)&&(!l.isSubscribed||!l.player.isPlaying))throw new _o({code:wo.INVALID_OPERATION,message:"cannot set pictureInPicture or fullScreen when remote video is not playing"})}}}},stopRemoteVideo:{name:"stopRemoteVideoConfig",type:"object",required:!0,properties:{userId:{type:"string",required:!0},streamType:{values:["main","sub"]}},validate(A,e,o){if(A.userId!=="*"&&Ke(A.streamType))throw new _o({code:wo.INVALID_PARAMETER,extraCode:5014,fnName:o})}},switchRole:{name:"role",required:!0,values:["anchor","audience"],validate(A,e,o){B_(this._room.isJoining||this._room.isJoined,o)}},enableAudioVolumeEvaluation:[{name:"interval",type:"number"},{name:"enableInBackground",type:"boolean"}],sendSEIMessage:[{name:"buffer",required:!0,instanceOf:ArrayBuffer,validate(A,e,o,a){if(!Kk)throw new _o({code:wo.ENV_NOT_SUPPORTED,fnName:o,extraCode:5207});if(!this._room.enableSEI)throw new _o({code:wo.INVALID_OPERATION,fnName:o,extraCode:5108});if(A.byteLength>1e3)throw new _o({code:wo.INVALID_PARAMETER,extraCode:5018,fnName:o});if(A.byteLength===0)throw new _o({code:wo.INVALID_PARAMETER,extraCode:5017,messageParams:{key:e},fnName:o});B_(this._room.isJoined,o)}},{name:"options",type:"object",properties:{seiPayloadType:{type:"number",values:[5,243]},toSubStream:{type:"boolean",validate(A,e,o){if(!A&&!this._room.isMainStreamPublished||A&&!this._room.isAuxStreamPublished)throw new _o({code:wo.INVALID_OPERATION,extraCode:5109,messageParams:{key:e},fnName:o})}}}}],sendCustomMessage:{name:"message",required:!0,type:"object",properties:{cmdId:{type:"number",required:!0,min:1,max:10},data:{instanceOf:ArrayBuffer,required:!0,validate(A,e,o,a){if(A.byteLength>1e3)throw new _o({code:wo.INVALID_PARAMETER,extraCode:5018,fnName:o});if(A.byteLength===0)throw new _o({code:wo.INVALID_PARAMETER,extraCode:5017,fnName:o,messageParams:{key:e}})}}},validate(A,e,o){if(B_(this._room.isJoined,o),this._room.scene==="live"&&this._room.role==="audience")throw new _o({code:wo.INVALID_OPERATION,extraCode:5107,fnName:o,messageParams:{key:e}})}},switchRoom:{name:"switchRoomConfig",type:"object",required:!0,validate(A,e,o){if(B_(this._room.isJoined,o),this._room.useStringRoomId&&A.strRoomId===this._room.roomId||!this._room.useStringRoomId&&A.roomId===Number(this._room.roomId))throw new _o({code:wo.INVALID_PARAMETER,extraCode:5020,fnName:o,messageParams:{key:this._room.useStringRoomId?"strRoomId":"roomId"}});if(A.roomId&&this._room.useStringRoomId||!A.roomId&&A.strRoomId&&!this._room.useStringRoomId)throw new _o({code:wo.INVALID_PARAMETER,extraCode:5019,fnName:o,messageParams:{key:this._room.useStringRoomId?"strRoomId":"roomId"}});if(A.roomId)Qz(A.roomId,o,e);else{if(!A.strRoomId)throw new _o({code:wo.INVALID_PARAMETER,extraCode:5015,fnName:o});pz(A.strRoomId,o,e)}},properties:{roomId:{type:"number"},strRoomId:{type:"string"},privateMapKey:{type:"string"},userSig:{type:"string",required:!0},autoSubscribeCount:{type:"number",min:0,max:50}}}},Zl={TRTC:xiA},tC=class extends Error{};function YiA(A,e){let o=$f(A);for(let a=0;a!0),Y(this,"mergeUpdate",YiA);let a=G_.instances.get(e);a?a.set(o,this):G_.instances.set(e,new Map([[o,this]]))}static get(e,o){if(!o)return;let a=G_.instances.get(e);return a&&a.get(o)||new G_(e,o)}static gets(e,o){let a=G_.instances.get(e),l=[];return a&&a.forEach((d,h)=>{o.test(h)&&l.push(d)}),l}action(e,o,a){let l=y=>{var S;return e===0?this.started=!0:e===3&&(this.started=!1),this.ops.shift(),(S=this.currentOp)==null||S.action(),y},d=y=>{var S,k;throw this.ops.shift(),e===0&&((S=this.currentOp)==null?void 0:S.type)===2&&this.ops.shift().reject(new tC("start failed")),(k=this.currentOp)==null||k.action(),y},h={type:e,action:()=>o(...h.args).then(l,d),args:a,resolve:ViA,reject:JiA};try{switch(this.state){case 1:if(e===0)throw new tC("already started");break;case 4:if(e===2)throw new tC("not started");break;default:return this.cacheOp(h)}}catch(y){return Promise.reject(y)}return this.ops.push(h),h.promise=o(...h.args).then(l,d)}cacheOp(e){if(this.ops.length===1)switch(this.state){case 0:case 2:if(e.type===0)throw new tC("already start");break;case 3:switch(e.type){case 2:throw new tC("update not allowed when stopping");case 3:return this.currentOp.promise}break;default:throw new tC("unknown state")}else switch(e.type){case 3:if(this.lastOpType===3)return this.lastOp.promise;{let a=new tC("keep stop");if(this.ops.slice(1).forEach(l=>l.reject(a)),this.ops=this.ops.slice(0,1),this.state===3)return this.currentOp.promise}break;case 2:switch(this.lastOpType){case 2:return this.lastOp.args=this.mergeUpdate(this.lastOp.args,e.args),this.lastOp.promise;case 3:throw new tC("update not allowed after stop")}break;case 0:switch(this.lastOpType){case 2:throw new tC("start not allowed after update");case 0:throw new tC("duplicate start");case 3:if(this.startSame(this.currentOp.args,e.args))throw this.ops.pop().reject(new tC("keep start")),new tC("already start")}}e.promise=new Promise((a,l)=>{e._resolve?e._resolve.then(a):e.resolve=a,e._reject?e._reject.catch(l):e.reject=l});let{action:o}=e;return e.action=()=>o().then(e.resolve,e.reject),this.ops.push(e),e.promise}get lastOp(){return this.ops[this.ops.length-1]}get lastOpType(){return this.lastOp.type}get currentOp(){return this.ops[0]}get state(){return this.currentOp?this.currentOp.type:this.started?1:4}};Y(fz,"instances",new WeakMap);var BL=fz,p1=new WeakMap,m1=(A,e)=>{if(e instanceof tC){let{stack:o}=e;e=new _o({code:wo.OPERATION_ABORT,message:"".concat(A," abort: ").concat(e.message),fnName:A}),o&&(e.stack+=o.substr(o.indexOf(` +`)))}throw e};function XM(A,e){return jr((o,a)=>function(){for(var l=arguments.length,d=new Array(l),h=0;hfunction(){for(var h=arguments.length,y=new Array(h),S=0;S{var MA,ie;let pe=(MA=p1.get(this))==null?void 0:MA.get(J(...y));if(pe){let{timeoutId:we,resolve:Di}=pe;clearTimeout(we),Di()}let qe=setTimeout(()=>{if(k.state===3||k.state===4)return cA();k.action(2,l.bind(this),y).catch(m1.bind(null,d)).then(cA,CA)},V);p1.has(this)?(ie=p1.get(this))==null||ie.set(J(...y),{timeoutId:qe,resolve:cA}):p1.set(this,new Map([[J(...y),{timeoutId:qe,resolve:cA}]]))})}return k.action(2,l.bind(this),y).catch(m1.bind(null,d))})}function $M(A){return jr((e,o)=>function(){for(var a=arguments.length,l=new Array(a),d=0;dS.action(3,()=>Promise.resolve(),l))).then(()=>e.call(this,...l));let y=BL.get(this,h);return y?y.action(3,e.bind(this),l).catch(m1.bind(null,o)):e.apply(this,l)})}function Av(){return function(A,e,o){return A.prototype[e]=function(){let a=this._log||console,l='"'.concat(e,'" is a static method. Use TRTC.').concat(e,"() instead. See: ").concat(Wh,"/en/TRTC.html#.").concat(e);a.warn(l)},o}}var Ki={ERROR:"error",AUTOPLAY_FAILED:"autoplay-failed",KICKED_OUT:"kicked-out",REMOTE_USER_ENTER:"remote-user-enter",REMOTE_USER_EXIT:"remote-user-exit",REMOTE_AUDIO_AVAILABLE:"remote-audio-available",REMOTE_AUDIO_UNAVAILABLE:"remote-audio-unavailable",REMOTE_VIDEO_AVAILABLE:"remote-video-available",REMOTE_VIDEO_UNAVAILABLE:"remote-video-unavailable",AUDIO_VOLUME:"audio-volume",AUDIO_FRAME:"audio-frame",NETWORK_QUALITY:"network-quality",CONNECTION_STATE_CHANGED:"connection-state-changed",AUDIO_PLAY_STATE_CHANGED:"audio-play-state-changed",VIDEO_PLAY_STATE_CHANGED:"video-play-state-changed",SCREEN_SHARE_STOPPED:"screen-share-stopped",DEVICE_CHANGED:"device-changed",PUBLISH_STATE_CHANGED:"publish-state-changed",TRACK:"track",STATISTICS:"statistics",SEI_MESSAGE:"sei-message",CUSTOM_MESSAGE:"custom-message",VIDEO_DECODE_DOWNGRADE_STATE_CHANGED:"video-decode-downgrade-state-changed",LAYER_DATA:"layerData",FIRST_VIDEO_FRAME:"first-video-frame",PERMISSION_STATE_CHANGE:"permission-state-change",VIDEO_SIZE_CHANGED:"video-size-changed",REALTIME_TRANSCRIBER_MESSAGE:"realtime-transcriber-message",REALTIME_TRANSCRIBER_STATE_CHANGED:"realtime-transcriber-state-changed",PICTURE_IN_PICTURE_STATE_CHANGED:"picture-in-picture-state-changed",FULL_SCREEN_STATE_CHANGED:"full-screen-state-changed"},HiA=new Set([Ki.AUDIO_VOLUME,Ki.AUDIO_FRAME,Ki.NETWORK_QUALITY,Ki.STATISTICS,Ki.SEI_MESSAGE,Ki.CUSTOM_MESSAGE,Ki.LAYER_DATA]),yz={};jh(yz,{ScheduleRequestType:()=>Mz,getAbilityConfig:()=>qiA,getScheduleDomain:()=>dj,isNeedToSchedule:()=>QL,scheduleProxy:()=>om,sendScheduleRequest:()=>Sz,setIsNeedToSchedule:()=>pQ,setScheduleProxy:()=>Ej});var f1=null,y1=0,Dz=72e5,D1="trtc_schedule_cache",QL=!0;function pQ(A){Nr(A)&&A!==QL&&(QL=A,pA.info("setIsNeedToSchedule ".concat(A)),A?function(){if(typeof window<"u"&&typeof localStorage<"u")try{localStorage.removeItem(D1)}catch(e){pA.error("clearScheduleCache error",e)}}():y1=Date.now()+Dz)}function Sz(A){return WA(this,arguments,function(e){let{userId:o,sdkAppId:a,useStringRoomId:l,roomId:d,userSig:h,version:y,frameWorkType:S,role:k,latencyLevel:V}=e;return function*(){var J;if(!QL&&f1&&y1>Date.now())return{isCached:!0,result:f1};let cA={delta:0,count:[1,1],msg:[],detail:[]};try{let CA=new FormData;CA.append("userId",String(o)),CA.append("sdkAppId",String(a)),CA.append("isStrGroupId",String(l)),CA.append("groupId",String(d)),CA.append("sdkVersion",y),CA.append("userSig",String(h));let MA=((J=yield SM())==null?void 0:J.model)||Sk();MA&&CA.append("model",MA);let ie=Hp();ie&&CA.append("osString",ie);let pe=Vp();pe&&CA.append("gpu",pe),k&&CA.append("role",String(k)),V&&CA.append("latencyLevel",String(V)),S&&CA.append("frameWorkType",String(S));let qe=ko(),we=yield function(Le,Qt,Bi){return new Promise((Si,Jo)=>{let Ho=null;rM([vz(Qn=>Qt.count[0]=Qn+1,Qn=>{let{error:qo,retry:Ns,retriedCount:pg,retryFuncArgs:ya}=Qn;Qt.msg[0]=qo.message,Ho||(pg>=1&&(ya[0]=wy(Bi,"config",YA.MAIN,!0)),Ns())})(wy(Bi,"config",YA.MAIN),Le,{get timeout(){return 1e3*zf(2+Qt.count[0])}}),vz(Qn=>Qt.count[1]=Qn+1,Qn=>{let{error:qo,retry:Ns,retriedCount:pg,retryFuncArgs:ya}=Qn;Qt.msg[1]=qo.message,Ho||(pg>=2&&(ya[0]=wy(Bi,"config",YA.BACKUP,!0)),Ns())})(wy(Bi,"config",YA.BACKUP),Le,{get timeout(){return 1e3*zf(2+Qt.count[1])}})]).then(Qn=>{Ho=Qn,Si(Ho)}).catch(Jo)})}(CA,cA,a);we.config&&(we.config.loggerDomain&&qS(we.config.loggerDomain),Nr(we.config.scheduleCache)&&pQ(!we.config.scheduleCache)),cA.delta=ko()-qe;let Di=function(Le,Qt,Bi){let Si={totalCost:0,local:0,dns:0,tcp:0,tls:0,request:0,response:0};try{let Jo=performance.getEntriesByType("resource"),Ho=wy(Le,"config",YA.MAIN),Qn=wy(Le,"config",YA.BACKUP);for(let qo of Jo)if(qo.startTime>=Bi&&(qo.name===Ho||qo.name===Qn)&&qo.transferSize>0){let Ns=qo.name===Ho?YA.MAIN:YA.BACKUP,pg=Math.round(qo.duration),ya=Math.round(qo.domainLookupStart-qo.startTime),Qu=qo.redirectStart>0?Math.round(qo.redirectEnd-qo.redirectStart):0,DL=qo.fetchStart>0?Math.round(qo.domainLookupStart-qo.fetchStart):0,D_=Math.round(qo.domainLookupEnd-qo.domainLookupStart),M8=Math.round(qo.requestStart-qo.secureConnectionStart),v8=Math.round(qo.secureConnectionStart-qo.connectStart),R8=Math.round(qo.responseStart-qo.requestStart),w8=Math.round(qo.responseEnd-qo.responseStart),QsA=[D_,M8,v8,R8,w8];sn.uploadEvent({log:"stat-schedule-net:".concat(pg,"(").concat(ya,"(").concat(Qu,"->").concat(DL,")->").concat(QsA.join("->"),") ").concat(Ns),userId:Qt}),Si=po(fi({},Si),{totalCost:pg,local:ya,dns:D_,tcp:v8,tls:M8,request:R8,response:w8});break}}catch(Jo){pA.error("getScheduleDetailCost error",Jo)}return Si}(Number(a),o,qe);return f1=we,function(Le){if(typeof window<"u"&&typeof localStorage<"u")try{let Qt=Date.now()+Dz;localStorage.setItem(D1,JSON.stringify({result:Le,expireIn:Qt})),y1=Qt}catch(Qt){pA.error("saveScheduleToLocalStorage error",Qt)}}(we),{isCached:!1,result:we,detailCost:Di}}catch(CA){let MA=wa(CA)?CA[0]:CA,ie=kn(MA.code)?MA.code:0,pe="schedule failed".concat(MA.message?": ".concat(MA.message):""),qe=new gi({code:Ct.SCHEDULE_FAILED,extraCode:ie,message:Xo({key:vo.JOIN_ROOM_FAILED,data:{error:pe,code:ie}})});throw pA.error(pe,ie),qe}}()})}typeof document<"u"&&document.head.insertAdjacentHTML("beforeend",Object.values(eQ).map(A=>'')).join(`\r +`)),function(){if(typeof window<"u"&&typeof localStorage<"u")try{let A=localStorage.getItem(D1);if(A){let{result:e,expireIn:o}=JSON.parse(A);o>Date.now()?(f1=e,y1=o,QL=!1):localStorage.removeItem(D1)}}catch(A){pA.error("loadScheduleFromLocalStorage error",A)}}(),F.on("28",()=>pQ(!0)),F.on("63",()=>pQ(!0)),F.on("84",()=>pQ(!0)),F.on("201",A=>{A.state==="RECONNECTING"&&pQ(!0)}),F.on("202",A=>{A.state==="RECONNECTING"&&pQ(!0)});var om={main:"",backup:""};function Ej(A){wa(A)?(om.main=A[0],om.backup=A[1]):(om.main=A,om.backup=A)}var Mz=(A=>(A.CONFIG="config",A.TRTC_AUTO_CONF="trtcAutoConf",A.AUDIO_AI_AUTH="audioAiAuth",A))(Mz||{});function wy(A,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:YA.MAIN,a=arguments.length>3&&arguments[3]!==void 0&&arguments[3];return"https://".concat(om[o]||dj(A,o,a),"/api/v1/").concat(e)}function qiA(A,e,o){let a=wy(A,e),l=wy(A,e,YA.BACKUP),d=new URLSearchParams(o).toString(),h=fetch("".concat(a,"?").concat(d)).then(S=>S.json()),y=fetch("".concat(l,"?").concat(d)).then(S=>S.json());return rM([h,y])}function dj(A){let e,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:YA.MAIN,a=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return e=Kd(A)?a?o===YA.MAIN?eQ.MAIN_OVERSEA_BACKUP:eQ.BACKUP_OVERSEA:o===YA.MAIN?eQ.MAIN_OVERSEA:eQ.BACKUP_OVERSEA:o===YA.MAIN?eQ.MAIN:eQ.BACKUP,e}function KiA(A,e,o){return new Promise((a,l)=>{oQ({url:A,body:e,timeout:o.timeout,priority:"high"}).then(d=>{d.data.code===0?a(d.data.data):l({code:d.data.code,message:d.data.msg})}).catch(l)})}var vz=(A,e)=>IM({retryFunction:KiA,settings:{retries:3,timeout:0},onError:e,onRetrying:A}),Cj=class{constructor(){Y(this,"_log"),this._log=pA.createLogger({id:"fd"})}download(A,e){return WA(this,null,function*(){let{type:o="blob"}=e||{};A=Ak(A);try{let a,l=ko();if(a=Ra(fetch)?yield this.downloadWithFetch(A,o):yield this.downloadWithXHR(A,o),!a||!a.data)throw new Error("data is empty");let d=ko()-l;return this._log.info("downloaded: ".concat(A,", return type: ").concat(o,", cost: ").concat(d,"ms")),si.addSuccessEvent({key:522700,cost:ko()-l}),a.data}catch(a){throw this._log.error("failed to download: ".concat(A,", error: ").concat(a)),si.addFailedEvent({key:522700,error:a}),a}})}downloadWithFetch(A,e){return WA(this,null,function*(){this._log.info("download with fetch: ".concat(A,", return type: ").concat(e));try{let o,a=yield fetch(A);if(!a.ok){let l=new Error("network response was not ok: ".concat(a.status));throw l.status=a.status,l}return o=e==="arraybuffer"?yield a.arrayBuffer():yield a.blob(),{data:o}}catch(o){throw o}})}downloadWithXHR(A,e){return this._log.info("download with xhr: ".concat(A,", return type: ").concat(e)),new Promise((o,a)=>{let l=new XMLHttpRequest;l.open("GET",A,!0),l.responseType=e,l.onload=()=>{if(l.status===200||l.status===0&&l.response)o({data:l.response});else{let d=new Error("XHR failed, status: ".concat(l.status));d.status=l.status,a(d)}},l.onerror=a,l.send(null)})}loadWasm(A,e){return WA(this,null,function*(){this._log.info("loadWasm ".concat(A,", importObject: ").concat(JSON.stringify(e)));let o=ko(),a=null,l=null;if(Ra(WebAssembly.instantiateStreaming)&&!A.startsWith("data:application/octet-stream;base64,")&&!(d=>d.startsWith("file://"))(A)&&Ra(fetch))try{let d=fetch(A);a=(yield WebAssembly.instantiateStreaming(d,e)).instance}catch(d){l=d}if(!a)try{let d=yield this.download(A,{type:"arraybuffer"});a=(yield WebAssembly.instantiate(d,e)).instance}catch(d){l=d}if(a){let d=ko()-o;return this._log.info("loadedWasm ".concat(A,", cost: ").concat(d,"ms")),si.addSuccessEvent({key:522701,cost:d}),a}throw this._log.error("failed to loadWasm ".concat(A,", error: ").concat(l)),si.addFailedEvent({key:522701,error:l}),l})}loadScript(A){this._log.info("loadScript ".concat(A));let e=ko();return new Promise((o,a)=>{let l=document.createElement("script");l.type="text/javascript",l.onload=()=>{this._log.info("loadedScript ".concat(A,", cost: ").concat(ko()-e,"ms")),si.addSuccessEvent({key:522702,cost:ko()-e,split:1e3}),o(l)},l.onerror=d=>{this._log.error("failed to loadScript ".concat(A,", error: ").concat(d?.message||JSON.stringify(d))),si.addFailedEvent({key:522702}),a(d)},l.crossOrigin="anonymous",l.src=A,document.head.append?document.head.append(l):document.getElementsByTagName("head")[0].appendChild(l)})}};hi([tB({settings:{timeout:0,retries:3},onError(A,e,o){var a;A?.status===404||(a=A?.message)!=null&&a.includes("404")?(this._log.warn("download 404, stop retry"),o(A)):e()},onRetrying(A){this._log.warn("download retrying: ".concat(A))}})],Cj.prototype,"download"),hi([tB({settings:{timeout:3e3,retries:3},onRetrying(A){this._log.warn("loadScript retrying: ".concat(A))}})],Cj.prototype,"loadScript");var hj=new Cj;function Rz(A){let[e,o]=A,a=o.byteLength,l=parseInt(String(a/255),10),d=a%255,h=[];h.push(0,0,0,1,6,e);for(let S=0;SV+J.dataView.byteLength,0),h=new ArrayBuffer(d+e.data.byteLength),y=new DataView(h),S=new DataView(e.data),k=0;for(let V=0;Vl.isSEI);o?.(a.reverse())}catch{}return e}function bz(A){let{seiMessageList:e,isAudio:o,getNtpTime:a,isMain:l}=A;return new TransformStream({transform(d,h){let y=d;o?audioEncodePipeline.forEach(S=>{y=S({frame:y,ntp:a(),onDump:()=>{self.postMessage({type:"dump",isAudio:o,data:y.data,userId:""})}})}):videoEncodePipeline.forEach(S=>{y=S({frame:y,seiMessageList:e,onDump:()=>{self.postMessage({type:"dump",isAudio:o,data:y.data,userId:"",streamType:l?"main":"auxiliary"})}})}),h.enqueue(y)}})}function kz(A){let{userId:e,streamType:o,isAudio:a}=A;return new TransformStream({transform(l,d){let h=l;a?(audioDecodePipeline.forEach(y=>{h=y({frame:h,onAudioFrameNTPTime:S=>{self.postMessage({type:"audio-ntp",data:S,userId:e,streamType:o})},onDump:()=>{self.postMessage({type:"dump",isAudio:a,data:h.data,userId:e})}})}),d.enqueue(h)):videoDecodePipeline.forEach(y=>{h=y({frame:h,onSEI:S=>{S.forEach(k=>{self.postMessage({type:"sei",seiPayloadType:k.seiPayloadType,data:k.seiPayload.buffer,userId:e,streamType:o})})},onDump:()=>{self.postMessage({type:"dump",isAudio:a,data:h.data,userId:e,streamType:o})}})}),d.enqueue(h)}})}function Lz(A){let e=[u1],o=[Tz,wz,tz,_z,Rz,bz,kz,b0,lM,I1],a="const videoEncodePipeline=[".concat(A.videoEncodePipeline.toString(),`]; const videoDecodePipeline=[`).concat(A.videoDecodePipeline.toString(),`]; const audioEncodePipeline = [`).concat(A.audioEncodePipeline.toString(),`]; - const audioDecodePipeline = [`).concat(A.audioDecodePipeline.toString(),"];"),c="(()=>{".concat(e.map(S=>"const ".concat(S.name,"=(()=>").concat(S.toString(),")()")).join(` + const audioDecodePipeline = [`).concat(A.audioDecodePipeline.toString(),"];"),l="(()=>{".concat(e.map(S=>"const ".concat(S.name,"=(()=>").concat(S.toString(),")()")).join(` `),` `).concat(o.map(S=>S.toString()).join(` -`),";(").concat(()=>{let S=[],k=[],V=[],J=0;self.onmessage=gA=>{switch(gA.data.type){case"sei":gA.data.isMain?(S.push(gA.data.data),gA.data.small&&V.push(gA.data.data)):k.push(gA.data.data);break;case"ntp-offset":J=gA.data.data}},self.onrtctransform=gA=>{let{options:CA}=gA.transformer,MA=CA.isReceiver?Iz({userId:CA.userId,streamType:CA.streamType,isAudio:CA.isAudio}):lz({getNtpTime:()=>Date.now()+J,isAudio:CA.isAudio,isMain:CA.isMain,seiMessageList:CA.isMain?CA.small?V:S:k});gA.transformer.readable.pipeThrough(MA).pipeTo(gA.transformer.writable)}},")();").concat(a,"})()"),d=new Blob([c],{type:"text/javascript"}),C=URL.createObjectURL(d),y=new Worker(C);return URL.revokeObjectURL(C),y}var Ez,ij=class{constructor(A){Y(this,"audioPlayer"),Y(this,"videoPlayer"),Y(this,"log"),this.audioPlayer=A.audioPlayer,this.videoPlayer=A.videoPlayer,this.log=A.log.createChild({id:"pip"}),this.videoPlayer.on(fo.USER_RESUME_IN_PIP_OR_FULL_SCREEN,this.handleUserResumeInPIPOrFullScreen,this),this.videoPlayer.on(fo.USER_PAUSE_IN_PIP_OR_FULL_SCREEN,this.handleUserPauseInPIPOrFullScreen,this),this.videoPlayer.on(fo.ENTER_PICTURE_IN_PICTURE,this.handleEnterPIPOrFullScreen,this),this.videoPlayer.on(fo.ENTER_FULL_SCREEN,this.handleEnterPIPOrFullScreen,this),this.videoPlayer.on(fo.LEAVE_PICTURE_IN_PICTURE,this.handleLeavePIP,this),this.videoPlayer.on(fo.LEAVE_FULL_SCREEN,this.handleLeaveFullScreen,this),this.videoPlayer.on(fo.VOLUME_CHANGE,this.handleVolumeChange,this)}handleUserResumeInPIPOrFullScreen(){this.audioPlayer.isPaused&&(this.log.warn("resume audio in ".concat(this.videoPlayer.isPictureInPicture()?"pip":"fullscreen")),this.audioPlayer.doResume()),Ha&&sy&&this.videoPlayer.resetSrcObjectToReplay()}handleUserPauseInPIPOrFullScreen(){this.audioPlayer.isPaused||(this.log.warn("pause audio in ".concat(this.videoPlayer.isPictureInPicture()?"pip":"fullscreen")),this.audioPlayer.doPause())}handleEnterPIPOrFullScreen(){this.videoPlayer.element&&this.audioPlayer.muted!==this.videoPlayer.element.muted&&(this.log.warn("sync video muted to ".concat(this.audioPlayer.muted," when enter ").concat(this.videoPlayer.isPictureInPicture()?"pip":"fullscreen")),this.videoPlayer.element.muted=this.audioPlayer.muted)}handleLeavePIP(){this.audioPlayer.isPaused&&!this.audioPlayer.isPausedByUserCall&&(this.log.warn("resume after leave pip"),this.audioPlayer.doResume()),this.videoPlayer.isPaused&&!this.videoPlayer.isPausedByUserCall&&(this.log.warn("resume video after leave pip"),this.videoPlayer.doResume())}handleLeaveFullScreen(){this.audioPlayer.isPaused&&!this.audioPlayer.isPausedByUserCall&&(this.log.warn("resume audio after leave fullscreen"),this.audioPlayer.doResume()),this.videoPlayer.isPaused&&!this.videoPlayer.isPausedByUserCall&&(this.log.warn("resume video after leave fullscreen"),Ha&&sy?this.videoPlayer.resetSrcObjectToReplay():this.videoPlayer.doResume())}handleVolumeChange(A){A.muted!==void 0&&this.audioPlayer.muted!==A.muted&&(this.log.warn("sync audio muted to ".concat(A.muted," in ").concat(this.videoPlayer.isPictureInPicture()?"pip":"fullscreen")),this.audioPlayer.setMuted(A.muted))}destroy(){this.videoPlayer.off(fo.USER_RESUME_IN_PIP_OR_FULL_SCREEN,this.handleUserResumeInPIPOrFullScreen,this),this.videoPlayer.off(fo.USER_PAUSE_IN_PIP_OR_FULL_SCREEN,this.handleUserPauseInPIPOrFullScreen,this),this.videoPlayer.off(fo.ENTER_PICTURE_IN_PICTURE,this.handleEnterPIPOrFullScreen,this),this.videoPlayer.off(fo.ENTER_FULL_SCREEN,this.handleEnterPIPOrFullScreen,this),this.videoPlayer.off(fo.LEAVE_PICTURE_IN_PICTURE,this.handleLeavePIP,this),this.videoPlayer.off(fo.LEAVE_FULL_SCREEN,this.handleLeaveFullScreen,this),this.videoPlayer.off(fo.VOLUME_CHANGE,this.handleVolumeChange,this)}},dz=!1;function QiA(A){var e=this;let{TRTC:o,room:a,errorModule:c,assetsPath:d}=A;return{TRTC:o,LocalMixVideoTrack:jK,LocalVideoTrack:dQ,LocalScreenTrack:qM,room:a,assetsPath:d,fileDownloader:tj,innerEmitter:F,INNER_EVENT:nA,constants:Tx,environment:E2,utils:k5,eventLogger:sn,log:this.room.getLogger(),loggerManager:QA,errorModule:c,kvStatManager:ii,rtcDectection:te,trtc:this,rx:c5,enums:ke,schedule:Az,getDevices:q2,initVisionTaskRegistry:function(C,y){let S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"/mediapipe/vision.js";return KA(e,null,function*(){!window.VisionTaskRegistry&&!dz&&(dz=!0,Ez=tj.loadScript("".concat(C,"/").concat(S).replace(/([^:]\/)\/+/g,"$1"))),yield Ez,yield(yield window.VisionTaskRegistry.getInstance(C)).preloadModels(y)})},audioContext:FI(),deviceDetector:Pc,AudioPlayer:bK,RemoteAudioPlayer:o5,VideoPlayer:vo,showAutoPlayDialog:YC,Timer:Gr,clearStarted:(C,y)=>{let S=C.getAlias(),k=IL.instances.get(this);if(k)if(y){let V=k.get(S+y);if(!V)return;V.started=!1}else k.forEach((V,J)=>{J.startsWith(S)&&(V.started=!1)})},startGetPCM:XK,createAudioNode:V2,getNetworkTimeOffset:Rx,validateSourceNode:()=>{var C;if(er&&((C=this.room.audioManager._localAudioPipline)==null||!C.source.node))throw new wo({code:Ro.DEVICE_ERROR,extraCode:5310,message:"The audio processing plugin cannot be used due to the microphone's sampling rate is not 48KHz in Firefox. Please switch to another browser such as Chrome."})},createScriptTransformWorker:uz,AVPlayerStateSyncManager:ij,PlayerEvent:fo}}var h_=new WeakMap,Cz="5.15.3-beta.12";function hu(){for(var A=arguments.length,e=new Array(A),o=0;ofunction(){for(var d=arguments.length,C=new Array(d),y=0;yfunction(){for(var d=arguments.length,C=new Array(d),y=0;yWf(V)?iM(V):Yn(V)?V:Cg(V))},value:o}})}else if(!Je(e.type)&&Cg(o)!==e.type)throw new wo(C(5002));if(e.allowEmpty===!1){let k=bn(o)&&(o===0||Number.isNaN(o)),V=Yn(o)&&o.trim()==="";if(k||V)throw new wo(C(5003))}if(e.notLessThanZero&&bn(o)&&o<0)throw new wo(C(5006));if(!Je(e.min)&&bn(o)&&oe.max)throw new wo(C(5008));if(Yn(e.instanceOf)){if(!o||o._name!==e.instanceOf)throw new wo(C(5004))}else if(Ra(e.instanceOf)&&!(o instanceof e.instanceOf))throw new wo(C(5004));if(Array.isArray(e.values)&&!e.values.includes(o))throw new wo(C(5005));let{properties:y}=e;lE(y)&&$E(o)&&Object.keys(y).forEach(k=>{d1.call(this,{rule:y[k],value:o&&o[k],key:"".concat(k),fnName:c,className:d})});let{arrayItem:S}=e;lE(S)&&wa(o)&&o.forEach((k,V)=>{d1.call(this,{rule:S,value:k,key:"".concat(a,"[").concat(V,"]"),fnName:c,className:d})}),Ra(e.validate)&&e.validate.call(this,o,a,c,d,this)}var piA=0;function fa(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},{getRemoteId:e=()=>"",replaceArg:o,getKVReportKey:a,ignoreLog:c,ignoreErrorLog:d}=A;return jr((C,y)=>function(){for(var S=arguments.length,k=new Array(S),V=0;V0?$A.info("".concat(y,"() ").concat(Be," ").concat(JSON.stringify(k,(yi,Ge)=>MA(yi,Ge,["userSig","privateMapKey"])))):$A.info("".concat(y,"() ").concat(Be));let Ye=a?a(...k):w2[y],ve=d?.(...k)||!1;try{let yi=C.apply(this,k),Ge=ko();if(jf(yi)){let Bt="".concat(y.includes("Plugin")?"".concat(((gA=(J=k[0]).getName)==null?void 0:gA.call(J))||""," "):" ");return yi.then(hi=>($A.info("".concat(y,"() success ").concat(Be," ").concat(Bt).concat(e.call(this,...k))),ii.addSuccessEvent({key:Ye,cost:ko()-Ge}),hi)).catch(hi=>{var Di;let Vo=(hi=wo.convertFrom.call(this,hi,y,k.length===1?k[0]:k)).extraCode||hi.code,Jo=(Di=hi.message)!=null&&Di.includes(Vo)?"":" code:".concat(Vo),Qn=hi?.code===Ro.OPERATION_ABORT;throw ve||$A[Qn?"warn":"error"]("".concat(y,"() failed ").concat(Be," ").concat(Bt).concat(e.call(this,...k)," ").concat(hi).concat(Jo," params: ").concat(JSON.stringify(k,MA))),ii.addFailedEvent({key:Ye,error:hi}),hi})}return ii.addSuccessEvent({key:Ye}),yi}catch(yi){let Ge=(yi=wo.convertFrom.call(this,yi,y)).extraCode||yi.code,Bt=(CA=yi.message)!=null&&CA.includes(Ge)?"":" code:".concat(Ge),hi=yi?.code===Ro.OPERATION_ABORT;throw ve||$A[hi?"warn":"error"]("".concat(y,"() failed ").concat(Be," ").concat(yi).concat(Bt," params: ").concat(JSON.stringify(k,MA))),ii.addFailedEvent({key:Ye,error:yi}),yi}})}var sj,nj=A=>jr((e,o)=>function(a,c){return KA(this,null,function*(){let d=this._plugins.get(a);if(!d)throw this._log.error("plugin ".concat(String(a)," is not found")),new wo({code:Ro.OPERATION_ABORT,message:"plugin ".concat(String(a)," is not found"),fnName:o});if(Ra(d.constructor.isSupported)&&!d.constructor.isSupported())throw this._log.error("plugin ".concat(String(a)," is not supported")),new wo({code:Ro.ENV_NOT_SUPPORTED,message:"plugin ".concat(String(a)," is not supported"),extraCode:5210,fnName:o});return oj.call(this,d.getValidateRule(A),[c],o,"TRTC"),e.call(this,d,c)})}),rj=0,C1=class GL{constructor(e){this.core=e,Y(this,"log"),Y(this,"customAudioReferenceMap",new Map),Y(this,"audioRefId",0),Y(this,"audioContext",FI()),Y(this,"localAudioWorkletNode"),Y(this,"screenAudioWorkletNode"),Y(this,"mixNode"),Y(this,"silentNode"),rj+=1,this.log=e.log.createChild({id:"".concat(this.getAlias()).concat(rj)}),this.log.info("created id=".concat(this.getAlias()).concat(rj)),this.installEvent()}static getStartValidateRule(e){return{name:"options",required:!0,type:"object",properties:{sdkAppId:{type:"number",required:!0},userId:{type:"string",required:!0},userSig:{type:"string",required:!0}},validate(o,a,c,d){if(!e.room.audioManager.hasAudioTrack&&!e.room.audioManager.hasScreenAudioTrack)throw new wo({code:Ro.INVALID_OPERATION,extraCode:5106,fnName:c})}}}preload(e){return sj||(sj=this.doPreload(e)),sj}doPreload(e){return KA(this,null,function*(){let o=yield this.core.fileDownloader.download(e,{type:"blob"}),a=URL.createObjectURL(o);try{yield Vg(this.audioContext,a)}catch(c){this.log.error("preload audioProcessor failed. ".concat(c))}finally{URL.revokeObjectURL(a)}})}getName(){return GL.Name}getAlias(){return"ap"}getGroup(){return"ap"}getValidateRule(e){switch(e){case"start":return GL.getStartValidateRule(this.core);case"update":return GL.updateValidateRule;case"stop":return GL.stopValidateRule}}start(e){return KA(this,null,function*(){var o,a,c,d;let{room:C}=this.core,{sdkAppId:y,userId:S,userSig:k,assetsPath:V=this.core.assetsPath,audioReference:J,processLevel:gA,enableDump:CA,isLocalAudioNeedAudioProcess:MA=!0,isScreenAudioNeedAudioProcess:$A=!1}=e;if(this.core.room.audioManager.isLocalAudioNeedAudioProcess=MA,this.core.room.audioManager.isScreenAudioNeedAudioProcess=$A,!V)throw new wo({code:Ro.INVALID_PARAMETER,message:"you need to deploy the assets of the npm package and set assetsPath param in TRTC.create()"});if(this.core.validateSourceNode(),yield this.preload("".concat(V,"/audioProcessor-wasm.js")),MA&&!this.localAudioWorkletNode){let{sign:Be,status:Ye,timestamp:ve}=yield this.getAuthData(y,S,k);this.localAudioWorkletNode=new AudioWorkletNode(this.audioContext,"trtc-audio-processor",{numberOfInputs:2,numberOfOutputs:1}),this.initWorkletNode(this.localAudioWorkletNode,"localAudio",y,S,ve,Be,Ye,C)}if($A&&!this.screenAudioWorkletNode){let{sign:Be,status:Ye,timestamp:ve}=yield this.getAuthData(y,S,k);this.screenAudioWorkletNode=new AudioWorkletNode(this.audioContext,"trtc-audio-processor",{numberOfInputs:2,numberOfOutputs:1}),this.initWorkletNode(this.screenAudioWorkletNode,"screenAudio",y,S,ve,Be,Ye,C)}this.mixNode||(this.mixNode=this.audioContext.createGain(),this.mixNode.gain.value=1),this.silentNode||(this.silentNode=this.audioContext.createConstantSource(),this.silentNode.offset.setValueAtTime(0,this.audioContext.currentTime),this.silentNode.start()),(o=this.localAudioWorkletNode)==null||o.port.postMessage({type:"enable"}),(a=this.screenAudioWorkletNode)==null||a.port.postMessage({type:"enable"}),C.audioManager.addAudioProcessor(this.mixNode,this.silentNode,this.localAudioWorkletNode,this.screenAudioWorkletNode),Je(J)||J.forEach(Be=>{this.customAudioReferenceMap.set(Be,"o-".concat(this.audioRefId++)),this.core.room.audioManager.updateAudioReference({type:"add",audioReference:Be,refId:"o-".concat(this.audioRefId++)})}),Je(gA)||(c=this.localAudioWorkletNode)==null||c.port.postMessage({type:"setConfig",data:{aecEnable:1,aecNlpLevel:gA}}),Je(CA)||(d=this.localAudioWorkletNode)==null||d.port.postMessage({type:"dump",data:{enable:CA}})})}update(e){return KA(this,null,function*(){var o,a,c;let{audioReference:d,enableDump:C,processLevel:y}=e;Je(d)||(this.customAudioReferenceMap.forEach((S,k)=>{this.customAudioReferenceMap.delete(k),this.core.room.audioManager.updateAudioReference({type:"remove",refId:S})}),d.forEach(S=>{this.customAudioReferenceMap.set(S,"o-".concat(this.audioRefId++)),this.core.room.audioManager.updateAudioReference({type:"add",audioReference:S,refId:"o-".concat(this.audioRefId++)})})),Je(y)||(o=this.localAudioWorkletNode)==null||o.port.postMessage({type:"setConfig",data:{aecEnable:1,aecNlpLevel:y}}),Je(C)||((a=this.localAudioWorkletNode)==null||a.port.postMessage({type:"dump",data:{enable:C}}),(c=this.screenAudioWorkletNode)==null||c.port.postMessage({type:"dump",data:{enable:C}}))})}stop(){return KA(this,null,function*(){var e,o;let{room:a}=this.core;(e=this.localAudioWorkletNode)==null||e.port.postMessage({type:"disable"}),(o=this.screenAudioWorkletNode)==null||o.port.postMessage({type:"disable"}),yield a.audioManager.removeAudioProcessor(this.localAudioWorkletNode,this.screenAudioWorkletNode)})}destroy(){this.localAudioWorkletNode&&(this.localAudioWorkletNode.port.onmessage=null),this.screenAudioWorkletNode&&(this.screenAudioWorkletNode.port.onmessage=null),this.uninstallEvent()}getAuthData(e,o,a){return KA(this,null,function*(){let c=String(Date.now()).slice(0,-3),{auth:d,sign:C,status:y,message:S}=yield function(k){return KA(this,arguments,function(V){let{sdkAppId:J,userId:gA,userSig:CA,timestamp:MA}=V;return function*(){let $A="".concat(function(Vo){let Jo=arguments.length>1&&arguments[1]!==void 0?arguments[1]:YA.MAIN;return"https://".concat(em[Jo]||Aj(Vo,Jo),"/api/v1/audioAiAuth")}(J),"?sdkAppId=").concat(J,"&userId=").concat(gA,"&userSig=").concat(CA,"×tamp=").concat(MA),Be=yield fetch($A),{data:{errCode:Ye,errMsg:ve,sign:yi,status:Ge}}=yield Be.json();if(Ge==="1")return{auth:!0,sign:yi,status:Ge,message:ve};let Bt=Kd(J)?"https://trtc.io/document/42734?platform=web&product=rtcengine&menulabel=coresdk":"https://cloud.tencent.com/document/product/647/44247",hi="Init RTCAudioProcessor failed.",Di="";switch(Ye){case 1:Di="Please check your params.";break;case 2:Di="You need to buy packages. Refer to: ".concat(Bt);break;case 3:Di="Server is invalid. Please contact our engineer. ";break;case 4:Di="Your packages is not active. Refer to: ".concat(Bt);break;case 5:Di="Your packages is expired. Refer to: ".concat(Bt);break;case 6:Di="Your version is not supported."}return{auth:!1,status:Ge,message:ve?"".concat(hi," Reason: ").concat(ve,". ").concat(Di):"".concat(hi,", ").concat(Di)}}()})}({sdkAppId:e,userSig:a,userId:o,timestamp:c});if(!d)throw this.log.info("audioProcessor: ".concat(o," auth result: ").concat(d,". Message: ").concat(S)),new wo({code:Ro.INVALID_PARAMETER,message:S});return{sign:C,status:y,timestamp:c}})}initWorkletNode(e,o,a,c,d,C,y,S){e.port.postMessage({type:"init",data:{sdkAppId:String(a),userId:c,timestamp:d,sign:C,status:y}}),e.port.onmessage=k=>{var V;let{data:J}=k;switch(J.type){case"cost":let gA=J?.value>10?"info":"debug";return void this.log[gA]("".concat(o==="localAudio"?"":"[".concat(o,"] "),"avg cost: ").concat(J.value," max: ").concat(J?.max,"(").concat(mb(new Date(J?.maxCostTimestamp)),") hist: ").concat((V=J?.hist)==null?void 0:V.join(" ")));case"log":return void this.log[J.logLevel]("".concat(o==="localAudio"?"":"[".concat(o,"] ")).concat(J.value));case"dump":return void F.emit("265",{room:S,data:J.value,type:o==="localAudio"?"dump":"dump-screen-audio"});case"detectEcho":return void this.log.warn("".concat(o==="localAudio"?"":"[".concat(o,"] "),"detect echo: ").concat(q0()?rQ():Yp()))}}}handleLocalAudioStarted(e){return KA(this,null,function*(){var o;if(this.hitTest(e.room)&&((o=this.core.room.scheduleResult.config)==null?void 0:o.audioProcessor)===!0)try{yield this.core.trtc.startPlugin("AudioProcessor",{sdkAppId:this.core.room.sdkAppId,userId:this.core.room.userId,userSig:this.core.room.userSig}),this.log.warn("audio processor auto start success")}catch(a){this.log.warn("audio processor auto start failed, error: ".concat(a))}})}handleLocalAudioStopped(e){return KA(this,null,function*(){var o;!this.hitTest(e.room)||((o=this.core.room.scheduleResult.config)==null?void 0:o.audioProcessor)!==!0||(yield this.core.trtc.stopPlugin("AudioProcessor"))})}installEvent(){this.core.innerEmitter.on("104",this.handleLocalAudioStarted,this),this.core.innerEmitter.on("114",this.handleLocalAudioStopped,this)}uninstallEvent(){this.core.innerEmitter.off("104",this.handleLocalAudioStarted,this),this.core.innerEmitter.off("114",this.handleLocalAudioStopped,this)}hitTest(e){return e===this.core.room}};Y(C1,"updateValidateRule",{type:"object"}),Y(C1,"stopValidateRule",{type:"object"}),Y(C1,"Name","AudioProcessor");var miA=C1,aj=0,fiA=class{constructor(A,e){Y(this,"audioObjectURL"),Y(this,"player"),Y(this,"publisher"),Y(this,"mixInput"),this.mixInput=new Z4(e),A.url?(this.player=new Audio(A.url),this.player.crossOrigin="anonymous",this.publisher=new Audio(A.url),this.publisher.crossOrigin="anonymous",this.mixInput.replaceSource(this.publisher)):this.mixInput.replaceSource(A.track),this.mixInput.connect()}updateSettings(A){this.player&&(Je(A.volume)||(this.volume=A.volume),Je(A.loop)||(this.loop=A.loop),Je(A.playbackRate)||(this.playbackRate=A.playbackRate))}updateListener(A){if(this.player){if(A.onDurationChange){let{onDurationChange:e}=A;this.player.ondurationchange=o=>{e(o.target.duration)}}if(A.onTimeUpdate){let e=A.onTimeUpdate,{player:o}=this;o.ontimeupdate=()=>{e(o.currentTime,o.duration)}}A.onEnded&&(this.player.onended=A.onEnded)}}reload(A){return KA(this,null,function*(){if(A.url){let e=yield tj.download(A.url,{retries:3,type:"blob"});this.audioObjectURL&&URL.revokeObjectURL(this.audioObjectURL),this.audioObjectURL=URL.createObjectURL(e),this.player&&this.publisher?(this.player.src=this.audioObjectURL,this.publisher.src=this.audioObjectURL):(this.player=new Audio(this.audioObjectURL),this.player.crossOrigin="anonymous",this.publisher=new Audio(this.audioObjectURL),this.publisher.crossOrigin="anonymous",this.mixInput.replaceSource(this.publisher),this.updateListener(A),this.updateSettings(A))}else this.mixInput.replaceSource(A.track)})}reset(){this.seek(0),this.mixInput.connect()}seek(A){this.player&&(A<0&&A>this.player.duration||(this.player.currentTime=A,this.publisher.currentTime=A))}play(){var A,e;return Promise.all([(A=this.player)==null?void 0:A.play(),(e=this.publisher)==null?void 0:e.play()])}pause(){var A,e;(A=this.player)==null||A.pause(),(e=this.publisher)==null||e.pause()}stop(){var A;(A=this.player)==null||A.pause(),this.mixInput.disconnect()}setOperation(A){A==="pause"&&this.pause(),A==="resume"&&(this.pause(),this.play()),A==="stop"&&(this.pause(),this.seek(0))}set volume(A){!this.player||!this.publisher||(this.player.volume=A,this.publisher.volume=A)}set loop(A){!this.player||!this.publisher||(this.player.loop=A,this.publisher.loop=A)}set playbackRate(A){!this.player||!this.publisher||(this.player.playbackRate=A,this.publisher.playbackRate=A)}};function B_(A,e){if(e&&typeof e!="function")throw new wo({code:Ro.INVALID_PARAMETER,message:"start audioMixer plugin: param ".concat(A," should be a function.")})}var EL=class bL{constructor(e){this.core=e,Y(this,"log"),Y(this,"mixedMusicMap",new Map),Y(this,"cacheMusicMap",new Map),aj+=1,this.log=e.log.createChild({id:"".concat(this.getAlias()).concat(aj)}),this.log.info("created id=".concat(this.getAlias()).concat(aj))}getName(){return bL.Name}getAlias(){return"ax"}getGroup(e){return e?.id}getValidateRule(e){switch(e){case"start":return bL.startValidateRule;case"update":return bL.updateValidateRule;case"stop":return bL.stopValidateRule}}start(e){return KA(this,null,function*(){let{room:o}=this.core;this.core.validateSourceNode(),this.log.info("add music source, id: ".concat(e.id," url: ").concat(e.url,", track: ").concat(e.track));let{id:a,url:c}=e;if(this.mixedMusicMap.has(a))return;let d=this.cacheMusicMap.get(a);d?e.url?d.reset():(d.mixInput.replaceSource(e.track),d.mixInput.connect()):(d=new fiA(e,o.audioManager),this.cacheMusicMap.set(a,d)),d.updateListener(e),d.updateSettings(e);try{yield d.play()}catch(C){yield this.handleAutoPlayFailed(d,e,C)}this.mixedMusicMap.set(a,d),d.mixInput.source.node&&this.core.room.audioManager.updateAudioReference({type:"add",audioReference:d.mixInput.source.node,refId:"ax-".concat(a)}),this.log.info("start mix audio track ".concat(a," success.")),ii.addEnum({key:502700,value:3}),this.kvUpload(e)})}handleAutoPlayFailed(e,o,a){return KA(this,null,function*(){if(a.name==="NotSupportedError")this.log.error("play failed, try to reload source. error: ".concat(a)),yield e.reload(o),yield e.play();else{if(a.name!=="NotAllowedError")throw a;if(this.core.room.enableAutoPlayDialog){let c=()=>{var d;(d=e.play())==null||d.finally(()=>{F.off("154",c,this)})};F.on("154",c,this),YC()}else this.core.trtc.emit(Hi.AUTOPLAY_FAILED,{userId:"",mediaType:"audio",resume:()=>KA(this,null,function*(){return e.play()})})}})}update(e){return KA(this,null,function*(){let{id:o,operation:a,seekFrom:c,playbackRate:d}=e;this.log.info("update music source, ".concat(JSON.stringify(e)));let C=this.mixedMusicMap.get(o);C?(C.updateSettings(e),C.updateListener(e),Je(a)||C.setOperation(a),Je(c)||C.seek(c),this.kvUpload(e)):this.log.warn("update music source failed, music id: ".concat(o," not found."))})}stop(e){return KA(this,arguments,function(o){var a=this;let{id:c}=o;return function*(){if(a.mixedMusicMap.has(c)){a.log.info("remove music source, music id: ".concat(c));let d=a.mixedMusicMap.get(c);d!=null&&d.mixInput.source.node&&a.core.room.audioManager.updateAudioReference({type:"remove",audioReference:d.mixInput.source.node,refId:"ax-".concat(c)}),d?.stop(),a.mixedMusicMap.delete(c)}c==="*"&&a.destroyAllMusic()}()})}kvUpload(e){let{track:o,loop:a,volume:c,playbackRate:d,operation:C,seekFrom:y,onTimeUpdate:S,onDurationChange:k,onEnded:V}=e;o&&ii.addCount({key:502009}),a&&ii.addCount({key:502001}),c&&ii.addCount({key:502002}),d&&ii.addCount({key:502003}),C&&ii.addCount({key:502004}),y&&ii.addCount({key:502005}),typeof S!="function"&&ii.addCount({key:502007}),typeof V!="function"&&ii.addCount({key:502008}),typeof k!="function"&&ii.addCount({key:502006})}destroyAllMusic(){this.log.info("destroy all music source."),this.mixedMusicMap.forEach((e,o)=>{e!=null&&e.mixInput.track&&this.core.room.audioManager.updateAudioReference({type:"remove",audioReference:e.mixInput.track,refId:o}),this.stop({id:o})})}destroyAllCache(){this.log.info("destroy all music cache."),this.cacheMusicMap.clear()}destroy(){this.log.info("destroy audio mixer plugin."),this.destroyAllMusic(),this.destroyAllCache()}};Y(EL,"startValidateRule",{name:"options",required:!0,type:"object",properties:{id:{type:"string",required:!0},url:{type:"string",required:!1},track:{required:!1},loop:{type:"boolean"},volume:{type:"number"}},validate(A,e,o){if(A.url&&A.url!=="*"){let a=A.url.split("?")[0],c=["mp3","ogg","wav","flac"],d=a.split(".").pop(),C=c.indexOf(d)>=0,y=a.startsWith("blob"),S=a.startsWith("data");if(!(C||y||S))throw new wo({code:Ro.INVALID_PARAMETER,message:"start audioMixer plugin: music url is invalid, please check your file format.",fnName:o})}if(!A.url&&!A.track)throw new wo({code:Ro.INVALID_PARAMETER,message:"start audioMixer plugin: param url or track is required.",fnName:o});B_("onTimeUpdate",A.onTimeUpdate),B_("onEnded",A.onEnded),B_("onDurationChange",A.onDurationChange)}}),Y(EL,"updateValidateRule",{name:"options",required:!0,type:"object",properties:{id:{type:"string",required:!0},loop:{type:"boolean"},volume:{type:"number"},seekFrom:{type:"number"},operation:{type:"string",values:["pause","resume","stop"]}},validate(A,e,o){B_("onTimeUpdate",A.onTimeUpdate),B_("onEnded",A.onEnded),B_("onDurationChange",A.onDurationChange)}}),Y(EL,"stopValidateRule",{name:"options",type:"object",required:!0,properties:{id:{type:"string",required:!0}}}),Y(EL,"Name","AudioMixer");var gj,yiA=EL,cj=0,h1=class kL{constructor(e){this.core=e,Y(this,"log"),Y(this,"audioContext",FI()),Y(this,"workletNode"),Y(this,"config",{enableFarFieldReduce:!1,farFieldReduceThreshold:.5}),cj+=1,this.log=e.log.createChild({id:"".concat(this.getAlias()).concat(cj)}),this.log.info("created id=".concat(this.getAlias()).concat(cj))}static startValidateRule(e){return{name:"options",required:!0,type:"object",properties:{sdkAppId:{type:"number",required:!0},userId:{type:"string",required:!0},userSig:{type:"string",required:!0},mode:{type:"number",required:!1,values:[0,1]},farFieldReduceThreshold:{type:"number",required:!1,min:0,max:1}},validate(o,a,c,d){if(!e.room.audioManager.hasAudioTrack)throw new wo({code:Ro.INVALID_OPERATION,extraCode:5106,fnName:c})}}}preload(e){return gj||(gj=this.doPreload(e)),gj}doPreload(e){return KA(this,null,function*(){let o=yield this.core.fileDownloader.download(e,{type:"blob"}),a=URL.createObjectURL(o);try{yield Vg(this.audioContext,a)}catch(c){throw this.log.error("load worklet failed",c),c}finally{URL.revokeObjectURL(a)}})}getName(){return kL.Name}getAlias(){return"ad"}getGroup(){return"AIDenoiser"}getValidateRule(e){switch(e){case"start":return kL.startValidateRule(this.core);case"update":return kL.updateValidateRule;case"stop":return kL.stopValidateRule}}start(e){return KA(this,null,function*(){let{room:o,schedule:a}=this.core,{assetsPath:c=this.core.assetsPath}=e;if(!c)throw new wo({code:Ro.INVALID_PARAMETER,message:"you need to deploy the assets of the npm package and set assetsPath param in TRTC.create()"});if(this.core.validateSourceNode(),yield this.preload("".concat(c,"/denoiser-wasm").concat(bM()?"":"-nosimd",".js")),!this.workletNode){let d=String(Date.now()).slice(0,-3),{auth:C,sign:y,status:S,message:k}=yield function(V,J){return KA(this,arguments,function(gA,CA){let{sdkAppId:MA,userId:$A,userSig:Be,timestamp:Ye}=CA;return function*(){try{let{data:{errCode:ve,errMsg:yi,sign:Ge,status:Bt}}=yield gA.getAbilityConfig(MA,gA.ScheduleRequestType.AUDIO_AI_AUTH,{sdkAppId:MA,userId:$A,userSig:Be,timestamp:Ye});if(Bt==="1")return{auth:!0,sign:Ge,status:Bt,message:yi};let hi=Kd(MA)?"https://trtc.io/document/42734?platform=web&product=rtcengine&menulabel=coresdk":"https://cloud.tencent.com/document/product/647/44247",Di="Init RTCAIDenoiser failed.",Vo="";switch(ve){case 1:Vo="Please check your params.";break;case 2:Vo="You need to buy packages. Refer to: ".concat(hi);break;case 3:Vo="Server is invalid. Please contact our engineer. ";break;case 4:Vo="Your packages is not active. Refer to: ".concat(hi);break;case 5:Vo="Your packages is expired. Refer to: ".concat(hi);break;case 6:Vo="Your version is not supported."}return{auth:!1,status:Bt,message:yi?"".concat(Di," Reason: ").concat(yi,". ").concat(Vo):"".concat(Di,", ").concat(Vo)}}catch(ve){return{auth:!1,status:"0",message:"Init RTCAIDenoiser failed. All requests failed. ".concat(ve)}}}()})}(a,Qo(mi({},e),{timestamp:d}));if(!C)throw this.log.info("RTCAIDenoiser: ".concat(e.userId," auth result: ").concat(C,". Message: ").concat(k)),new wo({code:Ro.INVALID_PARAMETER,message:k});this.workletNode=new AudioWorkletNode(this.audioContext,"trtc-denoiser-processor",{numberOfInputs:1,numberOfOutputs:1}),this.workletNode.port.postMessage({type:"init",data:{sdkAppId:String(e.sdkAppId),userId:e.userId,timestamp:d,sign:y,status:S}}),this.workletNode.port.onmessage=V=>{var J;let{data:gA}=V;if(gA.type==="cost"){let CA=gA?.max>20?"warn":gA?.max>10?"info":"debug";this.log[CA]("avg cost: ".concat(gA.value," max: ").concat(gA?.max,"(").concat(mb(new Date(gA?.maxCostTimestamp)),") hist: ").concat((J=gA?.hist)==null?void 0:J.join(" ")))}else gA.type==="log"&&this.log[gA.logLevel]("".concat(gA.value))}}this.updateConfig(e),this.workletNode.port.postMessage({type:"enable"}),o.audioManager.addDenoiser(this.workletNode),o.sendAbilityStatus({ai_denoise:1})})}update(e){return KA(this,null,function*(){this.updateConfig(e)})}stop(){return KA(this,null,function*(){if(!this.workletNode)return;let{room:e}=this.core;this.workletNode.port.postMessage({type:"disable"}),yield e.audioManager.removeDenoiser(this.workletNode)})}updateConfig(e){if(!this.workletNode)return;let o=!1;Je(e.mode)||(e.mode===0?this.config.enableFarFieldReduce=!1:e.mode===1&&(this.config.enableFarFieldReduce=!0),o=!0),Je(e.farFieldReduceThreshold)||(this.config.farFieldReduceThreshold=e.farFieldReduceThreshold,o=!0),o&&this.workletNode.port.postMessage({type:"setConfig",data:this.config})}destroy(){this.workletNode&&(this.workletNode.port.onmessage=null)}};Y(h1,"updateValidateRule",{type:"object",properties:{mode:{type:"number",required:!1,values:[0,1]},farFieldReduceThreshold:{type:"number",required:!1,min:0,max:1}}}),Y(h1,"stopValidateRule",{type:"object"}),Y(h1,"Name","AIDenoiser");var DiA=h1,SiA=gc(Kl(),1),MiA=class extends SiA.EventEmitter{constructor(){super(),Y(this,"observer"),Y(this,"state","nominal"),this.onPressureChange=this.onPressureChange.bind(this)}get stateNum(){switch(this.state){case"nominal":return 1;case"fair":return 2;case"serious":return 3;case"critical":return 4}}start(){return KA(this,null,function*(){if(!this.observer)try{"PressureObserver"in window&&!Ha&&(this.observer=new PressureObserver(this.onPressureChange),yield this.observer.observe("cpu",{sampleInterval:2e3}))}catch(A){sn.uploadEvent({log:"stat-pressure-detector-start-failed",error:A})}})}onPressureChange(A){let e=this.stateNum,o=A[A.length-1];this.state=o.state,(this.stateNum>3||e>3)&&QA.info("".concat(o.source,": ").concat(o.state)),this.emit("state-changed",{type:o.source,state:this.state})}destroy(){var A;try{(A=this.observer)==null||A.disconnect(),this.observer=null}catch(e){sn.uploadEvent({log:"stat-pressure-detector-destroy-failed",error:e})}}},Bz=new MiA,lj=0,Ij=class U9{constructor(e){this.core=e,Y(this,"log"),Y(this,"_seiMessageList",[]),Y(this,"_smallSeiMessageList",[]),Y(this,"_subStreamSeiMessageList",[]),lj++,this.log=e.log.createChild({id:"".concat(this.getAlias()).concat(lj)}),this.log.info("[sei] created id=".concat(this.getAlias()).concat(lj)),this.encode=this.encode.bind(this),this.decode=this.decode.bind(this)}encode(e){let{frame:o,mediaType:a}=e;try{return gz({frame:o,seiMessageList:a===8?this._smallSeiMessageList:a===2?this._subStreamSeiMessageList:this._seiMessageList})}catch(c){this.log.warn(c)}return o}decode(e){let{frame:o,track:a}=e;return cz({frame:o,onSEI:c=>{c.forEach(d=>{a!=null&&a.userId?this.core.trtc.emit(Hi.SEI_MESSAGE,{seiPayloadType:d.seiPayloadType,data:d.seiPayload.buffer,userId:a.userId,streamType:a.mediaType===2?"sub":"main"}):this.core.innerEmitter.emit(this.core.INNER_EVENT.SEI_MESSAGE,{room:this.core.room,nalu:d})})}})}destroy(){this.log.debug("destroy"),this.stop(),delete this.core}getValidateRule(e){switch(e){case"start":case"update":case"stop":return{type:"object"}}}start(){this.core.room.videoManager.addEncodeProcessor({processor:Kp?this.encode:gz,type:2}),this.core.room.videoManager.addDecodeProcessor({processor:Kp?this.decode:cz,type:2})}stop(){this.core.room.videoManager.removeEncodeProcessor({type:2}),this.core.room.videoManager.removeDecodeProcessor({type:2})}update(e){let{buffer:o,options:a}=e;var c;let d=[a.seiPayloadType,o],C=!!a.small;a.toSubStream?this._subStreamSeiMessageList.push(d):(this._seiMessageList.push(d),C&&this._smallSeiMessageList.push(d)),(c=this.core.room.scriptTransformWorker)==null||c.postMessage({type:"sei",data:d,isMain:!a.toSubStream,small:C})}getName(){return U9.Name}getAlias(){return"sei"}getGroup(){return"sei"}};Y(Ij,"autoStart",!0),Y(Ij,"Name","SEI");var B1,viA=Ij,RiA=0,uj=class F9{constructor(e){this.core=e,Y(this,"_core"),Y(this,"log"),Y(this,"dialog"),this._core=e,this.log=e.log.createChild({id:"".concat(this.getAlias()).concat(++RiA)}),this.log.info("created")}getName(){return F9.Name}getAlias(){return"dm"}getGroup(){return"dm"}getValidateRule(e){switch(e){case"start":return{name:"StartDebugOptions",required:!1};case"update":return{name:"UpdateDebugOptions",required:!1};case"stop":return{name:"StopDebugOptions",required:!1}}}start(){return KA(this,null,function*(){var e;!new URLSearchParams(location.search).has("trtcDebug")&&((e=window.sessionStorage)==null?void 0:e.getItem("TRTC_ENABLE_DEBUG_PLUGIN"))!=="true"||(yield this.openDebugDiaLog())})}update(e){return KA(this,arguments,function(o){var a=this;let{visible:c}=o;return function*(){c?yield a.openDebugDiaLog():a.closeDebugDiaLog()}()})}stop(){this.closeDebugDiaLog()}destroy(){this.stop()}openDebugDiaLog(){return KA(this,null,function*(){var e;if(!this.dialog)try{if(B1)yield B1;else{let o=new URLSearchParams(location.search).get("trtcDebugDialogPath")||((e=window.sessionStorage)==null?void 0:e.getItem("TRTC_DEBUG_DIALOG_PATH"))||"https://unpkg.com/".concat("trtc-sdk-v5","@").concat(qd,"/assets/debug-dialog.js");B1=this._core.fileDownloader.loadScript(o),yield B1}this.dialog=new TRTCDebugDialog(this._core,this.log),this._core.kvStatManager.addSuccessEvent({key:592705})}catch(o){this._core.kvStatManager.addFailedEvent({key:592705}),this.log.error("load debug dialog script failed: ",JSON.stringify(o))}})}closeDebugDiaLog(){this.dialog&&(this.dialog.closeDialog(),this.dialog=null)}};Y(uj,"Name","Debug"),Y(uj,"autoStart",!0);var wiA=uj,Qz=A=>{switch(A){case"webCodecs":return 504703;case"wasm":return 504704}throw new Error("decoder type not supported")},pz=class{constructor(A,e,o){Y(this,"trackDoneOB"),Y(this,"startOB"),Y(this,"stopOB"),Y(this,"inputFrameCount",0),Y(this,"decodedFrameCount",0),Y(this,"type","auto"),Y(this,"config"),Y(this,"decoder"),Y(this,"_decodeSink");let{kvStatManager:a,trtc:c}=A;this.config=o.config,this.trackDoneOB=ca(e,Zs.INIT),this.stopOB=EQ(),this.startOB=EQ(),o.type==="auto"?this.type="webCodecs":this.type=o.type;let d=EQ();ma(this.startOB,FK(0),$2(C=>{let y=this.pipe(e);return d.next("STARTING"),e.log.info("decoder type: ".concat(this.type)),ma(y,EE(this.stopOB),Bl(()=>{},S=>{e.log.error(S),a.addFailedEvent({key:Qz(this.type),error:S}),C>4?this.startOB.error(S):this.startOB.next(C+1)})),ma(y,l_(1),N5(xK))}),EE(this.stopOB),Bl(()=>{e.player.setOutput(),d.next("STARTED")},C=>{d.next("FAILED")},()=>{a.addSuccessEvent({key:Qz(this.type)}),a.addSuccessEvent({key:504702})}))}mock(A){this._decodeSink?this._decodeSink.error(A):this.startOB.next(0)}close(A){this.stopOB.next(A)}pipe(A){return AL()(e=>KA(this,null,function*(){this._decodeSink=e,e.defer(()=>{var a;(a=this.decoder)==null||a.close()});let{type:o}=this;try{o==="webCodecs"&&(this.decoder=new AudioDecoder({error:a=>{A.log.error(a),e.error(4)},output:a=>{this.decodedFrameCount++,e.next(a),A.player.write(a)}})),this.decoder.configure(this.config)}catch(a){A.log.error(a),e.error(o==="webCodecs"?2:6)}}))}decodeFrame(A){var e;this.inputFrameCount++,((e=this.decoder)==null?void 0:e.state)==="configured"&&this.decoder.decode(new EncodedAudioChunk({data:A.data,timestamp:A.timestamp,type:"key"}))}},_iA={type:"object"},mz=class U3{constructor(e){this.core=e,Y(this,"log"),Y(this,"contextMap",new Map),Y(this,"decodeProcessorMap",new WeakMap),this.log=e.log.createChild({id:"".concat(this.getAlias())})}getAlias(){return U3.Name}getGroup(e){return e.track.userId+e.track.streamType}getName(){return U3.Name}getValidateRule(e){return _iA}start(e){let{track:o}=e;this.decodeProcessorMap.set(o,this.decode(e)),this.core.room.audioManager.addDecodeProcessor({processor:a=>{let{frame:c,track:d}=a;return this.decodeProcessorMap.has(d)?this.decodeProcessorMap.get(d)({frame:c,track:d}):c},type:3})}decode(e){return o=>{let{frame:a,track:c}=o;if(c!==e.track)return a;if(this.contextMap.has(c))return this.contextMap.get(c).decodeFrame(a);let d=new pz(this.core,c,e);return ma(d.trackDoneOB,l_(1),Bl(()=>{this.core.clearStarted(this,this.getGroup(e)),this.stop({track:c})})),this.contextMap.set(c,d),d.decodeFrame(a)}}stop(e){let{track:o}=e,a=this.contextMap.get(o);a&&(a.close("stop"),this.contextMap.delete(o),this.contextMap.size===0&&this.core.room.audioManager.removeDecodeProcessor({type:3}))}update(e){let o=this.contextMap.get(e.track);if(o){if(e.type==="mock")return void o.mock(10);o.close("update"),this.contextMap.set(e.track,new pz(this.core,e.track,e))}}};Y(mz,"Name","TRTCAudioDecoder");var fz=mz,TiA={rttPoorLimit:150,lossPoorLimit:20,rttGoodLimit:100,lossGoodLimit:10,fpsPoorLimit:5,cooldownTime:1e4,poorCount:3,goodCount:5,maxUpgradeFailCount:3},NiA=class{constructor(){Y(this,"log"),Y(this,"autoMode",{enabled:!1,instance:null,config:TiA,sortedStreamList:[],currentQualityIndex:0}),Y(this,"switchControl",{isInternal:!1,isSwitching:!1,lastSwitchTime:0,boundOnStatistics:null}),Y(this,"networkMetrics",{frameRate:0,rtt:0,loss:0}),Y(this,"counters",{rttUnder:0,lossUnder:0,downgradeCondition:0,upgradeFail:0}),Y(this,"onStatistics",A=>{var e,o;if(!this.autoMode.instance)return;let{config:a}=this.autoMode;if(this.networkMetrics.rtt=A.rtt,this.networkMetrics.loss=A.downLoss,this.counters.rttUnder=A.rttV.userId===d);if((o=y?.video)==null||!o.length)return;let S=C==="sub"?"sub":"big",k=y.video.find(V=>V.videoType===S);k?(this.networkMetrics.frameRate=k.frameRate||0,this.checkAndSwitchQuality()):this.log.warn("onStatistics: videoStat not found for userId=".concat(d,", streamType=").concat(C))}),this.log=QA.createLogger({id:"pqs"})}getCurrentPlayingStream(A){var e,o;let a=A,c=a._playbackQualityList;if(!c||c.length===0)return this.log.warn("getCurrentPlayingStream: streamList is empty"),null;for(let d of c){let C=A.room.remotePublishedUserMap.get(d.userId);if(!C)continue;let y=(e=d.streamType)!=null?e:"main";if((y==="sub"?C.remoteAuxiliaryTrack:C.remoteVideoTrack).isPlayCalled){let S=(o=a._remoteVideoConfigMap.get("".concat(d.userId,"_").concat(y)))==null?void 0:o.config;if(S)return{userId:d.userId,streamType:y,config:S}}}return null}switchPlaybackQuality(A){return KA(this,null,function*(){var e;let{trtcInstance:o,streamList:a,quality:c}=A;this.log.info("switchPlaybackQuality quality: ".concat(c,", streamList: ").concat(JSON.stringify(a)));let d=o;if(a&&a.length>0&&(d._playbackQualityList=a.map(MA=>{var $A;return Qo(mi({},MA),{streamType:($A=MA.streamType)!=null?$A:"main"})})),c==="auto")return void(yield this.startAutoMode(o));if(this.autoMode.enabled&&c&&!this.switchControl.isInternal&&this.stopAutoMode(),!c)return;if(!d._playbackQualityList||d._playbackQualityList.length<=0)return void this.log.warn("switchPlaybackQuality: streamList is empty, please call with streamList first");let C=d._playbackQualityList.find(MA=>MA.name===c);if(!C)return void this.log.warn('switchPlaybackQuality: quality "'.concat(c,'" not found in streamList'));let y=this.getCurrentPlayingStream(o);if(this.log.info("currentPlaying userId: ".concat(y?.userId,", streamType: ").concat(y?.streamType)),!y)return;let S=(e=C.streamType)!=null?e:"main";if(y.userId===C.userId&&y.streamType===S)return void this.log.info("switchPlaybackQuality: already playing target stream");let k=mi({},y.config);k.streamType==="main"&&S==="main"&&(yield o.muteRemoteAudio(k.userId,!0));let V,J=new Promise(MA=>{V=MA}),gA=MA=>{MA.userId===C.userId&&MA.streamType===S&&MA.state==="PLAYING"&&MA.reason==="playing"&&V("success")};o.on(Hi.VIDEO_PLAY_STATE_CHANGED,gA);let CA=new Promise(MA=>setTimeout(()=>MA("timeout"),1e4));try{if(yield o.startRemoteVideo(Qo(mi({},y.config),{userId:C.userId,streamType:S,option:Qo(mi({},y.config.option),{isLiveStream:!0})})),(yield Promise.race([J,CA]))==="timeout"){this.log.error("switchPlaybackQuality: VIDEO_PLAY_STATE_CHANGED timeout, rollback");try{yield o.stopRemoteVideo({userId:C.userId,streamType:S})}catch($A){this.log.warn("switchPlaybackQuality: rollback stopRemoteVideo failed",$A)}throw k.streamType==="main"&&S==="main"&&(yield o.muteRemoteAudio(k.userId,!1).catch($A=>{this.log.warn("switchPlaybackQuality: rollback muteRemoteAudio failed",$A)})),new ai({code:dt.SUBSCRIPTION_TIMEOUT,message:Xo({key:Mo.SWITCH_PLAYBACK_QUALITY_TIMEOUT,data:{userId:C.userId}})})}let MA=o.stopRemoteVideo(k);k.streamType==="main"&&S==="main"?yield Promise.all([o.muteRemoteAudio(C.userId,!1).catch($A=>{this.log.warn("muteRemoteAudio(new, false) failed",$A)}),MA]):yield MA,d._currentLiveUserId=C.userId,d._currentLiveStreamType=S}finally{o.off(Hi.VIDEO_PLAY_STATE_CHANGED,gA)}})}startAutoMode(A){return KA(this,null,function*(){if(this.autoMode.enabled)return void this.log.info("auto mode already enabled");let e=A;if(!e._playbackQualityList||e._playbackQualityList.length<=1)return void this.log.warn("startAutoMode: need at least 2 streams in streamList for auto mode");this.autoMode.enabled=!0,this.autoMode.instance=A,this.counters.rttUnder=0,this.counters.lossUnder=0,this.counters.downgradeCondition=0,this.counters.upgradeFail=0,this.switchControl.lastSwitchTime=0;let o=e._playbackQualityList||[];this.autoMode.sortedStreamList=[...o].sort((c,d)=>d.bitrate-c.bitrate),this.log.info("auto mode streams: ".concat(this.autoMode.sortedStreamList.map(c=>"".concat(c.name,"(").concat(c.bitrate,"kbps)")).join(" > ")));let a=this.getCurrentPlayingStream(A);if(a){let{userId:c,streamType:d}=a,C=this.autoMode.sortedStreamList.findIndex(y=>{var S;return y.userId===c&&((S=y.streamType)!=null?S:"main")===d});this.autoMode.currentQualityIndex=C>=0?C:0}else this.autoMode.currentQualityIndex=0;this.switchControl.boundOnStatistics=this.onStatistics,A.on(Hi.STATISTICS,this.switchControl.boundOnStatistics),this.log.info("auto mode started")})}stopAutoMode(){this.autoMode.enabled&&(this.autoMode.instance&&this.switchControl.boundOnStatistics&&this.autoMode.instance.off(Hi.STATISTICS,this.switchControl.boundOnStatistics),this.switchControl.boundOnStatistics=null,this.autoMode.enabled=!1,this.autoMode.instance=null,this.autoMode.sortedStreamList=[],this.autoMode.currentQualityIndex=0,this.counters.rttUnder=0,this.counters.lossUnder=0,this.counters.downgradeCondition=0,this.counters.upgradeFail=0,this.networkMetrics.frameRate=0,this.networkMetrics.rtt=0,this.networkMetrics.loss=0,this.switchControl.isSwitching=!1,this.log.info("auto mode stopped"))}checkAndSwitchQuality(){var A;if(!this.autoMode.enabled||!this.autoMode.instance||this.switchControl.isSwitching)return;let{config:e}=this.autoMode,o=Date.now()-this.switchControl.lastSwitchTime0,C=this.networkMetrics.frameRate<=e.fpsPoorLimit,y=this.networkMetrics.loss>=e.lossPoorLimit||this.networkMetrics.rtt>=e.rttPoorLimit,S=C&&y;this.counters.downgradeCondition=S?this.counters.downgradeCondition+1:0;let k=this.counters.rttUnder>=e.goodCount&&this.counters.lossUnder>=e.goodCount,V=this.counters.upgradeFail{if(V.remoteAudioTrack.isAvailable){if(S.get(V.userId))return;let J=y.getPCM(gA=>{e.emit(Hi.AUDIO_FRAME,gA)},V.userId);S.set(V.userId,J)}});else{if(S.get(a))return;let V=y.getPCM(J=>{e.emit(Hi.AUDIO_FRAME,J)},a);S.set(a,V)}else if(a==="*")e.room.remotePublishedUserMap.forEach(V=>{if(V.remoteAudioTrack.isSubscribed){let{userId:J}=V,gA=S.get(J);gA?.abort("disable"),S.delete(J)}});else{let V=S.get(a);V?.abort("disable"),S.delete(a)}})}resumeRemotePlayer(A){return KA(this,null,function*(){if(A.userId==="*"){let o=[];return A.trtcInstance.room.remotePublishedUserMap.forEach(a=>{let{remoteAudioTrack:c,remoteVideoTrack:d,remoteAuxiliaryTrack:C}=a;A.streamType?A.streamType==="main"?(c.isAvailable&&o.push(c.player.resume()),d.isAvailable&&o.push(d.player.resume())):C.isAvailable&&o.push(C.player.resume()):(c.isAvailable&&o.push(c.player.resume()),d.isAvailable&&o.push(d.player.resume()),C.isAvailable&&o.push(C.player.resume()))}),Promise.all(o)}let e=A.trtcInstance.room.remotePublishedUserMap.get(A.userId);if(e)return A.streamType==="main"?Promise.all([e.remoteAudioTrack.player.resume(),e.remoteVideoTrack.player.resume()]):e.remoteAuxiliaryTrack.player.resume()})}pauseRemotePlayer(A){if(A.userId==="*")A.trtcInstance.room.remotePublishedUserMap.forEach(e=>{let{remoteAudioTrack:o,remoteVideoTrack:a,remoteAuxiliaryTrack:c}=e;A.streamType?A.streamType==="main"?(o.isAvailable&&o.player.pause(),a.isAvailable&&a.player.pause(!1)):c.isAvailable&&c.player.pause(!1):(o.isAvailable&&o.player.pause(),a.isAvailable&&a.player.pause(!1),c.isAvailable&&c.player.pause(!1))});else{let e=A.trtcInstance.room.remotePublishedUserMap.get(A.userId);e&&(A.streamType==="main"?(e.remoteAudioTrack.player.pause(),e.remoteVideoTrack.player.pause(!1)):e.remoteAuxiliaryTrack.player.pause(!1))}}requestPictureInPicture(A){let e=[...A.trtcInstance.room.remotePublishedUserMap.values()].find(o=>o.remoteVideoTrack.isAvailable);return e?A.enable?e.remoteVideoTrack.player.enterPictureInPicture():e.remoteVideoTrack.player.exitPictureInPicture():Promise.reject(new ai({code:dt.INVALID_OPERATION,message:"no available remote video"}))}requestFullScreen(A){let e=[...A.trtcInstance.room.remotePublishedUserMap.values()].find(o=>o.remoteVideoTrack.isAvailable);return e?A.enable?e.remoteVideoTrack.player.enterFullscreen():e.remoteVideoTrack.player.exitFullscreen():Promise.reject(new ai({code:dt.INVALID_OPERATION,message:"no available remote video"}))}switchPlaybackQuality(A){return KA(this,null,function*(){let e=A.trtcInstance;return e._playbackQualitySwitcher||(e._playbackQualitySwitcher=new NiA),e._playbackQualitySwitcher.switchPlaybackQuality(A)})}prelink(A){return KA(this,null,function*(){let{trtcInstance:e}=A;return A.enable?e.room.prelink(A.sdkAppId,A.userId,A.userSig,CL.frameWorkType,A.roomId,A.strRoomId):e.room.closePrelink()})}};Ci([x5({name:"options",type:"object",required:!0,properties:{enable:{required:!0,type:"boolean"},userId:{required:!0,type:"string"},sampleRate:{type:"number",values:[8e3,16e3,32e3,44100,48e3]},channelCount:{type:"number",values:[1,2]},port:{type:"messageport"}}})],Ej.prototype,"enableAudioFrameEvent"),Ci([x5({name:"options",type:"object",required:!0,properties:{enable:{required:!0,type:"boolean"},userId:{required:!1,type:"string"},sdkAppId:{required:!1,type:"number"},userSig:{required:!1,type:"string"},roomId:{required:!1,type:"number"},strRoomId:{required:!1,type:"string"}}})],Ej.prototype,"prelink");var GiA=new Ej,biA=gc(Kl(),1),kiA=class extends biA.EventEmitter{constructor(){super(),Y(this,"states",{}),Y(this,"permissionChangeHandler"),Y(this,"log"),this.log=QA.createLogger({id:"pm"}),this.permissionChangeHandler=()=>{var A,e;this.emit("permission-state-change",{camera:(A=this.states.camera)==null?void 0:A.state,microphone:(e=this.states.microphone)==null?void 0:e.state})}}request(A){return KA(this,null,function*(){if(this.log.info("request ".concat(A.join(", "))),A.length===0)return Promise.resolve();(yield navigator.mediaDevices.getUserMedia({video:A.includes("camera"),audio:A.includes("microphone")})).getTracks().forEach(e=>e.stop())})}get(A){return KA(this,null,function*(){try{return this.states[A]||(this.states[A]=yield navigator.permissions.query({name:A}),this.states[A].addEventListener("change",this.permissionChangeHandler)),this.log.info("get ".concat(A," permission state: ").concat(this.states[A].state)),this.states[A].state}catch(e){return this.log.error("get ".concat(A," permission failed, error: ").concat(e instanceof Error?e.message:e)),null}})}destroy(){Object.values(this.states).forEach(A=>{A?.removeEventListener("change",this.permissionChangeHandler)}),this.states={}}},Q1=new kiA,yz=0,dL=new Set,Zl=null;Nx(Cz),jA.checkStorage();var Ss=class nm extends iK.EventEmitter{constructor(e,o){super(),Y(this,"_room"),Y(this,"_eventListened",new Set),Y(this,"_localVideoTrack",null),Y(this,"_localAudioTrack",null),Y(this,"_localScreenTrack",null),Y(this,"_localScreenAudioTrack",null),Y(this,"_localVideoConfig",null),Y(this,"_localScreenConfig",null),Y(this,"_localAudioConfig",null),Y(this,"_remoteVideoConfigMap",new Map),Y(this,"_remoteAudioConfigMap",new Map),Y(this,"_remoteAudioVolumeMap",new Map),Y(this,"_remoteAudioMuteMap",new Map),Y(this,"_mediaTrackMap",new WeakMap),Y(this,"_log",QA.createLogger({id:"t".concat(++yz)})),Y(this,"_plugins",new Map),Y(this,"_networkQuality",null),Y(this,"_speakerId"),Y(this,"enterRoomParams"),Y(this,"_enableAutoSwitchWhenRecapturing",!0),Y(this,"_autoSubscribeDataChannel",!1),Y(this,"_playbackQualityList",[]),this._room=new e(mi({logger:this._log,frameWorkType:nm.frameWorkType},o)),this._room.videoDecodeFallbackType=o.videoDecodeFallback,Nr(o.enableAutoSwitchWhenRecapturing)&&(this._enableAutoSwitchWhenRecapturing=o.enableAutoSwitchWhenRecapturing),this._log.info("create() ".concat(JSON.stringify(o,(a,c)=>a==="plugins"?c.map(d=>d.Name):c))),Object.defineProperties(this,{dumpAudio:{enumerable:!1,value(a){return this._room.audioManager.dump(a)}}}),o.plugins&&o.plugins.forEach(a=>{this._use(a,o.assetsPath)}),this._use(yiA,o.assetsPath),this._use(miA,o.assetsPath),this._use(DiA,o.assetsPath),this._use(fz,o.assetsPath),this._use(wiA),o.enableSEI&&xk&&this._use(viA),this._room.on("audio-volume",a=>{var c,d;!a.find(C=>C.userId==="")&&this._localAudioTrack&&a.push({userId:"",volume:Math.floor(100*((c=this._localAudioTrack.getInternalAudioLevelAfter3A())!=null?c:this._localAudioTrack.getAudioLevel())),floatVolume:(d=this._localAudioTrack.getInternalAudioLevelAfter3A())!=null?d:this._localAudioTrack.getInternalAudioLevel()}),o.volumeType===1&&a.forEach(C=>{var y;let S=C.userId===""?this._localAudioTrack:(y=this.room.remotePublishedUserMap.get(C.userId))==null?void 0:y.remoteAudioTrack;S&&(C.volume=S.dbVolume)}),o.enableDbVolume&&a.forEach(C=>{var y;let S=C.userId===""?this._localAudioTrack:(y=this.room.remotePublishedUserMap.get(C.userId))==null?void 0:y.remoteAudioTrack;S&&(C.volume=S.dbVolume)}),this.emit(Hi.AUDIO_VOLUME,{result:a.sort((C,y)=>y.volume-C.volume)})}),this._room.videoManager.on("error",a=>{this._log.error(new wo({code:Ro.OPERATION_FAILED,extraCode:5504,message:a.message,originError:a}))}),this._listenEvents(),this._initActiveSpeaker(),((a,c)=>{let{emit:d}=a;a.emit=function(){for(var C=arguments.length,y=new Array(C),S=0;S{let S=[],k=[],V=[],J=0;self.onmessage=cA=>{switch(cA.data.type){case"sei":cA.data.isMain?(S.push(cA.data.data),cA.data.small&&V.push(cA.data.data)):k.push(cA.data.data);break;case"ntp-offset":J=cA.data.data}},self.onrtctransform=cA=>{let{options:CA}=cA.transformer,MA=CA.isReceiver?kz({userId:CA.userId,streamType:CA.streamType,isAudio:CA.isAudio}):bz({getNtpTime:()=>Date.now()+J,isAudio:CA.isAudio,isMain:CA.isMain,seiMessageList:CA.isMain?CA.small?V:S:k});cA.transformer.readable.pipeThrough(MA).pipeTo(cA.transformer.writable)}},")();").concat(a,"})()"),d=new Blob([l],{type:"text/javascript"}),h=URL.createObjectURL(d),y=new Worker(h);return URL.revokeObjectURL(h),y}var Uz,Bj=class{constructor(A){Y(this,"audioPlayer"),Y(this,"videoPlayer"),Y(this,"log"),this.audioPlayer=A.audioPlayer,this.videoPlayer=A.videoPlayer,this.log=A.log.createChild({id:"pip"}),this.videoPlayer.on(yo.USER_RESUME_IN_PIP_OR_FULL_SCREEN,this.handleUserResumeInPIPOrFullScreen,this),this.videoPlayer.on(yo.USER_PAUSE_IN_PIP_OR_FULL_SCREEN,this.handleUserPauseInPIPOrFullScreen,this),this.videoPlayer.on(yo.ENTER_PICTURE_IN_PICTURE,this.handleEnterPIPOrFullScreen,this),this.videoPlayer.on(yo.ENTER_FULL_SCREEN,this.handleEnterPIPOrFullScreen,this),this.videoPlayer.on(yo.LEAVE_PICTURE_IN_PICTURE,this.handleLeavePIP,this),this.videoPlayer.on(yo.LEAVE_FULL_SCREEN,this.handleLeaveFullScreen,this),this.videoPlayer.on(yo.VOLUME_CHANGE,this.handleVolumeChange,this)}handleUserResumeInPIPOrFullScreen(){this.audioPlayer.isPaused&&(this.log.warn("resume audio in ".concat(this.videoPlayer.isPictureInPicture()?"pip":"fullscreen")),this.audioPlayer.doResume()),Ha&&ay&&this.videoPlayer.resetSrcObjectToReplay()}handleUserPauseInPIPOrFullScreen(){this.audioPlayer.isPaused||(this.log.warn("pause audio in ".concat(this.videoPlayer.isPictureInPicture()?"pip":"fullscreen")),this.audioPlayer.doPause())}handleEnterPIPOrFullScreen(){this.videoPlayer.element&&this.audioPlayer.muted!==this.videoPlayer.element.muted&&(this.log.warn("sync video muted to ".concat(this.audioPlayer.muted," when enter ").concat(this.videoPlayer.isPictureInPicture()?"pip":"fullscreen")),this.videoPlayer.element.muted=this.audioPlayer.muted)}handleLeavePIP(){this.audioPlayer.isPaused&&!this.audioPlayer.isPausedByUserCall&&(this.log.warn("resume after leave pip"),this.audioPlayer.doResume()),this.videoPlayer.isPaused&&!this.videoPlayer.isPausedByUserCall&&(this.log.warn("resume video after leave pip"),this.videoPlayer.doResume())}handleLeaveFullScreen(){this.audioPlayer.isPaused&&!this.audioPlayer.isPausedByUserCall&&(this.log.warn("resume audio after leave fullscreen"),this.audioPlayer.doResume()),this.videoPlayer.isPaused&&!this.videoPlayer.isPausedByUserCall&&(this.log.warn("resume video after leave fullscreen"),Ha&&ay?this.videoPlayer.resetSrcObjectToReplay():this.videoPlayer.doResume())}handleVolumeChange(A){A.muted!==void 0&&this.audioPlayer.muted!==A.muted&&(this.log.warn("sync audio muted to ".concat(A.muted," in ").concat(this.videoPlayer.isPictureInPicture()?"pip":"fullscreen")),this.audioPlayer.setMuted(A.muted))}destroy(){this.videoPlayer.off(yo.USER_RESUME_IN_PIP_OR_FULL_SCREEN,this.handleUserResumeInPIPOrFullScreen,this),this.videoPlayer.off(yo.USER_PAUSE_IN_PIP_OR_FULL_SCREEN,this.handleUserPauseInPIPOrFullScreen,this),this.videoPlayer.off(yo.ENTER_PICTURE_IN_PICTURE,this.handleEnterPIPOrFullScreen,this),this.videoPlayer.off(yo.ENTER_FULL_SCREEN,this.handleEnterPIPOrFullScreen,this),this.videoPlayer.off(yo.LEAVE_PICTURE_IN_PICTURE,this.handleLeavePIP,this),this.videoPlayer.off(yo.LEAVE_FULL_SCREEN,this.handleLeaveFullScreen,this),this.videoPlayer.off(yo.VOLUME_CHANGE,this.handleVolumeChange,this)}},Fz=!1;function jiA(A){var e=this;let{TRTC:o,room:a,errorModule:l,assetsPath:d}=A;return{TRTC:o,LocalMixVideoTrack:gj,LocalVideoTrack:BQ,LocalScreenTrack:WM,room:a,assetsPath:d,fileDownloader:hj,innerEmitter:F,INNER_EVENT:nA,constants:xx,environment:D2,utils:oz,eventLogger:sn,log:this.room.getLogger(),loggerManager:pA,errorModule:l,kvStatManager:si,rtcDectection:re,trtc:this,rx:G5,enums:Ue,schedule:yz,getDevices:t1,initVisionTaskRegistry:function(h,y){let S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"/mediapipe/vision.js";return WA(e,null,function*(){!window.VisionTaskRegistry&&!Fz&&(Fz=!0,Uz=hj.loadScript("".concat(h,"/").concat(S).replace(/([^:]\/)\/+/g,"$1"))),yield Uz,yield(yield window.VisionTaskRegistry.getInstance(h)).preloadModels(y)})},audioContext:OI(),deviceDetector:Pc,AudioPlayer:WK,RemoteAudioPlayer:v5,VideoPlayer:Ro,showAutoPlayDialog:HC,Timer:Gr,clearStarted:(h,y)=>{let S=h.getAlias(),k=BL.instances.get(this);if(k)if(y){let V=k.get(S+y);if(!V)return;V.started=!1}else k.forEach((V,J)=>{J.startsWith(S)&&(V.started=!1)})},startGetPCM:uj,createAudioNode:$2,getNetworkTimeOffset:Ox,validateSourceNode:()=>{var h;if(or&&((h=this.room.audioManager._localAudioPipline)==null||!h.source.node))throw new _o({code:wo.DEVICE_ERROR,extraCode:5310,message:"The audio processing plugin cannot be used due to the microphone's sampling rate is not 48KHz in Firefox. Please switch to another browser such as Chrome."})},createScriptTransformWorker:Lz,AVPlayerStateSyncManager:Bj,PlayerEvent:yo}}var p_=new WeakMap,Oz="5.15.3-beta.12";function Bu(){for(var A=arguments.length,e=new Array(A),o=0;ofunction(){for(var d=arguments.length,h=new Array(d),y=0;yfunction(){for(var d=arguments.length,h=new Array(d),y=0;yXf(V)?nM(V):Vn(V)?V:Cg(V))},value:o}})}else if(!Ke(e.type)&&Cg(o)!==e.type)throw new _o(h(5002));if(e.allowEmpty===!1){let k=kn(o)&&(o===0||Number.isNaN(o)),V=Vn(o)&&o.trim()==="";if(k||V)throw new _o(h(5003))}if(e.notLessThanZero&&kn(o)&&o<0)throw new _o(h(5006));if(!Ke(e.min)&&kn(o)&&oe.max)throw new _o(h(5008));if(Vn(e.instanceOf)){if(!o||o._name!==e.instanceOf)throw new _o(h(5004))}else if(Ra(e.instanceOf)&&!(o instanceof e.instanceOf))throw new _o(h(5004));if(Array.isArray(e.values)&&!e.values.includes(o))throw new _o(h(5005));let{properties:y}=e;IE(y)&&XE(o)&&Object.keys(y).forEach(k=>{S1.call(this,{rule:y[k],value:o&&o[k],key:"".concat(k),fnName:l,className:d})});let{arrayItem:S}=e;IE(S)&&wa(o)&&o.forEach((k,V)=>{S1.call(this,{rule:S,value:k,key:"".concat(a,"[").concat(V,"]"),fnName:l,className:d})}),Ra(e.validate)&&e.validate.call(this,o,a,l,d,this)}var WiA=0;function fa(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},{getRemoteId:e=()=>"",replaceArg:o,getKVReportKey:a,ignoreLog:l,ignoreErrorLog:d}=A;return jr((h,y)=>function(){for(var S=arguments.length,k=new Array(S),V=0;V0?ie.info("".concat(y,"() ").concat(pe," ").concat(JSON.stringify(k,(Di,Le)=>MA(Di,Le,["userSig","privateMapKey"])))):ie.info("".concat(y,"() ").concat(pe));let qe=a?a(...k):O2[y],we=d?.(...k)||!1;try{let Di=h.apply(this,k),Le=ko();if(Zf(Di)){let Qt="".concat(y.includes("Plugin")?"".concat(((cA=(J=k[0]).getName)==null?void 0:cA.call(J))||""," "):" ");return Di.then(Bi=>(ie.info("".concat(y,"() success ").concat(pe," ").concat(Qt).concat(e.call(this,...k))),si.addSuccessEvent({key:qe,cost:ko()-Le}),Bi)).catch(Bi=>{var Si;let Jo=(Bi=_o.convertFrom.call(this,Bi,y,k.length===1?k[0]:k)).extraCode||Bi.code,Ho=(Si=Bi.message)!=null&&Si.includes(Jo)?"":" code:".concat(Jo),Qn=Bi?.code===wo.OPERATION_ABORT;throw we||ie[Qn?"warn":"error"]("".concat(y,"() failed ").concat(pe," ").concat(Qt).concat(e.call(this,...k)," ").concat(Bi).concat(Ho," params: ").concat(JSON.stringify(k,MA))),si.addFailedEvent({key:qe,error:Bi}),Bi})}return si.addSuccessEvent({key:qe}),Di}catch(Di){let Le=(Di=_o.convertFrom.call(this,Di,y)).extraCode||Di.code,Qt=(CA=Di.message)!=null&&CA.includes(Le)?"":" code:".concat(Le),Bi=Di?.code===wo.OPERATION_ABORT;throw we||ie[Bi?"warn":"error"]("".concat(y,"() failed ").concat(pe," ").concat(Di).concat(Qt," params: ").concat(JSON.stringify(k,MA))),si.addFailedEvent({key:qe,error:Di}),Di}})}var pj,mj=A=>jr((e,o)=>function(a,l){return WA(this,null,function*(){let d=this._plugins.get(a);if(!d)throw this._log.error("plugin ".concat(String(a)," is not found")),new _o({code:wo.OPERATION_ABORT,message:"plugin ".concat(String(a)," is not found"),fnName:o});if(Ra(d.constructor.isSupported)&&!d.constructor.isSupported())throw this._log.error("plugin ".concat(String(a)," is not supported")),new _o({code:wo.ENV_NOT_SUPPORTED,message:"plugin ".concat(String(a)," is not supported"),extraCode:5210,fnName:o});return Qj.call(this,d.getValidateRule(A),[l],o,"TRTC"),e.call(this,d,l)})}),fj=0,M1=class OL{constructor(e){this.core=e,Y(this,"log"),Y(this,"customAudioReferenceMap",new Map),Y(this,"audioRefId",0),Y(this,"audioContext",OI()),Y(this,"localAudioWorkletNode"),Y(this,"screenAudioWorkletNode"),Y(this,"mixNode"),Y(this,"silentNode"),fj+=1,this.log=e.log.createChild({id:"".concat(this.getAlias()).concat(fj)}),this.log.info("created id=".concat(this.getAlias()).concat(fj)),this.installEvent()}static getStartValidateRule(e){return{name:"options",required:!0,type:"object",properties:{sdkAppId:{type:"number",required:!0},userId:{type:"string",required:!0},userSig:{type:"string",required:!0}},validate(o,a,l,d){if(!e.room.audioManager.hasAudioTrack&&!e.room.audioManager.hasScreenAudioTrack)throw new _o({code:wo.INVALID_OPERATION,extraCode:5106,fnName:l})}}}preload(e){return pj||(pj=this.doPreload(e)),pj}doPreload(e){return WA(this,null,function*(){let o=yield this.core.fileDownloader.download(e,{type:"blob"}),a=URL.createObjectURL(o);try{yield Vg(this.audioContext,a)}catch(l){this.log.error("preload audioProcessor failed. ".concat(l))}finally{URL.revokeObjectURL(a)}})}getName(){return OL.Name}getAlias(){return"ap"}getGroup(){return"ap"}getValidateRule(e){switch(e){case"start":return OL.getStartValidateRule(this.core);case"update":return OL.updateValidateRule;case"stop":return OL.stopValidateRule}}start(e){return WA(this,null,function*(){var o,a,l,d;let{room:h}=this.core,{sdkAppId:y,userId:S,userSig:k,assetsPath:V=this.core.assetsPath,audioReference:J,processLevel:cA,enableDump:CA,isLocalAudioNeedAudioProcess:MA=!0,isScreenAudioNeedAudioProcess:ie=!1}=e;if(this.core.room.audioManager.isLocalAudioNeedAudioProcess=MA,this.core.room.audioManager.isScreenAudioNeedAudioProcess=ie,!V)throw new _o({code:wo.INVALID_PARAMETER,message:"you need to deploy the assets of the npm package and set assetsPath param in TRTC.create()"});if(this.core.validateSourceNode(),yield this.preload("".concat(V,"/audioProcessor-wasm.js")),MA&&!this.localAudioWorkletNode){let{sign:pe,status:qe,timestamp:we}=yield this.getAuthData(y,S,k);this.localAudioWorkletNode=new AudioWorkletNode(this.audioContext,"trtc-audio-processor",{numberOfInputs:2,numberOfOutputs:1}),this.initWorkletNode(this.localAudioWorkletNode,"localAudio",y,S,we,pe,qe,h)}if(ie&&!this.screenAudioWorkletNode){let{sign:pe,status:qe,timestamp:we}=yield this.getAuthData(y,S,k);this.screenAudioWorkletNode=new AudioWorkletNode(this.audioContext,"trtc-audio-processor",{numberOfInputs:2,numberOfOutputs:1}),this.initWorkletNode(this.screenAudioWorkletNode,"screenAudio",y,S,we,pe,qe,h)}this.mixNode||(this.mixNode=this.audioContext.createGain(),this.mixNode.gain.value=1),this.silentNode||(this.silentNode=this.audioContext.createConstantSource(),this.silentNode.offset.setValueAtTime(0,this.audioContext.currentTime),this.silentNode.start()),(o=this.localAudioWorkletNode)==null||o.port.postMessage({type:"enable"}),(a=this.screenAudioWorkletNode)==null||a.port.postMessage({type:"enable"}),h.audioManager.addAudioProcessor(this.mixNode,this.silentNode,this.localAudioWorkletNode,this.screenAudioWorkletNode),Ke(J)||J.forEach(pe=>{this.customAudioReferenceMap.set(pe,"o-".concat(this.audioRefId++)),this.core.room.audioManager.updateAudioReference({type:"add",audioReference:pe,refId:"o-".concat(this.audioRefId++)})}),Ke(cA)||(l=this.localAudioWorkletNode)==null||l.port.postMessage({type:"setConfig",data:{aecEnable:1,aecNlpLevel:cA}}),Ke(CA)||(d=this.localAudioWorkletNode)==null||d.port.postMessage({type:"dump",data:{enable:CA}})})}update(e){return WA(this,null,function*(){var o,a,l;let{audioReference:d,enableDump:h,processLevel:y}=e;Ke(d)||(this.customAudioReferenceMap.forEach((S,k)=>{this.customAudioReferenceMap.delete(k),this.core.room.audioManager.updateAudioReference({type:"remove",refId:S})}),d.forEach(S=>{this.customAudioReferenceMap.set(S,"o-".concat(this.audioRefId++)),this.core.room.audioManager.updateAudioReference({type:"add",audioReference:S,refId:"o-".concat(this.audioRefId++)})})),Ke(y)||(o=this.localAudioWorkletNode)==null||o.port.postMessage({type:"setConfig",data:{aecEnable:1,aecNlpLevel:y}}),Ke(h)||((a=this.localAudioWorkletNode)==null||a.port.postMessage({type:"dump",data:{enable:h}}),(l=this.screenAudioWorkletNode)==null||l.port.postMessage({type:"dump",data:{enable:h}}))})}stop(){return WA(this,null,function*(){var e,o;let{room:a}=this.core;(e=this.localAudioWorkletNode)==null||e.port.postMessage({type:"disable"}),(o=this.screenAudioWorkletNode)==null||o.port.postMessage({type:"disable"}),yield a.audioManager.removeAudioProcessor(this.localAudioWorkletNode,this.screenAudioWorkletNode)})}destroy(){this.localAudioWorkletNode&&(this.localAudioWorkletNode.port.onmessage=null),this.screenAudioWorkletNode&&(this.screenAudioWorkletNode.port.onmessage=null),this.uninstallEvent()}getAuthData(e,o,a){return WA(this,null,function*(){let l=String(Date.now()).slice(0,-3),{auth:d,sign:h,status:y,message:S}=yield function(k){return WA(this,arguments,function(V){let{sdkAppId:J,userId:cA,userSig:CA,timestamp:MA}=V;return function*(){let ie="".concat(function(Jo){let Ho=arguments.length>1&&arguments[1]!==void 0?arguments[1]:YA.MAIN;return"https://".concat(om[Ho]||dj(Jo,Ho),"/api/v1/audioAiAuth")}(J),"?sdkAppId=").concat(J,"&userId=").concat(cA,"&userSig=").concat(CA,"×tamp=").concat(MA),pe=yield fetch(ie),{data:{errCode:qe,errMsg:we,sign:Di,status:Le}}=yield pe.json();if(Le==="1")return{auth:!0,sign:Di,status:Le,message:we};let Qt=Kd(J)?"https://trtc.io/document/42734?platform=web&product=rtcengine&menulabel=coresdk":"https://cloud.tencent.com/document/product/647/44247",Bi="Init RTCAudioProcessor failed.",Si="";switch(qe){case 1:Si="Please check your params.";break;case 2:Si="You need to buy packages. Refer to: ".concat(Qt);break;case 3:Si="Server is invalid. Please contact our engineer. ";break;case 4:Si="Your packages is not active. Refer to: ".concat(Qt);break;case 5:Si="Your packages is expired. Refer to: ".concat(Qt);break;case 6:Si="Your version is not supported."}return{auth:!1,status:Le,message:we?"".concat(Bi," Reason: ").concat(we,". ").concat(Si):"".concat(Bi,", ").concat(Si)}}()})}({sdkAppId:e,userSig:a,userId:o,timestamp:l});if(!d)throw this.log.info("audioProcessor: ".concat(o," auth result: ").concat(d,". Message: ").concat(S)),new _o({code:wo.INVALID_PARAMETER,message:S});return{sign:h,status:y,timestamp:l}})}initWorkletNode(e,o,a,l,d,h,y,S){e.port.postMessage({type:"init",data:{sdkAppId:String(a),userId:l,timestamp:d,sign:h,status:y}}),e.port.onmessage=k=>{var V;let{data:J}=k;switch(J.type){case"cost":let cA=J?.value>10?"info":"debug";return void this.log[cA]("".concat(o==="localAudio"?"":"[".concat(o,"] "),"avg cost: ").concat(J.value," max: ").concat(J?.max,"(").concat(vb(new Date(J?.maxCostTimestamp)),") hist: ").concat((V=J?.hist)==null?void 0:V.join(" ")));case"log":return void this.log[J.logLevel]("".concat(o==="localAudio"?"":"[".concat(o,"] ")).concat(J.value));case"dump":return void F.emit("265",{room:S,data:J.value,type:o==="localAudio"?"dump":"dump-screen-audio"});case"detectEcho":return void this.log.warn("".concat(o==="localAudio"?"":"[".concat(o,"] "),"detect echo: ").concat(W0()?cQ():Hp()))}}}handleLocalAudioStarted(e){return WA(this,null,function*(){var o;if(this.hitTest(e.room)&&((o=this.core.room.scheduleResult.config)==null?void 0:o.audioProcessor)===!0)try{yield this.core.trtc.startPlugin("AudioProcessor",{sdkAppId:this.core.room.sdkAppId,userId:this.core.room.userId,userSig:this.core.room.userSig}),this.log.warn("audio processor auto start success")}catch(a){this.log.warn("audio processor auto start failed, error: ".concat(a))}})}handleLocalAudioStopped(e){return WA(this,null,function*(){var o;!this.hitTest(e.room)||((o=this.core.room.scheduleResult.config)==null?void 0:o.audioProcessor)!==!0||(yield this.core.trtc.stopPlugin("AudioProcessor"))})}installEvent(){this.core.innerEmitter.on("104",this.handleLocalAudioStarted,this),this.core.innerEmitter.on("114",this.handleLocalAudioStopped,this)}uninstallEvent(){this.core.innerEmitter.off("104",this.handleLocalAudioStarted,this),this.core.innerEmitter.off("114",this.handleLocalAudioStopped,this)}hitTest(e){return e===this.core.room}};Y(M1,"updateValidateRule",{type:"object"}),Y(M1,"stopValidateRule",{type:"object"}),Y(M1,"Name","AudioProcessor");var ziA=M1,yj=0,ZiA=class{constructor(A,e){Y(this,"audioObjectURL"),Y(this,"player"),Y(this,"publisher"),Y(this,"mixInput"),this.mixInput=new p5(e),A.url?(this.player=new Audio(A.url),this.player.crossOrigin="anonymous",this.publisher=new Audio(A.url),this.publisher.crossOrigin="anonymous",this.mixInput.replaceSource(this.publisher)):this.mixInput.replaceSource(A.track),this.mixInput.connect()}updateSettings(A){this.player&&(Ke(A.volume)||(this.volume=A.volume),Ke(A.loop)||(this.loop=A.loop),Ke(A.playbackRate)||(this.playbackRate=A.playbackRate))}updateListener(A){if(this.player){if(A.onDurationChange){let{onDurationChange:e}=A;this.player.ondurationchange=o=>{e(o.target.duration)}}if(A.onTimeUpdate){let e=A.onTimeUpdate,{player:o}=this;o.ontimeupdate=()=>{e(o.currentTime,o.duration)}}A.onEnded&&(this.player.onended=A.onEnded)}}reload(A){return WA(this,null,function*(){if(A.url){let e=yield hj.download(A.url,{retries:3,type:"blob"});this.audioObjectURL&&URL.revokeObjectURL(this.audioObjectURL),this.audioObjectURL=URL.createObjectURL(e),this.player&&this.publisher?(this.player.src=this.audioObjectURL,this.publisher.src=this.audioObjectURL):(this.player=new Audio(this.audioObjectURL),this.player.crossOrigin="anonymous",this.publisher=new Audio(this.audioObjectURL),this.publisher.crossOrigin="anonymous",this.mixInput.replaceSource(this.publisher),this.updateListener(A),this.updateSettings(A))}else this.mixInput.replaceSource(A.track)})}reset(){this.seek(0),this.mixInput.connect()}seek(A){this.player&&(A<0&&A>this.player.duration||(this.player.currentTime=A,this.publisher.currentTime=A))}play(){var A,e;return Promise.all([(A=this.player)==null?void 0:A.play(),(e=this.publisher)==null?void 0:e.play()])}pause(){var A,e;(A=this.player)==null||A.pause(),(e=this.publisher)==null||e.pause()}stop(){var A;(A=this.player)==null||A.pause(),this.mixInput.disconnect()}setOperation(A){A==="pause"&&this.pause(),A==="resume"&&(this.pause(),this.play()),A==="stop"&&(this.pause(),this.seek(0))}set volume(A){!this.player||!this.publisher||(this.player.volume=A,this.publisher.volume=A)}set loop(A){!this.player||!this.publisher||(this.player.loop=A,this.publisher.loop=A)}set playbackRate(A){!this.player||!this.publisher||(this.player.playbackRate=A,this.publisher.playbackRate=A)}};function m_(A,e){if(e&&typeof e!="function")throw new _o({code:wo.INVALID_PARAMETER,message:"start audioMixer plugin: param ".concat(A," should be a function.")})}var pL=class PL{constructor(e){this.core=e,Y(this,"log"),Y(this,"mixedMusicMap",new Map),Y(this,"cacheMusicMap",new Map),yj+=1,this.log=e.log.createChild({id:"".concat(this.getAlias()).concat(yj)}),this.log.info("created id=".concat(this.getAlias()).concat(yj))}getName(){return PL.Name}getAlias(){return"ax"}getGroup(e){return e?.id}getValidateRule(e){switch(e){case"start":return PL.startValidateRule;case"update":return PL.updateValidateRule;case"stop":return PL.stopValidateRule}}start(e){return WA(this,null,function*(){let{room:o}=this.core;this.core.validateSourceNode(),this.log.info("add music source, id: ".concat(e.id," url: ").concat(e.url,", track: ").concat(e.track));let{id:a,url:l}=e;if(this.mixedMusicMap.has(a))return;let d=this.cacheMusicMap.get(a);d?e.url?d.reset():(d.mixInput.replaceSource(e.track),d.mixInput.connect()):(d=new ZiA(e,o.audioManager),this.cacheMusicMap.set(a,d)),d.updateListener(e),d.updateSettings(e);try{yield d.play()}catch(h){yield this.handleAutoPlayFailed(d,e,h)}this.mixedMusicMap.set(a,d),d.mixInput.source.node&&this.core.room.audioManager.updateAudioReference({type:"add",audioReference:d.mixInput.source.node,refId:"ax-".concat(a)}),this.log.info("start mix audio track ".concat(a," success.")),si.addEnum({key:502700,value:3}),this.kvUpload(e)})}handleAutoPlayFailed(e,o,a){return WA(this,null,function*(){if(a.name==="NotSupportedError")this.log.error("play failed, try to reload source. error: ".concat(a)),yield e.reload(o),yield e.play();else{if(a.name!=="NotAllowedError")throw a;if(this.core.room.enableAutoPlayDialog){let l=()=>{var d;(d=e.play())==null||d.finally(()=>{F.off("154",l,this)})};F.on("154",l,this),HC()}else this.core.trtc.emit(Ki.AUTOPLAY_FAILED,{userId:"",mediaType:"audio",resume:()=>WA(this,null,function*(){return e.play()})})}})}update(e){return WA(this,null,function*(){let{id:o,operation:a,seekFrom:l,playbackRate:d}=e;this.log.info("update music source, ".concat(JSON.stringify(e)));let h=this.mixedMusicMap.get(o);h?(h.updateSettings(e),h.updateListener(e),Ke(a)||h.setOperation(a),Ke(l)||h.seek(l),this.kvUpload(e)):this.log.warn("update music source failed, music id: ".concat(o," not found."))})}stop(e){return WA(this,arguments,function(o){var a=this;let{id:l}=o;return function*(){if(a.mixedMusicMap.has(l)){a.log.info("remove music source, music id: ".concat(l));let d=a.mixedMusicMap.get(l);d!=null&&d.mixInput.source.node&&a.core.room.audioManager.updateAudioReference({type:"remove",audioReference:d.mixInput.source.node,refId:"ax-".concat(l)}),d?.stop(),a.mixedMusicMap.delete(l)}l==="*"&&a.destroyAllMusic()}()})}kvUpload(e){let{track:o,loop:a,volume:l,playbackRate:d,operation:h,seekFrom:y,onTimeUpdate:S,onDurationChange:k,onEnded:V}=e;o&&si.addCount({key:502009}),a&&si.addCount({key:502001}),l&&si.addCount({key:502002}),d&&si.addCount({key:502003}),h&&si.addCount({key:502004}),y&&si.addCount({key:502005}),typeof S!="function"&&si.addCount({key:502007}),typeof V!="function"&&si.addCount({key:502008}),typeof k!="function"&&si.addCount({key:502006})}destroyAllMusic(){this.log.info("destroy all music source."),this.mixedMusicMap.forEach((e,o)=>{e!=null&&e.mixInput.track&&this.core.room.audioManager.updateAudioReference({type:"remove",audioReference:e.mixInput.track,refId:o}),this.stop({id:o})})}destroyAllCache(){this.log.info("destroy all music cache."),this.cacheMusicMap.clear()}destroy(){this.log.info("destroy audio mixer plugin."),this.destroyAllMusic(),this.destroyAllCache()}};Y(pL,"startValidateRule",{name:"options",required:!0,type:"object",properties:{id:{type:"string",required:!0},url:{type:"string",required:!1},track:{required:!1},loop:{type:"boolean"},volume:{type:"number"}},validate(A,e,o){if(A.url&&A.url!=="*"){let a=A.url.split("?")[0],l=["mp3","ogg","wav","flac"],d=a.split(".").pop(),h=l.indexOf(d)>=0,y=a.startsWith("blob"),S=a.startsWith("data");if(!(h||y||S))throw new _o({code:wo.INVALID_PARAMETER,message:"start audioMixer plugin: music url is invalid, please check your file format.",fnName:o})}if(!A.url&&!A.track)throw new _o({code:wo.INVALID_PARAMETER,message:"start audioMixer plugin: param url or track is required.",fnName:o});m_("onTimeUpdate",A.onTimeUpdate),m_("onEnded",A.onEnded),m_("onDurationChange",A.onDurationChange)}}),Y(pL,"updateValidateRule",{name:"options",required:!0,type:"object",properties:{id:{type:"string",required:!0},loop:{type:"boolean"},volume:{type:"number"},seekFrom:{type:"number"},operation:{type:"string",values:["pause","resume","stop"]}},validate(A,e,o){m_("onTimeUpdate",A.onTimeUpdate),m_("onEnded",A.onEnded),m_("onDurationChange",A.onDurationChange)}}),Y(pL,"stopValidateRule",{name:"options",type:"object",required:!0,properties:{id:{type:"string",required:!0}}}),Y(pL,"Name","AudioMixer");var Dj,XiA=pL,Sj=0,v1=class xL{constructor(e){this.core=e,Y(this,"log"),Y(this,"audioContext",OI()),Y(this,"workletNode"),Y(this,"config",{enableFarFieldReduce:!1,farFieldReduceThreshold:.5}),Sj+=1,this.log=e.log.createChild({id:"".concat(this.getAlias()).concat(Sj)}),this.log.info("created id=".concat(this.getAlias()).concat(Sj))}static startValidateRule(e){return{name:"options",required:!0,type:"object",properties:{sdkAppId:{type:"number",required:!0},userId:{type:"string",required:!0},userSig:{type:"string",required:!0},mode:{type:"number",required:!1,values:[0,1]},farFieldReduceThreshold:{type:"number",required:!1,min:0,max:1}},validate(o,a,l,d){if(!e.room.audioManager.hasAudioTrack)throw new _o({code:wo.INVALID_OPERATION,extraCode:5106,fnName:l})}}}preload(e){return Dj||(Dj=this.doPreload(e)),Dj}doPreload(e){return WA(this,null,function*(){let o=yield this.core.fileDownloader.download(e,{type:"blob"}),a=URL.createObjectURL(o);try{yield Vg(this.audioContext,a)}catch(l){throw this.log.error("load worklet failed",l),l}finally{URL.revokeObjectURL(a)}})}getName(){return xL.Name}getAlias(){return"ad"}getGroup(){return"AIDenoiser"}getValidateRule(e){switch(e){case"start":return xL.startValidateRule(this.core);case"update":return xL.updateValidateRule;case"stop":return xL.stopValidateRule}}start(e){return WA(this,null,function*(){let{room:o,schedule:a}=this.core,{assetsPath:l=this.core.assetsPath}=e;if(!l)throw new _o({code:wo.INVALID_PARAMETER,message:"you need to deploy the assets of the npm package and set assetsPath param in TRTC.create()"});if(this.core.validateSourceNode(),yield this.preload("".concat(l,"/denoiser-wasm").concat(UM()?"":"-nosimd",".js")),!this.workletNode){let d=String(Date.now()).slice(0,-3),{auth:h,sign:y,status:S,message:k}=yield function(V,J){return WA(this,arguments,function(cA,CA){let{sdkAppId:MA,userId:ie,userSig:pe,timestamp:qe}=CA;return function*(){try{let{data:{errCode:we,errMsg:Di,sign:Le,status:Qt}}=yield cA.getAbilityConfig(MA,cA.ScheduleRequestType.AUDIO_AI_AUTH,{sdkAppId:MA,userId:ie,userSig:pe,timestamp:qe});if(Qt==="1")return{auth:!0,sign:Le,status:Qt,message:Di};let Bi=Kd(MA)?"https://trtc.io/document/42734?platform=web&product=rtcengine&menulabel=coresdk":"https://cloud.tencent.com/document/product/647/44247",Si="Init RTCAIDenoiser failed.",Jo="";switch(we){case 1:Jo="Please check your params.";break;case 2:Jo="You need to buy packages. Refer to: ".concat(Bi);break;case 3:Jo="Server is invalid. Please contact our engineer. ";break;case 4:Jo="Your packages is not active. Refer to: ".concat(Bi);break;case 5:Jo="Your packages is expired. Refer to: ".concat(Bi);break;case 6:Jo="Your version is not supported."}return{auth:!1,status:Qt,message:Di?"".concat(Si," Reason: ").concat(Di,". ").concat(Jo):"".concat(Si,", ").concat(Jo)}}catch(we){return{auth:!1,status:"0",message:"Init RTCAIDenoiser failed. All requests failed. ".concat(we)}}}()})}(a,po(fi({},e),{timestamp:d}));if(!h)throw this.log.info("RTCAIDenoiser: ".concat(e.userId," auth result: ").concat(h,". Message: ").concat(k)),new _o({code:wo.INVALID_PARAMETER,message:k});this.workletNode=new AudioWorkletNode(this.audioContext,"trtc-denoiser-processor",{numberOfInputs:1,numberOfOutputs:1}),this.workletNode.port.postMessage({type:"init",data:{sdkAppId:String(e.sdkAppId),userId:e.userId,timestamp:d,sign:y,status:S}}),this.workletNode.port.onmessage=V=>{var J;let{data:cA}=V;if(cA.type==="cost"){let CA=cA?.max>20?"warn":cA?.max>10?"info":"debug";this.log[CA]("avg cost: ".concat(cA.value," max: ").concat(cA?.max,"(").concat(vb(new Date(cA?.maxCostTimestamp)),") hist: ").concat((J=cA?.hist)==null?void 0:J.join(" ")))}else cA.type==="log"&&this.log[cA.logLevel]("".concat(cA.value))}}this.updateConfig(e),this.workletNode.port.postMessage({type:"enable"}),o.audioManager.addDenoiser(this.workletNode),o.sendAbilityStatus({ai_denoise:1})})}update(e){return WA(this,null,function*(){this.updateConfig(e)})}stop(){return WA(this,null,function*(){if(!this.workletNode)return;let{room:e}=this.core;this.workletNode.port.postMessage({type:"disable"}),yield e.audioManager.removeDenoiser(this.workletNode)})}updateConfig(e){if(!this.workletNode)return;let o=!1;Ke(e.mode)||(e.mode===0?this.config.enableFarFieldReduce=!1:e.mode===1&&(this.config.enableFarFieldReduce=!0),o=!0),Ke(e.farFieldReduceThreshold)||(this.config.farFieldReduceThreshold=e.farFieldReduceThreshold,o=!0),o&&this.workletNode.port.postMessage({type:"setConfig",data:this.config})}destroy(){this.workletNode&&(this.workletNode.port.onmessage=null)}};Y(v1,"updateValidateRule",{type:"object",properties:{mode:{type:"number",required:!1,values:[0,1]},farFieldReduceThreshold:{type:"number",required:!1,min:0,max:1}}}),Y(v1,"stopValidateRule",{type:"object"}),Y(v1,"Name","AIDenoiser");var $iA=v1,AoA=gc(jl(),1),eoA=class extends AoA.EventEmitter{constructor(){super(),Y(this,"observer"),Y(this,"state","nominal"),this.onPressureChange=this.onPressureChange.bind(this)}get stateNum(){switch(this.state){case"nominal":return 1;case"fair":return 2;case"serious":return 3;case"critical":return 4}}start(){return WA(this,null,function*(){if(!this.observer)try{"PressureObserver"in window&&!Ha&&(this.observer=new PressureObserver(this.onPressureChange),yield this.observer.observe("cpu",{sampleInterval:2e3}))}catch(A){sn.uploadEvent({log:"stat-pressure-detector-start-failed",error:A})}})}onPressureChange(A){let e=this.stateNum,o=A[A.length-1];this.state=o.state,(this.stateNum>3||e>3)&&pA.info("".concat(o.source,": ").concat(o.state)),this.emit("state-changed",{type:o.source,state:this.state})}destroy(){var A;try{(A=this.observer)==null||A.disconnect(),this.observer=null}catch(e){sn.uploadEvent({log:"stat-pressure-detector-destroy-failed",error:e})}}},xz=new eoA,Mj=0,vj=class nX{constructor(e){this.core=e,Y(this,"log"),Y(this,"_seiMessageList",[]),Y(this,"_smallSeiMessageList",[]),Y(this,"_subStreamSeiMessageList",[]),Mj++,this.log=e.log.createChild({id:"".concat(this.getAlias()).concat(Mj)}),this.log.info("[sei] created id=".concat(this.getAlias()).concat(Mj)),this.encode=this.encode.bind(this),this.decode=this.decode.bind(this)}encode(e){let{frame:o,mediaType:a}=e;try{return Nz({frame:o,seiMessageList:a===8?this._smallSeiMessageList:a===2?this._subStreamSeiMessageList:this._seiMessageList})}catch(l){this.log.warn(l)}return o}decode(e){let{frame:o,track:a}=e;return Gz({frame:o,onSEI:l=>{l.forEach(d=>{a!=null&&a.userId?this.core.trtc.emit(Ki.SEI_MESSAGE,{seiPayloadType:d.seiPayloadType,data:d.seiPayload.buffer,userId:a.userId,streamType:a.mediaType===2?"sub":"main"}):this.core.innerEmitter.emit(this.core.INNER_EVENT.SEI_MESSAGE,{room:this.core.room,nalu:d})})}})}destroy(){this.log.debug("destroy"),this.stop(),delete this.core}getValidateRule(e){switch(e){case"start":case"update":case"stop":return{type:"object"}}}start(){this.core.room.videoManager.addEncodeProcessor({processor:zp?this.encode:Nz,type:2}),this.core.room.videoManager.addDecodeProcessor({processor:zp?this.decode:Gz,type:2})}stop(){this.core.room.videoManager.removeEncodeProcessor({type:2}),this.core.room.videoManager.removeDecodeProcessor({type:2})}update(e){let{buffer:o,options:a}=e;var l;let d=[a.seiPayloadType,o],h=!!a.small;a.toSubStream?this._subStreamSeiMessageList.push(d):(this._seiMessageList.push(d),h&&this._smallSeiMessageList.push(d)),(l=this.core.room.scriptTransformWorker)==null||l.postMessage({type:"sei",data:d,isMain:!a.toSubStream,small:h})}getName(){return nX.Name}getAlias(){return"sei"}getGroup(){return"sei"}};Y(vj,"autoStart",!0),Y(vj,"Name","SEI");var R1,toA=vj,ioA=0,Rj=class rX{constructor(e){this.core=e,Y(this,"_core"),Y(this,"log"),Y(this,"dialog"),this._core=e,this.log=e.log.createChild({id:"".concat(this.getAlias()).concat(++ioA)}),this.log.info("created")}getName(){return rX.Name}getAlias(){return"dm"}getGroup(){return"dm"}getValidateRule(e){switch(e){case"start":return{name:"StartDebugOptions",required:!1};case"update":return{name:"UpdateDebugOptions",required:!1};case"stop":return{name:"StopDebugOptions",required:!1}}}start(){return WA(this,null,function*(){var e;!new URLSearchParams(location.search).has("trtcDebug")&&((e=window.sessionStorage)==null?void 0:e.getItem("TRTC_ENABLE_DEBUG_PLUGIN"))!=="true"||(yield this.openDebugDiaLog())})}update(e){return WA(this,arguments,function(o){var a=this;let{visible:l}=o;return function*(){l?yield a.openDebugDiaLog():a.closeDebugDiaLog()}()})}stop(){this.closeDebugDiaLog()}destroy(){this.stop()}openDebugDiaLog(){return WA(this,null,function*(){var e;if(!this.dialog)try{if(R1)yield R1;else{let o=new URLSearchParams(location.search).get("trtcDebugDialogPath")||((e=window.sessionStorage)==null?void 0:e.getItem("TRTC_DEBUG_DIALOG_PATH"))||"https://unpkg.com/".concat("trtc-sdk-v5","@").concat(qd,"/assets/debug-dialog.js");R1=this._core.fileDownloader.loadScript(o),yield R1}this.dialog=new TRTCDebugDialog(this._core,this.log),this._core.kvStatManager.addSuccessEvent({key:592705})}catch(o){this._core.kvStatManager.addFailedEvent({key:592705}),this.log.error("load debug dialog script failed: ",JSON.stringify(o))}})}closeDebugDiaLog(){this.dialog&&(this.dialog.closeDialog(),this.dialog=null)}};Y(Rj,"Name","Debug"),Y(Rj,"autoStart",!0);var ooA=Rj,Yz=A=>{switch(A){case"webCodecs":return 504703;case"wasm":return 504704}throw new Error("decoder type not supported")},Vz=class{constructor(A,e,o){Y(this,"trackDoneOB"),Y(this,"startOB"),Y(this,"stopOB"),Y(this,"inputFrameCount",0),Y(this,"decodedFrameCount",0),Y(this,"type","auto"),Y(this,"config"),Y(this,"decoder"),Y(this,"_decodeSink");let{kvStatManager:a,trtc:l}=A;this.config=o.config,this.trackDoneOB=la(e,Zs.INIT),this.stopOB=hQ(),this.startOB=hQ(),o.type==="auto"?this.type="webCodecs":this.type=o.type;let d=hQ();ma(this.startOB,$K(0),g1(h=>{let y=this.pipe(e);return d.next("STARTING"),e.log.info("decoder type: ".concat(this.type)),ma(y,dE(this.stopOB),Bl(()=>{},S=>{e.log.error(S),a.addFailedEvent({key:Yz(this.type),error:S}),h>4?this.startOB.error(S):this.startOB.next(h+1)})),ma(y,E_(1),ez(tj))}),dE(this.stopOB),Bl(()=>{e.player.setOutput(),d.next("STARTED")},h=>{d.next("FAILED")},()=>{a.addSuccessEvent({key:Yz(this.type)}),a.addSuccessEvent({key:504702})}))}mock(A){this._decodeSink?this._decodeSink.error(A):this.startOB.next(0)}close(A){this.stopOB.next(A)}pipe(A){return nL()(e=>WA(this,null,function*(){this._decodeSink=e,e.defer(()=>{var a;(a=this.decoder)==null||a.close()});let{type:o}=this;try{o==="webCodecs"&&(this.decoder=new AudioDecoder({error:a=>{A.log.error(a),e.error(4)},output:a=>{this.decodedFrameCount++,e.next(a),A.player.write(a)}})),this.decoder.configure(this.config)}catch(a){A.log.error(a),e.error(o==="webCodecs"?2:6)}}))}decodeFrame(A){var e;this.inputFrameCount++,((e=this.decoder)==null?void 0:e.state)==="configured"&&this.decoder.decode(new EncodedAudioChunk({data:A.data,timestamp:A.timestamp,type:"key"}))}},soA={type:"object"},Jz=class $3{constructor(e){this.core=e,Y(this,"log"),Y(this,"contextMap",new Map),Y(this,"decodeProcessorMap",new WeakMap),this.log=e.log.createChild({id:"".concat(this.getAlias())})}getAlias(){return $3.Name}getGroup(e){return e.track.userId+e.track.streamType}getName(){return $3.Name}getValidateRule(e){return soA}start(e){let{track:o}=e;this.decodeProcessorMap.set(o,this.decode(e)),this.core.room.audioManager.addDecodeProcessor({processor:a=>{let{frame:l,track:d}=a;return this.decodeProcessorMap.has(d)?this.decodeProcessorMap.get(d)({frame:l,track:d}):l},type:3})}decode(e){return o=>{let{frame:a,track:l}=o;if(l!==e.track)return a;if(this.contextMap.has(l))return this.contextMap.get(l).decodeFrame(a);let d=new Vz(this.core,l,e);return ma(d.trackDoneOB,E_(1),Bl(()=>{this.core.clearStarted(this,this.getGroup(e)),this.stop({track:l})})),this.contextMap.set(l,d),d.decodeFrame(a)}}stop(e){let{track:o}=e,a=this.contextMap.get(o);a&&(a.close("stop"),this.contextMap.delete(o),this.contextMap.size===0&&this.core.room.audioManager.removeDecodeProcessor({type:3}))}update(e){let o=this.contextMap.get(e.track);if(o){if(e.type==="mock")return void o.mock(10);o.close("update"),this.contextMap.set(e.track,new Vz(this.core,e.track,e))}}};Y(Jz,"Name","TRTCAudioDecoder");var Hz=Jz,noA={rttPoorLimit:150,lossPoorLimit:20,rttGoodLimit:100,lossGoodLimit:10,fpsPoorLimit:5,cooldownTime:1e4,poorCount:3,goodCount:5,maxUpgradeFailCount:3},roA=class{constructor(){Y(this,"log"),Y(this,"autoMode",{enabled:!1,instance:null,config:noA,sortedStreamList:[],currentQualityIndex:0}),Y(this,"switchControl",{isInternal:!1,isSwitching:!1,lastSwitchTime:0,boundOnStatistics:null}),Y(this,"networkMetrics",{frameRate:0,rtt:0,loss:0}),Y(this,"counters",{rttUnder:0,lossUnder:0,downgradeCondition:0,upgradeFail:0}),Y(this,"onStatistics",A=>{var e,o;if(!this.autoMode.instance)return;let{config:a}=this.autoMode;if(this.networkMetrics.rtt=A.rtt,this.networkMetrics.loss=A.downLoss,this.counters.rttUnder=A.rttV.userId===d);if((o=y?.video)==null||!o.length)return;let S=h==="sub"?"sub":"big",k=y.video.find(V=>V.videoType===S);k?(this.networkMetrics.frameRate=k.frameRate||0,this.checkAndSwitchQuality()):this.log.warn("onStatistics: videoStat not found for userId=".concat(d,", streamType=").concat(h))}),this.log=pA.createLogger({id:"pqs"})}getCurrentPlayingStream(A){var e,o;let a=A,l=a._playbackQualityList;if(!l||l.length===0)return this.log.warn("getCurrentPlayingStream: streamList is empty"),null;for(let d of l){let h=A.room.remotePublishedUserMap.get(d.userId);if(!h)continue;let y=(e=d.streamType)!=null?e:"main";if((y==="sub"?h.remoteAuxiliaryTrack:h.remoteVideoTrack).isPlayCalled){let S=(o=a._remoteVideoConfigMap.get("".concat(d.userId,"_").concat(y)))==null?void 0:o.config;if(S)return{userId:d.userId,streamType:y,config:S}}}return null}switchPlaybackQuality(A){return WA(this,null,function*(){var e;let{trtcInstance:o,streamList:a,quality:l}=A;this.log.info("switchPlaybackQuality quality: ".concat(l,", streamList: ").concat(JSON.stringify(a)));let d=o;if(a&&a.length>0&&(d._playbackQualityList=a.map(MA=>{var ie;return po(fi({},MA),{streamType:(ie=MA.streamType)!=null?ie:"main"})})),l==="auto")return void(yield this.startAutoMode(o));if(this.autoMode.enabled&&l&&!this.switchControl.isInternal&&this.stopAutoMode(),!l)return;if(!d._playbackQualityList||d._playbackQualityList.length<=0)return void this.log.warn("switchPlaybackQuality: streamList is empty, please call with streamList first");let h=d._playbackQualityList.find(MA=>MA.name===l);if(!h)return void this.log.warn('switchPlaybackQuality: quality "'.concat(l,'" not found in streamList'));let y=this.getCurrentPlayingStream(o);if(this.log.info("currentPlaying userId: ".concat(y?.userId,", streamType: ").concat(y?.streamType)),!y)return;let S=(e=h.streamType)!=null?e:"main";if(y.userId===h.userId&&y.streamType===S)return void this.log.info("switchPlaybackQuality: already playing target stream");let k=fi({},y.config);k.streamType==="main"&&S==="main"&&(yield o.muteRemoteAudio(k.userId,!0));let V,J=new Promise(MA=>{V=MA}),cA=MA=>{MA.userId===h.userId&&MA.streamType===S&&MA.state==="PLAYING"&&MA.reason==="playing"&&V("success")};o.on(Ki.VIDEO_PLAY_STATE_CHANGED,cA);let CA=new Promise(MA=>setTimeout(()=>MA("timeout"),1e4));try{if(yield o.startRemoteVideo(po(fi({},y.config),{userId:h.userId,streamType:S,option:po(fi({},y.config.option),{isLiveStream:!0})})),(yield Promise.race([J,CA]))==="timeout"){this.log.error("switchPlaybackQuality: VIDEO_PLAY_STATE_CHANGED timeout, rollback");try{yield o.stopRemoteVideo({userId:h.userId,streamType:S})}catch(ie){this.log.warn("switchPlaybackQuality: rollback stopRemoteVideo failed",ie)}throw k.streamType==="main"&&S==="main"&&(yield o.muteRemoteAudio(k.userId,!1).catch(ie=>{this.log.warn("switchPlaybackQuality: rollback muteRemoteAudio failed",ie)})),new gi({code:Ct.SUBSCRIPTION_TIMEOUT,message:Xo({key:vo.SWITCH_PLAYBACK_QUALITY_TIMEOUT,data:{userId:h.userId}})})}let MA=o.stopRemoteVideo(k);k.streamType==="main"&&S==="main"?yield Promise.all([o.muteRemoteAudio(h.userId,!1).catch(ie=>{this.log.warn("muteRemoteAudio(new, false) failed",ie)}),MA]):yield MA,d._currentLiveUserId=h.userId,d._currentLiveStreamType=S}finally{o.off(Ki.VIDEO_PLAY_STATE_CHANGED,cA)}})}startAutoMode(A){return WA(this,null,function*(){if(this.autoMode.enabled)return void this.log.info("auto mode already enabled");let e=A;if(!e._playbackQualityList||e._playbackQualityList.length<=1)return void this.log.warn("startAutoMode: need at least 2 streams in streamList for auto mode");this.autoMode.enabled=!0,this.autoMode.instance=A,this.counters.rttUnder=0,this.counters.lossUnder=0,this.counters.downgradeCondition=0,this.counters.upgradeFail=0,this.switchControl.lastSwitchTime=0;let o=e._playbackQualityList||[];this.autoMode.sortedStreamList=[...o].sort((l,d)=>d.bitrate-l.bitrate),this.log.info("auto mode streams: ".concat(this.autoMode.sortedStreamList.map(l=>"".concat(l.name,"(").concat(l.bitrate,"kbps)")).join(" > ")));let a=this.getCurrentPlayingStream(A);if(a){let{userId:l,streamType:d}=a,h=this.autoMode.sortedStreamList.findIndex(y=>{var S;return y.userId===l&&((S=y.streamType)!=null?S:"main")===d});this.autoMode.currentQualityIndex=h>=0?h:0}else this.autoMode.currentQualityIndex=0;this.switchControl.boundOnStatistics=this.onStatistics,A.on(Ki.STATISTICS,this.switchControl.boundOnStatistics),this.log.info("auto mode started")})}stopAutoMode(){this.autoMode.enabled&&(this.autoMode.instance&&this.switchControl.boundOnStatistics&&this.autoMode.instance.off(Ki.STATISTICS,this.switchControl.boundOnStatistics),this.switchControl.boundOnStatistics=null,this.autoMode.enabled=!1,this.autoMode.instance=null,this.autoMode.sortedStreamList=[],this.autoMode.currentQualityIndex=0,this.counters.rttUnder=0,this.counters.lossUnder=0,this.counters.downgradeCondition=0,this.counters.upgradeFail=0,this.networkMetrics.frameRate=0,this.networkMetrics.rtt=0,this.networkMetrics.loss=0,this.switchControl.isSwitching=!1,this.log.info("auto mode stopped"))}checkAndSwitchQuality(){var A;if(!this.autoMode.enabled||!this.autoMode.instance||this.switchControl.isSwitching)return;let{config:e}=this.autoMode,o=Date.now()-this.switchControl.lastSwitchTime0,h=this.networkMetrics.frameRate<=e.fpsPoorLimit,y=this.networkMetrics.loss>=e.lossPoorLimit||this.networkMetrics.rtt>=e.rttPoorLimit,S=h&&y;this.counters.downgradeCondition=S?this.counters.downgradeCondition+1:0;let k=this.counters.rttUnder>=e.goodCount&&this.counters.lossUnder>=e.goodCount,V=this.counters.upgradeFail{if(V.remoteAudioTrack.isAvailable){if(S.get(V.userId))return;let J=y.getPCM(cA=>{e.emit(Ki.AUDIO_FRAME,cA)},V.userId);S.set(V.userId,J)}});else{if(S.get(a))return;let V=y.getPCM(J=>{e.emit(Ki.AUDIO_FRAME,J)},a);S.set(a,V)}else if(a==="*")e.room.remotePublishedUserMap.forEach(V=>{if(V.remoteAudioTrack.isSubscribed){let{userId:J}=V,cA=S.get(J);cA?.abort("disable"),S.delete(J)}});else{let V=S.get(a);V?.abort("disable"),S.delete(a)}})}resumeRemotePlayer(A){return WA(this,null,function*(){if(A.userId==="*"){let o=[];return A.trtcInstance.room.remotePublishedUserMap.forEach(a=>{let{remoteAudioTrack:l,remoteVideoTrack:d,remoteAuxiliaryTrack:h}=a;A.streamType?A.streamType==="main"?(l.isAvailable&&o.push(l.player.resume()),d.isAvailable&&o.push(d.player.resume())):h.isAvailable&&o.push(h.player.resume()):(l.isAvailable&&o.push(l.player.resume()),d.isAvailable&&o.push(d.player.resume()),h.isAvailable&&o.push(h.player.resume()))}),Promise.all(o)}let e=A.trtcInstance.room.remotePublishedUserMap.get(A.userId);if(e)return A.streamType==="main"?Promise.all([e.remoteAudioTrack.player.resume(),e.remoteVideoTrack.player.resume()]):e.remoteAuxiliaryTrack.player.resume()})}pauseRemotePlayer(A){if(A.userId==="*")A.trtcInstance.room.remotePublishedUserMap.forEach(e=>{let{remoteAudioTrack:o,remoteVideoTrack:a,remoteAuxiliaryTrack:l}=e;A.streamType?A.streamType==="main"?(o.isAvailable&&o.player.pause(),a.isAvailable&&a.player.pause(!1)):l.isAvailable&&l.player.pause(!1):(o.isAvailable&&o.player.pause(),a.isAvailable&&a.player.pause(!1),l.isAvailable&&l.player.pause(!1))});else{let e=A.trtcInstance.room.remotePublishedUserMap.get(A.userId);e&&(A.streamType==="main"?(e.remoteAudioTrack.player.pause(),e.remoteVideoTrack.player.pause(!1)):e.remoteAuxiliaryTrack.player.pause(!1))}}requestPictureInPicture(A){let e=[...A.trtcInstance.room.remotePublishedUserMap.values()].find(o=>o.remoteVideoTrack.isAvailable);return e?A.enable?e.remoteVideoTrack.player.enterPictureInPicture():e.remoteVideoTrack.player.exitPictureInPicture():Promise.reject(new gi({code:Ct.INVALID_OPERATION,message:"no available remote video"}))}requestFullScreen(A){let e=[...A.trtcInstance.room.remotePublishedUserMap.values()].find(o=>o.remoteVideoTrack.isAvailable);return e?A.enable?e.remoteVideoTrack.player.enterFullscreen():e.remoteVideoTrack.player.exitFullscreen():Promise.reject(new gi({code:Ct.INVALID_OPERATION,message:"no available remote video"}))}switchPlaybackQuality(A){return WA(this,null,function*(){let e=A.trtcInstance;return e._playbackQualitySwitcher||(e._playbackQualitySwitcher=new roA),e._playbackQualitySwitcher.switchPlaybackQuality(A)})}prelink(A){return WA(this,null,function*(){let{trtcInstance:e}=A;return A.enable?e.room.prelink(A.sdkAppId,A.userId,A.userSig,fL.frameWorkType,A.roomId,A.strRoomId):e.room.closePrelink()})}};hi([cz({name:"options",type:"object",required:!0,properties:{enable:{required:!0,type:"boolean"},userId:{required:!0,type:"string"},sampleRate:{type:"number",values:[8e3,16e3,32e3,44100,48e3]},channelCount:{type:"number",values:[1,2]},port:{type:"messageport"}}})],wj.prototype,"enableAudioFrameEvent"),hi([cz({name:"options",type:"object",required:!0,properties:{enable:{required:!0,type:"boolean"},userId:{required:!1,type:"string"},sdkAppId:{required:!1,type:"number"},userSig:{required:!1,type:"string"},roomId:{required:!1,type:"number"},strRoomId:{required:!1,type:"string"}}})],wj.prototype,"prelink");var aoA=new wj,goA=gc(jl(),1),coA=class extends goA.EventEmitter{constructor(){super(),Y(this,"states",{}),Y(this,"permissionChangeHandler"),Y(this,"log"),this.log=pA.createLogger({id:"pm"}),this.permissionChangeHandler=()=>{var A,e;this.emit("permission-state-change",{camera:(A=this.states.camera)==null?void 0:A.state,microphone:(e=this.states.microphone)==null?void 0:e.state})}}request(A){return WA(this,null,function*(){if(this.log.info("request ".concat(A.join(", "))),A.length===0)return Promise.resolve();(yield navigator.mediaDevices.getUserMedia({video:A.includes("camera"),audio:A.includes("microphone")})).getTracks().forEach(e=>e.stop())})}get(A){return WA(this,null,function*(){try{return this.states[A]||(this.states[A]=yield navigator.permissions.query({name:A}),this.states[A].addEventListener("change",this.permissionChangeHandler)),this.log.info("get ".concat(A," permission state: ").concat(this.states[A].state)),this.states[A].state}catch(e){return this.log.error("get ".concat(A," permission failed, error: ").concat(e instanceof Error?e.message:e)),null}})}destroy(){Object.values(this.states).forEach(A=>{A?.removeEventListener("change",this.permissionChangeHandler)}),this.states={}}},w1=new coA,qz=0,mL=new Set,Xl=null;Yx(Oz),zA.checkStorage();var Ms=class gm extends BK.EventEmitter{constructor(e,o){super(),Y(this,"_room"),Y(this,"_eventListened",new Set),Y(this,"_localVideoTrack",null),Y(this,"_localAudioTrack",null),Y(this,"_localScreenTrack",null),Y(this,"_localScreenAudioTrack",null),Y(this,"_localVideoConfig",null),Y(this,"_localScreenConfig",null),Y(this,"_localAudioConfig",null),Y(this,"_remoteVideoConfigMap",new Map),Y(this,"_remoteAudioConfigMap",new Map),Y(this,"_remoteAudioVolumeMap",new Map),Y(this,"_remoteAudioMuteMap",new Map),Y(this,"_mediaTrackMap",new WeakMap),Y(this,"_log",pA.createLogger({id:"t".concat(++qz)})),Y(this,"_plugins",new Map),Y(this,"_networkQuality",null),Y(this,"_speakerId"),Y(this,"enterRoomParams"),Y(this,"_enableAutoSwitchWhenRecapturing",!0),Y(this,"_autoSubscribeDataChannel",!1),Y(this,"_playbackQualityList",[]),this._room=new e(fi({logger:this._log,frameWorkType:gm.frameWorkType},o)),this._room.videoDecodeFallbackType=o.videoDecodeFallback,Nr(o.enableAutoSwitchWhenRecapturing)&&(this._enableAutoSwitchWhenRecapturing=o.enableAutoSwitchWhenRecapturing),this._log.info("create() ".concat(JSON.stringify(o,(a,l)=>a==="plugins"?l.map(d=>d.Name):l))),Object.defineProperties(this,{dumpAudio:{enumerable:!1,value(a){return this._room.audioManager.dump(a)}}}),o.plugins&&o.plugins.forEach(a=>{this._use(a,o.assetsPath)}),this._use(XiA,o.assetsPath),this._use(ziA,o.assetsPath),this._use($iA,o.assetsPath),this._use(Hz,o.assetsPath),this._use(ooA),o.enableSEI&&Kk&&this._use(toA),this._room.on("audio-volume",a=>{var l,d;!a.find(h=>h.userId==="")&&this._localAudioTrack&&a.push({userId:"",volume:Math.floor(100*((l=this._localAudioTrack.getInternalAudioLevelAfter3A())!=null?l:this._localAudioTrack.getAudioLevel())),floatVolume:(d=this._localAudioTrack.getInternalAudioLevelAfter3A())!=null?d:this._localAudioTrack.getInternalAudioLevel()}),o.volumeType===1&&a.forEach(h=>{var y;let S=h.userId===""?this._localAudioTrack:(y=this.room.remotePublishedUserMap.get(h.userId))==null?void 0:y.remoteAudioTrack;S&&(h.volume=S.dbVolume)}),o.enableDbVolume&&a.forEach(h=>{var y;let S=h.userId===""?this._localAudioTrack:(y=this.room.remotePublishedUserMap.get(h.userId))==null?void 0:y.remoteAudioTrack;S&&(h.volume=S.dbVolume)}),this.emit(Ki.AUDIO_VOLUME,{result:a.sort((h,y)=>y.volume-h.volume)})}),this._room.videoManager.on("error",a=>{this._log.error(new _o({code:wo.OPERATION_FAILED,extraCode:5504,message:a.message,originError:a}))}),this._listenEvents(),this._initActiveSpeaker(),((a,l)=>{let{emit:d}=a;a.emit=function(){for(var h=arguments.length,y=new Array(h),S=0;S{y&&QA.info(UC)})}})();let a=new nm(e,o||{});return dL.add(a),a.__v_skip=!0,a}get room(){return this._room}_listenEvents(){rd(this,this._room).add("peer-join",e=>{let{userId:o}=e;this.emit(Hi.REMOTE_USER_ENTER,{userId:o})}).add("peer-leave",e=>{let{userId:o,reason:a}=e;this.emit(Hi.REMOTE_USER_EXIT,{userId:o,reason:a})}).add("banned",e=>{hQ(!0),this._exitRoom().finally(()=>{this.emit(Hi.KICKED_OUT,{reason:e.reason})})}).add("error",e=>{this._exitRoom().finally(()=>{this.emit(Hi.ERROR,wo.convertFrom(e))})}).add("signal-connection-state-changed",e=>{this.emit(Hi.CONNECTION_STATE_CHANGED,e)}).add("network-quality",e=>{this._networkQuality=e;let o=Qo(mi({},e),{uplinkRTT:Math.min(e.uplinkRTT,E0),downlinkRTT:Math.min(e.downlinkRTT,E0)});this.emit(Hi.NETWORK_QUALITY,o)}).add("remote-published",e=>{[e.remoteAudioTrack,e.remoteVideoTrack,e.remoteAuxiliaryTrack].forEach(o=>{rd(o,o).add("player-state-changed",a=>{let c=Qo(mi({},a),{userId:e.userId});o.kind===YA.VIDEO&&(c.streamType=eC(o.streamType)),this.emit(o.kind===YA.AUDIO?Hi.AUDIO_PLAY_STATE_CHANGED:Hi.VIDEO_PLAY_STATE_CHANGED,c)}).add("error",a=>{a.getCode()===dt.PLAY_NOT_ALLOWED&&this.emit(Hi.AUTOPLAY_FAILED,{userId:o.userId,mediaType:o.strMediaType,resume:()=>o.player.resume()})})})}).add("remote-unpublished",e=>{[e.remoteAudioTrack,e.remoteVideoTrack,e.remoteAuxiliaryTrack].forEach(o=>{kn(o)})}).add("remote-publish-state-changed",e=>{let{prevMuteState:o,muteState:a}=e,{userId:c}=a,d=o.audioAvailable,C=o.videoAvailable,{audioAvailable:y,videoAvailable:S}=a;y||this._remoteAudioConfigMap.delete(c),S||this._removeRemoteVideoConfig(c,"main"),a.hasAuxiliary||this._removeRemoteVideoConfig(c,"sub"),C!==S&&(S?this._onVideoAvailable({userId:c,streamType:"main"}):this._onVideoUnavailable({userId:c,streamType:"main"}),this.emit(S?Hi.REMOTE_VIDEO_AVAILABLE:Hi.REMOTE_VIDEO_UNAVAILABLE,{userId:c,streamType:"main"})),d!==y&&(y?this._onAudioAvailable({userId:c}):this._onAudioUnavailable({userId:c,muteState:a}),this.emit(y?Hi.REMOTE_AUDIO_AVAILABLE:Hi.REMOTE_AUDIO_UNAVAILABLE,{userId:c})),o.hasAuxiliary!==a.hasAuxiliary&&(a.hasAuxiliary?this._onVideoAvailable({userId:c,streamType:"sub"}):this._onVideoUnavailable({userId:c,streamType:"sub"}),this.emit(a.hasAuxiliary?Hi.REMOTE_VIDEO_AVAILABLE:Hi.REMOTE_VIDEO_UNAVAILABLE,{userId:c,streamType:"sub"})),o.hasDatachannel!==a.hasDatachannel&&a.hasDatachannel&&this._onDataChannelAvailable()}).add("sei-message",e=>{this.emit(Hi.SEI_MESSAGE,Qo(mi({},e),{streamType:eC(e.streamType)}))}).add("firewall-restriction",()=>{this.emit(Hi.ERROR,new wo({code:Ro.OPERATION_FAILED,extraCode:5501}))}).add("heartbeat-report",e=>{var o,a,c,d,C,y,S;let k={2:"big",3:"small",7:"sub"},V={rtt:Math.min(e.msg_up_stream_info.msg_network_status.uint32_rtt||((o=e.msg_down_stream_info[0])==null?void 0:o.msg_network_status.uint32_rtt)||((a=this._networkQuality)==null?void 0:a.uplinkRTT)||((c=this._networkQuality)==null?void 0:c.downlinkRTT)||0,E0),upLoss:((d=this._networkQuality)==null?void 0:d.uplinkLoss)||0,downLoss:((C=this._networkQuality)==null?void 0:C.downlinkLoss)||0,bytesSent:e.bytes_sent||0,bytesReceived:e.bytes_received||0,localStatistics:{audio:{bitrate:(((y=e.msg_up_stream_info.msg_audio_status)==null?void 0:y.uint32_audio_codec_bitrate)||0)/1e3,audioLevel:(((S=e.msg_up_stream_info.msg_audio_status)==null?void 0:S.uint32_audio_level)||0)/od},video:e.msg_up_stream_info.msg_video_status.filter(J=>k[J.uint32_video_stream_type]).map(J=>({bitrate:(J.uint32_video_codec_bitrate||0)/1e3,width:J.uint32_video_width,height:J.uint32_video_height,frameRate:J.uint32_video_enc_fps,videoType:k[J.uint32_video_stream_type]}))},remoteStatistics:e.msg_down_stream_info.map(J=>({userId:J.msg_user_info.str_identifier,audio:{bitrate:(J.msg_audio_status.uint32_audio_codec_bitrate||0)/1e3,audioLevel:(J.msg_audio_status.uint32_audio_level||0)/od,point2pointDelay:(J.msg_audio_status.uint32_audio_p2p_delay||0)+(J.msg_audio_status.uint32_audio_cache_ms||0),jitterBufferDelay:J.msg_audio_status.uint32_audio_cache_ms||0},video:J.msg_video_status.map(gA=>({bitrate:(gA.uint32_video_codec_bitrate||0)/1e3,width:gA.uint32_video_width,height:gA.uint32_video_height,frameRate:gA.uint32_video_dec_fps,videoType:k[gA.uint32_video_stream_type],point2pointDelay:(gA.uint32_video_p2p_delay||0)+(gA.uint32_video_cache_ms||0),jitterBufferDelay:gA.uint32_video_cache_ms||0,codec:gA.uint32_video_codec}))}))};this.emit(Hi.STATISTICS,V)}).add("custom-message",e=>{this.emit(Hi.CUSTOM_MESSAGE,e)}).add("layerData",e=>this.emit(Hi.LAYER_DATA,e)).add("first-video-frame",e=>{this.emit(Hi.FIRST_VIDEO_FRAME,Qo(mi({},e),{streamType:eC(e.streamType)}))}).add("audio-frame",e=>{this.emit(Hi.AUDIO_FRAME,e)}).add("data-channel-message",e=>{var o,a,c,d,C;let{data:y}=e;if(y.sender==="")return;let S={segmentId:(o=y.payload)==null?void 0:o.roundid,speakerUserId:y.sender,sourceText:(a=y.payload)==null?void 0:a.text,translationTexts:(c=y.payload)==null?void 0:c.translate_msg,timestamp:(d=y.payload)==null?void 0:d.start_utc_ms,isCompleted:(C=y.payload)==null?void 0:C.end,robotId:y.robotid};S.sourceText!==""&&this.emit(Hi.REALTIME_TRANSCRIBER_MESSAGE,S)}).add("asr-robot-peer-join",e=>{this.emit(Hi.REALTIME_TRANSCRIBER_STATE_CHANGED,{state:"started",roomId:this.room.roomId,transcriberRobotId:e.userId})}).add("asr-robot-peer-leave",e=>{this.emit(Hi.REALTIME_TRANSCRIBER_STATE_CHANGED,{state:"stopped",roomId:this.room.roomId,transcriberRobotId:e.userId})}),rd(this,Pc).add("audioInputAdded",e=>{this.emit(Hi.DEVICE_CHANGED,{type:"microphone",action:"add",device:e})}).add("audioInputRemoved",e=>{this.emit(Hi.DEVICE_CHANGED,{type:"microphone",action:"remove",device:e})}).add("videoInputAdded",e=>{this.emit(Hi.DEVICE_CHANGED,{type:"camera",action:"add",device:e})}).add("videoInputRemoved",e=>{this.emit(Hi.DEVICE_CHANGED,{type:"camera",action:"remove",device:e})}).add("audioOutputAdded",e=>KA(this,null,function*(){if(this.emit(Hi.DEVICE_CHANGED,{type:"speaker",action:"add",device:e}),Zl&&Zl.deviceId===u0){let o=(yield YM()).find(a=>a.deviceId===u0);o&&Zl.groupId!==o.groupId&&(Zl=o,this.emit(Hi.DEVICE_CHANGED,{type:"speaker",action:"active",device:o}))}})).add("audioOutputRemoved",e=>KA(this,null,function*(){this.emit(Hi.DEVICE_CHANGED,{type:"speaker",action:"remove",device:e});let o=(yield YM())[0];if(!o||!Zl||Zl.groupId===o.groupId)return;let a=Zl.deviceId===e.deviceId,c=Zl.deviceId===u0&&Zl.deviceId===o.deviceId;(a||c)&&(Zl=o,this.emit(Hi.DEVICE_CHANGED,{type:"speaker",action:"active",device:o}))})),rd(this,Q1).add("permission-state-change",e=>{this.emit(Hi.PERMISSION_STATE_CHANGE,e)}),this.room.enableSEI&&this.on(Hi.SEI_MESSAGE,e=>{var o;let a=(o=this.room.remotePublishedUserMap.get(e.userId))==null?void 0:o.remoteVideoTrack;a&&a.updateAlphaRenderInfo(e)})}getNetworkTime(){return Lf()}use(e){let o,a;return"plugin"in e?(o=e.plugin,a=e.assetsPath):o=e,o.Name==="Chorus"&&(this.room.enableChorus=!0),this._use(o,a)}_use(e,o){let a=this._plugins.get(e.Name);if(a)return this._log.warn("duplicate install plugin",e.Name),a;let c=new e(QiA.call(this,{TRTC:nm,room:this._room,assetsPath:o,errorModule:{RtcError:wo,ErrorCode:Ro,CoreErrorCode:dt,ErrorCodeDictionary:r1}}));return this._plugins.set(e.Name,c),c.__v_skip=!0,e.autoStart&&this.startPlugin(e.Name),c}enterRoom(e){return KA(this,null,function*(){var o,a;this.enterRoomParams=e;let{scene:c="rtc",enableAutoPlayDialog:d=!0,autoReceiveAudio:C=!0,autoReceiveVideo:y=!1}=e;e.proxy&&(this._room.setProxyServer(e.proxy),!Yn(e.proxy)&&e.proxy.turnServer&&((a=(o=this._room).setTurnServer)==null||a.call(o,e.proxy.turnServer,e.proxy.iceTransportPolicy))),this._room.enableAutoPlayDialog=d,this._room.autoReceiveAudio=C,this._room.autoReceiveVideo=y,Nr(e.preferHW)&&(this._room.preferHW=e.preferHW),e.playoutDelay&&(this._room.playoutDelay=e.playoutDelay),e.jitterBufferDelay&&(this._room.jitterBufferDelay=e.jitterBufferDelay);let S={sdkAppId:e.sdkAppId,userId:e.userId,userSig:e.userSig,privateMapKey:e.privateMapKey||null,latencyLevel:e.latencyLevel,role:e.role==="audience"?21:20,roomId:e.roomId||0,strRoomId:e.strRoomId||"",businessInfo:e.businessInfo||null,streamId:null,userDefineRecordId:e.userDefineRecordId||null,enableDataChannel:this._plugins.has("RealtimeTranscriber"),frameWorkType:e.frameWorkType,component:e.component,language:e.language,priority:e.priority,useVp8:e.useVp8,useH265:e.useH265||!1,keepAlive:e.keepAlive};e.strRoomId&&!e.roomId?this._room.useStringRoomId=!0:this._room.useStringRoomId=!1,yield this._room.join(S,c,nm.frameWorkType),this._checkTrackToPublish(),Bz.start()})}exitRoom(){return KA(this,null,function*(){return yield this._exitRoom()})}switchRoom(e){return KA(this,null,function*(){if(this.room.isSwitchRoomSupported())try{this._clearRemoteTracks(),yield this._room.switchRoom(e)}catch(o){if(!(o instanceof Mx)||o.code!==dt.API_CALL_TIMEOUT&&o.code!==dt.SWITCH_ROOM_FAILED)throw o;this._log.warn("switchRoom ".concat(o.code===dt.API_CALL_TIMEOUT?"timeout":"failed",", fallback to exitRoom() and enterRoom()")),yield this._rejoinRoom(e)}else yield this._rejoinRoom(e)})}_rejoinRoom(e){return KA(this,null,function*(){yield this.exitRoom();let o=mi(mi({},this.enterRoomParams),e);yield this.enterRoom(o)})}_clearRemoteTracks(){new Set([...this._remoteAudioConfigMap.keys(),...this._remoteAudioMuteMap.keys()]).forEach(e=>{this._stopRemoteAudio({userId:e}).catch(()=>{})}),[...this._remoteVideoConfigMap.keys()].forEach(e=>{let o=e.includes("main")?"main":"sub",a=e.split("_".concat(o))[0];a&&this._stopRemoteVideo({userId:a,streamType:o}).catch(()=>{})}),this._remoteVideoConfigMap.clear(),this._remoteAudioConfigMap.clear(),this._remoteAudioMuteMap.clear(),function(e){let o=h_.get(e);o&&(o.forEach(a=>clearTimeout(a)),h_.delete(e))}(this),this._room.remotePublishedUserMap.forEach(e=>{kn(e.remoteAudioTrack),kn(e.remoteVideoTrack),kn(e.remoteAuxiliaryTrack)})}switchRole(e,o){return KA(this,null,function*(){o!=null&&o.privateMapKey&&(this._room.privateMapKey=o.privateMapKey),o!=null&&o.latencyLevel&&(this._room.latencyLevel=o.latencyLevel),yield this._room.switchRole(e),e==="anchor"&&this._checkTrackToPublish()})}destroy(){this._plugins.forEach(e=>{var o;return(o=e.destroy)==null?void 0:o.call(e)}),this._plugins.clear(),kn(this),this.removeAllListeners(),this._room.destroy(),dL.delete(this),dL.size===0&&Bz.destroy(),this._localAudioTrack&&this.stopLocalAudio(),this._localVideoTrack&&this.stopLocalVideo(),this._localScreenTrack&&this.stopScreenShare(),F.off("102",this._onLocalTrackCaptured,this)}startLocalAudio(){return KA(this,arguments,function(){var e=this;let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{publish:!0};return function*(){if(e._localAudioTrack)return void e._log.warn("local audio is already started");let{publish:a=!0,mute:c,muteKeepVolumeDetection:d,option:C}=o,y=new HM(e._room.audioManager),S={},k={muted:!0};C&&(Je(C.microphoneId)?Je(C.audioTrack)||(S.customSource=C.audioTrack):S.deviceId=C.microphoneId,C&&bn(C.captureVolume)&&y.setCaptureVolume(C.captureVolume),Je(C.profile)||(Yn(C.profile)?Sp[C.profile]&&y.setProfile(Sp[C.profile]):y.setProfile(C.profile)),bn(C.earMonitorVolume)&&(k.muted=!(C.earMonitorVolume>0),k.volume=C.earMonitorVolume),Je(C.echoCancellation)||(y.profile.echoCancellation=C.echoCancellation),Je(C.noiseSuppression)||(y.profile.noiseSuppression=C.noiseSuppression),Je(C.autoGainControl)||(y.profile.autoGainControl=C.autoGainControl),Nr(e._enableAutoSwitchWhenRecapturing)&&(y.enableAutoSwitchWhenRecapturing=e._enableAutoSwitchWhenRecapturing)),y.on("5",V=>{e.emit(Hi.ERROR,new wo({code:Ro.DEVICE_ERROR,extraCode:5309,messageParams:{error:V}}))}),y.on("2",V=>{e.emit(Hi.DEVICE_CHANGED,{type:"microphone",action:"active",device:V})}),y.on("4",V=>{let J;V.error&&(J=wo.convertFrom(V.error)),e.emit(Hi.PUBLISH_STATE_CHANGED,Qo(mi({},V),{error:J}))}),y.on("6",()=>{}),e._listenOutputTrackChanged(y),e._speakerId&&y.setAudioOutput(e._speakerId),yield y.capture(S),Je(c)||y.setMute(c,d),rd(y,y).add("player-state-changed",V=>{e.emit(Hi.AUDIO_PLAY_STATE_CHANGED,Qo(mi({},V),{userId:""}))}),a&&e._room.isJoined&&e._room.publish(y).catch(()=>{}),e._localAudioTrack=y,e._room.capturedLocalMainAudioTrack=y,e._localAudioConfig=Qo(mi({},o),{publish:a}),yield e._updateAudioPlayOption({playOption:k,track:y}),F.emit("113",{userId:"",room:e.room})}()})}updateLocalAudio(e){return KA(this,null,function*(){if(!this._localAudioTrack||!this._localAudioConfig)return;let{publish:o,mute:a,muteKeepVolumeDetection:c,option:d}=e,C={};d&&(d.microphoneId?yield this._localAudioTrack.switchDevice(d.microphoneId):Je(d.audioTrack)||(yield this._localAudioTrack.setInputMediaStreamTrack(d.audioTrack)),Je(d.captureVolume)||this._localAudioTrack.setCaptureVolume(d.captureVolume),Je(d.earMonitorVolume)||(C.muted=!(d.earMonitorVolume>0),C.volume=d.earMonitorVolume),yield this._localAudioTrack.update3A(d)),this._room.isJoined&&!Je(o)&&(o&&!this._localAudioConfig.publish&&this._room.publish(this._localAudioTrack).catch(()=>{}),this._localAudioConfig.publish&&!o&&this._room.unpublish(this._localAudioTrack).catch(()=>{})),Je(a)||this._localAudioTrack.setMute(a,c),yield this._updateAudioPlayOption({playOption:C,track:this._localAudioTrack,prevConfig:this._localAudioConfig}),Wh(this._localAudioConfig,e)})}stopLocalAudio(){return KA(this,null,function*(){this._localAudioTrack&&(this._room.isJoined&&(yield this._room.unpublish(this._localAudioTrack).catch(()=>{})),F.emit("114",{userId:"",room:this.room}),this._localAudioTrack.stop(),this._localAudioTrack.close(),this._room.audioManager.removeInput(this._localAudioTrack),kn(this._localAudioTrack),this._localAudioTrack=null,this._localAudioConfig=null,delete this._room.capturedLocalMainAudioTrack)})}startLocalVideo(){return KA(this,arguments,function(){var e=this;let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{publish:!0,view:null,capture:!0};return function*(){var a,c,d;if(e._localVideoTrack)return void e._log.warn("local video is already started");let{view:C,publish:y=!0,capture:S=!0,mute:k,option:V,forcePublish:J=!1}=o,gA=y||J,CA=S,MA=new dQ(e._room.videoManager),$A={},Be={};if(V&&(Nr(V.avoidCropping)&&(MA.avoidCropping=V.avoidCropping),V.cameraId?$A.deviceId=V.cameraId:Je(V.useFrontCamera)?Je(V.videoTrack)||($A.customSource=V.videoTrack):$A.facingMode=V.useFrontCamera?YA.FACING_MODE_USER:YA.FACING_MODE_ENVIRONMENT,Je(V.retryWhenExactFailed)||($A.retryWhenExactFailed=V.retryWhenExactFailed),V.qosPreference&&($A.contentHint=a1(V.qosPreference)),Je(V.profile)||(Yn(V.profile)?kC[V.profile]&&MA.setProfile(kC[V.profile]):MA.setProfile(V.profile)),Je(V.fillMode)||(Be.objectFit=V.fillMode),Je(V.mirror)||(Be.mirror=V.mirror),Je(V.small)||(Je(V.smallMode)||(e._room.smallMode=V.smallMode),Nr(V.small)&&V.small===!1?MA.stopSmall():MA.updateSmallConfig(g1(V.small,!0))),Je(V.rotation)||MA.setRotation(V.rotation),Nr(e._enableAutoSwitchWhenRecapturing)&&(MA.enableAutoSwitchWhenRecapturing=e._enableAutoSwitchWhenRecapturing)),MA.once("first-video-frame",Ye=>{e.emit(Hi.FIRST_VIDEO_FRAME,Qo(mi({},Ye),{streamType:eC(Ye.streamType)}))}),MA.on("5",Ye=>{e.emit(Hi.ERROR,new wo({code:Ro.DEVICE_ERROR,extraCode:5308,messageParams:{error:Ye}}))}),MA.on("2",Ye=>{e.emit(Hi.DEVICE_CHANGED,{type:"camera",action:"active",device:Ye})}),MA.on("4",Ye=>{let ve;Ye.error&&(ve=wo.convertFrom(Ye.error)),e.emit(Hi.PUBLISH_STATE_CHANGED,Qo(mi({},Ye),{error:ve}))}),MA.on("6",()=>{}),e._listenOutputTrackChanged(MA),$A.customSource&&_p($A.customSource)?(MA.setOutputMediaStreamTrack($A.customSource),CA=!1):CA?yield MA.capture($A):(a=MA.manager)==null||a.changeInput(MA),Je(k)||(yield MA.setMute(k)),rd(MA,MA).add("player-state-changed",Ye=>{e.emit(Hi.VIDEO_PLAY_STATE_CHANGED,Qo(mi({},Ye),{userId:"",streamType:"main"}))}).add("video-size-changed",Ye=>{e.emit(Hi.VIDEO_SIZE_CHANGED,Qo(mi({},Ye),{streamType:eC(Ye.streamType)}))}),gA){let Ye=e._localScreenTrack&&((c=e._localScreenConfig)==null?void 0:c.publish)&&e._localScreenConfig.streamType==="main";e._room.isJoined?!Ye||J?(e._room.publish(MA).catch(()=>{}),((d=e._localScreenConfig)==null?void 0:d.streamType)==="main"&&e._localScreenConfig&&(e._localScreenConfig.publish=!1)):(gA=!1,e._log.warn("main stream is already published, local video track will not publish")):Ye&&(gA=!1)}e._localVideoTrack=MA,e._room.capturedLocalMainVideoTrack=MA,e._localVideoConfig=Qo(mi({},o),{view:C,publish:gA,capture:CA}),yield e._updateVideoPlayOption({view:C,playOption:Be,track:MA})}()})}updateLocalVideo(e){return KA(this,null,function*(){var o,a,c,d,C,y,S;if(!this._localVideoTrack||!this._localVideoConfig)return;let{view:k,publish:V=!0,mute:J,capture:gA,option:CA,forcePublish:MA=!1}=e,$A=V||MA,Be=gA,Ye={};if(!this._localVideoConfig.capture&&_p((o=this.localVideoTrack)==null?void 0:o.outMediaTrack)&&(CA!=null&&CA.cameraId||CA!=null&&CA.videoTrack)&&this._localVideoTrack.outMediaTrack!==CA?.videoTrack&&(Be=!0),this._localVideoConfig.capture)Be!==!1?CA!=null&&CA.cameraId?yield this._localVideoTrack.switchDevice(CA?.cameraId):Je(CA?.useFrontCamera)?Je(CA?.videoTrack)||(_p(CA?.videoTrack)?CA?.videoTrack!==((a=this.localVideoTrack)==null?void 0:a.outMediaTrack)&&(yield this._localVideoTrack.setOutputMediaStreamTrack(CA?.videoTrack)):yield this._localVideoTrack.setInputMediaStreamTrack(CA?.videoTrack)):yield this._localVideoTrack.switchDevice(CA!=null&&CA.useFrontCamera?YA.FACING_MODE_USER:YA.FACING_MODE_ENVIRONMENT):this._localVideoTrack.stopCapture();else if(Be){let ve={};ve.deviceId=CA?.cameraId||((c=this._localVideoConfig.option)==null?void 0:c.cameraId),ve.facingMode=CA!=null&&CA.useFrontCamera||(d=this._localVideoConfig.option)!=null&&d.useFrontCamera?YA.FACING_MODE_USER:YA.FACING_MODE_ENVIRONMENT,ve.customSource=CA!=null&&CA.videoTrack||!ve.deviceId?(C=this._localVideoConfig.option)==null?void 0:C.videoTrack:void 0,yield this._localVideoTrack.capture(ve)}CA&&(Je(CA.profile)||(Yn(CA.profile)?kC[CA.profile]&&this._localVideoTrack.setProfile(kC[CA.profile]):this._localVideoTrack.setProfile(CA.profile),(!CA.cameraId||!this._localVideoTrack.isNeedToSwitchDevice(CA.cameraId||CA.useFrontCamera?YA.FACING_MODE_USER:YA.FACING_MODE_ENVIRONMENT))&&(yield this._localVideoTrack.applyProfile())),Je(CA.fillMode)||(Ye.objectFit=CA.fillMode),Je(CA.mirror)||(Ye.mirror=CA.mirror),Je(CA.rotation)||this._localVideoTrack.setRotation(CA.rotation),CA.qosPreference&&this._localVideoTrack.mediaTrack&&this._localVideoTrack.setContentHint(a1(CA.qosPreference)),Je(CA.small)||(Nr(CA.small)&&!CA.small?this._localVideoTrack.stopSmall():this._localVideoTrack.updateSmallConfig(g1(CA.small,!0)))),this._room.isJoined&&Je($A)&&this._localVideoConfig.publish&&Be&&!this._localVideoConfig.capture&&this._room.publish(this._localVideoTrack).catch(()=>{}),this._room.isJoined&&(($A??this._localVideoConfig.publish)||MA?this._localScreenTrack&&((y=this._localScreenConfig)!=null&&y.publish)&&this._localScreenConfig.streamType==="main"&&!MA?($A=!1,this._log.warn("main stream is already published, local video track will not publish")):(this._room.publish(this._localVideoTrack).catch(()=>{}),((S=this._localScreenConfig)==null?void 0:S.streamType)==="main"&&this._localScreenConfig&&(this._localScreenConfig.publish=!1)):this._room.unpublish(this._localVideoTrack).catch(()=>{})),Je(J)||(yield this._localVideoTrack.setMute(J)),yield this._updateVideoPlayOption({view:k,playOption:Ye,track:this._localVideoTrack,prevConfig:this._localVideoConfig}),Wh(this._localVideoConfig,Qo(mi({},e),{publish:$A,capture:Be}))})}stopLocalVideo(){return KA(this,null,function*(){var e;this._localVideoTrack&&(this._room.isJoined&&(e=this._localVideoConfig)!=null&&e.publish&&(yield this._room.unpublish(this._localVideoTrack).catch(()=>{})),this._localVideoTrack.stop(),this._localVideoTrack.close(),kn(this._localVideoTrack),this._localVideoTrack=null,delete this._room.capturedLocalMainVideoTrack,this._localVideoConfig=null)})}startScreenShare(){return KA(this,arguments,function(){var e=this;let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{publish:!0,view:null};return function*(){var a,c,d;if(e._localScreenTrack)return void e._log.warn("screen share is already started");let{view:C=null,publish:y=!0,muteSystemAudio:S,option:k}=o,V=y,J=new qM(e._room.videoManager);J.on("4",Be=>{let Ye;Be.error&&(Ye=wo.convertFrom(Be.error)),e.emit(Hi.PUBLISH_STATE_CHANGED,Qo(mi({},Be),{error:Ye}))}),J.once("first-video-frame",Be=>{e.emit(Hi.FIRST_VIDEO_FRAME,Qo(mi({},Be),{streamType:eC(Be.streamType)}))}),e._listenOutputTrackChanged(J),o.streamType==="main"&&(J.mediaType=4);let gA=null,CA={},MA={};k&&(Je(k.profile)||(Yn(k.profile)?Sb[k.profile]&&J.setProfile(Sb[k.profile]):J.setProfile(k.profile)),k.systemAudio&&(CA.systemAudio=!0,CA.echoCancellation=k.echoCancellation,CA.noiseSuppression=k.noiseSuppression,CA.autoGainControl=k.autoGainControl),Je(k.fillMode)||(MA.objectFit=k.fillMode),k.videoTrack&&(CA.videoTrack=k.videoTrack),k.audioTrack&&(CA.audioTrack=k.audioTrack),k.captureElement&&(CA.captureElement=k.captureElement),k.preferDisplaySurface&&(CA.preferDisplaySurface=k.preferDisplaySurface),k.qosPreference&&(CA.contentHint=a1(k.qosPreference)));let $A=yield J.capture(CA);if(J.mediaTrack.addEventListener(YA.ENDED,()=>{e._stopScreenShare(),e.emit(Hi.SCREEN_SHARE_STOPPED)}),$A.getAudioTracks()[0]){gA=new ZK(e._room.audioManager);let Be=$A.getAudioTracks()[0];(a=o.option)!=null&&a.systemAudio&&!((c=o.option)!=null&&c.audioTrack)&&(gA.sourceTrack=Be),yield gA.setInputMediaStreamTrack(Be),Nr(S)&&gA.mediaTrack&&(gA.mediaTrack.enabled=!S),e._speakerId&&gA.setAudioOutput(e._speakerId)}if(rd(J,J).add("player-state-changed",Be=>{e.emit(Hi.VIDEO_PLAY_STATE_CHANGED,Qo(mi({},Be),{userId:"",streamType:"sub"}))}),V){let Be=e._localVideoTrack&&((d=e._localVideoConfig)==null?void 0:d.publish),Ye=!(o.streamType==="main"&&Be);e._room.isJoined?(Ye?e._room.publish(J).catch(()=>{}):(V=!1,e._log.warn("main stream is already published, screen share main will not publish")),gA&&(e._checkScreenAudioEchoCancellation(J,gA),e._room.publish(gA).catch(()=>{}))):Ye||(V=!1)}e._localScreenTrack=J,e._room.capturedLocalAuxVideoTrack=J,e._localScreenAudioTrack=gA,e._localScreenConfig=Qo(mi({},o),{view:C,publish:V}),yield e._updateVideoPlayOption({view:C,playOption:MA,track:J})}()})}updateScreenShare(e){return KA(this,null,function*(){var o,a;if(!this._localScreenTrack||!this._localScreenConfig)return;let{view:c,publish:d,muteSystemAudio:C,option:y}=e,S=d,k={};if(y){if(Je(y.fillMode)||(k.objectFit=y.fillMode),y.qosPreference){let V=a1(y.qosPreference);this._localScreenTrack.setContentHint(V)}y.videoTrack&&this._localScreenTrack.setInputMediaStreamTrack(y.videoTrack),y.audioTrack&&this._localScreenAudioTrack&&this._localScreenAudioTrack.setInputMediaStreamTrack(y.audioTrack)}if(this._room.isJoined&&!Je(S)){if(S&&!this._localScreenConfig.publish){let V=this._localVideoTrack&&((o=this._localVideoConfig)==null?void 0:o.publish);this._localScreenConfig.streamType==="main"&&V?(S=!1,this._log.warn("main stream is already published, screen share main will not publish")):this._room.publish(this._localScreenTrack).catch(()=>{}),this._localScreenAudioTrack&&this._room.publish(this._localScreenAudioTrack).catch(()=>{})}if(this._localScreenConfig.publish&&!S){let V=[this._localScreenTrack];this._localScreenAudioTrack&&V.push(this._localScreenAudioTrack),V.forEach(J=>this._room.unpublish(J).catch(()=>{}))}}(a=this._localScreenAudioTrack)!=null&&a.mediaTrack&&Nr(C)&&(this._localScreenAudioTrack.mediaTrack.enabled=!C),yield this._updateVideoPlayOption({view:c,playOption:k,track:this._localScreenTrack,prevConfig:this._localScreenConfig}),Wh(this._localScreenConfig,Qo(mi({},e),{publish:S}))})}stopScreenShare(){return KA(this,null,function*(){return yield this._stopScreenShare()})}startRemoteVideo(e){return KA(this,null,function*(){let{view:o,userId:a,streamType:c,option:d}=e,C="".concat(a,"_").concat(c);if(this._remoteVideoConfigMap.has(C))return void this._log.warn("remote video has already started. userId:".concat(a,", streamType:").concat(c));let y=this._room.remotePublishedUserMap.get(a);if(!y)return;let S={},k=c==="main"?y.remoteVideoTrack:y.remoteAuxiliaryTrack,V=this._bindRemoteVideoTrackEvents(k);this._listenOutputTrackChanged(k),d&&(Je(d.fillMode)||(S.objectFit=d.fillMode),Je(d.mirror)||(S.mirror=d.mirror),Je(d.poster)||(S.poster=d.poster),S.canvasRender=d.canvasRender,c==="main"&&!Je(d.small)&&(!y.remoteVideoTrack.isSubscribing&&!y.remoteVideoTrack.isSubscribed&&y.remoteVideoTrack.setMediaType(d.small?8:4),this._room.changeType(d.small,k.user)),Je(d.draggable)||k.setDraggable(d.draggable)),S.isLiveStream=!!this._playbackQualityList.find(J=>J.userId===a&&J.streamType===c),yield this._room.subscribe(k),yield this._enableVideoDecodeFallback(k,c),yield this._updateVideoPlayOption({view:o,playOption:S,track:k}),this._emitTrackEvent(k),this._remoteVideoConfigMap.set(C,{config:e,handlers:V}),d&&!Je(d.receiveWhenViewVisible)&&this._observeView({remoteTrack:k,view:o,receiveWhenViewVisible:d.receiveWhenViewVisible,viewRoot:d?.viewRoot})})}updateRemoteVideo(e){return KA(this,null,function*(){var o,a;let{view:c,userId:d,streamType:C,option:y,mute:S}=e,k="".concat(d,"_").concat(C),V=this._remoteVideoConfigMap.get(k);if(!V||!this._room.remotePublishedUserMap.has(d))return;let J={};y&&(Je(y.fillMode)||(J.objectFit=y.fillMode),Je(y.mirror)||(J.mirror=y.mirror));let gA=null,CA=this._room.remotePublishedUserMap.get(d);if(C==="main"&&CA!=null&&CA.muteState.hasVideo&&(gA=CA.remoteVideoTrack),C==="sub"&&CA!=null&&CA.muteState.hasAuxiliary&&(gA=CA.remoteAuxiliaryTrack),!gA)return;let{config:MA}=V;C==="main"&&y&&!Je(y.small)&&this._room.changeType(y.small,gA.user),y&&!Je(y.draggable)&&gA.setDraggable(y.draggable),y&&(Nr(y.pictureInPicture)&&(y.pictureInPicture?yield gA.player.enterPictureInPicture():yield gA.player.exitPictureInPicture()),Nr(y.fullScreen)&&(y.fullScreen?yield gA.player.enterFullscreen():yield gA.player.exitFullscreen())),Nr(S)&&(gA.ignoreUpdatePlayingState=!0,S?(yield gA.player.pause(),yield this.room.unsubscribe(gA)):(yield this.room.subscribe(gA),yield gA.player.resume(!0))),yield this._updateVideoPlayOption({view:c,playOption:J,track:gA,prevConfig:MA}),Wh(MA,e);let $A=Je(y?.receiveWhenViewVisible)?(o=MA.option)==null?void 0:o.receiveWhenViewVisible:y.receiveWhenViewVisible,Be=Je(c)?MA.view:c,Ye=Je(y?.viewRoot)?(a=MA.option)==null?void 0:a.viewRoot:y.viewRoot;this._observeView({remoteTrack:gA,view:Be,receiveWhenViewVisible:$A,viewRoot:Ye})})}stopRemoteVideo(e){return KA(this,null,function*(){return this._stopRemoteVideo(e)})}_stopRemoteVideo(e){let o=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];return KA(this,null,function*(){let a=[],c=this._room.remotePublishedUserMap.get(e.userId);if(c){let{muteState:d,remoteVideoTrack:C,remoteAuxiliaryTrack:y}=c;e.streamType==="main"&&(C.stop(),d.hasVideo&&a.push(C)),e.streamType==="sub"&&(y.stop(),d.hasAuxiliary&&a.push(y))}for(let d of a)o&&(delete d.ignoreUpdatePlayingState,yield this._room.unsubscribe(d),this._mediaTrackMap.delete(d.outMediaTrack));this._removeRemoteVideoConfig(e.userId,e.streamType)})}_removeRemoteVideoConfig(e,o){let a="".concat(e,"_").concat(o),c=this._remoteVideoConfigMap.get(a);if(c&&(c.observer&&c.observer.disconnect(),c.handlers)){let d=this._room.remotePublishedUserMap.get(e);if(d){let C=o==="main"?d.remoteVideoTrack:d.remoteAuxiliaryTrack;this._unbindRemoteVideoTrackEvents(C,c.handlers)}}this._remoteVideoConfigMap.delete(a)}_bindRemoteVideoTrackEvents(e){let o={onEnterPIP:()=>KA(this,null,function*(){yield e.player.enterPIPPromise,this.emit(Hi.PICTURE_IN_PICTURE_STATE_CHANGED,{streamType:eC(e.streamType),userId:e.userId,isPictureInPicture:!0,pictureInPictureWindow:e.player.pipWindow})}),onLeavePIP:()=>{this.emit(Hi.PICTURE_IN_PICTURE_STATE_CHANGED,{streamType:eC(e.streamType),userId:e.userId,isPictureInPicture:!1})},onEnterFullScreen:()=>{this.emit(Hi.FULL_SCREEN_STATE_CHANGED,{streamType:eC(e.streamType),userId:e.userId,isFullScreen:!0})},onLeaveFullScreen:()=>{this.emit(Hi.FULL_SCREEN_STATE_CHANGED,{streamType:eC(e.streamType),userId:e.userId,isFullScreen:!1})},onDecodeFailed:()=>{this.emit(Hi.ERROR,new wo({code:Ro.OPERATION_FAILED,extraCode:5507,message:"video decode failed"}))},onVideoSizeChanged:a=>{this.emit(Hi.VIDEO_SIZE_CHANGED,Qo(mi({},a),{streamType:eC(a.streamType)}))}};return e.player.on(fo.ENTER_PICTURE_IN_PICTURE,o.onEnterPIP),e.player.on(fo.LEAVE_PICTURE_IN_PICTURE,o.onLeavePIP),e.player.on(fo.ENTER_FULL_SCREEN,o.onEnterFullScreen),e.player.on(fo.LEAVE_FULL_SCREEN,o.onLeaveFullScreen),e.on("decode-failed",o.onDecodeFailed),e.on("video-size-changed",o.onVideoSizeChanged),o}_unbindRemoteVideoTrackEvents(e,o){e.player.off(fo.ENTER_PICTURE_IN_PICTURE,o.onEnterPIP),e.player.off(fo.LEAVE_PICTURE_IN_PICTURE,o.onLeavePIP),e.player.off(fo.ENTER_FULL_SCREEN,o.onEnterFullScreen),e.player.off(fo.LEAVE_FULL_SCREEN,o.onLeaveFullScreen),e.off("decode-failed",o.onDecodeFailed),e.off("video-size-changed",o.onVideoSizeChanged)}muteRemoteAudio(e,o){return KA(this,null,function*(){this._remoteAudioMuteMap.set(e,o);try{if(e==="*")if(o)yield this._stopRemoteAudio({userId:e});else{let a=[...this._room.remotePublishedUserMap.values()];for(let c of a)c.muteState.hasAudio&&!this._remoteAudioConfigMap.has(c.userId)&&this.room.isJoined&&(yield this._startRemoteAudio({userId:c.userId}))}else o?yield this._stopRemoteAudio({userId:e}):!this._remoteAudioConfigMap.has(e)&&this.room.isJoined&&(yield this._startRemoteAudio({userId:e}))}catch(a){throw a.code!==Ro.OPERATION_ABORT&&this._remoteAudioMuteMap.delete(e),a}})}setRemoteAudioVolume(e,o){if(e==="*"){this._remoteAudioVolumeMap.set("*",o),this._remoteAudioVolumeMap.forEach((c,d)=>this._remoteAudioVolumeMap.set(d,o));let a=[...this._room.remotePublishedUserMap.values()];for(let c of a)this._remoteAudioVolumeMap.set(c.userId,o),c.remoteAudioTrack.isSubscribed&&this._updateAudioPlayOption({playOption:{volume:o},track:c.remoteAudioTrack})}else if(e){let a=this._room.remotePublishedUserMap.get(e);this._remoteAudioVolumeMap.set(e,o),a&&a.remoteAudioTrack.isSubscribed&&this._updateAudioPlayOption({playOption:{volume:o},track:a.remoteAudioTrack})}}startPlugin(e,o){return KA(this,null,function*(){return e.start(o)})}updatePlugin(e,o){return KA(this,null,function*(){return e.update(o)})}stopPlugin(e,o){return KA(this,null,function*(){return e.stop(o)})}enableAudioVolumeEvaluation(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:2e3,o=arguments.length>1&&arguments[1]!==void 0&&arguments[1];this._room.enableAudioVolumeEvaluation(e,o)}on(e,o,a){if(this.listeners(e).includes(o))return this;if(this._log.debug("on",e),super.on(e,o,a),this._eventListened.add(e),this.listeners(Hi.AUDIO_FRAME).length>0){let{audioFrameEventConfigMap:c}=this.room.audioManager;c.get("")||c.set("",{enable:!0}),this._localAudioTrack&&this.room.audioManager.handleLocalTrackStarted({userId:"",room:this.room})}return e==="realtime-transcriber-message"&&this._room.subscribeDataChannel(),this}emit(e){for(var o=arguments.length,a=new Array(o>1?o-1:0),c=1;c{d?.abort("off")}),c.clear()}return this}getAudioTrack(){let e,o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{userId:"",streamType:"main"},a=null,c="main",d=!1;if(Yn(o)?e=o:(e=o.userId,d=o.processed===!0,o.streamType&&(c=o.streamType)),e){let C=this._room.remotePublishedUserMap.get(e);C&&(a=C.remoteAudioTrack)}else a=c==="sub"?this._localScreenAudioTrack:this._localAudioTrack;return a?d&&a.outMediaTrack&&a.outMediaTrack!==a.mediaTrack?a.outMediaTrack.clone():a.mediaTrack:null}getVideoTrack(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{userId:"",streamType:"main"},{userId:o="",streamType:a="main",processed:c=!1}=e,d=null;if(o==="")a==="main"&&this._localVideoTrack&&(d=this._localVideoTrack),a==="sub"&&this._localScreenTrack&&(d=this._localScreenTrack);else{let C=this._room.remotePublishedUserMap.get(o);C&&(d=a==="main"?C.remoteVideoTrack:C.remoteAuxiliaryTrack)}return d?c&&d.outMediaTrack&&d.outMediaTrack!==d.mediaTrack?d.outMediaTrack.clone():d.mediaTrack:null}getVideoSnapshot(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},{userId:o,streamType:a="main"}=e;if(o){let c=this._room.remotePublishedUserMap.get(o);if(a==="main"&&c!=null&&c.muteState.hasVideo)return c.remoteVideoTrack.getVideoFrame();if(a==="sub"&&c!=null&&c.muteState.hasAuxiliary)return c.remoteAuxiliaryTrack.getVideoFrame()}else{if(a==="main"&&this._localVideoTrack)return this._localVideoTrack.getVideoFrame();if(a==="sub"&&this._localScreenTrack)return this._localScreenTrack.getVideoFrame()}return""}_setCurrentSpeaker(e){var o,a;this._speakerId=e,(o=this._localAudioTrack)==null||o.setAudioOutput(e),(a=this._localScreenAudioTrack)==null||a.setAudioOutput(e),this._room.remotePublishedUserMap.forEach(c=>c.remoteAudioTrack.setAudioOutput(e))}setCurrentSpeaker(e){return KA(this,null,function*(){(yield YM()).forEach(o=>{o.deviceId===e&&(this._setCurrentSpeaker(e),this.emit(Hi.DEVICE_CHANGED,{type:"speaker",action:"active",device:o}),Zl=o)}),this._log.warn('the "setCurrentSpeaker" method of the instance will be deprecated in the future, please use "TRTC.setCurrentSpeaker" instead. For more information, please visit: '.concat(qh,"/en/TRTC.html#.setCurrentSpeaker"))})}_startRemoteAudio(e){return this._doStartRemoteAudio(e)}_doStartRemoteAudio(e){return KA(this,null,function*(){var o;let{userId:a}=e;if(this._remoteAudioConfigMap.has(a))return void this._log.warn("remote audio has already started. userId:".concat(a));let c=this._room.remotePublishedUserMap.get(a);if(!c)return;let d={},C=c.remoteAudioTrack;C.on("decode-failed",y=>{this.emit(Hi.ERROR,new wo({code:Ro.OPERATION_FAILED,extraCode:5508,message:"audio decode failed"}))}),this._listenOutputTrackChanged(C),this._speakerId&&C.setAudioOutput(this._speakerId);try{let y=(o=this._remoteAudioVolumeMap.get(a))!=null?o:this._remoteAudioVolumeMap.get("*"),S=bn(y)?y:100;d.volume=S,this._remoteAudioConfigMap.set(a,e),yield this._room.subscribe(C),ma(ca(C,"decode-failed"),EE(ca(C,Zs.INIT)),Bl(()=>{this.startPlugin(fz.Name,{track:C,type:"auto",config:{codec:"opus",sampleRate:48e3,numberOfChannels:1}})})),yield this._updateAudioPlayOption({playOption:d,track:C}),F.emit("115",{userId:a,room:this.room}),C.outMediaTrack&&this.room.audioManager.updateAudioReference({type:"add",audioReference:C.outMediaTrack,refId:"ra-".concat(a)})}catch(y){throw this._remoteAudioConfigMap.delete(a),y}this._emitTrackEvent(C)})}_stopRemoteAudio(e){let o=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];return KA(this,null,function*(){let a=this._room.remotePublishedUserMap.get(e.userId);a&&(a.remoteAudioTrack.stop(),a.muteState.hasAudio&&o&&(yield this._room.unsubscribe(a.remoteAudioTrack)),this._mediaTrackMap.delete(a.remoteAudioTrack.outMediaTrack)),this._remoteAudioConfigMap.delete("".concat(e.userId)),F.emit("116",{userId:e.userId,room:this.room}),this.room.audioManager.updateAudioReference({type:"remove",refId:"ra-".concat(e.userId)})})}_enableVideoDecodeFallback(e,o){let a,c=this._room.videoDecodeFallbackType;c&&this._plugins.has("TRTCVideoDecoder")&&(e.log.debug("remote video will fall back when decode failed",e.id),ma(ca(e,"decode-failed"),EE(ca(e,Zs.INIT)),JK(()=>{this._room.downlinkVideoCodec!=="h265"&&this.startPlugin("TRTCVideoDecoder",{type:"auto",renderer:"videoFrame",track:e,config:{codec:"avc1.420028"},fallback:c})}),e1(ca(e,"decode-downgrade-state-changed")),Bl(d=>{a=d.state,this.emit(Hi.VIDEO_DECODE_DOWNGRADE_STATE_CHANGED,Qo(mi({},d),{streamType:o,userId:e.userId}))},d=>{e.log.error("fallback",d)},()=>{a==="STARTED"&&e.log.info("fallback complete")})))}_updateVideoPlayOption(e){return KA(this,arguments,function(o){let{view:a,playOption:c,track:d,prevConfig:C}=o;return function*(){if(d.setMirror(c.mirror),Je(a)&&C&&C.view&&!S0(c)){let y=nM(C.view);y.length>0&&(yield d.play(y,c))}if(!Je(a)){let y=nM(a);y.length>0?yield d.play(y,c):d.stop()}}()})}_updateAudioPlayOption(e){return KA(this,arguments,function(o){var a=this;let{playOption:c={},track:d,prevConfig:C}=o;return function*(){if(!d.isPlayCalled)try{yield d.play(null,c)}catch{}if(Je(c.muted)||d.setPlayerMute(c.muted),Je(c.volume)||d.setAudioVolume(c.volume/100),d instanceof HM&&d.mediaTrack){let y=c.muted===!1&&!Je(c.volume)&&c.volume>0?"add":"remove";a.room.audioManager.updateAudioReference({type:y,audioReference:d.mediaTrack,refId:"em"})}else if(d instanceof s1){let y=c.muted?0:c.volume;if(Je(y))return;a.room.audioManager.updateAudioReference({type:"updateVolume",refId:"ra-".concat(d.userId),volume:c.volume})}}()})}_listenOutputTrackChanged(e){e.listeners("output-media-track-changed").length===0&&e.on("output-media-track-changed",()=>this._emitTrackEvent(e,!1))}_emitTrackEvent(e){let o=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],a=e.isRemote?e.userId:"";e.outMediaTrack&&(o&&this._mediaTrackMap.get(e.outMediaTrack)===a||(this._mediaTrackMap.set(e.outMediaTrack,a),this.emit(Hi.TRACK,{userId:a,streamType:eC(e.streamType),track:e.outMediaTrack,sourceTrack:e.mediaTrack})))}_checkTrackToPublish(){var e,o,a;let c=[];if((e=this._localAudioConfig)!=null&&e.publish&&this._localAudioTrack&&c.push(this._localAudioTrack),(o=this._localVideoConfig)!=null&&o.publish&&this._localVideoTrack&&c.push(this._localVideoTrack),(a=this._localScreenConfig)!=null&&a.publish&&(this._localScreenTrack&&c.push(this._localScreenTrack),this._localScreenAudioTrack&&c.push(this._localScreenAudioTrack),this._checkScreenAudioEchoCancellation(this._localScreenTrack,this._localScreenAudioTrack)),c.length!==0)return Promise.all(c.map(d=>this._room.publish(d).catch(()=>{})))}_observeView(e){let{remoteTrack:o,view:a,receiveWhenViewVisible:c,viewRoot:d}=e;if(Je(a)||Je(c))return;let C=this._remoteVideoConfigMap.get("".concat(o.userId,"_").concat(eC(o.streamType)));if(!C)return;let y=C.observer||void 0;if(a===null||wa(a)&&a.length===0||!c)return y?.disconnect(),void(o.isSubscribed||(this._log.info("_observeView observer disconnect, resubscribe",o.userId,o.strMediaType),this._room.subscribe(o).catch(()=>{})));let S=C.visibleViewMap||new Map,k=-1;(!y||y.root!==d)&&(y?.disconnect(),S.clear(),y=new IntersectionObserver(J=>{J.forEach(gA=>{S.set(gA.target,gA.isIntersecting),o.log.info("view ".concat(gA.target.id," is").concat(gA.isIntersecting?"":" not"," visible"))}),clearTimeout(k),k=window.setTimeout(()=>{[...S.values()].find(gA=>gA)?o.isSubscribed||this._room.subscribe(o).catch(()=>{}):o.isSubscribed&&this._room.unsubscribe(o).catch(()=>{})},200)},{root:d}));let V=new Set(nM(a));S.forEach((J,gA)=>{V.has(gA)||(y.unobserve(gA),S.delete(gA))}),V.forEach(J=>{S.set(J,!0),y.observe(J)}),y.takeRecords().forEach(J=>{S.set(J.target,J.isIntersecting)}),C.visibleViewMap=S,C.observer=y}_exitRoom(){return KA(this,null,function*(){this._room.isJoined&&(yield this._room.leave()),this._clearRemoteTracks()})}_stopScreenShare(){return KA(this,null,function*(){var e,o;if(this._localScreenTrack){if(this._room.isJoined){let a=[];(e=this._localScreenConfig)!=null&&e.publish&&a.push(this._localScreenTrack),this._localScreenAudioTrack&&a.push(this._localScreenAudioTrack),yield Promise.all(a.map(c=>this._room.unpublish(c).catch(()=>{})))}this._localScreenTrack.stop(),this._localScreenTrack.close(),this._localScreenAudioTrack&&(((o=this._localScreenAudioTrack.trackSettings)==null?void 0:o.echoCancellation)===!1&&this.stopPlugin("AudioProcessor"),this._localScreenAudioTrack.stop(),this._localScreenAudioTrack.close(),this._room.audioManager.removeInput(this._localScreenAudioTrack),this._localScreenAudioTrack=null),kn(this._localScreenTrack),this._localScreenTrack=null,delete this._room.capturedLocalAuxVideoTrack,this._localScreenConfig=null}})}_checkScreenAudioEchoCancellation(e,o){return KA(this,null,function*(){var a,c;if(!e||!o)return;let d=(a=e.trackSettings)==null?void 0:a.displaySurface;if(((c=o.trackSettings)==null?void 0:c.echoCancellation)===!1&&(d==="monitor"||d==="browser"&&e.isShareCurrentTab)){this._log.warn("echoCancellation of screen audio track is disable. Try starting audioProcessor plugin");try{yield this.startPlugin("AudioProcessor",{sdkAppId:Number(this.room.sdkAppId),userId:this._room.userId,userSig:this.room.userSig,isScreenAudioNeedAudioProcess:!0,isLocalAudioNeedAudioProcess:!1})}catch(C){this._log.warn("start audioProcessor plugin failed: ",C)}}})}_onLocalTrackCaptured(e){let{track:o}=e;o.kind==="audio"&&(!Zl||Xk(Zl))&&(this._initActiveSpeaker(),F.off("102",this._onLocalTrackCaptured,this))}_initActiveSpeaker(){return KA(this,null,function*(){if(Zl&&!Xk(Zl))this.emit(Hi.DEVICE_CHANGED,{type:"speaker",action:"active",device:Zl});else{let e=yield YM();e[0]&&!Xk(e[0])?(Zl=e[0],this.emit(Hi.DEVICE_CHANGED,{type:"speaker",action:"active",device:e[0]})):F.on("102",this._onLocalTrackCaptured,this)}})}_onAudioAvailable(e){let{userId:o}=e,a=this._remoteAudioMuteMap.has(o)?this._remoteAudioMuteMap.get(o):this._remoteAudioMuteMap.get("*");(a===!1||this._room.autoReceiveAudio&&!a)&&this._doStartRemoteAudio({userId:o}).catch(()=>{})}_onVideoAvailable(e){let{userId:o,streamType:a}=e;if(!this._room.autoReceiveVideo)return;let c=this._room.remotePublishedUserMap.get(o);if(c){let d=a==="main"?c.remoteVideoTrack:c.remoteAuxiliaryTrack,C=[d];this._room.autoReceiveAudio&&c.remoteAudioTrack.isAvailable&&C.push(c.remoteAudioTrack),this._room.subscribe(...C).then(()=>{this._emitTrackEvent(d)}).catch(()=>{})}}_onAudioUnavailable(e){let{userId:o,muteState:a}=e;a.hasAudio&&a.audioMuted||this._stopRemoteAudio({userId:o},!1).catch(()=>{})}_onVideoUnavailable(e){let{userId:o,streamType:a}=e;this._stopRemoteVideo({userId:o,streamType:a},!1).catch(()=>{})}_onDataChannelAvailable(){if(this.listeners("realtime-transcriber-message").length>0)return this._room.subscribeDataChannel()}sendSEIMessage(e,o){var a;let c=this._plugins.get("SEI");c&&(c.update({buffer:e,options:Qo(mi({seiPayloadType:243},o),{small:!((a=this._localVideoTrack)==null||!a.small)})}),ii.addCount({key:5e5,useUV:!0}))}sendCustomMessage(e){var o,a;(a=(o=this._room).sendCustomMessage)==null||a.call(o,e),ii.addCount({key:500001,useUV:!0})}callExperimentalAPI(e,o){return KA(this,null,function*(){return this._log.info("callExperimentalAPI(".concat(e,", ").concat(JSON.stringify(o),")")),GiA.call(e,mi({trtcInstance:this},o))})}static setLogLevel(e,o){QA.setLogLevel(e),Je(o)||(o?QA.enableUploadLog():QA.disableUploadLog())}static isSupported(){return Nk(nm.frameWorkType)}static getPermissions(e){return KA(this,arguments,function(o){let{request:a=!0,types:c=["camera","microphone"]}=o;return function*(){a&&(yield Q1.request(c).catch(y=>{var S;return QA.error("getPermissions request failed, error: ".concat((S=y?.message)!=null?S:y))}));let[d,C]=yield Promise.all([Q1.get("camera"),Q1.get("microphone")]);return{camera:d,microphone:C}}()})}static getCameraList(){return $p(!(arguments.length>0&&arguments[0]!==void 0)||arguments[0])}static getMicrophoneList(){return Xp(!(arguments.length>0&&arguments[0]!==void 0)||arguments[0])}static getSpeakerList(){return YM(!(arguments.length>0&&arguments[0]!==void 0)||arguments[0])}static setCurrentSpeaker(e){return KA(this,null,function*(){if(Ha&&(e===lL.SPEAKER||e===lL.HEADSET)){let o=yield nm.getMicrophoneList(),a="";return o.forEach(c=>{c.label===e&&(a=c.deviceId)}),a?void dL.forEach(c=>KA(null,null,function*(){c._localAudioTrack&&(yield c.updateLocalAudio({option:{microphoneId:a}}))})):void 0}(yield YM()).forEach(o=>{o.deviceId===e&&(dL.forEach(a=>{a._setCurrentSpeaker(e),a.emit(Hi.DEVICE_CHANGED,{type:"speaker",action:"active",device:o})}),Zl=o)})})}static _addKVStat(e){let{type:o,key:a,value:c,base:d,useUV:C,version:y,max:S}=e;switch(y&&(Zh.version=y),o){case"count":Zh.addCount({key:a,useUV:C});break;case"enum":Zh.addEnum({key:a,value:c,useUV:C});break;case"number":Zh.addNumber({key:a,value:c,split:d,max:S})}}get localVideoTrack(){return this._localVideoTrack}get localScreenTrack(){return this._localScreenTrack}get localScreenAudioTrack(){return this._localScreenAudioTrack}};Y(Ss,"VERSION",Cz),Y(Ss,"_loggerManager",QA),Y(Ss,"EVENT",Hi),Y(Ss,"ERROR_CODE",Ro),Y(Ss,"TYPE",lL),Y(Ss,"frameWorkType",30),Ci([fa({replaceArg:A=>({argIndex:0,value:{name:"plugin"in A?A.plugin.Name:A.Name,assetsPath:"assetsPath"in A?A?.assetsPath:"default"}})})],Ss.prototype,"use"),Ci([hu(zl.TRTC.enterRoom),WM("room",(A,e)=>{let[o]=A,[a]=e;return(o.roomId||o.strRoomId)===(a.roomId||a.strRoomId)&&o.userId===a.userId&&o.sdkAppId===a.sdkAppId}),jr(A=>function(e){return this._log.setUserId(e.userId),this._log.setSdkAppId(e.sdkAppId),A.call(this,e)}),fa()],Ss.prototype,"enterRoom"),Ci([fa()],Ss.prototype,"exitRoom"),Ci([hu(zl.TRTC.switchRoom),fa(),$k()],Ss.prototype,"switchRoom"),Ci([hu(zl.TRTC.switchRole),C_("room",{merge:(A,e)=>e}),fa()],Ss.prototype,"switchRole"),Ci([fa()],Ss.prototype,"destroy"),Ci([hu(zl.TRTC.startLocalAudio),WM("audio",(A,e)=>{let[o]=A,[a]=e;var c,d;return((c=o?.option)==null?void 0:c.microphoneId)===((d=a?.option)==null?void 0:d.microphoneId)}),fa()],Ss.prototype,"startLocalAudio"),Ci([hu(zl.TRTC.updateLocalAudio),C_("audio",{debounce:{delay:200,getKey:()=>"".concat(yz,"-localAudio"),isNeedToDebounce:A=>{var e;return!Je((e=A.option)==null?void 0:e.captureVolume)}}}),fa()],Ss.prototype,"updateLocalAudio"),Ci([zM("audio"),fa()],Ss.prototype,"stopLocalAudio"),Ci([hu(zl.TRTC.startLocalVideo),WM("video",(A,e)=>{let[o]=A,[a]=e;var c,d;return((c=o?.option)==null?void 0:c.cameraId)===((d=a?.option)==null?void 0:d.cameraId)}),fa()],Ss.prototype,"startLocalVideo"),Ci([hu(zl.TRTC.updateLocalVideo),C_("video"),fa()],Ss.prototype,"updateLocalVideo"),Ci([zM("video"),fa()],Ss.prototype,"stopLocalVideo"),Ci([hu(zl.TRTC.startScreenShare),WM("screen",()=>!0),fa()],Ss.prototype,"startScreenShare"),Ci([hu(zl.TRTC.updateScreenShare),C_("screen"),fa()],Ss.prototype,"updateScreenShare"),Ci([fa()],Ss.prototype,"stopScreenShare"),Ci([hu(zl.TRTC.startRemoteVideo),WM(A=>"v".concat(A.userId).concat(A.streamType),()=>!0),fa({getRemoteId:A=>"".concat(A.userId,"_").concat(A.streamType)})],Ss.prototype,"startRemoteVideo"),Ci([hu(zl.TRTC.updateRemoteVideo),C_(A=>"v".concat(A.userId).concat(A.streamType)),fa({getRemoteId:A=>"".concat(A.userId,"_").concat(A.streamType)})],Ss.prototype,"updateRemoteVideo"),Ci([hu(zl.TRTC.stopRemoteVideo),jr(A=>function(e){return KA(this,null,function*(){if(e.userId==="*"){let o=[];return this._room.remotePublishedUserMap.forEach(a=>{this._remoteVideoConfigMap.has("".concat(a.userId,"_main"))&&o.push(this.stopRemoteVideo({streamType:"main",userId:a.userId}).catch(()=>{})),this._remoteVideoConfigMap.has("".concat(a.userId,"_sub"))&&o.push(this.stopRemoteVideo({streamType:"sub",userId:a.userId}).catch(()=>{}))}),Promise.all(o)}return A.call(this,e)})}),fa({getRemoteId:A=>"".concat(A.userId,"_").concat(A.streamType)})],Ss.prototype,"stopRemoteVideo"),Ci([zM(A=>"v".concat(A.userId).concat(A.streamType))],Ss.prototype,"_stopRemoteVideo"),Ci([hu(...zl.TRTC.muteRemoteAudio),fa({getRemoteId:A=>A})],Ss.prototype,"muteRemoteAudio"),Ci([hz(...zl.TRTC.setRemoteAudioVolume),function(A,e){return jr((o,a)=>function(){for(var c=arguments.length,d=new Array(c),C=0;C{var J;(J=h_.get(this))==null||J.delete(S)},A);y.set(S,V)}else{clearTimeout(k);let V=window.setTimeout(()=>{var J;o.apply(this,d),(J=h_.get(this))==null||J.delete(S)},A);y.set(S,V)}})}(200,A=>A),fa({getRemoteId:A=>A})],Ss.prototype,"setRemoteAudioVolume"),Ci([nj("start"),VM(A=>{var e;return(e=A.afterStart)==null?void 0:e.call(A)}),WM((A,e)=>A.disableRandomCall?null:A.getAlias()+A.getGroup(e)),fa({replaceArg:A=>({argIndex:0,value:A.getName()}),getKVReportKey:A=>_2[A.getName()],ignoreLog:A=>A.getName()==="Debug",ignoreErrorLog:A=>A.getName()==="AudioProcessor"})],Ss.prototype,"startPlugin"),Ci([nj("update"),C_((A,e)=>A.disableRandomCall?null:A.getAlias()+A.getGroup(e),{merge:(A,e)=>(Wh(A[1],e[1]),A)}),fa({replaceArg:A=>({argIndex:0,value:A.getName()}),getKVReportKey:A=>uy[A.getName()]})],Ss.prototype,"updatePlugin"),Ci([nj("stop"),zM((A,e)=>{if(A.disableRandomCall)return null;let o=A.getGroup(e),a=A.getAlias();return o==="*"?new RegExp("".concat(a,".*")):a+o}),fa({replaceArg:A=>({argIndex:0,value:A.getName()}),getKVReportKey:A=>X0[A.getName()]})],Ss.prototype,"stopPlugin"),Ci([hz(...zl.TRTC.enableAudioVolumeEvaluation)],Ss.prototype,"enableAudioVolumeEvaluation"),Ci([fa()],Ss.prototype,"getVideoSnapshot"),Ci([fa()],Ss.prototype,"_setCurrentSpeaker"),Ci([WM(A=>"a".concat(A.userId),()=>!0)],Ss.prototype,"_startRemoteAudio"),Ci([jr(A=>function(e){return KA(this,null,function*(){return e.userId==="*"?Promise.all([...this._room.remotePublishedUserMap.values()].map(o=>this._stopRemoteAudio(Qo(mi({},e),{userId:o.userId})).catch(()=>{}))):A.call(this,e)})}),zM(A=>"a".concat(A.userId))],Ss.prototype,"_stopRemoteAudio"),Ci([zM("room")],Ss.prototype,"_exitRoom"),Ci([zM("screen")],Ss.prototype,"_stopScreenShare"),Ci([hu(...zl.TRTC.sendSEIMessage),Y5({timesInSecond:30,maxSizeInSecond:8e3,getSize:function(){for(var A=arguments.length,e=new Array(A),o=0;oA.data.byteLength})],Ss.prototype,"sendCustomMessage"),Ci([fa()],Ss.prototype,"callExperimentalAPI"),Ci([ZM()],Ss,"create"),Ci([hu(zl.TRTC.create)],Ss,"_create"),Ci([ZM()],Ss,"setLogLevel"),Ci([ZM()],Ss,"isSupported"),Ci([ZM(),fa()],Ss,"getPermissions"),Ci([ZM()],Ss,"getCameraList"),Ci([ZM()],Ss,"getMicrophoneList"),Ci([ZM()],Ss,"getSpeakerList");var CL=Ss,LiA=class{constructor(){Y(this,"_set",new Set),F.on(nA.LEAVE_SUCCESS,this.delete,this),F.on(nA.SWITCH_ROOM_SUCCESS,this.handleSwitchRoomSuccess,this)}add(A){let{room:e,roomId:o}=A;if(e.scene==="rtc")return;let a=this.getKey(e.userId,o||e.roomId,e.sdkAppId,e.useStringRoomId);this._set.add(a)}delete(A){let{room:e,roomId:o}=A;if(e.scene==="rtc")return;let a=this.getKey(e.userId,e.roomId||o,e.sdkAppId,e.useStringRoomId);this._set.delete(a)}getKey(A,e,o,a){return"".concat(o,"_").concat(e,"_").concat(A,"_").concat(a)}isJoined(A){let{userId:e,roomId:o,sdkAppId:a,room:c}=A;return c.scene!=="rtc"&&this._set.has(this.getKey(e,o,a,c.useStringRoomId))}handleSwitchRoomSuccess(A){let{room:e,currentRoomId:o,targetRoomId:a}=A;e.scene!=="rtc"&&(this._set.delete(this.getKey(e.userId,o,e.sdkAppId,e.useStringRoomId)),this._set.add(this.getKey(e.userId,a,e.sdkAppId,e.useStringRoomId)))}};function UiA(){return KA(this,null,function*(){let A,e;try{let CA=yield Xp();A=CA&&CA.length}catch{}try{let CA=yield $p();e=CA&&CA.length}catch{}let o={microphone:A,camera:e},{isH264EncodeSupported:a,isVp8EncodeSupported:c,isH264DecodeSupported:d,isVp8DecodeSupported:C,isH265EncodeSupported:y,isH265DecodeSupported:S}=this.checkSystemResult.detail,k=te.basis(),V={webRTC:k.isWebRTCSupported,getUserMedia:k.isGetUserMediaSupported,webSocket:k.isWebSocketsSupported,screenShare:k.isScreenShareSupported,webAudio:k.isWebAudioSupported,h264Encode:a,h264Decode:d,vp8Encode:c,vp8Decode:C,h265Encode:y,h265Decode:S},J={browser:k.browser,os:k.os,trtc:V,devices:o},gA={isWebCodecSupported:k.isWebCodecSupported,isMediaSessionSupported:k.isMediaSessionSupported,isWebTransportSupported:k.isWebTransportSupported};sn.uploadEvent({log:"trtcstats-".concat(JSON.stringify(J)),userId:this.userId}),this._log.info("TrtcStats-".concat(JSON.stringify(J))),sn.uploadEvent({log:"trtcadvancedstats-".concat(JSON.stringify(gA)),userId:this.userId}),kM()})}var FiA=gc(Kl()),Dz="1",dj="2",hL="3",OiA="4",p1="5",PiA="6",m1="7",Sz="8",eB={CLIENT_BANNED:9,CHANNEL_SETUP_RESULT:19,CHANNEL_RECONNECT_RESULT:514,JOIN_ROOM_RESULT:20,PEER_JOIN:4134,PEER_LEAVE:4135,STREAM_ADDED:16,STREAM_REMOVED:18,UPLINK_NETWORK_STATS:22,UPDATE_REMOTE_MUTE_STAT:23,PUBLISH_RESULT:4098,PUBLISH_STATE_CHANGE_RESULT:4112,UNPUBLISH_RESULT:4100,SUBSCRIBE_RESULT:4102,UNSUBSCRIBE_RESULT:4104,SUBSCRIBE_CHANGE_RESULT:4106,MUTE_RESULT:4108,UPDATE_OFFER_RESULT:4128,START_PUBLISH_TENCENT_CDN_RES:1286,STOP_PUBLISH_TENCENT_CDN_RES:1288,START_PUBLISH_GIVEN_CDN_RES:777,STOP_PUBLISH_GIVEN_CDN_RES:779,START_MIX_TRANSCODE_RES:781,STOP_MIX_TRANSCODE_RES:783,START_PUBLISH_CDN_STREAM_RES:8196,UPDATE_PUBLISH_CDN_STREAM_RES:8198,STOP_PUBLISH_CDN_STREAM_RES:8200,USER_LIST_RES:4137,SWITCH_ROLE_RES:4110,UPDATE_CONSTRAINT_CONFIG_RES:772,REBUILD_PEER_CONNECTION_RES:4150,SPC_PUBLISH_RESULT:4146,SPC_SUBSCRIBE_RESULT:4156,ABILITY_STATUS_REPORT_RESULT:4158,SERVER_FIRST_PACKAGE_RECEIVED:5e3,RECEIVE_CUSTOM_MSG:4140,FALLBACK_CODEC:66,SEND_SWITCH_ROOM_RES:4160,SEND_SWITCH_ROOM_SUBED_REQ:4161,UPDATE_NETWORK_TIME_RESULT:5001,CUSTOM_CMD_RES:8220},xiA=[eB.UPDATE_REMOTE_MUTE_STAT,eB.UPLINK_NETWORK_STATS,eB.USER_LIST_RES,eB.MUTE_RESULT,eB.SERVER_FIRST_PACKAGE_RECEIVED,eB.RECEIVE_CUSTOM_MSG,eB.UPDATE_NETWORK_TIME_RESULT],ls={CLIENT_BANNED:"client-banned",CHANNEL_SETUP_RESULT:"channel-setup-result",CHANNEL_RECONNECT_RESULT:"channel-reconnect-result",JOIN_ROOM_RESULT:"join-room-result",PEER_JOIN:"peer-join",PEER_LEAVE:"peer-leave",STREAM_ADDED:"stream-added",STREAM_REMOVED:"stream-removed",UPLINK_NETWORK_STATS:"uplink-network-stats",UPDATE_REMOTE_MUTE_STAT:"update-remote-mute-stat",PUBLISH_RESULT:"publish-result",PUBLISH_STATE_CHANGE_RESULT:"publish-state-change-result",UNPUBLISH_RESULT:"unpublish-result",SUBSCRIBE_RESULT:"subscribe-result",SUBSCRIBE_CHANGE_RESULT:"subscribe-change-result",UNSUBSCRIBE_RESULT:"unsubscribe-result",UPDATE_OFFER_RESULT:"update-offer-result",START_PUBLISH_TENCENT_CDN_RES:"start-publish-tencent-cdn-res",STOP_PUBLISH_TENCENT_CDN_RES:"stop-publish-tencent-cdn-res",START_PUBLISH_GIVEN_CDN_RES:"start-publish-given-cdn-res",STOP_PUBLISH_GIVEN_CDN_RES:"stop-publish-given-cdn-res",START_MIX_TRANSCODE_RES:"start-mix-transcode-res",STOP_MIX_TRANSCODE_RES:"stop-mix-transcode-res",START_PUBLISH_CDN_STREAM_RES:"start-publish-cdn-stream-res",UPDATE_PUBLISH_CDN_STREAM_RES:"update-publish-cdn-stream-res",STOP_PUBLISH_CDN_STREAM_RES:"stop-publish-cdn-stream-res",USER_LIST_RES:"user-list-res",SWITCH_ROLE_RES:"switch_role_res",MUTE_RESULT:"mute-result",UPDATE_CONSTRAINT_CONFIG_RES:"update-contraint-config-res",REBUILD_PEER_CONNECTION_RES:"rebuild-pc-res",SPC_PUBLISH_RESULT:"spc-publish-result",SPC_SUBSCRIBE_RESULT:"spc-subscribe-result",ABILITY_STATUS_REPORT_RESULT:"ability-status-report",SERVER_FIRST_PACKAGE_RECEIVED:"first-pkg-received",RECEIVE_CUSTOM_MSG:"receive-custom-msg",FALLBACK_CODEC:"fallback-codec",SEND_SWITCH_ROOM_RES:"send-switch-room-res",SEND_SWITCH_ROOM_SUBED_REQ:"send-switch-room-subed-res",UPDATE_NETWORK_TIME_RESULT:"update_network_time_result",CUSTOM_CMD_RES:"custom-cmd-res"},Mz="publish_change",YiA="join",ViA="leave",JiA="quality_report",vz="mute_uplink",Rz="publish",Cj="publish_state_change",f1="unpublish",wz="subscribe",hj="unsubscribe",Bj="subscribe_change",HiA="start_publishing",qiA="stop_publishing",KiA="start_push_user_cdn",jiA="stop_push_user_cdn",WiA="start_mcu_mix",ziA="stop_mcu_mix",ZiA="start_publish_cdn_stream",XiA="update_publish_cdn_stream",$iA="stop_publish_cdn_stream",AoA="get_user_list",eoA="change_role",Qj="update_constraint_config",toA="rebuild_pc",ioA="join/v2",_z="publish/v2",Tz="subscribe/v3",ooA="ability_status_report",soA="reconnect",noA="channel_msg",roA="switch_room",aoA="update_network_time",goA=new Set([Rz,Mz,Cj,f1,wz,Bj,hj,_z,Tz]),y1=new Set,coA=["autoTest","relayInnerIp","relayOuterIp","mcd","newRelay","clientIp"],loA=0,Nz=class extends FiA.default{constructor(A){var e,o,a;super(),Y(this,"room"),Y(this,"sdkAppId"),Y(this,"userId"),Y(this,"userSig"),Y(this,"url"),Y(this,"backupUrl"),Y(this,"destroyed",!1),Y(this,"_socketInUse"),Y(this,"_socket"),Y(this,"_backupSocket"),Y(this,"_signalInfo",{tinyId:void 0,clientIp:"",signalIp:"",relayIp:"",relayInnerIp:"",relayPort:0,endReportExtend:void 0,bakRelayIps:[],reportToken:void 0}),Y(this,"_currentState","DISCONNECTED"),Y(this,"_isReconnecting",!1),Y(this,"_seq",0),Y(this,"_log"),Y(this,"_lastMessageTime",-1),Y(this,"_connectStartTime",-1),Y(this,"_stopConnectRetry"),Y(this,"_isFirstConnect",!0),Y(this,"bytesSent",0),Y(this,"bytesReceived",0),Y(this,"keepAlive",!1),Y(this,"signalDomainWhenUnifiedProxy"),Y(this,"stopKeepAliveTimeout"),Y(this,"stopPrelinkTimeout"),Y(this,"rtt",0),Y(this,"prelink",!1),Y(this,"_prelinkConfig"),this.room=A.room,this.sdkAppId=A.sdkAppId,this.userId=A.userId,this.userSig=A.userSig,this.signalDomainWhenUnifiedProxy=A.signalDomainWhenUnifiedProxy,this.prelink=A.prelink||!1;let c=((o=(e=this.room.scheduleResult)==null?void 0:e.config)==null?void 0:o.keepAliveClient)||0;(a=this.room.joinParams)!=null&&a.keepAlive&&!c&&(c=1),c-y1.size>0&&this.room.enableSPC&&(this.keepAlive=!0,y1.add(this)),this.url=A.url,this.backupUrl=A.backupUrl,this._seq=0,this._log=QA.createLogger({parent:this.room.getLogger(),id:"ws".concat(++loA),userId:this.userId,sdkAppId:this.sdkAppId}),this.onmessage=this.onmessage.bind(this),this.onerror=this.onerror.bind(this),this.onclose=this.onclose.bind(this)}get race(){return this.room.enableSPC&&!this.room.proxy_ws}get urlParam(){let A="?sdkAppId=".concat(encodeURIComponent(this.sdkAppId),"&userId=").concat(encodeURIComponent(this.userId),"&userSig=").concat(encodeURIComponent(this.userSig),"&keepAlive=").concat(encodeURIComponent(Number(this.keepAlive)));this.signalDomainWhenUnifiedProxy&&(A+="&signalDomain=".concat(encodeURIComponent(this.signalDomainWhenUnifiedProxy))),this.prelink&&(A+="&prelink=1");let e=new URLSearchParams(location.search);return coA.forEach(o=>{let a=e.get("trtc_".concat(o));a&&(A+="&".concat(o,"=").concat(encodeURIComponent(a)))}),this.race?"".concat(A,"&race=1"):A}get _urlWithParam(){return"".concat(this.url).concat(this.race?"/v2/ws":"").concat(this.urlParam)}get _backupUrlWithParam(){return"".concat(this.backupUrl).concat(this.race?"/v2/ws":"").concat(this.urlParam)}get isConnected(){return this._currentState==="CONNECTED"}get isConnecting(){return this._currentState==="CONNECTING"}get isOnline(){return this._currentState==="CONNECTED"&&Date.now()-this._lastMessageTime<12e3}connect(){return KA(this,arguments,function(){var A=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1e4;return function*(){if(A.isConnected)return Promise.resolve();A._log.info("connect to [".concat(A.url,", ").concat(A.backupUrl,"] ").concat(A.race?"race":"").concat(e?" timeout: ".concat(e):""," keepAlive: ").concat(Number(A.keepAlive))),A.emitConnectionStateChanged("CONNECTING"),A._connectStartTime=ko();let o=[A.connectWS({url:A._urlWithParam,isMain:!0,timeout:e})];A.race&&A._backupUrlWithParam!==A._urlWithParam&&o.push(A.connectWS({url:A._backupUrlWithParam,isMain:!1,timeout:e})),A._socketInUse=yield oM(o),A.unbindAndCloseSocket(A._socketInUse===A._socket?YA.BACKUP:YA.MAIN),A._isFirstConnect&&(ii.addSuccessEvent({key:521720}),A._isFirstConnect=!1),A.emitConnectionStateChanged("CONNECTED")}()})}connectWS(A){let{url:e,timeout:o,isMain:a}=A,c=new WebSocket(e);this.bindSocket(c),a?this._socket=c:this._backupSocket=c;let d=-1;return new Promise((C,y)=>{c.onclose=y,c.onerror=y,c.onopen=()=>C(c),o&&(d=setTimeout(()=>{this.unbindAndCloseSocket(a?YA.MAIN:YA.BACKUP),y(new ai({code:dt.SIGNAL_CHANNEL_SETUP_FAILED,message:"ws connect timeout"}))},o))}).finally(()=>{c.onclose=null,c.onerror=null,c.onopen=null,clearTimeout(d)})}bindSocket(A){A.addEventListener("close",this.onclose),A.addEventListener("error",this.onerror),A.addEventListener("message",this.onmessage)}unbindSocket(A){A.removeEventListener("close",this.onclose),A.removeEventListener("error",this.onerror),A.removeEventListener("message",this.onmessage)}unbindAndCloseSocket(A){if(A===YA.MAIN){if(this._socket){this.unbindSocket(this._socket);try{this._socket.close(1e3)}catch{}this._socket=null}}else if(this._backupSocket){this.unbindSocket(this._backupSocket);try{this._backupSocket.close(1e3)}catch{}this._backupSocket=null}}onclose(A){A.target===this._socketInUse&&(this._log.warn("".concat(A.target===this._socket?"main":"backup"," is closed code:").concat(A.code," ").concat(A.reason)),this.emitConnectionStateChanged("DISCONNECTED"),(!A.wasClean||A.code!==1e3&&A.code!==4013)&&this.startReconnection(),this.prelink&&A.code===4013&&this.room.clearNetworkQuality(),this.room.isJoining&&this.emit(p1,new ai({code:dt.SIGNAL_CHANNEL_SETUP_FAILED,message:"websocket onclose"})))}onerror(A){this._log.error("".concat(A.target===this._socket?"main":"backup"," error observed")),this.emitConnectionStateChanged("DISCONNECTED"),A.target===this._socketInUse&&(this.unbindAndCloseSocket(YA.MAIN),this.unbindAndCloseSocket(YA.BACKUP),this._socketInUse=null,this.reconnect()),this.room.isJoining&&this.emit(p1,new ai({code:dt.SIGNAL_CHANNEL_SETUP_FAILED,message:"websocket onerror"}))}onmessage(A){if(!this.isConnected)return;let{isOnline:e}=this;this._lastMessageTime=Date.now(),e||this.emit(Sz),this.bytesReceived+=v0(A.data);let o=JSON.parse(A.data),{cmd:a,data:c}=o,d=Object.values(eB),C=Object.keys(eB)[d.indexOf(a)],y=ls[C]||a;switch(xiA.includes(a)||(this._log.debug("received ".concat(a," msg: ").concat(A.data)),y&&this._log.info("Received event: [ ".concat(y," ]"))),a){case eB.CHANNEL_SETUP_RESULT:if(o.code===0)this._signalInfo.clientIp=c.clientIp,this._signalInfo.signalIp=c.signalInnerIp,c.svrTime&&KB(c.svrTime-new Date().getTime()),this._log.info("ChannelSetup Success ".concat(ko()-this._connectStartTime)),ii.addSuccessEvent({key:521701,cost:ko()-this._connectStartTime}),this._connectStartTime=-1,this.room.firewallDetector.resetTimeoutCount(),this.emit(Dz,{signalInfo:this._signalInfo});else{let S=new ai({code:dt.SIGNAL_CHANNEL_SETUP_FAILED,extraCode:o.code,message:Xo({key:Mo.SIGNAL_CHANNEL_SETUP_FAILED,data:{errorCode:o.code,errorMsg:o.message}})});this._log.error("".concat(o.code,", ").concat(o.message)),this.close(),ii.addFailedEvent({key:521701,error:S}),this.emit(p1,S)}break;case eB.JOIN_ROOM_RESULT:o.code===0&&(this._signalInfo.relayIp=c.relayOuterIp,this._signalInfo.relayInnerIp=c.relayInnerIp,this._signalInfo.bakRelayIps=c.bakRelayIps,this._signalInfo.relayPort=c.relayPort,this._signalInfo.tinyId=o.tinyId,this._signalInfo.endReportExtend=c.endReportExtend,this._signalInfo.reportToken=c.reportToken,this._log.info("signalIp:".concat(this._signalInfo.signalIp," clientIp:").concat(this._signalInfo.clientIp," relayIp: ").concat(this._signalInfo.relayIp))),this.emit(y,{data:o});break;default:this.emit(String(y),{data:o})}}reGetSignalChannelUrl(){return KA(this,null,function*(){try{if(!this.room.joinParams)return;hQ(!0),yield this.room.schedule(this.room.joinParams);let{mainUrl:A,backupUrl:e}=this.room.getSignalChannelUrl();this.url=A,this.backupUrl=e}catch{}})}startReconnection(){if(!this._socketInUse)return;this._socketInUse.onclose=null,this._socketInUse.close(4011);let A=this._socketInUse===this._socket;this.unbindAndCloseSocket(A?YA.MAIN:YA.BACKUP),this._socketInUse=null,this.emitConnectionStateChanged("DISCONNECTED"),this.reconnect()}reconnect(){return KA(this,null,function*(){if(!this._isReconnecting){if(!this.room.isJoined&&this.keepAlive)return void this.close();this._isReconnecting=!0;try{this._log.warn("reconnect"),yield this.connect();let{roomId:A,useStringRoomId:e}=this.room,{relayIp:o,relayInnerIp:a,relayPort:c}=this._signalInfo,{data:d}=yield this.sendWaitForResponse({command:soA,data:{roomId:A,useStringRoomId:e,relayInnerIp:a,relayOuterIp:o,relayPort:c},responseCommand:ls.CHANNEL_RECONNECT_RESULT});d.code===0?(this._log.warn("reconnect success"),this.stopReconnection(),ii.addSuccessEvent({key:521702,cost:ko()-this._connectStartTime}),this._connectStartTime=-1,this.room.syncUserList(),this.room.checkConnectionsToReconnect()):(ii.addFailedEvent({key:521702,error:d.code}),this._log.warn("reconnect failed, ".concat(d.code," ").concat(d.message)),this.room.reJoin())}catch(A){this._log.error(A),this.room.reJoin()}}})}send(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.isConnected&&!this.room.isLeft){let o={cmd:A,data:e,userId:this.userId,tinyId:this._signalInfo.tinyId,seq:++this._seq},a=JSON.stringify(o);return this._socketInUse.send(a),goA.has(A)&&this._log.info("send",A,e),this.bytesSent+=v0(a),o.seq}}sendWaitForResponse(A){let{command:e,data:o,timeout:a=5e3,responseCommand:c,commandDesc:d,enableLog:C=!0,addReceiveTime:y=!1}=A;return new Promise((S,k)=>{let V=()=>{clearTimeout(J),k(new ai({code:dt.API_CALL_ABORTED,message:"".concat(e," aborted due to connection closed")}))};this.once(m1,V);let J=setTimeout(()=>{this.off(c,gA),this.off(m1,V);let MA=new ai({code:dt.API_CALL_TIMEOUT,message:Xo({key:Mo.API_CALL_TIMEOUT,data:{commandDesc:d,command:e}})});C&&this._log.warn(MA),k(MA)},a),gA=MA=>{MA.data.seq===CA&&(clearTimeout(J),this.off(c,gA),this.off(m1,V),y&&(MA.data.receiveTime=Date.now()),S(MA))};this.on(c,gA);let CA=this.send(e,o)})}sendWaitForResponseWithRetry(A){let{commandDesc:e,command:o,retries:a=0,retryTimeout:c=0}=A;return gM({retryFunction:this.sendWaitForResponse,onError:d=>{let{retry:C,reject:y,error:S}=d;!this.room.isJoined||this.destroyed||S.code===dt.API_CALL_ABORTED?y(S):this.isOnline?C():(this._log.warn("retry ".concat(o," when connected")),this.once(Sz,C))},onRetrying:d=>{this._log.warn("".concat(e||o," timeout observed, retrying [").concat(d,"/").concat(a,"]"))},settings:{retries:a,timeout:c},context:this})(A)}getCurrentState(){return this._currentState}getSignalInfo(){return this._signalInfo}stopReconnection(){this._isReconnecting=!1,this._stopConnectRetry&&this._stopConnectRetry()}close(){this._log.info("closed"),clearTimeout(this.stopKeepAliveTimeout),clearTimeout(this.stopPrelinkTimeout),y1.delete(this),this.stopReconnection(),this._signalInfo={tinyId:void 0,clientIp:"",signalIp:"",relayIp:"",relayInnerIp:"",relayPort:0,bakRelayIps:[],endReportExtend:void 0,reportToken:void 0},this._socketInUse=null,this.bytesSent=0,this.bytesReceived=0,this._stopConnectRetry&&this._stopConnectRetry(),this.unbindAndCloseSocket(YA.MAIN),this.unbindAndCloseSocket(YA.BACKUP),this.emitConnectionStateChanged("DISCONNECTED"),this.emit(m1)}destroy(){this.close(),this.destroyed=!0}getBackupRelayIpPair(){var A;let e=(A=this._signalInfo.bakRelayIps)==null?void 0:A.shift();return e&&(e.relayPort=e.relayPort||this._signalInfo.relayPort),e}clearBakRelayIps(){this._signalInfo.bakRelayIps=[]}stopKeepAliveIn(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:3600;if(this.keepAlive){this._log.info("stopKeepAlive in ".concat(A,"s")),this.stopKeepAliveTimeout=setTimeout(()=>{this.keepAlive=!1,this._log.info("close due to not used ".concat(A,"s")),this.close(),this.off(ls.JOIN_ROOM_RESULT,e)},1e3*A);let e=o=>{o.data.code===0&&(this._log.info("stopKeepAlive clear timeout"),clearTimeout(this.stopKeepAliveTimeout),this.off(ls.JOIN_ROOM_RESULT,e))};this.on(ls.JOIN_ROOM_RESULT,e)}}stopPrelinkIn(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:300;if(this.keepAlive)return;this._log.info("stopPrelink in ".concat(A,"s")),this.stopPrelinkTimeout=setTimeout(()=>{this._log.info("close prelink due to not used in ".concat(A,"s")),this.close(),this.room.clearNetworkQuality(),this.off(ls.JOIN_ROOM_RESULT,e)},1e3*A);let e=o=>{o.data.code===0&&(this._log.info("stopPrelink clear timeout"),clearTimeout(this.stopPrelinkTimeout),this.off(ls.JOIN_ROOM_RESULT,e))};this.on(ls.JOIN_ROOM_RESULT,e)}markPrelinkConnected(A){this._prelinkConfig=Qo(mi({},A),{linkedTime:Date.now()})}isPrelinkValid(A,e,o){return!(!this.prelink||!this._prelinkConfig)&&(A!==this._prelinkConfig.sdkAppId||e!==this._prelinkConfig.userId||o!==this._prelinkConfig.userSig?(this._log.warn("prelink params not match"),!1):!!this.isConnected||(this._log.warn("prelink is not connected"),!1))}consumePrelink(){this.prelink=!1,this._prelinkConfig=void 0}emitConnectionStateChanged(A){if(A===this._currentState)return;this._log.info("".concat(this._currentState," -> ").concat(A));let e={prevState:this._currentState,state:A};A==="CONNECTING"&&(e.isReconnecting=this._isReconnecting),this.emit(dj,e),this._currentState=A,A==="CONNECTED"?this.emit(hL):A==="DISCONNECTED"&&this.emit(PiA)}};Ci([$h({settings:{retries:1/0,timeout:2e3},onError(A,e){!this.room.isDestroyed&&!this.destroyed&&(this._isFirstConnect&&(ii.addFailedEvent({key:521720,error:A}),this._isFirstConnect=!1),this.room.firewallDetector.increaseTimeoutCount(),e())},onRetrying(A,e){this._log.warn("retrying to connect ".concat(A)),A>=3&&A%3==0&&this.reGetSignalChannelUrl(),e&&(this._stopConnectRetry=e,(this.room.isDestroyed||this.destroyed)&&e())}})],Nz.prototype,"connect");var IoA=gc(Kl()),Gz=!1,tm=class{constructor(A){Y(this,"userId"),Y(this,"tinyId"),Y(this,"_sdpSemantics"),Y(this,"_isUplink"),Y(this,"_room"),Y(this,"_log"),Y(this,"_signalChannel"),Y(this,"_isErrorObserved",!1),Y(this,"_waitForPeerConnectionConnectedPromise"),Y(this,"_waitForPeerConnectionConnectedPromiseReject",null),Y(this,"_peerConnection",null),Y(this,"_emitter",new IoA.default),Y(this,"_currentState","DISCONNECTED"),Y(this,"_isReconnecting",!1),Y(this,"_reconnectionCount",0),Y(this,"_reconnectionTimer",-1),Y(this,"_isFirstConnection",!0),Y(this,"_prevTime",-1),Y(this,"_localAddress"),Y(this,"_remoteAddress"),Y(this,"isDestoyed",!1),this.userId=A.userId,this.tinyId=A.tinyId,this._room=A.room,this._sdpSemantics=A.room.sdpSemantics,this._isUplink=A.isUplink,this._log=A.room.getLogger().createChild({id:"n-mpc",userId:this._room.userId,remoteUserId:this.userId,sdkAppId:this._room.sdkAppId,isLocal:this._isUplink}),this._signalChannel=A.signalChannel}beforeConnect(){this._prevTime<0&&(this._prevTime=ko())}afterConnect(){try{this._isFirstConnection?(this._isFirstConnection=!1,ii.addSuccessEvent({key:521705,cost:Math.min(ko()-this._prevTime,3e4)})):this._isReconnecting&&ii.addSuccessEvent({key:521706,cost:ko()-this._prevTime}),this._prevTime=-1}catch(A){throw this._isFirstConnection?(this._isFirstConnection=!1,ii.addFailedEvent({key:521705,error:A})):this._isReconnecting&&this._reconnectionCount>=3&&ii.addFailedEvent({key:521706,error:A}),A}}initialize(){let A={iceServers:this._room.getIceServers(),iceTransportPolicy:this._room.getIceTransportPolicy(),sdpSemantics:this._sdpSemantics,bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",tcpCandidatePolicy:"disable",IceTransportsType:"nohost"};this._peerConnection=new RTCPeerConnection(A),this._peerConnection.onconnectionstatechange=this.onConnectionStateChange.bind(this)}close(A){this._log.info("close connection"),this._emitter.emit("closed",A),this._isReconnecting&&this.stopReconnection(),this.closePeerConnection()}destroy(){this.isDestoyed=!0}closePeerConnection(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this._peerConnection&&(this._log.info("close pc"),this._peerConnection.onconnectionstatechange=null,this._peerConnection.close(),this._peerConnection=null,A&&this.emitConnectionStateChangedEvent("DISCONNECTED")),this._waitForPeerConnectionConnectedPromiseReject&&this._waitForPeerConnectionConnectedPromiseReject(new ai({code:dt.API_CALL_ABORTED,message:"connection closed"}))}getDTLSTransportState(){if(!this._peerConnection)return Kh;let A=null;if(this._isUplink){if(!LI()||this._peerConnection.getSenders().length===0)return Kh;A=this._peerConnection.getSenders()[0].transport}else{if(!dy()||this._peerConnection.getReceivers().length===0)return Kh;A=this._peerConnection.getReceivers()[0].transport}return A?A.state:Kh}onConnectionStateChange(A){let e=this._peerConnection.iceConnectionState,o=this.getDTLSTransportState();if(this._log.info("connectionState: ".concat(A.target.connectionState,", ICE: ").concat(e,", DTLS: ").concat(o)),A.target.connectionState===Co.CONNECTING&&this.emitConnectionStateChangedEvent("CONNECTING"),A.target.connectionState===Co.FAILED||A.target.connectionState===Co.CLOSED){let a="connection ".concat(A.target.connectionState,". ICE Transport state: ").concat(e,", DTLS Transport state: ").concat(o),c=new ai({message:a,code:dt.ICE_TRANSPORT_ERROR});this.emitConnectionStateChangedEvent("DISCONNECTED"),this.startReconnection(),this._isErrorObserved||this._emitter.emit("error",c)}(A.target.connectionState===Co.CONNECTED||A.target.connectionState===Co.COMPLETED)&&(this.logSelectedCandidate(),sn.logSuccessEvent({userId:this._room.userId,eventType:Ja.ICE_CONNECTION_STATE}),this.emitConnectionStateChangedEvent("CONNECTED"))}emitConnectionStateChangedEvent(A){return A!==this._currentState&&(A==="CONNECTED"&&(this._room.firewallDetector.resetTimeoutCount(),Gz=!0),F.emit(nA.PEER_CONNECTION_STATE_CHANGED,{room:this._room,prevState:this._currentState,state:A,remoteUserId:this._isUplink?void 0:this.userId}),this._emitter.emit("connection-state-changed",{prevState:this._currentState,state:A}),this._currentState=A,!0)}getPeerConnection(){return this._peerConnection}getRoom(){return this._room}getUserId(){return this.userId}getTinyId(){return this.tinyId}logSelectedCandidate(){return KA(this,null,function*(){if(!this._peerConnection)return;let A=yield this._peerConnection.getStats();for(let[,e]of A)if(_M(e)){let o=A.get(e.localCandidateId),a=A.get(e.remoteCandidateId);o&&(this._log.info("local candidate: ".concat(o.candidateType," ").concat(o.protocol,":").concat(o.ip||o.address,":").concat(o.port," ").concat(o.networkType||""," ").concat(o.candidateType==="relay"?"relayProtocol:".concat(o.relayProtocol):"")),this._localAddress="".concat(o.ip||o.address,":").concat(o.port)),a&&(this._log.info("remote candidate: ".concat(a.candidateType," ").concat(a.protocol,":").concat(a.ip||a.address,":").concat(a.port)),this._remoteAddress="".concat(a.protocol,":").concat(a.ip||a.address));break}})}getCurrentState(){return this._currentState}waitForPeerConnectionConnected(){return this._waitForPeerConnectionConnectedPromise||(this._waitForPeerConnectionConnectedPromise=new Promise((A,e)=>{if(this._currentState==="CONNECTED")return A();this._waitForPeerConnectionConnectedPromiseReject=e;let o=C=>{C.state==="CONNECTED"&&(clearTimeout(d),c(),A())},a=C=>{let{room:y}=C;y===this._room&&(clearTimeout(d),c(),e(new ai({code:dt.API_CALL_ABORTED,message:Xo({key:Mo.CONNECTION_ABORTED,data:"leave room"})})))},c=()=>{F.off(nA.LEAVE_SUCCESS,a,this),this._emitter.off("connection-state-changed",o,this)},d=setTimeout(()=>{c();let C=new ai({code:dt.API_CALL_TIMEOUT,message:"connection timeout"});this._room.firewallDetector.increaseTimeoutCount(),e(C)},Nb);F.on(nA.LEAVE_SUCCESS,a,this),this._emitter.on("connection-state-changed",o,this)}),this._waitForPeerConnectionConnectedPromise=this._waitForPeerConnectionConnectedPromise.finally(()=>{this._waitForPeerConnectionConnectedPromise=null,this._waitForPeerConnectionConnectedPromiseReject=null})),this._waitForPeerConnectionConnectedPromise}getReconnectionCount(){return this._reconnectionCount}startReconnection(){this._isReconnecting=!0,this.reconnect()}clearReconnectionTimer(){this._reconnectionTimer!==-1&&(clearTimeout(this._reconnectionTimer),this._reconnectionTimer=-1)}stopReconnection(){this._log.info("stop reconnection"),this._isReconnecting=!1,this._reconnectionCount=0,this.clearReconnectionTimer(),this._signalChannel.off(hL,this.reconnect,this)}beforeReconnect(){if(this._reconnectionTimer!==-1)return this._log.warn("reconnect() is reconnecting, ignore"),-1;if(this._reconnectionCount>=xf()){this._log.warn("SDK has tried reconnect for ".concat(this._reconnectionCount," times, but all failed, please check your network")),this.stopReconnection();let A=new ai({code:this._isUplink?dt.UPLINK_RECONNECTION_FAILED:dt.DOWNLINK_RECONNECTION_FAILED,message:Xo({key:this._isUplink?Mo.UPLINK_RECONNECTION_FAILED:Mo.DOWNLINK_RECONNECTION_FAILED})});return this.emitConnectionStateChangedEvent("DISCONNECTED"),this._emitter.emit("error",A),-1}return this._signalChannel.isConnected?(this._reconnectionCount+=1,this._log.warn("reconnect() trying [".concat(this._reconnectionCount,"]")),1):(this._log.warn("reconnect() signal channel is not connected, suspend reconnection until signal is connected"),this._signalChannel.once(hL,this.reconnect,this),-1)}on(A,e,o){this._emitter.on(A,e,o)}off(A,e,o){this._emitter.off(A,e,o)}getIsReconnecting(){return this._isReconnecting}get isH264(){var A,e;return!((e=(A=this._peerConnection)==null?void 0:A.remoteDescription)==null||!e.sdp.includes("H264"))}setOffer(A){var e;return(e=this._peerConnection)==null?void 0:e.setLocalDescription(A)}setAnswer(A){var e;return(e=this._peerConnection)==null?void 0:e.setRemoteDescription(A)}};Ci([fy(521712,!1)],tm.prototype,"setOffer"),Ci([fy(521713,!1)],tm.prototype,"setAnswer");var bz=gc(Qb()),uc=function(A){return bz.default.parse(A)},vy=function(A){return bz.default.write(A)};function pj(A){return Object.keys(A).filter(e=>A[e])}var D1=class O9 extends tm{constructor(e){super(Qo(mi({},e),{isUplink:!1})),Y(this,"_flag",0),Y(this,"isRobot",!1),Y(this,"role","anchor"),Y(this,"remoteAudioTrack"),Y(this,"remoteVideoTrack"),Y(this,"remoteAuxiliaryTrack"),Y(this,"avPlayerStateSyncManager"),Y(this,"ssrc",{audio:0,video:0,auxiliary:0}),Y(this,"_isSDPExchanging",!1),Y(this,"_videoCodec"),Y(this,"fromType"),this.flag=e.flag,this.isRobot=e.isRobot||!1,this.remoteAudioTrack=e.remoteAudioTrack||new s1(this._room,this),this.remoteVideoTrack=e.remoteVideoTrack||new cL(this._room,this),this.remoteAuxiliaryTrack=e.remoteAuxiliaryTrack||new P5(this._room,this),this.avPlayerStateSyncManager=new ij({log:this._log,audioPlayer:this.remoteAudioTrack.player,videoPlayer:this.remoteVideoTrack.player})}get videoCodec(){var e,o;let a=(o=(e=this._peerConnection)==null?void 0:e.remoteDescription)==null?void 0:o.sdp;return a?a.includes("H264")?"h264":"vp8":this._videoCodec||"h264"}set videoCodec(e){this._videoCodec=e}get subscribeState(){let e={audio:!1,video:!1,auxiliary:!1,smallVideo:!1};return this.remoteVideoTrack.isSubscribed&&(8&this.remoteVideoTrack.mediaType?e.smallVideo=!0:e.video=!0),this.remoteAudioTrack.isSubscribed&&(e.audio=!0),this.remoteAuxiliaryTrack.isSubscribed&&(e.auxiliary=!0),e}get muteState(){return wp(this.flag,this.userId)}get flag(){return this._flag}set flag(e){var o,a,c;e!==this._flag&&(this._flag=e,(o=this.remoteAudioTrack)==null||o.onFlagChanged(),(a=this.remoteVideoTrack)==null||a.onFlagChanged(),(c=this.remoteAuxiliaryTrack)==null||c.onFlagChanged())}get hasMainStream(){return this.muteState.hasAudio||this.muteState.hasVideo||this.muteState.hasSmall}get hasAuxStream(){return this.muteState.hasAuxiliary}get isMainStreamSubscribed(){return(this.subscribeState.audio||this.subscribeState.video||this.subscribeState.smallVideo)&&(this.muteState.hasAudio||this.muteState.hasVideo||this.muteState.hasSmall)}get isAuxStreamSubscribed(){return this.subscribeState.auxiliary&&this.muteState.hasAuxiliary}get isSmallStreamSubscribed(){return this.subscribeState.smallVideo&&this.muteState.hasSmall}get isBigStreamSubscribed(){return this.subscribeState.video&&this.muteState.hasVideo}isStreamUnpublished(e){return e===YA.MAIN?!this.muteState.hasAudio&&!this.muteState.hasVideo:!this.muteState.hasAuxiliary}initialize(){super.initialize(),this.installEvents(),this._peerConnection.ontrack=this.onTrack.bind(this)}close(e){super.close(e),this.emitConnectionStateChangedEvent("DISCONNECTED"),this.remoteAudioTrack.close(),this.remoteVideoTrack.close(),this.remoteAuxiliaryTrack.close(),this.avPlayerStateSyncManager.destroy(),this.uninstallEvents()}installEvents(){}uninstallEvents(){this._emitter.removeAllListeners()}emitConnectionStateChangedEvent(e){var o,a;let c=this._currentState,d=super.emitConnectionStateChangedEvent(e);return d&&c!==e&&((o=this.remoteVideoTrack)==null||o.emit("connection-state-changed",{prevState:c,state:e}),(a=this.remoteAuxiliaryTrack)==null||a.emit("connection-state-changed",{prevState:c,state:e})),d}onTrack(e){let o=e.streams[0],{track:a}=e,c=o.id===uu?YA.MAIN:YA.AUXILIARY;this._log.debug("ontrack ".concat(c," ").concat(a.kind));let d=YA.AUDIO;a.kind===YA.VIDEO&&(d=c===YA.MAIN?YA.VIDEO:YA.AUXILIARY);let C=this.remoteAudioTrack;d===YA.VIDEO?C=this.remoteVideoTrack:d===YA.AUXILIARY&&(C=this.remoteAuxiliaryTrack),C.setInputMediaStreamTrack(a)}addRRTRLine(e){let o=e.split(`\r -`),a=new Map;o.forEach((d,C)=>{/^a=rtcp-fb:/.test(d)&&o[C+1]&&!/^a=rtcp-fb:/.test(o[C+1])&&a.set(C+1,"".concat(d.match(/^a=rtcp-fb:\d+/)[0]," rrtr"))});let c=[...a];for(let d=0;d{a.type===YA.VIDEO&&a.fmtp.forEach(c=>{c.config+=";sps-pps-idr-in-keyframe=1"})}),vy(o)}removeSDESDescription(e){let o=["urn:ietf:params:rtp-hdrext:sdes:mid","urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id","urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id"],a=uc(e);return a.media.forEach(c=>{c.ext&&(c.ext=c.ext.filter(d=>!o.includes(d.uri)))}),vy(a)}isSubscriptionStateNotChanged(e){return JSON.stringify(e)===JSON.stringify(this.subscribeState)}subscribe(e,o){return KA(this,null,function*(){var a,c;try{if((((a=this._peerConnection)==null?void 0:a.connectionState)===Co.NEW||((c=this._peerConnection)==null?void 0:c.connectionState)===Co.CONNECTING)&&(yield this.waitForPeerConnectionConnected()),this.isSubscriptionStateNotChanged(e))return void(this._peerConnection||(this.initialize(),yield this.connect(e)));if(this._log.info("subscribe ".concat(o," ").concat(JSON.stringify(e))),this._peerConnection||this._isSDPExchanging){let d="subscribe_change";Object.values(e).find(C=>C===!0)||(d="unsubscribe"),yield this.sendSubscription(d,e)}else this.initialize(),yield this.connect(e)}catch(d){throw this._room.isJoined&&this.isStreamUnpublished(o)?(this._log.warn("".concat(d.message," ").concat(JSON.stringify(this.muteState))),new ai({code:dt.REMOTE_STREAM_NOT_EXIST,message:"remote user ".concat(this.userId," unpublished stream")})):d}})}unsubscribe(e){return KA(this,arguments,function(o){var a=this;let{remoteTracks:c,streamType:d}=o;return function*(){if(a._currentState==="CONNECTED"&&(d==="main"&&!a.isMainStreamSubscribed||d==="auxiliary"&&!a.isAuxStreamSubscribed))return void a._log.info("".concat(d," stream already unsubscribed"));let C=mi({},a.subscribeState);c.forEach(S=>{switch(S.mediaType){case 1:C.audio=!1;break;case 4:C.video=!1;break;case 8:C.smallVideo=!1;break;case 2:C.auxiliary=!1}});let y="subscribe_change";Object.values(C).find(S=>S===!0)||(y="unsubscribe"),a._log.info("".concat(y==="unsubscribe"?y:"subscribe"," ").concat(d," [").concat(pj(C),"]")),yield a.sendSubscription(y,C),y==="unsubscribe"&&(a.closePeerConnection(),a.emitConnectionStateChangedEvent("DISCONNECTED"))}()})}unsubscribeDataChannel(){return KA(this,null,function*(){})}sendSubscription(e){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscribeState,a={srcTinyId:this.tinyId,srcUserId:this.userId},c=hj,d=ls.UNSUBSCRIBE_RESULT;return e==="subscribe_change"&&(a={audio:o.audio,bigVideo:o.video,auxVideo:o.auxiliary,smallVideo:o.smallVideo,srcTinyId:this.tinyId},c=Bj,d=ls.SUBSCRIBE_CHANGE_RESULT),this._signalChannel.sendWaitForResponse({command:c,data:a,responseCommand:d,timeout:1e4}).then(C=>{let{data:y}=C;if(y.code!==0){let S=new ai({code:y.code,message:Xo({key:Mo.ERROR_MESSAGE,data:{type:e,message:y.message}})});throw this._log.error(S),S}})}connect(){return KA(this,arguments,function(){var e=this;let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.subscribeState;return function*(){try{yield e.exchangeSDP(o),yield e.waitForPeerConnectionConnected()}catch(a){throw e.closePeerConnection(!0),a}}()})}exchangeSDP(e){return KA(this,null,function*(){try{this._isSDPExchanging=!0,yield this.createOffer(),this._log.info("createOffer success, sending offer");let{type:o,sdp:a}=this._peerConnection.localDescription,c={type:o,sdp:a,srcUserId:this.userId,srcTinyId:this.tinyId,audio:e.audio,bigVideo:e.video,auxVideo:e.auxiliary,smallVideo:e.smallVideo},d=yield this._signalChannel.sendWaitForResponse({command:wz,commandDesc:"exchange sdp",data:c,responseCommand:ls.SUBSCRIBE_RESULT,timeout:Vx});if(!this._peerConnection){let C=new ai({code:dt.INVALID_OPERATION,message:Xo({key:Mo.CONNECTION_CLOSED})});throw this._log.warn(C),C}yield this.onSubscribeResult(d),this._isSDPExchanging=!1}catch(o){throw this._isSDPExchanging=!1,o}})}createOffer(){return KA(this,null,function*(){let e={voiceActivityDetection:!1};Xd()&&this._sdpSemantics===zS?(this._peerConnection.addTransceiver(YA.AUDIO,{direction:zn.RECVONLY}),this._peerConnection.addTransceiver(YA.VIDEO,{direction:zn.RECVONLY}),this._peerConnection.addTransceiver(YA.VIDEO,{direction:zn.RECVONLY})):(e.offerToReceiveAudio=!0,e.offerToReceiveVideo=!0);let o=yield this._peerConnection.createOffer(e);if(o.sdp){let{isH264DecodeSupported:a}=yield Tk();a||(this._log.warn("remove h264 desc from sdp"),o.sdp=function(c){let d=uc(c);return d.media.forEach(C=>{var y,S;if(C.type===YA.VIDEO){let k=new Set;C.rtp.forEach(J=>{let{payload:gA,codec:CA}=J;return CA==="H264"&&k.add(gA)}),C.fmtp.forEach(J=>{let{payload:gA,config:CA}=J,MA=CA.match(/apt=(\d+)/);MA&&MA[1]&&k.has(Number(MA[1]))&&k.add(gA)});let V=J=>{let{payload:gA}=J;return!k.has(gA)};C.rtp=C.rtp.filter(V),C.rtcpFb=(y=C.rtcpFb)==null?void 0:y.filter(V),C.fmtp=C.fmtp.filter(V),C.payloads=(S=C.payloads)==null?void 0:S.split(" ").filter(J=>!k.has(Number(J))).join(" ")}}),vy(d)}(o.sdp)),o.sdp=this.addRRTRLine(o.sdp),o.sdp=this.addSPSDescription(o.sdp),o.sdp=function(c){let d=uc(c);return d.media.forEach(C=>{C.type===YA.AUDIO&&C.fmtp.forEach(y=>{y.config+=";sprop-stereo=1;stereo=1"})}),vy(d)}(o.sdp),this._sdpSemantics===zS&&(o.sdp=this.removeSDESDescription(o.sdp))}yield this.setOffer(o)})}onSubscribeResult(e){return KA(this,null,function*(){let{code:o,message:a=""}=e&&e.data||{},{type:c,sdp:d}=e&&e.data&&e.data.data||{};if(o===I0)throw new ai({code:dt.NOT_SUPPORTED_H264,message:Xo({key:Mo.NOT_SUPPORTED_H264DECODE})});try{if(o!==0)throw new ai({code:o,message:Xo({key:Mo.EXCHANGE_SDP_FAILED,data:{errMsg:a}})});this._log.debug("accept remote answer: ".concat(d)),yield this.setAnswer({type:c,sdp:d}),this.updateSSRC(d)}catch(C){throw this._log.error(C),C}})}updateSSRC(e){try{uc(e).media.forEach(o=>{if(o.ssrcs)if(o.type===YA.AUDIO){let a=o.ssrcs.find(c=>{var d;return(d=c.value)==null?void 0:d.includes(uu)});a&&(this.ssrc.audio=Number(a.id))}else{let a=o.ssrcs.find(d=>{var C;return(C=d.value)==null?void 0:C.includes(uu)}),c=o.ssrcs.find(d=>{var C;return(C=d.value)==null?void 0:C.includes(Fx)});a&&(this.ssrc.video=Number(a.id)),c&&(this.ssrc.auxiliary=Number(c.id))}})}catch{}}getMainStreamVideoTrackId(){return this.remoteVideoTrack&&this.remoteVideoTrack.mediaTrack?this.remoteVideoTrack.mediaTrack.id:""}getAuxStreamVideoTrackId(){return this.remoteAuxiliaryTrack&&this.remoteAuxiliaryTrack.mediaTrack?this.remoteAuxiliaryTrack.mediaTrack.id:""}reconnect(){return KA(this,null,function*(){if(!(NI(O9.prototype,this,"beforeReconnect").call(this)<0))try{this.closePeerConnection(),this.initialize(),yield this.connect(),this.stopReconnection(),this._log.warn("reconnect() success")}catch{let o=Rp(this._reconnectionCount);this._log.warn("reconnect() timeout, try again after ".concat(o/1e3,"s")),this._reconnectionTimer=setTimeout(()=>{this.clearReconnectionTimer(),this.reconnect()},o)}})}getIsReconnecting(){return this._isReconnecting}clearReconnectionTimer(){this._reconnectionTimer!==-1&&(clearTimeout(this._reconnectionTimer),this._reconnectionTimer=-1)}getCurrentState(){return this._currentState}setDelay(e){let{audioDelay:o,videoDelay:a}=e;this.remoteAudioTrack.stat.end2EndDelay=o,this.remoteVideoTrack.stat.end2EndDelay=a}get audioReceiver(){var e;return((e=this._peerConnection)==null?void 0:e.getReceivers()[0])||null}};Ci([jr(A=>function(){for(var e=arguments.length,o=new Array(e),a=0;a{let C=y=>{this._emitter.off("closed",C),d(new ai({code:dt.API_CALL_ABORTED,message:Xo({key:Mo.CONNECTION_ABORTED,data:y})}))};this._emitter.on("closed",C),A.apply(this,o).then(c,d).finally(()=>{this._emitter.off("closed",C)})})})],D1.prototype,"subscribe"),Ci([fy(521717,!1)],D1.prototype,"unsubscribe"),Ci([VM(tm.prototype.afterConnect),n5(tm.prototype.beforeConnect)],D1.prototype,"connect");var kz=D1,Lz={voiceActivityDetection:!1},S1=class P9 extends tm{constructor(e){super(Qo(mi({},e),{isUplink:!0})),Y(this,"localMainAudioTrack",null),Y(this,"localMainVideoTrack",null),Y(this,"localAuxAudioTrack",null),Y(this,"localAuxVideoTrack",null),Y(this,"ssrc",{audio:0,video:0,small:0,auxiliary:0}),Y(this,"_isPublishingAux",!1),Y(this,"_publishingLocalAudioTrack"),Y(this,"_publishingLocalVideoTrack"),Y(this,"_mediaSettings",{videoCodec:"",videoWidth:0,videoHeight:0,videoBps:0,videoFps:0,audioCodec:"opus",audioFs:0,audioChannel:0,audioBps:0,smallVideoWidth:0,smallVideoHeight:0,smallVideoFps:0,smallVideoBps:0,auxVideoWidth:0,auxVideoHeight:0,auxVideoFps:0,auxVideoBps:0}),Y(this,"flag",0)}get videoCodec(){return this._mediaSettings.videoCodec.toLowerCase()||"h264"}get isMainStreamPublished(){return!(!this.localMainAudioTrack&&!this.localMainVideoTrack)}get isAuxStreamPublished(){return!(!this.localAuxVideoTrack&&!this.localAuxAudioTrack)}initialize(){super.initialize(),this.installEvents()}reset(){this._isReconnecting&&this.stopReconnection(),this.closePeerConnection(),this.uninstallEvents()}close(e){super.close(e),this.reset(),this.emitConnectionStateChangedEvent("DISCONNECTED")}installEvents(){this._emitter.listeners("connection-state-changed").includes(this.handleConnectionStateChange)||this._emitter.on("connection-state-changed",this.handleConnectionStateChange,this)}uninstallEvents(){this._emitter.off("connection-state-changed",this.handleConnectionStateChange,this)}emitConnectionStateChangedEvent(e,o){var a,c,d;let C=this._currentState,y=super.emitConnectionStateChangedEvent(e);return y&&C!==e&&(o?o.emit("connection-state-changed",{prevState:C,state:e}):((a=this.localMainVideoTrack)==null||a.emit("connection-state-changed",{prevState:C,state:e}),(c=this.localAuxVideoTrack)==null||c.emit("connection-state-changed",{prevState:C,state:e}),(d=this._publishingLocalVideoTrack)==null||d.emit("connection-state-changed",{prevState:C,state:e}))),y}publish(e){return KA(this,arguments,function(o){var a=this;let{localAudioTrack:c,localVideoTrack:d,isAuxiliary:C}=o;return function*(){let y;a._peerConnection||a.initialize(),c&&(a._publishingLocalAudioTrack=c),d&&(a._publishingLocalVideoTrack=d),a._isPublishingAux=C,d&&!C&&d.small&&(y=a._room.videoManager.smallTrack),a.sendMediaSettings(),Xd()?yield a.publishByTransceiver({localAudioTrack:c,localVideoTrack:d,smallTrack:y,isAuxiliary:C}):yield a.publishByAddTrack({localAudioTrack:c,localVideoTrack:d,smallTrack:y}),a._publishingLocalAudioTrack=null,a._publishingLocalVideoTrack=null,a._isPublishingAux=!1,C?(d&&(a.localAuxVideoTrack=d),c&&(a.localAuxAudioTrack=c)):(d&&(a.localMainVideoTrack=d),c&&(a.localMainAudioTrack=c)),a.installTrackMuteEvents(c,d),a.sendMutedFlag()}()})}publishByTransceiver(e){return KA(this,arguments,function(o){var a=this;let{localAudioTrack:c,localVideoTrack:d,smallTrack:C,isAuxiliary:y}=o;return function*(){a._log.info("publish by transceiver");let S=new MediaStream,k=d?.outMediaTrack,V=c?.outMediaTrack;V&&S.addTrack(V),k&&S.addTrack(k);let J=a._peerConnection.getTransceivers();if(J.length===0)a._peerConnection.addTransceiver(V||YA.AUDIO,{direction:zn.SENDONLY,streams:[S]}),a._peerConnection.addTransceiver(y?YA.VIDEO:k||YA.VIDEO,{direction:zn.SENDONLY,streams:[S]}),a._peerConnection.addTransceiver(C||YA.VIDEO,{direction:zn.SENDONLY,streams:[S]}),a._peerConnection.addTransceiver(y&&k||YA.VIDEO,{direction:zn.SENDONLY,streams:[S]}),yield a.connect();else{let gA=[];if(V&&(J[0].sender.track||gA.push(0),yield J[0].sender.replaceTrack(V),yield a.setBandwidth({bandwidth:c?.profile.bitrate||40,type:YA.AUDIO})),k){let CA=y?3:1;yield J[CA].sender.replaceTrack(k),yield a.setBandwidth({bandwidth:d.profile.bitrate,type:YA.VIDEO,videoType:y?YA.AUXILIARY:YA.BIG}),gA.push(CA),C&&(yield J[2].sender.replaceTrack(C),yield a.setBandwidth({bandwidth:d.small.bitrate,type:YA.VIDEO,videoType:YA.SMALL}),gA.push(2))}yield a.setTransceiverDirection(zn.SENDONLY,gA),yield a.doPublishChange(),d?.emit("connection-state-changed",{prevState:"DISCONNECTED",state:"CONNECTING"}),d?.emit("connection-state-changed",{prevState:"CONNECTING",state:"CONNECTED"})}}()})}publishByAddTrack(e){return KA(this,arguments,function(o){var a=this;let{localAudioTrack:c,localVideoTrack:d,smallTrack:C}=o;return function*(){a._log.info("publish by addtrack");let y=d?.outMediaTrack,S=c?.outMediaTrack;if(a._peerConnection&&a._peerConnection.connectionState!=="new")return c&&S&&(yield a.addTrack(c)),void(y&&(yield a.addTrack(d)));let k=new MediaStream;if(S&&k.addTrack(S),y&&k.addTrack(y),S&&a._peerConnection.addTrack(S,k),y&&(a._peerConnection.addTrack(y,k),C)){let V=new MediaStream;V.addTrack(C),a._peerConnection.addTrack(C,V)}yield a.connect()}()})}enableSmall(e){return KA(this,null,function*(){let o=this._peerConnection.getTransceivers();e?this._room.videoManager.smallTrack&&(yield o[2].sender.replaceTrack(this._room.videoManager.smallTrack),yield this.setTransceiverDirection(zn.SENDONLY,[2])):(yield o[2].sender.replaceTrack(null),yield this.setTransceiverDirection(zn.INACTIVE,[2])),this.updateMediaSettings(),yield this.doPublishChange()})}installTrackMuteEvents(){for(var e=arguments.length,o=new Array(e),a=0;a{c&&(c?.on("mute",this.sendMutedFlag,this),c?.on("unmute",this.sendMutedFlag,this))})}uninstallTrackMuteEvents(){for(var e=arguments.length,o=new Array(e),a=0;a{c&&(c?.off("mute",this.sendMutedFlag,this),c?.off("unmute",this.sendMutedFlag,this))})}unpublish(e){return KA(this,arguments,function(o){var a=this;let{localAudioTrack:c,localVideoTrack:d}=o;return function*(){if(!IQ())return c&&c.outMediaTrack&&!d&&a.localMainVideoTrack?(yield a.removeTrack(c),void(a.localMainAudioTrack=null)):d&&d.outMediaTrack&&!c&&a.localMainAudioTrack?(yield a.removeTrack(d),void(a.localMainVideoTrack=null)):(yield a.doUnpublish(),a.uninstallTrackMuteEvents(c,d),void a.emitConnectionStateChangedEvent("DISCONNECTED",d));let C=d&&d===a.localAuxVideoTrack,y=d?.outMediaTrack,S=a._peerConnection.getSenders(),k=[];c&&(C?a.localAuxAudioTrack=null:a.localMainAudioTrack=null,!a.localAuxAudioTrack&&!a.localMainAudioTrack&&(yield S[0].replaceTrack(null),k.push(0))),y&&(C?(yield S[3].replaceTrack(null),a.localAuxVideoTrack=null,a._mediaSettings=Qo(mi({},a._mediaSettings),{auxVideoBps:0,auxVideoFps:0,auxVideoWidth:0,auxVideoHeight:0}),k.push(3)):(yield S[1].replaceTrack(null),yield S[2].replaceTrack(null),a.localMainVideoTrack=null,a._mediaSettings=Qo(mi({},a._mediaSettings),{videoWidth:0,videoHeight:0,videoBps:0,videoFps:0,audioFs:0,audioChannel:0,audioBps:0,smallVideoWidth:0,smallVideoHeight:0,smallVideoFps:0,smallVideoBps:0}),k.push(1,2))),a.isMainStreamPublished||a.isAuxStreamPublished?(yield a.setTransceiverDirection(zn.INACTIVE,k),yield a.doPublishChange(!1)):yield a.doUnpublish(),a.uninstallTrackMuteEvents(c,d),d?.emit("connection-state-changed",{prevState:a._currentState,state:"DISCONNECTED"})}()})}doPublishChange(){let e=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];return KA(this,null,function*(){let o={state:this._room.publishState,constraintConfig:this._mediaSettings},a=yield this._signalChannel.sendWaitForResponse({command:Cj,data:o,responseCommand:ls.PUBLISH_STATE_CHANGE_RESULT,enableLog:e});this.checkPublishResultCode(a.data.code,a.data.message)})}doUnpublish(){let e=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return this._signalChannel.sendWaitForResponse({command:f1,commandDesc:"unpublish",responseCommand:ls.UNPUBLISH_RESULT,enableLog:e}).catch(o=>{if(o.getCode()===dt.API_CALL_TIMEOUT)return Promise.resolve();throw o})}updateMediaSettings(){let{detail:{isH264EncodeSupported:e,isVp8EncodeSupported:o}}=this._room.checkSystemResult;e?this._mediaSettings.videoCodec="H264":o&&(this._mediaSettings.videoCodec="VP8");let a=this._publishingLocalAudioTrack||this.localMainAudioTrack||this.localAuxAudioTrack,{localMainVideoTrack:c,localAuxVideoTrack:d}=this;if(this._publishingLocalVideoTrack&&(this._isPublishingAux?d=this._publishingLocalVideoTrack:c=this._publishingLocalVideoTrack),Cy){if(a&&a.outMediaTrack){let C=a.outMediaTrack.getSettings();this._mediaSettings.audioChannel=C.channelCount||1,this._mediaSettings.audioBps=1e3*a.profile.bitrate,this._mediaSettings.audioFs=C.sampleRate||0}if(c&&c.outMediaTrack){let C=c.outMediaTrack.getSettings();this._mediaSettings.videoWidth=C.width||0,this._mediaSettings.videoHeight=C.height||0,this._mediaSettings.videoFps=C.frameRate||0,this._mediaSettings.videoBps=1e3*c.profile.bitrate,c.small&&(this._mediaSettings.smallVideoWidth=c.small.width,this._mediaSettings.smallVideoHeight=c.small.height,this._mediaSettings.smallVideoFps=c.small.frameRate,this._mediaSettings.smallVideoBps=1e3*c.small.bitrate)}if(d&&d.outMediaTrack){let C=d.outMediaTrack.getSettings();this._mediaSettings.auxVideoWidth=C.width||0,this._mediaSettings.auxVideoHeight=C.height||0,this._mediaSettings.auxVideoFps=C.frameRate||0,this._mediaSettings.auxVideoBps=1e3*d.profile.bitrate}}else a&&a.outMediaTrack&&(this._mediaSettings.audioChannel=a.profile.channelCount,this._mediaSettings.audioBps=1e3*a.profile.bitrate,this._mediaSettings.audioFs=a.profile.sampleRate),c&&c.outMediaTrack&&(this._mediaSettings.videoWidth=c.profile.width,this._mediaSettings.videoHeight=c.profile.height,this._mediaSettings.videoFps=c.profile.frameRate,this._mediaSettings.videoBps=1e3*c.profile.bitrate);this._log.info("updateMediaSettings: ".concat(JSON.stringify(this._mediaSettings)))}sendMediaSettings(){this.updateMediaSettings(),this._signalChannel.sendWaitForResponse({command:Qj,data:this._mediaSettings,responseCommand:ls.UPDATE_CONSTRAINT_CONFIG_RES}).then(e=>{e.data.code!==0&&this._log.warn(e.data.message)}).catch(()=>{})}addTrack(e){return KA(this,null,function*(){if(!this._peerConnection)return;let o=e===this.localAuxAudioTrack||e===this.localAuxVideoTrack;this._log.info("is adding ".concat(e.kind," track to current published local ").concat(o?YA.AUXILIARY:YA.MAIN," stream")),Xd()?yield this.addTrackByTransceiver(e,o):yield this.addTrackBySender(e)})}addTrackByTransceiver(e,o){return KA(this,null,function*(){var a;if(!e.mediaTrack)return;let c=this._peerConnection.getTransceivers();if(e.kind===YA.AUDIO)yield c[0].sender.replaceTrack(e.outMediaTrack);else{let d=o?3:1;yield c[d].sender.replaceTrack(e.outMediaTrack),d===1&&(a=this.localMainVideoTrack)!=null&&a.small&&(yield c[2].sender.replaceTrack(this._room.videoManager.smallTrack)),c[d].direction===zn.INACTIVE&&(yield this.setTransceiverDirection(zn.SENDONLY,[d]))}this.updateMediaSettings(),yield this.doPublishChange()})}addTrackBySender(e){return KA(this,null,function*(){if(!e.outMediaTrack)return;let o=e.outMediaTrack;IQ()&&this._peerConnection.getTransceivers().findIndex(c=>c.direction==="stopped")>=0&&(this._log.warn("transceiver is stopping, negotiate sdp first"),yield this.updateOffer("remove",o));let a=this._peerConnection.getSenders().find(c=>c.track&&c.track.kind===o.kind);if(a&&a.track){this._log.warn("sender already exists, remove sender first");let c=a.track;this.removeSender(a),yield this.updateOffer("remove",c)}if(o&&this._peerConnection.addTrack(o,new MediaStream([o])),o.kind===YA.VIDEO&&e instanceof dQ&&e.small){let c=new MediaStream,{smallTrack:d}=this._room.videoManager;c.addTrack(d),this._peerConnection.addTrack(d,c)}yield this.updateOffer("add",o)})}isNeedToResetOfferOrder(){if(this._sdpSemantics===l0||!this._peerConnection||!this._peerConnection.localDescription)return!1;let{sdp:e}=this._peerConnection.localDescription,o=uc(e);for(let a=0;aa.sender&&a.sender.track===e.track)),this._peerConnection.removeTrack(e),o&&Ra(o.stop)&&(this._log.info("stop transceiver"),o.stop())}removeTrack(e){return KA(this,null,function*(){if(!this._peerConnection)return;let o=e===this.localAuxAudioTrack||e===this.localAuxVideoTrack;this._log.info("is removing ".concat(e.kind," track from current published local ").concat(o?YA.AUXILIARY:YA.MAIN," stream")),Xd()?yield this.removeTrackByTransceiver(e,o):yield this.removeTrackBySender(e)})}removeTrackByTransceiver(e,o){return KA(this,null,function*(){if(!e.outMediaTrack)return;let a=this._peerConnection.getTransceivers();if(e.kind===YA.AUDIO)yield a[0].sender.replaceTrack(null);else{let c=o?3:1;yield a[c].sender.replaceTrack(null),c===1&&e.small&&(yield a[2].sender.replaceTrack(null)),yield this.setTransceiverDirection(zn.INACTIVE,[c])}this.updateMediaSettings(),yield this.doPublishChange()})}setTransceiverDirection(e,o){return KA(this,null,function*(){if(!er)return;let a=!1,c=!1;this._log.info("setting transceiver ".concat(o.join(",")," direction to ").concat(e));let d=this._peerConnection.getTransceivers();if(o.forEach(S=>{d[S].direction!==e&&(d[S].direction=e,a=!0)}),a){this._log.info("updating offer");let S=yield this._peerConnection.createOffer();yield this.setOffer(S)}let C=-1,y=this._peerConnection.remoteDescription.sdp.split(`\r -`).map(S=>{if(S.match(new RegExp("a=(".concat(zn.INACTIVE,"|").concat(zn.RECVONLY,"|").concat(zn.SENDONLY,")")))&&C++,o.includes(C)){if(e===zn.INACTIVE&&S.includes("a=".concat(zn.RECVONLY)))return c=!0,"a=".concat(e);if(e===zn.SENDONLY&&S.includes("a=".concat(zn.INACTIVE)))return c=!0,"a=".concat(zn.RECVONLY)}return S}).join(`\r -`);c&&(this._log.info("updating answer"),yield this.setAnswer({type:"answer",sdp:y}))})}removeTrackBySender(e){return KA(this,null,function*(){if(!e.outMediaTrack)return;if(e.kind===YA.VIDEO&&this.isNeedToResetOfferOrder()&&this.localMainAudioTrack)return this.reset(),this.initialize(),void(yield this.publish({localAudioTrack:this.localMainAudioTrack,isAuxiliary:!1}));let o=this._peerConnection.getSenders().find(a=>a.track===e.outMediaTrack);o&&(this.removeSender(o),e.kind===YA.VIDEO&&e.small&&this._peerConnection.getSenders().forEach(a=>{a.track&&a.track.kind===YA.VIDEO&&this.removeSender(a)})),yield this.updateOffer("remove",e.outMediaTrack)})}replaceTrack(e){return KA(this,null,function*(){var o;let a,c=(o=this._peerConnection)==null?void 0:o.getSenders();if(!c||c.length===0||!e.mediaTrack||(a=Xd()?e.kind===YA.AUDIO?c[0]:c[1]:c.find(C=>C.track&&C.track.kind===e.kind),!a))return!1;let d=e===this.localAuxAudioTrack||e===this.localAuxVideoTrack;return this._log.info("is replacing ".concat(e.kind," track on ").concat(d?YA.AUXILIARY:YA.MAIN," stream")),e.kind===YA.AUDIO?yield a.replaceTrack(e.outMediaTrack):e.kind===YA.VIDEO&&(d?c[3]&&(yield c[3].replaceTrack(e.outMediaTrack)):yield a.replaceTrack(e.outMediaTrack)),!0})}updateOffer(e,o){return KA(this,null,function*(){try{let a=yield this._peerConnection.createOffer(Lz);er&&a.sdp&&(a.sdp=this.setSDPDirection(a.sdp,"sendrecv")),yield this.setOffer(a);let c=this.updateMediaSettings(),d={action:e,trackId:o.id,kind:o.kind===YA.VIDEO?"bigVideo":o.kind,type:"offer",sdp:this._peerConnection.localDescription.sdp,constraintConfig:c,state:this._room.publishState};this._log.info("createOffer success, sending updated offer to remote server"),this._log.debug("updatedOffer: ".concat(d.sdp));let C=yield this._signalChannel.sendWaitForResponse({command:Mz,data:d,responseCommand:ls.UPDATE_OFFER_RESULT,timeout:Yx,commandDesc:"update offer"}),{code:y,message:S}=C.data;y!==0&&this.checkPublishResultCode(y,S),yield this.acceptAnswer(C.data.data),a.sdp&&this.updateSSRC(a.sdp)}catch(a){throw this._log.error(a),a}})}setBandwidth(e){return KA(this,arguments,function(o){var a=this;let{bandwidth:c,type:d,videoType:C,sdp:y}=o;return function*(){if(!Ok())return y?d===YA.VIDEO?a.updateVideoBandwidthRestriction(y,c,C):a.updateAudioBandwidthRestriction(y,c):void 0;let S,k=a._peerConnection.getSenders();if(Xd()){let V=0;d===YA.VIDEO&&(V=C===YA.SMALL?2:C===YA.AUXILIARY?3:1),S=k[V]}else S=k.find(V=>V.track&&V.track.kind===d);if(S){let V=S.getParameters();(!V.encodings||V.encodings.length===0)&&(V.encodings=[{}]),V.encodings[0].maxBitrate=1e3*c;try{return yield S.setParameters(V),a._log.info("".concat(C||"").concat(d," bandwidth ").concat(c," kbps")),y}catch(J){if(a._log.info("failed to set bandwidth by setting maxBitrate: ".concat(J)),y)return d===YA.VIDEO?a.updateVideoBandwidthRestriction(y,c,C):a.updateAudioBandwidthRestriction(y,c)}}return y}()})}updateVideoBandwidthRestriction(e,o,a){let c="AS";er&&(c="TIAS",o*=1e3);let d=0,C=-1;return a===YA.SMALL?d=1:a===YA.AUXILIARY&&(d=2),e=e.replace(/m=video (.*)\r\nc=IN (.*)\r\n/g,y=>(C+=1,C===d?"".concat(y,"b=").concat(c,":").concat(o,`\r -`):y)),e}updateAudioBandwidthRestriction(e,o){let a="AS";return er&&(a="TIAS",o*=1e3),e=e.replace(/m=audio (.*)\r\nc=IN (.*)\r\n/,`m=audio $1\r +`).concat(k.stack)),!1}}})(this,"trtc")}static create(e){}static _create(e,o){(function(){var l;if(Iz){Iz=!1,pA.getLogLevel()!==5&&(console.info("******************************************************************************"),console.info("* TRTC Web SDK"),console.info("* API Document: ".concat(Wh,"/en/index.html")),console.info("* Changelog: ".concat(Wh,"/en/tutorial-01-info-changelog.html")),console.info("* Report issues: https://github.com/LiteAVSDK/TRTC_Web/issues"),console.info("******************************************************************************")),pA.info("TRTC Web SDK Version:",qd),Yp||pA.debug("Build Time:","2026-02-28 12:18:13");let d="UA: ".concat(navigator.userAgent,` +CPU core: `).concat(navigator.hardwareConcurrency,", GPU: ").concat(Vp());if(eg&&window.screen&&(window.screen.width||window.screen.height)){let y="".concat(window.screen.width,"x").concat(window.screen.height,"@").concat(window.devicePixelRatio);d+=", screen: ".concat(y)}let h=navigator.deviceMemory;h&&(d+=", minRAM: ".concat(h,"GB")),pA.info(d),pA.info("URL: ".concat(location.href).concat(((l=self.frameElement)==null?void 0:l.tagName)==="IFRAME"?" in iframe":"")),SM().then(y=>{y&&pA.info(PC)})}})();let a=new gm(e,o||{});return mL.add(a),a.__v_skip=!0,a}get room(){return this._room}_listenEvents(){nd(this,this._room).add("peer-join",e=>{let{userId:o}=e;this.emit(Ki.REMOTE_USER_ENTER,{userId:o})}).add("peer-leave",e=>{let{userId:o,reason:a}=e;this.emit(Ki.REMOTE_USER_EXIT,{userId:o,reason:a})}).add("banned",e=>{pQ(!0),this._exitRoom().finally(()=>{this.emit(Ki.KICKED_OUT,{reason:e.reason})})}).add("error",e=>{this._exitRoom().finally(()=>{this.emit(Ki.ERROR,_o.convertFrom(e))})}).add("signal-connection-state-changed",e=>{this.emit(Ki.CONNECTION_STATE_CHANGED,e)}).add("network-quality",e=>{this._networkQuality=e;let o=po(fi({},e),{uplinkRTT:Math.min(e.uplinkRTT,h0),downlinkRTT:Math.min(e.downlinkRTT,h0)});this.emit(Ki.NETWORK_QUALITY,o)}).add("remote-published",e=>{[e.remoteAudioTrack,e.remoteVideoTrack,e.remoteAuxiliaryTrack].forEach(o=>{nd(o,o).add("player-state-changed",a=>{let l=po(fi({},a),{userId:e.userId});o.kind===YA.VIDEO&&(l.streamType=eC(o.streamType)),this.emit(o.kind===YA.AUDIO?Ki.AUDIO_PLAY_STATE_CHANGED:Ki.VIDEO_PLAY_STATE_CHANGED,l)}).add("error",a=>{a.getCode()===Ct.PLAY_NOT_ALLOWED&&this.emit(Ki.AUTOPLAY_FAILED,{userId:o.userId,mediaType:o.strMediaType,resume:()=>o.player.resume()})})})}).add("remote-unpublished",e=>{[e.remoteAudioTrack,e.remoteVideoTrack,e.remoteAuxiliaryTrack].forEach(o=>{Ln(o)})}).add("remote-publish-state-changed",e=>{let{prevMuteState:o,muteState:a}=e,{userId:l}=a,d=o.audioAvailable,h=o.videoAvailable,{audioAvailable:y,videoAvailable:S}=a;y||this._remoteAudioConfigMap.delete(l),S||this._removeRemoteVideoConfig(l,"main"),a.hasAuxiliary||this._removeRemoteVideoConfig(l,"sub"),h!==S&&(S?this._onVideoAvailable({userId:l,streamType:"main"}):this._onVideoUnavailable({userId:l,streamType:"main"}),this.emit(S?Ki.REMOTE_VIDEO_AVAILABLE:Ki.REMOTE_VIDEO_UNAVAILABLE,{userId:l,streamType:"main"})),d!==y&&(y?this._onAudioAvailable({userId:l}):this._onAudioUnavailable({userId:l,muteState:a}),this.emit(y?Ki.REMOTE_AUDIO_AVAILABLE:Ki.REMOTE_AUDIO_UNAVAILABLE,{userId:l})),o.hasAuxiliary!==a.hasAuxiliary&&(a.hasAuxiliary?this._onVideoAvailable({userId:l,streamType:"sub"}):this._onVideoUnavailable({userId:l,streamType:"sub"}),this.emit(a.hasAuxiliary?Ki.REMOTE_VIDEO_AVAILABLE:Ki.REMOTE_VIDEO_UNAVAILABLE,{userId:l,streamType:"sub"})),o.hasDatachannel!==a.hasDatachannel&&a.hasDatachannel&&this._onDataChannelAvailable()}).add("sei-message",e=>{this.emit(Ki.SEI_MESSAGE,po(fi({},e),{streamType:eC(e.streamType)}))}).add("firewall-restriction",()=>{this.emit(Ki.ERROR,new _o({code:wo.OPERATION_FAILED,extraCode:5501}))}).add("heartbeat-report",e=>{var o,a,l,d,h,y,S;let k={2:"big",3:"small",7:"sub"},V={rtt:Math.min(e.msg_up_stream_info.msg_network_status.uint32_rtt||((o=e.msg_down_stream_info[0])==null?void 0:o.msg_network_status.uint32_rtt)||((a=this._networkQuality)==null?void 0:a.uplinkRTT)||((l=this._networkQuality)==null?void 0:l.downlinkRTT)||0,h0),upLoss:((d=this._networkQuality)==null?void 0:d.uplinkLoss)||0,downLoss:((h=this._networkQuality)==null?void 0:h.downlinkLoss)||0,bytesSent:e.bytes_sent||0,bytesReceived:e.bytes_received||0,localStatistics:{audio:{bitrate:(((y=e.msg_up_stream_info.msg_audio_status)==null?void 0:y.uint32_audio_codec_bitrate)||0)/1e3,audioLevel:(((S=e.msg_up_stream_info.msg_audio_status)==null?void 0:S.uint32_audio_level)||0)/id},video:e.msg_up_stream_info.msg_video_status.filter(J=>k[J.uint32_video_stream_type]).map(J=>({bitrate:(J.uint32_video_codec_bitrate||0)/1e3,width:J.uint32_video_width,height:J.uint32_video_height,frameRate:J.uint32_video_enc_fps,videoType:k[J.uint32_video_stream_type]}))},remoteStatistics:e.msg_down_stream_info.map(J=>({userId:J.msg_user_info.str_identifier,audio:{bitrate:(J.msg_audio_status.uint32_audio_codec_bitrate||0)/1e3,audioLevel:(J.msg_audio_status.uint32_audio_level||0)/id,point2pointDelay:(J.msg_audio_status.uint32_audio_p2p_delay||0)+(J.msg_audio_status.uint32_audio_cache_ms||0),jitterBufferDelay:J.msg_audio_status.uint32_audio_cache_ms||0},video:J.msg_video_status.map(cA=>({bitrate:(cA.uint32_video_codec_bitrate||0)/1e3,width:cA.uint32_video_width,height:cA.uint32_video_height,frameRate:cA.uint32_video_dec_fps,videoType:k[cA.uint32_video_stream_type],point2pointDelay:(cA.uint32_video_p2p_delay||0)+(cA.uint32_video_cache_ms||0),jitterBufferDelay:cA.uint32_video_cache_ms||0,codec:cA.uint32_video_codec}))}))};this.emit(Ki.STATISTICS,V)}).add("custom-message",e=>{this.emit(Ki.CUSTOM_MESSAGE,e)}).add("layerData",e=>this.emit(Ki.LAYER_DATA,e)).add("first-video-frame",e=>{this.emit(Ki.FIRST_VIDEO_FRAME,po(fi({},e),{streamType:eC(e.streamType)}))}).add("audio-frame",e=>{this.emit(Ki.AUDIO_FRAME,e)}).add("data-channel-message",e=>{var o,a,l,d,h;let{data:y}=e;if(y.sender==="")return;let S={segmentId:(o=y.payload)==null?void 0:o.roundid,speakerUserId:y.sender,sourceText:(a=y.payload)==null?void 0:a.text,translationTexts:(l=y.payload)==null?void 0:l.translate_msg,timestamp:(d=y.payload)==null?void 0:d.start_utc_ms,isCompleted:(h=y.payload)==null?void 0:h.end,robotId:y.robotid};S.sourceText!==""&&this.emit(Ki.REALTIME_TRANSCRIBER_MESSAGE,S)}).add("asr-robot-peer-join",e=>{this.emit(Ki.REALTIME_TRANSCRIBER_STATE_CHANGED,{state:"started",roomId:this.room.roomId,transcriberRobotId:e.userId})}).add("asr-robot-peer-leave",e=>{this.emit(Ki.REALTIME_TRANSCRIBER_STATE_CHANGED,{state:"stopped",roomId:this.room.roomId,transcriberRobotId:e.userId})}),nd(this,Pc).add("audioInputAdded",e=>{this.emit(Ki.DEVICE_CHANGED,{type:"microphone",action:"add",device:e})}).add("audioInputRemoved",e=>{this.emit(Ki.DEVICE_CHANGED,{type:"microphone",action:"remove",device:e})}).add("videoInputAdded",e=>{this.emit(Ki.DEVICE_CHANGED,{type:"camera",action:"add",device:e})}).add("videoInputRemoved",e=>{this.emit(Ki.DEVICE_CHANGED,{type:"camera",action:"remove",device:e})}).add("audioOutputAdded",e=>WA(this,null,function*(){if(this.emit(Ki.DEVICE_CHANGED,{type:"speaker",action:"add",device:e}),Xl&&Xl.deviceId===C0){let o=(yield HM()).find(a=>a.deviceId===C0);o&&Xl.groupId!==o.groupId&&(Xl=o,this.emit(Ki.DEVICE_CHANGED,{type:"speaker",action:"active",device:o}))}})).add("audioOutputRemoved",e=>WA(this,null,function*(){this.emit(Ki.DEVICE_CHANGED,{type:"speaker",action:"remove",device:e});let o=(yield HM())[0];if(!o||!Xl||Xl.groupId===o.groupId)return;let a=Xl.deviceId===e.deviceId,l=Xl.deviceId===C0&&Xl.deviceId===o.deviceId;(a||l)&&(Xl=o,this.emit(Ki.DEVICE_CHANGED,{type:"speaker",action:"active",device:o}))})),nd(this,w1).add("permission-state-change",e=>{this.emit(Ki.PERMISSION_STATE_CHANGE,e)}),this.room.enableSEI&&this.on(Ki.SEI_MESSAGE,e=>{var o;let a=(o=this.room.remotePublishedUserMap.get(e.userId))==null?void 0:o.remoteVideoTrack;a&&a.updateAlphaRenderInfo(e)})}getNetworkTime(){return Of()}use(e){let o,a;return"plugin"in e?(o=e.plugin,a=e.assetsPath):o=e,o.Name==="Chorus"&&(this.room.enableChorus=!0),this._use(o,a)}_use(e,o){let a=this._plugins.get(e.Name);if(a)return this._log.warn("duplicate install plugin",e.Name),a;let l=new e(jiA.call(this,{TRTC:gm,room:this._room,assetsPath:o,errorModule:{RtcError:_o,ErrorCode:wo,CoreErrorCode:Ct,ErrorCodeDictionary:h1}}));return this._plugins.set(e.Name,l),l.__v_skip=!0,e.autoStart&&this.startPlugin(e.Name),l}enterRoom(e){return WA(this,null,function*(){var o,a;this.enterRoomParams=e;let{scene:l="rtc",enableAutoPlayDialog:d=!0,autoReceiveAudio:h=!0,autoReceiveVideo:y=!1}=e;e.proxy&&(this._room.setProxyServer(e.proxy),!Vn(e.proxy)&&e.proxy.turnServer&&((a=(o=this._room).setTurnServer)==null||a.call(o,e.proxy.turnServer,e.proxy.iceTransportPolicy))),this._room.enableAutoPlayDialog=d,this._room.autoReceiveAudio=h,this._room.autoReceiveVideo=y,Nr(e.preferHW)&&(this._room.preferHW=e.preferHW),e.playoutDelay&&(this._room.playoutDelay=e.playoutDelay),e.jitterBufferDelay&&(this._room.jitterBufferDelay=e.jitterBufferDelay);let S={sdkAppId:e.sdkAppId,userId:e.userId,userSig:e.userSig,privateMapKey:e.privateMapKey||null,latencyLevel:e.latencyLevel,role:e.role==="audience"?21:20,roomId:e.roomId||0,strRoomId:e.strRoomId||"",businessInfo:e.businessInfo||null,streamId:null,userDefineRecordId:e.userDefineRecordId||null,enableDataChannel:this._plugins.has("RealtimeTranscriber"),frameWorkType:e.frameWorkType,component:e.component,language:e.language,priority:e.priority,useVp8:e.useVp8,useH265:e.useH265||!1,keepAlive:e.keepAlive};e.strRoomId&&!e.roomId?this._room.useStringRoomId=!0:this._room.useStringRoomId=!1,yield this._room.join(S,l,gm.frameWorkType),this._checkTrackToPublish(),xz.start()})}exitRoom(){return WA(this,null,function*(){return yield this._exitRoom()})}switchRoom(e){return WA(this,null,function*(){if(this.room.isSwitchRoomSupported())try{this._clearRemoteTracks(),yield this._room.switchRoom(e)}catch(o){if(!(o instanceof Ux)||o.code!==Ct.API_CALL_TIMEOUT&&o.code!==Ct.SWITCH_ROOM_FAILED)throw o;this._log.warn("switchRoom ".concat(o.code===Ct.API_CALL_TIMEOUT?"timeout":"failed",", fallback to exitRoom() and enterRoom()")),yield this._rejoinRoom(e)}else yield this._rejoinRoom(e)})}_rejoinRoom(e){return WA(this,null,function*(){yield this.exitRoom();let o=fi(fi({},this.enterRoomParams),e);yield this.enterRoom(o)})}_clearRemoteTracks(){new Set([...this._remoteAudioConfigMap.keys(),...this._remoteAudioMuteMap.keys()]).forEach(e=>{this._stopRemoteAudio({userId:e}).catch(()=>{})}),[...this._remoteVideoConfigMap.keys()].forEach(e=>{let o=e.includes("main")?"main":"sub",a=e.split("_".concat(o))[0];a&&this._stopRemoteVideo({userId:a,streamType:o}).catch(()=>{})}),this._remoteVideoConfigMap.clear(),this._remoteAudioConfigMap.clear(),this._remoteAudioMuteMap.clear(),function(e){let o=p_.get(e);o&&(o.forEach(a=>clearTimeout(a)),p_.delete(e))}(this),this._room.remotePublishedUserMap.forEach(e=>{Ln(e.remoteAudioTrack),Ln(e.remoteVideoTrack),Ln(e.remoteAuxiliaryTrack)})}switchRole(e,o){return WA(this,null,function*(){o!=null&&o.privateMapKey&&(this._room.privateMapKey=o.privateMapKey),o!=null&&o.latencyLevel&&(this._room.latencyLevel=o.latencyLevel),yield this._room.switchRole(e),e==="anchor"&&this._checkTrackToPublish()})}destroy(){this._plugins.forEach(e=>{var o;return(o=e.destroy)==null?void 0:o.call(e)}),this._plugins.clear(),Ln(this),this.removeAllListeners(),this._room.destroy(),mL.delete(this),mL.size===0&&xz.destroy(),this._localAudioTrack&&this.stopLocalAudio(),this._localVideoTrack&&this.stopLocalVideo(),this._localScreenTrack&&this.stopScreenShare(),F.off("102",this._onLocalTrackCaptured,this)}startLocalAudio(){return WA(this,arguments,function(){var e=this;let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{publish:!0};return function*(){if(e._localAudioTrack)return void e._log.warn("local audio is already started");let{publish:a=!0,mute:l,muteKeepVolumeDetection:d,option:h}=o,y=new jM(e._room.audioManager),S={},k={muted:!0};h&&(Ke(h.microphoneId)?Ke(h.audioTrack)||(S.customSource=h.audioTrack):S.deviceId=h.microphoneId,h&&kn(h.captureVolume)&&y.setCaptureVolume(h.captureVolume),Ke(h.profile)||(Vn(h.profile)?Rp[h.profile]&&y.setProfile(Rp[h.profile]):y.setProfile(h.profile)),kn(h.earMonitorVolume)&&(k.muted=!(h.earMonitorVolume>0),k.volume=h.earMonitorVolume),Ke(h.echoCancellation)||(y.profile.echoCancellation=h.echoCancellation),Ke(h.noiseSuppression)||(y.profile.noiseSuppression=h.noiseSuppression),Ke(h.autoGainControl)||(y.profile.autoGainControl=h.autoGainControl),Nr(e._enableAutoSwitchWhenRecapturing)&&(y.enableAutoSwitchWhenRecapturing=e._enableAutoSwitchWhenRecapturing)),y.on("5",V=>{e.emit(Ki.ERROR,new _o({code:wo.DEVICE_ERROR,extraCode:5309,messageParams:{error:V}}))}),y.on("2",V=>{e.emit(Ki.DEVICE_CHANGED,{type:"microphone",action:"active",device:V})}),y.on("4",V=>{let J;V.error&&(J=_o.convertFrom(V.error)),e.emit(Ki.PUBLISH_STATE_CHANGED,po(fi({},V),{error:J}))}),y.on("6",()=>{}),e._listenOutputTrackChanged(y),e._speakerId&&y.setAudioOutput(e._speakerId),yield y.capture(S),Ke(l)||y.setMute(l,d),nd(y,y).add("player-state-changed",V=>{e.emit(Ki.AUDIO_PLAY_STATE_CHANGED,po(fi({},V),{userId:""}))}),a&&e._room.isJoined&&e._room.publish(y).catch(()=>{}),e._localAudioTrack=y,e._room.capturedLocalMainAudioTrack=y,e._localAudioConfig=po(fi({},o),{publish:a}),yield e._updateAudioPlayOption({playOption:k,track:y}),F.emit("113",{userId:"",room:e.room})}()})}updateLocalAudio(e){return WA(this,null,function*(){if(!this._localAudioTrack||!this._localAudioConfig)return;let{publish:o,mute:a,muteKeepVolumeDetection:l,option:d}=e,h={};d&&(d.microphoneId?yield this._localAudioTrack.switchDevice(d.microphoneId):Ke(d.audioTrack)||(yield this._localAudioTrack.setInputMediaStreamTrack(d.audioTrack)),Ke(d.captureVolume)||this._localAudioTrack.setCaptureVolume(d.captureVolume),Ke(d.earMonitorVolume)||(h.muted=!(d.earMonitorVolume>0),h.volume=d.earMonitorVolume),yield this._localAudioTrack.update3A(d)),this._room.isJoined&&!Ke(o)&&(o&&!this._localAudioConfig.publish&&this._room.publish(this._localAudioTrack).catch(()=>{}),this._localAudioConfig.publish&&!o&&this._room.unpublish(this._localAudioTrack).catch(()=>{})),Ke(a)||this._localAudioTrack.setMute(a,l),yield this._updateAudioPlayOption({playOption:h,track:this._localAudioTrack,prevConfig:this._localAudioConfig}),Xh(this._localAudioConfig,e)})}stopLocalAudio(){return WA(this,null,function*(){this._localAudioTrack&&(this._room.isJoined&&(yield this._room.unpublish(this._localAudioTrack).catch(()=>{})),F.emit("114",{userId:"",room:this.room}),this._localAudioTrack.stop(),this._localAudioTrack.close(),this._room.audioManager.removeInput(this._localAudioTrack),Ln(this._localAudioTrack),this._localAudioTrack=null,this._localAudioConfig=null,delete this._room.capturedLocalMainAudioTrack)})}startLocalVideo(){return WA(this,arguments,function(){var e=this;let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{publish:!0,view:null,capture:!0};return function*(){var a,l,d;if(e._localVideoTrack)return void e._log.warn("local video is already started");let{view:h,publish:y=!0,capture:S=!0,mute:k,option:V,forcePublish:J=!1}=o,cA=y||J,CA=S,MA=new BQ(e._room.videoManager),ie={},pe={};if(V&&(Nr(V.avoidCropping)&&(MA.avoidCropping=V.avoidCropping),V.cameraId?ie.deviceId=V.cameraId:Ke(V.useFrontCamera)?Ke(V.videoTrack)||(ie.customSource=V.videoTrack):ie.facingMode=V.useFrontCamera?YA.FACING_MODE_USER:YA.FACING_MODE_ENVIRONMENT,Ke(V.retryWhenExactFailed)||(ie.retryWhenExactFailed=V.retryWhenExactFailed),V.qosPreference&&(ie.contentHint=B1(V.qosPreference)),Ke(V.profile)||(Vn(V.profile)?FC[V.profile]&&MA.setProfile(FC[V.profile]):MA.setProfile(V.profile)),Ke(V.fillMode)||(pe.objectFit=V.fillMode),Ke(V.mirror)||(pe.mirror=V.mirror),Ke(V.small)||(Ke(V.smallMode)||(e._room.smallMode=V.smallMode),Nr(V.small)&&V.small===!1?MA.stopSmall():MA.updateSmallConfig(Q1(V.small,!0))),Ke(V.rotation)||MA.setRotation(V.rotation),Nr(e._enableAutoSwitchWhenRecapturing)&&(MA.enableAutoSwitchWhenRecapturing=e._enableAutoSwitchWhenRecapturing)),MA.once("first-video-frame",qe=>{e.emit(Ki.FIRST_VIDEO_FRAME,po(fi({},qe),{streamType:eC(qe.streamType)}))}),MA.on("5",qe=>{e.emit(Ki.ERROR,new _o({code:wo.DEVICE_ERROR,extraCode:5308,messageParams:{error:qe}}))}),MA.on("2",qe=>{e.emit(Ki.DEVICE_CHANGED,{type:"camera",action:"active",device:qe})}),MA.on("4",qe=>{let we;qe.error&&(we=_o.convertFrom(qe.error)),e.emit(Ki.PUBLISH_STATE_CHANGED,po(fi({},qe),{error:we}))}),MA.on("6",()=>{}),e._listenOutputTrackChanged(MA),ie.customSource&&Gp(ie.customSource)?(MA.setOutputMediaStreamTrack(ie.customSource),CA=!1):CA?yield MA.capture(ie):(a=MA.manager)==null||a.changeInput(MA),Ke(k)||(yield MA.setMute(k)),nd(MA,MA).add("player-state-changed",qe=>{e.emit(Ki.VIDEO_PLAY_STATE_CHANGED,po(fi({},qe),{userId:"",streamType:"main"}))}).add("video-size-changed",qe=>{e.emit(Ki.VIDEO_SIZE_CHANGED,po(fi({},qe),{streamType:eC(qe.streamType)}))}),cA){let qe=e._localScreenTrack&&((l=e._localScreenConfig)==null?void 0:l.publish)&&e._localScreenConfig.streamType==="main";e._room.isJoined?!qe||J?(e._room.publish(MA).catch(()=>{}),((d=e._localScreenConfig)==null?void 0:d.streamType)==="main"&&e._localScreenConfig&&(e._localScreenConfig.publish=!1)):(cA=!1,e._log.warn("main stream is already published, local video track will not publish")):qe&&(cA=!1)}e._localVideoTrack=MA,e._room.capturedLocalMainVideoTrack=MA,e._localVideoConfig=po(fi({},o),{view:h,publish:cA,capture:CA}),yield e._updateVideoPlayOption({view:h,playOption:pe,track:MA})}()})}updateLocalVideo(e){return WA(this,null,function*(){var o,a,l,d,h,y,S;if(!this._localVideoTrack||!this._localVideoConfig)return;let{view:k,publish:V=!0,mute:J,capture:cA,option:CA,forcePublish:MA=!1}=e,ie=V||MA,pe=cA,qe={};if(!this._localVideoConfig.capture&&Gp((o=this.localVideoTrack)==null?void 0:o.outMediaTrack)&&(CA!=null&&CA.cameraId||CA!=null&&CA.videoTrack)&&this._localVideoTrack.outMediaTrack!==CA?.videoTrack&&(pe=!0),this._localVideoConfig.capture)pe!==!1?CA!=null&&CA.cameraId?yield this._localVideoTrack.switchDevice(CA?.cameraId):Ke(CA?.useFrontCamera)?Ke(CA?.videoTrack)||(Gp(CA?.videoTrack)?CA?.videoTrack!==((a=this.localVideoTrack)==null?void 0:a.outMediaTrack)&&(yield this._localVideoTrack.setOutputMediaStreamTrack(CA?.videoTrack)):yield this._localVideoTrack.setInputMediaStreamTrack(CA?.videoTrack)):yield this._localVideoTrack.switchDevice(CA!=null&&CA.useFrontCamera?YA.FACING_MODE_USER:YA.FACING_MODE_ENVIRONMENT):this._localVideoTrack.stopCapture();else if(pe){let we={};we.deviceId=CA?.cameraId||((l=this._localVideoConfig.option)==null?void 0:l.cameraId),we.facingMode=CA!=null&&CA.useFrontCamera||(d=this._localVideoConfig.option)!=null&&d.useFrontCamera?YA.FACING_MODE_USER:YA.FACING_MODE_ENVIRONMENT,we.customSource=CA!=null&&CA.videoTrack||!we.deviceId?(h=this._localVideoConfig.option)==null?void 0:h.videoTrack:void 0,yield this._localVideoTrack.capture(we)}CA&&(Ke(CA.profile)||(Vn(CA.profile)?FC[CA.profile]&&this._localVideoTrack.setProfile(FC[CA.profile]):this._localVideoTrack.setProfile(CA.profile),(!CA.cameraId||!this._localVideoTrack.isNeedToSwitchDevice(CA.cameraId||CA.useFrontCamera?YA.FACING_MODE_USER:YA.FACING_MODE_ENVIRONMENT))&&(yield this._localVideoTrack.applyProfile())),Ke(CA.fillMode)||(qe.objectFit=CA.fillMode),Ke(CA.mirror)||(qe.mirror=CA.mirror),Ke(CA.rotation)||this._localVideoTrack.setRotation(CA.rotation),CA.qosPreference&&this._localVideoTrack.mediaTrack&&this._localVideoTrack.setContentHint(B1(CA.qosPreference)),Ke(CA.small)||(Nr(CA.small)&&!CA.small?this._localVideoTrack.stopSmall():this._localVideoTrack.updateSmallConfig(Q1(CA.small,!0)))),this._room.isJoined&&Ke(ie)&&this._localVideoConfig.publish&&pe&&!this._localVideoConfig.capture&&this._room.publish(this._localVideoTrack).catch(()=>{}),this._room.isJoined&&((ie??this._localVideoConfig.publish)||MA?this._localScreenTrack&&((y=this._localScreenConfig)!=null&&y.publish)&&this._localScreenConfig.streamType==="main"&&!MA?(ie=!1,this._log.warn("main stream is already published, local video track will not publish")):(this._room.publish(this._localVideoTrack).catch(()=>{}),((S=this._localScreenConfig)==null?void 0:S.streamType)==="main"&&this._localScreenConfig&&(this._localScreenConfig.publish=!1)):this._room.unpublish(this._localVideoTrack).catch(()=>{})),Ke(J)||(yield this._localVideoTrack.setMute(J)),yield this._updateVideoPlayOption({view:k,playOption:qe,track:this._localVideoTrack,prevConfig:this._localVideoConfig}),Xh(this._localVideoConfig,po(fi({},e),{publish:ie,capture:pe}))})}stopLocalVideo(){return WA(this,null,function*(){var e;this._localVideoTrack&&(this._room.isJoined&&(e=this._localVideoConfig)!=null&&e.publish&&(yield this._room.unpublish(this._localVideoTrack).catch(()=>{})),this._localVideoTrack.stop(),this._localVideoTrack.close(),Ln(this._localVideoTrack),this._localVideoTrack=null,delete this._room.capturedLocalMainVideoTrack,this._localVideoConfig=null)})}startScreenShare(){return WA(this,arguments,function(){var e=this;let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{publish:!0,view:null};return function*(){var a,l,d;if(e._localScreenTrack)return void e._log.warn("screen share is already started");let{view:h=null,publish:y=!0,muteSystemAudio:S,option:k}=o,V=y,J=new WM(e._room.videoManager);J.on("4",pe=>{let qe;pe.error&&(qe=_o.convertFrom(pe.error)),e.emit(Ki.PUBLISH_STATE_CHANGED,po(fi({},pe),{error:qe}))}),J.once("first-video-frame",pe=>{e.emit(Ki.FIRST_VIDEO_FRAME,po(fi({},pe),{streamType:eC(pe.streamType)}))}),e._listenOutputTrackChanged(J),o.streamType==="main"&&(J.mediaType=4);let cA=null,CA={},MA={};k&&(Ke(k.profile)||(Vn(k.profile)?Tb[k.profile]&&J.setProfile(Tb[k.profile]):J.setProfile(k.profile)),k.systemAudio&&(CA.systemAudio=!0,CA.echoCancellation=k.echoCancellation,CA.noiseSuppression=k.noiseSuppression,CA.autoGainControl=k.autoGainControl),Ke(k.fillMode)||(MA.objectFit=k.fillMode),k.videoTrack&&(CA.videoTrack=k.videoTrack),k.audioTrack&&(CA.audioTrack=k.audioTrack),k.captureElement&&(CA.captureElement=k.captureElement),k.preferDisplaySurface&&(CA.preferDisplaySurface=k.preferDisplaySurface),k.qosPreference&&(CA.contentHint=B1(k.qosPreference)));let ie=yield J.capture(CA);if(J.mediaTrack.addEventListener(YA.ENDED,()=>{e._stopScreenShare(),e.emit(Ki.SCREEN_SHARE_STOPPED)}),ie.getAudioTracks()[0]){cA=new Ij(e._room.audioManager);let pe=ie.getAudioTracks()[0];(a=o.option)!=null&&a.systemAudio&&!((l=o.option)!=null&&l.audioTrack)&&(cA.sourceTrack=pe),yield cA.setInputMediaStreamTrack(pe),Nr(S)&&cA.mediaTrack&&(cA.mediaTrack.enabled=!S),e._speakerId&&cA.setAudioOutput(e._speakerId)}if(nd(J,J).add("player-state-changed",pe=>{e.emit(Ki.VIDEO_PLAY_STATE_CHANGED,po(fi({},pe),{userId:"",streamType:"sub"}))}),V){let pe=e._localVideoTrack&&((d=e._localVideoConfig)==null?void 0:d.publish),qe=!(o.streamType==="main"&&pe);e._room.isJoined?(qe?e._room.publish(J).catch(()=>{}):(V=!1,e._log.warn("main stream is already published, screen share main will not publish")),cA&&(e._checkScreenAudioEchoCancellation(J,cA),e._room.publish(cA).catch(()=>{}))):qe||(V=!1)}e._localScreenTrack=J,e._room.capturedLocalAuxVideoTrack=J,e._localScreenAudioTrack=cA,e._localScreenConfig=po(fi({},o),{view:h,publish:V}),yield e._updateVideoPlayOption({view:h,playOption:MA,track:J})}()})}updateScreenShare(e){return WA(this,null,function*(){var o,a;if(!this._localScreenTrack||!this._localScreenConfig)return;let{view:l,publish:d,muteSystemAudio:h,option:y}=e,S=d,k={};if(y){if(Ke(y.fillMode)||(k.objectFit=y.fillMode),y.qosPreference){let V=B1(y.qosPreference);this._localScreenTrack.setContentHint(V)}y.videoTrack&&this._localScreenTrack.setInputMediaStreamTrack(y.videoTrack),y.audioTrack&&this._localScreenAudioTrack&&this._localScreenAudioTrack.setInputMediaStreamTrack(y.audioTrack)}if(this._room.isJoined&&!Ke(S)){if(S&&!this._localScreenConfig.publish){let V=this._localVideoTrack&&((o=this._localVideoConfig)==null?void 0:o.publish);this._localScreenConfig.streamType==="main"&&V?(S=!1,this._log.warn("main stream is already published, screen share main will not publish")):this._room.publish(this._localScreenTrack).catch(()=>{}),this._localScreenAudioTrack&&this._room.publish(this._localScreenAudioTrack).catch(()=>{})}if(this._localScreenConfig.publish&&!S){let V=[this._localScreenTrack];this._localScreenAudioTrack&&V.push(this._localScreenAudioTrack),V.forEach(J=>this._room.unpublish(J).catch(()=>{}))}}(a=this._localScreenAudioTrack)!=null&&a.mediaTrack&&Nr(h)&&(this._localScreenAudioTrack.mediaTrack.enabled=!h),yield this._updateVideoPlayOption({view:l,playOption:k,track:this._localScreenTrack,prevConfig:this._localScreenConfig}),Xh(this._localScreenConfig,po(fi({},e),{publish:S}))})}stopScreenShare(){return WA(this,null,function*(){return yield this._stopScreenShare()})}startRemoteVideo(e){return WA(this,null,function*(){let{view:o,userId:a,streamType:l,option:d}=e,h="".concat(a,"_").concat(l);if(this._remoteVideoConfigMap.has(h))return void this._log.warn("remote video has already started. userId:".concat(a,", streamType:").concat(l));let y=this._room.remotePublishedUserMap.get(a);if(!y)return;let S={},k=l==="main"?y.remoteVideoTrack:y.remoteAuxiliaryTrack,V=this._bindRemoteVideoTrackEvents(k);this._listenOutputTrackChanged(k),d&&(Ke(d.fillMode)||(S.objectFit=d.fillMode),Ke(d.mirror)||(S.mirror=d.mirror),Ke(d.poster)||(S.poster=d.poster),S.canvasRender=d.canvasRender,l==="main"&&!Ke(d.small)&&(!y.remoteVideoTrack.isSubscribing&&!y.remoteVideoTrack.isSubscribed&&y.remoteVideoTrack.setMediaType(d.small?8:4),this._room.changeType(d.small,k.user)),Ke(d.draggable)||k.setDraggable(d.draggable)),S.isLiveStream=!!this._playbackQualityList.find(J=>J.userId===a&&J.streamType===l),yield this._room.subscribe(k),yield this._enableVideoDecodeFallback(k,l),yield this._updateVideoPlayOption({view:o,playOption:S,track:k}),this._emitTrackEvent(k),this._remoteVideoConfigMap.set(h,{config:e,handlers:V}),d&&!Ke(d.receiveWhenViewVisible)&&this._observeView({remoteTrack:k,view:o,receiveWhenViewVisible:d.receiveWhenViewVisible,viewRoot:d?.viewRoot})})}updateRemoteVideo(e){return WA(this,null,function*(){var o,a;let{view:l,userId:d,streamType:h,option:y,mute:S}=e,k="".concat(d,"_").concat(h),V=this._remoteVideoConfigMap.get(k);if(!V||!this._room.remotePublishedUserMap.has(d))return;let J={};y&&(Ke(y.fillMode)||(J.objectFit=y.fillMode),Ke(y.mirror)||(J.mirror=y.mirror));let cA=null,CA=this._room.remotePublishedUserMap.get(d);if(h==="main"&&CA!=null&&CA.muteState.hasVideo&&(cA=CA.remoteVideoTrack),h==="sub"&&CA!=null&&CA.muteState.hasAuxiliary&&(cA=CA.remoteAuxiliaryTrack),!cA)return;let{config:MA}=V;h==="main"&&y&&!Ke(y.small)&&this._room.changeType(y.small,cA.user),y&&!Ke(y.draggable)&&cA.setDraggable(y.draggable),y&&(Nr(y.pictureInPicture)&&(y.pictureInPicture?yield cA.player.enterPictureInPicture():yield cA.player.exitPictureInPicture()),Nr(y.fullScreen)&&(y.fullScreen?yield cA.player.enterFullscreen():yield cA.player.exitFullscreen())),Nr(S)&&(cA.ignoreUpdatePlayingState=!0,S?(yield cA.player.pause(),yield this.room.unsubscribe(cA)):(yield this.room.subscribe(cA),yield cA.player.resume(!0))),yield this._updateVideoPlayOption({view:l,playOption:J,track:cA,prevConfig:MA}),Xh(MA,e);let ie=Ke(y?.receiveWhenViewVisible)?(o=MA.option)==null?void 0:o.receiveWhenViewVisible:y.receiveWhenViewVisible,pe=Ke(l)?MA.view:l,qe=Ke(y?.viewRoot)?(a=MA.option)==null?void 0:a.viewRoot:y.viewRoot;this._observeView({remoteTrack:cA,view:pe,receiveWhenViewVisible:ie,viewRoot:qe})})}stopRemoteVideo(e){return WA(this,null,function*(){return this._stopRemoteVideo(e)})}_stopRemoteVideo(e){let o=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];return WA(this,null,function*(){let a=[],l=this._room.remotePublishedUserMap.get(e.userId);if(l){let{muteState:d,remoteVideoTrack:h,remoteAuxiliaryTrack:y}=l;e.streamType==="main"&&(h.stop(),d.hasVideo&&a.push(h)),e.streamType==="sub"&&(y.stop(),d.hasAuxiliary&&a.push(y))}for(let d of a)o&&(delete d.ignoreUpdatePlayingState,yield this._room.unsubscribe(d),this._mediaTrackMap.delete(d.outMediaTrack));this._removeRemoteVideoConfig(e.userId,e.streamType)})}_removeRemoteVideoConfig(e,o){let a="".concat(e,"_").concat(o),l=this._remoteVideoConfigMap.get(a);if(l&&(l.observer&&l.observer.disconnect(),l.handlers)){let d=this._room.remotePublishedUserMap.get(e);if(d){let h=o==="main"?d.remoteVideoTrack:d.remoteAuxiliaryTrack;this._unbindRemoteVideoTrackEvents(h,l.handlers)}}this._remoteVideoConfigMap.delete(a)}_bindRemoteVideoTrackEvents(e){let o={onEnterPIP:()=>WA(this,null,function*(){yield e.player.enterPIPPromise,this.emit(Ki.PICTURE_IN_PICTURE_STATE_CHANGED,{streamType:eC(e.streamType),userId:e.userId,isPictureInPicture:!0,pictureInPictureWindow:e.player.pipWindow})}),onLeavePIP:()=>{this.emit(Ki.PICTURE_IN_PICTURE_STATE_CHANGED,{streamType:eC(e.streamType),userId:e.userId,isPictureInPicture:!1})},onEnterFullScreen:()=>{this.emit(Ki.FULL_SCREEN_STATE_CHANGED,{streamType:eC(e.streamType),userId:e.userId,isFullScreen:!0})},onLeaveFullScreen:()=>{this.emit(Ki.FULL_SCREEN_STATE_CHANGED,{streamType:eC(e.streamType),userId:e.userId,isFullScreen:!1})},onDecodeFailed:()=>{this.emit(Ki.ERROR,new _o({code:wo.OPERATION_FAILED,extraCode:5507,message:"video decode failed"}))},onVideoSizeChanged:a=>{this.emit(Ki.VIDEO_SIZE_CHANGED,po(fi({},a),{streamType:eC(a.streamType)}))}};return e.player.on(yo.ENTER_PICTURE_IN_PICTURE,o.onEnterPIP),e.player.on(yo.LEAVE_PICTURE_IN_PICTURE,o.onLeavePIP),e.player.on(yo.ENTER_FULL_SCREEN,o.onEnterFullScreen),e.player.on(yo.LEAVE_FULL_SCREEN,o.onLeaveFullScreen),e.on("decode-failed",o.onDecodeFailed),e.on("video-size-changed",o.onVideoSizeChanged),o}_unbindRemoteVideoTrackEvents(e,o){e.player.off(yo.ENTER_PICTURE_IN_PICTURE,o.onEnterPIP),e.player.off(yo.LEAVE_PICTURE_IN_PICTURE,o.onLeavePIP),e.player.off(yo.ENTER_FULL_SCREEN,o.onEnterFullScreen),e.player.off(yo.LEAVE_FULL_SCREEN,o.onLeaveFullScreen),e.off("decode-failed",o.onDecodeFailed),e.off("video-size-changed",o.onVideoSizeChanged)}muteRemoteAudio(e,o){return WA(this,null,function*(){this._remoteAudioMuteMap.set(e,o);try{if(e==="*")if(o)yield this._stopRemoteAudio({userId:e});else{let a=[...this._room.remotePublishedUserMap.values()];for(let l of a)l.muteState.hasAudio&&!this._remoteAudioConfigMap.has(l.userId)&&this.room.isJoined&&(yield this._startRemoteAudio({userId:l.userId}))}else o?yield this._stopRemoteAudio({userId:e}):!this._remoteAudioConfigMap.has(e)&&this.room.isJoined&&(yield this._startRemoteAudio({userId:e}))}catch(a){throw a.code!==wo.OPERATION_ABORT&&this._remoteAudioMuteMap.delete(e),a}})}setRemoteAudioVolume(e,o){if(e==="*"){this._remoteAudioVolumeMap.set("*",o),this._remoteAudioVolumeMap.forEach((l,d)=>this._remoteAudioVolumeMap.set(d,o));let a=[...this._room.remotePublishedUserMap.values()];for(let l of a)this._remoteAudioVolumeMap.set(l.userId,o),l.remoteAudioTrack.isSubscribed&&this._updateAudioPlayOption({playOption:{volume:o},track:l.remoteAudioTrack})}else if(e){let a=this._room.remotePublishedUserMap.get(e);this._remoteAudioVolumeMap.set(e,o),a&&a.remoteAudioTrack.isSubscribed&&this._updateAudioPlayOption({playOption:{volume:o},track:a.remoteAudioTrack})}}startPlugin(e,o){return WA(this,null,function*(){return e.start(o)})}updatePlugin(e,o){return WA(this,null,function*(){return e.update(o)})}stopPlugin(e,o){return WA(this,null,function*(){return e.stop(o)})}enableAudioVolumeEvaluation(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:2e3,o=arguments.length>1&&arguments[1]!==void 0&&arguments[1];this._room.enableAudioVolumeEvaluation(e,o)}on(e,o,a){if(this.listeners(e).includes(o))return this;if(this._log.debug("on",e),super.on(e,o,a),this._eventListened.add(e),this.listeners(Ki.AUDIO_FRAME).length>0){let{audioFrameEventConfigMap:l}=this.room.audioManager;l.get("")||l.set("",{enable:!0}),this._localAudioTrack&&this.room.audioManager.handleLocalTrackStarted({userId:"",room:this.room})}return e==="realtime-transcriber-message"&&this._room.subscribeDataChannel(),this}emit(e){for(var o=arguments.length,a=new Array(o>1?o-1:0),l=1;l{d?.abort("off")}),l.clear()}return this}getAudioTrack(){let e,o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{userId:"",streamType:"main"},a=null,l="main",d=!1;if(Vn(o)?e=o:(e=o.userId,d=o.processed===!0,o.streamType&&(l=o.streamType)),e){let h=this._room.remotePublishedUserMap.get(e);h&&(a=h.remoteAudioTrack)}else a=l==="sub"?this._localScreenAudioTrack:this._localAudioTrack;return a?d&&a.outMediaTrack&&a.outMediaTrack!==a.mediaTrack?a.outMediaTrack.clone():a.mediaTrack:null}getVideoTrack(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{userId:"",streamType:"main"},{userId:o="",streamType:a="main",processed:l=!1}=e,d=null;if(o==="")a==="main"&&this._localVideoTrack&&(d=this._localVideoTrack),a==="sub"&&this._localScreenTrack&&(d=this._localScreenTrack);else{let h=this._room.remotePublishedUserMap.get(o);h&&(d=a==="main"?h.remoteVideoTrack:h.remoteAuxiliaryTrack)}return d?l&&d.outMediaTrack&&d.outMediaTrack!==d.mediaTrack?d.outMediaTrack.clone():d.mediaTrack:null}getVideoSnapshot(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},{userId:o,streamType:a="main"}=e;if(o){let l=this._room.remotePublishedUserMap.get(o);if(a==="main"&&l!=null&&l.muteState.hasVideo)return l.remoteVideoTrack.getVideoFrame();if(a==="sub"&&l!=null&&l.muteState.hasAuxiliary)return l.remoteAuxiliaryTrack.getVideoFrame()}else{if(a==="main"&&this._localVideoTrack)return this._localVideoTrack.getVideoFrame();if(a==="sub"&&this._localScreenTrack)return this._localScreenTrack.getVideoFrame()}return""}_setCurrentSpeaker(e){var o,a;this._speakerId=e,(o=this._localAudioTrack)==null||o.setAudioOutput(e),(a=this._localScreenAudioTrack)==null||a.setAudioOutput(e),this._room.remotePublishedUserMap.forEach(l=>l.remoteAudioTrack.setAudioOutput(e))}setCurrentSpeaker(e){return WA(this,null,function*(){(yield HM()).forEach(o=>{o.deviceId===e&&(this._setCurrentSpeaker(e),this.emit(Ki.DEVICE_CHANGED,{type:"speaker",action:"active",device:o}),Xl=o)}),this._log.warn('the "setCurrentSpeaker" method of the instance will be deprecated in the future, please use "TRTC.setCurrentSpeaker" instead. For more information, please visit: '.concat(Wh,"/en/TRTC.html#.setCurrentSpeaker"))})}_startRemoteAudio(e){return this._doStartRemoteAudio(e)}_doStartRemoteAudio(e){return WA(this,null,function*(){var o;let{userId:a}=e;if(this._remoteAudioConfigMap.has(a))return void this._log.warn("remote audio has already started. userId:".concat(a));let l=this._room.remotePublishedUserMap.get(a);if(!l)return;let d={},h=l.remoteAudioTrack;h.on("decode-failed",y=>{this.emit(Ki.ERROR,new _o({code:wo.OPERATION_FAILED,extraCode:5508,message:"audio decode failed"}))}),this._listenOutputTrackChanged(h),this._speakerId&&h.setAudioOutput(this._speakerId);try{let y=(o=this._remoteAudioVolumeMap.get(a))!=null?o:this._remoteAudioVolumeMap.get("*"),S=kn(y)?y:100;d.volume=S,this._remoteAudioConfigMap.set(a,e),yield this._room.subscribe(h),ma(la(h,"decode-failed"),dE(la(h,Zs.INIT)),Bl(()=>{this.startPlugin(Hz.Name,{track:h,type:"auto",config:{codec:"opus",sampleRate:48e3,numberOfChannels:1}})})),yield this._updateAudioPlayOption({playOption:d,track:h}),F.emit("115",{userId:a,room:this.room}),h.outMediaTrack&&this.room.audioManager.updateAudioReference({type:"add",audioReference:h.outMediaTrack,refId:"ra-".concat(a)})}catch(y){throw this._remoteAudioConfigMap.delete(a),y}this._emitTrackEvent(h)})}_stopRemoteAudio(e){let o=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];return WA(this,null,function*(){let a=this._room.remotePublishedUserMap.get(e.userId);a&&(a.remoteAudioTrack.stop(),a.muteState.hasAudio&&o&&(yield this._room.unsubscribe(a.remoteAudioTrack)),this._mediaTrackMap.delete(a.remoteAudioTrack.outMediaTrack)),this._remoteAudioConfigMap.delete("".concat(e.userId)),F.emit("116",{userId:e.userId,room:this.room}),this.room.audioManager.updateAudioReference({type:"remove",refId:"ra-".concat(e.userId)})})}_enableVideoDecodeFallback(e,o){let a,l=this._room.videoDecodeFallbackType;l&&this._plugins.has("TRTCVideoDecoder")&&(e.log.debug("remote video will fall back when decode failed",e.id),ma(la(e,"decode-failed"),dE(la(e,Zs.INIT)),sj(()=>{this._room.downlinkVideoCodec!=="h265"&&this.startPlugin("TRTCVideoDecoder",{type:"auto",renderer:"videoFrame",track:e,config:{codec:"avc1.420028"},fallback:l})}),l1(la(e,"decode-downgrade-state-changed")),Bl(d=>{a=d.state,this.emit(Ki.VIDEO_DECODE_DOWNGRADE_STATE_CHANGED,po(fi({},d),{streamType:o,userId:e.userId}))},d=>{e.log.error("fallback",d)},()=>{a==="STARTED"&&e.log.info("fallback complete")})))}_updateVideoPlayOption(e){return WA(this,arguments,function(o){let{view:a,playOption:l,track:d,prevConfig:h}=o;return function*(){if(d.setMirror(l.mirror),Ke(a)&&h&&h.view&&!R0(l)){let y=gM(h.view);y.length>0&&(yield d.play(y,l))}if(!Ke(a)){let y=gM(a);y.length>0?yield d.play(y,l):d.stop()}}()})}_updateAudioPlayOption(e){return WA(this,arguments,function(o){var a=this;let{playOption:l={},track:d,prevConfig:h}=o;return function*(){if(!d.isPlayCalled)try{yield d.play(null,l)}catch{}if(Ke(l.muted)||d.setPlayerMute(l.muted),Ke(l.volume)||d.setAudioVolume(l.volume/100),d instanceof jM&&d.mediaTrack){let y=l.muted===!1&&!Ke(l.volume)&&l.volume>0?"add":"remove";a.room.audioManager.updateAudioReference({type:y,audioReference:d.mediaTrack,refId:"em"})}else if(d instanceof d1){let y=l.muted?0:l.volume;if(Ke(y))return;a.room.audioManager.updateAudioReference({type:"updateVolume",refId:"ra-".concat(d.userId),volume:l.volume})}}()})}_listenOutputTrackChanged(e){e.listeners("output-media-track-changed").length===0&&e.on("output-media-track-changed",()=>this._emitTrackEvent(e,!1))}_emitTrackEvent(e){let o=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],a=e.isRemote?e.userId:"";e.outMediaTrack&&(o&&this._mediaTrackMap.get(e.outMediaTrack)===a||(this._mediaTrackMap.set(e.outMediaTrack,a),this.emit(Ki.TRACK,{userId:a,streamType:eC(e.streamType),track:e.outMediaTrack,sourceTrack:e.mediaTrack})))}_checkTrackToPublish(){var e,o,a;let l=[];if((e=this._localAudioConfig)!=null&&e.publish&&this._localAudioTrack&&l.push(this._localAudioTrack),(o=this._localVideoConfig)!=null&&o.publish&&this._localVideoTrack&&l.push(this._localVideoTrack),(a=this._localScreenConfig)!=null&&a.publish&&(this._localScreenTrack&&l.push(this._localScreenTrack),this._localScreenAudioTrack&&l.push(this._localScreenAudioTrack),this._checkScreenAudioEchoCancellation(this._localScreenTrack,this._localScreenAudioTrack)),l.length!==0)return Promise.all(l.map(d=>this._room.publish(d).catch(()=>{})))}_observeView(e){let{remoteTrack:o,view:a,receiveWhenViewVisible:l,viewRoot:d}=e;if(Ke(a)||Ke(l))return;let h=this._remoteVideoConfigMap.get("".concat(o.userId,"_").concat(eC(o.streamType)));if(!h)return;let y=h.observer||void 0;if(a===null||wa(a)&&a.length===0||!l)return y?.disconnect(),void(o.isSubscribed||(this._log.info("_observeView observer disconnect, resubscribe",o.userId,o.strMediaType),this._room.subscribe(o).catch(()=>{})));let S=h.visibleViewMap||new Map,k=-1;(!y||y.root!==d)&&(y?.disconnect(),S.clear(),y=new IntersectionObserver(J=>{J.forEach(cA=>{S.set(cA.target,cA.isIntersecting),o.log.info("view ".concat(cA.target.id," is").concat(cA.isIntersecting?"":" not"," visible"))}),clearTimeout(k),k=window.setTimeout(()=>{[...S.values()].find(cA=>cA)?o.isSubscribed||this._room.subscribe(o).catch(()=>{}):o.isSubscribed&&this._room.unsubscribe(o).catch(()=>{})},200)},{root:d}));let V=new Set(gM(a));S.forEach((J,cA)=>{V.has(cA)||(y.unobserve(cA),S.delete(cA))}),V.forEach(J=>{S.set(J,!0),y.observe(J)}),y.takeRecords().forEach(J=>{S.set(J.target,J.isIntersecting)}),h.visibleViewMap=S,h.observer=y}_exitRoom(){return WA(this,null,function*(){this._room.isJoined&&(yield this._room.leave()),this._clearRemoteTracks()})}_stopScreenShare(){return WA(this,null,function*(){var e,o;if(this._localScreenTrack){if(this._room.isJoined){let a=[];(e=this._localScreenConfig)!=null&&e.publish&&a.push(this._localScreenTrack),this._localScreenAudioTrack&&a.push(this._localScreenAudioTrack),yield Promise.all(a.map(l=>this._room.unpublish(l).catch(()=>{})))}this._localScreenTrack.stop(),this._localScreenTrack.close(),this._localScreenAudioTrack&&(((o=this._localScreenAudioTrack.trackSettings)==null?void 0:o.echoCancellation)===!1&&this.stopPlugin("AudioProcessor"),this._localScreenAudioTrack.stop(),this._localScreenAudioTrack.close(),this._room.audioManager.removeInput(this._localScreenAudioTrack),this._localScreenAudioTrack=null),Ln(this._localScreenTrack),this._localScreenTrack=null,delete this._room.capturedLocalAuxVideoTrack,this._localScreenConfig=null}})}_checkScreenAudioEchoCancellation(e,o){return WA(this,null,function*(){var a,l;if(!e||!o)return;let d=(a=e.trackSettings)==null?void 0:a.displaySurface;if(((l=o.trackSettings)==null?void 0:l.echoCancellation)===!1&&(d==="monitor"||d==="browser"&&e.isShareCurrentTab)){this._log.warn("echoCancellation of screen audio track is disable. Try starting audioProcessor plugin");try{yield this.startPlugin("AudioProcessor",{sdkAppId:Number(this.room.sdkAppId),userId:this._room.userId,userSig:this.room.userSig,isScreenAudioNeedAudioProcess:!0,isLocalAudioNeedAudioProcess:!1})}catch(h){this._log.warn("start audioProcessor plugin failed: ",h)}}})}_onLocalTrackCaptured(e){let{track:o}=e;o.kind==="audio"&&(!Xl||oL(Xl))&&(this._initActiveSpeaker(),F.off("102",this._onLocalTrackCaptured,this))}_initActiveSpeaker(){return WA(this,null,function*(){if(Xl&&!oL(Xl))this.emit(Ki.DEVICE_CHANGED,{type:"speaker",action:"active",device:Xl});else{let e=yield HM();e[0]&&!oL(e[0])?(Xl=e[0],this.emit(Ki.DEVICE_CHANGED,{type:"speaker",action:"active",device:e[0]})):F.on("102",this._onLocalTrackCaptured,this)}})}_onAudioAvailable(e){let{userId:o}=e,a=this._remoteAudioMuteMap.has(o)?this._remoteAudioMuteMap.get(o):this._remoteAudioMuteMap.get("*");(a===!1||this._room.autoReceiveAudio&&!a)&&this._doStartRemoteAudio({userId:o}).catch(()=>{})}_onVideoAvailable(e){let{userId:o,streamType:a}=e;if(!this._room.autoReceiveVideo)return;let l=this._room.remotePublishedUserMap.get(o);if(l){let d=a==="main"?l.remoteVideoTrack:l.remoteAuxiliaryTrack,h=[d];this._room.autoReceiveAudio&&l.remoteAudioTrack.isAvailable&&h.push(l.remoteAudioTrack),this._room.subscribe(...h).then(()=>{this._emitTrackEvent(d)}).catch(()=>{})}}_onAudioUnavailable(e){let{userId:o,muteState:a}=e;a.hasAudio&&a.audioMuted||this._stopRemoteAudio({userId:o},!1).catch(()=>{})}_onVideoUnavailable(e){let{userId:o,streamType:a}=e;this._stopRemoteVideo({userId:o,streamType:a},!1).catch(()=>{})}_onDataChannelAvailable(){if(this.listeners("realtime-transcriber-message").length>0)return this._room.subscribeDataChannel()}sendSEIMessage(e,o){var a;let l=this._plugins.get("SEI");l&&(l.update({buffer:e,options:po(fi({seiPayloadType:243},o),{small:!((a=this._localVideoTrack)==null||!a.small)})}),si.addCount({key:5e5,useUV:!0}))}sendCustomMessage(e){var o,a;(a=(o=this._room).sendCustomMessage)==null||a.call(o,e),si.addCount({key:500001,useUV:!0})}callExperimentalAPI(e,o){return WA(this,null,function*(){return this._log.info("callExperimentalAPI(".concat(e,", ").concat(JSON.stringify(o),")")),aoA.call(e,fi({trtcInstance:this},o))})}static setLogLevel(e,o){pA.setLogLevel(e),Ke(o)||(o?pA.enableUploadLog():pA.disableUploadLog())}static isSupported(){return Fk(gm.frameWorkType)}static getPermissions(e){return WA(this,arguments,function(o){let{request:a=!0,types:l=["camera","microphone"]}=o;return function*(){a&&(yield w1.request(l).catch(y=>{var S;return pA.error("getPermissions request failed, error: ".concat((S=y?.message)!=null?S:y))}));let[d,h]=yield Promise.all([w1.get("camera"),w1.get("microphone")]);return{camera:d,microphone:h}}()})}static getCameraList(){return tm(!(arguments.length>0&&arguments[0]!==void 0)||arguments[0])}static getMicrophoneList(){return em(!(arguments.length>0&&arguments[0]!==void 0)||arguments[0])}static getSpeakerList(){return HM(!(arguments.length>0&&arguments[0]!==void 0)||arguments[0])}static setCurrentSpeaker(e){return WA(this,null,function*(){if(Ha&&(e===hL.SPEAKER||e===hL.HEADSET)){let o=yield gm.getMicrophoneList(),a="";return o.forEach(l=>{l.label===e&&(a=l.deviceId)}),a?void mL.forEach(l=>WA(null,null,function*(){l._localAudioTrack&&(yield l.updateLocalAudio({option:{microphoneId:a}}))})):void 0}(yield HM()).forEach(o=>{o.deviceId===e&&(mL.forEach(a=>{a._setCurrentSpeaker(e),a.emit(Ki.DEVICE_CHANGED,{type:"speaker",action:"active",device:o})}),Xl=o)})})}static _addKVStat(e){let{type:o,key:a,value:l,base:d,useUV:h,version:y,max:S}=e;switch(y&&(AB.version=y),o){case"count":AB.addCount({key:a,useUV:h});break;case"enum":AB.addEnum({key:a,value:l,useUV:h});break;case"number":AB.addNumber({key:a,value:l,split:d,max:S})}}get localVideoTrack(){return this._localVideoTrack}get localScreenTrack(){return this._localScreenTrack}get localScreenAudioTrack(){return this._localScreenAudioTrack}};Y(Ms,"VERSION",Oz),Y(Ms,"_loggerManager",pA),Y(Ms,"EVENT",Ki),Y(Ms,"ERROR_CODE",wo),Y(Ms,"TYPE",hL),Y(Ms,"frameWorkType",30),hi([fa({replaceArg:A=>({argIndex:0,value:{name:"plugin"in A?A.plugin.Name:A.Name,assetsPath:"assetsPath"in A?A?.assetsPath:"default"}})})],Ms.prototype,"use"),hi([Bu(Zl.TRTC.enterRoom),XM("room",(A,e)=>{let[o]=A,[a]=e;return(o.roomId||o.strRoomId)===(a.roomId||a.strRoomId)&&o.userId===a.userId&&o.sdkAppId===a.sdkAppId}),jr(A=>function(e){return this._log.setUserId(e.userId),this._log.setSdkAppId(e.sdkAppId),A.call(this,e)}),fa()],Ms.prototype,"enterRoom"),hi([fa()],Ms.prototype,"exitRoom"),hi([Bu(Zl.TRTC.switchRoom),fa(),sL()],Ms.prototype,"switchRoom"),hi([Bu(Zl.TRTC.switchRole),Q_("room",{merge:(A,e)=>e}),fa()],Ms.prototype,"switchRole"),hi([fa()],Ms.prototype,"destroy"),hi([Bu(Zl.TRTC.startLocalAudio),XM("audio",(A,e)=>{let[o]=A,[a]=e;var l,d;return((l=o?.option)==null?void 0:l.microphoneId)===((d=a?.option)==null?void 0:d.microphoneId)}),fa()],Ms.prototype,"startLocalAudio"),hi([Bu(Zl.TRTC.updateLocalAudio),Q_("audio",{debounce:{delay:200,getKey:()=>"".concat(qz,"-localAudio"),isNeedToDebounce:A=>{var e;return!Ke((e=A.option)==null?void 0:e.captureVolume)}}}),fa()],Ms.prototype,"updateLocalAudio"),hi([$M("audio"),fa()],Ms.prototype,"stopLocalAudio"),hi([Bu(Zl.TRTC.startLocalVideo),XM("video",(A,e)=>{let[o]=A,[a]=e;var l,d;return((l=o?.option)==null?void 0:l.cameraId)===((d=a?.option)==null?void 0:d.cameraId)}),fa()],Ms.prototype,"startLocalVideo"),hi([Bu(Zl.TRTC.updateLocalVideo),Q_("video"),fa()],Ms.prototype,"updateLocalVideo"),hi([$M("video"),fa()],Ms.prototype,"stopLocalVideo"),hi([Bu(Zl.TRTC.startScreenShare),XM("screen",()=>!0),fa()],Ms.prototype,"startScreenShare"),hi([Bu(Zl.TRTC.updateScreenShare),Q_("screen"),fa()],Ms.prototype,"updateScreenShare"),hi([fa()],Ms.prototype,"stopScreenShare"),hi([Bu(Zl.TRTC.startRemoteVideo),XM(A=>"v".concat(A.userId).concat(A.streamType),()=>!0),fa({getRemoteId:A=>"".concat(A.userId,"_").concat(A.streamType)})],Ms.prototype,"startRemoteVideo"),hi([Bu(Zl.TRTC.updateRemoteVideo),Q_(A=>"v".concat(A.userId).concat(A.streamType)),fa({getRemoteId:A=>"".concat(A.userId,"_").concat(A.streamType)})],Ms.prototype,"updateRemoteVideo"),hi([Bu(Zl.TRTC.stopRemoteVideo),jr(A=>function(e){return WA(this,null,function*(){if(e.userId==="*"){let o=[];return this._room.remotePublishedUserMap.forEach(a=>{this._remoteVideoConfigMap.has("".concat(a.userId,"_main"))&&o.push(this.stopRemoteVideo({streamType:"main",userId:a.userId}).catch(()=>{})),this._remoteVideoConfigMap.has("".concat(a.userId,"_sub"))&&o.push(this.stopRemoteVideo({streamType:"sub",userId:a.userId}).catch(()=>{}))}),Promise.all(o)}return A.call(this,e)})}),fa({getRemoteId:A=>"".concat(A.userId,"_").concat(A.streamType)})],Ms.prototype,"stopRemoteVideo"),hi([$M(A=>"v".concat(A.userId).concat(A.streamType))],Ms.prototype,"_stopRemoteVideo"),hi([Bu(...Zl.TRTC.muteRemoteAudio),fa({getRemoteId:A=>A})],Ms.prototype,"muteRemoteAudio"),hi([Pz(...Zl.TRTC.setRemoteAudioVolume),function(A,e){return jr((o,a)=>function(){for(var l=arguments.length,d=new Array(l),h=0;h{var J;(J=p_.get(this))==null||J.delete(S)},A);y.set(S,V)}else{clearTimeout(k);let V=window.setTimeout(()=>{var J;o.apply(this,d),(J=p_.get(this))==null||J.delete(S)},A);y.set(S,V)}})}(200,A=>A),fa({getRemoteId:A=>A})],Ms.prototype,"setRemoteAudioVolume"),hi([mj("start"),qM(A=>{var e;return(e=A.afterStart)==null?void 0:e.call(A)}),XM((A,e)=>A.disableRandomCall?null:A.getAlias()+A.getGroup(e)),fa({replaceArg:A=>({argIndex:0,value:A.getName()}),getKVReportKey:A=>P2[A.getName()],ignoreLog:A=>A.getName()==="Debug",ignoreErrorLog:A=>A.getName()==="AudioProcessor"})],Ms.prototype,"startPlugin"),hi([mj("update"),Q_((A,e)=>A.disableRandomCall?null:A.getAlias()+A.getGroup(e),{merge:(A,e)=>(Xh(A[1],e[1]),A)}),fa({replaceArg:A=>({argIndex:0,value:A.getName()}),getKVReportKey:A=>Cy[A.getName()]})],Ms.prototype,"updatePlugin"),hi([mj("stop"),$M((A,e)=>{if(A.disableRandomCall)return null;let o=A.getGroup(e),a=A.getAlias();return o==="*"?new RegExp("".concat(a,".*")):a+o}),fa({replaceArg:A=>({argIndex:0,value:A.getName()}),getKVReportKey:A=>e_[A.getName()]})],Ms.prototype,"stopPlugin"),hi([Pz(...Zl.TRTC.enableAudioVolumeEvaluation)],Ms.prototype,"enableAudioVolumeEvaluation"),hi([fa()],Ms.prototype,"getVideoSnapshot"),hi([fa()],Ms.prototype,"_setCurrentSpeaker"),hi([XM(A=>"a".concat(A.userId),()=>!0)],Ms.prototype,"_startRemoteAudio"),hi([jr(A=>function(e){return WA(this,null,function*(){return e.userId==="*"?Promise.all([...this._room.remotePublishedUserMap.values()].map(o=>this._stopRemoteAudio(po(fi({},e),{userId:o.userId})).catch(()=>{}))):A.call(this,e)})}),$M(A=>"a".concat(A.userId))],Ms.prototype,"_stopRemoteAudio"),hi([$M("room")],Ms.prototype,"_exitRoom"),hi([$M("screen")],Ms.prototype,"_stopScreenShare"),hi([Bu(...Zl.TRTC.sendSEIMessage),lz({timesInSecond:30,maxSizeInSecond:8e3,getSize:function(){for(var A=arguments.length,e=new Array(A),o=0;oA.data.byteLength})],Ms.prototype,"sendCustomMessage"),hi([fa()],Ms.prototype,"callExperimentalAPI"),hi([Av()],Ms,"create"),hi([Bu(Zl.TRTC.create)],Ms,"_create"),hi([Av()],Ms,"setLogLevel"),hi([Av()],Ms,"isSupported"),hi([Av(),fa()],Ms,"getPermissions"),hi([Av()],Ms,"getCameraList"),hi([Av()],Ms,"getMicrophoneList"),hi([Av()],Ms,"getSpeakerList");var fL=Ms,loA=class{constructor(){Y(this,"_set",new Set),F.on(nA.LEAVE_SUCCESS,this.delete,this),F.on(nA.SWITCH_ROOM_SUCCESS,this.handleSwitchRoomSuccess,this)}add(A){let{room:e,roomId:o}=A;if(e.scene==="rtc")return;let a=this.getKey(e.userId,o||e.roomId,e.sdkAppId,e.useStringRoomId);this._set.add(a)}delete(A){let{room:e,roomId:o}=A;if(e.scene==="rtc")return;let a=this.getKey(e.userId,e.roomId||o,e.sdkAppId,e.useStringRoomId);this._set.delete(a)}getKey(A,e,o,a){return"".concat(o,"_").concat(e,"_").concat(A,"_").concat(a)}isJoined(A){let{userId:e,roomId:o,sdkAppId:a,room:l}=A;return l.scene!=="rtc"&&this._set.has(this.getKey(e,o,a,l.useStringRoomId))}handleSwitchRoomSuccess(A){let{room:e,currentRoomId:o,targetRoomId:a}=A;e.scene!=="rtc"&&(this._set.delete(this.getKey(e.userId,o,e.sdkAppId,e.useStringRoomId)),this._set.add(this.getKey(e.userId,a,e.sdkAppId,e.useStringRoomId)))}};function IoA(){return WA(this,null,function*(){let A,e;try{let CA=yield em();A=CA&&CA.length}catch{}try{let CA=yield tm();e=CA&&CA.length}catch{}let o={microphone:A,camera:e},{isH264EncodeSupported:a,isVp8EncodeSupported:l,isH264DecodeSupported:d,isVp8DecodeSupported:h,isH265EncodeSupported:y,isH265DecodeSupported:S}=this.checkSystemResult.detail,k=re.basis(),V={webRTC:k.isWebRTCSupported,getUserMedia:k.isGetUserMediaSupported,webSocket:k.isWebSocketsSupported,screenShare:k.isScreenShareSupported,webAudio:k.isWebAudioSupported,h264Encode:a,h264Decode:d,vp8Encode:l,vp8Decode:h,h265Encode:y,h265Decode:S},J={browser:k.browser,os:k.os,trtc:V,devices:o},cA={isWebCodecSupported:k.isWebCodecSupported,isMediaSessionSupported:k.isMediaSessionSupported,isWebTransportSupported:k.isWebTransportSupported};sn.uploadEvent({log:"trtcstats-".concat(JSON.stringify(J)),userId:this.userId}),this._log.info("TrtcStats-".concat(JSON.stringify(J))),sn.uploadEvent({log:"trtcadvancedstats-".concat(JSON.stringify(cA)),userId:this.userId}),FM()})}var uoA=gc(jl()),Kz="1",_j="2",yL="3",EoA="4",_1="5",doA="6",T1="7",jz="8",oB={CLIENT_BANNED:9,CHANNEL_SETUP_RESULT:19,CHANNEL_RECONNECT_RESULT:514,JOIN_ROOM_RESULT:20,PEER_JOIN:4134,PEER_LEAVE:4135,STREAM_ADDED:16,STREAM_REMOVED:18,UPLINK_NETWORK_STATS:22,UPDATE_REMOTE_MUTE_STAT:23,PUBLISH_RESULT:4098,PUBLISH_STATE_CHANGE_RESULT:4112,UNPUBLISH_RESULT:4100,SUBSCRIBE_RESULT:4102,UNSUBSCRIBE_RESULT:4104,SUBSCRIBE_CHANGE_RESULT:4106,MUTE_RESULT:4108,UPDATE_OFFER_RESULT:4128,START_PUBLISH_TENCENT_CDN_RES:1286,STOP_PUBLISH_TENCENT_CDN_RES:1288,START_PUBLISH_GIVEN_CDN_RES:777,STOP_PUBLISH_GIVEN_CDN_RES:779,START_MIX_TRANSCODE_RES:781,STOP_MIX_TRANSCODE_RES:783,START_PUBLISH_CDN_STREAM_RES:8196,UPDATE_PUBLISH_CDN_STREAM_RES:8198,STOP_PUBLISH_CDN_STREAM_RES:8200,USER_LIST_RES:4137,SWITCH_ROLE_RES:4110,UPDATE_CONSTRAINT_CONFIG_RES:772,REBUILD_PEER_CONNECTION_RES:4150,SPC_PUBLISH_RESULT:4146,SPC_SUBSCRIBE_RESULT:4156,ABILITY_STATUS_REPORT_RESULT:4158,SERVER_FIRST_PACKAGE_RECEIVED:5e3,RECEIVE_CUSTOM_MSG:4140,FALLBACK_CODEC:66,SEND_SWITCH_ROOM_RES:4160,SEND_SWITCH_ROOM_SUBED_REQ:4161,UPDATE_NETWORK_TIME_RESULT:5001,CUSTOM_CMD_RES:8220},CoA=[oB.UPDATE_REMOTE_MUTE_STAT,oB.UPLINK_NETWORK_STATS,oB.USER_LIST_RES,oB.MUTE_RESULT,oB.SERVER_FIRST_PACKAGE_RECEIVED,oB.RECEIVE_CUSTOM_MSG,oB.UPDATE_NETWORK_TIME_RESULT],ls={CLIENT_BANNED:"client-banned",CHANNEL_SETUP_RESULT:"channel-setup-result",CHANNEL_RECONNECT_RESULT:"channel-reconnect-result",JOIN_ROOM_RESULT:"join-room-result",PEER_JOIN:"peer-join",PEER_LEAVE:"peer-leave",STREAM_ADDED:"stream-added",STREAM_REMOVED:"stream-removed",UPLINK_NETWORK_STATS:"uplink-network-stats",UPDATE_REMOTE_MUTE_STAT:"update-remote-mute-stat",PUBLISH_RESULT:"publish-result",PUBLISH_STATE_CHANGE_RESULT:"publish-state-change-result",UNPUBLISH_RESULT:"unpublish-result",SUBSCRIBE_RESULT:"subscribe-result",SUBSCRIBE_CHANGE_RESULT:"subscribe-change-result",UNSUBSCRIBE_RESULT:"unsubscribe-result",UPDATE_OFFER_RESULT:"update-offer-result",START_PUBLISH_TENCENT_CDN_RES:"start-publish-tencent-cdn-res",STOP_PUBLISH_TENCENT_CDN_RES:"stop-publish-tencent-cdn-res",START_PUBLISH_GIVEN_CDN_RES:"start-publish-given-cdn-res",STOP_PUBLISH_GIVEN_CDN_RES:"stop-publish-given-cdn-res",START_MIX_TRANSCODE_RES:"start-mix-transcode-res",STOP_MIX_TRANSCODE_RES:"stop-mix-transcode-res",START_PUBLISH_CDN_STREAM_RES:"start-publish-cdn-stream-res",UPDATE_PUBLISH_CDN_STREAM_RES:"update-publish-cdn-stream-res",STOP_PUBLISH_CDN_STREAM_RES:"stop-publish-cdn-stream-res",USER_LIST_RES:"user-list-res",SWITCH_ROLE_RES:"switch_role_res",MUTE_RESULT:"mute-result",UPDATE_CONSTRAINT_CONFIG_RES:"update-contraint-config-res",REBUILD_PEER_CONNECTION_RES:"rebuild-pc-res",SPC_PUBLISH_RESULT:"spc-publish-result",SPC_SUBSCRIBE_RESULT:"spc-subscribe-result",ABILITY_STATUS_REPORT_RESULT:"ability-status-report",SERVER_FIRST_PACKAGE_RECEIVED:"first-pkg-received",RECEIVE_CUSTOM_MSG:"receive-custom-msg",FALLBACK_CODEC:"fallback-codec",SEND_SWITCH_ROOM_RES:"send-switch-room-res",SEND_SWITCH_ROOM_SUBED_REQ:"send-switch-room-subed-res",UPDATE_NETWORK_TIME_RESULT:"update_network_time_result",CUSTOM_CMD_RES:"custom-cmd-res"},Wz="publish_change",hoA="join",BoA="leave",QoA="quality_report",zz="mute_uplink",Zz="publish",Tj="publish_state_change",N1="unpublish",Xz="subscribe",Nj="unsubscribe",Gj="subscribe_change",poA="start_publishing",moA="stop_publishing",foA="start_push_user_cdn",yoA="stop_push_user_cdn",DoA="start_mcu_mix",SoA="stop_mcu_mix",MoA="start_publish_cdn_stream",voA="update_publish_cdn_stream",RoA="stop_publish_cdn_stream",woA="get_user_list",_oA="change_role",bj="update_constraint_config",ToA="rebuild_pc",NoA="join/v2",$z="publish/v2",A8="subscribe/v3",GoA="ability_status_report",boA="reconnect",koA="channel_msg",LoA="switch_room",UoA="update_network_time",FoA=new Set([Zz,Wz,Tj,N1,Xz,Gj,Nj,$z,A8]),G1=new Set,OoA=["autoTest","relayInnerIp","relayOuterIp","mcd","newRelay","clientIp"],PoA=0,e8=class extends uoA.default{constructor(A){var e,o,a;super(),Y(this,"room"),Y(this,"sdkAppId"),Y(this,"userId"),Y(this,"userSig"),Y(this,"url"),Y(this,"backupUrl"),Y(this,"destroyed",!1),Y(this,"_socketInUse"),Y(this,"_socket"),Y(this,"_backupSocket"),Y(this,"_signalInfo",{tinyId:void 0,clientIp:"",signalIp:"",relayIp:"",relayInnerIp:"",relayPort:0,endReportExtend:void 0,bakRelayIps:[],reportToken:void 0}),Y(this,"_currentState","DISCONNECTED"),Y(this,"_isReconnecting",!1),Y(this,"_seq",0),Y(this,"_log"),Y(this,"_lastMessageTime",-1),Y(this,"_connectStartTime",-1),Y(this,"_stopConnectRetry"),Y(this,"_isFirstConnect",!0),Y(this,"bytesSent",0),Y(this,"bytesReceived",0),Y(this,"keepAlive",!1),Y(this,"signalDomainWhenUnifiedProxy"),Y(this,"stopKeepAliveTimeout"),Y(this,"stopPrelinkTimeout"),Y(this,"rtt",0),Y(this,"prelink",!1),Y(this,"_prelinkConfig"),this.room=A.room,this.sdkAppId=A.sdkAppId,this.userId=A.userId,this.userSig=A.userSig,this.signalDomainWhenUnifiedProxy=A.signalDomainWhenUnifiedProxy,this.prelink=A.prelink||!1;let l=((o=(e=this.room.scheduleResult)==null?void 0:e.config)==null?void 0:o.keepAliveClient)||0;(a=this.room.joinParams)!=null&&a.keepAlive&&!l&&(l=1),l-G1.size>0&&this.room.enableSPC&&(this.keepAlive=!0,G1.add(this)),this.url=A.url,this.backupUrl=A.backupUrl,this._seq=0,this._log=pA.createLogger({parent:this.room.getLogger(),id:"ws".concat(++PoA),userId:this.userId,sdkAppId:this.sdkAppId}),this.onmessage=this.onmessage.bind(this),this.onerror=this.onerror.bind(this),this.onclose=this.onclose.bind(this)}get race(){return this.room.enableSPC&&!this.room.proxy_ws}get urlParam(){let A="?sdkAppId=".concat(encodeURIComponent(this.sdkAppId),"&userId=").concat(encodeURIComponent(this.userId),"&userSig=").concat(encodeURIComponent(this.userSig),"&keepAlive=").concat(encodeURIComponent(Number(this.keepAlive)));this.signalDomainWhenUnifiedProxy&&(A+="&signalDomain=".concat(encodeURIComponent(this.signalDomainWhenUnifiedProxy))),this.prelink&&(A+="&prelink=1");let e=new URLSearchParams(location.search);return OoA.forEach(o=>{let a=e.get("trtc_".concat(o));a&&(A+="&".concat(o,"=").concat(encodeURIComponent(a)))}),this.race?"".concat(A,"&race=1"):A}get _urlWithParam(){return"".concat(this.url).concat(this.race?"/v2/ws":"").concat(this.urlParam)}get _backupUrlWithParam(){return"".concat(this.backupUrl).concat(this.race?"/v2/ws":"").concat(this.urlParam)}get isConnected(){return this._currentState==="CONNECTED"}get isConnecting(){return this._currentState==="CONNECTING"}get isOnline(){return this._currentState==="CONNECTED"&&Date.now()-this._lastMessageTime<12e3}connect(){return WA(this,arguments,function(){var A=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1e4;return function*(){if(A.isConnected)return Promise.resolve();A._log.info("connect to [".concat(A.url,", ").concat(A.backupUrl,"] ").concat(A.race?"race":"").concat(e?" timeout: ".concat(e):""," keepAlive: ").concat(Number(A.keepAlive))),A.emitConnectionStateChanged("CONNECTING"),A._connectStartTime=ko();let o=[A.connectWS({url:A._urlWithParam,isMain:!0,timeout:e})];A.race&&A._backupUrlWithParam!==A._urlWithParam&&o.push(A.connectWS({url:A._backupUrlWithParam,isMain:!1,timeout:e})),A._socketInUse=yield rM(o),A.unbindAndCloseSocket(A._socketInUse===A._socket?YA.BACKUP:YA.MAIN),A._isFirstConnect&&(si.addSuccessEvent({key:521720}),A._isFirstConnect=!1),A.emitConnectionStateChanged("CONNECTED")}()})}connectWS(A){let{url:e,timeout:o,isMain:a}=A,l=new WebSocket(e);this.bindSocket(l),a?this._socket=l:this._backupSocket=l;let d=-1;return new Promise((h,y)=>{l.onclose=y,l.onerror=y,l.onopen=()=>h(l),o&&(d=setTimeout(()=>{this.unbindAndCloseSocket(a?YA.MAIN:YA.BACKUP),y(new gi({code:Ct.SIGNAL_CHANNEL_SETUP_FAILED,message:"ws connect timeout"}))},o))}).finally(()=>{l.onclose=null,l.onerror=null,l.onopen=null,clearTimeout(d)})}bindSocket(A){A.addEventListener("close",this.onclose),A.addEventListener("error",this.onerror),A.addEventListener("message",this.onmessage)}unbindSocket(A){A.removeEventListener("close",this.onclose),A.removeEventListener("error",this.onerror),A.removeEventListener("message",this.onmessage)}unbindAndCloseSocket(A){if(A===YA.MAIN){if(this._socket){this.unbindSocket(this._socket);try{this._socket.close(1e3)}catch{}this._socket=null}}else if(this._backupSocket){this.unbindSocket(this._backupSocket);try{this._backupSocket.close(1e3)}catch{}this._backupSocket=null}}onclose(A){A.target===this._socketInUse&&(this._log.warn("".concat(A.target===this._socket?"main":"backup"," is closed code:").concat(A.code," ").concat(A.reason)),this.emitConnectionStateChanged("DISCONNECTED"),(!A.wasClean||A.code!==1e3&&A.code!==4013)&&this.startReconnection(),this.prelink&&A.code===4013&&this.room.clearNetworkQuality(),this.room.isJoining&&this.emit(_1,new gi({code:Ct.SIGNAL_CHANNEL_SETUP_FAILED,message:"websocket onclose"})))}onerror(A){this._log.error("".concat(A.target===this._socket?"main":"backup"," error observed")),this.emitConnectionStateChanged("DISCONNECTED"),A.target===this._socketInUse&&(this.unbindAndCloseSocket(YA.MAIN),this.unbindAndCloseSocket(YA.BACKUP),this._socketInUse=null,this.reconnect()),this.room.isJoining&&this.emit(_1,new gi({code:Ct.SIGNAL_CHANNEL_SETUP_FAILED,message:"websocket onerror"}))}onmessage(A){if(!this.isConnected)return;let{isOnline:e}=this;this._lastMessageTime=Date.now(),e||this.emit(jz),this.bytesReceived+=_0(A.data);let o=JSON.parse(A.data),{cmd:a,data:l}=o,d=Object.values(oB),h=Object.keys(oB)[d.indexOf(a)],y=ls[h]||a;switch(CoA.includes(a)||(this._log.debug("received ".concat(a," msg: ").concat(A.data)),y&&this._log.info("Received event: [ ".concat(y," ]"))),a){case oB.CHANNEL_SETUP_RESULT:if(o.code===0)this._signalInfo.clientIp=l.clientIp,this._signalInfo.signalIp=l.signalInnerIp,l.svrTime&&zB(l.svrTime-new Date().getTime()),this._log.info("ChannelSetup Success ".concat(ko()-this._connectStartTime)),si.addSuccessEvent({key:521701,cost:ko()-this._connectStartTime}),this._connectStartTime=-1,this.room.firewallDetector.resetTimeoutCount(),this.emit(Kz,{signalInfo:this._signalInfo});else{let S=new gi({code:Ct.SIGNAL_CHANNEL_SETUP_FAILED,extraCode:o.code,message:Xo({key:vo.SIGNAL_CHANNEL_SETUP_FAILED,data:{errorCode:o.code,errorMsg:o.message}})});this._log.error("".concat(o.code,", ").concat(o.message)),this.close(),si.addFailedEvent({key:521701,error:S}),this.emit(_1,S)}break;case oB.JOIN_ROOM_RESULT:o.code===0&&(this._signalInfo.relayIp=l.relayOuterIp,this._signalInfo.relayInnerIp=l.relayInnerIp,this._signalInfo.bakRelayIps=l.bakRelayIps,this._signalInfo.relayPort=l.relayPort,this._signalInfo.tinyId=o.tinyId,this._signalInfo.endReportExtend=l.endReportExtend,this._signalInfo.reportToken=l.reportToken,this._log.info("signalIp:".concat(this._signalInfo.signalIp," clientIp:").concat(this._signalInfo.clientIp," relayIp: ").concat(this._signalInfo.relayIp))),this.emit(y,{data:o});break;default:this.emit(String(y),{data:o})}}reGetSignalChannelUrl(){return WA(this,null,function*(){try{if(!this.room.joinParams)return;pQ(!0),yield this.room.schedule(this.room.joinParams);let{mainUrl:A,backupUrl:e}=this.room.getSignalChannelUrl();this.url=A,this.backupUrl=e}catch{}})}startReconnection(){if(!this._socketInUse)return;this._socketInUse.onclose=null,this._socketInUse.close(4011);let A=this._socketInUse===this._socket;this.unbindAndCloseSocket(A?YA.MAIN:YA.BACKUP),this._socketInUse=null,this.emitConnectionStateChanged("DISCONNECTED"),this.reconnect()}reconnect(){return WA(this,null,function*(){if(!this._isReconnecting){if(!this.room.isJoined&&this.keepAlive)return void this.close();this._isReconnecting=!0;try{this._log.warn("reconnect"),yield this.connect();let{roomId:A,useStringRoomId:e}=this.room,{relayIp:o,relayInnerIp:a,relayPort:l}=this._signalInfo,{data:d}=yield this.sendWaitForResponse({command:boA,data:{roomId:A,useStringRoomId:e,relayInnerIp:a,relayOuterIp:o,relayPort:l},responseCommand:ls.CHANNEL_RECONNECT_RESULT});d.code===0?(this._log.warn("reconnect success"),this.stopReconnection(),si.addSuccessEvent({key:521702,cost:ko()-this._connectStartTime}),this._connectStartTime=-1,this.room.syncUserList(),this.room.checkConnectionsToReconnect()):(si.addFailedEvent({key:521702,error:d.code}),this._log.warn("reconnect failed, ".concat(d.code," ").concat(d.message)),this.room.reJoin())}catch(A){this._log.error(A),this.room.reJoin()}}})}send(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.isConnected&&!this.room.isLeft){let o={cmd:A,data:e,userId:this.userId,tinyId:this._signalInfo.tinyId,seq:++this._seq},a=JSON.stringify(o);return this._socketInUse.send(a),FoA.has(A)&&this._log.info("send",A,e),this.bytesSent+=_0(a),o.seq}}sendWaitForResponse(A){let{command:e,data:o,timeout:a=5e3,responseCommand:l,commandDesc:d,enableLog:h=!0,addReceiveTime:y=!1}=A;return new Promise((S,k)=>{let V=()=>{clearTimeout(J),k(new gi({code:Ct.API_CALL_ABORTED,message:"".concat(e," aborted due to connection closed")}))};this.once(T1,V);let J=setTimeout(()=>{this.off(l,cA),this.off(T1,V);let MA=new gi({code:Ct.API_CALL_TIMEOUT,message:Xo({key:vo.API_CALL_TIMEOUT,data:{commandDesc:d,command:e}})});h&&this._log.warn(MA),k(MA)},a),cA=MA=>{MA.data.seq===CA&&(clearTimeout(J),this.off(l,cA),this.off(T1,V),y&&(MA.data.receiveTime=Date.now()),S(MA))};this.on(l,cA);let CA=this.send(e,o)})}sendWaitForResponseWithRetry(A){let{commandDesc:e,command:o,retries:a=0,retryTimeout:l=0}=A;return IM({retryFunction:this.sendWaitForResponse,onError:d=>{let{retry:h,reject:y,error:S}=d;!this.room.isJoined||this.destroyed||S.code===Ct.API_CALL_ABORTED?y(S):this.isOnline?h():(this._log.warn("retry ".concat(o," when connected")),this.once(jz,h))},onRetrying:d=>{this._log.warn("".concat(e||o," timeout observed, retrying [").concat(d,"/").concat(a,"]"))},settings:{retries:a,timeout:l},context:this})(A)}getCurrentState(){return this._currentState}getSignalInfo(){return this._signalInfo}stopReconnection(){this._isReconnecting=!1,this._stopConnectRetry&&this._stopConnectRetry()}close(){this._log.info("closed"),clearTimeout(this.stopKeepAliveTimeout),clearTimeout(this.stopPrelinkTimeout),G1.delete(this),this.stopReconnection(),this._signalInfo={tinyId:void 0,clientIp:"",signalIp:"",relayIp:"",relayInnerIp:"",relayPort:0,bakRelayIps:[],endReportExtend:void 0,reportToken:void 0},this._socketInUse=null,this.bytesSent=0,this.bytesReceived=0,this._stopConnectRetry&&this._stopConnectRetry(),this.unbindAndCloseSocket(YA.MAIN),this.unbindAndCloseSocket(YA.BACKUP),this.emitConnectionStateChanged("DISCONNECTED"),this.emit(T1)}destroy(){this.close(),this.destroyed=!0}getBackupRelayIpPair(){var A;let e=(A=this._signalInfo.bakRelayIps)==null?void 0:A.shift();return e&&(e.relayPort=e.relayPort||this._signalInfo.relayPort),e}clearBakRelayIps(){this._signalInfo.bakRelayIps=[]}stopKeepAliveIn(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:3600;if(this.keepAlive){this._log.info("stopKeepAlive in ".concat(A,"s")),this.stopKeepAliveTimeout=setTimeout(()=>{this.keepAlive=!1,this._log.info("close due to not used ".concat(A,"s")),this.close(),this.off(ls.JOIN_ROOM_RESULT,e)},1e3*A);let e=o=>{o.data.code===0&&(this._log.info("stopKeepAlive clear timeout"),clearTimeout(this.stopKeepAliveTimeout),this.off(ls.JOIN_ROOM_RESULT,e))};this.on(ls.JOIN_ROOM_RESULT,e)}}stopPrelinkIn(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:300;if(this.keepAlive)return;this._log.info("stopPrelink in ".concat(A,"s")),this.stopPrelinkTimeout=setTimeout(()=>{this._log.info("close prelink due to not used in ".concat(A,"s")),this.close(),this.room.clearNetworkQuality(),this.off(ls.JOIN_ROOM_RESULT,e)},1e3*A);let e=o=>{o.data.code===0&&(this._log.info("stopPrelink clear timeout"),clearTimeout(this.stopPrelinkTimeout),this.off(ls.JOIN_ROOM_RESULT,e))};this.on(ls.JOIN_ROOM_RESULT,e)}markPrelinkConnected(A){this._prelinkConfig=po(fi({},A),{linkedTime:Date.now()})}isPrelinkValid(A,e,o){return!(!this.prelink||!this._prelinkConfig)&&(A!==this._prelinkConfig.sdkAppId||e!==this._prelinkConfig.userId||o!==this._prelinkConfig.userSig?(this._log.warn("prelink params not match"),!1):!!this.isConnected||(this._log.warn("prelink is not connected"),!1))}consumePrelink(){this.prelink=!1,this._prelinkConfig=void 0}emitConnectionStateChanged(A){if(A===this._currentState)return;this._log.info("".concat(this._currentState," -> ").concat(A));let e={prevState:this._currentState,state:A};A==="CONNECTING"&&(e.isReconnecting=this._isReconnecting),this.emit(_j,e),this._currentState=A,A==="CONNECTED"?this.emit(yL):A==="DISCONNECTED"&&this.emit(doA)}};hi([tB({settings:{retries:1/0,timeout:2e3},onError(A,e){!this.room.isDestroyed&&!this.destroyed&&(this._isFirstConnect&&(si.addFailedEvent({key:521720,error:A}),this._isFirstConnect=!1),this.room.firewallDetector.increaseTimeoutCount(),e())},onRetrying(A,e){this._log.warn("retrying to connect ".concat(A)),A>=3&&A%3==0&&this.reGetSignalChannelUrl(),e&&(this._stopConnectRetry=e,(this.room.isDestroyed||this.destroyed)&&e())}})],e8.prototype,"connect");var xoA=gc(jl()),t8=!1,sm=class{constructor(A){Y(this,"userId"),Y(this,"tinyId"),Y(this,"_sdpSemantics"),Y(this,"_isUplink"),Y(this,"_room"),Y(this,"_log"),Y(this,"_signalChannel"),Y(this,"_isErrorObserved",!1),Y(this,"_waitForPeerConnectionConnectedPromise"),Y(this,"_waitForPeerConnectionConnectedPromiseReject",null),Y(this,"_peerConnection",null),Y(this,"_emitter",new xoA.default),Y(this,"_currentState","DISCONNECTED"),Y(this,"_isReconnecting",!1),Y(this,"_reconnectionCount",0),Y(this,"_reconnectionTimer",-1),Y(this,"_isFirstConnection",!0),Y(this,"_prevTime",-1),Y(this,"_localAddress"),Y(this,"_remoteAddress"),Y(this,"isDestoyed",!1),this.userId=A.userId,this.tinyId=A.tinyId,this._room=A.room,this._sdpSemantics=A.room.sdpSemantics,this._isUplink=A.isUplink,this._log=A.room.getLogger().createChild({id:"n-mpc",userId:this._room.userId,remoteUserId:this.userId,sdkAppId:this._room.sdkAppId,isLocal:this._isUplink}),this._signalChannel=A.signalChannel}beforeConnect(){this._prevTime<0&&(this._prevTime=ko())}afterConnect(){try{this._isFirstConnection?(this._isFirstConnection=!1,si.addSuccessEvent({key:521705,cost:Math.min(ko()-this._prevTime,3e4)})):this._isReconnecting&&si.addSuccessEvent({key:521706,cost:ko()-this._prevTime}),this._prevTime=-1}catch(A){throw this._isFirstConnection?(this._isFirstConnection=!1,si.addFailedEvent({key:521705,error:A})):this._isReconnecting&&this._reconnectionCount>=3&&si.addFailedEvent({key:521706,error:A}),A}}initialize(){let A={iceServers:this._room.getIceServers(),iceTransportPolicy:this._room.getIceTransportPolicy(),sdpSemantics:this._sdpSemantics,bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",tcpCandidatePolicy:"disable",IceTransportsType:"nohost"};this._peerConnection=new RTCPeerConnection(A),this._peerConnection.onconnectionstatechange=this.onConnectionStateChange.bind(this)}close(A){this._log.info("close connection"),this._emitter.emit("closed",A),this._isReconnecting&&this.stopReconnection(),this.closePeerConnection()}destroy(){this.isDestoyed=!0}closePeerConnection(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this._peerConnection&&(this._log.info("close pc"),this._peerConnection.onconnectionstatechange=null,this._peerConnection.close(),this._peerConnection=null,A&&this.emitConnectionStateChangedEvent("DISCONNECTED")),this._waitForPeerConnectionConnectedPromiseReject&&this._waitForPeerConnectionConnectedPromiseReject(new gi({code:Ct.API_CALL_ABORTED,message:"connection closed"}))}getDTLSTransportState(){if(!this._peerConnection)return zh;let A=null;if(this._isUplink){if(!UI()||this._peerConnection.getSenders().length===0)return zh;A=this._peerConnection.getSenders()[0].transport}else{if(!By()||this._peerConnection.getReceivers().length===0)return zh;A=this._peerConnection.getReceivers()[0].transport}return A?A.state:zh}onConnectionStateChange(A){let e=this._peerConnection.iceConnectionState,o=this.getDTLSTransportState();if(this._log.info("connectionState: ".concat(A.target.connectionState,", ICE: ").concat(e,", DTLS: ").concat(o)),A.target.connectionState===ho.CONNECTING&&this.emitConnectionStateChangedEvent("CONNECTING"),A.target.connectionState===ho.FAILED||A.target.connectionState===ho.CLOSED){let a="connection ".concat(A.target.connectionState,". ICE Transport state: ").concat(e,", DTLS Transport state: ").concat(o),l=new gi({message:a,code:Ct.ICE_TRANSPORT_ERROR});this.emitConnectionStateChangedEvent("DISCONNECTED"),this.startReconnection(),this._isErrorObserved||this._emitter.emit("error",l)}(A.target.connectionState===ho.CONNECTED||A.target.connectionState===ho.COMPLETED)&&(this.logSelectedCandidate(),sn.logSuccessEvent({userId:this._room.userId,eventType:Ja.ICE_CONNECTION_STATE}),this.emitConnectionStateChangedEvent("CONNECTED"))}emitConnectionStateChangedEvent(A){return A!==this._currentState&&(A==="CONNECTED"&&(this._room.firewallDetector.resetTimeoutCount(),t8=!0),F.emit(nA.PEER_CONNECTION_STATE_CHANGED,{room:this._room,prevState:this._currentState,state:A,remoteUserId:this._isUplink?void 0:this.userId}),this._emitter.emit("connection-state-changed",{prevState:this._currentState,state:A}),this._currentState=A,!0)}getPeerConnection(){return this._peerConnection}getRoom(){return this._room}getUserId(){return this.userId}getTinyId(){return this.tinyId}logSelectedCandidate(){return WA(this,null,function*(){if(!this._peerConnection)return;let A=yield this._peerConnection.getStats();for(let[,e]of A)if(GM(e)){let o=A.get(e.localCandidateId),a=A.get(e.remoteCandidateId);o&&(this._log.info("local candidate: ".concat(o.candidateType," ").concat(o.protocol,":").concat(o.ip||o.address,":").concat(o.port," ").concat(o.networkType||""," ").concat(o.candidateType==="relay"?"relayProtocol:".concat(o.relayProtocol):"")),this._localAddress="".concat(o.ip||o.address,":").concat(o.port)),a&&(this._log.info("remote candidate: ".concat(a.candidateType," ").concat(a.protocol,":").concat(a.ip||a.address,":").concat(a.port)),this._remoteAddress="".concat(a.protocol,":").concat(a.ip||a.address));break}})}getCurrentState(){return this._currentState}waitForPeerConnectionConnected(){return this._waitForPeerConnectionConnectedPromise||(this._waitForPeerConnectionConnectedPromise=new Promise((A,e)=>{if(this._currentState==="CONNECTED")return A();this._waitForPeerConnectionConnectedPromiseReject=e;let o=h=>{h.state==="CONNECTED"&&(clearTimeout(d),l(),A())},a=h=>{let{room:y}=h;y===this._room&&(clearTimeout(d),l(),e(new gi({code:Ct.API_CALL_ABORTED,message:Xo({key:vo.CONNECTION_ABORTED,data:"leave room"})})))},l=()=>{F.off(nA.LEAVE_SUCCESS,a,this),this._emitter.off("connection-state-changed",o,this)},d=setTimeout(()=>{l();let h=new gi({code:Ct.API_CALL_TIMEOUT,message:"connection timeout"});this._room.firewallDetector.increaseTimeoutCount(),e(h)},Fb);F.on(nA.LEAVE_SUCCESS,a,this),this._emitter.on("connection-state-changed",o,this)}),this._waitForPeerConnectionConnectedPromise=this._waitForPeerConnectionConnectedPromise.finally(()=>{this._waitForPeerConnectionConnectedPromise=null,this._waitForPeerConnectionConnectedPromiseReject=null})),this._waitForPeerConnectionConnectedPromise}getReconnectionCount(){return this._reconnectionCount}startReconnection(){this._isReconnecting=!0,this.reconnect()}clearReconnectionTimer(){this._reconnectionTimer!==-1&&(clearTimeout(this._reconnectionTimer),this._reconnectionTimer=-1)}stopReconnection(){this._log.info("stop reconnection"),this._isReconnecting=!1,this._reconnectionCount=0,this.clearReconnectionTimer(),this._signalChannel.off(yL,this.reconnect,this)}beforeReconnect(){if(this._reconnectionTimer!==-1)return this._log.warn("reconnect() is reconnecting, ignore"),-1;if(this._reconnectionCount>=Jf()){this._log.warn("SDK has tried reconnect for ".concat(this._reconnectionCount," times, but all failed, please check your network")),this.stopReconnection();let A=new gi({code:this._isUplink?Ct.UPLINK_RECONNECTION_FAILED:Ct.DOWNLINK_RECONNECTION_FAILED,message:Xo({key:this._isUplink?vo.UPLINK_RECONNECTION_FAILED:vo.DOWNLINK_RECONNECTION_FAILED})});return this.emitConnectionStateChangedEvent("DISCONNECTED"),this._emitter.emit("error",A),-1}return this._signalChannel.isConnected?(this._reconnectionCount+=1,this._log.warn("reconnect() trying [".concat(this._reconnectionCount,"]")),1):(this._log.warn("reconnect() signal channel is not connected, suspend reconnection until signal is connected"),this._signalChannel.once(yL,this.reconnect,this),-1)}on(A,e,o){this._emitter.on(A,e,o)}off(A,e,o){this._emitter.off(A,e,o)}getIsReconnecting(){return this._isReconnecting}get isH264(){var A,e;return!((e=(A=this._peerConnection)==null?void 0:A.remoteDescription)==null||!e.sdp.includes("H264"))}setOffer(A){var e;return(e=this._peerConnection)==null?void 0:e.setLocalDescription(A)}setAnswer(A){var e;return(e=this._peerConnection)==null?void 0:e.setRemoteDescription(A)}};hi([Sy(521712,!1)],sm.prototype,"setOffer"),hi([Sy(521713,!1)],sm.prototype,"setAnswer");var i8=gc(Sb()),uc=function(A){return i8.default.parse(A)},_y=function(A){return i8.default.write(A)};function kj(A){return Object.keys(A).filter(e=>A[e])}var b1=class aX extends sm{constructor(e){super(po(fi({},e),{isUplink:!1})),Y(this,"_flag",0),Y(this,"isRobot",!1),Y(this,"role","anchor"),Y(this,"remoteAudioTrack"),Y(this,"remoteVideoTrack"),Y(this,"remoteAuxiliaryTrack"),Y(this,"avPlayerStateSyncManager"),Y(this,"ssrc",{audio:0,video:0,auxiliary:0}),Y(this,"_isSDPExchanging",!1),Y(this,"_videoCodec"),Y(this,"fromType"),this.flag=e.flag,this.isRobot=e.isRobot||!1,this.remoteAudioTrack=e.remoteAudioTrack||new d1(this._room,this),this.remoteVideoTrack=e.remoteVideoTrack||new CL(this._room,this),this.remoteAuxiliaryTrack=e.remoteAuxiliaryTrack||new gz(this._room,this),this.avPlayerStateSyncManager=new Bj({log:this._log,audioPlayer:this.remoteAudioTrack.player,videoPlayer:this.remoteVideoTrack.player})}get videoCodec(){var e,o;let a=(o=(e=this._peerConnection)==null?void 0:e.remoteDescription)==null?void 0:o.sdp;return a?a.includes("H264")?"h264":"vp8":this._videoCodec||"h264"}set videoCodec(e){this._videoCodec=e}get subscribeState(){let e={audio:!1,video:!1,auxiliary:!1,smallVideo:!1};return this.remoteVideoTrack.isSubscribed&&(8&this.remoteVideoTrack.mediaType?e.smallVideo=!0:e.video=!0),this.remoteAudioTrack.isSubscribed&&(e.audio=!0),this.remoteAuxiliaryTrack.isSubscribed&&(e.auxiliary=!0),e}get muteState(){return Np(this.flag,this.userId)}get flag(){return this._flag}set flag(e){var o,a,l;e!==this._flag&&(this._flag=e,(o=this.remoteAudioTrack)==null||o.onFlagChanged(),(a=this.remoteVideoTrack)==null||a.onFlagChanged(),(l=this.remoteAuxiliaryTrack)==null||l.onFlagChanged())}get hasMainStream(){return this.muteState.hasAudio||this.muteState.hasVideo||this.muteState.hasSmall}get hasAuxStream(){return this.muteState.hasAuxiliary}get isMainStreamSubscribed(){return(this.subscribeState.audio||this.subscribeState.video||this.subscribeState.smallVideo)&&(this.muteState.hasAudio||this.muteState.hasVideo||this.muteState.hasSmall)}get isAuxStreamSubscribed(){return this.subscribeState.auxiliary&&this.muteState.hasAuxiliary}get isSmallStreamSubscribed(){return this.subscribeState.smallVideo&&this.muteState.hasSmall}get isBigStreamSubscribed(){return this.subscribeState.video&&this.muteState.hasVideo}isStreamUnpublished(e){return e===YA.MAIN?!this.muteState.hasAudio&&!this.muteState.hasVideo:!this.muteState.hasAuxiliary}initialize(){super.initialize(),this.installEvents(),this._peerConnection.ontrack=this.onTrack.bind(this)}close(e){super.close(e),this.emitConnectionStateChangedEvent("DISCONNECTED"),this.remoteAudioTrack.close(),this.remoteVideoTrack.close(),this.remoteAuxiliaryTrack.close(),this.avPlayerStateSyncManager.destroy(),this.uninstallEvents()}installEvents(){}uninstallEvents(){this._emitter.removeAllListeners()}emitConnectionStateChangedEvent(e){var o,a;let l=this._currentState,d=super.emitConnectionStateChangedEvent(e);return d&&l!==e&&((o=this.remoteVideoTrack)==null||o.emit("connection-state-changed",{prevState:l,state:e}),(a=this.remoteAuxiliaryTrack)==null||a.emit("connection-state-changed",{prevState:l,state:e})),d}onTrack(e){let o=e.streams[0],{track:a}=e,l=o.id===Eu?YA.MAIN:YA.AUXILIARY;this._log.debug("ontrack ".concat(l," ").concat(a.kind));let d=YA.AUDIO;a.kind===YA.VIDEO&&(d=l===YA.MAIN?YA.VIDEO:YA.AUXILIARY);let h=this.remoteAudioTrack;d===YA.VIDEO?h=this.remoteVideoTrack:d===YA.AUXILIARY&&(h=this.remoteAuxiliaryTrack),h.setInputMediaStreamTrack(a)}addRRTRLine(e){let o=e.split(`\r +`),a=new Map;o.forEach((d,h)=>{/^a=rtcp-fb:/.test(d)&&o[h+1]&&!/^a=rtcp-fb:/.test(o[h+1])&&a.set(h+1,"".concat(d.match(/^a=rtcp-fb:\d+/)[0]," rrtr"))});let l=[...a];for(let d=0;d{a.type===YA.VIDEO&&a.fmtp.forEach(l=>{l.config+=";sps-pps-idr-in-keyframe=1"})}),_y(o)}removeSDESDescription(e){let o=["urn:ietf:params:rtp-hdrext:sdes:mid","urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id","urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id"],a=uc(e);return a.media.forEach(l=>{l.ext&&(l.ext=l.ext.filter(d=>!o.includes(d.uri)))}),_y(a)}isSubscriptionStateNotChanged(e){return JSON.stringify(e)===JSON.stringify(this.subscribeState)}subscribe(e,o){return WA(this,null,function*(){var a,l;try{if((((a=this._peerConnection)==null?void 0:a.connectionState)===ho.NEW||((l=this._peerConnection)==null?void 0:l.connectionState)===ho.CONNECTING)&&(yield this.waitForPeerConnectionConnected()),this.isSubscriptionStateNotChanged(e))return void(this._peerConnection||(this.initialize(),yield this.connect(e)));if(this._log.info("subscribe ".concat(o," ").concat(JSON.stringify(e))),this._peerConnection||this._isSDPExchanging){let d="subscribe_change";Object.values(e).find(h=>h===!0)||(d="unsubscribe"),yield this.sendSubscription(d,e)}else this.initialize(),yield this.connect(e)}catch(d){throw this._room.isJoined&&this.isStreamUnpublished(o)?(this._log.warn("".concat(d.message," ").concat(JSON.stringify(this.muteState))),new gi({code:Ct.REMOTE_STREAM_NOT_EXIST,message:"remote user ".concat(this.userId," unpublished stream")})):d}})}unsubscribe(e){return WA(this,arguments,function(o){var a=this;let{remoteTracks:l,streamType:d}=o;return function*(){if(a._currentState==="CONNECTED"&&(d==="main"&&!a.isMainStreamSubscribed||d==="auxiliary"&&!a.isAuxStreamSubscribed))return void a._log.info("".concat(d," stream already unsubscribed"));let h=fi({},a.subscribeState);l.forEach(S=>{switch(S.mediaType){case 1:h.audio=!1;break;case 4:h.video=!1;break;case 8:h.smallVideo=!1;break;case 2:h.auxiliary=!1}});let y="subscribe_change";Object.values(h).find(S=>S===!0)||(y="unsubscribe"),a._log.info("".concat(y==="unsubscribe"?y:"subscribe"," ").concat(d," [").concat(kj(h),"]")),yield a.sendSubscription(y,h),y==="unsubscribe"&&(a.closePeerConnection(),a.emitConnectionStateChangedEvent("DISCONNECTED"))}()})}unsubscribeDataChannel(){return WA(this,null,function*(){})}sendSubscription(e){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscribeState,a={srcTinyId:this.tinyId,srcUserId:this.userId},l=Nj,d=ls.UNSUBSCRIBE_RESULT;return e==="subscribe_change"&&(a={audio:o.audio,bigVideo:o.video,auxVideo:o.auxiliary,smallVideo:o.smallVideo,srcTinyId:this.tinyId},l=Gj,d=ls.SUBSCRIBE_CHANGE_RESULT),this._signalChannel.sendWaitForResponse({command:l,data:a,responseCommand:d,timeout:1e4}).then(h=>{let{data:y}=h;if(y.code!==0){let S=new gi({code:y.code,message:Xo({key:vo.ERROR_MESSAGE,data:{type:e,message:y.message}})});throw this._log.error(S),S}})}connect(){return WA(this,arguments,function(){var e=this;let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.subscribeState;return function*(){try{yield e.exchangeSDP(o),yield e.waitForPeerConnectionConnected()}catch(a){throw e.closePeerConnection(!0),a}}()})}exchangeSDP(e){return WA(this,null,function*(){try{this._isSDPExchanging=!0,yield this.createOffer(),this._log.info("createOffer success, sending offer");let{type:o,sdp:a}=this._peerConnection.localDescription,l={type:o,sdp:a,srcUserId:this.userId,srcTinyId:this.tinyId,audio:e.audio,bigVideo:e.video,auxVideo:e.auxiliary,smallVideo:e.smallVideo},d=yield this._signalChannel.sendWaitForResponse({command:Xz,commandDesc:"exchange sdp",data:l,responseCommand:ls.SUBSCRIBE_RESULT,timeout:$x});if(!this._peerConnection){let h=new gi({code:Ct.INVALID_OPERATION,message:Xo({key:vo.CONNECTION_CLOSED})});throw this._log.warn(h),h}yield this.onSubscribeResult(d),this._isSDPExchanging=!1}catch(o){throw this._isSDPExchanging=!1,o}})}createOffer(){return WA(this,null,function*(){let e={voiceActivityDetection:!1};Xd()&&this._sdpSemantics===$S?(this._peerConnection.addTransceiver(YA.AUDIO,{direction:Xn.RECVONLY}),this._peerConnection.addTransceiver(YA.VIDEO,{direction:Xn.RECVONLY}),this._peerConnection.addTransceiver(YA.VIDEO,{direction:Xn.RECVONLY})):(e.offerToReceiveAudio=!0,e.offerToReceiveVideo=!0);let o=yield this._peerConnection.createOffer(e);if(o.sdp){let{isH264DecodeSupported:a}=yield Uk();a||(this._log.warn("remove h264 desc from sdp"),o.sdp=function(l){let d=uc(l);return d.media.forEach(h=>{var y,S;if(h.type===YA.VIDEO){let k=new Set;h.rtp.forEach(J=>{let{payload:cA,codec:CA}=J;return CA==="H264"&&k.add(cA)}),h.fmtp.forEach(J=>{let{payload:cA,config:CA}=J,MA=CA.match(/apt=(\d+)/);MA&&MA[1]&&k.has(Number(MA[1]))&&k.add(cA)});let V=J=>{let{payload:cA}=J;return!k.has(cA)};h.rtp=h.rtp.filter(V),h.rtcpFb=(y=h.rtcpFb)==null?void 0:y.filter(V),h.fmtp=h.fmtp.filter(V),h.payloads=(S=h.payloads)==null?void 0:S.split(" ").filter(J=>!k.has(Number(J))).join(" ")}}),_y(d)}(o.sdp)),o.sdp=this.addRRTRLine(o.sdp),o.sdp=this.addSPSDescription(o.sdp),o.sdp=function(l){let d=uc(l);return d.media.forEach(h=>{h.type===YA.AUDIO&&h.fmtp.forEach(y=>{y.config+=";sprop-stereo=1;stereo=1"})}),_y(d)}(o.sdp),this._sdpSemantics===$S&&(o.sdp=this.removeSDESDescription(o.sdp))}yield this.setOffer(o)})}onSubscribeResult(e){return WA(this,null,function*(){let{code:o,message:a=""}=e&&e.data||{},{type:l,sdp:d}=e&&e.data&&e.data.data||{};if(o===d0)throw new gi({code:Ct.NOT_SUPPORTED_H264,message:Xo({key:vo.NOT_SUPPORTED_H264DECODE})});try{if(o!==0)throw new gi({code:o,message:Xo({key:vo.EXCHANGE_SDP_FAILED,data:{errMsg:a}})});this._log.debug("accept remote answer: ".concat(d)),yield this.setAnswer({type:l,sdp:d}),this.updateSSRC(d)}catch(h){throw this._log.error(h),h}})}updateSSRC(e){try{uc(e).media.forEach(o=>{if(o.ssrcs)if(o.type===YA.AUDIO){let a=o.ssrcs.find(l=>{var d;return(d=l.value)==null?void 0:d.includes(Eu)});a&&(this.ssrc.audio=Number(a.id))}else{let a=o.ssrcs.find(d=>{var h;return(h=d.value)==null?void 0:h.includes(Eu)}),l=o.ssrcs.find(d=>{var h;return(h=d.value)==null?void 0:h.includes(jx)});a&&(this.ssrc.video=Number(a.id)),l&&(this.ssrc.auxiliary=Number(l.id))}})}catch{}}getMainStreamVideoTrackId(){return this.remoteVideoTrack&&this.remoteVideoTrack.mediaTrack?this.remoteVideoTrack.mediaTrack.id:""}getAuxStreamVideoTrackId(){return this.remoteAuxiliaryTrack&&this.remoteAuxiliaryTrack.mediaTrack?this.remoteAuxiliaryTrack.mediaTrack.id:""}reconnect(){return WA(this,null,function*(){if(!(GI(aX.prototype,this,"beforeReconnect").call(this)<0))try{this.closePeerConnection(),this.initialize(),yield this.connect(),this.stopReconnection(),this._log.warn("reconnect() success")}catch{let o=Tp(this._reconnectionCount);this._log.warn("reconnect() timeout, try again after ".concat(o/1e3,"s")),this._reconnectionTimer=setTimeout(()=>{this.clearReconnectionTimer(),this.reconnect()},o)}})}getIsReconnecting(){return this._isReconnecting}clearReconnectionTimer(){this._reconnectionTimer!==-1&&(clearTimeout(this._reconnectionTimer),this._reconnectionTimer=-1)}getCurrentState(){return this._currentState}setDelay(e){let{audioDelay:o,videoDelay:a}=e;this.remoteAudioTrack.stat.end2EndDelay=o,this.remoteVideoTrack.stat.end2EndDelay=a}get audioReceiver(){var e;return((e=this._peerConnection)==null?void 0:e.getReceivers()[0])||null}};hi([jr(A=>function(){for(var e=arguments.length,o=new Array(e),a=0;a{let h=y=>{this._emitter.off("closed",h),d(new gi({code:Ct.API_CALL_ABORTED,message:Xo({key:vo.CONNECTION_ABORTED,data:y})}))};this._emitter.on("closed",h),A.apply(this,o).then(l,d).finally(()=>{this._emitter.off("closed",h)})})})],b1.prototype,"subscribe"),hi([Sy(521717,!1)],b1.prototype,"unsubscribe"),hi([qM(sm.prototype.afterConnect),w5(sm.prototype.beforeConnect)],b1.prototype,"connect");var o8=b1,s8={voiceActivityDetection:!1},k1=class gX extends sm{constructor(e){super(po(fi({},e),{isUplink:!0})),Y(this,"localMainAudioTrack",null),Y(this,"localMainVideoTrack",null),Y(this,"localAuxAudioTrack",null),Y(this,"localAuxVideoTrack",null),Y(this,"ssrc",{audio:0,video:0,small:0,auxiliary:0}),Y(this,"_isPublishingAux",!1),Y(this,"_publishingLocalAudioTrack"),Y(this,"_publishingLocalVideoTrack"),Y(this,"_mediaSettings",{videoCodec:"",videoWidth:0,videoHeight:0,videoBps:0,videoFps:0,audioCodec:"opus",audioFs:0,audioChannel:0,audioBps:0,smallVideoWidth:0,smallVideoHeight:0,smallVideoFps:0,smallVideoBps:0,auxVideoWidth:0,auxVideoHeight:0,auxVideoFps:0,auxVideoBps:0}),Y(this,"flag",0)}get videoCodec(){return this._mediaSettings.videoCodec.toLowerCase()||"h264"}get isMainStreamPublished(){return!(!this.localMainAudioTrack&&!this.localMainVideoTrack)}get isAuxStreamPublished(){return!(!this.localAuxVideoTrack&&!this.localAuxAudioTrack)}initialize(){super.initialize(),this.installEvents()}reset(){this._isReconnecting&&this.stopReconnection(),this.closePeerConnection(),this.uninstallEvents()}close(e){super.close(e),this.reset(),this.emitConnectionStateChangedEvent("DISCONNECTED")}installEvents(){this._emitter.listeners("connection-state-changed").includes(this.handleConnectionStateChange)||this._emitter.on("connection-state-changed",this.handleConnectionStateChange,this)}uninstallEvents(){this._emitter.off("connection-state-changed",this.handleConnectionStateChange,this)}emitConnectionStateChangedEvent(e,o){var a,l,d;let h=this._currentState,y=super.emitConnectionStateChangedEvent(e);return y&&h!==e&&(o?o.emit("connection-state-changed",{prevState:h,state:e}):((a=this.localMainVideoTrack)==null||a.emit("connection-state-changed",{prevState:h,state:e}),(l=this.localAuxVideoTrack)==null||l.emit("connection-state-changed",{prevState:h,state:e}),(d=this._publishingLocalVideoTrack)==null||d.emit("connection-state-changed",{prevState:h,state:e}))),y}publish(e){return WA(this,arguments,function(o){var a=this;let{localAudioTrack:l,localVideoTrack:d,isAuxiliary:h}=o;return function*(){let y;a._peerConnection||a.initialize(),l&&(a._publishingLocalAudioTrack=l),d&&(a._publishingLocalVideoTrack=d),a._isPublishingAux=h,d&&!h&&d.small&&(y=a._room.videoManager.smallTrack),a.sendMediaSettings(),Xd()?yield a.publishByTransceiver({localAudioTrack:l,localVideoTrack:d,smallTrack:y,isAuxiliary:h}):yield a.publishByAddTrack({localAudioTrack:l,localVideoTrack:d,smallTrack:y}),a._publishingLocalAudioTrack=null,a._publishingLocalVideoTrack=null,a._isPublishingAux=!1,h?(d&&(a.localAuxVideoTrack=d),l&&(a.localAuxAudioTrack=l)):(d&&(a.localMainVideoTrack=d),l&&(a.localMainAudioTrack=l)),a.installTrackMuteEvents(l,d),a.sendMutedFlag()}()})}publishByTransceiver(e){return WA(this,arguments,function(o){var a=this;let{localAudioTrack:l,localVideoTrack:d,smallTrack:h,isAuxiliary:y}=o;return function*(){a._log.info("publish by transceiver");let S=new MediaStream,k=d?.outMediaTrack,V=l?.outMediaTrack;V&&S.addTrack(V),k&&S.addTrack(k);let J=a._peerConnection.getTransceivers();if(J.length===0)a._peerConnection.addTransceiver(V||YA.AUDIO,{direction:Xn.SENDONLY,streams:[S]}),a._peerConnection.addTransceiver(y?YA.VIDEO:k||YA.VIDEO,{direction:Xn.SENDONLY,streams:[S]}),a._peerConnection.addTransceiver(h||YA.VIDEO,{direction:Xn.SENDONLY,streams:[S]}),a._peerConnection.addTransceiver(y&&k||YA.VIDEO,{direction:Xn.SENDONLY,streams:[S]}),yield a.connect();else{let cA=[];if(V&&(J[0].sender.track||cA.push(0),yield J[0].sender.replaceTrack(V),yield a.setBandwidth({bandwidth:l?.profile.bitrate||40,type:YA.AUDIO})),k){let CA=y?3:1;yield J[CA].sender.replaceTrack(k),yield a.setBandwidth({bandwidth:d.profile.bitrate,type:YA.VIDEO,videoType:y?YA.AUXILIARY:YA.BIG}),cA.push(CA),h&&(yield J[2].sender.replaceTrack(h),yield a.setBandwidth({bandwidth:d.small.bitrate,type:YA.VIDEO,videoType:YA.SMALL}),cA.push(2))}yield a.setTransceiverDirection(Xn.SENDONLY,cA),yield a.doPublishChange(),d?.emit("connection-state-changed",{prevState:"DISCONNECTED",state:"CONNECTING"}),d?.emit("connection-state-changed",{prevState:"CONNECTING",state:"CONNECTED"})}}()})}publishByAddTrack(e){return WA(this,arguments,function(o){var a=this;let{localAudioTrack:l,localVideoTrack:d,smallTrack:h}=o;return function*(){a._log.info("publish by addtrack");let y=d?.outMediaTrack,S=l?.outMediaTrack;if(a._peerConnection&&a._peerConnection.connectionState!=="new")return l&&S&&(yield a.addTrack(l)),void(y&&(yield a.addTrack(d)));let k=new MediaStream;if(S&&k.addTrack(S),y&&k.addTrack(y),S&&a._peerConnection.addTrack(S,k),y&&(a._peerConnection.addTrack(y,k),h)){let V=new MediaStream;V.addTrack(h),a._peerConnection.addTrack(h,V)}yield a.connect()}()})}enableSmall(e){return WA(this,null,function*(){let o=this._peerConnection.getTransceivers();e?this._room.videoManager.smallTrack&&(yield o[2].sender.replaceTrack(this._room.videoManager.smallTrack),yield this.setTransceiverDirection(Xn.SENDONLY,[2])):(yield o[2].sender.replaceTrack(null),yield this.setTransceiverDirection(Xn.INACTIVE,[2])),this.updateMediaSettings(),yield this.doPublishChange()})}installTrackMuteEvents(){for(var e=arguments.length,o=new Array(e),a=0;a{l&&(l?.on("mute",this.sendMutedFlag,this),l?.on("unmute",this.sendMutedFlag,this))})}uninstallTrackMuteEvents(){for(var e=arguments.length,o=new Array(e),a=0;a{l&&(l?.off("mute",this.sendMutedFlag,this),l?.off("unmute",this.sendMutedFlag,this))})}unpublish(e){return WA(this,arguments,function(o){var a=this;let{localAudioTrack:l,localVideoTrack:d}=o;return function*(){if(!dQ())return l&&l.outMediaTrack&&!d&&a.localMainVideoTrack?(yield a.removeTrack(l),void(a.localMainAudioTrack=null)):d&&d.outMediaTrack&&!l&&a.localMainAudioTrack?(yield a.removeTrack(d),void(a.localMainVideoTrack=null)):(yield a.doUnpublish(),a.uninstallTrackMuteEvents(l,d),void a.emitConnectionStateChangedEvent("DISCONNECTED",d));let h=d&&d===a.localAuxVideoTrack,y=d?.outMediaTrack,S=a._peerConnection.getSenders(),k=[];l&&(h?a.localAuxAudioTrack=null:a.localMainAudioTrack=null,!a.localAuxAudioTrack&&!a.localMainAudioTrack&&(yield S[0].replaceTrack(null),k.push(0))),y&&(h?(yield S[3].replaceTrack(null),a.localAuxVideoTrack=null,a._mediaSettings=po(fi({},a._mediaSettings),{auxVideoBps:0,auxVideoFps:0,auxVideoWidth:0,auxVideoHeight:0}),k.push(3)):(yield S[1].replaceTrack(null),yield S[2].replaceTrack(null),a.localMainVideoTrack=null,a._mediaSettings=po(fi({},a._mediaSettings),{videoWidth:0,videoHeight:0,videoBps:0,videoFps:0,audioFs:0,audioChannel:0,audioBps:0,smallVideoWidth:0,smallVideoHeight:0,smallVideoFps:0,smallVideoBps:0}),k.push(1,2))),a.isMainStreamPublished||a.isAuxStreamPublished?(yield a.setTransceiverDirection(Xn.INACTIVE,k),yield a.doPublishChange(!1)):yield a.doUnpublish(),a.uninstallTrackMuteEvents(l,d),d?.emit("connection-state-changed",{prevState:a._currentState,state:"DISCONNECTED"})}()})}doPublishChange(){let e=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];return WA(this,null,function*(){let o={state:this._room.publishState,constraintConfig:this._mediaSettings},a=yield this._signalChannel.sendWaitForResponse({command:Tj,data:o,responseCommand:ls.PUBLISH_STATE_CHANGE_RESULT,enableLog:e});this.checkPublishResultCode(a.data.code,a.data.message)})}doUnpublish(){let e=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return this._signalChannel.sendWaitForResponse({command:N1,commandDesc:"unpublish",responseCommand:ls.UNPUBLISH_RESULT,enableLog:e}).catch(o=>{if(o.getCode()===Ct.API_CALL_TIMEOUT)return Promise.resolve();throw o})}updateMediaSettings(){let{detail:{isH264EncodeSupported:e,isVp8EncodeSupported:o}}=this._room.checkSystemResult;e?this._mediaSettings.videoCodec="H264":o&&(this._mediaSettings.videoCodec="VP8");let a=this._publishingLocalAudioTrack||this.localMainAudioTrack||this.localAuxAudioTrack,{localMainVideoTrack:l,localAuxVideoTrack:d}=this;if(this._publishingLocalVideoTrack&&(this._isPublishingAux?d=this._publishingLocalVideoTrack:l=this._publishingLocalVideoTrack),Qy){if(a&&a.outMediaTrack){let h=a.outMediaTrack.getSettings();this._mediaSettings.audioChannel=h.channelCount||1,this._mediaSettings.audioBps=1e3*a.profile.bitrate,this._mediaSettings.audioFs=h.sampleRate||0}if(l&&l.outMediaTrack){let h=l.outMediaTrack.getSettings();this._mediaSettings.videoWidth=h.width||0,this._mediaSettings.videoHeight=h.height||0,this._mediaSettings.videoFps=h.frameRate||0,this._mediaSettings.videoBps=1e3*l.profile.bitrate,l.small&&(this._mediaSettings.smallVideoWidth=l.small.width,this._mediaSettings.smallVideoHeight=l.small.height,this._mediaSettings.smallVideoFps=l.small.frameRate,this._mediaSettings.smallVideoBps=1e3*l.small.bitrate)}if(d&&d.outMediaTrack){let h=d.outMediaTrack.getSettings();this._mediaSettings.auxVideoWidth=h.width||0,this._mediaSettings.auxVideoHeight=h.height||0,this._mediaSettings.auxVideoFps=h.frameRate||0,this._mediaSettings.auxVideoBps=1e3*d.profile.bitrate}}else a&&a.outMediaTrack&&(this._mediaSettings.audioChannel=a.profile.channelCount,this._mediaSettings.audioBps=1e3*a.profile.bitrate,this._mediaSettings.audioFs=a.profile.sampleRate),l&&l.outMediaTrack&&(this._mediaSettings.videoWidth=l.profile.width,this._mediaSettings.videoHeight=l.profile.height,this._mediaSettings.videoFps=l.profile.frameRate,this._mediaSettings.videoBps=1e3*l.profile.bitrate);this._log.info("updateMediaSettings: ".concat(JSON.stringify(this._mediaSettings)))}sendMediaSettings(){this.updateMediaSettings(),this._signalChannel.sendWaitForResponse({command:bj,data:this._mediaSettings,responseCommand:ls.UPDATE_CONSTRAINT_CONFIG_RES}).then(e=>{e.data.code!==0&&this._log.warn(e.data.message)}).catch(()=>{})}addTrack(e){return WA(this,null,function*(){if(!this._peerConnection)return;let o=e===this.localAuxAudioTrack||e===this.localAuxVideoTrack;this._log.info("is adding ".concat(e.kind," track to current published local ").concat(o?YA.AUXILIARY:YA.MAIN," stream")),Xd()?yield this.addTrackByTransceiver(e,o):yield this.addTrackBySender(e)})}addTrackByTransceiver(e,o){return WA(this,null,function*(){var a;if(!e.mediaTrack)return;let l=this._peerConnection.getTransceivers();if(e.kind===YA.AUDIO)yield l[0].sender.replaceTrack(e.outMediaTrack);else{let d=o?3:1;yield l[d].sender.replaceTrack(e.outMediaTrack),d===1&&(a=this.localMainVideoTrack)!=null&&a.small&&(yield l[2].sender.replaceTrack(this._room.videoManager.smallTrack)),l[d].direction===Xn.INACTIVE&&(yield this.setTransceiverDirection(Xn.SENDONLY,[d]))}this.updateMediaSettings(),yield this.doPublishChange()})}addTrackBySender(e){return WA(this,null,function*(){if(!e.outMediaTrack)return;let o=e.outMediaTrack;dQ()&&this._peerConnection.getTransceivers().findIndex(l=>l.direction==="stopped")>=0&&(this._log.warn("transceiver is stopping, negotiate sdp first"),yield this.updateOffer("remove",o));let a=this._peerConnection.getSenders().find(l=>l.track&&l.track.kind===o.kind);if(a&&a.track){this._log.warn("sender already exists, remove sender first");let l=a.track;this.removeSender(a),yield this.updateOffer("remove",l)}if(o&&this._peerConnection.addTrack(o,new MediaStream([o])),o.kind===YA.VIDEO&&e instanceof BQ&&e.small){let l=new MediaStream,{smallTrack:d}=this._room.videoManager;l.addTrack(d),this._peerConnection.addTrack(d,l)}yield this.updateOffer("add",o)})}isNeedToResetOfferOrder(){if(this._sdpSemantics===E0||!this._peerConnection||!this._peerConnection.localDescription)return!1;let{sdp:e}=this._peerConnection.localDescription,o=uc(e);for(let a=0;aa.sender&&a.sender.track===e.track)),this._peerConnection.removeTrack(e),o&&Ra(o.stop)&&(this._log.info("stop transceiver"),o.stop())}removeTrack(e){return WA(this,null,function*(){if(!this._peerConnection)return;let o=e===this.localAuxAudioTrack||e===this.localAuxVideoTrack;this._log.info("is removing ".concat(e.kind," track from current published local ").concat(o?YA.AUXILIARY:YA.MAIN," stream")),Xd()?yield this.removeTrackByTransceiver(e,o):yield this.removeTrackBySender(e)})}removeTrackByTransceiver(e,o){return WA(this,null,function*(){if(!e.outMediaTrack)return;let a=this._peerConnection.getTransceivers();if(e.kind===YA.AUDIO)yield a[0].sender.replaceTrack(null);else{let l=o?3:1;yield a[l].sender.replaceTrack(null),l===1&&e.small&&(yield a[2].sender.replaceTrack(null)),yield this.setTransceiverDirection(Xn.INACTIVE,[l])}this.updateMediaSettings(),yield this.doPublishChange()})}setTransceiverDirection(e,o){return WA(this,null,function*(){if(!or)return;let a=!1,l=!1;this._log.info("setting transceiver ".concat(o.join(",")," direction to ").concat(e));let d=this._peerConnection.getTransceivers();if(o.forEach(S=>{d[S].direction!==e&&(d[S].direction=e,a=!0)}),a){this._log.info("updating offer");let S=yield this._peerConnection.createOffer();yield this.setOffer(S)}let h=-1,y=this._peerConnection.remoteDescription.sdp.split(`\r +`).map(S=>{if(S.match(new RegExp("a=(".concat(Xn.INACTIVE,"|").concat(Xn.RECVONLY,"|").concat(Xn.SENDONLY,")")))&&h++,o.includes(h)){if(e===Xn.INACTIVE&&S.includes("a=".concat(Xn.RECVONLY)))return l=!0,"a=".concat(e);if(e===Xn.SENDONLY&&S.includes("a=".concat(Xn.INACTIVE)))return l=!0,"a=".concat(Xn.RECVONLY)}return S}).join(`\r +`);l&&(this._log.info("updating answer"),yield this.setAnswer({type:"answer",sdp:y}))})}removeTrackBySender(e){return WA(this,null,function*(){if(!e.outMediaTrack)return;if(e.kind===YA.VIDEO&&this.isNeedToResetOfferOrder()&&this.localMainAudioTrack)return this.reset(),this.initialize(),void(yield this.publish({localAudioTrack:this.localMainAudioTrack,isAuxiliary:!1}));let o=this._peerConnection.getSenders().find(a=>a.track===e.outMediaTrack);o&&(this.removeSender(o),e.kind===YA.VIDEO&&e.small&&this._peerConnection.getSenders().forEach(a=>{a.track&&a.track.kind===YA.VIDEO&&this.removeSender(a)})),yield this.updateOffer("remove",e.outMediaTrack)})}replaceTrack(e){return WA(this,null,function*(){var o;let a,l=(o=this._peerConnection)==null?void 0:o.getSenders();if(!l||l.length===0||!e.mediaTrack||(a=Xd()?e.kind===YA.AUDIO?l[0]:l[1]:l.find(h=>h.track&&h.track.kind===e.kind),!a))return!1;let d=e===this.localAuxAudioTrack||e===this.localAuxVideoTrack;return this._log.info("is replacing ".concat(e.kind," track on ").concat(d?YA.AUXILIARY:YA.MAIN," stream")),e.kind===YA.AUDIO?yield a.replaceTrack(e.outMediaTrack):e.kind===YA.VIDEO&&(d?l[3]&&(yield l[3].replaceTrack(e.outMediaTrack)):yield a.replaceTrack(e.outMediaTrack)),!0})}updateOffer(e,o){return WA(this,null,function*(){try{let a=yield this._peerConnection.createOffer(s8);or&&a.sdp&&(a.sdp=this.setSDPDirection(a.sdp,"sendrecv")),yield this.setOffer(a);let l=this.updateMediaSettings(),d={action:e,trackId:o.id,kind:o.kind===YA.VIDEO?"bigVideo":o.kind,type:"offer",sdp:this._peerConnection.localDescription.sdp,constraintConfig:l,state:this._room.publishState};this._log.info("createOffer success, sending updated offer to remote server"),this._log.debug("updatedOffer: ".concat(d.sdp));let h=yield this._signalChannel.sendWaitForResponse({command:Wz,data:d,responseCommand:ls.UPDATE_OFFER_RESULT,timeout:Xx,commandDesc:"update offer"}),{code:y,message:S}=h.data;y!==0&&this.checkPublishResultCode(y,S),yield this.acceptAnswer(h.data.data),a.sdp&&this.updateSSRC(a.sdp)}catch(a){throw this._log.error(a),a}})}setBandwidth(e){return WA(this,arguments,function(o){var a=this;let{bandwidth:l,type:d,videoType:h,sdp:y}=o;return function*(){if(!Hk())return y?d===YA.VIDEO?a.updateVideoBandwidthRestriction(y,l,h):a.updateAudioBandwidthRestriction(y,l):void 0;let S,k=a._peerConnection.getSenders();if(Xd()){let V=0;d===YA.VIDEO&&(V=h===YA.SMALL?2:h===YA.AUXILIARY?3:1),S=k[V]}else S=k.find(V=>V.track&&V.track.kind===d);if(S){let V=S.getParameters();(!V.encodings||V.encodings.length===0)&&(V.encodings=[{}]),V.encodings[0].maxBitrate=1e3*l;try{return yield S.setParameters(V),a._log.info("".concat(h||"").concat(d," bandwidth ").concat(l," kbps")),y}catch(J){if(a._log.info("failed to set bandwidth by setting maxBitrate: ".concat(J)),y)return d===YA.VIDEO?a.updateVideoBandwidthRestriction(y,l,h):a.updateAudioBandwidthRestriction(y,l)}}return y}()})}updateVideoBandwidthRestriction(e,o,a){let l="AS";or&&(l="TIAS",o*=1e3);let d=0,h=-1;return a===YA.SMALL?d=1:a===YA.AUXILIARY&&(d=2),e=e.replace(/m=video (.*)\r\nc=IN (.*)\r\n/g,y=>(h+=1,h===d?"".concat(y,"b=").concat(l,":").concat(o,`\r +`):y)),e}updateAudioBandwidthRestriction(e,o){let a="AS";return or&&(a="TIAS",o*=1e3),e=e.replace(/m=audio (.*)\r\nc=IN (.*)\r\n/,`m=audio $1\r c=IN $2\r b=`.concat(a,":").concat(o,`\r -`))}removeBandwidthRestriction(e){return e.replace(/b=AS:.*\r\n/,"").replace(/b=TIAS:.*\r\n/,"")}removeVideoOrientation(e){return e.replace(/urn:3gpp:video-orientation/,"")}connect(){return KA(this,null,function*(){try{yield this.exchangeSDP(),yield this.waitForPeerConnectionConnected()}catch(e){throw this.closePeerConnection(!0),this.uninstallEvents(),e}})}exchangeSDP(){return KA(this,null,function*(){try{yield this.createOffer(),this._log.info("createOffer success, sending offer to remote server"),yield this.doExchangeSDP()}catch(e){throw e}})}createOffer(){return KA(this,null,function*(){try{let e=yield this._peerConnection.createOffer(Lz);yield this.setOffer(e),e.sdp&&this.updateSSRC(e.sdp)}catch(e){throw e}})}doExchangeSDP(){let e={command:Rz,responseCommand:ls.PUBLISH_RESULT,data:{type:this._peerConnection.localDescription.type,sdp:this.removeVideoOrientation(this._peerConnection.localDescription.sdp),screen:this.localMainVideoTrack instanceof qM||this.localAuxVideoTrack instanceof qM,state:this._room.publishState,constraintConfig:this._mediaSettings},enableLog:!1};return this._log.debug("sending sdp offer: ".concat(e.data.sdp)),this._signalChannel.sendWaitForResponse(e).then(o=>{let{code:a,message:c,data:d}=o.data;return a===0?this.acceptAnswer(d):this.checkPublishResultCode(a,c)})}setSDPDirection(e,o){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"all",c=uc(e);return c.media.forEach(d=>{(a==="all"||d.type===a)&&(d.direction=o)}),vy(c)}acceptAnswer(e){return KA(this,null,function*(){var o,a,c,d,C;try{let y;if(this._publishingLocalAudioTrack||this._publishingLocalVideoTrack||this.isMainStreamPublished){let k=((o=this._publishingLocalVideoTrack)==null?void 0:o.profile.bitrate)||((a=this.localMainVideoTrack)==null?void 0:a.profile.bitrate),V=((c=this._publishingLocalAudioTrack)==null?void 0:c.profile.bitrate)||((d=this.localMainAudioTrack)==null?void 0:d.profile.bitrate);if(k){let J=this._isPublishingAux?YA.AUXILIARY:YA.BIG;y=yield this.setBandwidth({bandwidth:k,type:YA.VIDEO,sdp:y,videoType:J})}V&&(y=yield this.setBandwidth({bandwidth:V,type:YA.AUDIO,sdp:y}))}if(y=this.removeVideoOrientation(e.sdp),(C=this._publishingLocalVideoTrack)!=null&&C.small){let{smallStreamConfig:k}=this._room;y=yield this.setBandwidth({bandwidth:this._publishingLocalVideoTrack.small.bitrate||k.bitrate,type:YA.VIDEO,videoType:YA.SMALL,sdp:y})}let S={type:e.type,sdp:y};yield this.setAnswer(S),this._log.debug("accepted answer: ".concat(y))}catch(y){throw this._log.error("failed to accept remote answer ".concat(y)),y}})}sendMutedFlag(e){e===this.localAuxAudioTrack||e===this.localAuxVideoTrack||(this._log.info("send muted state: ".concat(JSON.stringify(this._room.muteState))),this._signalChannel.send(vz,this._room.muteState))}getIsReconnecting(){return this._isReconnecting}reconnect(){return KA(this,null,function*(){if(!(NI(P9.prototype,this,"beforeReconnect").call(this)<0))try{yield this._signalChannel.sendWaitForResponse({command:f1,responseCommand:ls.UNPUBLISH_RESULT,enableLog:!1}),this.closePeerConnection(),this.initialize(),this.isMainStreamPublished&&(yield this.publish({localAudioTrack:this.localMainAudioTrack,localVideoTrack:this.localMainVideoTrack,isAuxiliary:!1})),this.isAuxStreamPublished&&(yield this.publish({localAudioTrack:this.localAuxAudioTrack,localVideoTrack:this.localAuxVideoTrack,isAuxiliary:!0})),this._log.warn("reconnect() uplink reconnect successfully"),this.stopReconnection()}catch{let o=Rp(this._reconnectionCount);this._log.warn("reconnect() timeout, try again after ".concat(o/1e3,"s")),this._reconnectionTimer=setTimeout(()=>{this.clearReconnectionTimer(),this.reconnect()},o)}})}handleConnectionStateChange(e){e.state==="CONNECTED"&&(this.localMainVideoTrack||this._publishingLocalVideoTrack&&!this._isPublishingAux)&&F.emit(nA.SEND_FIRST_VIDEO_FRAME,{room:this._room})}updateSSRC(e){try{uc(e).media.forEach((o,a)=>{if(o.type===YA.AUDIO){let c=o.ssrcs&&o.ssrcs[0];c&&(this.ssrc.audio=Number(c.id))}else{if(this._sdpSemantics===l0&&o.ssrcGroups)return void o.ssrcGroups.forEach((d,C)=>{let y=Number(d.ssrcs.split(" ")[0]);C===0?this.ssrc.video=y:C===1&&(this.ssrc.small=y)});let c=o.ssrcs&&o.ssrcs[0];if(!c)return;switch(a){case 1:this.ssrc.video=Number(c.id);break;case 2:this.ssrc.small=Number(c.id);break;case 3:this.ssrc.auxiliary=Number(c.id)}}})}catch{}}getVideoTrackId(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:YA.VIDEO;if(this._peerConnection){let o=this._peerConnection.getSenders();if(e===YA.AUXILIARY&&o[3]&&o[3].track)return o[3].track.id;if(e===YA.VIDEO&&o[1]&&o[1].track)return o[1].track.id}if(this.localMainVideoTrack&&e===YA.VIDEO){let o=this.localMainVideoTrack.mediaTrack;if(o)return o.id}if(this.localAuxVideoTrack&&e===YA.AUXILIARY){let o=this.localAuxVideoTrack.mediaTrack;if(o)return o.id}return""}getSSRC(){return this.ssrc}checkPublishResultCode(e,o){if(e!==0)throw e===I0?(this._log.error(cc.NOT_SUPPORTED_H264ENCODE),new ai({code:dt.NOT_SUPPORTED_H264,message:Xo({key:Mo.NOT_SUPPORTED_H264ENCODE})})):new ai({code:dt.UNKNOWN,message:Xo({key:Mo.SIGNAL_RESPONSE_FAILED,data:{signalResponse:ls.PUBLISH_RESULT,code:e,message:o}})})}};Ci([jr(A=>function(){for(var e=arguments.length,o=new Array(e),a=0;a{let C=y=>{this._emitter.off("closed",C),d(new ai({code:dt.API_CALL_ABORTED,message:Xo({key:Mo.CONNECTION_ABORTED,data:y})}))};this._emitter.on("closed",C),A.apply(this,o).then(c,d).finally(()=>{this._emitter.off("closed",C)})})})],S1.prototype,"publish"),Ci([fy(521715,!1)],S1.prototype,"unpublish"),Ci([VM(tm.prototype.afterConnect),n5(tm.prototype.beforeConnect)],S1.prototype,"connect");var M1=S1,uoA=class{constructor(A,e){this.room=A,Y(this,"_log"),Y(this,"_prevReportTime",0),Y(this,"_prevReport",{}),Y(this,"_prevStats",null),Y(this,"_prevEncoderImplementation",""),Y(this,"_prevAuxEncoderImpl",""),Y(this,"_prevQualityLimitationReason",""),Y(this,"_prevAuxQualityLimitationReason",""),Y(this,"_prevDecoderImplementationMap",new Map),Y(this,"_decodeMap",new Map),Y(this,"_prevQpSum",0),Y(this,"_prevAuxQpSum",0),Y(this,"totalBytesSent",0),Y(this,"totalBytesReceived",0),Y(this,"_spcStats",null),this._log=e}get statInterval(){return this._prevReportTime===0?2:(Date.now()-this._prevReportTime)/1e3}getSenderStats(A){return KA(this,null,function*(){var e,o,a,c,d,C,y;let S={audio:{bytesSent:0,packetsSent:0,audioLevel:0,totalAudioEnergy:0},video:{bytesSent:0,packetsSent:0,framesEncoded:0,frameWidth:0,frameHeight:0,framesSent:0,fpsCapture:0},small:{bytesSent:0,packetsSent:0,framesEncoded:0,frameWidth:0,frameHeight:0,framesSent:0,fpsCapture:0},auxiliary:{bytesSent:0,packetsSent:0,framesEncoded:0,frameWidth:0,frameHeight:0,framesSent:0,fpsCapture:0},rtt:0},k=A.getPeerConnection(),V=A.getSSRC();if(k)try{if((this._spcStats||(yield k.getStats())).forEach(J=>{var gA,CA,MA,$A,Be,Ye,ve,yi,Ge,Bt,hi,Di,Vo;let Jo,Qn;if(J.type==="outbound-rtp")if((J.mediaType||J.kind)===YA.VIDEO){if(J.ssrc===V.video?(Jo=YA.VIDEO,Qn=A.localMainVideoTrack):J.ssrc===V.small?Jo=YA.SMALL:J.ssrc===V.auxiliary&&(Qn=A.localAuxVideoTrack,Jo=YA.AUXILIARY),!Jo)return;S[Jo].bytesSent=J.bytesSent,S[Jo].packetsSent=J.packetsSent,S[Jo].framesEncoded=J.framesEncoded,Je(J.keyFramesEncoded)||(S[Jo].keyFramesEncoded=J.keyFramesEncoded),Je(J.nackCount)||(S[Jo].nackCount=J.nackCount),Je(J.pliCount)||(S[Jo].pliCount=J.pliCount),Je(J.retransmittedPacketsSent)||(S[Jo].retransmittedPacketsSent=J.retransmittedPacketsSent),Je(J.totalEncodeTime)||(S[Jo].totalEncodeTime=J.totalEncodeTime),Je(J.totalPacketSendDelay)||(S[Jo].totalPacketSendDelay=J.totalPacketSendDelay);let Ho=0;if(!Je(J.qpSum)&&!Je(J.framesEncoded)&&J.framesEncoded>0){let Ns=J.qpSum,pg=J.framesEncoded,ya=Jo===YA.VIDEO?this._prevQpSum:this._prevAuxQpSum,Bu=Jo===YA.VIDEO?((CA=(gA=A.localMainVideoTrack)==null?void 0:gA.stat)==null?void 0:CA.framesEncoded)||0:(($A=(MA=A.localAuxVideoTrack)==null?void 0:MA.stat)==null?void 0:$A.framesEncoded)||0;if(pg>Bu&&Ns>ya){let BL=Ns-ya,m_=pg-Bu;Ho=Math.round(BL/m_),Ho>35&&A.videoCodec==="h264"&&this._log.warn("".concat(Jo===YA.AUXILIARY?"aux ":"","video encoder QP is high: ").concat(Ho,", resolution: ").concat(J.frameWidth,"x").concat(J.frameHeight,", codec: ").concat(A.videoCodec,", "))}Jo===YA.VIDEO?this._prevQpSum=Ns:Jo===YA.AUXILIARY&&(this._prevAuxQpSum=Ns)}if(!Je(J.encoderImplementation)&&(Jo===YA.VIDEO&&this._prevEncoderImplementation!==J.encoderImplementation||Jo===YA.AUXILIARY&&this._prevAuxEncoderImpl!==J.encoderImplementation)){let Ns=2,pg=this._prevEncoderImplementation;Jo===YA.AUXILIARY&&(Ns=7,pg=this._prevAuxEncoderImpl),F.emit("262",{userId:A.userId,streamType:Ns,prevImplementation:pg,implementation:J.encoderImplementation,codec:A.videoCodec,isHWCodec:J.powerEfficientEncoder}),this[Jo===YA.VIDEO?"_prevEncoderImplementation":"_prevAuxEncoderImpl"]=J.encoderImplementation,Qn?.log.info("encoderImplementation change to ".concat(J.encoderImplementation,"(").concat(A.videoCodec,") HWEncoder: ").concat(J.powerEfficientEncoder))}J.ssrc===V.video?!Je(J.qualityLimitationReason)&&J.bytesSent!==0&&this._prevQualityLimitationReason!==J.qualityLimitationReason&&(Qn?.log.info("qualityLimitationReason change to ".concat(J.qualityLimitationReason)),F.emit("263",{userId:A.userId,reason:J.qualityLimitationReason,prevReason:this._prevQualityLimitationReason,streamType:2,isQosClearFirst:(Be=A.localMainVideoTrack)==null?void 0:Be.isQosClearFirst}),this._prevQualityLimitationReason=J.qualityLimitationReason):J.ssrc===V.auxiliary&&!Je(J.qualityLimitationReason)&&J.bytesSent!==0&&this._prevAuxQualityLimitationReason!==J.qualityLimitationReason&&(this._log.info("aux qualityLimitationReason change to ".concat(J.qualityLimitationReason)),F.emit("263",{userId:A.userId,reason:J.qualityLimitationReason,prevReason:this._prevAuxQualityLimitationReason,streamType:7,isQosClearFirst:(Ye=A.localAuxVideoTrack)==null?void 0:Ye.isQosClearFirst}),this._prevAuxQualityLimitationReason=J.qualityLimitationReason)}else S.audio.bytesSent=J.bytesSent,S.audio.packetsSent=J.packetsSent;else if(J.type==="candidate-pair")_M(J)&&(this.totalBytesSent=J.bytesSent,bn(J.currentRoundTripTime)&&(S.rtt=Math.floor(1e3*J.currentRoundTripTime)));else if(J.type==="media-source"){if(J.kind===YA.AUDIO)S.audio.audioLevel=J.audioLevel||0,S.audio.totalAudioEnergy=J.totalAudioEnergy||0,J.echoReturnLoss,Je((Ge=(yi=(ve=A.localMainAudioTrack)==null?void 0:ve.sourceTrack)==null?void 0:yi.stats)==null?void 0:Ge.deliveredFramesDuration)?J.totalSamplesDuration&&(S.audio.totalSamplesDuration=J.totalSamplesDuration):S.audio.totalSamplesDuration=A.localMainAudioTrack.sourceTrack.stats.deliveredFramesDuration/1e3;else if(J.kind===YA.VIDEO)if(J.trackIdentifier===A.getVideoTrackId(YA.VIDEO))if((Di=(hi=(Bt=A.localMainVideoTrack)==null?void 0:Bt.sourceTrack)==null?void 0:hi.stats)!=null&&Di.deliveredFrames){let{deliveredFrames:Ho}=A.localMainVideoTrack.sourceTrack.stats;S.video.framesCaptured=Ho,A.localMainVideoTrack.stat.framesCaptured&&A.localMainVideoTrack.stat.framesCaptured>0&&Ho>=A.localMainVideoTrack.stat.framesCaptured?S.video.fpsCapture=Math.floor((Ho-A.localMainVideoTrack.stat.framesCaptured)/this.statInterval):S.video.fpsCapture=J.framesPerSecond}else S.video.fpsCapture=J.framesPerSecond;else J.trackIdentifier===A.getVideoTrackId(YA.AUXILIARY)?S.auxiliary.fpsCapture=J.framesPerSecond:S.small.fpsCapture=J.framesPerSecond}if(!Je(J.audioLevel)&&(Vo=A.localMainAudioTrack)!=null&&Vo.mediaTrack&&J.trackIdentifier===A.localMainAudioTrack.mediaTrack.id&&(S.audio.audioLevel=J.audioLevel||0),!Je(J.frameWidth)){let Ho=YA.SMALL;J.trackIdentifier===A.getVideoTrackId(YA.VIDEO)||J.ssrc===V.video?Ho=YA.VIDEO:(J.trackIdentifier===A.getVideoTrackId(YA.AUXILIARY)||J.ssrc===V.auxiliary)&&(Ho=YA.AUXILIARY),S[Ho].frameWidth=J.frameWidth,S[Ho].frameHeight=J.frameHeight,S[Ho].framesSent=J.framesSent}}),A.localMainAudioTrack||A.getRoom().capturedLocalMainAudioTrack){let J=A.localMainAudioTrack||A.getRoom().capturedLocalMainAudioTrack;if(J){let gA=J.getInternalAudioLevel(),CA=J.getInternalAudioLevelAfter3A();S.audio.audioCaptureEnergyAfter3a=CA,S.audio.micAudioLevel=gA,S.audio.audioLevel===0&&A.localMainAudioTrack&&(S.audio.audioLevel=CA??gA),!A.localMainAudioTrack&&!Je((o=(e=J.sourceTrack)==null?void 0:e.stats)==null?void 0:o.deliveredFramesDuration)&&(S.audio.totalSamplesDuration=J.sourceTrack.stats.deliveredFramesDuration/1e3)}}if(!A.localMainVideoTrack&&A.getRoom().capturedLocalMainVideoTrack){let J=A.getRoom().capturedLocalMainVideoTrack;if((c=(a=J?.sourceTrack)==null?void 0:a.stats)!=null&&c.deliveredFrames){let{deliveredFrames:gA}=J.sourceTrack.stats;S.video.framesCaptured=gA,J.stat.framesCaptured&&J.stat.framesCaptured>0&&gA>=J.stat.framesCaptured&&(S.video.fpsCapture=Math.floor((gA-J.stat.framesCaptured)/this.statInterval)),J.stat.framesCaptured=gA}}if(!A.localAuxVideoTrack&&A.getRoom().capturedLocalAuxVideoTrack){let J=A.getRoom().capturedLocalAuxVideoTrack;if((C=(d=J?.sourceTrack)==null?void 0:d.stats)!=null&&C.deliveredFrames){let{deliveredFrames:gA}=J.sourceTrack.stats;S.auxiliary.framesCaptured=gA,J.stat.framesCaptured&&J.stat.framesCaptured>0&&gA>=J.stat.framesCaptured&&(S.auxiliary.fpsCapture=Math.floor((gA-J.stat.framesCaptured)/this.statInterval)),J.stat.framesCaptured=gA}}this.totalBytesSent||(this.totalBytesSent+=S.audio.bytesSent+S.video.bytesSent+S.auxiliary.bytesSent),Object.keys(S).forEach(J=>{J===YA.AUDIO?(A.localMainAudioTrack&&(A.localMainAudioTrack.stat=S[J]),A.localAuxAudioTrack&&(A.localAuxAudioTrack.stat=S[J])):J===YA.VIDEO?A.localMainVideoTrack&&(A.localMainVideoTrack.stat=S[J]):J===YA.AUXILIARY&&A.localAuxVideoTrack&&(A.localAuxVideoTrack.stat=S[J])})}catch(J){this._log.warn("failed to getStats on sender connection ".concat(J))}return S.rtt===0&&(S.rtt=((y=this.room.networkQuality)==null?void 0:y.uplinkRTT)||0),S})}getReceiverStats(A){return KA(this,null,function*(){var e,o,a;let c={tinyId:A.tinyId,userId:A.userId,rtt:0,hasAudio:!1,hasVideo:!1,hasAuxiliary:!1,isSmallSubscribed:!1,avSyncDelay:0,audio:{bytesReceived:0,packetsReceived:0,packetsLost:0,p2pDelay:0,totalJitter:0,totalJitterCount:0,audioLevel:0,totalAudioEnergy:0,insertedSamplesForDeceleration:0,removedSamplesForAcceleration:0},video:{bytesReceived:0,packetsReceived:0,packetsLost:0,framesReceived:0,framesDecoded:0,frameWidth:0,frameHeight:0,fpsDecoded:0,freezeCount:0,totalFreezesDuration:0,totalJitter:0,totalJitterCount:0,p2pDelay:0,codec:""},auxiliary:{bytesReceived:0,packetsReceived:0,packetsLost:0,framesReceived:0,framesDecoded:0,frameWidth:0,frameHeight:0,fpsDecoded:0,totalJitter:0,totalJitterCount:0,p2pDelay:0,codec:""}},d=A.getPeerConnection();if(d)try{let{ssrc:C}=A,{muteState:y,subscribeState:S}=A;(this._spcStats||(yield d.getStats())).forEach(J=>{var gA,CA;if(J.type==="codec"&&this._decodeMap.set(J.id,J),J.type==="inbound-rtp"){let MA=(J.mediaType||J.kind)===YA.AUDIO;if(MA){if(J.ssrc!==C.audio||!y.hasAudio)return;c.audio.packetsReceived=J.packetsReceived,c.audio.bytesReceived=J.bytesReceived,c.audio.packetsLost=J.packetsLost,J.insertedSamplesForDeceleration&&(c.audio.insertedSamplesForDeceleration=J.insertedSamplesForDeceleration),J.removedSamplesForAcceleration&&(c.audio.removedSamplesForAcceleration=J.removedSamplesForAcceleration),J.totalSamplesDuration&&(c.audio.totalSamplesDuration=J.totalSamplesDuration),J.totalSamplesReceived&&(c.audio.totalSamplesReceived=J.totalSamplesReceived),J.concealedSamples&&(c.audio.concealedSamples=J.concealedSamples),J.silentConcealedSamples&&(c.audio.silentConcealedSamples=J.silentConcealedSamples);let{remoteAudioTrack:$A}=A;$A.stat.packetsReceived=J.packetsReceived,$A.stat.bytesReceived=J.bytesReceived,$A.stat.packetsLost=J.packetsLost,c.audio.p2pDelay=$A.stat.end2EndDelay,c.hasAudio=!0}else{if(er&&J.bytesReceived===0)return;let $A;J.ssrc===C.video&&y.hasVideo&&(c.video.packetsReceived=J.packetsReceived,c.video.bytesReceived=J.bytesReceived,c.video.packetsLost=J.packetsLost,c.video.framesReceived=J.framesReceived,c.video.framesDecoded=J.framesDecoded,c.video.fpsDecoded=J.framesPerSecond,c.hasVideo=!0,A.videoCodec=Cl[(gA=this._decodeMap.get(J.codecId))==null?void 0:gA.mimeType.split("/")[1]]||"h264",c.video.codec=A.videoCodec,$A=A.remoteVideoTrack,y.hasSmall&&S.smallVideo&&(c.isSmallSubscribed=!0),J.decoderImplementation&&(!this._prevDecoderImplementationMap.has(c.userId)||this._prevDecoderImplementationMap.get(c.userId)!==J.decoderImplementation)&&($A.log.info("decoderImplementation change to ".concat(J.decoderImplementation,"(").concat(A.videoCodec,") HWDecoder: ").concat(J.powerEfficientDecoder)),F.emit("262",{userId:this.room.userId,remoteUserId:c.userId,prevImplementation:this._prevDecoderImplementationMap.get(c.userId),implementation:J.decoderImplementation,codec:A.videoCodec,isHWCodec:J.powerEfficientDecoder}),this._prevDecoderImplementationMap.set(c.userId,J.decoderImplementation)),Je(J.keyFramesDecoded)||$A.updateKeyFramesDecoded(J.keyFramesDecoded)),J.ssrc===C.auxiliary&&y.hasAuxiliary&&(c.auxiliary.packetsReceived=J.packetsReceived,c.auxiliary.bytesReceived=J.bytesReceived,c.auxiliary.packetsLost=J.packetsLost,c.auxiliary.framesReceived=J.framesReceived,c.auxiliary.framesDecoded=J.framesDecoded,c.auxiliary.fpsDecoded=J.framesPerSecond,$A=A.remoteAuxiliaryTrack,c.auxiliary.p2pDelay=$A.stat.end2EndDelay,c.hasAuxiliary=!0,c.video.codec=((CA=this._decodeMap.get(J.codecId))==null?void 0:CA.mimeType.split("/")[1].toLowerCase())||"h264",Je(J.keyFramesDecoded)||$A.updateKeyFramesDecoded(J.keyFramesDecoded)),$A&&($A.stat.packetsReceived=J.packetsReceived,$A.stat.bytesReceived=J.bytesReceived,$A.stat.packetsLost=J.packetsLost,$A.stat.framesReceived=J.framesReceived,$A.stat.framesDecoded=J.framesDecoded,J.jitterBufferDelay&&($A.stat.jitterBufferDelay=Math.floor(J.jitterBufferDelay/J.jitterBufferEmittedCount*1e3)),c.video.p2pDelay=$A.stat.end2EndDelay)}J.jitterBufferDelay&&(MA?(c.audio.totalJitter=J.jitterBufferDelay,c.audio.totalJitterCount=J.jitterBufferEmittedCount,c.audio.estimatedPlayoutTimestamp=J.estimatedPlayoutTimestamp):J.ssrc===C.video&&y.hasVideo?(c.video.totalJitter=J.jitterBufferDelay,c.video.totalJitterCount=J.jitterBufferEmittedCount,c.video.estimatedPlayoutTimestamp=J.estimatedPlayoutTimestamp):J.ssrc===C.auxiliary&&y.hasAuxiliary&&(c.auxiliary.totalJitter=J.jitterBufferDelay,c.auxiliary.totalJitterCount=J.jitterBufferEmittedCount))}else J.type==="candidate-pair"&&_M(J)&&(this.totalBytesReceived=J.bytesReceived,bn(J.currentRoundTripTime)&&(c.rtt=Math.floor(1e3*J.currentRoundTripTime)));Je(J.frameWidth)||((J.trackIdentifier===A.getMainStreamVideoTrackId()||J.ssrc===C.video)&&(c.video.frameWidth=J.frameWidth,c.video.frameHeight=J.frameHeight,A.remoteVideoTrack.stat.frameWidth=J.frameWidth,A.remoteVideoTrack.stat.frameHeight=J.frameHeight),(J.trackIdentifier===A.getAuxStreamVideoTrackId()||J.ssrc===C.auxiliary)&&(c.auxiliary.frameWidth=J.frameWidth,c.auxiliary.frameHeight=J.frameHeight,A.remoteAuxiliaryTrack.stat.frameWidth=J.frameWidth,A.remoteAuxiliaryTrack.stat.frameHeight=J.frameHeight)),!Je(J.audioLevel)&&A.muteState.audioAvailable&&A.remoteAudioTrack.mediaTrack&&J.trackIdentifier===A.remoteAudioTrack.mediaTrack.id&&(c.audio.audioLevel=J.audioLevel||0,c.audio.totalAudioEnergy=J.totalAudioEnergy||0)}),c.audio.audioLevel===0&&A.muteState.audioAvailable&&(c.audio.audioLevel=A.remoteAudioTrack.getInternalAudioLevel()||0),this.totalBytesReceived||(this.totalBytesReceived+=c.audio.bytesReceived+c.video.bytesReceived+c.auxiliary.bytesReceived),Je((e=A.remoteVideoTrack.player.stat)==null?void 0:e.fps)||(c.video.fpsRender=A.remoteVideoTrack.player.stat.fps),Je((o=A.remoteAuxiliaryTrack.player.stat)==null?void 0:o.fps)||(c.auxiliary.fpsRender=A.remoteAuxiliaryTrack.player.stat.fps);let k=c.audio.estimatedPlayoutTimestamp,V=c.video.estimatedPlayoutTimestamp;if(k&&V&&A.remoteAudioTrack.isAvailable&&A.remoteVideoTrack.isAvailable){let J=V-k;Math.abs(J)<=1e4&&(c.avSyncDelay=J,Math.abs(J)>150&&this._log.warn("av sync delay",J))}}catch(C){this._log.warn("failed to getStats on receiver connection ".concat(C))}return c.rtt===0&&(c.rtt=((a=this.room.networkQuality)==null?void 0:a.uplinkRTT)||0),c})}getStats(A,e){return KA(this,null,function*(){let o,a={},c=[];if(this.room.singlePC){let d=this.room.singlePC.getPeerConnection();if(!d)return{senderStats:a,receiverStats:c};let C=ko(),y=yield d.getStats(),S=ko();S-C>2e3&&this._log.warn("getStats cost ".concat(S-C,"ms"));let k=[],V=new Set(["inbound-rtp","outbound-rtp","track","candidate-pair","media-source","codec","media-playout"]);y.forEach(J=>V.has(J.type)&&k.push(J)),this._spcStats=k}A&&(a=yield this.getSenderStats(A));for(let[d,C]of e){let y=yield this.getReceiverStats(C);y&&c.push(y)}return e.size&&(o=this.getMediaPlayoutStats(this._spcStats)),{senderStats:a,receiverStats:c,mediaPlayoutStats:o}})}getDifferenceValue(A,e){if(Am(A))return e;let o=e-A;return o<0?0:o}prepareReport(A){let{stats:e,report:o,freezeMap:a,uplinkConnection:c}=A;var d,C,y,S,k,V,J,gA,CA;if(!Am(e.senderStats)){let Ge={uint32_audio_level:e.senderStats.audio.audioLevel*od,uint32_audio_energy:1e6*(e.senderStats.audio.totalAudioEnergy||0),uint32_audio_codec_bitrate:e.senderStats.audio.bytesSent};e.senderStats.audio.micAudioLevel&&(Ge.uint32_mic_audio_level=e.senderStats.audio.micAudioLevel*od),Je(e.senderStats.audio.audioCaptureEnergyAfter3a)||(Ge.uint32_audio_capture_energy_after3a=e.senderStats.audio.audioCaptureEnergyAfter3a*od),e.senderStats.audio.totalSamplesDuration&&(o.msg_device_info.uint32_audio_capture_cost=e.senderStats.audio.totalSamplesDuration);let Bt=[];if(e.senderStats.video.bytesSent){let Di={uint32_video_stream_type:2,uint32_video_codec_fps:e.senderStats.video.framesSent,uint32_video_capture_fps:e.senderStats.video.fpsCapture,uint32_video_width:e.senderStats.video.frameWidth,uint32_video_height:e.senderStats.video.frameHeight,uint32_video_codec_bitrate:e.senderStats.video.bytesSent,uint32_video_enc_fps:e.senderStats.video.framesEncoded,uint32_key_frame_count:e.senderStats.video.keyFramesEncoded,uint32_nack_count:e.senderStats.video.nackCount,uint32_pli_count:e.senderStats.video.pliCount,uint32_encode_cost:1e3*(e.senderStats.video.totalEncodeTime||0),uint32_send_packet_cost:1e3*(e.senderStats.video.totalPacketSendDelay||0),uint32_video_arq_packets:e.senderStats.video.retransmittedPacketsSent};Bt.push(Di)}if(e.senderStats.small.bytesSent){let Di={uint32_video_stream_type:3,uint32_video_codec_fps:e.senderStats.small.framesSent||0,uint32_video_capture_fps:e.senderStats.small.fpsCapture||0,uint32_video_width:e.senderStats.small.frameWidth||0,uint32_video_height:e.senderStats.small.frameHeight||0,uint32_video_codec_bitrate:e.senderStats.small.bytesSent,uint32_video_enc_fps:e.senderStats.small.framesEncoded||0,uint32_key_frame_count:e.senderStats.small.keyFramesEncoded,uint32_nack_count:e.senderStats.small.nackCount,uint32_pli_count:e.senderStats.small.pliCount,uint32_encode_cost:1e3*(e.senderStats.small.totalEncodeTime||0),uint32_send_packet_cost:1e3*(e.senderStats.small.totalPacketSendDelay||0),uint32_video_arq_packets:e.senderStats.small.retransmittedPacketsSent};Bt.push(Di)}if(e.senderStats.auxiliary.bytesSent){let Di={uint32_video_stream_type:7,uint32_video_codec_fps:e.senderStats.auxiliary.framesSent||0,uint32_video_capture_fps:e.senderStats.auxiliary.fpsCapture||0,uint32_video_width:e.senderStats.auxiliary.frameWidth||0,uint32_video_height:e.senderStats.auxiliary.frameHeight||0,uint32_video_codec_bitrate:e.senderStats.auxiliary.bytesSent,uint32_video_enc_fps:e.senderStats.auxiliary.framesEncoded||0,uint32_key_frame_count:e.senderStats.auxiliary.keyFramesEncoded,uint32_nack_count:e.senderStats.auxiliary.nackCount,uint32_pli_count:e.senderStats.auxiliary.pliCount,uint32_encode_cost:1e3*(e.senderStats.auxiliary.totalEncodeTime||0),uint32_send_packet_cost:1e3*(e.senderStats.auxiliary.totalPacketSendDelay||0),uint32_video_arq_packets:e.senderStats.auxiliary.retransmittedPacketsSent};Bt.push(Di)}let hi={uint32_bitrate:0,uint32_lost:0,uint32_rtt:e.senderStats.rtt};o.msg_up_stream_info={msg_audio_status:Ge,msg_video_status:Bt,msg_network_status:hi}}let{statInterval:MA}=this;o.msg_down_stream_info=[],e.receiverStats.forEach(Ge=>{let Bt={msg_user_info:{str_identifier:Ge.userId,uint64_tinyid:Ge.tinyId},msg_network_status:{uint32_rtt:Ge.rtt,uint32_bitrate:0,uint32_lost:0},msg_audio_status:{},msg_video_status:[]};if(Ge.hasAudio){let hi={uint32_audio_p2p_delay:Ge.audio.p2pDelay,uint32_audio_cache_ms:Ge.audio.totalJitter,uint32_audio_cache_ms_count:Ge.audio.totalJitterCount,uint32_audio_codec_bitrate:Ge.audio.bytesReceived,uint32_audio_total_bitrate:Ge.audio.bytesReceived,uint32_audio_level:1e8*Ge.audio.audioLevel,uint32_audio_energy:1e6*Ge.audio.totalAudioEnergy,uint32_audio_receive:Ge.audio.packetsReceived,uint32_audio_origin_lost:Ge.audio.packetsLost};Bt.msg_audio_status=hi}if(Ge.hasVideo){let hi=a.get("".concat(Ge.userId,"_").concat(a0)),Di=hi?hi.duration:0,Vo={uint32_video_stream_type:Ge.isSmallSubscribed?3:2,uint32_video_receive_fps:Ge.video.framesReceived,uint32_video_width:Ge.video.frameWidth,uint32_video_height:Ge.video.frameHeight,uint32_video_codec_bitrate:Ge.video.bytesReceived,uint32_video_receive:Ge.video.packetsReceived,uint32_video_origin_lost:Ge.video.packetsLost,uint32_video_block_time:Di,uint32_video_dec_fps:Ge.video.framesDecoded,uint32_video_codec_fps:Ge.video.fpsRender,uint32_video_cache_ms:Ge.video.totalJitter,uint32_video_cache_ms_count:Ge.video.totalJitterCount,uint32_video_p2p_delay:Ge.video.p2pDelay,uint32_video_codec:Ge.video.codec,int32_video_audio_relative_delay:Ge.avSyncDelay+5e3};Bt.msg_video_status.push(Vo)}if(Ge.hasAuxiliary){let hi=a.get("".concat(Ge.userId,"_").concat(Rb)),Di=hi?hi.duration:0,Vo={uint32_video_stream_type:7,uint32_video_receive_fps:Ge.auxiliary.framesReceived,uint32_video_width:Ge.auxiliary.frameWidth,uint32_video_height:Ge.auxiliary.frameHeight,uint32_video_codec_bitrate:Ge.auxiliary.bytesReceived,uint32_video_receive:Ge.auxiliary.packetsReceived+Ge.auxiliary.packetsLost,uint32_video_origin_lost:Ge.auxiliary.packetsLost,uint32_video_block_time:Di,uint32_video_dec_fps:Ge.auxiliary.framesDecoded,uint32_video_codec_fps:Ge.video.fpsRender,uint32_video_cache_ms:Ge.auxiliary.totalJitter,uint32_video_cache_ms_count:Ge.auxiliary.totalJitterCount,uint32_video_p2p_delay:Ge.auxiliary.p2pDelay,uint32_video_codec:Ge.video.codec};Bt.msg_video_status.push(Vo)}o.msg_down_stream_info.push(Bt)}),e.mediaPlayoutStats&&!Am(e.mediaPlayoutStats)&&(e.mediaPlayoutStats.synthesizedSamplesDuration*=1e3,e.mediaPlayoutStats.totalSamplesDuration*=1e3);let $A=this._prevReport,Be=this._prevStats;if(this._prevReport=JSON.parse(JSON.stringify(o)),this._prevStats=JSON.parse(JSON.stringify(e)),o.msg_up_stream_info.msg_audio_status&&$A.msg_up_stream_info.msg_audio_status){let Ge=$A.msg_up_stream_info.msg_audio_status,Bt=o.msg_up_stream_info.msg_audio_status;if(Ge.uint32_audio_codec_bitrate===0)Bt.uint32_audio_codec_bitrate=0;else{let hi=this.getDifferenceValue(Ge.uint32_audio_codec_bitrate,Bt.uint32_audio_codec_bitrate);Bt.uint32_audio_codec_bitrate=Math.round(8*hi/MA),o.msg_up_stream_info.msg_network_status.uint32_bitrate+=Bt.uint32_audio_codec_bitrate}(d=$A.msg_device_info)!=null&&d.uint32_audio_capture_cost?(o.msg_device_info.uint32_audio_capture_cost=2*Math.floor(1e3*this.getDifferenceValue($A.msg_device_info.uint32_audio_capture_cost,o.msg_device_info.uint32_audio_capture_cost)/MA),o.msg_device_info.uint32_audio_capture_cost>0&&((y=c?.localMainAudioTrack)==null||y.updateAfter3aSilenceStartTime((C=e.senderStats.audio.audioCaptureEnergyAfter3a)!=null?C:e.senderStats.audio.micAudioLevel))):delete o.msg_device_info.uint32_audio_capture_cost}let Ye=$A.msg_up_stream_info.msg_video_status;o.msg_up_stream_info.msg_video_status.forEach(Ge=>{let Bt=Ye.find(Qn=>Qn.uint32_video_stream_type===Ge.uint32_video_stream_type);if(!Bt||Bt.uint32_video_codec_bitrate===0)return Ge.uint32_video_codec_bitrate=0,Ge.uint32_video_enc_fps=0,void(Ge.uint32_video_codec_fps=0);let hi=0,Di=0,Vo=0;Bt&&Ge.uint32_video_codec_bitrate>=Bt.uint32_video_codec_bitrate&&(hi=Bt.uint32_video_codec_bitrate,Di=Bt.uint32_video_enc_fps,Vo=Bt.uint32_video_codec_fps);let Jo=this.getDifferenceValue(hi,Ge.uint32_video_codec_bitrate);Ge.uint32_video_codec_bitrate=Math.round(8*Jo/MA),o.msg_up_stream_info.msg_network_status.uint32_bitrate+=Ge.uint32_video_codec_bitrate,Ge.uint32_video_enc_fps=Math.round(this.getDifferenceValue(Di,Ge.uint32_video_enc_fps)/MA),Ge.uint32_video_codec_fps=Math.round(this.getDifferenceValue(Vo,Ge.uint32_video_codec_fps)/MA),Bt.uint32_video_width===0&&Bt.uint32_video_height===0&&Bt.uint32_video_codec_fps===0&&(Ge.uint32_video_codec_fps=Ge.uint32_video_enc_fps),Je(Bt.uint32_key_frame_count)||(Ge.uint32_key_frame_count=Math.round(this.getDifferenceValue(Bt.uint32_key_frame_count,Ge.uint32_key_frame_count))),Je(Bt.uint32_nack_count)||(Ge.uint32_nack_count=Math.round(this.getDifferenceValue(Bt.uint32_nack_count,Ge.uint32_nack_count))),Je(Bt.uint32_pli_count)||(Ge.uint32_pli_count=Math.round(this.getDifferenceValue(Bt.uint32_pli_count,Ge.uint32_pli_count))),Je(Bt.uint32_video_arq_packets)||(Ge.uint32_video_arq_packets=Math.round(this.getDifferenceValue(Bt.uint32_video_arq_packets,Ge.uint32_video_arq_packets))),Je(Bt.uint32_encode_cost)||(Ge.uint32_encode_cost=Math.round(this.getDifferenceValue(Bt.uint32_encode_cost,Ge.uint32_encode_cost)/MA)),Je(Bt.uint32_send_packet_cost)||(Ge.uint32_send_packet_cost=Math.round(this.getDifferenceValue(Bt.uint32_send_packet_cost,Ge.uint32_send_packet_cost)/MA))});let ve=$A.msg_down_stream_info;o.msg_down_stream_info=o.msg_down_stream_info.filter(Ge=>ve.find(Bt=>Bt.msg_user_info.uint64_tinyid===Ge.msg_user_info.uint64_tinyid));let yi=o.msg_down_stream_info;if(yi.forEach(Ge=>{let Bt=ve.find(hi=>hi.msg_user_info.uint64_tinyid===Ge.msg_user_info.uint64_tinyid);if(Am(Ge.msg_audio_status)||Am(Bt.msg_audio_status))Ge.msg_audio_status={};else{let hi=Ge.msg_audio_status,Di=Bt.msg_audio_status,Vo=this.getDifferenceValue(Di.uint32_audio_cache_ms_count,hi.uint32_audio_cache_ms_count);delete hi.uint32_audio_cache_ms_count,hi.uint32_audio_cache_ms=Math.floor(1e3*this.getDifferenceValue(Di.uint32_audio_cache_ms,hi.uint32_audio_cache_ms)/Vo)||0;let Jo=this.room.remotePublishedUserMap.get(Ge.msg_user_info.str_identifier);Jo&&(Jo.remoteAudioTrack.stat.jitterBufferDelay=hi.uint32_audio_cache_ms),hi.uint32_audio_origin_lost=this.getDifferenceValue(Di.uint32_audio_origin_lost,hi.uint32_audio_origin_lost),hi.uint32_audio_receive=this.getDifferenceValue(Di.uint32_audio_receive,hi.uint32_audio_receive),hi.uint32_audio_receive+=hi.uint32_audio_origin_lost;let Qn=this.getDifferenceValue(Di.uint32_audio_codec_bitrate,hi.uint32_audio_codec_bitrate);hi.uint32_audio_codec_bitrate=Math.round(8*Qn/MA),hi.uint32_audio_total_bitrate=Math.round(8*Qn/MA)}if(Ge.msg_video_status&&Bt.msg_video_status){let hi=Bt.msg_video_status;Ge.msg_video_status=Ge.msg_video_status.filter(Di=>hi.find(Vo=>Vo.uint32_video_stream_type===Di.uint32_video_stream_type)),Ge.msg_video_status.forEach(Di=>{let Vo=hi.find(m_=>m_.uint32_video_stream_type===Di.uint32_video_stream_type),Jo=Vo.uint32_video_receive,Qn=Vo.uint32_video_origin_lost,Ho=Vo.uint32_video_codec_bitrate,Ns=Vo.uint32_video_receive_fps,pg=Vo.uint32_video_dec_fps;Di.uint32_video_origin_lost=this.getDifferenceValue(Qn,Di.uint32_video_origin_lost),Di.uint32_video_receive=this.getDifferenceValue(Jo,Di.uint32_video_receive)+Di.uint32_video_origin_lost;let ya=this.getDifferenceValue(Ho,Di.uint32_video_codec_bitrate);Di.uint32_video_codec_bitrate=Math.round(8*ya/MA);let Bu=this.getDifferenceValue(Ns,Di.uint32_video_receive_fps);Di.uint32_video_receive_fps=Math.round(Bu/MA),Di.uint32_video_dec_fps=Math.round(this.getDifferenceValue(pg,Di.uint32_video_dec_fps)/MA);let BL=this.getDifferenceValue(Vo.uint32_video_cache_ms_count,Di.uint32_video_cache_ms_count);delete Di.uint32_video_cache_ms_count,Di.uint32_video_cache_ms=Math.floor(1e3*this.getDifferenceValue(Vo.uint32_video_cache_ms,Di.uint32_video_cache_ms)/BL)||0})}}),!Je((S=Be?.mediaPlayoutStats)==null?void 0:S.totalSamplesDuration)&&!Je((k=e.mediaPlayoutStats)==null?void 0:k.totalSamplesDuration)){let Ge=2*Math.floor(this.getDifferenceValue((V=Be?.mediaPlayoutStats)==null?void 0:V.synthesizedSamplesDuration,(J=e.mediaPlayoutStats)==null?void 0:J.synthesizedSamplesDuration)/MA),Bt=2*Math.floor(this.getDifferenceValue((gA=Be?.mediaPlayoutStats)==null?void 0:gA.totalSamplesDuration,(CA=e.mediaPlayoutStats)==null?void 0:CA.totalSamplesDuration)/MA);o.msg_device_info.uint32_audio_play_cost=Bt-Ge}return Be&&e.receiverStats.forEach(Ge=>{if(Ge.audio.concealedSamples&&Ge.audio.totalSamplesReceived){let Bt=Be.receiverStats.find(hi=>hi.userId===Ge.userId);if(Bt&&Bt.audio.concealedSamples&&Bt.audio.totalSamplesReceived){let hi=(Ge.audio.silentConcealedSamples||0)-(Bt.audio.silentConcealedSamples||0),Di=Ge.audio.concealedSamples-Bt.audio.concealedSamples,Vo=Ge.audio.totalSamplesReceived-Bt.audio.totalSamplesReceived,Jo=Math.floor((Di-hi)/Vo*1e3*MA);if(Jo>1e3*MA/5){let Qn=yi.find(Ho=>Ho.msg_user_info.str_identifier===Ge.userId);Qn&&(Qn.msg_audio_status.uint32_audio_block_time=Jo)}}}}),o.msg_down_stream_info.forEach(Ge=>{Ge.msg_video_status.forEach(Bt=>{Bt.uint32_video_codec_bitrate===0&&Bt.uint32_video_receive_fps===0&&(Bt.uint32_video_width=0,Bt.uint32_video_height=0)})}),o}getStatsReport(A){return KA(this,arguments,function(e){var o=this;let{uplinkConnection:a,downlinkConnections:c,freezeMap:d}=e;return function*(){let C={msg_device_info:{},msg_up_stream_info:{msg_audio_status:{uint32_audio_format:11,uint32_audio_sample_rate:0,uint32_audio_codec_bitrate:0,uint32_audio_receive:0,uint32_audio_origin_lost:0,uint32_audio_level:0,uint32_audio_energy:0,uint32_audio_capture_energy_after3a:0},msg_video_status:[],msg_network_status:{uint32_bitrate:0,uint32_rtt:0,uint32_lost:0}},msg_down_stream_info:[{msg_user_info:{str_identifier:"",uint64_tinyid:0},msg_audio_status:{uint32_audio_cache_ms:0,uint32_audio_format:11,uint32_audio_sample_rate:0,uint32_audio_codec_bitrate:0,uint32_audio_total_bitrate:0,uint32_audio_level:0,uint32_audio_energy:0,uint32_audio_receive:0,uint32_audio_origin_lost:0,uint32_audio_final_lost:0},msg_video_status:[{uint32_video_cache_ms:0,uint32_video_stream_type:0,uint32_video_receive_fps:0,uint32_video_width:0,uint32_video_height:0,uint32_video_codec_bitrate:0,uint32_video_receive:0,uint32_video_origin_lost:0,uint32_video_block_time:0,uint32_video_dec_fps:0,uint32_video_codec_fps:0}],msg_network_status:{uint32_bitrate:0,uint32_rtt:0,uint32_lost:0}}]},y=yield o.getStats(a,c);return JSON.stringify(o._prevReport)==="{}"&&(o._prevReport=JSON.parse(JSON.stringify(C))),o.prepareReport({stats:y,report:C,freezeMap:d,uplinkConnection:a}),o._prevReportTime=Date.now(),C}()})}getMediaPlayoutStats(A){let e;if(wa(A)){for(let o of A)if(o.type==="media-playout"){let{synthesizedSamplesDuration:a,totalSamplesDuration:c}=o;e={synthesizedSamplesDuration:a,totalSamplesDuration:c};break}return e}}reset(){this._prevReportTime=0,this._prevReport={},this._prevEncoderImplementation="",this._prevQualityLimitationReason="",this._prevDecoderImplementationMap=new Map,[this.room.localMainVideoTrack,this.room.capturedLocalMainVideoTrack,this.room.localAuxVideoTrack,this.room.capturedLocalAuxVideoTrack].forEach(A=>{A!=null&&A.stat&&(A.stat.framesCaptured=0)})}},EoA=gc(Kl());function doA(A){return new Promise(e=>KA(null,null,function*(){let o=setTimeout(()=>{e({totalCost:1e4,local:0,dns:0,tcp:0,tls:0,request:0,response:0})},1e4),a=Date.now(),c="https://".concat(A,"/?t=").concat(a);try{yield fetch(c)}catch{}clearTimeout(o);let d=function(C){let y={totalCost:0,local:0,redirect:0,httpCache:0,dns:0,tcp:0,tls:0,request:0,response:0};try{let S=performance.getEntriesByType("resource").reverse();for(let k of S)if(k.name===C){let V=Math.round(k.duration),J=Math.max(Math.round(k.domainLookupStart-k.startTime),0),gA=k.redirectStart>0?Math.max(Math.round(k.redirectEnd-k.redirectStart),0):0,CA=k.fetchStart>0?Math.max(Math.round(k.domainLookupStart-k.fetchStart),0):0,MA=Math.round(k.domainLookupEnd-k.domainLookupStart),$A=Math.round(k.requestStart-k.secureConnectionStart),Be=Math.round(k.secureConnectionStart-k.connectStart),Ye=Math.round(k.responseStart-k.requestStart),ve=Math.round(k.responseEnd-(k.responseStart||k.startTime));y=Qo(mi({},y),{totalCost:V,local:J,redirect:gA,httpCache:CA,dns:MA,tcp:Be,tls:$A,request:Ye,response:ve});break}}catch{}return y}(c);d.totalCost===0&&(d.totalCost=Date.now()-a),e(d)}))}var v1=class T_ extends EoA.default{constructor(e){let{signalChannel:o,room:a}=e;super(),Y(this,"_room"),Y(this,"_signalChannel"),Y(this,"_log"),Y(this,"uplinkRTT",0),Y(this,"uplinkLoss",0),Y(this,"downlinkRTT",0),Y(this,"downlinkLoss",0),Y(this,"pingResults",{}),Y(this,"_downlinkPrevStatMap",new Map),Y(this,"_downlinkLossAndRTTMap",new Map),Y(this,"_interval",-1),Y(this,"_uplinkNetworkQuality",0),Y(this,"_downlinkNetworkQuality",0),Y(this,"_uplinkQualityHistory",[]),Y(this,"_downlinkQualityHistory",[]),this._room=a,this._signalChannel=o,this._log=QA.createLogger({parent:a.getLogger(),id:"q",userId:this._room.userId,sdkAppId:this._room.sdkAppId}),this.initialize()}get uplinkNetworkQuality(){return this._uplinkNetworkQuality}set uplinkNetworkQuality(e){e!==this._uplinkNetworkQuality&&this._log.info("uplink ".concat(this.uplinkNetworkQuality," -> ").concat(e,", rtt: ").concat(this.uplinkRTT,", loss: ").concat(this.uplinkLoss," ws-rtt: ").concat(this._signalChannel.rtt)),this._uplinkNetworkQuality=e,this._uplinkQualityHistory.push(e),this._uplinkQualityHistory.length>T_.HISTORY_SIZE&&this._uplinkQualityHistory.shift()}get downlinkNetworkQuality(){return this._downlinkNetworkQuality}set downlinkNetworkQuality(e){if(e!==this._downlinkNetworkQuality){let{rtt:o,loss:a}=this.getAverageLossAndRTT([...this._downlinkLossAndRTTMap.values()]);this._log.info("downlink ".concat(this.downlinkNetworkQuality," -> ").concat(e,", rtt: ").concat(o,", loss: ").concat(a," ws-rtt: ").concat(this._signalChannel.rtt))}this._downlinkNetworkQuality=e,this._downlinkQualityHistory.push(e),this._downlinkQualityHistory.length>T_.HISTORY_SIZE&&this._downlinkQualityHistory.shift()}initialize(){this._signalChannel.on(ls.UPLINK_NETWORK_STATS,e=>{this.handleUplinkNetworkQuality(e)}),this._signalChannel.on(dj,this.handleSignalConnectionStateChange.bind(this)),this.start()}handleUplinkNetworkQuality(e){var o,a;if(e.data.code!==0)return;let c=e.data.data;if(c.delay&&this.updateDelay(c.delay),this._room.signalChannel&&c.wsRtt&&(this._room.signalChannel.rtt=c.wsRtt),!this._room.uplinkConnection)return this.uplinkNetworkQuality=0,this.uplinkLoss=0,void(this.uplinkRTT=0);let d=(a=(o=this._room)==null?void 0:o.uplinkConnection)==null?void 0:a.getPeerConnection();if(d&&this.isPeerConnectionDisconnected(d))return this.uplinkNetworkQuality=6,this.uplinkLoss=0,void(this.uplinkRTT=0);let C=c.expectAudPkg+c.expectVidPkg,y=c.recvAudPkg+c.recvVidPkg,S=C-y;C===0&&y===0||(this.uplinkLoss=S<=0?0:Math.round(S/C*100),this.uplinkRTT=c.rtt,this.uplinkNetworkQuality=this.getNetworkQuality(this.uplinkLoss,this.uplinkRTT))}handleDownlinkNetworkQuality(){return KA(this,null,function*(){if(this._room.remotePublishedUserMap.size===0)return void(this.downlinkNetworkQuality=0);let e=[...this._room.remotePublishedUserMap.values()],o=new Set,a=e.filter(y=>{let S=y.getPeerConnection();return!(!S||o.has(S))&&(o.add(S),!0)}),c=a.filter(y=>{var S;return((S=y.getPeerConnection())==null?void 0:S.connectionState)===Co.CONNECTED});if(a.filter(y=>this.isPeerConnectionDisconnected(y.getPeerConnection())).length===e.length)return void(this.downlinkNetworkQuality=6);for(let y=0;y{this.isPeerConnectionDisconnected(y)&&(this._downlinkPrevStatMap.delete(y),this._downlinkLossAndRTTMap.delete(y))}),this._downlinkLossAndRTTMap.size===0)return this.downlinkRTT=0,this.downlinkLoss=0,void(this.downlinkNetworkQuality=0);let{rtt:d,loss:C}=this.getAverageLossAndRTT([...this._downlinkLossAndRTTMap.values()]);this.downlinkRTT=d,this.downlinkLoss=C,this.downlinkNetworkQuality=this.getNetworkQuality(C,d)})}getStat(e){return KA(this,null,function*(){let o={rtt:0,totalPacketsLost:0,totalPacketsReceived:0};if(!e||!dy())return o;let a=e.getReceivers();try{for(let c=0;c{d.type==="candidate-pair"&&bn(d.currentRoundTripTime)&&(o.rtt=Math.round(1e3*d.currentRoundTripTime)),d.type==="inbound-rtp"&&(d.mediaType===YA.AUDIO||d.mediaType===YA.VIDEO)&&(o.totalPacketsLost+=d.packetsLost,o.totalPacketsReceived+=d.packetsReceived)});return o.rtt===0&&(o.rtt=this.uplinkRTT),o}catch{return o}})}getAverageLossAndRTT(e){let o={rtt:0,loss:0};return Array.isArray(e)&&e.length>0&&(e.forEach(a=>{o.rtt+=a.rtt,o.loss+=a.loss}),Object.keys(o).forEach(a=>{o[a]=Math.round(o[a]/e.length)})),o}getNetworkQuality(e,o){return e>50||o>500?5:e>30||o>350?4:e>20||o>200?3:e>10||o>100?2:e>=0||o>=0?1:0}handleSignalConnectionStateChange(e){e.state==="DISCONNECTED"?(this.uplinkRTT=0,this.uplinkLoss=0,this.uplinkNetworkQuality=6):e.state==="CONNECTED"&&this.uplinkNetworkQuality===6&&(this.uplinkNetworkQuality=1)}handleUplinkConnectionStateChange(e){let{state:o}=e;o==="DISCONNECTED"?(this.uplinkLoss=0,this.uplinkRTT=0,this.uplinkNetworkQuality=6):o==="CONNECTED"&&this.uplinkNetworkQuality===6&&(this.uplinkNetworkQuality=5)}isPeerConnectionDisconnected(e){return!(!e||e.connectionState!==Co.DISCONNECTED&&e.connectionState!==Co.FAILED&&e.connectionState!==Co.CLOSED)}setUplinkConnection(e){this._room.uplinkConnection=e,this._room.uplinkConnection?this._room.uplinkConnection.on("connection-state-changed",this.handleUplinkConnectionStateChange.bind(this)):(this.uplinkNetworkQuality=0,this.uplinkRTT=0,this.uplinkLoss=0)}start(){this._interval===-1?(this._log.debug("start network quality calculating"),this._interval=Gr.run("ric",()=>{var e;this.handleDownlinkNetworkQuality();let o=[...this._downlinkLossAndRTTMap.values()];F.emit(nA.NETWORK_QUALITY,{room:this._room,uplink:{rtt:this.uplinkRTT,loss:this.uplinkLoss},downlinks:o});let a=(e=this._room.scheduleResult.config)==null?void 0:e.pingDomainInfo,c={uplinkNetworkQuality:this.uplinkNetworkQuality,downlinkNetworkQuality:this.downlinkNetworkQuality,uplinkRTT:this.uplinkRTT,uplinkLoss:this.uplinkLoss,downlinkRTT:this.downlinkRTT,downlinkLoss:this.downlinkLoss};a&&(c=Qo(mi({},c),{pingResults:this.uplinkRTT>a.rttThreshold||this.downlinkRTT>a.rttThreshold?this.pingResults:{}})),this.emit(T_.EVENT_NETWORK_QUALITY,c);let d=Date.now();if(a&&(this.uplinkRTT>a.rttThreshold||this.downlinkRTT>a.rttThreshold)&&d-T_.lastPingTime>1e3*a.interval){T_.lastPingTime=Date.now();let C=a.domain.map(y=>doA(y).then(S=>({domain:y,cost:S.totalCost})));Promise.all(C).then(y=>{this.pingResults.isPoorNetwork=y.some(S=>S.cost>700),this.pingResults.timestamp=d,this.pingResults.data=y,y.forEach(S=>{ii.addSuccessEvent({key:521718,cost:S.cost})}),this._log.warn("All ping results: ".concat(JSON.stringify(y)))}).catch(y=>{this._log.warn("Error during pinging domains: ".concat(y))})}},{delay:2e3})):this._log.info("network quality calculating is already started")}hadRecentBadUplink(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:2;return this._uplinkQualityHistory.some(o=>o>e)}hadRecentBadDownlink(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:2;return this._downlinkQualityHistory.some(o=>o>e)}stop(){this._log.debug("stopped"),this._interval!==-1&&(Gr.clearTask(this._interval),this._interval=-1),this._downlinkLossAndRTTMap.clear(),this._downlinkPrevStatMap.clear()}updateDelay(e){let{tinyIdToUserIdMap:o}=this._room;e.forEach(a=>{let{srcTinyId:c,videoDelay:d,audioDelay:C}=a,y=o.get(c);if(y){let S=this._room.remotePublishedUserMap.get(y);S?.setDelay({videoDelay:d,audioDelay:C})}})}};Y(v1,"HISTORY_SIZE",10),Y(v1,"EVENT_NETWORK_QUALITY","0"),Y(v1,"lastPingTime",0);var Uz=v1,Fz=class{constructor(A){Y(this,"_frameWorkType"),Y(this,"_component"),Y(this,"_language"),Y(this,"connectionType"),Y(this,"_room"),Y(this,"_signalInfo",{tinyId:void 0,clientIp:"",signalIp:"",relayIp:"",relayInnerIp:"",relayPort:0,endReportExtend:void 0,reportToken:void 0}),Y(this,"_keyPrefix"),Y(this,"_log"),Y(this,"_intervalId"),Y(this,"_firstPublishedUserList"),Y(this,"_networkQuality"),Y(this,"_basicInfo"),Y(this,"_pathJoinRoom"),Y(this,"_pathLeaveRoom"),Y(this,"_pathMainVideoMap"),Y(this,"_pathMainAudioMap"),Y(this,"_pathAuxiliaryMap"),Y(this,"_remoteStreamStatMap"),Y(this,"_localStreamStat"),Y(this,"_eventMap",new Map),Y(this,"_captureCostSum",0),Y(this,"_captureCostCount",0),Y(this,"isDestroyed",!1),this._frameWorkType=A.frameWorkType||30,this._component=A.component||0,this.connectionType=A.connectionType||1,this._language=A.language||0,this._room=A.room,this._keyPrefix="key_point",this._log=QA.createLogger({parent:this._room.getLogger(),id:"kpm",userId:this._room.userId,sdkAppId:this._room.sdkAppId}),Object.getOwnPropertyNames(this.__proto__).forEach(e=>{e.startsWith("handle")&&Ra(this[e])&&(this[e]=function(o){let{fn:a,context:c}=o;return function(){try{for(var d=arguments.length,C=new Array(d),y=0;yQA.error("".concat(a.name,"() error observed ").concat(k))):S}catch(S){QA.error("".concat(a.name,"() error observed ").concat(S))}}}({fn:this[e],context:this}))}),this.initData(),this.installEvents()}initData(){this._firstPublishedUserList=[],this._networkQuality={totalUplinkRTT:0,totalUplinkLoss:0,count:0,totalDownlinkRTTAndLossMap:new Map},this._basicInfo={string_sdk_version:qd,uint32_os_type:15,string_device_name:"",string_http_user_agent:navigator.userAgent,string_os_version:"",uint32_avg_rtt:0,uint32_avg_up_loss:0,uint32_scene:this._room.scene==="live"?1:0,uint32_joining_duration:0,uint32_networkType:0,uint32_framework:this._frameWorkType,uint32_component:this._component,uint32_connection_type:this.connectionType,uint32_caller_coding_language:this._language,string_domain:location.hostname},this._pathJoinRoom={uint64_start_time:0,uint64_send_request_acc_ip_cmd_start_time:0,uint64_send_request_acc_ip_cmd_end_time:0,uint64_send_request_enter_room_cmd_start_time:0,uint64_send_request_enter_room_cmd_end_time:0,uint64_send_first_video_frame_time:0,uint64_recv_userlist_time:0,uint64_end_time:0,int32_send_request_acc_ip_cmd_ret:0,int32_send_request_enter_room_cmd_ret:0,int32_end_ret:0},this._pathLeaveRoom={uint64_start_time:0,uint64_send_request_exit_room_cmd_start_time:0,uint64_send_request_exit_room_cmd_end_time:0,uint64_end_time:0,int32_send_request_exit_room_cmd_ret:0,int32_end_ret:0},this._localStreamStat={totalVideoBitrate:0,totalVideoFPS:0,totalVideoHeight:0,totalVideoWidth:0,totalAudioLevel:0,videoCount:0,audioLevelCount:0,publishStartTime:0,statsToReport:{uint32_audio_capture_db:0,uint32_video_big_capture_fps:0,uint32_video_big_bitrate:0,uint32_video_big_resolution:0,uint32_audio_capture_thread_health_zero_cnt:0,uint32_after3a_silence_duration:0}},this._pathMainVideoMap=new Map,this._pathMainAudioMap=new Map,this._pathAuxiliaryMap=new Map,this._remoteStreamStatMap=new Map,fM().then(()=>{this._basicInfo.string_os_version=Yp(),this._basicInfo.string_device_name=rQ()||this._basicInfo.string_os_version})}addEvent(A,e){return this._eventMap.set(A,e),F.on(A,e),this}installEvents(){this.handleUnload=this.handleUnload.bind(this),window.addEventListener("pagehide",this.handleUnload),this._room.once("banned",()=>this.handleLeaveSuccess({room:this._room,roomId:this._room.roomId})),this.addEvent(nA.JOIN_START,this.handleJoinStart).addEvent(nA.JOIN_SCHEDULE_SUCCESS,this.handleJoinScheduleSuccess).addEvent(nA.JOIN_SIGNAL_CONNECTION_START,this.handleSignalConnectionStart).addEvent(nA.JOIN_SIGNAL_CONNECTION_END,this.handleSignalConnectionEnd).addEvent(nA.JOIN_SEND_CMD,this.handleJoinSendCMD).addEvent(nA.JOIN_RECEIVED_CMD_RES,this.handleJoinReceivedCMDResponce).addEvent(nA.JOIN_SUCCESS,this.handleJoinSuccess).addEvent(nA.JOIN_FAILED,this.handleJoinFailed).addEvent(nA.LEAVE_START,this.handleLeaveStart).addEvent(nA.LEAVE_SUCCESS,this.handleLeaveSuccess).addEvent(nA.LEAVE_SEND_CMD,this.handleLeaveSendCMD).addEvent(nA.LOCAL_TRACK_CAPTURE_START,this.handleTrackCaptureStart).addEvent(nA.LOCAL_TRACK_CAPTURE_SUCCESS,this.handleTrackCaptureSuccess).addEvent(nA.LOCAL_TRACK_CAPTURE_FAILED,this.handleTrackCaptureFailed).addEvent(nA.PUBLISH_START,this.handlePublishStart).addEvent(nA.SEND_FIRST_VIDEO_FRAME,this.handleSendFirstVideoFrame).addEvent(nA.SUBSCRIBE_START,this.handleSubscribeStart).addEvent(nA.SUBSCRIBE_SUCCESS,this.handleSubscribed).addEvent(nA.PLAY_TRACK_START,this.handlePlayStart).addEvent(nA.VIDEO_LOADED_DATA,this.handleVideoLoadedData).addEvent(nA.PLAYER_STATE_CHANGED,A=>{let{track:e,state:o,type:a}=A;!e.isRemote||!this.hitTest(e.room)||o==="PLAYING"&&(a===YA.AUDIO?this.handleAudioPlaying(e):this.handleVideoPlaying(e))}).addEvent(nA.SWITCH_ROOM_START,this.handleSwitchRoomStart).addEvent(nA.SWITCH_ROOM_SUCCESS,this.handleSwitchRoomSuccess).addEvent(nA.SWITCH_ROOM_FAILED,this.handleSwitchRoomFailed).addEvent(nA.NETWORK_QUALITY,this.handleNetworkQuality).addEvent(nA.HEARTBEAT_REPORT,this.handleHeartbeatStats).addEvent(nA.RECEIVED_PUBLISHED_USER_LIST,this.handleReceivedPublishUserList).addEvent(nA.REMOTE_PUBLISH_STATE_CHANGED,A=>{let{room:e,prevMuteState:o,muteState:a}=A;if(!this.hitTest(e))return;let c=o.hasAudio||o.hasVideo||o.hasSmall,d=o.hasAuxiliary,C=a.hasAudio||a.hasVideo||a.hasSmall,y=a.hasAuxiliary;!c&&C&&this.handleRemoteStreamAdded(a.userId,"main"),!d&&y&&this.handleRemoteStreamAdded(a.userId,"auxiliary")}).addEvent(nA.SINGLE_CONNECTION_STAT,A=>{let{room:e,stat:o}=A;this.hitTest(e)&&(this._pathJoinRoom.int32_ice_cost=o.ice,this._pathJoinRoom.int32_dtls_cost=o.dtls,this._pathJoinRoom.int32_peer_connection_cost=o.peerConnection)})}uninstallEvents(){window.removeEventListener("pagehide",this.handleUnload),this._eventMap.forEach((A,e)=>F.off(e,A)),this._eventMap.clear()}destroy(){this.uninstallEvents(),Gr.clearTask(this._intervalId),this._pathJoinRoom.uint64_start_time===0&&(this._room=null),this.isDestroyed=!0}handleUnload(){this._room.isJoined&&this.handleLeaveSuccess({room:this._room,roomId:this._room.roomId})}handleJoinStart(A){this.hitTest(A.room)&&(this._pathJoinRoom.uint64_start_time===0&&(this._pathJoinRoom.uint64_start_time=Date.now()),A.params&&(Je(A.params.frameWorkType)||(this._frameWorkType=A.params.frameWorkType,this._basicInfo.uint32_framework=this._frameWorkType),Je(A.params.component)||(this._component=A.params.component,this._basicInfo.uint32_component=this._component),Je(A.params.language)||(this._language=A.params.language,this._basicInfo.uint32_caller_coding_language=this._language)))}handleJoinScheduleSuccess(A){let{room:e,detailCost:o}=A;if(this.hitTest(e)&&o){let{totalCost:a,local:c,dns:d,tcp:C,tls:y,request:S,response:k}=o;this._pathJoinRoom.int32_schedule_cost=a,this._pathJoinRoom.int32_schedule_local=c,this._pathJoinRoom.int32_schedule_dns=d,this._pathJoinRoom.int32_schedule_tcp=C,this._pathJoinRoom.int32_schedule_tls=y,this._pathJoinRoom.int32_schedule_request=S,this._pathJoinRoom.int32_schedule_response=k}}handleSignalConnectionStart(A){let{room:e}=A;this.hitTest(e)&&this._pathJoinRoom.uint64_send_request_acc_ip_cmd_start_time===0&&(this._pathJoinRoom.uint64_send_request_acc_ip_cmd_start_time=Date.now())}handleSignalConnectionEnd(A){let{room:e,error:o}=A;this.hitTest(e)&&this._pathJoinRoom.uint64_send_request_acc_ip_cmd_end_time===0&&(this._pathJoinRoom.uint64_send_request_acc_ip_cmd_end_time=Date.now(),o&&(this._pathJoinRoom.int32_send_request_acc_ip_cmd_ret=o instanceof ai?Number(o.getExtraCode()||o.getCode()):dt.UNKNOWN,this._pathJoinRoom.int32_end_ret=this._pathJoinRoom.int32_send_request_acc_ip_cmd_ret))}handleJoinSendCMD(A){this.hitTest(A.room)&&this._pathJoinRoom.uint64_send_request_enter_room_cmd_start_time===0&&(this._pathJoinRoom.uint64_send_request_enter_room_cmd_start_time=Date.now())}handleJoinReceivedCMDResponce(A){this.hitTest(A.room)&&this._pathJoinRoom.uint64_send_request_enter_room_cmd_end_time===0&&(this._pathJoinRoom.uint64_send_request_enter_room_cmd_end_time=Date.now(),this._pathJoinRoom.int32_send_request_enter_room_cmd_ret=A.code,A.code!==0&&(this._pathJoinRoom.int32_end_ret=this._pathJoinRoom.int32_send_request_enter_room_cmd_ret))}handleJoinSuccess(A){this.hitTest(A.room)&&this._pathJoinRoom.uint64_end_time===0&&(this._pathJoinRoom.uint64_end_time=Date.now(),this._pathJoinRoom.int32_end_ret=0,this._signalInfo=A.room.getSignalInfo())}handleJoinFailed(A){let{room:e,error:o}=A;this.hitTest(e)&&(this._pathJoinRoom.uint64_end_time=Date.now(),this._pathJoinRoom.int32_end_ret===0&&(this._pathJoinRoom.int32_end_ret=o.code||this._pathJoinRoom.int32_send_request_enter_room_cmd_ret||this._pathJoinRoom.int32_send_request_acc_ip_cmd_ret),setTimeout(()=>{this.report()}))}handleReceivedPublishUserList(A){this.hitTest(A.room)&&this._pathJoinRoom.uint64_recv_userlist_time===0&&(this._pathJoinRoom.uint64_recv_userlist_time=Date.now(),this._firstPublishedUserList=A.publishedUserList||[])}handleSendFirstVideoFrame(A){let{room:e}=A;this.hitTest(e)&&this._pathJoinRoom.uint64_send_first_video_frame_time===0&&this._pathJoinRoom.uint64_start_time!==0&&(this._pathJoinRoom.uint64_send_first_video_frame_time=Date.now())}handleLeaveStart(A){this.hitTest(A.room)&&(this._pathLeaveRoom.uint64_start_time=Date.now())}handleLeaveSuccess(A){var e;if(this.hitTest(A.room)&&this._pathLeaveRoom.uint64_end_time===0){if(this._pathLeaveRoom.uint64_end_time=Date.now(),this._pathJoinRoom.uint64_end_time!==0){this._basicInfo.uint32_joining_duration=this._pathLeaveRoom.uint64_end_time-this._pathJoinRoom.uint64_end_time;let o=(e=this._room.audioManager.localAudioTrack)==null?void 0:e.after3aSilenceStartTime;o&&(this._localStreamStat.statsToReport.uint32_after3a_silence_duration=ko()-o)}else this._log.warn("pathJoinRoom endTime is 0");this.report()}}handleLeaveSendCMD(A){this.hitTest(A.room)&&(this._pathLeaveRoom.uint64_send_request_exit_room_cmd_start_time=Date.now(),this._pathLeaveRoom.uint64_send_request_exit_room_cmd_end_time=Date.now())}handleSwitchRoomStart(A){if(this.hitTest(A.room)){let e=Date.now();this.report().then(()=>{this._pathJoinRoom.uint64_start_time=e,this._pathJoinRoom.uint64_send_request_enter_room_cmd_start_time=e})}}handleSwitchRoomSuccess(A){let{room:e}=A;if(this.hitTest(e)&&this._pathJoinRoom.uint64_end_time===0){let o=Date.now();this._pathJoinRoom.uint64_send_request_enter_room_cmd_end_time=o,this._pathJoinRoom.uint64_end_time=o,this._pathJoinRoom.int32_end_ret}}handleSwitchRoomFailed(A){let{room:e,error:o}=A;if(this.hitTest(e)){let a=Date.now();this._pathJoinRoom.uint64_send_request_enter_room_cmd_end_time=a,this._pathJoinRoom.uint64_end_time=a,o&&(this._pathJoinRoom.int32_end_ret=o instanceof ai?Number(o.getExtraCode()||o.getCode()):dt.UNKNOWN)}}handleRemoteStreamAdded(A,e){var o;let a="".concat(A,"_").concat(e);if(!this._remoteStreamStatMap.has(a)){let c={userId:A,totalVideoFPS:0,totalVideoBitrate:0,totalAudioLevel:0,totalAudioBitrate:0,totalLoss:0,audioCount:0,audioLevelCount:0,videoCount:0,networkQualityCount:0,streamAddedTime:Date.now(),subscribeStartTime:0,subscribedTime:0,playStreamTime:0,statsToReport:Qo(mi({},CoA),{msg_user_info:new mj({userId:A,tinyId:(o=this._room.remotePublishedUserMap.get(A))==null?void 0:o.tinyId,role:20})})};c.statsToReport.uint32_stream_type=e==="main"?2:7,this._remoteStreamStatMap.set(a,c)}}handleSubscribeStart(A){let{room:e,remotePublishedUser:o,streamType:a,subscribeState:c}=A;if(!this.hitTest(e))return;let{userId:d,tinyId:C,role:y}=o,S=new mj({userId:d,tinyId:C,role:y==="anchor"?20:21}),k=Date.now(),V="".concat(d,"_").concat(a),J=this._remoteStreamStatMap.get(V);J&&J.subscribeStartTime===0&&(J.subscribeStartTime=k),a==="main"?(o.muteState.hasVideo&&(c.video||c.smallVideo)&&!this._pathMainVideoMap.has(V)&&this._pathMainVideoMap.set(V,{statsToReport:{msg_user_info:S,uint64_start_enter_time:this._pathJoinRoom.uint64_start_time,uint64_render_first_frame_time:0,uint64_combine_first_frame_time:0},userId:d,sendSubscribeCMDTime:k}),o.muteState.hasAudio&&c.audio&&!this._pathMainAudioMap.has(V)&&this._pathMainAudioMap.set(V,{statsToReport:{msg_user_info:S,uint64_start_enter_time:this._pathJoinRoom.uint64_start_time,uint64_play_first_frame_time:0},userId:d,sendSubscribeCMDTime:k})):o.muteState.hasAuxiliary&&c.auxiliary&&!this._pathAuxiliaryMap.has(V)&&this._pathAuxiliaryMap.set(V,{sendSubscribeCMDTime:k})}handleSubscribed(A){let{room:e,remotePublishedUser:o,streamType:a}=A;if(this.hitTest(e)){let c="".concat(o.userId,"_").concat(a),d=this._remoteStreamStatMap.get(c);d&&d.subscribedTime===0&&(d.subscribedTime=Date.now())}}handlePlayStart(A){let{track:e}=A;if(!e.isRemote||!this.hitTest(e.room))return;let o="".concat(e.userId,"_").concat(e.streamType),a=this._remoteStreamStatMap.get(o);a?.playStreamTime===0&&(a.playStreamTime=Date.now())}handleVideoLoadedData(A){let{track:e}=A;if(!e.isRemote||!this.hitTest(e.room))return;let o="".concat(e.userId,"_").concat(e.streamType),a=this._pathMainVideoMap.get(o);a&&a.statsToReport.uint64_combine_first_frame_time===0&&(a.statsToReport.uint64_combine_first_frame_time=Date.now())}handleVideoPlaying(A){let e="".concat(A.userId,"_").concat(A.streamType),o=Date.now(),a=this._pathMainVideoMap.get(e),c=this._remoteStreamStatMap.get(e);if(c){let{statsToReport:d}=c;if(d.uint32_video_render_first||A.streamType!=="main"?this.hasAuxFlag(A.userId):this.hasVideoFlag(A.userId)){let C=o-this._pathJoinRoom.uint64_start_time;d.uint32_video_render_first=C,ii.addNumber({key:516820,value:C})}}a?.statsToReport.uint64_render_first_frame_time===0&&(a.statsToReport.uint64_render_first_frame_time=o)}handleAudioPlaying(A){let e="".concat(A.userId,"_").concat(A.streamType),o=this._pathMainAudioMap.get(e);o&&o.statsToReport.uint64_play_first_frame_time===0&&(o.statsToReport.uint64_play_first_frame_time=Date.now())}handleNetworkQuality(A){this.hitTest(A.room)&&(this._networkQuality.totalUplinkLoss+=A.uplink.loss,this._networkQuality.totalUplinkRTT+=A.uplink.rtt,this._networkQuality.count++,A.downlinks.forEach(e=>{let{rtt:o,loss:a,userId:c,videoDelay:d,audioDelay:C}=e,y=this._networkQuality.totalDownlinkRTTAndLossMap.get(c);if(y)y.totalRTT+=o,y.totalLoss+=a,d&&(y.totalVideoDelay=(y.totalVideoDelay||0)+d,y.videoDelayCount=(y.videoDelayCount||0)+1),C&&(y.totalAudioDelay=(y.totalAudioDelay||0)+C,y.audioDelayCount=(y.audioDelayCount||0)+1),y.count++;else{let S,k,V,J;d&&(k=d,V=1),C&&(S=C,J=1),this._networkQuality.totalDownlinkRTTAndLossMap.set(c,{totalRTT:o,totalLoss:a,count:1,totalAudioDelay:S,totalVideoDelay:k,audioDelayCount:J,videoDelayCount:V})}}))}handleHeartbeatStats(A){var e;if(this.hitTest(A.room)){let{msg_device_info:o,msg_up_stream_info:a,msg_down_stream_info:c}=A.report;if(a.msg_video_status[0]){let{uint32_video_codec_bitrate:d,uint32_video_enc_fps:C,uint32_video_width:y,uint32_video_height:S}=a.msg_video_status[0];this._localStreamStat.totalVideoBitrate+=d,this._localStreamStat.totalVideoFPS+=C,this._localStreamStat.totalVideoWidth+=y,this._localStreamStat.totalVideoHeight+=S,this._localStreamStat.videoCount++}if(a.msg_audio_status){let{uint32_audio_level:d}=a.msg_audio_status;Math.floor(d/od*100)>0&&(this._localStreamStat.totalAudioLevel+=d/od,this._localStreamStat.audioLevelCount++)}c.forEach(d=>{let{msg_user_info:C,msg_audio_status:y,msg_video_status:S}=d,k=C.str_identifier,V=this._room.remotePublishedUserMap.get(k);if(S.forEach(J=>{let gA=J.uint32_video_stream_type===2,CA=J.uint32_video_stream_type===7,MA="".concat(k,"_").concat(gA?"main":"auxiliary"),$A=this._remoteStreamStatMap.get(MA);if($A&&(gA&&V!=null&&V.remoteVideoTrack.isSubscribed||CA&&V!=null&&V.remoteAuxiliaryTrack)){$A.totalVideoFPS+=J.uint32_video_receive_fps,$A.totalVideoBitrate+=J.uint32_video_codec_bitrate,$A.videoCount++,$A.statsToReport.uint32_video_width===0&&($A.statsToReport.uint32_video_width=J.uint32_video_width),$A.statsToReport.uint32_video_height===0&&($A.statsToReport.uint32_video_height=J.uint32_video_height);let Be=gA?V.remoteVideoTrack:V.remoteAuxiliaryTrack;Be.stat.jitterBufferDelay&&($A.videoJitterBufferDelay=Be.stat.jitterBufferDelay),Be.stat.framesReceived&&($A.statsToReport.uint32_video_consume_render_rate=Math.floor(Be.stat.framesDecoded/Be.stat.framesReceived*xS(10,6)))}}),!S0(y)){let J="".concat(k,"_main"),gA=this._remoteStreamStatMap.get(J);this._remoteStreamStatMap.has(J)&&gA&&V!=null&&V.remoteAudioTrack.isSubscribed&&(gA.totalAudioBitrate+=y.uint32_audio_codec_bitrate,gA.audioCount++,V.remoteAudioTrack.stat.jitterBufferDelay&&(gA.audioJitterBufferDelay=V.remoteAudioTrack.stat.jitterBufferDelay),Math.floor(y.uint32_audio_level/od*100)>0&&(gA.totalAudioLevel+=y.uint32_audio_level/od,gA.audioLevelCount++),y.uint32_audio_block_time&&(gA.statsToReport.uint32_audio_block_time+=y.uint32_audio_block_time))}}),o.uint32_audio_capture_cost&&(this._captureCostSum+=o.uint32_audio_capture_cost,this._captureCostCount+=1,this._captureCostCount>=100&&(this._basicInfo.uint32_audio_capture_cost=Math.floor(this._captureCostSum/this._captureCostCount),this._captureCostSum=0,this._captureCostCount=0)),o.uint32_audio_capture_cost===0&&((e=this._room.audioManager.localAudioTrack)==null?void 0:e.muted)===!1&&(this._localStreamStat.statsToReport.uint32_audio_capture_thread_health_zero_cnt+=1)}}handlePublishStart(A){let{room:e}=A;this.hitTest(e)&&this._localStreamStat.publishStartTime===0&&(this._localStreamStat.publishStartTime=Date.now())}handleTrackCaptureStart(A){let{track:e}=A;e.mediaType===1&&!this._pathJoinRoom.uint64_init_audio_start_time&&(this._pathJoinRoom.uint64_init_audio_start_time=Date.now()),e.mediaType===4&&!this._pathJoinRoom.uint64_init_camera_start_time&&(this._pathJoinRoom.uint64_init_camera_start_time=Date.now())}handleTrackCaptureSuccess(A){let{track:e}=A;e.mediaType===1&&!this._pathJoinRoom.uint64_init_audio_end_time&&(this._pathJoinRoom.int32_init_audio_ret=0,this._pathJoinRoom.uint64_init_audio_end_time=Date.now()),e.mediaType===4&&!this._pathJoinRoom.uint64_init_camera_end_time&&(this._pathJoinRoom.int32_init_camera_ret=0,this._pathJoinRoom.uint64_init_camera_end_time=Date.now())}handleTrackCaptureFailed(A){let{track:e,error:o}=A,a={NotFoundError:1,NotAllowedError:2,NotReadableError:3,OverConstrainedError:4,AbortError:5,InvalidStateError:6,SecurityError:7,TypeError:8}[o.name]||(o instanceof ai?o.getExtraCode()||o.getCode():dt.UNKNOWN);e.mediaType===1&&!this._pathJoinRoom.uint64_init_audio_end_time&&(this._pathJoinRoom.int32_init_audio_ret=a,this._pathJoinRoom.uint64_init_audio_end_time=Date.now()),e.mediaType===4&&!this._pathJoinRoom.uint64_init_camera_end_time&&(this._pathJoinRoom.int32_init_camera_ret=a,this._pathJoinRoom.uint64_init_camera_end_time=Date.now())}hasVideoFlag(A){return this._firstPublishedUserList.findIndex(e=>e.userId===A&&e.flag&qS)>=0}hasAudioFlag(A){return this._firstPublishedUserList.findIndex(e=>e.userId===A&&e.flag&jS)>=0}hasAuxFlag(A){return this._firstPublishedUserList.findIndex(e=>e.userId===A&&e.flag&KS)>=0}hitTest(A){return A===this._room}prepareReport(){if(this._captureCostCount>0&&!this._basicInfo.uint32_audio_capture_cost&&(this._basicInfo.uint32_audio_capture_cost=Math.floor(this._captureCostSum/this._captureCostCount),this._captureCostSum=0,this._captureCostCount=0),this._networkQuality.count>0&&(this._basicInfo.uint32_avg_rtt=Math.floor(this._networkQuality.totalUplinkRTT/this._networkQuality.count),this._basicInfo.uint32_avg_up_loss=Math.floor(this._networkQuality.totalUplinkLoss/this._networkQuality.count)),this._localStreamStat.videoCount>0){this._localStreamStat.statsToReport.uint32_video_big_capture_fps=Math.floor(this._localStreamStat.totalVideoFPS/this._localStreamStat.videoCount),this._localStreamStat.statsToReport.uint32_video_big_bitrate=Math.floor(this._localStreamStat.totalVideoBitrate/this._localStreamStat.videoCount);let A=Math.floor(this._localStreamStat.totalVideoWidth/this._localStreamStat.videoCount),e=Math.floor(this._localStreamStat.totalVideoHeight/this._localStreamStat.videoCount);this._localStreamStat.statsToReport.uint32_video_big_resolution=A<<16|e}this._localStreamStat.audioLevelCount>0&&(this._localStreamStat.statsToReport.uint32_audio_capture_db=Math.floor(this._localStreamStat.totalAudioLevel/this._localStreamStat.audioLevelCount*100)),this._remoteStreamStatMap.forEach((A,e)=>{let{userId:o}=A,a=this._networkQuality.totalDownlinkRTTAndLossMap.get(o);if(a){let{totalLoss:k,count:V,audioDelayCount:J,videoDelayCount:gA,totalAudioDelay:CA,totalVideoDelay:MA}=a;A.statsToReport.uint32_avg_down_loss=Math.floor(k/V),J&&CA&&(A.statsToReport.uint32_audio_network_p2p_delay=Math.floor(CA/J),A.audioJitterBufferDelay&&(A.statsToReport.uint32_p2p_delay=Math.floor(A.statsToReport.uint32_audio_network_p2p_delay+A.audioJitterBufferDelay))),gA&&MA&&(A.statsToReport.uint32_video_network_p2p_delay=Math.floor(MA/gA))}A.videoCount>0&&(A.statsToReport.uint32_video_avg_fps=Math.floor(A.totalVideoFPS/A.videoCount),A.statsToReport.uint32_video_avg_bitrate=Math.floor(A.totalVideoBitrate/A.videoCount)),A.audioCount>0&&(A.statsToReport.uint32_audio_recv_bitrate=A.statsToReport.uint32_audio_bitrate=Math.floor(A.totalAudioBitrate/A.audioCount)),A.audioLevelCount>0&&(A.statsToReport.uint32_audio_play_db=Math.floor(A.totalAudioLevel/A.audioLevelCount*100));let{callDurationCalculator:c}=this._room;c&&(A.statsToReport.uint32_audio_play_time=c.getDuration(e,YA.AUDIO),A.statsToReport.uint32_video_play_time=c.getDuration(e,YA.VIDEO)),A.statsToReport.uint32_video_render_first&&(A.statsToReport.uint32_video_render_first=Math.min(A.statsToReport.uint32_video_render_first,XM));let{badCaseDetector:d}=this._room,{dataFreeze:C,count:y}=d.getDataFreezeDuration(e),{renderFreeze:S}=d.getRenderFreezeDuration(e);A.statsToReport.uint32_video_block_count=y,A.statsToReport.uint32_video_block_time=Math.min(C,A.statsToReport.uint32_video_play_time),A.statsToReport.uint32_video_external_block_time=Math.min(S,A.statsToReport.uint32_video_play_time),A.statsToReport.uint32_audio_block_time=Math.min(A.statsToReport.uint32_audio_block_time,A.statsToReport.uint32_audio_play_time),d.isBlackStream(e)&&A.statsToReport.uint32_video_avg_fps===0?A.statsToReport.uint32_video_black_screen_subjective=1:A.statsToReport.uint32_video_black_screen_subjective=0}),this._pathMainAudioMap.forEach((A,e)=>{this.hasAudioFlag(A.userId)?A.statsToReport.uint64_play_first_frame_time-A.statsToReport.uint64_start_enter_time>XM&&(A.statsToReport.uint64_play_first_frame_time=A.statsToReport.uint64_start_enter_time+XM):this._pathMainAudioMap.delete(e)}),this._pathMainVideoMap.forEach((A,e)=>{this.hasVideoFlag(A.userId)?A.statsToReport.uint64_render_first_frame_time-A.statsToReport.uint64_start_enter_time>XM&&(A.statsToReport.uint64_render_first_frame_time=A.statsToReport.uint64_start_enter_time+XM):this._pathMainVideoMap.delete(e)}),this._pathJoinRoom.uint64_end_time-this._pathJoinRoom.uint64_start_time>XM&&(this._pathJoinRoom.uint64_end_time=this._pathJoinRoom.uint64_start_time+XM)}getReportData(){this._basicInfo.uint32_networkType=qf();let A={uint32_sdk_app_id:Number(this._room.sdkAppId),msg_user_info:new mj({userId:this._room.userId,tinyId:this._room.tinyId,role:this._room.role==="anchor"?20:21}),msg_basic_info:this._basicInfo,uint32_acc_ip:sM(this._signalInfo.relayIp),uint32_client_ip:sM(this._signalInfo.clientIp,!1),uint32_acc_port:this._signalInfo.relayPort||0,uint64_timestamp:Date.now(),uint32_seq:Math.floor(Math.random()*xS(2,31)),msg_path_enter_room:this._pathJoinRoom,msg_path_exit_room:this._pathLeaveRoom,msg_path_recv_video:[...this._pathMainVideoMap.values()].map(e=>e.statsToReport),msg_quality_statistics:[...this._remoteStreamStatMap.values()].map(e=>e.statsToReport),str_room_name:String(this._room.roomId||0),msg_path_recv_audio:[...this._pathMainAudioMap.values()].map(e=>e.statsToReport),uint32_info_client_ip:sM(this._signalInfo.clientIp,!1),error_code:[],msg_local_statistics:this._localStreamStat.statsToReport,bytes_report_buf_from_0x1:this._signalInfo.endReportExtend,str_user_sig:this._room.userSig,bytes_report_token:this._signalInfo.reportToken};return R0(A),A}report(){return KA(this,null,function*(){try{this.prepareReport();let A=this.getReportData();yield this.upload(A),this.initData()}catch(A){this._log.warn(A)}finally{this.isDestroyed&&(this._room=null)}})}upload(A){return KA(this,null,function*(){if(A.msg_path_enter_room.uint64_start_time===0)return;let e=Number(this._room.sdkAppId),o=_A.enable?AQ(A,2001,e):yield zb(A),a=o instanceof ArrayBuffer,c="".concat(Hf(e,bI.KEY_POINT),"&gzip=").concat(+a),d=!1;navigator.sendBeacon&&(d=navigator.sendBeacon(c,o));let C=[this.uploadKVStat(ii),this.uploadKVStat(Zh)];d||C.push(eQ({url:c,body:o,priority:"low"})),yield Promise.all(C)})}setConnectionType(A){this.connectionType=A,this._basicInfo.uint32_connection_type=A}uploadKVStat(A){return KA(this,arguments,function(e){var o=this;let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this._room.sdkAppId;return function*(){var c,d;let C=e.getReportData((c=o._room)==null?void 0:c.userSig,(d=o._signalInfo)==null?void 0:d.reportToken);if(C.stats_count.length===0&&C.stats_distribution.length===0)return;C.msg_sdk_basic_info=Qo(mi({},C.msg_sdk_basic_info),{bytes_device_name:o._basicInfo.string_device_name||"",bytes_os_version:o._basicInfo.string_os_version||"",uint32_framework:o._frameWorkType,uint32_network_type:o._basicInfo.uint32_networkType||0}),o._log.debug(C);let y=_A.enable?AQ(C,2003,a):yield zb(C),S=y instanceof ArrayBuffer,k="".concat(Hf(+a,bI.KV_STAT),"&gzip=").concat(+S),V=!1;navigator.sendBeacon&&(V=navigator.sendBeacon(k,y)),V||eQ({url:k,body:y})}()})}};Ci([$h({settings:{timeout:500,retries:3}})],Fz.prototype,"upload");var XM=5e3,CoA={msg_user_info:null,uint32_video_avg_fps:0,uint32_video_width:0,uint32_video_height:0,uint32_video_avg_bitrate:0,uint32_video_block_time:0,uint32_video_play_time:0,uint32_audio_block_time:0,uint32_audio_play_time:0,uint32_audio_play_db:0,uint32_avg_down_loss:0,uint32_stream_type:0,uint32_video_block_count:0,uint32_audio_block_count:0,uint32_audio_bitrate:0,uint32_video_black_screen_subjective:0,uint32_audio_recv_bitrate:0,uint32_video_external_block_time:0,uint32_video_consume_render_rate:0},mj=class{constructor(A){Y(this,"str_identifier"),Y(this,"str_tinyid"),Y(this,"uint32_role"),this.str_identifier=String(A.userId),this.str_tinyid=String(A.tinyId||0),this.uint32_role=A.role}},hoA=Fz,Oz=class{constructor(){Y(this,"_startTime"),Y(this,"_endTime"),this._startTime=0,this._endTime=0,this.start()}start(){this._startTime===0&&(this._startTime=ko())}stop(){this._endTime===0&&(this._endTime=ko())}getDuration(){return this._endTime===0?ko()-this._startTime:this._endTime-this._startTime}get startTime(){return this._startTime}get endTime(){return this._endTime}},BoA=class{constructor(A){Y(this,"_room",null),Y(this,"_durationMap"),Y(this,"_eventMap",new Map),this._room=A.room,this._durationMap=new Map,this.installEvents()}installEvents(){this._eventMap.set(nA.REMOTE_TRACK_SUBSCRIBED,this.handleSubscribed).set(nA.REMOTE_TRACK_UNSUBSCRIBED,this.handleUnsubscribed).set(nA.REMOTE_PUBLISH_STATE_CHANGED,A=>{let{room:e,prevMuteState:o,muteState:a}=A;var c;let{userId:d}=a;if(!this.hitTest(e))return;o.hasAudio&&!a.hasAudio&&this.stopDurationItem("".concat(d,"_main"),YA.AUDIO),o.hasVideo&&!a.hasVideo&&this.stopDurationItem("".concat(d,"_main"),YA.VIDEO),o.hasAuxiliary&&!a.hasAuxiliary&&this.stopDurationItem("".concat(d,"_auxiliary"),YA.VIDEO);let C=(c=this._room)==null?void 0:c.remotePublishedUserMap.get(d);C&&(!o.hasAudio&&a.hasAudio&&C.remoteAudioTrack.isSubscribed&&this.addDuractionItem(d,YA.AUDIO,"main"),!o.hasVideo&&a.hasVideo&&C.remoteVideoTrack.isSubscribed&&this.addDuractionItem(d,YA.VIDEO,"main"),!o.hasAuxiliary&&a.hasAuxiliary&&C.remoteAuxiliaryTrack.isSubscribed&&this.addDuractionItem(d,YA.VIDEO,"auxiliary"))}),this._eventMap.forEach((A,e)=>F.on(e,A,this))}uninstallEvents(){this._eventMap.forEach((A,e)=>F.off(e,A,this)),this._eventMap.clear()}handleSubscribed(A){let{track:e}=A;if(!this.hitTest(e.room))return;let{userId:o,streamType:a,kind:c}=e;e.isSubscribed?this.addDuractionItem(o,c,a):this.stopDurationItem("".concat(o,"_").concat(a),c)}handleUnsubscribed(A){let{track:e}=A;this.hitTest(e.room)&&this.stopDurationItem("".concat(e.userId,"_").concat(e.streamType),e.kind)}isRecording(A){return A.findIndex(e=>e.endTime===0)>=0}addDuractionItem(A,e,o){let a="".concat(A,"_").concat(o),c=new Oz,d=this._durationMap.get(a);d?this.isRecording(d[e])||d[e].push(c):this._durationMap.set(a,{userId:A,type:o,audio:e===YA.AUDIO?[c]:[],video:e===YA.AUDIO?[]:[c]})}stopDurationItem(A,e){if(this._durationMap.has(A)){let o=this._durationMap.get(A)[e].find(a=>a.endTime===0);o&&o.stop()}}hitTest(A){return this._room===A}getDuration(A,e){return this._durationMap.has(A)?this._durationMap.get(A)[e].reduce((o,a)=>o+a.getDuration(),0):0}getDurationMap(){return this._durationMap}reset(){this._durationMap.clear()}destroy(){this._room=null,this.uninstallEvents()}},QoA=class{constructor(){Y(this,"renderFreezeMap",new Map),Y(this,"dataFreezeMap",new Map)}get(A,e){let o=this.renderFreezeMap.get(A),a=this.dataFreezeMap.get(A);return e?e==="data"?a:o:(Bg||er)&&o&&a&&o.duration>a.duration?o:a}set(A,e,o){o==="data"?this.dataFreezeMap.set(A,e):this.renderFreezeMap.set(A,e)}clear(){this.renderFreezeMap.clear(),this.dataFreezeMap.clear()}},poA=class{constructor(A){Y(this,"_room"),Y(this,"_renderFreezeMap",new Map),Y(this,"_isVideoPlayingEventFiredMap",new Map),Y(this,"_dataFreezeMap",new Map),Y(this,"_monitorFreezeData",new QoA),Y(this,"_eventMap",new Map),Y(this,"_videoEncodeFailedCount",0),Y(this,"_audioEncodeFailedCount",0),Y(this,"_encodeFailedThreshold",3),Y(this,"ABNORMAL_TIME_LOWER_LIMIT",3e3),Y(this,"ABNORMAL_TIME_UPPER_LIMIT",5e3),Y(this,"_videoAbnormalTimestampMap",new Map),Y(this,"_remoteVideoAbnormalTimestampMap",new Map),Y(this,"_audioAbnormalTimestampMap",new Map),Y(this,"eventListenerMap",new Map),this._room=A.room,this.installEvents()}getRenderFreezeMap(){return this._renderFreezeMap}getDataFreezeMap(){return this._dataFreezeMap}installEvents(){this._eventMap.set(nA.LEAVE_SUCCESS,A=>{let{room:e}=A;this.hitTest(e)&&this.stop()}).set(nA.PLAY_TRACK_START,this.onPlayTrackStart).set(nA.UNSUBSCRIBE_SUCCESS,A=>{let{room:e,streamType:o,remotePublishedUser:a}=A;if(!this.hitTest(e))return;let{userId:c}=a,d="".concat(c,"_").concat(o);this.stopDataFreeze({key:d,userId:c,type:o})}).set(nA.REMOTE_PUBLISH_STATE_CHANGED,A=>{let{room:e,prevMuteState:o,muteState:a}=A;if(!this.hitTest(e))return;let{userId:c}=a;if(o.hasVideo&&!a.hasVideo){let d="main",C="".concat(a.userId,"_").concat(d);this.stopDataFreeze({key:C,userId:c,type:d})}if(o.hasAuxiliary&&!a.hasAuxiliary){let d="auxiliary",C="".concat(a.userId,"_").concat(d);this.stopDataFreeze({key:C,userId:c,type:d})}}).set(nA.PLAYER_STATE_CHANGED,A=>{let{track:e,state:o,reason:a,type:c}=A;if(e.isRemote&&e.room&&this.hitTest(e.room)&&c===YA.VIDEO){if(o==="PLAYING"){let d="".concat(e.userId,"_").concat(e.streamType);this._isVideoPlayingEventFiredMap.set(d,!0)}a===YA.MUTE?this.onVideoTrackMuted(e):a===YA.UNMUTE&&this.onVideoTrackUnmuted(e)}}).set(nA.HEARTBEAT_REPORT,this.onHearBeatReport).set(nA.REMOTE_VIDEO_PLAY_START,this.onRemoteVideoPlayStart).set(nA.REMOTE_VIDEO_PLAY_FINISH,this.onRemoteVideoPlayEnd),this._eventMap.forEach((A,e)=>F.on(e,A,this))}uninstallEvents(){this._eventMap.forEach((A,e)=>F.off(e,A,this)),this._eventMap.clear()}stop(){this._renderFreezeMap.clear(),this._dataFreezeMap.clear(),this._isVideoPlayingEventFiredMap.clear()}onVideoTrackMuted(A){if(!A.isSubscribed)return;let{userId:e,streamType:o}=A,a="".concat(e,"_").concat(o),c=this._dataFreezeMap.get(a),d=new Oz;c?c.durationItemList.push(d):this._dataFreezeMap.set(a,{userId:e,type:o,durationItemList:[d],isFreezing(){let C=this.durationItemList[this.durationItemList.length-1];return C&&C.endTime===0}})}onVideoTrackUnmuted(A){if(!A.isSubscribed)return;let{userId:e,streamType:o}=A,a="".concat(e,"_").concat(o);this.stopDataFreeze({key:a,userId:e,type:o})}onHearBeatReport(A){let{room:e,report:o}=A;this.hitTest(e)&&(this.localMediaTrackDetector(o),this.remoteMediaTrackDetector(o))}remoteMediaTrackDetector(A){A.msg_down_stream_info.length>0&&A.msg_down_stream_info.forEach(e=>{var o;if(e.msg_video_status.length===0)return;let a=e.msg_user_info.str_identifier,c=(o=this._room.remotePublishedUserMap.get(a))==null?void 0:o.remoteVideoTrack;e.msg_video_status.forEach(d=>{let C=ko();if(d.uint32_video_codec_bitrate!==void 0&&d.uint32_video_codec_bitrate>0&&d.uint32_video_receive_fps===0&&c!=null&&c.muted)if(this._remoteVideoAbnormalTimestampMap.has("".concat(a,"-decode"))){let y=this._remoteVideoAbnormalTimestampMap.get("".concat(a,"-decode"));y&&C-y>this.ABNORMAL_TIME_LOWER_LIMIT&&C-y=this.ABNORMAL_TIME_UPPER_LIMIT&&(sn.uploadEvent({userId:this._room.userId,log:"stat-".concat(Ja.VIDEO_DECODE_RESUME_DURING_CALL)}),this._remoteVideoAbnormalTimestampMap.delete("".concat(a,"-decode")))}if(d.uint32_video_codec_bitrate!==void 0&&d.uint32_video_codec_bitrate>5e5&&d.uint32_video_dec_fps!==void 0&&d.uint32_video_dec_fps<=5)if(this._remoteVideoAbnormalTimestampMap.has("".concat(a,"-hardware"))){let y=this._remoteVideoAbnormalTimestampMap.get("".concat(a,"-hardware"));if(y&&C-y>this.ABNORMAL_TIME_LOWER_LIMIT/2&&C-y<2*this.ABNORMAL_TIME_UPPER_LIMIT){sn.uploadEvent({userId:this._room.userId,log:"stat-".concat(Ja.VIDEO_HARDWARE_DECODE_FAILED)});let S=this._room.remotePublishedUserMap.get(a);if(S){let k=d.uint32_video_stream_type===2?S.remoteVideoTrack:S.remoteAuxiliaryTrack;k&&(k.log.warn("decode failed during call"),k.emit("decode-failed-during-call"))}}}else this._remoteVideoAbnormalTimestampMap.set("".concat(a,"-hardware"),C);else{let y=this._remoteVideoAbnormalTimestampMap.get("".concat(a,"-hardware"));y&&C-y>=2*this.ABNORMAL_TIME_UPPER_LIMIT&&(sn.uploadEvent({userId:this._room.userId,log:"stat-".concat(Ja.VIDEO_HARDWARE_DECODE_RESUME)}),this._remoteVideoAbnormalTimestampMap.delete("".concat(a,"-hardware")))}})})}localMediaTrackDetector(A){if(A.msg_up_stream_info.msg_video_status){let e=A.msg_up_stream_info.msg_video_status,o=Array.from(this._room.localTracks).find(c=>c.kind==="video"&&!c.isScreen),a=o?.stat.bytesSent||0;if(o?.isMediaTrackActive===!1||a<=0||o!=null&&o.isUseCustomSource)return;e.forEach(c=>{let d=ko();if(c.uint32_video_stream_type===2)if(c.uint32_video_capture_fps!==0&&c.uint32_video_codec_bitrate===0&&c.uint32_video_enc_fps===0&&o!=null&&o.isPublished)if(this._videoAbnormalTimestampMap.has("local-encode")){let C=this._videoAbnormalTimestampMap.get("local-encode");C&&d-C>this.ABNORMAL_TIME_LOWER_LIMIT&&d-C=this.ABNORMAL_TIME_UPPER_LIMIT&&sn.uploadEvent({userId:this._room.userId,log:"stat-".concat(Ja.VIDEO_ENCODE_RESUME_DURING_CALL)}),this._videoAbnormalTimestampMap.delete("local-encode")}})}if(A.msg_up_stream_info.msg_audio_status){let e=A.msg_up_stream_info.msg_audio_status,o=Array.from(this._room.localTracks).find(d=>d.kind==="audio"),a=o?.stat.bytesSent||0;if(o?.isMediaTrackActive===!1||a<=0||o!=null&&o.isUseCustomSource)return;let c=ko();if(e.uint32_audio_codec_bitrate===0&&o!=null&&o.isPublished)if(this._audioAbnormalTimestampMap.has("local-encode")){let d=this._audioAbnormalTimestampMap.get("local-encode");d&&c-d>this.ABNORMAL_TIME_LOWER_LIMIT&&c-d=this.ABNORMAL_TIME_UPPER_LIMIT&&sn.uploadEvent({userId:this._room.userId,log:"stat-".concat(Ja.AUDIO_ENCODE_RESUME_DURING_CALL)}),this._audioAbnormalTimestampMap.delete("local-encode")}}}stopDataFreeze(A){let{key:e,userId:o,type:a}=A,c=this._dataFreezeMap.get(e);if(!c||!c.isFreezing())return;let d=c.durationItemList[c.durationItemList.length-1];d.stop();let C=d.getDuration();if(C>Tb){let y=this._monitorFreezeData.get(e,"data");this._monitorFreezeData.set(e,{userId:o,type:a,duration:y?y.duration+C:C},"data")}else c.durationItemList.pop()}getTotalDuration(A){return A.reduce((e,o)=>{let a=o.getDuration();return e+Math.min(a,5e3)},0)}onPlayTrackStart(A){let{track:e}=A;if(!e.isRemote||!this.hitTest(e.room)||e.kind!==YA.VIDEO||!e.isRemotePublished)return;let o="".concat(e.userId,"_").concat(e.streamType);this._isVideoPlayingEventFiredMap.has(o)||this._isVideoPlayingEventFiredMap.set(o,!1)}getDataFreezeDuration(A){let e={dataFreeze:0,count:0},o=this._dataFreezeMap.get(A);if(o){if(o.isFreezing()){let a=o.durationItemList[o.durationItemList.length-1];a.stop(),a.getDuration(){document.hidden||(c=0)};document.addEventListener("visibilitychange",d);let C=(y,S)=>{var k;if(c){let V=e.decodeFPS,J=V>0&&V<=5?600+1e3/V:600,gA=S.presentationTime-c;if(gA>J){gA=Math.min(gA,5e3);let CA="".concat(e.userId,"_").concat(e.streamType),MA=this._monitorFreezeData.get(CA,"render");MA?MA.duration+=gA:this._monitorFreezeData.set(CA,{userId:e.userId,type:e.streamType,duration:gA},"render");let $A=this._renderFreezeMap.get(CA);$A?($A.totalDuration+=gA,$A.count+=1):this._renderFreezeMap.set(CA,{userId:e.userId,type:e.streamType,totalDuration:gA,count:1})}}c=S.presentationTime,(k=o.element)==null||k.requestVideoFrameCallback(C)};(a=o.element)==null||a.requestVideoFrameCallback(C),this.eventListenerMap.set("".concat(e.userId,"_").concat(e.streamType),{onVisibilityChange:d})}onRemoteVideoPlayEnd(A){let{track:e,player:o}=A,a="".concat(e.userId,"_").concat(e.streamType),c=this.eventListenerMap.get(a);c&&document.removeEventListener("visibilitychange",c.onVisibilityChange)}resetMonitor(){this._monitorFreezeData.clear()}hitTest(A){return A===this._room}destroy(){this.uninstallEvents()}},moA=gc(Kl(),1),foA=class{constructor(A,e,o,a,c){let d=arguments.length>5&&arguments[5]!==void 0?arguments[5]:1.3333333333333333;this.vbMode=A,this.faceDetectorHash=o,this.visionTaskRegistry=a,this.logger=c,Y(this,"animationState"),Y(this,"originalAspect"),Y(this,"totalOffsetX",0),Y(this,"totalOffsetY",0),Y(this,"defaultScaleRatio",.1),Y(this,"isRecovering",!1),Y(this,"boundaryY",280),Y(this,"lastActionTime",0),Y(this,"restTime",400),this.animationState={current:null,target:null,animating:!1,debounceTimer:null,startTime:0,duration:3e3,debounceTime:150,movementThreshold:30,debounceThreshold:15},this.addEvent(this.vbMode,!!this.faceDetectorHash),this.originalAspect=d||4/3,this.visionTaskRegistry.setVideo(this.faceDetectorHash,e)}addEvent(A,e,o){let a=[{key:570704,error:o??(e?void 0:11)},{key:570705,error:o??(e?void 0:22)}][A-1];a&&(e?ii.addSuccessEvent({key:a.key}):ii.addFailedEvent({key:a.key,error:a.error}))}actionCentering(A){let e=Date.now();if(this.animation(),!this.faceDetectorHash||e-this.lastActionTimee/2?(c=e-o-a,d=o-c):(c=o,d=0),{min:c,offset:d}}calculateTargetPosition(A,e,o,a,c,d){let C,y,S=arguments.length>6&&arguments[6]!==void 0?arguments[6]:.4,k=A+o/2,V=e+a/2,{min:J,offset:gA}=this.calculateBoundary(k,c,A,o),{min:CA,offset:MA}=this.calculateBoundary(V,d,e,a);return C=2*J+o,y=2*CA+a,C/y>this.originalAspect?(C=y*this.originalAspect,gA=k-C/2):(y=C/this.originalAspect,MA=V-y/2),o/c>S&&(gA=0,MA=0,C=c,y=d),gA=Math.max(0,Math.min(gA,c-C)),MA=Math.max(0,Math.min(MA,d-y)),{sx:gA,sy:MA,cropWidth:C,cropHeight:y,timestamp:Date.now()}}processFacePositionCrop(A,e,o){if(!this.animationState.current||!this.animationState.target){let C={sx:0,sy:0,cropWidth:e,cropHeight:o,timestamp:Date.now()};return this.animationState.current=C,void(this.animationState.target=C)}let a=this.positionDistance(this.animationState.target,A),c=this.positionDistance(this.animationState.current,A),d=this.animationState.current.cropWidth/e;a>this.animationState.debounceThreshold*d&&(clearTimeout(this.animationState.debounceTimer),this.animationState.animating=!1),!this.animationState.animating&&c>this.animationState.movementThreshold*d&&(this.animationState.target=A,this.animationState.debounceTimer=setTimeout(()=>{this.animationState.startTime=Date.now(),this.animationState.animating=!0},this.animationState.debounceTime))}processFacePositionPortrait(A){if(!this.animationState.current||!this.animationState.target)return this.animationState.current=mi({},A),void(this.animationState.target=mi({},A));let e=this.positionDistance(this.animationState.current,A),o=this.positionDistance(this.animationState.target,A);e>this.animationState.debounceThreshold&&(clearTimeout(this.animationState.debounceTimer),this.animationState.animating=!1),!this.animationState.animating&&o>this.animationState.movementThreshold&&(this.animationState.current=A,this.animationState.debounceTimer=setTimeout(()=>{this.animationState.startTime=Date.now(),this.animationState.animating=!0},this.animationState.debounceTime))}animation(){if(!this.animationState.animating)return;let A=Date.now()-this.animationState.startTime,e=Math.min(A/this.animationState.duration,1),o=a=>a<.5?2*a*a:(4-2*a)*a-1;if(this.animationState.current&&this.animationState.target){let a=(this.animationState.target.sx-this.animationState.current.sx)*o(e);this.animationState.current.sx+=a,this.totalOffsetX+=a;let c=(this.animationState.target.sy-this.animationState.current.sy)*o(e);if(this.animationState.current.sy+=c,this.totalOffsetY+=c,this.animationState.current.cropWidth+=(this.animationState.target.cropWidth-this.animationState.current.cropWidth)*o(e),this.animationState.current.cropHeight+=(this.animationState.target.cropHeight-this.animationState.current.cropHeight)*o(e),this.animationState.current.scaleRatio&&this.animationState.target.scaleRatio&&(this.animationState.current.scaleRatio+=(this.animationState.target.scaleRatio-this.animationState.current.scaleRatio)*o(e)),bn(this.animationState.current.scaleOffsetX)&&bn(this.animationState.target.scaleOffsetX)&&bn(this.animationState.current.scaleOffsetY)&&bn(this.animationState.target.scaleOffsetY)){let d=(this.animationState.target.scaleOffsetX-this.animationState.current.scaleOffsetX)*o(e);this.animationState.current.scaleOffsetX+=d;let C=(this.animationState.target.scaleOffsetY-this.animationState.current.scaleOffsetY)*o(e);this.animationState.current.scaleOffsetY+=C}}e>=1&&(this.animationState.animating=!1,this.animationState.current=this.animationState.target,this.isRecovering=!1)}positionDistance(A,e){return Math.sqrt(xS(A.sx-e.sx,2)+xS(A.sy-e.sy,2))}recoverOriginal(A,e){this.animationState.target={sx:0,sy:0,cropWidth:A,cropHeight:e,timestamp:Date.now()},this.animationState.animating=!0,this.animationState.startTime=Date.now(),this.isRecovering=!0}dualStageCropping(A,e,o,a,c,d){let C=arguments.length>6&&arguments[6]!==void 0?arguments[6]:.3;if(this.isRecovering)return;let y=this.calculateTargetPosition(o,a,c,d,A,e);this.processFacePositionCrop(y,A,e),c*d/y.cropWidth/y.cropHeight>C&&this.recoverOriginal(A,e)}movingPortrait(A,e,o,a,c,d){var C,y,S,k,V,J,gA,CA,MA,$A,Be,Ye;let ve={sx:o+c/2+this.totalOffsetX,sy:a+d/2+this.totalOffsetY,cropWidth:A,cropHeight:e,scaleRatio:(y=(C=this.animationState.current)==null?void 0:C.scaleRatio)!=null?y:1,scaleOffsetX:(k=(S=this.animationState.current)==null?void 0:S.scaleOffsetX)!=null?k:0,scaleOffsetY:(J=(V=this.animationState.current)==null?void 0:V.scaleOffsetY)!=null?J:0,timestamp:Date.now()};this.animationState.target={sx:A/2,sy:a+d/2,cropWidth:A,cropHeight:e,scaleRatio:(CA=(gA=this.animationState.target)==null?void 0:gA.scaleRatio)!=null?CA:1,scaleOffsetX:($A=(MA=this.animationState.target)==null?void 0:MA.scaleOffsetX)!=null?$A:0,scaleOffsetY:(Ye=(Be=this.animationState.target)==null?void 0:Be.scaleOffsetY)!=null?Ye:0,timestamp:Date.now()},this.animationState.animating||(this.animationState.target.scaleRatio=Math.sqrt(c*d/A/e/this.defaultScaleRatio),this.animationState.target.scaleOffsetX=-this.animationState.target.scaleRatio/2+.5,this.animationState.target.scaleOffsetY=1-this.animationState.target.scaleRatio,(this.animationState.target.sy-this.animationState.target.scaleOffsetY*this.animationState.target.cropHeight)/this.animationState.target.scaleRatio{A.log.error(o),A.destroy(new ai({code:dt.VIDEO_MANAGER_ERROR,extraCode:6,message:"init vb node error ".concat(o.message||o)})),this.resolvePreditReady()})}init(A){return KA(this,null,function*(){var e,o,a;this.predictReady=new Promise(y=>{this.resolvePreditReady=y});let c=A.Wasm,d=this.context.ctx;if(A.color&&(this._color=A.color),A.mat4&&(this._mat4=A.mat4),A.postProcessing&&(this._postProcessing=A.postProcessing),this._enableFaceCentering=(e=A.enableFaceCentering)!=null&&e,this._enableEffectOptimization=(o=A.enableEffectOptimization)!=null&&o,this.wasm=new c.AllIn1(d),this.wasm.blurRadius=A.blurRadius||3,this.wasm.mirror=!!A.mirror,this.wasm.rotation=A.rotation||0,this.wasm.vbMode=A.bg==="blur"?1:A.bg instanceof HTMLImageElement?2:A.bg==="color"?3:0,this._onAbort=A.onAbort,A.bg||this.resolvePreditReady(),A.waterMark){let{x:y,y:S,width:k,height:V}=A.waterMark;this.wasm.setWaterMark(y,S,k,V)}if(A.beautyParams){let{beauty:y,brightness:S,ruddy:k}=A.beautyParams;this.wasm.setBeauty(y,S,k,A?.width,A?.height)}this.program=this.wasm.init(),this.useProgram(),this.setAttributes(this.positionBuffer,this.texCoordBuffer),d.uniform1i(d.getUniformLocation(this.program,"mask"),1),A.bg instanceof HTMLImageElement&&(d.uniform1i(d.getUniformLocation(this.program,"bg"),2),this._bgTexture=this.createTexture(A.bg)),A.waterMark&&(d.uniform1i(d.getUniformLocation(this.program,"waterMark"),3),this._waterMarkTexture=this.createTexture(A.waterMark.image));let C=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);if(this._textureMatrixLocation=d.getUniformLocation(this.program,"u_textureMatrix"),d.uniformMatrix4fv(this._textureMatrixLocation,!1,C),this._offsetMatrixLocation=d.getUniformLocation(this.program,"u_offsetMatrix"),d.uniformMatrix4fv(this._offsetMatrixLocation,!1,C),this._colorLocation=d.getUniformLocation(this.program,"u_color"),d.uniform1i(d.getUniformLocation(this.program,"lastMask"),4),this._weixin){let y=this.context.createShader(d.FRAGMENT_SHADER,`#version 300 es +`))}removeBandwidthRestriction(e){return e.replace(/b=AS:.*\r\n/,"").replace(/b=TIAS:.*\r\n/,"")}removeVideoOrientation(e){return e.replace(/urn:3gpp:video-orientation/,"")}connect(){return WA(this,null,function*(){try{yield this.exchangeSDP(),yield this.waitForPeerConnectionConnected()}catch(e){throw this.closePeerConnection(!0),this.uninstallEvents(),e}})}exchangeSDP(){return WA(this,null,function*(){try{yield this.createOffer(),this._log.info("createOffer success, sending offer to remote server"),yield this.doExchangeSDP()}catch(e){throw e}})}createOffer(){return WA(this,null,function*(){try{let e=yield this._peerConnection.createOffer(s8);yield this.setOffer(e),e.sdp&&this.updateSSRC(e.sdp)}catch(e){throw e}})}doExchangeSDP(){let e={command:Zz,responseCommand:ls.PUBLISH_RESULT,data:{type:this._peerConnection.localDescription.type,sdp:this.removeVideoOrientation(this._peerConnection.localDescription.sdp),screen:this.localMainVideoTrack instanceof WM||this.localAuxVideoTrack instanceof WM,state:this._room.publishState,constraintConfig:this._mediaSettings},enableLog:!1};return this._log.debug("sending sdp offer: ".concat(e.data.sdp)),this._signalChannel.sendWaitForResponse(e).then(o=>{let{code:a,message:l,data:d}=o.data;return a===0?this.acceptAnswer(d):this.checkPublishResultCode(a,l)})}setSDPDirection(e,o){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"all",l=uc(e);return l.media.forEach(d=>{(a==="all"||d.type===a)&&(d.direction=o)}),_y(l)}acceptAnswer(e){return WA(this,null,function*(){var o,a,l,d,h;try{let y;if(this._publishingLocalAudioTrack||this._publishingLocalVideoTrack||this.isMainStreamPublished){let k=((o=this._publishingLocalVideoTrack)==null?void 0:o.profile.bitrate)||((a=this.localMainVideoTrack)==null?void 0:a.profile.bitrate),V=((l=this._publishingLocalAudioTrack)==null?void 0:l.profile.bitrate)||((d=this.localMainAudioTrack)==null?void 0:d.profile.bitrate);if(k){let J=this._isPublishingAux?YA.AUXILIARY:YA.BIG;y=yield this.setBandwidth({bandwidth:k,type:YA.VIDEO,sdp:y,videoType:J})}V&&(y=yield this.setBandwidth({bandwidth:V,type:YA.AUDIO,sdp:y}))}if(y=this.removeVideoOrientation(e.sdp),(h=this._publishingLocalVideoTrack)!=null&&h.small){let{smallStreamConfig:k}=this._room;y=yield this.setBandwidth({bandwidth:this._publishingLocalVideoTrack.small.bitrate||k.bitrate,type:YA.VIDEO,videoType:YA.SMALL,sdp:y})}let S={type:e.type,sdp:y};yield this.setAnswer(S),this._log.debug("accepted answer: ".concat(y))}catch(y){throw this._log.error("failed to accept remote answer ".concat(y)),y}})}sendMutedFlag(e){e===this.localAuxAudioTrack||e===this.localAuxVideoTrack||(this._log.info("send muted state: ".concat(JSON.stringify(this._room.muteState))),this._signalChannel.send(zz,this._room.muteState))}getIsReconnecting(){return this._isReconnecting}reconnect(){return WA(this,null,function*(){if(!(GI(gX.prototype,this,"beforeReconnect").call(this)<0))try{yield this._signalChannel.sendWaitForResponse({command:N1,responseCommand:ls.UNPUBLISH_RESULT,enableLog:!1}),this.closePeerConnection(),this.initialize(),this.isMainStreamPublished&&(yield this.publish({localAudioTrack:this.localMainAudioTrack,localVideoTrack:this.localMainVideoTrack,isAuxiliary:!1})),this.isAuxStreamPublished&&(yield this.publish({localAudioTrack:this.localAuxAudioTrack,localVideoTrack:this.localAuxVideoTrack,isAuxiliary:!0})),this._log.warn("reconnect() uplink reconnect successfully"),this.stopReconnection()}catch{let o=Tp(this._reconnectionCount);this._log.warn("reconnect() timeout, try again after ".concat(o/1e3,"s")),this._reconnectionTimer=setTimeout(()=>{this.clearReconnectionTimer(),this.reconnect()},o)}})}handleConnectionStateChange(e){e.state==="CONNECTED"&&(this.localMainVideoTrack||this._publishingLocalVideoTrack&&!this._isPublishingAux)&&F.emit(nA.SEND_FIRST_VIDEO_FRAME,{room:this._room})}updateSSRC(e){try{uc(e).media.forEach((o,a)=>{if(o.type===YA.AUDIO){let l=o.ssrcs&&o.ssrcs[0];l&&(this.ssrc.audio=Number(l.id))}else{if(this._sdpSemantics===E0&&o.ssrcGroups)return void o.ssrcGroups.forEach((d,h)=>{let y=Number(d.ssrcs.split(" ")[0]);h===0?this.ssrc.video=y:h===1&&(this.ssrc.small=y)});let l=o.ssrcs&&o.ssrcs[0];if(!l)return;switch(a){case 1:this.ssrc.video=Number(l.id);break;case 2:this.ssrc.small=Number(l.id);break;case 3:this.ssrc.auxiliary=Number(l.id)}}})}catch{}}getVideoTrackId(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:YA.VIDEO;if(this._peerConnection){let o=this._peerConnection.getSenders();if(e===YA.AUXILIARY&&o[3]&&o[3].track)return o[3].track.id;if(e===YA.VIDEO&&o[1]&&o[1].track)return o[1].track.id}if(this.localMainVideoTrack&&e===YA.VIDEO){let o=this.localMainVideoTrack.mediaTrack;if(o)return o.id}if(this.localAuxVideoTrack&&e===YA.AUXILIARY){let o=this.localAuxVideoTrack.mediaTrack;if(o)return o.id}return""}getSSRC(){return this.ssrc}checkPublishResultCode(e,o){if(e!==0)throw e===d0?(this._log.error(cc.NOT_SUPPORTED_H264ENCODE),new gi({code:Ct.NOT_SUPPORTED_H264,message:Xo({key:vo.NOT_SUPPORTED_H264ENCODE})})):new gi({code:Ct.UNKNOWN,message:Xo({key:vo.SIGNAL_RESPONSE_FAILED,data:{signalResponse:ls.PUBLISH_RESULT,code:e,message:o}})})}};hi([jr(A=>function(){for(var e=arguments.length,o=new Array(e),a=0;a{let h=y=>{this._emitter.off("closed",h),d(new gi({code:Ct.API_CALL_ABORTED,message:Xo({key:vo.CONNECTION_ABORTED,data:y})}))};this._emitter.on("closed",h),A.apply(this,o).then(l,d).finally(()=>{this._emitter.off("closed",h)})})})],k1.prototype,"publish"),hi([Sy(521715,!1)],k1.prototype,"unpublish"),hi([qM(sm.prototype.afterConnect),w5(sm.prototype.beforeConnect)],k1.prototype,"connect");var L1=k1,YoA=class{constructor(A,e){this.room=A,Y(this,"_log"),Y(this,"_prevReportTime",0),Y(this,"_prevReport",{}),Y(this,"_prevStats",null),Y(this,"_prevEncoderImplementation",""),Y(this,"_prevAuxEncoderImpl",""),Y(this,"_prevQualityLimitationReason",""),Y(this,"_prevAuxQualityLimitationReason",""),Y(this,"_prevDecoderImplementationMap",new Map),Y(this,"_decodeMap",new Map),Y(this,"_prevQpSum",0),Y(this,"_prevAuxQpSum",0),Y(this,"totalBytesSent",0),Y(this,"totalBytesReceived",0),Y(this,"_spcStats",null),this._log=e}get statInterval(){return this._prevReportTime===0?2:(Date.now()-this._prevReportTime)/1e3}getSenderStats(A){return WA(this,null,function*(){var e,o,a,l,d,h,y;let S={audio:{bytesSent:0,packetsSent:0,audioLevel:0,totalAudioEnergy:0},video:{bytesSent:0,packetsSent:0,framesEncoded:0,frameWidth:0,frameHeight:0,framesSent:0,fpsCapture:0},small:{bytesSent:0,packetsSent:0,framesEncoded:0,frameWidth:0,frameHeight:0,framesSent:0,fpsCapture:0},auxiliary:{bytesSent:0,packetsSent:0,framesEncoded:0,frameWidth:0,frameHeight:0,framesSent:0,fpsCapture:0},rtt:0},k=A.getPeerConnection(),V=A.getSSRC();if(k)try{if((this._spcStats||(yield k.getStats())).forEach(J=>{var cA,CA,MA,ie,pe,qe,we,Di,Le,Qt,Bi,Si,Jo;let Ho,Qn;if(J.type==="outbound-rtp")if((J.mediaType||J.kind)===YA.VIDEO){if(J.ssrc===V.video?(Ho=YA.VIDEO,Qn=A.localMainVideoTrack):J.ssrc===V.small?Ho=YA.SMALL:J.ssrc===V.auxiliary&&(Qn=A.localAuxVideoTrack,Ho=YA.AUXILIARY),!Ho)return;S[Ho].bytesSent=J.bytesSent,S[Ho].packetsSent=J.packetsSent,S[Ho].framesEncoded=J.framesEncoded,Ke(J.keyFramesEncoded)||(S[Ho].keyFramesEncoded=J.keyFramesEncoded),Ke(J.nackCount)||(S[Ho].nackCount=J.nackCount),Ke(J.pliCount)||(S[Ho].pliCount=J.pliCount),Ke(J.retransmittedPacketsSent)||(S[Ho].retransmittedPacketsSent=J.retransmittedPacketsSent),Ke(J.totalEncodeTime)||(S[Ho].totalEncodeTime=J.totalEncodeTime),Ke(J.totalPacketSendDelay)||(S[Ho].totalPacketSendDelay=J.totalPacketSendDelay);let qo=0;if(!Ke(J.qpSum)&&!Ke(J.framesEncoded)&&J.framesEncoded>0){let Ns=J.qpSum,pg=J.framesEncoded,ya=Ho===YA.VIDEO?this._prevQpSum:this._prevAuxQpSum,Qu=Ho===YA.VIDEO?((CA=(cA=A.localMainVideoTrack)==null?void 0:cA.stat)==null?void 0:CA.framesEncoded)||0:((ie=(MA=A.localAuxVideoTrack)==null?void 0:MA.stat)==null?void 0:ie.framesEncoded)||0;if(pg>Qu&&Ns>ya){let DL=Ns-ya,D_=pg-Qu;qo=Math.round(DL/D_),qo>35&&A.videoCodec==="h264"&&this._log.warn("".concat(Ho===YA.AUXILIARY?"aux ":"","video encoder QP is high: ").concat(qo,", resolution: ").concat(J.frameWidth,"x").concat(J.frameHeight,", codec: ").concat(A.videoCodec,", "))}Ho===YA.VIDEO?this._prevQpSum=Ns:Ho===YA.AUXILIARY&&(this._prevAuxQpSum=Ns)}if(!Ke(J.encoderImplementation)&&(Ho===YA.VIDEO&&this._prevEncoderImplementation!==J.encoderImplementation||Ho===YA.AUXILIARY&&this._prevAuxEncoderImpl!==J.encoderImplementation)){let Ns=2,pg=this._prevEncoderImplementation;Ho===YA.AUXILIARY&&(Ns=7,pg=this._prevAuxEncoderImpl),F.emit("262",{userId:A.userId,streamType:Ns,prevImplementation:pg,implementation:J.encoderImplementation,codec:A.videoCodec,isHWCodec:J.powerEfficientEncoder}),this[Ho===YA.VIDEO?"_prevEncoderImplementation":"_prevAuxEncoderImpl"]=J.encoderImplementation,Qn?.log.info("encoderImplementation change to ".concat(J.encoderImplementation,"(").concat(A.videoCodec,") HWEncoder: ").concat(J.powerEfficientEncoder))}J.ssrc===V.video?!Ke(J.qualityLimitationReason)&&J.bytesSent!==0&&this._prevQualityLimitationReason!==J.qualityLimitationReason&&(Qn?.log.info("qualityLimitationReason change to ".concat(J.qualityLimitationReason)),F.emit("263",{userId:A.userId,reason:J.qualityLimitationReason,prevReason:this._prevQualityLimitationReason,streamType:2,isQosClearFirst:(pe=A.localMainVideoTrack)==null?void 0:pe.isQosClearFirst}),this._prevQualityLimitationReason=J.qualityLimitationReason):J.ssrc===V.auxiliary&&!Ke(J.qualityLimitationReason)&&J.bytesSent!==0&&this._prevAuxQualityLimitationReason!==J.qualityLimitationReason&&(this._log.info("aux qualityLimitationReason change to ".concat(J.qualityLimitationReason)),F.emit("263",{userId:A.userId,reason:J.qualityLimitationReason,prevReason:this._prevAuxQualityLimitationReason,streamType:7,isQosClearFirst:(qe=A.localAuxVideoTrack)==null?void 0:qe.isQosClearFirst}),this._prevAuxQualityLimitationReason=J.qualityLimitationReason)}else S.audio.bytesSent=J.bytesSent,S.audio.packetsSent=J.packetsSent;else if(J.type==="candidate-pair")GM(J)&&(this.totalBytesSent=J.bytesSent,kn(J.currentRoundTripTime)&&(S.rtt=Math.floor(1e3*J.currentRoundTripTime)));else if(J.type==="media-source"){if(J.kind===YA.AUDIO)S.audio.audioLevel=J.audioLevel||0,S.audio.totalAudioEnergy=J.totalAudioEnergy||0,J.echoReturnLoss,Ke((Le=(Di=(we=A.localMainAudioTrack)==null?void 0:we.sourceTrack)==null?void 0:Di.stats)==null?void 0:Le.deliveredFramesDuration)?J.totalSamplesDuration&&(S.audio.totalSamplesDuration=J.totalSamplesDuration):S.audio.totalSamplesDuration=A.localMainAudioTrack.sourceTrack.stats.deliveredFramesDuration/1e3;else if(J.kind===YA.VIDEO)if(J.trackIdentifier===A.getVideoTrackId(YA.VIDEO))if((Si=(Bi=(Qt=A.localMainVideoTrack)==null?void 0:Qt.sourceTrack)==null?void 0:Bi.stats)!=null&&Si.deliveredFrames){let{deliveredFrames:qo}=A.localMainVideoTrack.sourceTrack.stats;S.video.framesCaptured=qo,A.localMainVideoTrack.stat.framesCaptured&&A.localMainVideoTrack.stat.framesCaptured>0&&qo>=A.localMainVideoTrack.stat.framesCaptured?S.video.fpsCapture=Math.floor((qo-A.localMainVideoTrack.stat.framesCaptured)/this.statInterval):S.video.fpsCapture=J.framesPerSecond}else S.video.fpsCapture=J.framesPerSecond;else J.trackIdentifier===A.getVideoTrackId(YA.AUXILIARY)?S.auxiliary.fpsCapture=J.framesPerSecond:S.small.fpsCapture=J.framesPerSecond}if(!Ke(J.audioLevel)&&(Jo=A.localMainAudioTrack)!=null&&Jo.mediaTrack&&J.trackIdentifier===A.localMainAudioTrack.mediaTrack.id&&(S.audio.audioLevel=J.audioLevel||0),!Ke(J.frameWidth)){let qo=YA.SMALL;J.trackIdentifier===A.getVideoTrackId(YA.VIDEO)||J.ssrc===V.video?qo=YA.VIDEO:(J.trackIdentifier===A.getVideoTrackId(YA.AUXILIARY)||J.ssrc===V.auxiliary)&&(qo=YA.AUXILIARY),S[qo].frameWidth=J.frameWidth,S[qo].frameHeight=J.frameHeight,S[qo].framesSent=J.framesSent}}),A.localMainAudioTrack||A.getRoom().capturedLocalMainAudioTrack){let J=A.localMainAudioTrack||A.getRoom().capturedLocalMainAudioTrack;if(J){let cA=J.getInternalAudioLevel(),CA=J.getInternalAudioLevelAfter3A();S.audio.audioCaptureEnergyAfter3a=CA,S.audio.micAudioLevel=cA,S.audio.audioLevel===0&&A.localMainAudioTrack&&(S.audio.audioLevel=CA??cA),!A.localMainAudioTrack&&!Ke((o=(e=J.sourceTrack)==null?void 0:e.stats)==null?void 0:o.deliveredFramesDuration)&&(S.audio.totalSamplesDuration=J.sourceTrack.stats.deliveredFramesDuration/1e3)}}if(!A.localMainVideoTrack&&A.getRoom().capturedLocalMainVideoTrack){let J=A.getRoom().capturedLocalMainVideoTrack;if((l=(a=J?.sourceTrack)==null?void 0:a.stats)!=null&&l.deliveredFrames){let{deliveredFrames:cA}=J.sourceTrack.stats;S.video.framesCaptured=cA,J.stat.framesCaptured&&J.stat.framesCaptured>0&&cA>=J.stat.framesCaptured&&(S.video.fpsCapture=Math.floor((cA-J.stat.framesCaptured)/this.statInterval)),J.stat.framesCaptured=cA}}if(!A.localAuxVideoTrack&&A.getRoom().capturedLocalAuxVideoTrack){let J=A.getRoom().capturedLocalAuxVideoTrack;if((h=(d=J?.sourceTrack)==null?void 0:d.stats)!=null&&h.deliveredFrames){let{deliveredFrames:cA}=J.sourceTrack.stats;S.auxiliary.framesCaptured=cA,J.stat.framesCaptured&&J.stat.framesCaptured>0&&cA>=J.stat.framesCaptured&&(S.auxiliary.fpsCapture=Math.floor((cA-J.stat.framesCaptured)/this.statInterval)),J.stat.framesCaptured=cA}}this.totalBytesSent||(this.totalBytesSent+=S.audio.bytesSent+S.video.bytesSent+S.auxiliary.bytesSent),Object.keys(S).forEach(J=>{J===YA.AUDIO?(A.localMainAudioTrack&&(A.localMainAudioTrack.stat=S[J]),A.localAuxAudioTrack&&(A.localAuxAudioTrack.stat=S[J])):J===YA.VIDEO?A.localMainVideoTrack&&(A.localMainVideoTrack.stat=S[J]):J===YA.AUXILIARY&&A.localAuxVideoTrack&&(A.localAuxVideoTrack.stat=S[J])})}catch(J){this._log.warn("failed to getStats on sender connection ".concat(J))}return S.rtt===0&&(S.rtt=((y=this.room.networkQuality)==null?void 0:y.uplinkRTT)||0),S})}getReceiverStats(A){return WA(this,null,function*(){var e,o,a;let l={tinyId:A.tinyId,userId:A.userId,rtt:0,hasAudio:!1,hasVideo:!1,hasAuxiliary:!1,isSmallSubscribed:!1,avSyncDelay:0,audio:{bytesReceived:0,packetsReceived:0,packetsLost:0,p2pDelay:0,totalJitter:0,totalJitterCount:0,audioLevel:0,totalAudioEnergy:0,insertedSamplesForDeceleration:0,removedSamplesForAcceleration:0},video:{bytesReceived:0,packetsReceived:0,packetsLost:0,framesReceived:0,framesDecoded:0,frameWidth:0,frameHeight:0,fpsDecoded:0,freezeCount:0,totalFreezesDuration:0,totalJitter:0,totalJitterCount:0,p2pDelay:0,codec:""},auxiliary:{bytesReceived:0,packetsReceived:0,packetsLost:0,framesReceived:0,framesDecoded:0,frameWidth:0,frameHeight:0,fpsDecoded:0,totalJitter:0,totalJitterCount:0,p2pDelay:0,codec:""}},d=A.getPeerConnection();if(d)try{let{ssrc:h}=A,{muteState:y,subscribeState:S}=A;(this._spcStats||(yield d.getStats())).forEach(J=>{var cA,CA;if(J.type==="codec"&&this._decodeMap.set(J.id,J),J.type==="inbound-rtp"){let MA=(J.mediaType||J.kind)===YA.AUDIO;if(MA){if(J.ssrc!==h.audio||!y.hasAudio)return;l.audio.packetsReceived=J.packetsReceived,l.audio.bytesReceived=J.bytesReceived,l.audio.packetsLost=J.packetsLost,J.insertedSamplesForDeceleration&&(l.audio.insertedSamplesForDeceleration=J.insertedSamplesForDeceleration),J.removedSamplesForAcceleration&&(l.audio.removedSamplesForAcceleration=J.removedSamplesForAcceleration),J.totalSamplesDuration&&(l.audio.totalSamplesDuration=J.totalSamplesDuration),J.totalSamplesReceived&&(l.audio.totalSamplesReceived=J.totalSamplesReceived),J.concealedSamples&&(l.audio.concealedSamples=J.concealedSamples),J.silentConcealedSamples&&(l.audio.silentConcealedSamples=J.silentConcealedSamples);let{remoteAudioTrack:ie}=A;ie.stat.packetsReceived=J.packetsReceived,ie.stat.bytesReceived=J.bytesReceived,ie.stat.packetsLost=J.packetsLost,l.audio.p2pDelay=ie.stat.end2EndDelay,l.hasAudio=!0}else{if(or&&J.bytesReceived===0)return;let ie;J.ssrc===h.video&&y.hasVideo&&(l.video.packetsReceived=J.packetsReceived,l.video.bytesReceived=J.bytesReceived,l.video.packetsLost=J.packetsLost,l.video.framesReceived=J.framesReceived,l.video.framesDecoded=J.framesDecoded,l.video.fpsDecoded=J.framesPerSecond,l.hasVideo=!0,A.videoCodec=Cl[(cA=this._decodeMap.get(J.codecId))==null?void 0:cA.mimeType.split("/")[1]]||"h264",l.video.codec=A.videoCodec,ie=A.remoteVideoTrack,y.hasSmall&&S.smallVideo&&(l.isSmallSubscribed=!0),J.decoderImplementation&&(!this._prevDecoderImplementationMap.has(l.userId)||this._prevDecoderImplementationMap.get(l.userId)!==J.decoderImplementation)&&(ie.log.info("decoderImplementation change to ".concat(J.decoderImplementation,"(").concat(A.videoCodec,") HWDecoder: ").concat(J.powerEfficientDecoder)),F.emit("262",{userId:this.room.userId,remoteUserId:l.userId,prevImplementation:this._prevDecoderImplementationMap.get(l.userId),implementation:J.decoderImplementation,codec:A.videoCodec,isHWCodec:J.powerEfficientDecoder}),this._prevDecoderImplementationMap.set(l.userId,J.decoderImplementation)),Ke(J.keyFramesDecoded)||ie.updateKeyFramesDecoded(J.keyFramesDecoded)),J.ssrc===h.auxiliary&&y.hasAuxiliary&&(l.auxiliary.packetsReceived=J.packetsReceived,l.auxiliary.bytesReceived=J.bytesReceived,l.auxiliary.packetsLost=J.packetsLost,l.auxiliary.framesReceived=J.framesReceived,l.auxiliary.framesDecoded=J.framesDecoded,l.auxiliary.fpsDecoded=J.framesPerSecond,ie=A.remoteAuxiliaryTrack,l.auxiliary.p2pDelay=ie.stat.end2EndDelay,l.hasAuxiliary=!0,l.video.codec=((CA=this._decodeMap.get(J.codecId))==null?void 0:CA.mimeType.split("/")[1].toLowerCase())||"h264",Ke(J.keyFramesDecoded)||ie.updateKeyFramesDecoded(J.keyFramesDecoded)),ie&&(ie.stat.packetsReceived=J.packetsReceived,ie.stat.bytesReceived=J.bytesReceived,ie.stat.packetsLost=J.packetsLost,ie.stat.framesReceived=J.framesReceived,ie.stat.framesDecoded=J.framesDecoded,J.jitterBufferDelay&&(ie.stat.jitterBufferDelay=Math.floor(J.jitterBufferDelay/J.jitterBufferEmittedCount*1e3)),l.video.p2pDelay=ie.stat.end2EndDelay)}J.jitterBufferDelay&&(MA?(l.audio.totalJitter=J.jitterBufferDelay,l.audio.totalJitterCount=J.jitterBufferEmittedCount,l.audio.estimatedPlayoutTimestamp=J.estimatedPlayoutTimestamp):J.ssrc===h.video&&y.hasVideo?(l.video.totalJitter=J.jitterBufferDelay,l.video.totalJitterCount=J.jitterBufferEmittedCount,l.video.estimatedPlayoutTimestamp=J.estimatedPlayoutTimestamp):J.ssrc===h.auxiliary&&y.hasAuxiliary&&(l.auxiliary.totalJitter=J.jitterBufferDelay,l.auxiliary.totalJitterCount=J.jitterBufferEmittedCount))}else J.type==="candidate-pair"&&GM(J)&&(this.totalBytesReceived=J.bytesReceived,kn(J.currentRoundTripTime)&&(l.rtt=Math.floor(1e3*J.currentRoundTripTime)));Ke(J.frameWidth)||((J.trackIdentifier===A.getMainStreamVideoTrackId()||J.ssrc===h.video)&&(l.video.frameWidth=J.frameWidth,l.video.frameHeight=J.frameHeight,A.remoteVideoTrack.stat.frameWidth=J.frameWidth,A.remoteVideoTrack.stat.frameHeight=J.frameHeight),(J.trackIdentifier===A.getAuxStreamVideoTrackId()||J.ssrc===h.auxiliary)&&(l.auxiliary.frameWidth=J.frameWidth,l.auxiliary.frameHeight=J.frameHeight,A.remoteAuxiliaryTrack.stat.frameWidth=J.frameWidth,A.remoteAuxiliaryTrack.stat.frameHeight=J.frameHeight)),!Ke(J.audioLevel)&&A.muteState.audioAvailable&&A.remoteAudioTrack.mediaTrack&&J.trackIdentifier===A.remoteAudioTrack.mediaTrack.id&&(l.audio.audioLevel=J.audioLevel||0,l.audio.totalAudioEnergy=J.totalAudioEnergy||0)}),l.audio.audioLevel===0&&A.muteState.audioAvailable&&(l.audio.audioLevel=A.remoteAudioTrack.getInternalAudioLevel()||0),this.totalBytesReceived||(this.totalBytesReceived+=l.audio.bytesReceived+l.video.bytesReceived+l.auxiliary.bytesReceived),Ke((e=A.remoteVideoTrack.player.stat)==null?void 0:e.fps)||(l.video.fpsRender=A.remoteVideoTrack.player.stat.fps),Ke((o=A.remoteAuxiliaryTrack.player.stat)==null?void 0:o.fps)||(l.auxiliary.fpsRender=A.remoteAuxiliaryTrack.player.stat.fps);let k=l.audio.estimatedPlayoutTimestamp,V=l.video.estimatedPlayoutTimestamp;if(k&&V&&A.remoteAudioTrack.isAvailable&&A.remoteVideoTrack.isAvailable){let J=V-k;Math.abs(J)<=1e4&&(l.avSyncDelay=J,Math.abs(J)>150&&this._log.warn("av sync delay",J))}}catch(h){this._log.warn("failed to getStats on receiver connection ".concat(h))}return l.rtt===0&&(l.rtt=((a=this.room.networkQuality)==null?void 0:a.uplinkRTT)||0),l})}getStats(A,e){return WA(this,null,function*(){let o,a={},l=[];if(this.room.singlePC){let d=this.room.singlePC.getPeerConnection();if(!d)return{senderStats:a,receiverStats:l};let h=ko(),y=yield d.getStats(),S=ko();S-h>2e3&&this._log.warn("getStats cost ".concat(S-h,"ms"));let k=[],V=new Set(["inbound-rtp","outbound-rtp","track","candidate-pair","media-source","codec","media-playout"]);y.forEach(J=>V.has(J.type)&&k.push(J)),this._spcStats=k}A&&(a=yield this.getSenderStats(A));for(let[d,h]of e){let y=yield this.getReceiverStats(h);y&&l.push(y)}return e.size&&(o=this.getMediaPlayoutStats(this._spcStats)),{senderStats:a,receiverStats:l,mediaPlayoutStats:o}})}getDifferenceValue(A,e){if(im(A))return e;let o=e-A;return o<0?0:o}prepareReport(A){let{stats:e,report:o,freezeMap:a,uplinkConnection:l}=A;var d,h,y,S,k,V,J,cA,CA;if(!im(e.senderStats)){let Le={uint32_audio_level:e.senderStats.audio.audioLevel*id,uint32_audio_energy:1e6*(e.senderStats.audio.totalAudioEnergy||0),uint32_audio_codec_bitrate:e.senderStats.audio.bytesSent};e.senderStats.audio.micAudioLevel&&(Le.uint32_mic_audio_level=e.senderStats.audio.micAudioLevel*id),Ke(e.senderStats.audio.audioCaptureEnergyAfter3a)||(Le.uint32_audio_capture_energy_after3a=e.senderStats.audio.audioCaptureEnergyAfter3a*id),e.senderStats.audio.totalSamplesDuration&&(o.msg_device_info.uint32_audio_capture_cost=e.senderStats.audio.totalSamplesDuration);let Qt=[];if(e.senderStats.video.bytesSent){let Si={uint32_video_stream_type:2,uint32_video_codec_fps:e.senderStats.video.framesSent,uint32_video_capture_fps:e.senderStats.video.fpsCapture,uint32_video_width:e.senderStats.video.frameWidth,uint32_video_height:e.senderStats.video.frameHeight,uint32_video_codec_bitrate:e.senderStats.video.bytesSent,uint32_video_enc_fps:e.senderStats.video.framesEncoded,uint32_key_frame_count:e.senderStats.video.keyFramesEncoded,uint32_nack_count:e.senderStats.video.nackCount,uint32_pli_count:e.senderStats.video.pliCount,uint32_encode_cost:1e3*(e.senderStats.video.totalEncodeTime||0),uint32_send_packet_cost:1e3*(e.senderStats.video.totalPacketSendDelay||0),uint32_video_arq_packets:e.senderStats.video.retransmittedPacketsSent};Qt.push(Si)}if(e.senderStats.small.bytesSent){let Si={uint32_video_stream_type:3,uint32_video_codec_fps:e.senderStats.small.framesSent||0,uint32_video_capture_fps:e.senderStats.small.fpsCapture||0,uint32_video_width:e.senderStats.small.frameWidth||0,uint32_video_height:e.senderStats.small.frameHeight||0,uint32_video_codec_bitrate:e.senderStats.small.bytesSent,uint32_video_enc_fps:e.senderStats.small.framesEncoded||0,uint32_key_frame_count:e.senderStats.small.keyFramesEncoded,uint32_nack_count:e.senderStats.small.nackCount,uint32_pli_count:e.senderStats.small.pliCount,uint32_encode_cost:1e3*(e.senderStats.small.totalEncodeTime||0),uint32_send_packet_cost:1e3*(e.senderStats.small.totalPacketSendDelay||0),uint32_video_arq_packets:e.senderStats.small.retransmittedPacketsSent};Qt.push(Si)}if(e.senderStats.auxiliary.bytesSent){let Si={uint32_video_stream_type:7,uint32_video_codec_fps:e.senderStats.auxiliary.framesSent||0,uint32_video_capture_fps:e.senderStats.auxiliary.fpsCapture||0,uint32_video_width:e.senderStats.auxiliary.frameWidth||0,uint32_video_height:e.senderStats.auxiliary.frameHeight||0,uint32_video_codec_bitrate:e.senderStats.auxiliary.bytesSent,uint32_video_enc_fps:e.senderStats.auxiliary.framesEncoded||0,uint32_key_frame_count:e.senderStats.auxiliary.keyFramesEncoded,uint32_nack_count:e.senderStats.auxiliary.nackCount,uint32_pli_count:e.senderStats.auxiliary.pliCount,uint32_encode_cost:1e3*(e.senderStats.auxiliary.totalEncodeTime||0),uint32_send_packet_cost:1e3*(e.senderStats.auxiliary.totalPacketSendDelay||0),uint32_video_arq_packets:e.senderStats.auxiliary.retransmittedPacketsSent};Qt.push(Si)}let Bi={uint32_bitrate:0,uint32_lost:0,uint32_rtt:e.senderStats.rtt};o.msg_up_stream_info={msg_audio_status:Le,msg_video_status:Qt,msg_network_status:Bi}}let{statInterval:MA}=this;o.msg_down_stream_info=[],e.receiverStats.forEach(Le=>{let Qt={msg_user_info:{str_identifier:Le.userId,uint64_tinyid:Le.tinyId},msg_network_status:{uint32_rtt:Le.rtt,uint32_bitrate:0,uint32_lost:0},msg_audio_status:{},msg_video_status:[]};if(Le.hasAudio){let Bi={uint32_audio_p2p_delay:Le.audio.p2pDelay,uint32_audio_cache_ms:Le.audio.totalJitter,uint32_audio_cache_ms_count:Le.audio.totalJitterCount,uint32_audio_codec_bitrate:Le.audio.bytesReceived,uint32_audio_total_bitrate:Le.audio.bytesReceived,uint32_audio_level:1e8*Le.audio.audioLevel,uint32_audio_energy:1e6*Le.audio.totalAudioEnergy,uint32_audio_receive:Le.audio.packetsReceived,uint32_audio_origin_lost:Le.audio.packetsLost};Qt.msg_audio_status=Bi}if(Le.hasVideo){let Bi=a.get("".concat(Le.userId,"_").concat(l0)),Si=Bi?Bi.duration:0,Jo={uint32_video_stream_type:Le.isSmallSubscribed?3:2,uint32_video_receive_fps:Le.video.framesReceived,uint32_video_width:Le.video.frameWidth,uint32_video_height:Le.video.frameHeight,uint32_video_codec_bitrate:Le.video.bytesReceived,uint32_video_receive:Le.video.packetsReceived,uint32_video_origin_lost:Le.video.packetsLost,uint32_video_block_time:Si,uint32_video_dec_fps:Le.video.framesDecoded,uint32_video_codec_fps:Le.video.fpsRender,uint32_video_cache_ms:Le.video.totalJitter,uint32_video_cache_ms_count:Le.video.totalJitterCount,uint32_video_p2p_delay:Le.video.p2pDelay,uint32_video_codec:Le.video.codec,int32_video_audio_relative_delay:Le.avSyncDelay+5e3};Qt.msg_video_status.push(Jo)}if(Le.hasAuxiliary){let Bi=a.get("".concat(Le.userId,"_").concat(bb)),Si=Bi?Bi.duration:0,Jo={uint32_video_stream_type:7,uint32_video_receive_fps:Le.auxiliary.framesReceived,uint32_video_width:Le.auxiliary.frameWidth,uint32_video_height:Le.auxiliary.frameHeight,uint32_video_codec_bitrate:Le.auxiliary.bytesReceived,uint32_video_receive:Le.auxiliary.packetsReceived+Le.auxiliary.packetsLost,uint32_video_origin_lost:Le.auxiliary.packetsLost,uint32_video_block_time:Si,uint32_video_dec_fps:Le.auxiliary.framesDecoded,uint32_video_codec_fps:Le.video.fpsRender,uint32_video_cache_ms:Le.auxiliary.totalJitter,uint32_video_cache_ms_count:Le.auxiliary.totalJitterCount,uint32_video_p2p_delay:Le.auxiliary.p2pDelay,uint32_video_codec:Le.video.codec};Qt.msg_video_status.push(Jo)}o.msg_down_stream_info.push(Qt)}),e.mediaPlayoutStats&&!im(e.mediaPlayoutStats)&&(e.mediaPlayoutStats.synthesizedSamplesDuration*=1e3,e.mediaPlayoutStats.totalSamplesDuration*=1e3);let ie=this._prevReport,pe=this._prevStats;if(this._prevReport=JSON.parse(JSON.stringify(o)),this._prevStats=JSON.parse(JSON.stringify(e)),o.msg_up_stream_info.msg_audio_status&&ie.msg_up_stream_info.msg_audio_status){let Le=ie.msg_up_stream_info.msg_audio_status,Qt=o.msg_up_stream_info.msg_audio_status;if(Le.uint32_audio_codec_bitrate===0)Qt.uint32_audio_codec_bitrate=0;else{let Bi=this.getDifferenceValue(Le.uint32_audio_codec_bitrate,Qt.uint32_audio_codec_bitrate);Qt.uint32_audio_codec_bitrate=Math.round(8*Bi/MA),o.msg_up_stream_info.msg_network_status.uint32_bitrate+=Qt.uint32_audio_codec_bitrate}(d=ie.msg_device_info)!=null&&d.uint32_audio_capture_cost?(o.msg_device_info.uint32_audio_capture_cost=2*Math.floor(1e3*this.getDifferenceValue(ie.msg_device_info.uint32_audio_capture_cost,o.msg_device_info.uint32_audio_capture_cost)/MA),o.msg_device_info.uint32_audio_capture_cost>0&&((y=l?.localMainAudioTrack)==null||y.updateAfter3aSilenceStartTime((h=e.senderStats.audio.audioCaptureEnergyAfter3a)!=null?h:e.senderStats.audio.micAudioLevel))):delete o.msg_device_info.uint32_audio_capture_cost}let qe=ie.msg_up_stream_info.msg_video_status;o.msg_up_stream_info.msg_video_status.forEach(Le=>{let Qt=qe.find(Qn=>Qn.uint32_video_stream_type===Le.uint32_video_stream_type);if(!Qt||Qt.uint32_video_codec_bitrate===0)return Le.uint32_video_codec_bitrate=0,Le.uint32_video_enc_fps=0,void(Le.uint32_video_codec_fps=0);let Bi=0,Si=0,Jo=0;Qt&&Le.uint32_video_codec_bitrate>=Qt.uint32_video_codec_bitrate&&(Bi=Qt.uint32_video_codec_bitrate,Si=Qt.uint32_video_enc_fps,Jo=Qt.uint32_video_codec_fps);let Ho=this.getDifferenceValue(Bi,Le.uint32_video_codec_bitrate);Le.uint32_video_codec_bitrate=Math.round(8*Ho/MA),o.msg_up_stream_info.msg_network_status.uint32_bitrate+=Le.uint32_video_codec_bitrate,Le.uint32_video_enc_fps=Math.round(this.getDifferenceValue(Si,Le.uint32_video_enc_fps)/MA),Le.uint32_video_codec_fps=Math.round(this.getDifferenceValue(Jo,Le.uint32_video_codec_fps)/MA),Qt.uint32_video_width===0&&Qt.uint32_video_height===0&&Qt.uint32_video_codec_fps===0&&(Le.uint32_video_codec_fps=Le.uint32_video_enc_fps),Ke(Qt.uint32_key_frame_count)||(Le.uint32_key_frame_count=Math.round(this.getDifferenceValue(Qt.uint32_key_frame_count,Le.uint32_key_frame_count))),Ke(Qt.uint32_nack_count)||(Le.uint32_nack_count=Math.round(this.getDifferenceValue(Qt.uint32_nack_count,Le.uint32_nack_count))),Ke(Qt.uint32_pli_count)||(Le.uint32_pli_count=Math.round(this.getDifferenceValue(Qt.uint32_pli_count,Le.uint32_pli_count))),Ke(Qt.uint32_video_arq_packets)||(Le.uint32_video_arq_packets=Math.round(this.getDifferenceValue(Qt.uint32_video_arq_packets,Le.uint32_video_arq_packets))),Ke(Qt.uint32_encode_cost)||(Le.uint32_encode_cost=Math.round(this.getDifferenceValue(Qt.uint32_encode_cost,Le.uint32_encode_cost)/MA)),Ke(Qt.uint32_send_packet_cost)||(Le.uint32_send_packet_cost=Math.round(this.getDifferenceValue(Qt.uint32_send_packet_cost,Le.uint32_send_packet_cost)/MA))});let we=ie.msg_down_stream_info;o.msg_down_stream_info=o.msg_down_stream_info.filter(Le=>we.find(Qt=>Qt.msg_user_info.uint64_tinyid===Le.msg_user_info.uint64_tinyid));let Di=o.msg_down_stream_info;if(Di.forEach(Le=>{let Qt=we.find(Bi=>Bi.msg_user_info.uint64_tinyid===Le.msg_user_info.uint64_tinyid);if(im(Le.msg_audio_status)||im(Qt.msg_audio_status))Le.msg_audio_status={};else{let Bi=Le.msg_audio_status,Si=Qt.msg_audio_status,Jo=this.getDifferenceValue(Si.uint32_audio_cache_ms_count,Bi.uint32_audio_cache_ms_count);delete Bi.uint32_audio_cache_ms_count,Bi.uint32_audio_cache_ms=Math.floor(1e3*this.getDifferenceValue(Si.uint32_audio_cache_ms,Bi.uint32_audio_cache_ms)/Jo)||0;let Ho=this.room.remotePublishedUserMap.get(Le.msg_user_info.str_identifier);Ho&&(Ho.remoteAudioTrack.stat.jitterBufferDelay=Bi.uint32_audio_cache_ms),Bi.uint32_audio_origin_lost=this.getDifferenceValue(Si.uint32_audio_origin_lost,Bi.uint32_audio_origin_lost),Bi.uint32_audio_receive=this.getDifferenceValue(Si.uint32_audio_receive,Bi.uint32_audio_receive),Bi.uint32_audio_receive+=Bi.uint32_audio_origin_lost;let Qn=this.getDifferenceValue(Si.uint32_audio_codec_bitrate,Bi.uint32_audio_codec_bitrate);Bi.uint32_audio_codec_bitrate=Math.round(8*Qn/MA),Bi.uint32_audio_total_bitrate=Math.round(8*Qn/MA)}if(Le.msg_video_status&&Qt.msg_video_status){let Bi=Qt.msg_video_status;Le.msg_video_status=Le.msg_video_status.filter(Si=>Bi.find(Jo=>Jo.uint32_video_stream_type===Si.uint32_video_stream_type)),Le.msg_video_status.forEach(Si=>{let Jo=Bi.find(D_=>D_.uint32_video_stream_type===Si.uint32_video_stream_type),Ho=Jo.uint32_video_receive,Qn=Jo.uint32_video_origin_lost,qo=Jo.uint32_video_codec_bitrate,Ns=Jo.uint32_video_receive_fps,pg=Jo.uint32_video_dec_fps;Si.uint32_video_origin_lost=this.getDifferenceValue(Qn,Si.uint32_video_origin_lost),Si.uint32_video_receive=this.getDifferenceValue(Ho,Si.uint32_video_receive)+Si.uint32_video_origin_lost;let ya=this.getDifferenceValue(qo,Si.uint32_video_codec_bitrate);Si.uint32_video_codec_bitrate=Math.round(8*ya/MA);let Qu=this.getDifferenceValue(Ns,Si.uint32_video_receive_fps);Si.uint32_video_receive_fps=Math.round(Qu/MA),Si.uint32_video_dec_fps=Math.round(this.getDifferenceValue(pg,Si.uint32_video_dec_fps)/MA);let DL=this.getDifferenceValue(Jo.uint32_video_cache_ms_count,Si.uint32_video_cache_ms_count);delete Si.uint32_video_cache_ms_count,Si.uint32_video_cache_ms=Math.floor(1e3*this.getDifferenceValue(Jo.uint32_video_cache_ms,Si.uint32_video_cache_ms)/DL)||0})}}),!Ke((S=pe?.mediaPlayoutStats)==null?void 0:S.totalSamplesDuration)&&!Ke((k=e.mediaPlayoutStats)==null?void 0:k.totalSamplesDuration)){let Le=2*Math.floor(this.getDifferenceValue((V=pe?.mediaPlayoutStats)==null?void 0:V.synthesizedSamplesDuration,(J=e.mediaPlayoutStats)==null?void 0:J.synthesizedSamplesDuration)/MA),Qt=2*Math.floor(this.getDifferenceValue((cA=pe?.mediaPlayoutStats)==null?void 0:cA.totalSamplesDuration,(CA=e.mediaPlayoutStats)==null?void 0:CA.totalSamplesDuration)/MA);o.msg_device_info.uint32_audio_play_cost=Qt-Le}return pe&&e.receiverStats.forEach(Le=>{if(Le.audio.concealedSamples&&Le.audio.totalSamplesReceived){let Qt=pe.receiverStats.find(Bi=>Bi.userId===Le.userId);if(Qt&&Qt.audio.concealedSamples&&Qt.audio.totalSamplesReceived){let Bi=(Le.audio.silentConcealedSamples||0)-(Qt.audio.silentConcealedSamples||0),Si=Le.audio.concealedSamples-Qt.audio.concealedSamples,Jo=Le.audio.totalSamplesReceived-Qt.audio.totalSamplesReceived,Ho=Math.floor((Si-Bi)/Jo*1e3*MA);if(Ho>1e3*MA/5){let Qn=Di.find(qo=>qo.msg_user_info.str_identifier===Le.userId);Qn&&(Qn.msg_audio_status.uint32_audio_block_time=Ho)}}}}),o.msg_down_stream_info.forEach(Le=>{Le.msg_video_status.forEach(Qt=>{Qt.uint32_video_codec_bitrate===0&&Qt.uint32_video_receive_fps===0&&(Qt.uint32_video_width=0,Qt.uint32_video_height=0)})}),o}getStatsReport(A){return WA(this,arguments,function(e){var o=this;let{uplinkConnection:a,downlinkConnections:l,freezeMap:d}=e;return function*(){let h={msg_device_info:{},msg_up_stream_info:{msg_audio_status:{uint32_audio_format:11,uint32_audio_sample_rate:0,uint32_audio_codec_bitrate:0,uint32_audio_receive:0,uint32_audio_origin_lost:0,uint32_audio_level:0,uint32_audio_energy:0,uint32_audio_capture_energy_after3a:0},msg_video_status:[],msg_network_status:{uint32_bitrate:0,uint32_rtt:0,uint32_lost:0}},msg_down_stream_info:[{msg_user_info:{str_identifier:"",uint64_tinyid:0},msg_audio_status:{uint32_audio_cache_ms:0,uint32_audio_format:11,uint32_audio_sample_rate:0,uint32_audio_codec_bitrate:0,uint32_audio_total_bitrate:0,uint32_audio_level:0,uint32_audio_energy:0,uint32_audio_receive:0,uint32_audio_origin_lost:0,uint32_audio_final_lost:0},msg_video_status:[{uint32_video_cache_ms:0,uint32_video_stream_type:0,uint32_video_receive_fps:0,uint32_video_width:0,uint32_video_height:0,uint32_video_codec_bitrate:0,uint32_video_receive:0,uint32_video_origin_lost:0,uint32_video_block_time:0,uint32_video_dec_fps:0,uint32_video_codec_fps:0}],msg_network_status:{uint32_bitrate:0,uint32_rtt:0,uint32_lost:0}}]},y=yield o.getStats(a,l);return JSON.stringify(o._prevReport)==="{}"&&(o._prevReport=JSON.parse(JSON.stringify(h))),o.prepareReport({stats:y,report:h,freezeMap:d,uplinkConnection:a}),o._prevReportTime=Date.now(),h}()})}getMediaPlayoutStats(A){let e;if(wa(A)){for(let o of A)if(o.type==="media-playout"){let{synthesizedSamplesDuration:a,totalSamplesDuration:l}=o;e={synthesizedSamplesDuration:a,totalSamplesDuration:l};break}return e}}reset(){this._prevReportTime=0,this._prevReport={},this._prevEncoderImplementation="",this._prevQualityLimitationReason="",this._prevDecoderImplementationMap=new Map,[this.room.localMainVideoTrack,this.room.capturedLocalMainVideoTrack,this.room.localAuxVideoTrack,this.room.capturedLocalAuxVideoTrack].forEach(A=>{A!=null&&A.stat&&(A.stat.framesCaptured=0)})}},VoA=gc(jl());function JoA(A){return new Promise(e=>WA(null,null,function*(){let o=setTimeout(()=>{e({totalCost:1e4,local:0,dns:0,tcp:0,tls:0,request:0,response:0})},1e4),a=Date.now(),l="https://".concat(A,"/?t=").concat(a);try{yield fetch(l)}catch{}clearTimeout(o);let d=function(h){let y={totalCost:0,local:0,redirect:0,httpCache:0,dns:0,tcp:0,tls:0,request:0,response:0};try{let S=performance.getEntriesByType("resource").reverse();for(let k of S)if(k.name===h){let V=Math.round(k.duration),J=Math.max(Math.round(k.domainLookupStart-k.startTime),0),cA=k.redirectStart>0?Math.max(Math.round(k.redirectEnd-k.redirectStart),0):0,CA=k.fetchStart>0?Math.max(Math.round(k.domainLookupStart-k.fetchStart),0):0,MA=Math.round(k.domainLookupEnd-k.domainLookupStart),ie=Math.round(k.requestStart-k.secureConnectionStart),pe=Math.round(k.secureConnectionStart-k.connectStart),qe=Math.round(k.responseStart-k.requestStart),we=Math.round(k.responseEnd-(k.responseStart||k.startTime));y=po(fi({},y),{totalCost:V,local:J,redirect:cA,httpCache:CA,dns:MA,tcp:pe,tls:ie,request:qe,response:we});break}}catch{}return y}(l);d.totalCost===0&&(d.totalCost=Date.now()-a),e(d)}))}var U1=class b_ extends VoA.default{constructor(e){let{signalChannel:o,room:a}=e;super(),Y(this,"_room"),Y(this,"_signalChannel"),Y(this,"_log"),Y(this,"uplinkRTT",0),Y(this,"uplinkLoss",0),Y(this,"downlinkRTT",0),Y(this,"downlinkLoss",0),Y(this,"pingResults",{}),Y(this,"_downlinkPrevStatMap",new Map),Y(this,"_downlinkLossAndRTTMap",new Map),Y(this,"_interval",-1),Y(this,"_uplinkNetworkQuality",0),Y(this,"_downlinkNetworkQuality",0),Y(this,"_uplinkQualityHistory",[]),Y(this,"_downlinkQualityHistory",[]),this._room=a,this._signalChannel=o,this._log=pA.createLogger({parent:a.getLogger(),id:"q",userId:this._room.userId,sdkAppId:this._room.sdkAppId}),this.initialize()}get uplinkNetworkQuality(){return this._uplinkNetworkQuality}set uplinkNetworkQuality(e){e!==this._uplinkNetworkQuality&&this._log.info("uplink ".concat(this.uplinkNetworkQuality," -> ").concat(e,", rtt: ").concat(this.uplinkRTT,", loss: ").concat(this.uplinkLoss," ws-rtt: ").concat(this._signalChannel.rtt)),this._uplinkNetworkQuality=e,this._uplinkQualityHistory.push(e),this._uplinkQualityHistory.length>b_.HISTORY_SIZE&&this._uplinkQualityHistory.shift()}get downlinkNetworkQuality(){return this._downlinkNetworkQuality}set downlinkNetworkQuality(e){if(e!==this._downlinkNetworkQuality){let{rtt:o,loss:a}=this.getAverageLossAndRTT([...this._downlinkLossAndRTTMap.values()]);this._log.info("downlink ".concat(this.downlinkNetworkQuality," -> ").concat(e,", rtt: ").concat(o,", loss: ").concat(a," ws-rtt: ").concat(this._signalChannel.rtt))}this._downlinkNetworkQuality=e,this._downlinkQualityHistory.push(e),this._downlinkQualityHistory.length>b_.HISTORY_SIZE&&this._downlinkQualityHistory.shift()}initialize(){this._signalChannel.on(ls.UPLINK_NETWORK_STATS,e=>{this.handleUplinkNetworkQuality(e)}),this._signalChannel.on(_j,this.handleSignalConnectionStateChange.bind(this)),this.start()}handleUplinkNetworkQuality(e){var o,a;if(e.data.code!==0)return;let l=e.data.data;if(l.delay&&this.updateDelay(l.delay),this._room.signalChannel&&l.wsRtt&&(this._room.signalChannel.rtt=l.wsRtt),!this._room.uplinkConnection)return this.uplinkNetworkQuality=0,this.uplinkLoss=0,void(this.uplinkRTT=0);let d=(a=(o=this._room)==null?void 0:o.uplinkConnection)==null?void 0:a.getPeerConnection();if(d&&this.isPeerConnectionDisconnected(d))return this.uplinkNetworkQuality=6,this.uplinkLoss=0,void(this.uplinkRTT=0);let h=l.expectAudPkg+l.expectVidPkg,y=l.recvAudPkg+l.recvVidPkg,S=h-y;h===0&&y===0||(this.uplinkLoss=S<=0?0:Math.round(S/h*100),this.uplinkRTT=l.rtt,this.uplinkNetworkQuality=this.getNetworkQuality(this.uplinkLoss,this.uplinkRTT))}handleDownlinkNetworkQuality(){return WA(this,null,function*(){if(this._room.remotePublishedUserMap.size===0)return void(this.downlinkNetworkQuality=0);let e=[...this._room.remotePublishedUserMap.values()],o=new Set,a=e.filter(y=>{let S=y.getPeerConnection();return!(!S||o.has(S))&&(o.add(S),!0)}),l=a.filter(y=>{var S;return((S=y.getPeerConnection())==null?void 0:S.connectionState)===ho.CONNECTED});if(a.filter(y=>this.isPeerConnectionDisconnected(y.getPeerConnection())).length===e.length)return void(this.downlinkNetworkQuality=6);for(let y=0;y{this.isPeerConnectionDisconnected(y)&&(this._downlinkPrevStatMap.delete(y),this._downlinkLossAndRTTMap.delete(y))}),this._downlinkLossAndRTTMap.size===0)return this.downlinkRTT=0,this.downlinkLoss=0,void(this.downlinkNetworkQuality=0);let{rtt:d,loss:h}=this.getAverageLossAndRTT([...this._downlinkLossAndRTTMap.values()]);this.downlinkRTT=d,this.downlinkLoss=h,this.downlinkNetworkQuality=this.getNetworkQuality(h,d)})}getStat(e){return WA(this,null,function*(){let o={rtt:0,totalPacketsLost:0,totalPacketsReceived:0};if(!e||!By())return o;let a=e.getReceivers();try{for(let l=0;l{d.type==="candidate-pair"&&kn(d.currentRoundTripTime)&&(o.rtt=Math.round(1e3*d.currentRoundTripTime)),d.type==="inbound-rtp"&&(d.mediaType===YA.AUDIO||d.mediaType===YA.VIDEO)&&(o.totalPacketsLost+=d.packetsLost,o.totalPacketsReceived+=d.packetsReceived)});return o.rtt===0&&(o.rtt=this.uplinkRTT),o}catch{return o}})}getAverageLossAndRTT(e){let o={rtt:0,loss:0};return Array.isArray(e)&&e.length>0&&(e.forEach(a=>{o.rtt+=a.rtt,o.loss+=a.loss}),Object.keys(o).forEach(a=>{o[a]=Math.round(o[a]/e.length)})),o}getNetworkQuality(e,o){return e>50||o>500?5:e>30||o>350?4:e>20||o>200?3:e>10||o>100?2:e>=0||o>=0?1:0}handleSignalConnectionStateChange(e){e.state==="DISCONNECTED"?(this.uplinkRTT=0,this.uplinkLoss=0,this.uplinkNetworkQuality=6):e.state==="CONNECTED"&&this.uplinkNetworkQuality===6&&(this.uplinkNetworkQuality=1)}handleUplinkConnectionStateChange(e){let{state:o}=e;o==="DISCONNECTED"?(this.uplinkLoss=0,this.uplinkRTT=0,this.uplinkNetworkQuality=6):o==="CONNECTED"&&this.uplinkNetworkQuality===6&&(this.uplinkNetworkQuality=5)}isPeerConnectionDisconnected(e){return!(!e||e.connectionState!==ho.DISCONNECTED&&e.connectionState!==ho.FAILED&&e.connectionState!==ho.CLOSED)}setUplinkConnection(e){this._room.uplinkConnection=e,this._room.uplinkConnection?this._room.uplinkConnection.on("connection-state-changed",this.handleUplinkConnectionStateChange.bind(this)):(this.uplinkNetworkQuality=0,this.uplinkRTT=0,this.uplinkLoss=0)}start(){this._interval===-1?(this._log.debug("start network quality calculating"),this._interval=Gr.run("ric",()=>{var e;this.handleDownlinkNetworkQuality();let o=[...this._downlinkLossAndRTTMap.values()];F.emit(nA.NETWORK_QUALITY,{room:this._room,uplink:{rtt:this.uplinkRTT,loss:this.uplinkLoss},downlinks:o});let a=(e=this._room.scheduleResult.config)==null?void 0:e.pingDomainInfo,l={uplinkNetworkQuality:this.uplinkNetworkQuality,downlinkNetworkQuality:this.downlinkNetworkQuality,uplinkRTT:this.uplinkRTT,uplinkLoss:this.uplinkLoss,downlinkRTT:this.downlinkRTT,downlinkLoss:this.downlinkLoss};a&&(l=po(fi({},l),{pingResults:this.uplinkRTT>a.rttThreshold||this.downlinkRTT>a.rttThreshold?this.pingResults:{}})),this.emit(b_.EVENT_NETWORK_QUALITY,l);let d=Date.now();if(a&&(this.uplinkRTT>a.rttThreshold||this.downlinkRTT>a.rttThreshold)&&d-b_.lastPingTime>1e3*a.interval){b_.lastPingTime=Date.now();let h=a.domain.map(y=>JoA(y).then(S=>({domain:y,cost:S.totalCost})));Promise.all(h).then(y=>{this.pingResults.isPoorNetwork=y.some(S=>S.cost>700),this.pingResults.timestamp=d,this.pingResults.data=y,y.forEach(S=>{si.addSuccessEvent({key:521718,cost:S.cost})}),this._log.warn("All ping results: ".concat(JSON.stringify(y)))}).catch(y=>{this._log.warn("Error during pinging domains: ".concat(y))})}},{delay:2e3})):this._log.info("network quality calculating is already started")}hadRecentBadUplink(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:2;return this._uplinkQualityHistory.some(o=>o>e)}hadRecentBadDownlink(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:2;return this._downlinkQualityHistory.some(o=>o>e)}stop(){this._log.debug("stopped"),this._interval!==-1&&(Gr.clearTask(this._interval),this._interval=-1),this._downlinkLossAndRTTMap.clear(),this._downlinkPrevStatMap.clear()}updateDelay(e){let{tinyIdToUserIdMap:o}=this._room;e.forEach(a=>{let{srcTinyId:l,videoDelay:d,audioDelay:h}=a,y=o.get(l);if(y){let S=this._room.remotePublishedUserMap.get(y);S?.setDelay({videoDelay:d,audioDelay:h})}})}};Y(U1,"HISTORY_SIZE",10),Y(U1,"EVENT_NETWORK_QUALITY","0"),Y(U1,"lastPingTime",0);var n8=U1,r8=class{constructor(A){Y(this,"_frameWorkType"),Y(this,"_component"),Y(this,"_language"),Y(this,"connectionType"),Y(this,"_room"),Y(this,"_signalInfo",{tinyId:void 0,clientIp:"",signalIp:"",relayIp:"",relayInnerIp:"",relayPort:0,endReportExtend:void 0,reportToken:void 0}),Y(this,"_keyPrefix"),Y(this,"_log"),Y(this,"_intervalId"),Y(this,"_firstPublishedUserList"),Y(this,"_networkQuality"),Y(this,"_basicInfo"),Y(this,"_pathJoinRoom"),Y(this,"_pathLeaveRoom"),Y(this,"_pathMainVideoMap"),Y(this,"_pathMainAudioMap"),Y(this,"_pathAuxiliaryMap"),Y(this,"_remoteStreamStatMap"),Y(this,"_localStreamStat"),Y(this,"_eventMap",new Map),Y(this,"_captureCostSum",0),Y(this,"_captureCostCount",0),Y(this,"isDestroyed",!1),this._frameWorkType=A.frameWorkType||30,this._component=A.component||0,this.connectionType=A.connectionType||1,this._language=A.language||0,this._room=A.room,this._keyPrefix="key_point",this._log=pA.createLogger({parent:this._room.getLogger(),id:"kpm",userId:this._room.userId,sdkAppId:this._room.sdkAppId}),Object.getOwnPropertyNames(this.__proto__).forEach(e=>{e.startsWith("handle")&&Ra(this[e])&&(this[e]=function(o){let{fn:a,context:l}=o;return function(){try{for(var d=arguments.length,h=new Array(d),y=0;ypA.error("".concat(a.name,"() error observed ").concat(k))):S}catch(S){pA.error("".concat(a.name,"() error observed ").concat(S))}}}({fn:this[e],context:this}))}),this.initData(),this.installEvents()}initData(){this._firstPublishedUserList=[],this._networkQuality={totalUplinkRTT:0,totalUplinkLoss:0,count:0,totalDownlinkRTTAndLossMap:new Map},this._basicInfo={string_sdk_version:qd,uint32_os_type:15,string_device_name:"",string_http_user_agent:navigator.userAgent,string_os_version:"",uint32_avg_rtt:0,uint32_avg_up_loss:0,uint32_scene:this._room.scene==="live"?1:0,uint32_joining_duration:0,uint32_networkType:0,uint32_framework:this._frameWorkType,uint32_component:this._component,uint32_connection_type:this.connectionType,uint32_caller_coding_language:this._language,string_domain:location.hostname},this._pathJoinRoom={uint64_start_time:0,uint64_send_request_acc_ip_cmd_start_time:0,uint64_send_request_acc_ip_cmd_end_time:0,uint64_send_request_enter_room_cmd_start_time:0,uint64_send_request_enter_room_cmd_end_time:0,uint64_send_first_video_frame_time:0,uint64_recv_userlist_time:0,uint64_end_time:0,int32_send_request_acc_ip_cmd_ret:0,int32_send_request_enter_room_cmd_ret:0,int32_end_ret:0},this._pathLeaveRoom={uint64_start_time:0,uint64_send_request_exit_room_cmd_start_time:0,uint64_send_request_exit_room_cmd_end_time:0,uint64_end_time:0,int32_send_request_exit_room_cmd_ret:0,int32_end_ret:0},this._localStreamStat={totalVideoBitrate:0,totalVideoFPS:0,totalVideoHeight:0,totalVideoWidth:0,totalAudioLevel:0,videoCount:0,audioLevelCount:0,publishStartTime:0,statsToReport:{uint32_audio_capture_db:0,uint32_video_big_capture_fps:0,uint32_video_big_bitrate:0,uint32_video_big_resolution:0,uint32_audio_capture_thread_health_zero_cnt:0,uint32_after3a_silence_duration:0}},this._pathMainVideoMap=new Map,this._pathMainAudioMap=new Map,this._pathAuxiliaryMap=new Map,this._remoteStreamStatMap=new Map,SM().then(()=>{this._basicInfo.string_os_version=Hp(),this._basicInfo.string_device_name=cQ()||this._basicInfo.string_os_version})}addEvent(A,e){return this._eventMap.set(A,e),F.on(A,e),this}installEvents(){this.handleUnload=this.handleUnload.bind(this),window.addEventListener("pagehide",this.handleUnload),this._room.once("banned",()=>this.handleLeaveSuccess({room:this._room,roomId:this._room.roomId})),this.addEvent(nA.JOIN_START,this.handleJoinStart).addEvent(nA.JOIN_SCHEDULE_SUCCESS,this.handleJoinScheduleSuccess).addEvent(nA.JOIN_SIGNAL_CONNECTION_START,this.handleSignalConnectionStart).addEvent(nA.JOIN_SIGNAL_CONNECTION_END,this.handleSignalConnectionEnd).addEvent(nA.JOIN_SEND_CMD,this.handleJoinSendCMD).addEvent(nA.JOIN_RECEIVED_CMD_RES,this.handleJoinReceivedCMDResponce).addEvent(nA.JOIN_SUCCESS,this.handleJoinSuccess).addEvent(nA.JOIN_FAILED,this.handleJoinFailed).addEvent(nA.LEAVE_START,this.handleLeaveStart).addEvent(nA.LEAVE_SUCCESS,this.handleLeaveSuccess).addEvent(nA.LEAVE_SEND_CMD,this.handleLeaveSendCMD).addEvent(nA.LOCAL_TRACK_CAPTURE_START,this.handleTrackCaptureStart).addEvent(nA.LOCAL_TRACK_CAPTURE_SUCCESS,this.handleTrackCaptureSuccess).addEvent(nA.LOCAL_TRACK_CAPTURE_FAILED,this.handleTrackCaptureFailed).addEvent(nA.PUBLISH_START,this.handlePublishStart).addEvent(nA.SEND_FIRST_VIDEO_FRAME,this.handleSendFirstVideoFrame).addEvent(nA.SUBSCRIBE_START,this.handleSubscribeStart).addEvent(nA.SUBSCRIBE_SUCCESS,this.handleSubscribed).addEvent(nA.PLAY_TRACK_START,this.handlePlayStart).addEvent(nA.VIDEO_LOADED_DATA,this.handleVideoLoadedData).addEvent(nA.PLAYER_STATE_CHANGED,A=>{let{track:e,state:o,type:a}=A;!e.isRemote||!this.hitTest(e.room)||o==="PLAYING"&&(a===YA.AUDIO?this.handleAudioPlaying(e):this.handleVideoPlaying(e))}).addEvent(nA.SWITCH_ROOM_START,this.handleSwitchRoomStart).addEvent(nA.SWITCH_ROOM_SUCCESS,this.handleSwitchRoomSuccess).addEvent(nA.SWITCH_ROOM_FAILED,this.handleSwitchRoomFailed).addEvent(nA.NETWORK_QUALITY,this.handleNetworkQuality).addEvent(nA.HEARTBEAT_REPORT,this.handleHeartbeatStats).addEvent(nA.RECEIVED_PUBLISHED_USER_LIST,this.handleReceivedPublishUserList).addEvent(nA.REMOTE_PUBLISH_STATE_CHANGED,A=>{let{room:e,prevMuteState:o,muteState:a}=A;if(!this.hitTest(e))return;let l=o.hasAudio||o.hasVideo||o.hasSmall,d=o.hasAuxiliary,h=a.hasAudio||a.hasVideo||a.hasSmall,y=a.hasAuxiliary;!l&&h&&this.handleRemoteStreamAdded(a.userId,"main"),!d&&y&&this.handleRemoteStreamAdded(a.userId,"auxiliary")}).addEvent(nA.SINGLE_CONNECTION_STAT,A=>{let{room:e,stat:o}=A;this.hitTest(e)&&(this._pathJoinRoom.int32_ice_cost=o.ice,this._pathJoinRoom.int32_dtls_cost=o.dtls,this._pathJoinRoom.int32_peer_connection_cost=o.peerConnection)})}uninstallEvents(){window.removeEventListener("pagehide",this.handleUnload),this._eventMap.forEach((A,e)=>F.off(e,A)),this._eventMap.clear()}destroy(){this.uninstallEvents(),Gr.clearTask(this._intervalId),this._pathJoinRoom.uint64_start_time===0&&(this._room=null),this.isDestroyed=!0}handleUnload(){this._room.isJoined&&this.handleLeaveSuccess({room:this._room,roomId:this._room.roomId})}handleJoinStart(A){this.hitTest(A.room)&&(this._pathJoinRoom.uint64_start_time===0&&(this._pathJoinRoom.uint64_start_time=Date.now()),A.params&&(Ke(A.params.frameWorkType)||(this._frameWorkType=A.params.frameWorkType,this._basicInfo.uint32_framework=this._frameWorkType),Ke(A.params.component)||(this._component=A.params.component,this._basicInfo.uint32_component=this._component),Ke(A.params.language)||(this._language=A.params.language,this._basicInfo.uint32_caller_coding_language=this._language)))}handleJoinScheduleSuccess(A){let{room:e,detailCost:o}=A;if(this.hitTest(e)&&o){let{totalCost:a,local:l,dns:d,tcp:h,tls:y,request:S,response:k}=o;this._pathJoinRoom.int32_schedule_cost=a,this._pathJoinRoom.int32_schedule_local=l,this._pathJoinRoom.int32_schedule_dns=d,this._pathJoinRoom.int32_schedule_tcp=h,this._pathJoinRoom.int32_schedule_tls=y,this._pathJoinRoom.int32_schedule_request=S,this._pathJoinRoom.int32_schedule_response=k}}handleSignalConnectionStart(A){let{room:e}=A;this.hitTest(e)&&this._pathJoinRoom.uint64_send_request_acc_ip_cmd_start_time===0&&(this._pathJoinRoom.uint64_send_request_acc_ip_cmd_start_time=Date.now())}handleSignalConnectionEnd(A){let{room:e,error:o}=A;this.hitTest(e)&&this._pathJoinRoom.uint64_send_request_acc_ip_cmd_end_time===0&&(this._pathJoinRoom.uint64_send_request_acc_ip_cmd_end_time=Date.now(),o&&(this._pathJoinRoom.int32_send_request_acc_ip_cmd_ret=o instanceof gi?Number(o.getExtraCode()||o.getCode()):Ct.UNKNOWN,this._pathJoinRoom.int32_end_ret=this._pathJoinRoom.int32_send_request_acc_ip_cmd_ret))}handleJoinSendCMD(A){this.hitTest(A.room)&&this._pathJoinRoom.uint64_send_request_enter_room_cmd_start_time===0&&(this._pathJoinRoom.uint64_send_request_enter_room_cmd_start_time=Date.now())}handleJoinReceivedCMDResponce(A){this.hitTest(A.room)&&this._pathJoinRoom.uint64_send_request_enter_room_cmd_end_time===0&&(this._pathJoinRoom.uint64_send_request_enter_room_cmd_end_time=Date.now(),this._pathJoinRoom.int32_send_request_enter_room_cmd_ret=A.code,A.code!==0&&(this._pathJoinRoom.int32_end_ret=this._pathJoinRoom.int32_send_request_enter_room_cmd_ret))}handleJoinSuccess(A){this.hitTest(A.room)&&this._pathJoinRoom.uint64_end_time===0&&(this._pathJoinRoom.uint64_end_time=Date.now(),this._pathJoinRoom.int32_end_ret=0,this._signalInfo=A.room.getSignalInfo())}handleJoinFailed(A){let{room:e,error:o}=A;this.hitTest(e)&&(this._pathJoinRoom.uint64_end_time=Date.now(),this._pathJoinRoom.int32_end_ret===0&&(this._pathJoinRoom.int32_end_ret=o.code||this._pathJoinRoom.int32_send_request_enter_room_cmd_ret||this._pathJoinRoom.int32_send_request_acc_ip_cmd_ret),setTimeout(()=>{this.report()}))}handleReceivedPublishUserList(A){this.hitTest(A.room)&&this._pathJoinRoom.uint64_recv_userlist_time===0&&(this._pathJoinRoom.uint64_recv_userlist_time=Date.now(),this._firstPublishedUserList=A.publishedUserList||[])}handleSendFirstVideoFrame(A){let{room:e}=A;this.hitTest(e)&&this._pathJoinRoom.uint64_send_first_video_frame_time===0&&this._pathJoinRoom.uint64_start_time!==0&&(this._pathJoinRoom.uint64_send_first_video_frame_time=Date.now())}handleLeaveStart(A){this.hitTest(A.room)&&(this._pathLeaveRoom.uint64_start_time=Date.now())}handleLeaveSuccess(A){var e;if(this.hitTest(A.room)&&this._pathLeaveRoom.uint64_end_time===0){if(this._pathLeaveRoom.uint64_end_time=Date.now(),this._pathJoinRoom.uint64_end_time!==0){this._basicInfo.uint32_joining_duration=this._pathLeaveRoom.uint64_end_time-this._pathJoinRoom.uint64_end_time;let o=(e=this._room.audioManager.localAudioTrack)==null?void 0:e.after3aSilenceStartTime;o&&(this._localStreamStat.statsToReport.uint32_after3a_silence_duration=ko()-o)}else this._log.warn("pathJoinRoom endTime is 0");this.report()}}handleLeaveSendCMD(A){this.hitTest(A.room)&&(this._pathLeaveRoom.uint64_send_request_exit_room_cmd_start_time=Date.now(),this._pathLeaveRoom.uint64_send_request_exit_room_cmd_end_time=Date.now())}handleSwitchRoomStart(A){if(this.hitTest(A.room)){let e=Date.now();this.report().then(()=>{this._pathJoinRoom.uint64_start_time=e,this._pathJoinRoom.uint64_send_request_enter_room_cmd_start_time=e})}}handleSwitchRoomSuccess(A){let{room:e}=A;if(this.hitTest(e)&&this._pathJoinRoom.uint64_end_time===0){let o=Date.now();this._pathJoinRoom.uint64_send_request_enter_room_cmd_end_time=o,this._pathJoinRoom.uint64_end_time=o,this._pathJoinRoom.int32_end_ret}}handleSwitchRoomFailed(A){let{room:e,error:o}=A;if(this.hitTest(e)){let a=Date.now();this._pathJoinRoom.uint64_send_request_enter_room_cmd_end_time=a,this._pathJoinRoom.uint64_end_time=a,o&&(this._pathJoinRoom.int32_end_ret=o instanceof gi?Number(o.getExtraCode()||o.getCode()):Ct.UNKNOWN)}}handleRemoteStreamAdded(A,e){var o;let a="".concat(A,"_").concat(e);if(!this._remoteStreamStatMap.has(a)){let l={userId:A,totalVideoFPS:0,totalVideoBitrate:0,totalAudioLevel:0,totalAudioBitrate:0,totalLoss:0,audioCount:0,audioLevelCount:0,videoCount:0,networkQualityCount:0,streamAddedTime:Date.now(),subscribeStartTime:0,subscribedTime:0,playStreamTime:0,statsToReport:po(fi({},HoA),{msg_user_info:new Lj({userId:A,tinyId:(o=this._room.remotePublishedUserMap.get(A))==null?void 0:o.tinyId,role:20})})};l.statsToReport.uint32_stream_type=e==="main"?2:7,this._remoteStreamStatMap.set(a,l)}}handleSubscribeStart(A){let{room:e,remotePublishedUser:o,streamType:a,subscribeState:l}=A;if(!this.hitTest(e))return;let{userId:d,tinyId:h,role:y}=o,S=new Lj({userId:d,tinyId:h,role:y==="anchor"?20:21}),k=Date.now(),V="".concat(d,"_").concat(a),J=this._remoteStreamStatMap.get(V);J&&J.subscribeStartTime===0&&(J.subscribeStartTime=k),a==="main"?(o.muteState.hasVideo&&(l.video||l.smallVideo)&&!this._pathMainVideoMap.has(V)&&this._pathMainVideoMap.set(V,{statsToReport:{msg_user_info:S,uint64_start_enter_time:this._pathJoinRoom.uint64_start_time,uint64_render_first_frame_time:0,uint64_combine_first_frame_time:0},userId:d,sendSubscribeCMDTime:k}),o.muteState.hasAudio&&l.audio&&!this._pathMainAudioMap.has(V)&&this._pathMainAudioMap.set(V,{statsToReport:{msg_user_info:S,uint64_start_enter_time:this._pathJoinRoom.uint64_start_time,uint64_play_first_frame_time:0},userId:d,sendSubscribeCMDTime:k})):o.muteState.hasAuxiliary&&l.auxiliary&&!this._pathAuxiliaryMap.has(V)&&this._pathAuxiliaryMap.set(V,{sendSubscribeCMDTime:k})}handleSubscribed(A){let{room:e,remotePublishedUser:o,streamType:a}=A;if(this.hitTest(e)){let l="".concat(o.userId,"_").concat(a),d=this._remoteStreamStatMap.get(l);d&&d.subscribedTime===0&&(d.subscribedTime=Date.now())}}handlePlayStart(A){let{track:e}=A;if(!e.isRemote||!this.hitTest(e.room))return;let o="".concat(e.userId,"_").concat(e.streamType),a=this._remoteStreamStatMap.get(o);a?.playStreamTime===0&&(a.playStreamTime=Date.now())}handleVideoLoadedData(A){let{track:e}=A;if(!e.isRemote||!this.hitTest(e.room))return;let o="".concat(e.userId,"_").concat(e.streamType),a=this._pathMainVideoMap.get(o);a&&a.statsToReport.uint64_combine_first_frame_time===0&&(a.statsToReport.uint64_combine_first_frame_time=Date.now())}handleVideoPlaying(A){let e="".concat(A.userId,"_").concat(A.streamType),o=Date.now(),a=this._pathMainVideoMap.get(e),l=this._remoteStreamStatMap.get(e);if(l){let{statsToReport:d}=l;if(d.uint32_video_render_first||A.streamType!=="main"?this.hasAuxFlag(A.userId):this.hasVideoFlag(A.userId)){let h=o-this._pathJoinRoom.uint64_start_time;d.uint32_video_render_first=h,si.addNumber({key:516820,value:h})}}a?.statsToReport.uint64_render_first_frame_time===0&&(a.statsToReport.uint64_render_first_frame_time=o)}handleAudioPlaying(A){let e="".concat(A.userId,"_").concat(A.streamType),o=this._pathMainAudioMap.get(e);o&&o.statsToReport.uint64_play_first_frame_time===0&&(o.statsToReport.uint64_play_first_frame_time=Date.now())}handleNetworkQuality(A){this.hitTest(A.room)&&(this._networkQuality.totalUplinkLoss+=A.uplink.loss,this._networkQuality.totalUplinkRTT+=A.uplink.rtt,this._networkQuality.count++,A.downlinks.forEach(e=>{let{rtt:o,loss:a,userId:l,videoDelay:d,audioDelay:h}=e,y=this._networkQuality.totalDownlinkRTTAndLossMap.get(l);if(y)y.totalRTT+=o,y.totalLoss+=a,d&&(y.totalVideoDelay=(y.totalVideoDelay||0)+d,y.videoDelayCount=(y.videoDelayCount||0)+1),h&&(y.totalAudioDelay=(y.totalAudioDelay||0)+h,y.audioDelayCount=(y.audioDelayCount||0)+1),y.count++;else{let S,k,V,J;d&&(k=d,V=1),h&&(S=h,J=1),this._networkQuality.totalDownlinkRTTAndLossMap.set(l,{totalRTT:o,totalLoss:a,count:1,totalAudioDelay:S,totalVideoDelay:k,audioDelayCount:J,videoDelayCount:V})}}))}handleHeartbeatStats(A){var e;if(this.hitTest(A.room)){let{msg_device_info:o,msg_up_stream_info:a,msg_down_stream_info:l}=A.report;if(a.msg_video_status[0]){let{uint32_video_codec_bitrate:d,uint32_video_enc_fps:h,uint32_video_width:y,uint32_video_height:S}=a.msg_video_status[0];this._localStreamStat.totalVideoBitrate+=d,this._localStreamStat.totalVideoFPS+=h,this._localStreamStat.totalVideoWidth+=y,this._localStreamStat.totalVideoHeight+=S,this._localStreamStat.videoCount++}if(a.msg_audio_status){let{uint32_audio_level:d}=a.msg_audio_status;Math.floor(d/id*100)>0&&(this._localStreamStat.totalAudioLevel+=d/id,this._localStreamStat.audioLevelCount++)}l.forEach(d=>{let{msg_user_info:h,msg_audio_status:y,msg_video_status:S}=d,k=h.str_identifier,V=this._room.remotePublishedUserMap.get(k);if(S.forEach(J=>{let cA=J.uint32_video_stream_type===2,CA=J.uint32_video_stream_type===7,MA="".concat(k,"_").concat(cA?"main":"auxiliary"),ie=this._remoteStreamStatMap.get(MA);if(ie&&(cA&&V!=null&&V.remoteVideoTrack.isSubscribed||CA&&V!=null&&V.remoteAuxiliaryTrack)){ie.totalVideoFPS+=J.uint32_video_receive_fps,ie.totalVideoBitrate+=J.uint32_video_codec_bitrate,ie.videoCount++,ie.statsToReport.uint32_video_width===0&&(ie.statsToReport.uint32_video_width=J.uint32_video_width),ie.statsToReport.uint32_video_height===0&&(ie.statsToReport.uint32_video_height=J.uint32_video_height);let pe=cA?V.remoteVideoTrack:V.remoteAuxiliaryTrack;pe.stat.jitterBufferDelay&&(ie.videoJitterBufferDelay=pe.stat.jitterBufferDelay),pe.stat.framesReceived&&(ie.statsToReport.uint32_video_consume_render_rate=Math.floor(pe.stat.framesDecoded/pe.stat.framesReceived*JS(10,6)))}}),!R0(y)){let J="".concat(k,"_main"),cA=this._remoteStreamStatMap.get(J);this._remoteStreamStatMap.has(J)&&cA&&V!=null&&V.remoteAudioTrack.isSubscribed&&(cA.totalAudioBitrate+=y.uint32_audio_codec_bitrate,cA.audioCount++,V.remoteAudioTrack.stat.jitterBufferDelay&&(cA.audioJitterBufferDelay=V.remoteAudioTrack.stat.jitterBufferDelay),Math.floor(y.uint32_audio_level/id*100)>0&&(cA.totalAudioLevel+=y.uint32_audio_level/id,cA.audioLevelCount++),y.uint32_audio_block_time&&(cA.statsToReport.uint32_audio_block_time+=y.uint32_audio_block_time))}}),o.uint32_audio_capture_cost&&(this._captureCostSum+=o.uint32_audio_capture_cost,this._captureCostCount+=1,this._captureCostCount>=100&&(this._basicInfo.uint32_audio_capture_cost=Math.floor(this._captureCostSum/this._captureCostCount),this._captureCostSum=0,this._captureCostCount=0)),o.uint32_audio_capture_cost===0&&((e=this._room.audioManager.localAudioTrack)==null?void 0:e.muted)===!1&&(this._localStreamStat.statsToReport.uint32_audio_capture_thread_health_zero_cnt+=1)}}handlePublishStart(A){let{room:e}=A;this.hitTest(e)&&this._localStreamStat.publishStartTime===0&&(this._localStreamStat.publishStartTime=Date.now())}handleTrackCaptureStart(A){let{track:e}=A;e.mediaType===1&&!this._pathJoinRoom.uint64_init_audio_start_time&&(this._pathJoinRoom.uint64_init_audio_start_time=Date.now()),e.mediaType===4&&!this._pathJoinRoom.uint64_init_camera_start_time&&(this._pathJoinRoom.uint64_init_camera_start_time=Date.now())}handleTrackCaptureSuccess(A){let{track:e}=A;e.mediaType===1&&!this._pathJoinRoom.uint64_init_audio_end_time&&(this._pathJoinRoom.int32_init_audio_ret=0,this._pathJoinRoom.uint64_init_audio_end_time=Date.now()),e.mediaType===4&&!this._pathJoinRoom.uint64_init_camera_end_time&&(this._pathJoinRoom.int32_init_camera_ret=0,this._pathJoinRoom.uint64_init_camera_end_time=Date.now())}handleTrackCaptureFailed(A){let{track:e,error:o}=A,a={NotFoundError:1,NotAllowedError:2,NotReadableError:3,OverConstrainedError:4,AbortError:5,InvalidStateError:6,SecurityError:7,TypeError:8}[o.name]||(o instanceof gi?o.getExtraCode()||o.getCode():Ct.UNKNOWN);e.mediaType===1&&!this._pathJoinRoom.uint64_init_audio_end_time&&(this._pathJoinRoom.int32_init_audio_ret=a,this._pathJoinRoom.uint64_init_audio_end_time=Date.now()),e.mediaType===4&&!this._pathJoinRoom.uint64_init_camera_end_time&&(this._pathJoinRoom.int32_init_camera_ret=a,this._pathJoinRoom.uint64_init_camera_end_time=Date.now())}hasVideoFlag(A){return this._firstPublishedUserList.findIndex(e=>e.userId===A&&e.flag&WS)>=0}hasAudioFlag(A){return this._firstPublishedUserList.findIndex(e=>e.userId===A&&e.flag&ZS)>=0}hasAuxFlag(A){return this._firstPublishedUserList.findIndex(e=>e.userId===A&&e.flag&zS)>=0}hitTest(A){return A===this._room}prepareReport(){if(this._captureCostCount>0&&!this._basicInfo.uint32_audio_capture_cost&&(this._basicInfo.uint32_audio_capture_cost=Math.floor(this._captureCostSum/this._captureCostCount),this._captureCostSum=0,this._captureCostCount=0),this._networkQuality.count>0&&(this._basicInfo.uint32_avg_rtt=Math.floor(this._networkQuality.totalUplinkRTT/this._networkQuality.count),this._basicInfo.uint32_avg_up_loss=Math.floor(this._networkQuality.totalUplinkLoss/this._networkQuality.count)),this._localStreamStat.videoCount>0){this._localStreamStat.statsToReport.uint32_video_big_capture_fps=Math.floor(this._localStreamStat.totalVideoFPS/this._localStreamStat.videoCount),this._localStreamStat.statsToReport.uint32_video_big_bitrate=Math.floor(this._localStreamStat.totalVideoBitrate/this._localStreamStat.videoCount);let A=Math.floor(this._localStreamStat.totalVideoWidth/this._localStreamStat.videoCount),e=Math.floor(this._localStreamStat.totalVideoHeight/this._localStreamStat.videoCount);this._localStreamStat.statsToReport.uint32_video_big_resolution=A<<16|e}this._localStreamStat.audioLevelCount>0&&(this._localStreamStat.statsToReport.uint32_audio_capture_db=Math.floor(this._localStreamStat.totalAudioLevel/this._localStreamStat.audioLevelCount*100)),this._remoteStreamStatMap.forEach((A,e)=>{let{userId:o}=A,a=this._networkQuality.totalDownlinkRTTAndLossMap.get(o);if(a){let{totalLoss:k,count:V,audioDelayCount:J,videoDelayCount:cA,totalAudioDelay:CA,totalVideoDelay:MA}=a;A.statsToReport.uint32_avg_down_loss=Math.floor(k/V),J&&CA&&(A.statsToReport.uint32_audio_network_p2p_delay=Math.floor(CA/J),A.audioJitterBufferDelay&&(A.statsToReport.uint32_p2p_delay=Math.floor(A.statsToReport.uint32_audio_network_p2p_delay+A.audioJitterBufferDelay))),cA&&MA&&(A.statsToReport.uint32_video_network_p2p_delay=Math.floor(MA/cA))}A.videoCount>0&&(A.statsToReport.uint32_video_avg_fps=Math.floor(A.totalVideoFPS/A.videoCount),A.statsToReport.uint32_video_avg_bitrate=Math.floor(A.totalVideoBitrate/A.videoCount)),A.audioCount>0&&(A.statsToReport.uint32_audio_recv_bitrate=A.statsToReport.uint32_audio_bitrate=Math.floor(A.totalAudioBitrate/A.audioCount)),A.audioLevelCount>0&&(A.statsToReport.uint32_audio_play_db=Math.floor(A.totalAudioLevel/A.audioLevelCount*100));let{callDurationCalculator:l}=this._room;l&&(A.statsToReport.uint32_audio_play_time=l.getDuration(e,YA.AUDIO),A.statsToReport.uint32_video_play_time=l.getDuration(e,YA.VIDEO)),A.statsToReport.uint32_video_render_first&&(A.statsToReport.uint32_video_render_first=Math.min(A.statsToReport.uint32_video_render_first,ev));let{badCaseDetector:d}=this._room,{dataFreeze:h,count:y}=d.getDataFreezeDuration(e),{renderFreeze:S}=d.getRenderFreezeDuration(e);A.statsToReport.uint32_video_block_count=y,A.statsToReport.uint32_video_block_time=Math.min(h,A.statsToReport.uint32_video_play_time),A.statsToReport.uint32_video_external_block_time=Math.min(S,A.statsToReport.uint32_video_play_time),A.statsToReport.uint32_audio_block_time=Math.min(A.statsToReport.uint32_audio_block_time,A.statsToReport.uint32_audio_play_time),d.isBlackStream(e)&&A.statsToReport.uint32_video_avg_fps===0?A.statsToReport.uint32_video_black_screen_subjective=1:A.statsToReport.uint32_video_black_screen_subjective=0}),this._pathMainAudioMap.forEach((A,e)=>{this.hasAudioFlag(A.userId)?A.statsToReport.uint64_play_first_frame_time-A.statsToReport.uint64_start_enter_time>ev&&(A.statsToReport.uint64_play_first_frame_time=A.statsToReport.uint64_start_enter_time+ev):this._pathMainAudioMap.delete(e)}),this._pathMainVideoMap.forEach((A,e)=>{this.hasVideoFlag(A.userId)?A.statsToReport.uint64_render_first_frame_time-A.statsToReport.uint64_start_enter_time>ev&&(A.statsToReport.uint64_render_first_frame_time=A.statsToReport.uint64_start_enter_time+ev):this._pathMainVideoMap.delete(e)}),this._pathJoinRoom.uint64_end_time-this._pathJoinRoom.uint64_start_time>ev&&(this._pathJoinRoom.uint64_end_time=this._pathJoinRoom.uint64_start_time+ev)}getReportData(){this._basicInfo.uint32_networkType=Wf();let A={uint32_sdk_app_id:Number(this._room.sdkAppId),msg_user_info:new Lj({userId:this._room.userId,tinyId:this._room.tinyId,role:this._room.role==="anchor"?20:21}),msg_basic_info:this._basicInfo,uint32_acc_ip:aM(this._signalInfo.relayIp),uint32_client_ip:aM(this._signalInfo.clientIp,!1),uint32_acc_port:this._signalInfo.relayPort||0,uint64_timestamp:Date.now(),uint32_seq:Math.floor(Math.random()*JS(2,31)),msg_path_enter_room:this._pathJoinRoom,msg_path_exit_room:this._pathLeaveRoom,msg_path_recv_video:[...this._pathMainVideoMap.values()].map(e=>e.statsToReport),msg_quality_statistics:[...this._remoteStreamStatMap.values()].map(e=>e.statsToReport),str_room_name:String(this._room.roomId||0),msg_path_recv_audio:[...this._pathMainAudioMap.values()].map(e=>e.statsToReport),uint32_info_client_ip:aM(this._signalInfo.clientIp,!1),error_code:[],msg_local_statistics:this._localStreamStat.statsToReport,bytes_report_buf_from_0x1:this._signalInfo.endReportExtend,str_user_sig:this._room.userSig,bytes_report_token:this._signalInfo.reportToken};return T0(A),A}report(){return WA(this,null,function*(){try{this.prepareReport();let A=this.getReportData();yield this.upload(A),this.initData()}catch(A){this._log.warn(A)}finally{this.isDestroyed&&(this._room=null)}})}upload(A){return WA(this,null,function*(){if(A.msg_path_enter_room.uint64_start_time===0)return;let e=Number(this._room.sdkAppId),o=TA.enable?iQ(A,2001,e):yield tk(A),a=o instanceof ArrayBuffer,l="".concat(jf(e,kI.KEY_POINT),"&gzip=").concat(+a),d=!1;navigator.sendBeacon&&(d=navigator.sendBeacon(l,o));let h=[this.uploadKVStat(si),this.uploadKVStat(AB)];d||h.push(oQ({url:l,body:o,priority:"low"})),yield Promise.all(h)})}setConnectionType(A){this.connectionType=A,this._basicInfo.uint32_connection_type=A}uploadKVStat(A){return WA(this,arguments,function(e){var o=this;let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this._room.sdkAppId;return function*(){var l,d;let h=e.getReportData((l=o._room)==null?void 0:l.userSig,(d=o._signalInfo)==null?void 0:d.reportToken);if(h.stats_count.length===0&&h.stats_distribution.length===0)return;h.msg_sdk_basic_info=po(fi({},h.msg_sdk_basic_info),{bytes_device_name:o._basicInfo.string_device_name||"",bytes_os_version:o._basicInfo.string_os_version||"",uint32_framework:o._frameWorkType,uint32_network_type:o._basicInfo.uint32_networkType||0}),o._log.debug(h);let y=TA.enable?iQ(h,2003,a):yield tk(h),S=y instanceof ArrayBuffer,k="".concat(jf(+a,kI.KV_STAT),"&gzip=").concat(+S),V=!1;navigator.sendBeacon&&(V=navigator.sendBeacon(k,y)),V||oQ({url:k,body:y})}()})}};hi([tB({settings:{timeout:500,retries:3}})],r8.prototype,"upload");var ev=5e3,HoA={msg_user_info:null,uint32_video_avg_fps:0,uint32_video_width:0,uint32_video_height:0,uint32_video_avg_bitrate:0,uint32_video_block_time:0,uint32_video_play_time:0,uint32_audio_block_time:0,uint32_audio_play_time:0,uint32_audio_play_db:0,uint32_avg_down_loss:0,uint32_stream_type:0,uint32_video_block_count:0,uint32_audio_block_count:0,uint32_audio_bitrate:0,uint32_video_black_screen_subjective:0,uint32_audio_recv_bitrate:0,uint32_video_external_block_time:0,uint32_video_consume_render_rate:0},Lj=class{constructor(A){Y(this,"str_identifier"),Y(this,"str_tinyid"),Y(this,"uint32_role"),this.str_identifier=String(A.userId),this.str_tinyid=String(A.tinyId||0),this.uint32_role=A.role}},qoA=r8,a8=class{constructor(){Y(this,"_startTime"),Y(this,"_endTime"),this._startTime=0,this._endTime=0,this.start()}start(){this._startTime===0&&(this._startTime=ko())}stop(){this._endTime===0&&(this._endTime=ko())}getDuration(){return this._endTime===0?ko()-this._startTime:this._endTime-this._startTime}get startTime(){return this._startTime}get endTime(){return this._endTime}},KoA=class{constructor(A){Y(this,"_room",null),Y(this,"_durationMap"),Y(this,"_eventMap",new Map),this._room=A.room,this._durationMap=new Map,this.installEvents()}installEvents(){this._eventMap.set(nA.REMOTE_TRACK_SUBSCRIBED,this.handleSubscribed).set(nA.REMOTE_TRACK_UNSUBSCRIBED,this.handleUnsubscribed).set(nA.REMOTE_PUBLISH_STATE_CHANGED,A=>{let{room:e,prevMuteState:o,muteState:a}=A;var l;let{userId:d}=a;if(!this.hitTest(e))return;o.hasAudio&&!a.hasAudio&&this.stopDurationItem("".concat(d,"_main"),YA.AUDIO),o.hasVideo&&!a.hasVideo&&this.stopDurationItem("".concat(d,"_main"),YA.VIDEO),o.hasAuxiliary&&!a.hasAuxiliary&&this.stopDurationItem("".concat(d,"_auxiliary"),YA.VIDEO);let h=(l=this._room)==null?void 0:l.remotePublishedUserMap.get(d);h&&(!o.hasAudio&&a.hasAudio&&h.remoteAudioTrack.isSubscribed&&this.addDuractionItem(d,YA.AUDIO,"main"),!o.hasVideo&&a.hasVideo&&h.remoteVideoTrack.isSubscribed&&this.addDuractionItem(d,YA.VIDEO,"main"),!o.hasAuxiliary&&a.hasAuxiliary&&h.remoteAuxiliaryTrack.isSubscribed&&this.addDuractionItem(d,YA.VIDEO,"auxiliary"))}),this._eventMap.forEach((A,e)=>F.on(e,A,this))}uninstallEvents(){this._eventMap.forEach((A,e)=>F.off(e,A,this)),this._eventMap.clear()}handleSubscribed(A){let{track:e}=A;if(!this.hitTest(e.room))return;let{userId:o,streamType:a,kind:l}=e;e.isSubscribed?this.addDuractionItem(o,l,a):this.stopDurationItem("".concat(o,"_").concat(a),l)}handleUnsubscribed(A){let{track:e}=A;this.hitTest(e.room)&&this.stopDurationItem("".concat(e.userId,"_").concat(e.streamType),e.kind)}isRecording(A){return A.findIndex(e=>e.endTime===0)>=0}addDuractionItem(A,e,o){let a="".concat(A,"_").concat(o),l=new a8,d=this._durationMap.get(a);d?this.isRecording(d[e])||d[e].push(l):this._durationMap.set(a,{userId:A,type:o,audio:e===YA.AUDIO?[l]:[],video:e===YA.AUDIO?[]:[l]})}stopDurationItem(A,e){if(this._durationMap.has(A)){let o=this._durationMap.get(A)[e].find(a=>a.endTime===0);o&&o.stop()}}hitTest(A){return this._room===A}getDuration(A,e){return this._durationMap.has(A)?this._durationMap.get(A)[e].reduce((o,a)=>o+a.getDuration(),0):0}getDurationMap(){return this._durationMap}reset(){this._durationMap.clear()}destroy(){this._room=null,this.uninstallEvents()}},joA=class{constructor(){Y(this,"renderFreezeMap",new Map),Y(this,"dataFreezeMap",new Map)}get(A,e){let o=this.renderFreezeMap.get(A),a=this.dataFreezeMap.get(A);return e?e==="data"?a:o:(Bg||or)&&o&&a&&o.duration>a.duration?o:a}set(A,e,o){o==="data"?this.dataFreezeMap.set(A,e):this.renderFreezeMap.set(A,e)}clear(){this.renderFreezeMap.clear(),this.dataFreezeMap.clear()}},WoA=class{constructor(A){Y(this,"_room"),Y(this,"_renderFreezeMap",new Map),Y(this,"_isVideoPlayingEventFiredMap",new Map),Y(this,"_dataFreezeMap",new Map),Y(this,"_monitorFreezeData",new joA),Y(this,"_eventMap",new Map),Y(this,"_videoEncodeFailedCount",0),Y(this,"_audioEncodeFailedCount",0),Y(this,"_encodeFailedThreshold",3),Y(this,"ABNORMAL_TIME_LOWER_LIMIT",3e3),Y(this,"ABNORMAL_TIME_UPPER_LIMIT",5e3),Y(this,"_videoAbnormalTimestampMap",new Map),Y(this,"_remoteVideoAbnormalTimestampMap",new Map),Y(this,"_audioAbnormalTimestampMap",new Map),Y(this,"eventListenerMap",new Map),this._room=A.room,this.installEvents()}getRenderFreezeMap(){return this._renderFreezeMap}getDataFreezeMap(){return this._dataFreezeMap}installEvents(){this._eventMap.set(nA.LEAVE_SUCCESS,A=>{let{room:e}=A;this.hitTest(e)&&this.stop()}).set(nA.PLAY_TRACK_START,this.onPlayTrackStart).set(nA.UNSUBSCRIBE_SUCCESS,A=>{let{room:e,streamType:o,remotePublishedUser:a}=A;if(!this.hitTest(e))return;let{userId:l}=a,d="".concat(l,"_").concat(o);this.stopDataFreeze({key:d,userId:l,type:o})}).set(nA.REMOTE_PUBLISH_STATE_CHANGED,A=>{let{room:e,prevMuteState:o,muteState:a}=A;if(!this.hitTest(e))return;let{userId:l}=a;if(o.hasVideo&&!a.hasVideo){let d="main",h="".concat(a.userId,"_").concat(d);this.stopDataFreeze({key:h,userId:l,type:d})}if(o.hasAuxiliary&&!a.hasAuxiliary){let d="auxiliary",h="".concat(a.userId,"_").concat(d);this.stopDataFreeze({key:h,userId:l,type:d})}}).set(nA.PLAYER_STATE_CHANGED,A=>{let{track:e,state:o,reason:a,type:l}=A;if(e.isRemote&&e.room&&this.hitTest(e.room)&&l===YA.VIDEO){if(o==="PLAYING"){let d="".concat(e.userId,"_").concat(e.streamType);this._isVideoPlayingEventFiredMap.set(d,!0)}a===YA.MUTE?this.onVideoTrackMuted(e):a===YA.UNMUTE&&this.onVideoTrackUnmuted(e)}}).set(nA.HEARTBEAT_REPORT,this.onHearBeatReport).set(nA.REMOTE_VIDEO_PLAY_START,this.onRemoteVideoPlayStart).set(nA.REMOTE_VIDEO_PLAY_FINISH,this.onRemoteVideoPlayEnd),this._eventMap.forEach((A,e)=>F.on(e,A,this))}uninstallEvents(){this._eventMap.forEach((A,e)=>F.off(e,A,this)),this._eventMap.clear()}stop(){this._renderFreezeMap.clear(),this._dataFreezeMap.clear(),this._isVideoPlayingEventFiredMap.clear()}onVideoTrackMuted(A){if(!A.isSubscribed)return;let{userId:e,streamType:o}=A,a="".concat(e,"_").concat(o),l=this._dataFreezeMap.get(a),d=new a8;l?l.durationItemList.push(d):this._dataFreezeMap.set(a,{userId:e,type:o,durationItemList:[d],isFreezing(){let h=this.durationItemList[this.durationItemList.length-1];return h&&h.endTime===0}})}onVideoTrackUnmuted(A){if(!A.isSubscribed)return;let{userId:e,streamType:o}=A,a="".concat(e,"_").concat(o);this.stopDataFreeze({key:a,userId:e,type:o})}onHearBeatReport(A){let{room:e,report:o}=A;this.hitTest(e)&&(this.localMediaTrackDetector(o),this.remoteMediaTrackDetector(o))}remoteMediaTrackDetector(A){A.msg_down_stream_info.length>0&&A.msg_down_stream_info.forEach(e=>{var o;if(e.msg_video_status.length===0)return;let a=e.msg_user_info.str_identifier,l=(o=this._room.remotePublishedUserMap.get(a))==null?void 0:o.remoteVideoTrack;e.msg_video_status.forEach(d=>{let h=ko();if(d.uint32_video_codec_bitrate!==void 0&&d.uint32_video_codec_bitrate>0&&d.uint32_video_receive_fps===0&&l!=null&&l.muted)if(this._remoteVideoAbnormalTimestampMap.has("".concat(a,"-decode"))){let y=this._remoteVideoAbnormalTimestampMap.get("".concat(a,"-decode"));y&&h-y>this.ABNORMAL_TIME_LOWER_LIMIT&&h-y=this.ABNORMAL_TIME_UPPER_LIMIT&&(sn.uploadEvent({userId:this._room.userId,log:"stat-".concat(Ja.VIDEO_DECODE_RESUME_DURING_CALL)}),this._remoteVideoAbnormalTimestampMap.delete("".concat(a,"-decode")))}if(d.uint32_video_codec_bitrate!==void 0&&d.uint32_video_codec_bitrate>5e5&&d.uint32_video_dec_fps!==void 0&&d.uint32_video_dec_fps<=5)if(this._remoteVideoAbnormalTimestampMap.has("".concat(a,"-hardware"))){let y=this._remoteVideoAbnormalTimestampMap.get("".concat(a,"-hardware"));if(y&&h-y>this.ABNORMAL_TIME_LOWER_LIMIT/2&&h-y<2*this.ABNORMAL_TIME_UPPER_LIMIT){sn.uploadEvent({userId:this._room.userId,log:"stat-".concat(Ja.VIDEO_HARDWARE_DECODE_FAILED)});let S=this._room.remotePublishedUserMap.get(a);if(S){let k=d.uint32_video_stream_type===2?S.remoteVideoTrack:S.remoteAuxiliaryTrack;k&&(k.log.warn("decode failed during call"),k.emit("decode-failed-during-call"))}}}else this._remoteVideoAbnormalTimestampMap.set("".concat(a,"-hardware"),h);else{let y=this._remoteVideoAbnormalTimestampMap.get("".concat(a,"-hardware"));y&&h-y>=2*this.ABNORMAL_TIME_UPPER_LIMIT&&(sn.uploadEvent({userId:this._room.userId,log:"stat-".concat(Ja.VIDEO_HARDWARE_DECODE_RESUME)}),this._remoteVideoAbnormalTimestampMap.delete("".concat(a,"-hardware")))}})})}localMediaTrackDetector(A){if(A.msg_up_stream_info.msg_video_status){let e=A.msg_up_stream_info.msg_video_status,o=Array.from(this._room.localTracks).find(l=>l.kind==="video"&&!l.isScreen),a=o?.stat.bytesSent||0;if(o?.isMediaTrackActive===!1||a<=0||o!=null&&o.isUseCustomSource)return;e.forEach(l=>{let d=ko();if(l.uint32_video_stream_type===2)if(l.uint32_video_capture_fps!==0&&l.uint32_video_codec_bitrate===0&&l.uint32_video_enc_fps===0&&o!=null&&o.isPublished)if(this._videoAbnormalTimestampMap.has("local-encode")){let h=this._videoAbnormalTimestampMap.get("local-encode");h&&d-h>this.ABNORMAL_TIME_LOWER_LIMIT&&d-h=this.ABNORMAL_TIME_UPPER_LIMIT&&sn.uploadEvent({userId:this._room.userId,log:"stat-".concat(Ja.VIDEO_ENCODE_RESUME_DURING_CALL)}),this._videoAbnormalTimestampMap.delete("local-encode")}})}if(A.msg_up_stream_info.msg_audio_status){let e=A.msg_up_stream_info.msg_audio_status,o=Array.from(this._room.localTracks).find(d=>d.kind==="audio"),a=o?.stat.bytesSent||0;if(o?.isMediaTrackActive===!1||a<=0||o!=null&&o.isUseCustomSource)return;let l=ko();if(e.uint32_audio_codec_bitrate===0&&o!=null&&o.isPublished)if(this._audioAbnormalTimestampMap.has("local-encode")){let d=this._audioAbnormalTimestampMap.get("local-encode");d&&l-d>this.ABNORMAL_TIME_LOWER_LIMIT&&l-d=this.ABNORMAL_TIME_UPPER_LIMIT&&sn.uploadEvent({userId:this._room.userId,log:"stat-".concat(Ja.AUDIO_ENCODE_RESUME_DURING_CALL)}),this._audioAbnormalTimestampMap.delete("local-encode")}}}stopDataFreeze(A){let{key:e,userId:o,type:a}=A,l=this._dataFreezeMap.get(e);if(!l||!l.isFreezing())return;let d=l.durationItemList[l.durationItemList.length-1];d.stop();let h=d.getDuration();if(h>Ub){let y=this._monitorFreezeData.get(e,"data");this._monitorFreezeData.set(e,{userId:o,type:a,duration:y?y.duration+h:h},"data")}else l.durationItemList.pop()}getTotalDuration(A){return A.reduce((e,o)=>{let a=o.getDuration();return e+Math.min(a,5e3)},0)}onPlayTrackStart(A){let{track:e}=A;if(!e.isRemote||!this.hitTest(e.room)||e.kind!==YA.VIDEO||!e.isRemotePublished)return;let o="".concat(e.userId,"_").concat(e.streamType);this._isVideoPlayingEventFiredMap.has(o)||this._isVideoPlayingEventFiredMap.set(o,!1)}getDataFreezeDuration(A){let e={dataFreeze:0,count:0},o=this._dataFreezeMap.get(A);if(o){if(o.isFreezing()){let a=o.durationItemList[o.durationItemList.length-1];a.stop(),a.getDuration(){document.hidden||(l=0)};document.addEventListener("visibilitychange",d);let h=(y,S)=>{var k;if(l){let V=e.decodeFPS,J=V>0&&V<=5?600+1e3/V:600,cA=S.presentationTime-l;if(cA>J){cA=Math.min(cA,5e3);let CA="".concat(e.userId,"_").concat(e.streamType),MA=this._monitorFreezeData.get(CA,"render");MA?MA.duration+=cA:this._monitorFreezeData.set(CA,{userId:e.userId,type:e.streamType,duration:cA},"render");let ie=this._renderFreezeMap.get(CA);ie?(ie.totalDuration+=cA,ie.count+=1):this._renderFreezeMap.set(CA,{userId:e.userId,type:e.streamType,totalDuration:cA,count:1})}}l=S.presentationTime,(k=o.element)==null||k.requestVideoFrameCallback(h)};(a=o.element)==null||a.requestVideoFrameCallback(h),this.eventListenerMap.set("".concat(e.userId,"_").concat(e.streamType),{onVisibilityChange:d})}onRemoteVideoPlayEnd(A){let{track:e,player:o}=A,a="".concat(e.userId,"_").concat(e.streamType),l=this.eventListenerMap.get(a);l&&document.removeEventListener("visibilitychange",l.onVisibilityChange)}resetMonitor(){this._monitorFreezeData.clear()}hitTest(A){return A===this._room}destroy(){this.uninstallEvents()}},zoA=gc(jl(),1),ZoA=class{constructor(A,e,o,a,l){let d=arguments.length>5&&arguments[5]!==void 0?arguments[5]:1.3333333333333333;this.vbMode=A,this.faceDetectorHash=o,this.visionTaskRegistry=a,this.logger=l,Y(this,"animationState"),Y(this,"originalAspect"),Y(this,"totalOffsetX",0),Y(this,"totalOffsetY",0),Y(this,"defaultScaleRatio",.1),Y(this,"isRecovering",!1),Y(this,"boundaryY",280),Y(this,"lastActionTime",0),Y(this,"restTime",400),this.animationState={current:null,target:null,animating:!1,debounceTimer:null,startTime:0,duration:3e3,debounceTime:150,movementThreshold:30,debounceThreshold:15},this.addEvent(this.vbMode,!!this.faceDetectorHash),this.originalAspect=d||4/3,this.visionTaskRegistry.setVideo(this.faceDetectorHash,e)}addEvent(A,e,o){let a=[{key:570704,error:o??(e?void 0:11)},{key:570705,error:o??(e?void 0:22)}][A-1];a&&(e?si.addSuccessEvent({key:a.key}):si.addFailedEvent({key:a.key,error:a.error}))}actionCentering(A){let e=Date.now();if(this.animation(),!this.faceDetectorHash||e-this.lastActionTimee/2?(l=e-o-a,d=o-l):(l=o,d=0),{min:l,offset:d}}calculateTargetPosition(A,e,o,a,l,d){let h,y,S=arguments.length>6&&arguments[6]!==void 0?arguments[6]:.4,k=A+o/2,V=e+a/2,{min:J,offset:cA}=this.calculateBoundary(k,l,A,o),{min:CA,offset:MA}=this.calculateBoundary(V,d,e,a);return h=2*J+o,y=2*CA+a,h/y>this.originalAspect?(h=y*this.originalAspect,cA=k-h/2):(y=h/this.originalAspect,MA=V-y/2),o/l>S&&(cA=0,MA=0,h=l,y=d),cA=Math.max(0,Math.min(cA,l-h)),MA=Math.max(0,Math.min(MA,d-y)),{sx:cA,sy:MA,cropWidth:h,cropHeight:y,timestamp:Date.now()}}processFacePositionCrop(A,e,o){if(!this.animationState.current||!this.animationState.target){let h={sx:0,sy:0,cropWidth:e,cropHeight:o,timestamp:Date.now()};return this.animationState.current=h,void(this.animationState.target=h)}let a=this.positionDistance(this.animationState.target,A),l=this.positionDistance(this.animationState.current,A),d=this.animationState.current.cropWidth/e;a>this.animationState.debounceThreshold*d&&(clearTimeout(this.animationState.debounceTimer),this.animationState.animating=!1),!this.animationState.animating&&l>this.animationState.movementThreshold*d&&(this.animationState.target=A,this.animationState.debounceTimer=setTimeout(()=>{this.animationState.startTime=Date.now(),this.animationState.animating=!0},this.animationState.debounceTime))}processFacePositionPortrait(A){if(!this.animationState.current||!this.animationState.target)return this.animationState.current=fi({},A),void(this.animationState.target=fi({},A));let e=this.positionDistance(this.animationState.current,A),o=this.positionDistance(this.animationState.target,A);e>this.animationState.debounceThreshold&&(clearTimeout(this.animationState.debounceTimer),this.animationState.animating=!1),!this.animationState.animating&&o>this.animationState.movementThreshold&&(this.animationState.current=A,this.animationState.debounceTimer=setTimeout(()=>{this.animationState.startTime=Date.now(),this.animationState.animating=!0},this.animationState.debounceTime))}animation(){if(!this.animationState.animating)return;let A=Date.now()-this.animationState.startTime,e=Math.min(A/this.animationState.duration,1),o=a=>a<.5?2*a*a:(4-2*a)*a-1;if(this.animationState.current&&this.animationState.target){let a=(this.animationState.target.sx-this.animationState.current.sx)*o(e);this.animationState.current.sx+=a,this.totalOffsetX+=a;let l=(this.animationState.target.sy-this.animationState.current.sy)*o(e);if(this.animationState.current.sy+=l,this.totalOffsetY+=l,this.animationState.current.cropWidth+=(this.animationState.target.cropWidth-this.animationState.current.cropWidth)*o(e),this.animationState.current.cropHeight+=(this.animationState.target.cropHeight-this.animationState.current.cropHeight)*o(e),this.animationState.current.scaleRatio&&this.animationState.target.scaleRatio&&(this.animationState.current.scaleRatio+=(this.animationState.target.scaleRatio-this.animationState.current.scaleRatio)*o(e)),kn(this.animationState.current.scaleOffsetX)&&kn(this.animationState.target.scaleOffsetX)&&kn(this.animationState.current.scaleOffsetY)&&kn(this.animationState.target.scaleOffsetY)){let d=(this.animationState.target.scaleOffsetX-this.animationState.current.scaleOffsetX)*o(e);this.animationState.current.scaleOffsetX+=d;let h=(this.animationState.target.scaleOffsetY-this.animationState.current.scaleOffsetY)*o(e);this.animationState.current.scaleOffsetY+=h}}e>=1&&(this.animationState.animating=!1,this.animationState.current=this.animationState.target,this.isRecovering=!1)}positionDistance(A,e){return Math.sqrt(JS(A.sx-e.sx,2)+JS(A.sy-e.sy,2))}recoverOriginal(A,e){this.animationState.target={sx:0,sy:0,cropWidth:A,cropHeight:e,timestamp:Date.now()},this.animationState.animating=!0,this.animationState.startTime=Date.now(),this.isRecovering=!0}dualStageCropping(A,e,o,a,l,d){let h=arguments.length>6&&arguments[6]!==void 0?arguments[6]:.3;if(this.isRecovering)return;let y=this.calculateTargetPosition(o,a,l,d,A,e);this.processFacePositionCrop(y,A,e),l*d/y.cropWidth/y.cropHeight>h&&this.recoverOriginal(A,e)}movingPortrait(A,e,o,a,l,d){var h,y,S,k,V,J,cA,CA,MA,ie,pe,qe;let we={sx:o+l/2+this.totalOffsetX,sy:a+d/2+this.totalOffsetY,cropWidth:A,cropHeight:e,scaleRatio:(y=(h=this.animationState.current)==null?void 0:h.scaleRatio)!=null?y:1,scaleOffsetX:(k=(S=this.animationState.current)==null?void 0:S.scaleOffsetX)!=null?k:0,scaleOffsetY:(J=(V=this.animationState.current)==null?void 0:V.scaleOffsetY)!=null?J:0,timestamp:Date.now()};this.animationState.target={sx:A/2,sy:a+d/2,cropWidth:A,cropHeight:e,scaleRatio:(CA=(cA=this.animationState.target)==null?void 0:cA.scaleRatio)!=null?CA:1,scaleOffsetX:(ie=(MA=this.animationState.target)==null?void 0:MA.scaleOffsetX)!=null?ie:0,scaleOffsetY:(qe=(pe=this.animationState.target)==null?void 0:pe.scaleOffsetY)!=null?qe:0,timestamp:Date.now()},this.animationState.animating||(this.animationState.target.scaleRatio=Math.sqrt(l*d/A/e/this.defaultScaleRatio),this.animationState.target.scaleOffsetX=-this.animationState.target.scaleRatio/2+.5,this.animationState.target.scaleOffsetY=1-this.animationState.target.scaleRatio,(this.animationState.target.sy-this.animationState.target.scaleOffsetY*this.animationState.target.cropHeight)/this.animationState.target.scaleRatio{A.log.error(o),A.destroy(new gi({code:Ct.VIDEO_MANAGER_ERROR,extraCode:6,message:"init vb node error ".concat(o.message||o)})),this.resolvePreditReady()})}init(A){return WA(this,null,function*(){var e,o,a;this.predictReady=new Promise(y=>{this.resolvePreditReady=y});let l=A.Wasm,d=this.context.ctx;if(A.color&&(this._color=A.color),A.mat4&&(this._mat4=A.mat4),A.postProcessing&&(this._postProcessing=A.postProcessing),this._enableFaceCentering=(e=A.enableFaceCentering)!=null&&e,this._enableEffectOptimization=(o=A.enableEffectOptimization)!=null&&o,this.wasm=new l.AllIn1(d),this.wasm.blurRadius=A.blurRadius||3,this.wasm.mirror=!!A.mirror,this.wasm.rotation=A.rotation||0,this.wasm.vbMode=A.bg==="blur"?1:A.bg instanceof HTMLImageElement?2:A.bg==="color"?3:0,this._onAbort=A.onAbort,A.bg||this.resolvePreditReady(),A.waterMark){let{x:y,y:S,width:k,height:V}=A.waterMark;this.wasm.setWaterMark(y,S,k,V)}if(A.beautyParams){let{beauty:y,brightness:S,ruddy:k}=A.beautyParams;this.wasm.setBeauty(y,S,k,A?.width,A?.height)}this.program=this.wasm.init(),this.useProgram(),this.setAttributes(this.positionBuffer,this.texCoordBuffer),d.uniform1i(d.getUniformLocation(this.program,"mask"),1),A.bg instanceof HTMLImageElement&&(d.uniform1i(d.getUniformLocation(this.program,"bg"),2),this._bgTexture=this.createTexture(A.bg)),A.waterMark&&(d.uniform1i(d.getUniformLocation(this.program,"waterMark"),3),this._waterMarkTexture=this.createTexture(A.waterMark.image));let h=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);if(this._textureMatrixLocation=d.getUniformLocation(this.program,"u_textureMatrix"),d.uniformMatrix4fv(this._textureMatrixLocation,!1,h),this._offsetMatrixLocation=d.getUniformLocation(this.program,"u_offsetMatrix"),d.uniformMatrix4fv(this._offsetMatrixLocation,!1,h),this._colorLocation=d.getUniformLocation(this.program,"u_color"),d.uniform1i(d.getUniformLocation(this.program,"lastMask"),4),this._weixin){let y=this.context.createShader(d.FRAGMENT_SHADER,`#version 300 es precision highp float; uniform sampler2D u_texture; uniform sampler2D mask; @@ -336,7 +336,7 @@ out vec2 v_texCoord; void main() { gl_Position = vec4(a_position.x, a_position.y, 0, 1); v_texCoord = a_texCoord; -}`);this._prePrograme=this.context.createProgram(S,y),d.useProgram(this._prePrograme),this.setAttributes(this.positionBuffer,this.texCoordBuffer),d.uniform1i(d.getUniformLocation(this._prePrograme,"mask"),1)}!this._enableEffectOptimization||this.wasm.vbMode!==2&&this.wasm.vbMode!==3?this._postProcessing=void 0:q0()?(this._postProcessing=void 0,this.log.warn("Virtual background post-processing isn't allowed on mobile.")):(a=this._postProcessing)==null||a.init(d,this.positionBuffer,this.texCoordBuffer,4/3),yield this.initVisionTasks(A)})}initVisionTasks(A){return KA(this,null,function*(){if(A.bg){if(this._visionTaskRegistry=yield window.VisionTaskRegistry.getInstance(),!window.VisionTaskRegistry||!this._visionTaskRegistry||!this._visionTaskRegistry.visionWasm)throw new Error("Virtual background assets not found. Please redeploy the assets of the npm package.");if(this._selfieSegmentationHash=yield this._visionTaskRegistry.register(window.VisionTaskType.ImageSegmenter,{canvas:this.context._canvas}),this._visionTaskRegistry.setVideo(this._selfieSegmentationHash,this.image),this._enableFaceCentering)try{this._visionTaskRegistry.models.has(window.VisionTaskType.FaceDetector)||(yield this._visionTaskRegistry.preloadModels([window.VisionTaskType.FaceDetector]));let e=yield this._visionTaskRegistry.register(window.VisionTaskType.FaceDetector);if(!e)return;this._centerFace=new foA(this.wasm.vbMode,this.image,e,this._visionTaskRegistry,this.context.log)}catch{this.log.error("Face detector model not found. Please redeploy the assets of the npm package.")}}})}onPredict(A){let e=this.context.ctx;this._weixin&&(this._lastMaskTexture||(this._lastMaskTexture=this.createTexture(this.image),this._lastMaskFbo=this.createFramebuffer(this._lastMaskTexture)));let o=this.getMaskTexture(A);if(!o)return;let a=o;this._postProcessing&&(this._postProcessing.ratio=this.image.videoWidth/this.image.videoHeight,a=this._postProcessing.postProcessing(o)),this.useProgram(),this.setAttributes(this.positionBuffer,this.texCoordBuffer),this.useTexture(),e.activeTexture(e.TEXTURE1),e.bindTexture(e.TEXTURE_2D,a||null),e.activeTexture(e.TEXTURE2),e.bindTexture(e.TEXTURE_2D,this._bgTexture||null),e.activeTexture(e.TEXTURE3),e.bindTexture(e.TEXTURE_2D,this._waterMarkTexture||null),this.wasm.vbMode===3&&e.uniform3fv(this._colorLocation,this._color),this.useBufferFrame(),this._segmentationMask=A,this.totalFrames++,this.centerFace(),$B(this.wasm.rotation)&&this.resize(this.image.height,this.image.width),e.viewport(0,0,e.canvas.width,e.canvas.height),e.drawArrays(e.TRIANGLE_STRIP,0,4),A.close()}getMaskTexture(A){return A.confidenceMasks?A.confidenceMasks[0].getAsWebGLTexture():void 0}onFirstFrame(){this.waitingFirstFrame=!1;let A=this.context.ctx;this.useTexture(),A.texImage2D(A.TEXTURE_2D,0,A.RGBA,A.RGBA,A.UNSIGNED_BYTE,this.image)}render(A){let e=this.context.ctx,{image:o}=this;this.tryVideoFrameCallback();let{videoWidth:a,videoHeight:c}=o;if($B(this.wasm.rotation)&&!this._visionTaskRegistry&&([a,c]=[c,a]),a===0||c===0||!this.available)return!1;o.width=a,o.height=c;let d=!1;if(this.totalFrames)this.useTexture(),d=this._selfieTextureValid,this._selfieTextureValid=!0;else{if(!this.program)return!1;this.useTexture(),d=this._textureValid,this._textureValid=!0}if(this.width===a&&this.height===c&&d?e.texSubImage2D(e.TEXTURE_2D,0,0,0,e.RGBA,e.UNSIGNED_BYTE,o):(this.resize(a,c),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,o)),this._weixin){if(e.useProgram(this._prePrograme),this.useTexture(),this._segmentationMask){let C=this.getMaskTexture(this._segmentationMask);e.activeTexture(e.TEXTURE1),e.bindTexture(e.TEXTURE_2D,C||null),e.bindFramebuffer(e.FRAMEBUFFER,this._lastMaskFbo||null)}e.drawArrays(e.TRIANGLE_STRIP,0,4),this.useTexture(),this._segmentationMask?e.copyTexSubImage2D(e.TEXTURE_2D,0,0,0,0,0,a,c):e.copyTexImage2D(e.TEXTURE_2D,0,e.RGBA,0,0,a,c,0)}try{if(this._selfieSegmentationHash&&this._visionTaskRegistry){let C=this._visionTaskRegistry.getResult(this._selfieSegmentationHash);this.totalFrames===1&&this.context._canvas&&this.resolvePreditReady(),this.onPredict(C)}}catch(C){this._onAbort&&this._onAbort(C)}return this.totalFrames||(e.activeTexture(e.TEXTURE2),e.bindTexture(e.TEXTURE_2D,this._bgTexture||null),e.activeTexture(e.TEXTURE3),e.bindTexture(e.TEXTURE_2D,this._waterMarkTexture||null),e.drawArrays(e.TRIANGLE_STRIP,0,4)),this._visionTaskRegistry&&this._visionTaskRegistry.resetHashResults(),!1}centerFace(){if(!this._centerFace||!this._enableFaceCentering)return;let A=this.context.ctx;this._centerFace.aspectRatio=A.canvas.width/A.canvas.height,this._centerFace.actionCentering(this.image);let{current:e,offset:o}=this._centerFace;if(e&&(this.wasm.vbMode===1&&this.drawImage(e.sx,e.sy,e.cropWidth,e.cropHeight),o&&this.wasm.vbMode===2)){if(!this._mat4)return;let a=this._mat4.create(),{scaleRatio:c=1,scaleOffsetX:d=0,scaleOffsetY:C=0}=e;this._mat4.fromTranslation(a,[-o.offsetX/A.canvas.width+d,C,0]),this._mat4.scale(a,a,[c,c,1]),A.uniformMatrix4fv(this._offsetMatrixLocation,!1,a)}}drawImage(A,e,o,a){let c=this.context.ctx;if(!this._mat4)return;let{width:d,height:C}=c.canvas,y=this._mat4.create();this._mat4.fromTranslation(y,[A/d,1-(e+a)/C,0]),this._mat4.scale(y,y,[o/d,a/C,1]),c.uniformMatrix4fv(this._textureMatrixLocation,!1,y)}close(){var A;super.close();let e=this.context.ctx;this._bgTexture&&e.deleteTexture(this._bgTexture),this._waterMarkTexture&&e.deleteTexture(this._waterMarkTexture),this._lastMaskTexture&&e.deleteTexture(this._lastMaskTexture),this._lastMaskFbo&&e.deleteFramebuffer(this._lastMaskFbo),this._prePrograme&&e.deleteProgram(this._prePrograme),this._postProcessing&&this._postProcessing.close(),(A=this.wasm)==null||A.close()}},DoA=class extends AC{constructor(A){super(A,{name:"yuv-source",useDefaultProgram:!1,create2d:!1,useFbo:!1,createTexture:!1,logger:A.log,fragmentShaderSource:` +}`);this._prePrograme=this.context.createProgram(S,y),d.useProgram(this._prePrograme),this.setAttributes(this.positionBuffer,this.texCoordBuffer),d.uniform1i(d.getUniformLocation(this._prePrograme,"mask"),1)}!this._enableEffectOptimization||this.wasm.vbMode!==2&&this.wasm.vbMode!==3?this._postProcessing=void 0:W0()?(this._postProcessing=void 0,this.log.warn("Virtual background post-processing isn't allowed on mobile.")):(a=this._postProcessing)==null||a.init(d,this.positionBuffer,this.texCoordBuffer,4/3),yield this.initVisionTasks(A)})}initVisionTasks(A){return WA(this,null,function*(){if(A.bg){if(this._visionTaskRegistry=yield window.VisionTaskRegistry.getInstance(),!window.VisionTaskRegistry||!this._visionTaskRegistry||!this._visionTaskRegistry.visionWasm)throw new Error("Virtual background assets not found. Please redeploy the assets of the npm package.");if(this._selfieSegmentationHash=yield this._visionTaskRegistry.register(window.VisionTaskType.ImageSegmenter,{canvas:this.context._canvas}),this._visionTaskRegistry.setVideo(this._selfieSegmentationHash,this.image),this._enableFaceCentering)try{this._visionTaskRegistry.models.has(window.VisionTaskType.FaceDetector)||(yield this._visionTaskRegistry.preloadModels([window.VisionTaskType.FaceDetector]));let e=yield this._visionTaskRegistry.register(window.VisionTaskType.FaceDetector);if(!e)return;this._centerFace=new ZoA(this.wasm.vbMode,this.image,e,this._visionTaskRegistry,this.context.log)}catch{this.log.error("Face detector model not found. Please redeploy the assets of the npm package.")}}})}onPredict(A){let e=this.context.ctx;this._weixin&&(this._lastMaskTexture||(this._lastMaskTexture=this.createTexture(this.image),this._lastMaskFbo=this.createFramebuffer(this._lastMaskTexture)));let o=this.getMaskTexture(A);if(!o)return;let a=o;this._postProcessing&&(this._postProcessing.ratio=this.image.videoWidth/this.image.videoHeight,a=this._postProcessing.postProcessing(o)),this.useProgram(),this.setAttributes(this.positionBuffer,this.texCoordBuffer),this.useTexture(),e.activeTexture(e.TEXTURE1),e.bindTexture(e.TEXTURE_2D,a||null),e.activeTexture(e.TEXTURE2),e.bindTexture(e.TEXTURE_2D,this._bgTexture||null),e.activeTexture(e.TEXTURE3),e.bindTexture(e.TEXTURE_2D,this._waterMarkTexture||null),this.wasm.vbMode===3&&e.uniform3fv(this._colorLocation,this._color),this.useBufferFrame(),this._segmentationMask=A,this.totalFrames++,this.centerFace(),tQ(this.wasm.rotation)&&this.resize(this.image.height,this.image.width),e.viewport(0,0,e.canvas.width,e.canvas.height),e.drawArrays(e.TRIANGLE_STRIP,0,4),A.close()}getMaskTexture(A){return A.confidenceMasks?A.confidenceMasks[0].getAsWebGLTexture():void 0}onFirstFrame(){this.waitingFirstFrame=!1;let A=this.context.ctx;this.useTexture(),A.texImage2D(A.TEXTURE_2D,0,A.RGBA,A.RGBA,A.UNSIGNED_BYTE,this.image)}render(A){let e=this.context.ctx,{image:o}=this;this.tryVideoFrameCallback();let{videoWidth:a,videoHeight:l}=o;if(tQ(this.wasm.rotation)&&!this._visionTaskRegistry&&([a,l]=[l,a]),a===0||l===0||!this.available)return!1;o.width=a,o.height=l;let d=!1;if(this.totalFrames)this.useTexture(),d=this._selfieTextureValid,this._selfieTextureValid=!0;else{if(!this.program)return!1;this.useTexture(),d=this._textureValid,this._textureValid=!0}if(this.width===a&&this.height===l&&d?e.texSubImage2D(e.TEXTURE_2D,0,0,0,e.RGBA,e.UNSIGNED_BYTE,o):(this.resize(a,l),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,o)),this._weixin){if(e.useProgram(this._prePrograme),this.useTexture(),this._segmentationMask){let h=this.getMaskTexture(this._segmentationMask);e.activeTexture(e.TEXTURE1),e.bindTexture(e.TEXTURE_2D,h||null),e.bindFramebuffer(e.FRAMEBUFFER,this._lastMaskFbo||null)}e.drawArrays(e.TRIANGLE_STRIP,0,4),this.useTexture(),this._segmentationMask?e.copyTexSubImage2D(e.TEXTURE_2D,0,0,0,0,0,a,l):e.copyTexImage2D(e.TEXTURE_2D,0,e.RGBA,0,0,a,l,0)}try{if(this._selfieSegmentationHash&&this._visionTaskRegistry){let h=this._visionTaskRegistry.getResult(this._selfieSegmentationHash);this.totalFrames===1&&this.context._canvas&&this.resolvePreditReady(),this.onPredict(h)}}catch(h){this._onAbort&&this._onAbort(h)}return this.totalFrames||(e.activeTexture(e.TEXTURE2),e.bindTexture(e.TEXTURE_2D,this._bgTexture||null),e.activeTexture(e.TEXTURE3),e.bindTexture(e.TEXTURE_2D,this._waterMarkTexture||null),e.drawArrays(e.TRIANGLE_STRIP,0,4)),this._visionTaskRegistry&&this._visionTaskRegistry.resetHashResults(),!1}centerFace(){if(!this._centerFace||!this._enableFaceCentering)return;let A=this.context.ctx;this._centerFace.aspectRatio=A.canvas.width/A.canvas.height,this._centerFace.actionCentering(this.image);let{current:e,offset:o}=this._centerFace;if(e&&(this.wasm.vbMode===1&&this.drawImage(e.sx,e.sy,e.cropWidth,e.cropHeight),o&&this.wasm.vbMode===2)){if(!this._mat4)return;let a=this._mat4.create(),{scaleRatio:l=1,scaleOffsetX:d=0,scaleOffsetY:h=0}=e;this._mat4.fromTranslation(a,[-o.offsetX/A.canvas.width+d,h,0]),this._mat4.scale(a,a,[l,l,1]),A.uniformMatrix4fv(this._offsetMatrixLocation,!1,a)}}drawImage(A,e,o,a){let l=this.context.ctx;if(!this._mat4)return;let{width:d,height:h}=l.canvas,y=this._mat4.create();this._mat4.fromTranslation(y,[A/d,1-(e+a)/h,0]),this._mat4.scale(y,y,[o/d,a/h,1]),l.uniformMatrix4fv(this._textureMatrixLocation,!1,y)}close(){var A;super.close();let e=this.context.ctx;this._bgTexture&&e.deleteTexture(this._bgTexture),this._waterMarkTexture&&e.deleteTexture(this._waterMarkTexture),this._lastMaskTexture&&e.deleteTexture(this._lastMaskTexture),this._lastMaskFbo&&e.deleteFramebuffer(this._lastMaskFbo),this._prePrograme&&e.deleteProgram(this._prePrograme),this._postProcessing&&this._postProcessing.close(),(A=this.wasm)==null||A.close()}},$oA=class extends AC{constructor(A){super(A,{name:"yuv-source",useDefaultProgram:!1,create2d:!1,useFbo:!1,createTexture:!1,logger:A.log,fragmentShaderSource:` precision highp float; uniform sampler2D ySampler; uniform sampler2D uSampler; @@ -361,29 +361,29 @@ void main() { void main() { gl_Position = vertexPos; textureCoord = texturePos; - }`}),Y(this,"yTextureRef"),Y(this,"uTextureRef"),Y(this,"vTextureRef"),Y(this,"Y"),Y(this,"U"),Y(this,"V"),this.useProgram();let e=this.context.ctx;e.pixelStorei(e.PACK_ALIGNMENT,1),e.pixelStorei(e.UNPACK_ALIGNMENT,1),this.setTexBuffer([0,1,1,1,0,0,1,0]),this.yTextureRef=this._initTexture("ySampler",0),this.uTextureRef=this._initTexture("uSampler",1),this.vTextureRef=this._initTexture("vSampler",2),this._canvas=A._canvas}_initTexture(A,e){let o=this.context.ctx,a=o.createTexture();return o.bindTexture(o.TEXTURE_2D,a),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MAG_FILTER,o.LINEAR),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MIN_FILTER,o.LINEAR),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),o.bindTexture(o.TEXTURE_2D,null),o.uniform1i(o.getUniformLocation(this.program,A),e),a}render(A){let e=this.context.ctx,o=this.width,a=this.height;return this.useProgram(),e.viewport(0,0,o,a),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,this.yTextureRef),e.texSubImage2D(e.TEXTURE_2D,0,0,0,o,a,e.LUMINANCE,e.UNSIGNED_BYTE,this.Y),e.activeTexture(e.TEXTURE1),e.bindTexture(e.TEXTURE_2D,this.uTextureRef),e.texSubImage2D(e.TEXTURE_2D,0,0,0,o/2,a/2,e.LUMINANCE,e.UNSIGNED_BYTE,this.U),e.activeTexture(e.TEXTURE2),e.bindTexture(e.TEXTURE_2D,this.vTextureRef),e.texSubImage2D(e.TEXTURE_2D,0,0,0,o/2,a/2,e.LUMINANCE,e.UNSIGNED_BYTE,this.V),this.draw(),!0}resize(A,e){super.resize(A,e);let o=this.context.ctx;o.activeTexture(o.TEXTURE0),o.bindTexture(o.TEXTURE_2D,this.yTextureRef),o.texImage2D(o.TEXTURE_2D,0,o.LUMINANCE,A,e,0,o.LUMINANCE,o.UNSIGNED_BYTE,null),o.activeTexture(o.TEXTURE1),o.bindTexture(o.TEXTURE_2D,this.uTextureRef),o.texImage2D(o.TEXTURE_2D,0,o.LUMINANCE,A/2,e/2,0,o.LUMINANCE,o.UNSIGNED_BYTE,null),o.activeTexture(o.TEXTURE2),o.bindTexture(o.TEXTURE_2D,this.vTextureRef),o.texImage2D(o.TEXTURE_2D,0,o.LUMINANCE,A/2,e/2,0,o.LUMINANCE,o.UNSIGNED_BYTE,null)}},Pz=(A,e)=>{switch(A){case"webCodecs":return e==="videoFrame"?514705:514706;case"wasm":return e==="webgl"?514707:e==="videoFrame"?514708:514709}throw new Error("decoder type not supported")},SoA=0,MoA=class{constructor(A){Y(this,"id",SoA++),Y(this,"trackDoneOB"),Y(this,"startOB"),Y(this,"stopOB"),Y(this,"decoder"),Y(this,"videoContext"),Y(this,"gop",0),Y(this,"gop_helper",0),Y(this,"waitFirstKeyFrame",!0),Y(this,"startTimestamp",0),Y(this,"startTime",0),Y(this,"startPerformanceTime",0),Y(this,"inputFrameCount",0),Y(this,"decodedFrameCount",0),Y(this,"decodeFrameCount",0),Y(this,"downgradeLevel",0),Y(this,"lastDowngradeTime",0),Y(this,"lastFrameDiff",0),Y(this,"lastDecodeFrameTimestamp",0),Y(this,"config"),Y(this,"gop_before_configure",[]),Y(this,"videoElement"),Y(this,"type","wasm"),Y(this,"goodType"),Y(this,"renderer","2d"),Y(this,"wasmOption"),Y(this,"createDecoder"),Y(this,"_decodeSink"),Y(this,"isReported",!1),Y(this,"track"),Y(this,"stateChangeOB"),Y(this,"failedReason");let{track:e,createDecoder:o}=A;if(this.stateChangeOB=EQ(),this.track=e,this.createDecoder=o,this.wasmOption={yuvMode:A.renderer==="webgl",wasmPath:A.wasmPath,workerMode:A.workerMode,canvas:A.canvas},this.config=A.config,this.videoElement=A.videoElement,this.renderer=A.renderer,this.trackDoneOB=ca(e.availableState,Zs.OFF),this.stopOB=EQ(),A.type==="auto"){switch(A.fallback){case"wasm":this.type="wasm",this.renderer="webgl";break;case"wasm_2d":this.type="wasm",this.renderer="2d";break;case"wasm_video":this.type="wasm",this.renderer="videoFrame";break;default:this.type="webCodecs"}this.wasmOption.yuvMode=this.renderer==="webgl"}else this.type=A.type;this.changeRenderer(this.renderer),ma(this.stateChangeOB,S5((a,c)=>(a!==c&&e.onDecodeDowngradeStateChanged({type:this.type,renderer:this.renderer,reason:this.failedReason,prevState:a,state:c}),c),"INITIALIZED"),EE(this.stopOB),Bl()),this.start()}start(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;this.waitFirstKeyFrame=!0,this.stateChangeOB.next("STARTING");let e=ma(this.pipe(this.track),EE(this.stopOB),AL());ma(e,Bl(()=>{this.track.stat.framesDecoded++},o=>{if(this.track.log.error("".concat(this.id," play failed: ").concat(o," retryCount: ").concat(A)),ii.addFailedEvent({key:Pz(this.type,this.renderer),error:o}),A>4)this.failedReason=o,this.stateChangeOB.next("FAILED"),ii.addFailedEvent({key:514704});else{if(this.goodType)return void this.start(A);switch(this.type){case"webCodecs":this.type="wasm",this.changeRenderer("webgl");break;case"wasm":this.renderer==="webgl"&&this.changeRenderer("videoFrame")}this.start(A+1)}},()=>{this.track.log.warn("".concat(this.id," decoderOB completed")),ii.addSuccessEvent({key:Pz(this.type,this.renderer)}),ii.addSuccessEvent({key:514704})})),ma(e,l_(1),Bl(()=>{this.track.player.handlePlaying("canvas"),this.goodType=this.type,this.stateChangeOB.next("STARTED")}))}mock(A){this._decodeSink?this._decodeSink.error(A):this.start()}close(A){this.stopOB.next(A)}changeRenderer(A){this.renderer=A,this.renderer==="videoFrame"&&!RM()&&(this.renderer="2d"),this.wasmOption.yuvMode=this.renderer==="webgl"}decode(A){let e=arguments.length>1&&arguments[1]!==void 0&&arguments[1];var o,a;if(this.failedReason)return;this.inputFrameCount++;let c=new Uint8Array(A.data);if((d=c)[0]!==0||d[1]!==0||d[2]!==0||d[3]!==1||c.length<5)return this.stateChangeOB.next("FAILED"),this.close("not h26x frame ".concat(c.subarray(0,5))),A;var d;let C=!1;switch(31&c[4]){case 5:case 7:C=!0}if(((o=this.decoder)==null?void 0:o.state)!=="configured")return this.track.log.debug("not configured ".concat(this.inputFrameCount)),C&&(this.gop_before_configure=[]),this.gop_before_configure.push({data:A.data,timestamp:A.timestamp,type:A.type}),A;this.gop_before_configure.length>0&&!e&&(this.gop_before_configure.forEach(S=>this.decode(S,!0)),this.gop_before_configure=[]);let{timestamp:y}=A;if(C?(this.gop=this.gop_helper,this.gop_helper=0):this.gop_helper++,this.decoder){if(this.waitFirstKeyFrame){if(!C)return void this.track.log.debug("wait first key frame ".concat(this.inputFrameCount," ").concat(c.subarray(0,5).join(" ")));this.waitFirstKeyFrame=!1,this.startTimestamp=y,this.startTime=Date.now(),this.startPerformanceTime=ko()}switch(this.downgradeLevel){case 0:case 1:break;case 2:if(this.gop_helper>this.gop>>1)return;break;case 3:if(this.gop_helper>0)return;break;default:return}return(this.decodeFrameCount<10||this.decodeFrameCount%500==0)&&this.track.log.debug("decode ".concat(this.decodeFrameCount," gop: ").concat(this.gop," ").concat(y," ").concat((a=A.getMetadata)==null?void 0:a.call(A).rtpTimestamp)),this.decodeFrameCount++,this.lastDecodeFrameTimestamp=y,void this.decoder.decode({data:A.data,type:A.type,timestamp:this.lastDecodeFrameTimestamp})}return A}checkDowngradeByFrameDiff(){let A=this.downgradeLevel,e=this.decodeFrameCount-this.decodedFrameCount;e>this.lastFrameDiff?(this.downgradeLevel++,this.downgradeLevel>4&&(this.downgradeLevel=4)):e<=this.lastFrameDiff&&this.downgradeLevel>0&&this.downgradeLevel--,this.downgradeLevel!==A&&this.track.log.debug("downgrade level ".concat(A," to ").concat(this.downgradeLevel," ").concat(this.decodeFrameCount," frameDiff: ").concat(e,", lastFrameDiff: ").concat(this.lastFrameDiff)),this.lastFrameDiff=e,this.lastDowngradeTime=Date.now()}checkDowngradeByTimestampDiff(A){let e=this.downgradeLevel;this.lastDecodeFrameTimestamp-A>9e4?(this.downgradeLevel++,this.downgradeLevel>4&&(this.downgradeLevel=4)):this.downgradeLevel>0&&this.downgradeLevel--,this.downgradeLevel!==e&&this.track.log.debug("downgrade level ".concat(e," to ").concat(this.downgradeLevel))}pipe(A){return e=>KA(this,null,function*(){this._decodeSink=e;let o,a=A.mediaTrack;e.defer(()=>{var C;a&&(A.player.setCanvas(),A.setInputMediaStreamTrack(a)),o?.close(),(C=this.videoContext)==null||C.destroy(),delete this._decodeSink});let{renderer:c,type:d}=this;A.log.info("decoder type: ".concat(this.type," renderer: ").concat(this.renderer));try{switch(d){case"wasm":o=this.createDecoder(d,this.wasmOption);break;case"webCodecs":o=this.createDecoder(d);break;default:throw new Error("not supported yet")}let C=0;if(o.on("videoFrame",y=>{this.decodedFrameCount++,C++,(C<=10||C%500==0)&&A.log.debug("frame ".concat(C," ").concat(this.decodedFrameCount,"/").concat(this.decodeFrameCount," decoded ").concat(y.timestamp)),Date.now()-this.lastDowngradeTime>5e3&&(this.type==="webCodecs"?this.checkDowngradeByFrameDiff():this.type==="wasm"&&this.checkDowngradeByTimestampDiff(y.timestamp)),e.next(y)}),o.on("error",y=>{A.log.error(y),e.error(d==="webCodecs"?4:8)}),yield o.initialize(this.videoElement),!this._decodeSink)return;if(o.configure(this.config),d==="wasm"&&c==="webgl"){this.videoContext=new VC({frameRate:15,logger:A.log,name:A.userId}),this.videoContext.create(),this.videoContext.on(VC.UNAVAILABLE,S=>{A.log.error(S),e.error(7)});let y=new DoA(this.videoContext);o.on("videoCodecInfo",S=>y.resize(S.width,S.height)),o.on("videoFrame",S=>{({y:y.Y,u:y.U,v:y.V}=S),this.downgradeLevel===1?this.decodedFrameCount%2==0&&y.render(this.decodedFrameCount):y.render(this.decodedFrameCount)}),A.source=y,A.player.setCanvas(this.videoContext._canvas,2)}else if(c==="videoFrame"){A.player.setCanvas();let y=new MediaStreamTrackGenerator({kind:"video"}),S=y.writable.getWriter();A.setInputMediaStreamTrack(y),o.on("videoFrame",k=>S.write(k))}else{this.videoContext=new CQ({frameRate:15,logger:A.log,name:A.userId}),this.videoContext.create({alpha:!1});let y=this.videoContext.createVideoImageSource();o.on("videoFrame",k=>{try{y.image=k,y.update()}catch(V){delete this.goodType,A.log.error(V),e.error(11)}});let S=new qK(this.videoContext,{name:"remotePlayer",logger:A.log});y.connect(S),A.source=y,A.player.setCanvas(this.videoContext._canvas,2)}this.decoder=o}catch(C){A.log.error(C),e.error(d==="webCodecs"?2:6)}})}},xz=Promise.resolve(),Yz=class extends moA.EventEmitter{constructor(A){super(),this.room=A,Y(this,"videoContext"),Y(this,"_glVideoContext"),Y(this,"_2dVideoContext"),Y(this,"destination"),Y(this,"smallVideoContext"),Y(this,"smallDestination"),Y(this,"smallTrackSource"),Y(this,"smallImageSource"),Y(this,"_isMirror",!1),Y(this,"_rotation",0),Y(this,"cameraTrack"),Y(this,"cameraNode"),Y(this,"transformNode"),Y(this,"mixNode"),Y(this,"screenTrack"),Y(this,"screenNode"),Y(this,"selfModel",!1),Y(this,"blurRadius",3),Y(this,"arTrack"),Y(this,"_enableFaceCentering",!1),Y(this,"_enableEffectOptimization",!1),Y(this,"onAbort"),Y(this,"_color"),Y(this,"Wasm"),Y(this,"waterMarkNode"),Y(this,"_waterMarkOption"),Y(this,"watermarkImageList",[]),Y(this,"_beautyParams"),Y(this,"isUsingArTrack",!1),Y(this,"mixTrack"),Y(this,"_isMixScreen",!1),Y(this,"_virtualBackground"),Y(this,"_virtualBackgroundAbortCallback"),Y(this,"virtualBackgroundInstance"),Y(this,"_bgAssetPath"),Y(this,"log"),Y(this,"_mat4"),Y(this,"_postProcessing"),Y(this,"_checkId",0),Y(this,"_use2d",!1),Y(this,"_autoSwitchRenderMode",!0),Y(this,"encodePipeline",[]),Y(this,"decodePipeline",[]),Y(this,"updated",xz),Y(this,"_updateFlag",!1),this.log=QA.createLogger({parent:A?.getLogger(),id:"vm",userId:A?.userId,sdkAppId:A?.sdkAppId}),this.smallVideoContext=new CQ({frameRate:15,logger:this.log,name:"s"}),this.enablePrintDetail()}get smallMode(){var A;return((A=this.room)==null?void 0:A.smallMode)||"canvas"}get _hasVirtualBg(){return!!this._virtualBackground}get _hasWaterMark(){return this.watermarkImageList.length>0}get _isRotate(){return this._rotation!==0}get _isTransform(){return this._isMirror||this._isRotate}get renderMode(){return this._autoSwitchRenderMode?"auto":this._use2d?"2d":"webgl"}set renderMode(A){if(this._autoSwitchRenderMode=A==="auto",this._autoSwitchRenderMode)return;let e=A==="2d";this._use2d!==e&&(this._use2d=e,this.clear(),this.videoContext=this._use2d?this.get2dVideoContext():this.getGlVideoContext(),this.update())}get cameraResolution(){var A;let{width:e,height:o}=((A=this.cameraTrack)==null?void 0:A.settings)||{};return $B(this._rotation)?{width:o,height:e}:{width:e,height:o}}get2dVideoContext(){return this._2dVideoContext?this._2dVideoContext.destroy():this._2dVideoContext=new CQ({frameRate:15,logger:this.log,name:"m"}),this._2dVideoContext.create({alpha:this._hasWaterMark||this._hasVirtualBg}),this._2dVideoContext}getGlVideoContext(){if(this._glVideoContext){if(this._glVideoContext.available)return this._glVideoContext}else this._glVideoContext=new VC({frameRate:15,logger:this.log,name:"m"});return this.initializeGlVideoContext(),this._glVideoContext}initializeGlVideoContext(){try{this._glVideoContext.create(m2<=22),this._glVideoContext.on(VC.UNAVAILABLE,A=>{var e;this.emit("error",A),this.log.warn("video context unavailable",A),(e=this._virtualBackgroundAbortCallback)==null||e.call(this,A),this.update().catch(o=>{this.log.error(o)})})}catch(A){this.emit("error",A)}}initVirtualBackground(A,e,o){this.onAbort=A,this._mat4=e,this._postProcessing=o}enablePrintDetail(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:2e3;this._checkId=Gr.run("interval",()=>{this.destination&&this.log.debug(this.destination.getInfo())},{delay:A})}destroy(){var A,e;(A=this._2dVideoContext)==null||A.destroy(),(e=this._glVideoContext)==null||e.destroy(),this.smallVideoContext.destroy(),Gr.clearTask(this._checkId)}get needAlpha(){return this._hasWaterMark||this._hasVirtualBg}get active(){return(Fp||this._isMixScreen||this._isTransform||this._hasWaterMark||this._hasVirtualBg||this._beautyParams)&&this.checkOrCreateVideoContext()}sendCreateResult(){let A=arguments.length>1?arguments[1]:void 0,e=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:"videoCtxGl")==="videoCtxGl"?512700:512701;A?ii.addFailedEvent({key:e,error:A}):ii.addSuccessEvent({key:e})}checkOrCreateVideoContext(){let A=this._use2d;if(this._autoSwitchRenderMode&&(this._use2d=!this._hasVirtualBg),this.videoContext)if(this.videoContext.available){let e=!this.videoContext.hasAlpha&&this.needAlpha;if(this._autoSwitchRenderMode&&A===this._hasVirtualBg)this.clear();else{if(!e||!this._use2d)return!0;this.clear()}}else{if(this._glVideoContext=new VC({frameRate:15,logger:this.log,name:"m"}),this.initializeGlVideoContext(),this._glVideoContext.available)return this.videoContext=this._glVideoContext,this.videoContext.available;this.log.warn("webgl is still not available"),this.clear(),this._use2d=!0}return this.videoContext=this._use2d?this.get2dVideoContext():this.getGlVideoContext(),this.videoContext.available}get smallTrack(){var A;return(A=this.smallDestination)==null?void 0:A.videoTrack}get hasSmall(){return!!this.smallTrack}get initialTrack(){var A;return(A=this.cameraTrack)==null?void 0:A.mediaTrack}setSmallVideo(A,e){if(this.smallMode!=="api")if(A){if(!this.smallVideoContext.available){if(this.smallVideoContext.create({alpha:!1}),!this.smallVideoContext.available)return;this.smallDestination=new XtA(this.smallVideoContext,A,this.log),this.smallVideoContext.on(VC.UNAVAILABLE,o=>{this.log.warn("small video context lost",o)})}if(this.smallVideoContext.frameRate=A.frameRate,this.smallDestination.resolution=A,e)this.smallTrackSource&&(this.smallTrackSource.close(),delete this.smallTrackSource),this.smallImageSource?this.smallImageSource.image=e:(this.smallImageSource=this.smallVideoContext.createVideoImageSource(e),this.smallImageSource.resize(e.width,e.height),this.smallImageSource.connect(this.smallDestination));else if(this.smallImageSource&&(this.smallImageSource.close(),delete this.smallImageSource),this.smallTrackSource)this.smallTrackSource.replaceTrack(this.initialTrack);else{this.smallTrackSource=this.smallVideoContext.createVideoTrackSource(this.initialTrack,"smallTrackSource");let{width:o,height:a}=this.cameraTrack.settings;this.smallTrackSource.resize(o,a),this.smallTrackSource.connect(this.smallDestination)}}else this.smallVideoContext.available&&(this.smallVideoContext.destroy(),delete this.smallDestination,delete this.smallTrackSource,delete this.smallImageSource)}_setMainOutput(A){var e,o;try{let a=this.cameraTrack,{small:c,player:d}=a;Fp&&d.setCanvas(A);let C=A&&((e=this.destination)==null?void 0:e.videoTrack)||this.initialTrack;return this.isUsingArTrack&&this.arTrack&&(this.emit("output-track-changed"),C=this.arTrack),this.log.info("set main output ".concat(C?C.label:"no output track")),this.setSmallVideo(c,A),F.emit(nA.LOCAL_VIDEO_TRACK_PREPROCESSED,{mediaTrack:C,profile:(o=this.cameraTrack)==null?void 0:o.profile,room:this.room}),a.setOutputMediaStreamTrack(C)}catch(a){this.log.error("set main output failed",a)}}update(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return KA(this,null,function*(){var e;if(!this.cameraTrack||!this.initialTrack)return;if(!this.active)return this.cameraNode&&this.clear(),this._setMainOutput();let{settings:o,profile:a}=this.cameraTrack;if(this._use2d||!this._virtualBackground&&!this._beautyParams)this.destination||(this.destination=this.videoContext.createVideoTrackDestination({name:"mainDestination2d",logger:this.log}),this.destination.on(AC.RENDER,c=>{var d;(d=this.cameraTrack)==null||d.emit("render",c)})),Zd===16?this.initialTrack instanceof CanvasCaptureMediaStreamTrack?(this.cameraNode&&(this.cameraNode instanceof I_?(this.cameraNode.close(),delete this.cameraNode):this.cameraNode.image=this.initialTrack.canvas),this.cameraNode||(this.cameraNode=this.videoContext.createVideoImageSource(this.initialTrack.canvas,{name:"cameraCanvasSource",logger:this.log}))):(this.cameraNode&&(this.cameraNode instanceof I_?this.cameraNode.replaceTrack(this.initialTrack):(this.cameraNode.close(),delete this.cameraNode)),this.cameraNode||(this.cameraNode=this.videoContext.createVideoTrackSource(this.initialTrack,"cameraTrackSource"))):this.cameraNode?this.cameraNode.replaceTrack(this.initialTrack):this.cameraNode=this.videoContext.createVideoTrackSource(this.initialTrack,"cameraNodeSource"),this.cameraNode.resize(o.width,o.height);else if(A&&this.cameraNode&&this.destination)this.cameraNode.replaceTrack(this.initialTrack);else{this.cameraNode&&this.cameraNode.close(),this.destination?this.destination.disableCheckMute():(this.destination=new ZtA(this.videoContext,{name:"mainDestination",logger:this.log}),this.destination.on(AC.RENDER,y=>{var S;(S=this.cameraTrack)==null||S.emit("render",y)}));let{width:c,height:d}=this.cameraResolution,C=yield this.getWatermarkImage(c,d);this._waterMarkOption={x:0,y:0,width:C.width,height:C.height,image:C},this.cameraNode=new yoA(this.videoContext,{input:this.initialTrack,width:c,height:d,mirror:this._isMirror,rotation:this._rotation,bg:this._virtualBackground,selfModel:this.selfModel,waterMark:this._waterMarkOption,beautyParams:this._beautyParams,useTflite:!0,blurRadius:this.blurRadius,assetPath:this._bgAssetPath,Wasm:this.Wasm,enableFaceCentering:this._enableFaceCentering,enableEffectOptimization:this._enableEffectOptimization,onAbort:this.onAbort,mat4:this._mat4,postProcessing:this._postProcessing,color:this._color}),this.cameraNode.connect(this.destination),this.destination.enableCheckMute(),yield this.cameraNode.predictReady}if(this.videoContext.frameRate=a.frameRate,this._use2d){let c=this.cameraNode;if(c.disconnect(),this._isTransform&&(this.transformNode?(this.transformNode.mirror=this._isMirror,this.transformNode.rotation=this._rotation):this.transformNode=new Sy(this.videoContext,this.log,this._isMirror,this._rotation),c=c.connect(this.transformNode),c.disconnect(),this.log.info("start mirror ".concat(this._isMirror," rotate ").concat(this.rotation))),this.mixNode&&this.mixNode.close(),delete this.mixNode,this._isMixScreen||this._hasWaterMark){if(this.mixNode=new F5(this.videoContext,this.log),c.connect(this.mixNode,{zIndex:1}),this._hasWaterMark&&!this.waterMarkNode&&this._waterMarkOption)this.waterMarkNode=this.videoContext.createVideoImageSource(this._waterMarkOption.image,{autoResize:!1,logger:this.log}),this.waterMarkNode.resize(this._waterMarkOption.width,this._waterMarkOption.height),this.waterMarkNode.x=this._waterMarkOption.x,this.waterMarkNode.y=this._waterMarkOption.y;else if(this.waterMarkNode){let{width:d,height:C}=this.cameraResolution;this.waterMarkNode.image=yield this.getWatermarkImage(d,C),d&&C&&this.waterMarkNode.resize(d,C)}(e=this.waterMarkNode)==null||e.connect(this.mixNode,{zIndex:2}),this._isMixScreen&&this.screenTrack&&(this.screenNode||(this.screenNode=this.videoContext.createVideoTrackSource(this.screenTrack.mediaTrack,"screenNodeSource"),this.screenNode.resize(this.screenTrack.settings.width,this.screenTrack.settings.height)),this.screenNode.shouldUpdate=!1,this.screenNode.connect(this.mixNode,{zIndex:0})),c=this.mixNode,this.log.info("start mix","".concat(this.mixNode.width,"x").concat(this.mixNode.height))}c.connect(this.destination)}return this.log.info("update ".concat(this._use2d?"2d":"webgl")),this._setMainOutput(this.videoContext.canvas)})}clearLastFrame(){var A;this.destination&&((A=this.destination.ctx2d)==null||A.clearRect(0,0,this.destination.width,this.destination.height))}changeInput(A){var e,o,a,c,d;if(A instanceof qM)return this.log.info("change screen input",(e=A.mediaTrack)==null?void 0:e.label),this.setScreenTrack(A);if(A instanceof dQ)return this.log.info("change video input",(o=A.mediaTrack)==null?void 0:o.label),this.setCameraTrack(A);if(A instanceof cL){this.log.info("change remote input",(a=A.mediaTrack)==null?void 0:a.label);let C=A.mediaTrack;return A.setOutputMediaStreamTrack(C)}if(A instanceof jK)return this.log.info("change mix input",(c=A.outMediaTrack)==null?void 0:c.label),this.setMixTrack(A);this.log.warn("change unknown input",(d=A.mediaTrack)==null?void 0:d.label)}removeInput(A){var e;A instanceof qM?((e=this.screenNode)==null||e.close(),delete this.screenNode,delete this.screenTrack,this.update()):A instanceof dQ?this._isMixScreen?(delete this.cameraNode,this.cameraTrack._inputTrack=null,this.update()):(this.clear(),delete this.cameraTrack,this.smallImageSource&&(this.smallImageSource.close(),delete this.smallImageSource),this.smallTrackSource&&(this.smallTrackSource.close(),delete this.smallTrackSource)):A instanceof cL?A.source&&A.source.context.destroy():A instanceof jK&&(delete this.mixTrack,this.update())}setMixTrack(A){this.mixTrack=A}setCameraTrack(A){return this.cameraTrack=A,this.update(!0)}setScreenTrack(A){return KA(this,null,function*(){return this.screenTrack=A,this._isMixScreen&&(this.screenNode?this.screenNode.replaceTrack(A.mediaTrack):yield this.update()),A.setOutputMediaStreamTrack(A.mediaTrack)})}getWatermarkImage(A,e){return KA(this,null,function*(){let o=document.createElement("canvas");e&&A&&(o.height=e,o.width=A);let a=o.getContext("2d");if(!a)throw new ai({code:dt.NOT_SUPPORTED,message:"Make image failed because of canvas context is null"});return this.watermarkImageList.sort((c,d)=>c.zIndex-d.zIndex),this.watermarkImageList.forEach(c=>{let{image:d,x:C,y,width:S,height:k,fillVideo:V}=c,J=V&&A||S,gA=V&&e||k,CA=V?0:C,MA=V?0:y;a.drawImage(d,CA,MA,J,gA)}),rM(o.toDataURL())})}pushWaterMarkImageList(A){let{type:e}=A;this.watermarkImageList.some(o=>o.imageUrl===A.imageUrl&&o.height===A.height&&o.width===A.width&&o.x===A.x&&o.y===A.y&&o.type===A.type&&o.zIndex===A.zIndex&&o.fillVideo===A.fillVideo)||((e==="mute"||e==="watermark")&&(this.watermarkImageList=this.watermarkImageList.filter(o=>o.type!==e)),this.watermarkImageList.push(A))}setBeautyParams(A){return KA(this,null,function*(){this._beautyParams=A,this.update()})}stopBeauty(){return KA(this,null,function*(){this._beautyParams=void 0,this.update()})}setWatermark(A){return KA(this,null,function*(){let e;try{e=yield rM(A?.imageElement||A.imageUrl)}catch{throw new ai({code:dt.INVALID_PARAMETER,message:"load image failed, url: ".concat(A.imageUrl)})}let{x:o=0,y:a=0,width:c=e.width,height:d=e.height,type:C="watermark",zIndex:y=2,fillVideo:S=!1}=A;this.watermarkImageList.some(k=>k.type===C)?(this.watermarkImageList=this.watermarkImageList.filter(k=>k.type!==C),this.pushWaterMarkImageList({x:o,y:a,width:c,height:d,image:e,zIndex:y,type:C,imageUrl:A.imageUrl,fillVideo:S}),e=yield this.getWatermarkImage(this.cameraResolution.width,this.cameraResolution.height),this._waterMarkOption={x:0,y:0,width:e.width,height:e.height,image:e},this.waterMarkNode?(this.waterMarkNode.x=0,this.waterMarkNode.y=0,this.waterMarkNode.resize(e.width,e.height),this.waterMarkNode.image=e):this.update()):(this.pushWaterMarkImageList({x:o,y:a,width:c,height:d,image:e,zIndex:y,type:C,imageUrl:A.imageUrl,fillVideo:S}),yield this.freshWatermark()),this.log.info("set watermark",JSON.stringify(this.watermarkImageList,(k,V)=>k==="imageUrl"?void 0:V))})}deleteWatermark(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"watermark";return KA(this,null,function*(){this.watermarkImageList=this.watermarkImageList.filter(e=>e.type!==A),this.log.info("delete watermark",A,JSON.stringify(this.watermarkImageList,(e,o)=>e==="imageUrl"?void 0:o)),yield this.freshWatermark()})}freshWatermark(){return KA(this,null,function*(){var A;(A=this.waterMarkNode)==null||A.close(),delete this.waterMarkNode,delete this._waterMarkOption;let{width:e,height:o}=this.cameraResolution,a=yield this.getWatermarkImage(e,o);this._waterMarkOption={x:0,y:0,width:a.width,height:a.height,image:a},this.update()})}setVirtualBackground(A){return KA(this,null,function*(){var e,o,a;if(A){if(A.onAbort&&(this._virtualBackgroundAbortCallback=A.onAbort),this._use2d&&!this._autoSwitchRenderMode)return Promise.reject(new Error("not support virtual background in 2d mode"));this._bgAssetPath=A.assetPath,A.type==="image"?this._virtualBackground=yield rM(A.imageUrl):(this.blurRadius=A.blurLevel||this.blurRadius||3,this._virtualBackground=A.type),this._enableFaceCentering=(e=A.enableFaceCentering)!=null?e:this._enableFaceCentering,this._enableEffectOptimization=(o=A.enableEffectOptimization)!=null?o:this._enableEffectOptimization,this._color=(a=A.color)!=null?a:[0,1,0]}else delete this._virtualBackground,delete this._virtualBackgroundAbortCallback;if(this.log.info("".concat(this._virtualBackground?"start":"stop"," virtual background, ").concat(A?.type||"",", ").concat(this.blurRadius||"")),yield this.update(),this._virtualBackground&&!this._glVideoContext.available)throw new ai({code:dt.INVALID_OPERATION,message:"webgl context create failed, ".concat(this._glVideoContext.error)})})}get mixScreen(){return this._isMixScreen}set mixScreen(A){var e;this._isMixScreen=A,this._isMixScreen||((e=this.screenNode)==null||e.close(),delete this.screenNode),this.update()}set mirror(A){var e;this._isMirror!==A&&(this._isMirror=A,this._isTransform||((e=this.transformNode)==null||e.close(),delete this.transformNode),this.update())}get mirror(){return this._isMirror}set rotation(A){var e;this._rotation!==A&&(this._rotation=A,this._isTransform||((e=this.transformNode)==null||e.close(),delete this.transformNode),this.update())}get rotation(){return this._rotation}enableAr(A){this.arTrack=A,this.isUsingArTrack=!0,this.update()}updateAr(){return KA(this,null,function*(){var A;(A=this.cameraTrack)!=null&&A.mediaTrack&&(yield this.virtualBackgroundInstance.ar.updateInputTrack(this.cameraTrack.mediaTrack.clone()))})}disableAr(){var A;this.isUsingArTrack=!1,(A=this.arTrack)==null||A.stop(),this.arTrack=void 0,this.update()}createDecodeContext(A){return new MoA(A)}clear(){var A,e;(A=this.videoContext)==null||A.disconnect(),(e=this.destination)==null||e.removeAllListeners(),delete this.destination,delete this.cameraNode,delete this.transformNode,delete this.screenNode,delete this.waterMarkNode}addEncodeProcessor(A){let{processor:e,type:o}=A;var a;this.encodePipeline.includes(e)||(this.encodePipeline[o]=e,(a=this.room)==null||a.enableInsertableStreams())}addDecodeProcessor(A){let{processor:e,type:o}=A;var a;this.decodePipeline.includes(e)||(this.decodePipeline[o]=e,(a=this.room)==null||a.enableInsertableStreams())}removeEncodeProcessor(A){let{type:e}=A;this.encodePipeline[e]=void 0}removeDecodeProcessor(A){let{type:e}=A;this.decodePipeline[e]=void 0}};Ci([r5(function(A){this.log.error("update failed",A)}),jr(A=>function(){for(var e=arguments.length,o=new Array(e),a=0;a{A.apply(this,o).then(c,d),setTimeout(d,5e3,new ai({code:dt.API_CALL_TIMEOUT,message:"update timeout"}))}),this._updateFlag=!1,yield this.updated)})})],Yz.prototype,"update");var voA=0,RoA=class extends Zs{constructor(A){super("room"),Y(this,"seq",++voA),Y(this,"sdkAppId"),Y(this,"userId"),Y(this,"userSig"),Y(this,"privateMapKey"),Y(this,"latencyLevel"),Y(this,"tinyId"),Y(this,"scene"),Y(this,"roomId"),Y(this,"useStringRoomId"),Y(this,"role","anchor"),Y(this,"joinParams",null),Y(this,"localPublishFlag",0),Y(this,"localTracks",new Set),Y(this,"enableAutoPlayDialog",!0),Y(this,"autoReceiveAudio",!0),Y(this,"autoReceiveVideo",!0),Y(this,"proxy_ws"),Y(this,"proxy_wt"),Y(this,"proxy_unified"),Y(this,"checkSystemResult",{result:!0,detail:{isBrowserSupported:!0,isWebRTCSupported:!0,isWebCodecsSupported:!0,isMediaDevicesSupported:!0,isScreenShareSupported:!0,isSmallStreamSupported:!0,isH264EncodeSupported:!0,isVp8EncodeSupported:!0,isH264DecodeSupported:!0,isVp8DecodeSupported:!0,isH265EncodeSupported:!0,isH265DecodeSupported:!0}}),Y(this,"keyPointManager"),Y(this,"audioManager"),Y(this,"videoManager"),Y(this,"callDurationCalculator"),Y(this,"badCaseDetector"),Y(this,"scheduleResult",{domains:null,iceServers:null,iceTransportPolicy:null,trtcAutoConf:null}),Y(this,"videoDecodeFallbackType"),Y(this,"smallMode","canvas"),Y(this,"prelinkPromise",null),Y(this,"enableChorus",!1),Y(this,"_isUsingCachedSchedule",!1),Y(this,"_log"),Y(this,"_joinedTimestamp",0),Y(this,"_sdkType"),Y(this,"heartbeatReport"),Y(this,"heartbeatCount",0),Y(this,"quality"),Y(this,"enableSEI"),Y(this,"isDestroyed",!1),this._log=QA.createLogger({parent:A.logger,id:"r".concat(this.seq)}),this.useStringRoomId=!!A.useStringRoomId,Nr(A.autoReceiveAudio)&&(this.autoReceiveAudio=A.autoReceiveAudio),Nr(A.autoReceiveVideo)&&(this.autoReceiveVideo=A.autoReceiveVideo),Nr(A.enableAutoPlayDialog)&&(this.enableAutoPlayDialog=A.enableAutoPlayDialog),this._sdkType=A.sdkType,this.keyPointManager=new hoA({room:this,frameWorkType:A.frameWorkType,component:A.component,language:A.language}),this.callDurationCalculator=new BoA({room:this}),this.badCaseDetector=new poA({room:this}),this.audioManager=new oiA(this),this.videoManager=new Yz(this)}get videoCodec(){return"h264"}get scriptTransformWorker(){}get isMainStreamPublished(){for(let A of this.localTracks)if(4&A.mediaType)return!0;return!1}get isAuxStreamPublished(){for(let A of this.localTracks)if(2&A.mediaType)return!0;return!1}get hasAuxStream(){for(let A of this.remotePublishedUserMap.values())if(A.muteState.hasAuxiliary)return!0;return this.isAuxStreamPublished}get localMainAudioTrack(){for(let A of this.localTracks)if(1&A.mediaType)return A;return null}get localMainVideoTrack(){for(let A of this.localTracks)if(4&A.mediaType)return A;return null}get localAuxVideoTrack(){for(let A of this.localTracks)if(2&A.mediaType)return A;return null}get publishState(){let A={audio:!1,bigVideo:!1,smallVideo:!1,auxVideo:!1};return this.localTracks.forEach(e=>{if(e.isPublished||e.isPublishing)switch(e.mediaType){case 1:A.audio=!0;break;case 4:A.bigVideo=!0,A.smallVideo=e.hasSmall;break;case 2:A.auxVideo=!0}}),A}get muteState(){var A,e,o;return{audio:!((A=this.localMainAudioTrack)==null||!A.muted),bigVideo:!((e=this.localMainVideoTrack)==null||!e.muted),auxVideo:!((o=this.localAuxVideoTrack)==null||!o.muted)}}getLogger(){return this._log}get isJoining(){return this.state.toString()==="joining"}get isJoined(){return this.state==="joined"}get isLeft(){return this.state==="left"}addTrack(A){return KA(this,null,function*(){return this.publish(A)})}removeTrack(A){return KA(this,null,function*(){return this.unpublish(A)})}replaceTrack(A){return KA(this,null,function*(){})}setEncodedDataProcessingListener(A){throw new Error("Method not implemented.")}enableAIVoice(A){throw new Error("Method not implemented.")}setProxyServer(A){if(Yn(A))/^wss?:\/\//i.test(A)?this.proxy_ws=A:/^https?:\/\//i.test(A)&&(this.proxy_wt=A);else if(lE(A)){let{websocketProxy:e,webtransportProxy:o,loggerProxy:a,scheduleProxy:c,unifiedProxy:d}=A;this.proxy_ws=e,this.proxy_wt=o,this.proxy_unified=d,d?($K([d,d]),VS("https://".concat(d))):(a&&VS(a),c&&$K(c))}F.once(nA.JOIN_RECEIVED_CMD_RES,()=>this.sendAbilityStatus({sched_domain:em.main,sched_back_domain:em.backup,signal_domain:this.proxy_ws||this.proxy_wt||""}))}getRemoteAudioStats(){return KA(this,null,function*(){let A={};return this.remotePublishedUserMap.forEach(e=>{A[e.userId]=e.remoteAudioTrack.stat}),A})}getTransportStats(){return KA(this,null,function*(){var A;let e={rtt:((A=this.quality)==null?void 0:A.uplinkRTT)||0,downlinksRTT:{}};if(this.quality)for(let o of this.quality.downlinkInfo)e.downlinksRTT[o.userId]=o.rtt;return e})}getRemoteVideoStats(){return KA(this,arguments,function(){var A=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"main";return function*(){let o={};return A.remotePublishedUserMap.forEach(a=>{let c=e==="auxiliary"?a.remoteAuxiliaryTrack:a.remoteVideoTrack;o[a.userId]=c.stat}),o}()})}checkDestroy(){if(this.isDestroyed)throw new ai({code:dt.INVALID_OPERATION,message:Xo({key:Mo.CLIENT_DESTROYED,data:{funName:"join"}})})}destroy(){if(this.isJoined)throw this._log.warn(cc.INVALID_DESTROY),new ai({code:dt.INVALID_OPERATION,message:Xo({key:Mo.INVALID_DESTROY})});this._log.info("destroy room"),this.audioManager.destroy(),this.videoManager.destroy(),this.keyPointManager.destroy(),this.callDurationCalculator.destroy(),this.badCaseDetector.destroy(),this.isDestroyed=!0,F.emit(nA.ROOM_DESTROY,{room:this})}schedule(A,e){return KA(this,null,function*(){var o,a,c,d;let C=ko();try{let{isCached:y,result:S,detailCost:k}=yield tz({userId:this.userId,sdkAppId:this.sdkAppId,roomId:this.useStringRoomId?A.strRoomId:A.roomId,useStringRoomId:this.useStringRoomId,version:qd,userSig:this.userSig,role:this.scene==="live"?A.role:void 0,frameWorkType:e,latencyLevel:A.latencyLevel});this._isUsingCachedSchedule=y,this._log.info("schedule cache:".concat(+y," ").concat(zd(S,{keysToExclude:["username","credential"]}))),y&&F.once(nA.JOIN_RECEIVED_CMD_RES,()=>this.sendAbilityStatus({scheduleCache:1})),this.scheduleResult=mi(mi({},this.scheduleResult),S),bn((o=S.config)==null?void 0:o.retryCount)&&c0(S.config.retryCount),Yn((a=S.config)==null?void 0:a.loggerDomain)&&VS(S.config.loggerDomain),this.videoDecodeFallbackType=((c=S.config)==null?void 0:c.videoDecodeFallback)||this.videoDecodeFallbackType,this.smallMode=((d=S.config)==null?void 0:d.smallMode)||this.smallMode,F.emit(nA.JOIN_SCHEDULE_SUCCESS,{room:this,schedule:this.scheduleResult,detailCost:k}),ii.addSuccessEvent({key:521700,cost:ko()-C})}catch(y){throw ii.addFailedEvent({key:521700,error:y}),y}})}sendAbilityStatus(A){}enableInsertableStreams(){return Promise.resolve()}switchRoom(A){return Promise.reject()}isSwitchRoomSupported(){return!1}prelink(A,e,o,a,c,d){return KA(this,null,function*(){return Promise.resolve()})}closePrelink(){return KA(this,null,function*(){return Promise.resolve()})}},woA=gc(Kl()),Vz=gc(Qb());function Jz(A){var e;let o=[];for(let a=0;ad.payload===A.rtp[a].payload)[0];o.push({payload:A.rtp[a].payload,codec:A.rtp[a].codec,fmtp:c?c.config:"",rate:A.rtp[a].rate,rtx:((e=A.rtp[a+1])==null?void 0:e.codec)==="rtx"?A.rtp[a+1].payload:0,rtcpfb:(A?.rtcpFb||[]).filter(d=>d.payload===A.rtp[a].payload).map(d=>{let{type:C,subtype:y}=d;return{id:C,params:y?[y]:[]}})})}return o}var _oA=(A,e,o)=>KA(null,null,function*(){var a;let c=uc(A),d={ice:{ufrag:"",password:""},dtls:{hash:"",fingerprint:"",setup:""},audio:{codecs:[],extensions:[]},video:{codecs:[],decoders:[],extensions:[]},useDataChannel:o};d.ice.ufrag=String(c.media[0].iceUfrag),d.ice.password=c.media[0].icePwd||"",c.fingerprint&&(d.dtls.hash=c.fingerprint.type,d.dtls.fingerprint=c.fingerprint.hash,d.dtls.setup=c.setup||""),c.media[0].fingerprint&&(d.dtls.hash=c.media[0].fingerprint.type,d.dtls.fingerprint=c.media[0].fingerprint.hash),d.dtls.setup=c.media[0].setup||"";let C=c.media[0],y=c.media[1];C.ext&&(d.audio.extensions=C.ext.map(k=>({id:k.value,uri:k.uri}))),y.ext&&(d.video.extensions=y.ext.map(k=>({id:k.value,uri:k.uri})));for(let k of C.rtp){if(k.codec!=="opus")continue;let V=C.fmtp.find(gA=>gA.payload===k.payload);if(!V)continue;let J={codec:k.codec,fmtp:V.config,payload:V.payload,rate:k.rate,channels:k.encoding,rtcpfb:[],rtx:0};(a=C.rtcpFb)==null||a.forEach(gA=>{let{payload:CA,type:MA,subtype:$A}=gA;if(CA===J.payload){let Be={id:MA,params:[]};$A&&Be.params.push($A),J.rtcpfb.push(Be)}}),d.audio.codecs.push(J);break}let S=["h264","vp8","h265"];return e&&S.shift(),d.video.codecs=[...Jz(y)].filter(k=>S.includes(k.codec.toLocaleLowerCase())),d.video.decoders=(yield function(){return KA(this,null,function*(){let k=new RTCPeerConnection;k.addTransceiver(YA.VIDEO,{direction:YA.TRANSCEIVER_DIRECTION_RECVONLY});let V=yield k.createOffer();if(!V.sdp)return[];let J=Jz(uc(V.sdp).media[0]);return k.close(),J})}()).filter(k=>["h264","vp8","h265"].includes(k.codec.toLocaleLowerCase())),d}),Hz=(A,e)=>{let o=(A||"").trim(),a=(e||"").trim(),c="profile-level-id",d="".concat(c,"=[0-9a-fA-F]{6}");if(new RegExp(d).test(o)){let y=new RegExp(d,"g");return o.replace(y,"".concat(c,"=").concat(a))}if(!o)return"".concat(c,"=").concat(a);let C=o.endsWith(";")?"":";";return"".concat(o).concat(C).concat(c,"=").concat(a)},ToA=A=>{let{serverAbility:e,clientAbility:o,offerSDP:a,enableCustomMessage:c,profileLevelIdConfig:d}=A,C=uc(a),y={extmapAllowMixed:"extmap-allow-mixed",groups:C.groups,icelite:"ice-lite",media:[],msidSemantic:{semantic:"",token:"WMS"},name:"-",origin:{address:"127.0.0.1",username:"-",sessionId:String(Date.now()),sessionVersion:1,netType:"IN",ipVer:4},timing:{start:0,stop:0},version:0},S={candidates:e.candidates.map(V=>({component:1,foundation:"1",generation:0,ip:V.ip,port:V.port,priority:V.priority,transport:V.foundation,type:V.type})),connection:{version:4,ip:"0.0.0.0"},direction:YA.TRANSCEIVER_DIRECTION_RECVONLY,ext:e.audio.extensions.map(V=>({value:V.id,uri:V.uri})),fingerprint:{type:e.dtls.hash,hash:e.dtls.fingerprint},fmtp:[{payload:e.audio.codecs[0].payload,config:e.audio.codecs[0].fmtp}],icePwd:e.ice.password,iceUfrag:e.ice.ufrag,mid:"0",payloads:String(e.audio.codecs[0].payload),port:C.media[0].port,protocol:C.media[0].protocol,type:YA.AUDIO,setup:e.dtls.setup,rtcpFb:e.audio.codecs[0].rtcpfb.map(V=>({payload:e.audio.codecs[0].payload,type:V.id,subtype:V.params[0]})),rtcpMux:"rtcp-mux",rtcpRsize:"rtcp-rsize",rtp:[{payload:e.audio.codecs[0].payload,codec:e.audio.codecs[0].codec,rate:e.audio.codecs[0].rate,encoding:e.audio.codecs[0].channels}]};y.media.push(S);let k=[d?.big,d?.small,d?.aux];return[1,2,3].forEach((V,J)=>{y.media.push(qz({mid:V,serverAbility:e,clientAbility:o,parsedOffer:C,profileLevelId:k[J]}))}),c&&y.media.push(C.media.find(V=>V.mid==="dc")),vy(y)},qz=A=>{let{mid:e,serverAbility:o,clientAbility:a,parsedOffer:c,isDownlink:d=!1,profileLevelId:C}=A,y={candidates:o.candidates.map(S=>({component:1,foundation:"1",generation:0,ip:S.ip,port:S.port,priority:S.priority,transport:S.foundation,type:S.type})),connection:{version:4,ip:"0.0.0.0"},direction:YA.TRANSCEIVER_DIRECTION_RECVONLY,ext:o.video.extensions.map(S=>({value:S.id,uri:S.uri})),fingerprint:{type:o.dtls.hash,hash:o.dtls.fingerprint},fmtp:[],icePwd:o.ice.password,iceUfrag:o.ice.ufrag,mid:String(e),payloads:"",port:c.media[0].port,protocol:c.media[0].protocol,type:YA.VIDEO,setup:o.dtls.setup,rtcpFb:[],rtcpMux:"rtcp-mux",rtcpRsize:"rtcp-rsize",rtp:[]};if(d){let S=o.video.decoders;(!S||S.length===0)&&(S=o.video.codecs),(!S||S.length===0)&&(S=a.video.decoders),S.forEach(k=>{Q_(y,k)})}else{let S;S=o.useH265?o.video.codecs.findIndex(V=>V.codec.toLowerCase()==="h265"):o.video.codecs.findIndex(V=>V.codec.toLowerCase()===(o.useVp8?"vp8":"h264"));let k=o.video.codecs[S]||a.video.codecs[0];Q_(y,k)}if(!d&&C){let S=y.fmtp,k=y.rtp.find(V=>{var J;return((J=V.codec)==null?void 0:J.toLowerCase())==="h264"});if(k){let V=S.find(J=>String(J.payload)===String(k.payload));V&&(V.config=Hz(V.config,C))}}return y},Q_=(A,e)=>{A.payloads="".concat(A.payloads," ").concat(e.payload).trim(),A.fmtp.push({payload:e.payload,config:e.fmtp}),A.rtcpFb=[...A.rtcpFb||[],...e.rtcpfb.map(o=>({payload:e.payload,type:o.id,subtype:o.params[0]}))],A.rtp.push({payload:e.payload,codec:e.codec.toUpperCase(),rate:e.rate}),e.rtx&&(A.payloads="".concat(A.payloads," ").concat(e.rtx),A.fmtp.push({payload:e.rtx,config:"apt=".concat(e.payload)}),A.rtp.push({payload:e.rtx,codec:"rtx",rate:e.rate}))},NoA=(A,e,o)=>{let a=Vz.default.parse(A);return a.media.forEach((c,d)=>{var C;if((c.type===YA.AUDIO||c.type===YA.VIDEO)&&(function(y){if(!y.rtcpFb)return;let S=[];y.rtcpFb.forEach((k,V)=>{var J;S.push(k),y.rtcpFb&&((J=y.rtcpFb[V+1])==null?void 0:J.payload)!==k.payload&&k.type!=="rrtr"&&S.push({payload:k.payload,type:"rrtr"})}),y.rtcpFb=S}(c),function(y){y.type===YA.VIDEO&&y.fmtp&&y.fmtp.forEach(S=>{S.config.includes("apt")||(S.config+=";sps-pps-idr-in-keyframe=1")})}(c),function(y){y.type===YA.AUDIO&&y.fmtp&&y.fmtp.forEach(S=>{S.config+=";sprop-stereo=1;stereo=1"})}(c),function(y){let S=new Set(["urn:ietf:params:rtp-hdrext:sdes:mid","urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id","urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id"]);y.ext&&(y.ext=y.ext.filter(k=>!S.has(k.uri)))}(c),c.type===YA.VIDEO)){if(d<4)c.payloads="",c.fmtp=[],c.rtp=[],c.rtcpFb=[],e.video.codecs.forEach(y=>Q_(c,y));else if(o){c.payloads="",c.fmtp=[],c.rtp=[],c.rtcpFb=[];let y=o.video.decoders;(!y||y.length===0)&&(y=o.video.codecs),(!y||y.length===0)&&(y=e.video.decoders),y.forEach(S=>Q_(c,S))}}(C=c.payloads)!=null&&C.includes("datachannel")&&a.groups&&c.mid&&(a.groups[0].mids=a.groups[0].mids.replace(c.mid,"dc"),c.mid="dc")}),Vz.default.write(a)};function fj(A){var e,o;let a=/profile-level-id=([0-9a-fA-F]{6})/.exec(A);return(o=(e=a?.[1])==null?void 0:e.toLowerCase())!=null?o:null}function yj(A){let e=A.toLowerCase();if(!/^[0-9a-f]{6}$/.test(e))return"unknown";let o=parseInt(e.slice(0,2),16);return o===66?"baseline":o===77?"main":o===100?"high":"unknown"}function Kz(A,e){if(!e)return"";let o=A.trim().toLowerCase().replace(/_/g,"-");if(!o)return"";if(/^[0-9a-f]{6}$/.test(o))return o;if(o!=="baseline"&&o!=="main"&&o!=="high")return"";for(let a of e.video.codecs){let c=fj(a.fmtp);if(c&&yj(c)===o)return c}return""}var GoA=gc(Kl()),jz=class extends GoA.EventEmitter{constructor(A){super(),this.room=A,Y(this,"mainFpsHealth",1),Y(this,"mainBitrateHealth",1),Y(this,"badMainBitrateHealthCount",0),Y(this,"lastEmitBadHealthTime",0),Y(this,"log"),!Ha&&IE&&F.on("262",this.onVideoCodecChanged,this),this.log=A.getLogger().createChild({id:"h-d"})}onVideoCodecChanged(A){let{remoteUserId:e,streamType:o,isHWCodec:a,codec:c}=A;if(!e&&o!==7&&c==="h264"){if(!a)return void this.room.off("heartbeat-report",this.onHeartbeatReport,this);this.room.listeners("heartbeat-report").includes(this.onHeartbeatReport)||this.room.on("heartbeat-report",this.onHeartbeatReport,this)}}onHeartbeatReport(A){Date.now()-this.lastEmitBadHealthTime<3e4||(A.msg_up_stream_info.msg_video_status.forEach(e=>{if(e.uint32_video_enc_fps&&e.uint32_video_capture_fps){let o=e.uint32_video_enc_fps/e.uint32_video_capture_fps;e.uint32_video_stream_type===2&&(this.mainFpsHealth=o)}if(e.uint32_video_codec_bitrate&&e.uint32_video_stream_type===2){let{localMainVideoTrack:o}=this.room;o&&(this.mainBitrateHealth=e.uint32_video_codec_bitrate/1e3/o.profile.bitrate)}}),this.log.debug("mainBitrateHealth: ".concat(this.mainBitrateHealth," mainFpsHealth: ").concat(this.mainFpsHealth)),this.mainBitrateHealth>.5&&(this.badMainBitrateHealthCount=0),this.mainFpsHealth>.9&&this.mainBitrateHealth<.5&&(this.badMainBitrateHealthCount++,this.badMainBitrateHealthCount>3&&(this.badMainBitrateHealthCount=0,this.lastEmitBadHealthTime=Date.now(),this.log.warn("bad main bitrate health: ".concat(this.mainBitrateHealth)),this.emit("1",{isAux:!1}))))}destroy(){F.off("262",this.onVideoCodecChanged,this),this.room.off("heartbeat-report",this.onHeartbeatReport,this)}};Y(jz,"EVENT_BAD_HEALTH","bad_health");var boA=jz,p_=(A=>(A.TRACK="track",A.DATA_CHANNEL_MESSAGE="data_channel_msg",A[A.CONNECTION_STATE_CHANGED="connection-state-changed"]="CONNECTION_STATE_CHANGED",A[A.FIREWALL_RESTRICTION="firewall-restriction"]="FIREWALL_RESTRICTION",A.RECONNECTED="spc-reconnected",A.RECONNECT_FAILED="spc-reconnect-failed",A.ERROR="error",A.SEI_MESSAGE="sei-message",A.DUMP="dump",A))(p_||{}),koA=1,Ry=class extends woA.default{constructor(A){let{signalChannel:e,room:o,enableDataChannel:a}=A;super(),Y(this,"stat",{iceStartTime:0,iceEndTime:0,dtlsStartTime:0,dtlsEndTime:0,peerConnectionStartTime:0,peerConnectionEndTime:0}),Y(this,"isDestroyed",!1),Y(this,"currentState","DISCONNECTED"),Y(this,"_room"),Y(this,"_signalChannel"),Y(this,"_peerConnection",null),Y(this,"_datachannel",null),Y(this,"_enableDataChannel"),Y(this,"_log"),Y(this,"_downlinkMIDMap",new Map),Y(this,"_downlinkMIDUserIDMap",new Map),Y(this,"_reconnectionTimer",-1),Y(this,"reconnectionCount",0),Y(this,"clientAbility"),Y(this,"_serverAbility",null),Y(this,"addDownlinkQueue",new Set),Y(this,"removeDownlinkQueue",new Set),Y(this,"_parsedAnswer",null),Y(this,"_updateSDPPromise",null),Y(this,"_waitForPCConnectedPromise"),Y(this,"clearWaitForConnectedPromise"),Y(this,"clearConnectTimeout"),Y(this,"_isSDPLogged",!1),Y(this,"enableInsertableStreams",!1),Y(this,"insertableStreamsAbortMap",new Map),Y(this,"receiverRemoteTrackMap",new WeakMap),Y(this,"scriptTransformWorker"),Y(this,"_isRelayTried",!1),Y(this,"_rttOverCount",0),Y(this,"originOffer",null),Y(this,"autoSubscribedSsrcGroups",new Map),Y(this,"autoSubscribedUserMap",new Map),Y(this,"_h265DecodeFailed",!1),this._room=o,this._enableDataChannel=a,this._signalChannel=e,this._log=QA.createLogger({parent:this._room.getLogger(),id:"spc".concat(koA++),userId:this._room.userId,sdkAppId:this._room.sdkAppId}),this._room.enableCodecPipeline&&(Kp?this.enableInsertableStreams=!0:this.initScriptTransformWorker()),this._room.healthDetector.on("1",this.onBadHealth,this)}get isH264EncodeSupported(){let A=this._room.checkSystemResult.detail.isH264EncodeSupported;return this._serverAbility&&(A=A&&!!this._serverAbility.video.codecs.find(e=>e.codec.toLowerCase()==="h264")),A}addAbortController(A,e){var o;(o=this.insertableStreamsAbortMap.get(A))==null||o.abort("destroy"),this.insertableStreamsAbortMap.set(A,e)}get isVP8EncodeSupported(){let A=this._room.checkSystemResult.detail.isVp8EncodeSupported;return this._serverAbility&&(A=A&&this._serverAbility.video.codecs.find(e=>e.codec.toLowerCase()==="vp8")),A}get isH265EncodeSupported(){let A=this._room.checkSystemResult.detail.isH265EncodeSupported;return this._serverAbility&&(A=A&&!!this._serverAbility.video.codecs.find(e=>e.codec.toLowerCase()==="h265")),A}get videoCodec(){var A,e,o;let a=(A=this._parsedAnswer)==null?void 0:A.media[1].rtp.find(c=>["h264","vp8","h265"].includes(c.codec.toLowerCase()));return a?a.codec.toLowerCase():(e=this._serverAbility)!=null&&e.useH265?"h265":(o=this._serverAbility)!=null&&o.useVp8?"vp8":"h264"}get downlinkVideoCodec(){var A,e,o;return(A=this._serverAbility)!=null&&A.useH265&&(e=this._serverAbility)!=null&&e.video.decoders.find(a=>a.codec.toLowerCase()==="h265")&&!this._h265DecodeFailed?"h265":(o=this._serverAbility)!=null&&o.video.decoders.find(a=>a.codec.toLowerCase()==="h264")?"h264":"vp8"}get isUsingH264(){return this.videoCodec==="h264"}get isUsingH265(){return this.videoCodec==="h265"}get isUsingVP8(){return this.videoCodec==="vp8"}get is42001fSupported(){return!!this.clientAbility&&!!this.clientAbility.video.codecs.find(A=>A.fmtp.includes("42001f"))}isProfileLevelIdSupported(A){return!!this.clientAbility&&!!this.clientAbility.video.codecs.find(e=>e.fmtp.includes(A))}get uplinkSSRC(){return this._peerConnection&&this._peerConnection.localDescription?(A=>{let e=uc(A),o={audioSsrc:0,audioRtxSsrc:0,bigVideoSsrc:0,bigVideoRtxSsrc:0,smallVideoSsrc:0,smallVideoRtxSsrc:0,auxVideoSsrc:0,auxVideoRtxSsrc:0};return e.media.forEach((a,c)=>{var d;if(a.ssrcs&&!Je(a.ssrcs[0].id)){let C=Number(a.ssrcs[0].id),y=Number((d=a.ssrcs.filter(S=>S.attribute==="cname")[1])==null?void 0:d.id);switch(c){case 0:o.audioSsrc=C;break;case 1:o.bigVideoSsrc=C,o.bigVideoRtxSsrc=y;break;case 2:o.smallVideoSsrc=C,o.smallVideoRtxSsrc=y;break;case 3:o.auxVideoSsrc=C,o.auxVideoRtxSsrc=y}}}),o})(this._peerConnection.localDescription.sdp):{audioSsrc:0,audioRtxSsrc:0,bigVideoSsrc:0,bigVideoRtxSsrc:0,smallVideoSsrc:0,smallVideoRtxSsrc:0,auxVideoSsrc:0,auxVideoRtxSsrc:0}}onBadHealth(A){}initScriptTransformWorker(){e_&&(this.scriptTransformWorker=uz({videoEncodePipeline:this._room.videoManager.encodePipeline,videoDecodePipeline:this._room.videoManager.decodePipeline,audioEncodePipeline:this._room.audioManager.encodePipeline,audioDecodePipeline:this._room.audioManager.decodePipeline}),this.scriptTransformWorker.onmessage=A=>{A.data.type==="sei"?this.emit("sei-message",A.data):A.data.type,A.data.type==="dump"&&this.emit("dump",A.data)},this.scriptTransformWorker.onerror=A=>{this._log.error("scriptTransformWorker error: ",A.message)})}get isReconnecting(){return this.currentState==="RECONNECTING"||this._reconnectionTimer>0||this.reconnectionCount>0}get dtlsTransport(){if(!this._peerConnection)return null;let A=this._peerConnection.getSenders();return A.length===0?null:A[0].transport}getPeerConnectionConfig(A){var e;let o={encodedInsertableStreams:this.enableInsertableStreams,offerExtmapAllowMixed:!0,iceServers:A,iceTransportPolicy:this._room.getIceTransportPolicy(),sdpSemantics:this._room.sdpSemantics,bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",tcpCandidatePolicy:"disable",IceTransportsType:"nohost"},a=(e=this._peerConnection)==null?void 0:e.getConfiguration().encodedInsertableStreams;return I2(a)&&(o.encodedInsertableStreams=a),this._log.debug("getPeerConnectionConfig",JSON.stringify(o)),o}initialize(A){return KA(this,null,function*(){var e;let o;try{return this._peerConnection=new RTCPeerConnection(this.getPeerConnectionConfig(A)),this._peerConnection.oniceconnectionstatechange=()=>{if(!this._peerConnection)return;let a=this._peerConnection.iceConnectionState;this._log.debug("ice state: ".concat(a)),a==="checking"&&this.stat.iceStartTime===0?this.stat.iceStartTime=Date.now():a==="connected"&&this.stat.iceEndTime===0?(this.stat.iceEndTime=Date.now(),this._signalChannel.clearBakRelayIps(),ii.addSuccessEvent({key:521711,cost:this.stat.iceEndTime-this.stat.iceStartTime})):a==="failed"&&ii.addFailedEvent({key:521711})},this._peerConnection.onsignalingstatechange=()=>{var a;let c=((a=this._peerConnection)==null?void 0:a.signalingState)||"";this._log[c==="closed"?"debug":"info"]("signaling state: ".concat(c))},this._peerConnection.onconnectionstatechange=this.onConnectionStateChange.bind(this),this._peerConnection.ontrack=a=>this.emit("track",a),this._enableDataChannel&&(this._datachannel=this._peerConnection.createDataChannel("".concat(this._room.userId,"dc")),this._datachannel.binaryType="arraybuffer",this._datachannel.onopen=()=>{this._log.info("datachannel open")},this._datachannel.onclose=()=>{this._log.warn("datachannel close")},this._datachannel.onmessage=a=>{let c=new UoA(a.data);this.emit("data_channel_msg",{data:c})},this._datachannel.onerror=a=>{this._log.warn("datachannel error",a)}),this._peerConnection.addTransceiver(YA.AUDIO,{direction:YA.TRANSCEIVER_DIRECTION_SENDONLY}),this._peerConnection.addTransceiver(YA.VIDEO,{direction:YA.TRANSCEIVER_DIRECTION_SENDONLY}),this._peerConnection.addTransceiver(YA.VIDEO,{direction:YA.TRANSCEIVER_DIRECTION_SENDONLY}),this._peerConnection.addTransceiver(YA.VIDEO,{direction:YA.TRANSCEIVER_DIRECTION_SENDONLY}),o=yield this._peerConnection.createOffer(),this.clientAbility=yield _oA(o.sdp,((e=this._room.scheduleResult.config)==null?void 0:e.remove264FromSDP)||!1,this._enableDataChannel),this.originOffer=o,this.dtlsTransport&&(this.dtlsTransport.onstatechange=()=>{let{dtlsTransport:a}=this;a&&(this._log.debug("dtls state: ".concat(a.state)),a.state==="connecting"&&this.stat.dtlsStartTime===0?this.stat.dtlsStartTime=Date.now():a.state==="connected"&&this.stat.dtlsEndTime===0&&(this.stat.dtlsEndTime=Date.now()))}),ii.addSuccessEvent({key:521707}),this.clientAbility}catch(a){throw ii.addFailedEvent({key:521707,error:a}),this._log.error("initialize failed ".concat(a,` -offer: `).concat(o?.sdp)),a}})}setIceServers(A){return KA(this,null,function*(){var e;if(this._peerConnection&&A.length!==0)try{if(this._log.info("setIceServers",JSON.stringify(A,(o,a)=>o==="username"||o==="credential"?"hided":a)),this._peerConnection.setConfiguration(this.getPeerConnectionConfig(A)),(e=this._peerConnection)!=null&&e.localDescription||!this.originOffer)return void this._log.warn("setIceServers already has localDescription or no origin Offer");yield this.setOffer(this.originOffer)}catch(o){this._log.warn("setIceServers error ",o)}})}setPriority(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"high";if(this._peerConnection)try{this._peerConnection.getSenders().forEach(e=>{let o=e.getParameters();o.encodings[0]&&(o.encodings[0].priority=A,o.encodings[0].networkPriority=A,e.setParameters(o).catch(a=>{this._log.warn("setPriority error ",a)}))})}catch(e){this._log.warn("setPriority error ",e)}}connect(A){let e=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return KA(this,null,function*(){var o,a,c;try{if(this.currentState==="CONNECTED")return;((o=this._peerConnection)==null||!o.localDescription)&&this.originOffer&&(yield this.setOffer(this.originOffer));let d=ko(),C=this.getProfileLevelIdConfig(),y={type:"answer",sdp:ToA({serverAbility:A,clientAbility:this.clientAbility,offerSDP:this._peerConnection.localDescription.sdp,enableCustomMessage:this._enableDataChannel,profileLevelIdConfig:C})};this._serverAbility=A,yield this.setAnswer(y),yield this.waitForPeerConnectionConnected(),this._room.firewallDetector.resetTimeoutCount();let S=((a=this._room.scheduleResult.config)==null?void 0:a.priority)||((c=this._room.joinParams)==null?void 0:c.priority)||new URLSearchParams(location.search).get("priority");S&&this.setPriority(S),e||ii.addSuccessEvent({key:521703,cost:ko()-d})}catch(d){let C=d instanceof ai&&d.code===dt.API_CALL_ABORTED;throw C||this._log.error("connect failed: ".concat(d),A),this.reset(),!C&&!this.isReconnecting&&!this.isDestroyed&&(ii.addFailedEvent({key:521703,error:d}),this.emitConnectionStateChangedEvent("DISCONNECTED"),this.startReconnection()),d}})}reconnect(){return KA(this,null,function*(){if(this._reconnectionTimer===-1){if(!this._signalChannel.isConnected)return this._log.warn("reconnect() wait signal channel is connected"),void this._signalChannel.once(hL,this.reconnect,this);try{this.reconnectionCount+=1,this._log.warn("reconnect() trying [".concat(this.reconnectionCount,"]")),this.reset();let A=this._signalChannel.getBackupRelayIpPair(),e=yield this.initialize(this._room.getIceServers(A!=null&&A.iceServer?[A.iceServer]:[])),o=mi({ability:e},A),a=yield this._signalChannel.sendWaitForResponse({command:toA,responseCommand:ls.REBUILD_PEER_CONNECTION_RES,data:o,enableLog:!1});if(a.data.code!==0)throw new ai({code:a.data.code,message:a.data.message});yield this.connect(a.data.data.ability,!0),ii.addSuccessEvent({key:521704}),this._log.warn("reconnect() success"),this.stopReconnection(),F.emit(nA.SPC_RECONNECTED,{room:this._room}),this.emit("spc-reconnected")}catch(A){if(!this.isReconnecting||this.isDestroyed)return;if(A!=null&&A.message.includes("timeout")){let e=Rp(this.reconnectionCount);this._log.warn("reconnect() timeout, try again after ".concat(e/1e3,"s")),yield LC(e,o=>{this._reconnectionTimer=o}),this.clearReconnectionTimer(),yield this.reconnect()}else this._log.error("reconnect() failed ".concat(A?.code," ").concat(A)),ii.addFailedEvent({key:521704,error:A}),this.reconnectionCount>=xf()&&this._log.warn("SDK has tried reconnect for ".concat(xf()," times, but all failed, please check your network")),this.stopReconnection(),this.emitConnectionStateChangedEvent("DISCONNECTED"),this.emit("error")}}else this._log.warn("reconnect() is reconnecting, ignore current reconnection")})}getPeerConnection(){return this._peerConnection}startReconnection(){return KA(this,null,function*(){this.isReconnecting||(this._log.warn("start reconnect"),this._updateSDPPromise=null,this.emitConnectionStateChangedEvent("RECONNECTING"),yield this.reconnect())})}stopReconnection(){var A;this.isReconnecting&&(this._log.info("stop reconnect"),this.reconnectionCount=0,this.clearReconnectionTimer(),(A=this.clearConnectTimeout)==null||A.call(this),this._signalChannel.off(hL,this.reconnect,this),this.currentState==="RECONNECTING"&&this.emitConnectionStateChangedEvent("DISCONNECTED"))}checkPeerConnectionToReconnect(){var A;!this.isReconnecting&&((A=this._peerConnection)==null?void 0:A.connectionState)===Co.CLOSED&&this.startReconnection()}clearReconnectionTimer(){this._reconnectionTimer!==-1&&(clearTimeout(this._reconnectionTimer),this._reconnectionTimer=-1)}onConnectionStateChange(A){var e;let o=((e=this._peerConnection)==null?void 0:e.iceConnectionState)||"closed",a=this.getDTLSTransportState();this._log.info("connectionState: ".concat(A.target.connectionState," ICE: ").concat(o," DTLS: ").concat(a)),A.target.connectionState===Co.CONNECTING&&(this.stat.peerConnectionStartTime===0&&(this.stat.peerConnectionStartTime=Date.now()),this.emitConnectionStateChangedEvent("CONNECTING")),(A.target.connectionState===Co.FAILED||A.target.connectionState===Co.CLOSED)&&(this.emitConnectionStateChangedEvent("DISCONNECTED"),this._room.forceRelay?this.switchRelay(!1):this.startReconnection()),(A.target.connectionState===Co.CONNECTED||A.target.connectionState===Co.COMPLETED)&&(this.stat.peerConnectionEndTime===0&&(this.stat.peerConnectionEndTime=Date.now()),F.emit(nA.SINGLE_CONNECTION_STAT,{room:this._room,stat:{ice:this.stat.iceEndTime-this.stat.iceStartTime,dtls:this.stat.dtlsEndTime-this.stat.dtlsStartTime,peerConnection:this.stat.peerConnectionEndTime-this.stat.peerConnectionStartTime}}),this.logSelectedCandidate(),this.emitConnectionStateChangedEvent("CONNECTED"))}getDTLSTransportState(){if(!this._peerConnection)return Kh;let A=null;return LI()&&this._peerConnection.getSenders().length!==0?(A=this._peerConnection.getSenders()[0].transport,dy()&&this._peerConnection.getReceivers().length!==0&&A?A.state:Kh):Kh}emitConnectionStateChangedEvent(A){A!==this.currentState&&(this.currentState==="RECONNECTING"&&A==="CONNECTING"||(this.emit(p_.CONNECTION_STATE_CHANGED,{prevState:this.currentState,state:A}),this.currentState=A))}logSelectedCandidate(){return KA(this,null,function*(){if(!this._peerConnection)return;let A=yield this._peerConnection.getStats();for(let[e,o]of A)if(_M(o)){let a=A.get(o.localCandidateId),c=A.get(o.remoteCandidateId);a&&(this._log.info("local candidate: ".concat(a.candidateType," ").concat(a.protocol,":").concat(a.ip||a.address,":").concat(a.port," ").concat(a.networkType||""," ").concat(a.relayProtocol?"relayProtocol:".concat(a.relayProtocol," url: ").concat(a.url):"")),a.networkType&&f0(a.networkType)),c&&this._log.info("remote candidate: ".concat(c.candidateType," ").concat(c.protocol,":").concat(c.ip||c.address,":").concat(c.port));break}})}waitForPeerConnectionConnected(){return this._waitForPCConnectedPromise||(this._waitForPCConnectedPromise=new Promise((A,e)=>{if(this.currentState==="CONNECTED")return A();let o=C=>{C.state==="CONNECTED"&&(clearTimeout(d),c(),A())},a=C=>{let{room:y}=C;y===this._room&&(clearTimeout(d),c(),e(new ai({code:dt.API_CALL_ABORTED,message:Xo({key:Mo.CONNECTION_ABORTED,data:"leave room"})})))},c=()=>{F.off(nA.LEAVE_SUCCESS,a,this),this.off(p_.CONNECTION_STATE_CHANGED,o,this)},d=setTimeout(()=>{c();let C=new ai({code:dt.API_CALL_TIMEOUT,message:"connection timeout"});this._room.firewallDetector.increaseTimeoutCount(),e(C)},Nb);this.clearConnectTimeout=()=>{c(),clearTimeout(d),delete this.clearConnectTimeout},this.clearWaitForConnectedPromise=()=>{this._waitForPCConnectedPromise=null,e(new ai({code:dt.API_CALL_TIMEOUT,message:"connection timeout"}))},F.on(nA.LEAVE_SUCCESS,a,this),this.on(p_.CONNECTION_STATE_CHANGED,o,this)}),this._waitForPCConnectedPromise=this._waitForPCConnectedPromise.finally(()=>{this._waitForPCConnectedPromise=null,delete this.clearConnectTimeout})),this._waitForPCConnectedPromise}waitForReconnected(){return this.isReconnecting?new Promise((A,e)=>{this.once("spc-reconnected",A),this.once("error",e)}):Promise.resolve()}addDownlink(A){return KA(this,null,function*(){if(this._log.info("addDownlink(".concat(A.userId,") trying")),this.isReconnecting&&(yield this.waitForReconnected()),this._updateSDPPromise&&(yield this._updateSDPPromise),this.updateLocalAndRemoteSDPConfig(A),this.addDownlinkQueue.size===0)try{yield this.updateSDP(),this._log.info("addDownlink(".concat(A.userId,") done"))}catch(e){this._log.error("addDownlink(".concat(A.userId,") failed ").concat(e)),yield this.startReconnection()}})}updateLocalAndRemoteSDPConfig(A){let{ssrc:e,userId:o,tinyId:a,prevMids:c}=A;if(!this._peerConnection)return;this._log.info("updateLocalAndRemoteSDPConfig ".concat(o," ").concat(JSON.stringify(e))),this._parsedAnswer||(this._parsedAnswer=uc(this._peerConnection.remoteDescription.sdp));let d,C,y,S=this._parsedAnswer.media.filter(J=>{var gA;return(gA=J.ssrcs)==null?void 0:gA.find(CA=>{var MA;return(MA=CA.value)==null?void 0:MA.includes(a)})});if(S.length===3)d=S[0],C=S[1],y=S[2];else{let J,gA=this._peerConnection.getTransceivers().slice(4);if(c?.length===3&&c.every(MA=>{var $A;return(($A=gA.find(Be=>Number(Be.mid)===MA))==null?void 0:$A.direction)==="inactive"})?(J=c,this._log.info("reusing previous mids for ".concat(o,": ").concat(J.join(","))),gA.forEach(MA=>{J.includes(Number(MA.mid))&&(MA.direction=YA.TRANSCEIVER_DIRECTION_RECVONLY)})):J=gA.filter(MA=>MA.direction==="inactive").slice(0,3).map(MA=>(MA.direction=YA.TRANSCEIVER_DIRECTION_RECVONLY,Number(MA.mid))),J.length===3)d=this._parsedAnswer.media.find(MA=>Number(MA.mid)===Number(J[0])),C=this._parsedAnswer.media.find(MA=>Number(MA.mid)===Number(J[1])),y=this._parsedAnswer.media.find(MA=>Number(MA.mid)===Number(J[2]));else if(J.length===0){this._peerConnection.addTransceiver(YA.AUDIO,{direction:YA.TRANSCEIVER_DIRECTION_RECVONLY}),this._peerConnection.addTransceiver(YA.VIDEO,{direction:YA.TRANSCEIVER_DIRECTION_RECVONLY}),this._peerConnection.addTransceiver(YA.VIDEO,{direction:YA.TRANSCEIVER_DIRECTION_RECVONLY}),d=JSON.parse(JSON.stringify(this._parsedAnswer.media[0]));let MA=qz({mid:1,serverAbility:this._serverAbility,clientAbility:this.clientAbility,parsedOffer:uc(this._peerConnection.localDescription.sdp),isDownlink:!0});C=JSON.parse(JSON.stringify(MA)),y=JSON.parse(JSON.stringify(MA)),d.mid=this._parsedAnswer.media.length,this._parsedAnswer.media.push(d),C.mid=this._parsedAnswer.media.length,this._parsedAnswer.media.push(C),y.mid=this._parsedAnswer.media.length,this._parsedAnswer.media.push(y)}}d.direction=YA.TRANSCEIVER_DIRECTION_SENDONLY;let k="".concat(a,"-").concat(e.audio);d.ssrcs=[{id:e.audio,attribute:"cname",value:"".concat(k)},{id:e.audio,attribute:"msid",value:"".concat(k,"-").concat(YA.MAIN," ").concat(k,"-audio")}],C.direction=YA.TRANSCEIVER_DIRECTION_SENDONLY,C.ssrcs=[{id:e.video,attribute:"cname",value:"".concat(k)},{id:e.video,attribute:"msid",value:"".concat(k,"-").concat(YA.MAIN," ").concat(k,"-bigvideo")},{id:e.videoRtx,attribute:"cname",value:"".concat(k)},{id:e.videoRtx,attribute:"msid",value:"".concat(k,"-").concat(YA.MAIN," ").concat(k,"-bigvideo")}],C.ssrcGroups=[{semantics:"FID",ssrcs:"".concat(e.video," ").concat(e.videoRtx)}],y.direction=YA.TRANSCEIVER_DIRECTION_SENDONLY;let V="".concat(k,"-aux");y.ssrcs=[{id:e.auxiliary,attribute:"cname",value:V},{id:e.auxiliary,attribute:"msid",value:"".concat(V," ").concat(k,"-aux").concat(YA.VIDEO)},{id:e.auxiliaryRtx,attribute:"cname",value:"".concat(V," ").concat(k,"-aux").concat(YA.VIDEO)},{id:e.auxiliaryRtx,attribute:"msid",value:"".concat(V," ").concat(k,"-aux").concat(YA.VIDEO)}],y.ssrcGroups=[{semantics:"FID",ssrcs:"".concat(e.auxiliary," ").concat(e.auxiliaryRtx)}],this._parsedAnswer.groups&&(this._parsedAnswer.groups[0].mids=this._parsedAnswer.media.map(J=>J.mid).join(" ")),this._downlinkMIDMap.set(o,[d.mid,C.mid,y.mid]),this._downlinkMIDUserIDMap.set(d.mid,o),this._downlinkMIDUserIDMap.set(C.mid,o),this._downlinkMIDUserIDMap.set(y.mid,o)}removeDownlink(A){return KA(this,null,function*(){if(!this._downlinkMIDMap.has(A)||!this._peerConnection)return;this._log.info("removeDownlink(".concat(A,") trying")),this.isReconnecting&&(yield this.waitForReconnected()),this._updateSDPPromise&&(yield this._updateSDPPromise);let e=this._downlinkMIDMap.get(A),o=!1;return this._peerConnection.getTransceivers().forEach(a=>{e!=null&&e.includes(Number(a.mid))&&(o=!0,a.direction="inactive")}),this._parsedAnswer||(this._parsedAnswer=uc(this._peerConnection.remoteDescription.sdp)),this._parsedAnswer.media.forEach(a=>{e!=null&&e.includes(Number(a.mid))&&(o=!0,a.direction="inactive",a.ssrcs=[],a.ssrcGroups=[])}),this.removeDownlinkQueue.size===0&&o&&(yield this.updateSDP()),this._downlinkMIDMap.delete(A),e?.forEach(a=>this._downlinkMIDUserIDMap.delete(a)),this._log.info("removeDownlink(".concat(A,") done")),e})}setBandwidth(A){return KA(this,null,function*(){if(!this._peerConnection)return;let{audio:e,bigVideo:o,smallVideo:a,auxVideo:c}=A;try{if(Ok()){let d=this._peerConnection.getSenders().slice(0,4);for(let y=0;y5e3?5e3:e),!0)}setSenderMaxBitrate(A,e){let o=A.getParameters();if((!o.encodings||o.encodings.length===0)&&(o.encodings=[{}]),e==="unlimited")delete o.encodings[0].maxBitrate;else{if(o.encodings[0].maxBitrate===1e3*e)return;o.encodings[0].maxBitrate=1e3*e}return A.setParameters(o)}setBandwidthBySDP(A){let{audio:e,bigVideo:o,smallVideo:a,auxVideo:c}=A;if(!this._peerConnection||!this._peerConnection.localDescription)return;let d=uc(this._peerConnection.localDescription.sdp);this._parsedAnswer||(this._parsedAnswer=uc(this._peerConnection.remoteDescription.sdp));let C=er?"TIAS":"AS";e&&(d.media[0].bandwidth=[{type:C,limit:er?1e3*e:e}],this._parsedAnswer.media[0].bandwidth=[{type:C,limit:er?1e3*e:e}]),o&&(d.media[1].bandwidth=[{type:C,limit:er?1e3*o:o}],this._parsedAnswer.media[1].bandwidth=[{type:C,limit:er?1e3*o:o}]),a&&(d.media[2].bandwidth=[{type:C,limit:er?1e3*a:a}],this._parsedAnswer.media[2].bandwidth=[{type:C,limit:er?1e3*a:a}]),c&&(d.media[3].bandwidth=[{type:C,limit:er?1e3*c:c}],this._parsedAnswer.media[3].bandwidth=[{type:C,limit:er?1e3*c:c}]);let y={type:"offer",sdp:vy(d)};return this.updateSDP({localDescription:y})}setScaleResolutionDownBy(A,e,o){let a=A.getParameters();(!a.encodings||a.encodings.length===0)&&(a.encodings=[{}]);let c=a.encodings[0].scaleResolutionDownBy;if(Je(c)?e===1:e===c)return;let d="setScaleResolutionDownBy ".concat(o," ").concat(e);return c&&(d+=" prevScale: ".concat(c)),this._log.warn(d),a.encodings[0].scaleResolutionDownBy=e,A.setParameters(a)}setDegradationPreference(A,e,o){if(IE&&id<83||eg&&hk(kI,"12.1")||er&&L0<138)return;let a=A.getParameters(),c="balanced";if(e==="motion"?c="maintain-framerate":e==="detail"&&(c="maintain-resolution"),a.degradationPreference===c)return;let d="setDegradationPreference ".concat(o," ").concat(c);return this._log.info(d),a.degradationPreference=c,A.setParameters(a).catch(C=>this._log.warn("".concat(d," failed: ").concat(C)))}updateSDP(){let{localDescription:A}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!this._parsedAnswer)return Promise.resolve();let e=vy(this._parsedAnswer);return this._updateSDPPromise=new Promise((o,a)=>KA(this,null,function*(){var c,d;try{!A&&this._peerConnection&&(this._log.info("creating offer"),A=yield this._peerConnection.createOffer()),A&&(yield this.setOffer(A)),yield this.setAnswer({type:"answer",sdp:e}),this._updateSDPPromise=null,o()}catch(C){this._log.error(C),!this._isSDPLogged&&this._peerConnection&&(this._log.warn("current offer: ".concat(this.filterSDPDirection((c=this._peerConnection.localDescription)==null?void 0:c.sdp),` + }`}),Y(this,"yTextureRef"),Y(this,"uTextureRef"),Y(this,"vTextureRef"),Y(this,"Y"),Y(this,"U"),Y(this,"V"),this.useProgram();let e=this.context.ctx;e.pixelStorei(e.PACK_ALIGNMENT,1),e.pixelStorei(e.UNPACK_ALIGNMENT,1),this.setTexBuffer([0,1,1,1,0,0,1,0]),this.yTextureRef=this._initTexture("ySampler",0),this.uTextureRef=this._initTexture("uSampler",1),this.vTextureRef=this._initTexture("vSampler",2),this._canvas=A._canvas}_initTexture(A,e){let o=this.context.ctx,a=o.createTexture();return o.bindTexture(o.TEXTURE_2D,a),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MAG_FILTER,o.LINEAR),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MIN_FILTER,o.LINEAR),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),o.bindTexture(o.TEXTURE_2D,null),o.uniform1i(o.getUniformLocation(this.program,A),e),a}render(A){let e=this.context.ctx,o=this.width,a=this.height;return this.useProgram(),e.viewport(0,0,o,a),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,this.yTextureRef),e.texSubImage2D(e.TEXTURE_2D,0,0,0,o,a,e.LUMINANCE,e.UNSIGNED_BYTE,this.Y),e.activeTexture(e.TEXTURE1),e.bindTexture(e.TEXTURE_2D,this.uTextureRef),e.texSubImage2D(e.TEXTURE_2D,0,0,0,o/2,a/2,e.LUMINANCE,e.UNSIGNED_BYTE,this.U),e.activeTexture(e.TEXTURE2),e.bindTexture(e.TEXTURE_2D,this.vTextureRef),e.texSubImage2D(e.TEXTURE_2D,0,0,0,o/2,a/2,e.LUMINANCE,e.UNSIGNED_BYTE,this.V),this.draw(),!0}resize(A,e){super.resize(A,e);let o=this.context.ctx;o.activeTexture(o.TEXTURE0),o.bindTexture(o.TEXTURE_2D,this.yTextureRef),o.texImage2D(o.TEXTURE_2D,0,o.LUMINANCE,A,e,0,o.LUMINANCE,o.UNSIGNED_BYTE,null),o.activeTexture(o.TEXTURE1),o.bindTexture(o.TEXTURE_2D,this.uTextureRef),o.texImage2D(o.TEXTURE_2D,0,o.LUMINANCE,A/2,e/2,0,o.LUMINANCE,o.UNSIGNED_BYTE,null),o.activeTexture(o.TEXTURE2),o.bindTexture(o.TEXTURE_2D,this.vTextureRef),o.texImage2D(o.TEXTURE_2D,0,o.LUMINANCE,A/2,e/2,0,o.LUMINANCE,o.UNSIGNED_BYTE,null)}},g8=(A,e)=>{switch(A){case"webCodecs":return e==="videoFrame"?514705:514706;case"wasm":return e==="webgl"?514707:e==="videoFrame"?514708:514709}throw new Error("decoder type not supported")},AsA=0,esA=class{constructor(A){Y(this,"id",AsA++),Y(this,"trackDoneOB"),Y(this,"startOB"),Y(this,"stopOB"),Y(this,"decoder"),Y(this,"videoContext"),Y(this,"gop",0),Y(this,"gop_helper",0),Y(this,"waitFirstKeyFrame",!0),Y(this,"startTimestamp",0),Y(this,"startTime",0),Y(this,"startPerformanceTime",0),Y(this,"inputFrameCount",0),Y(this,"decodedFrameCount",0),Y(this,"decodeFrameCount",0),Y(this,"downgradeLevel",0),Y(this,"lastDowngradeTime",0),Y(this,"lastFrameDiff",0),Y(this,"lastDecodeFrameTimestamp",0),Y(this,"config"),Y(this,"gop_before_configure",[]),Y(this,"videoElement"),Y(this,"type","wasm"),Y(this,"goodType"),Y(this,"renderer","2d"),Y(this,"wasmOption"),Y(this,"createDecoder"),Y(this,"_decodeSink"),Y(this,"isReported",!1),Y(this,"track"),Y(this,"stateChangeOB"),Y(this,"failedReason");let{track:e,createDecoder:o}=A;if(this.stateChangeOB=hQ(),this.track=e,this.createDecoder=o,this.wasmOption={yuvMode:A.renderer==="webgl",wasmPath:A.wasmPath,workerMode:A.workerMode,canvas:A.canvas},this.config=A.config,this.videoElement=A.videoElement,this.renderer=A.renderer,this.trackDoneOB=la(e.availableState,Zs.OFF),this.stopOB=hQ(),A.type==="auto"){switch(A.fallback){case"wasm":this.type="wasm",this.renderer="webgl";break;case"wasm_2d":this.type="wasm",this.renderer="2d";break;case"wasm_video":this.type="wasm",this.renderer="videoFrame";break;default:this.type="webCodecs"}this.wasmOption.yuvMode=this.renderer==="webgl"}else this.type=A.type;this.changeRenderer(this.renderer),ma(this.stateChangeOB,j5((a,l)=>(a!==l&&e.onDecodeDowngradeStateChanged({type:this.type,renderer:this.renderer,reason:this.failedReason,prevState:a,state:l}),l),"INITIALIZED"),dE(this.stopOB),Bl()),this.start()}start(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;this.waitFirstKeyFrame=!0,this.stateChangeOB.next("STARTING");let e=ma(this.pipe(this.track),dE(this.stopOB),nL());ma(e,Bl(()=>{this.track.stat.framesDecoded++},o=>{if(this.track.log.error("".concat(this.id," play failed: ").concat(o," retryCount: ").concat(A)),si.addFailedEvent({key:g8(this.type,this.renderer),error:o}),A>4)this.failedReason=o,this.stateChangeOB.next("FAILED"),si.addFailedEvent({key:514704});else{if(this.goodType)return void this.start(A);switch(this.type){case"webCodecs":this.type="wasm",this.changeRenderer("webgl");break;case"wasm":this.renderer==="webgl"&&this.changeRenderer("videoFrame")}this.start(A+1)}},()=>{this.track.log.warn("".concat(this.id," decoderOB completed")),si.addSuccessEvent({key:g8(this.type,this.renderer)}),si.addSuccessEvent({key:514704})})),ma(e,E_(1),Bl(()=>{this.track.player.handlePlaying("canvas"),this.goodType=this.type,this.stateChangeOB.next("STARTED")}))}mock(A){this._decodeSink?this._decodeSink.error(A):this.start()}close(A){this.stopOB.next(A)}changeRenderer(A){this.renderer=A,this.renderer==="videoFrame"&&!TM()&&(this.renderer="2d"),this.wasmOption.yuvMode=this.renderer==="webgl"}decode(A){let e=arguments.length>1&&arguments[1]!==void 0&&arguments[1];var o,a;if(this.failedReason)return;this.inputFrameCount++;let l=new Uint8Array(A.data);if((d=l)[0]!==0||d[1]!==0||d[2]!==0||d[3]!==1||l.length<5)return this.stateChangeOB.next("FAILED"),this.close("not h26x frame ".concat(l.subarray(0,5))),A;var d;let h=!1;switch(31&l[4]){case 5:case 7:h=!0}if(((o=this.decoder)==null?void 0:o.state)!=="configured")return this.track.log.debug("not configured ".concat(this.inputFrameCount)),h&&(this.gop_before_configure=[]),this.gop_before_configure.push({data:A.data,timestamp:A.timestamp,type:A.type}),A;this.gop_before_configure.length>0&&!e&&(this.gop_before_configure.forEach(S=>this.decode(S,!0)),this.gop_before_configure=[]);let{timestamp:y}=A;if(h?(this.gop=this.gop_helper,this.gop_helper=0):this.gop_helper++,this.decoder){if(this.waitFirstKeyFrame){if(!h)return void this.track.log.debug("wait first key frame ".concat(this.inputFrameCount," ").concat(l.subarray(0,5).join(" ")));this.waitFirstKeyFrame=!1,this.startTimestamp=y,this.startTime=Date.now(),this.startPerformanceTime=ko()}switch(this.downgradeLevel){case 0:case 1:break;case 2:if(this.gop_helper>this.gop>>1)return;break;case 3:if(this.gop_helper>0)return;break;default:return}return(this.decodeFrameCount<10||this.decodeFrameCount%500==0)&&this.track.log.debug("decode ".concat(this.decodeFrameCount," gop: ").concat(this.gop," ").concat(y," ").concat((a=A.getMetadata)==null?void 0:a.call(A).rtpTimestamp)),this.decodeFrameCount++,this.lastDecodeFrameTimestamp=y,void this.decoder.decode({data:A.data,type:A.type,timestamp:this.lastDecodeFrameTimestamp})}return A}checkDowngradeByFrameDiff(){let A=this.downgradeLevel,e=this.decodeFrameCount-this.decodedFrameCount;e>this.lastFrameDiff?(this.downgradeLevel++,this.downgradeLevel>4&&(this.downgradeLevel=4)):e<=this.lastFrameDiff&&this.downgradeLevel>0&&this.downgradeLevel--,this.downgradeLevel!==A&&this.track.log.debug("downgrade level ".concat(A," to ").concat(this.downgradeLevel," ").concat(this.decodeFrameCount," frameDiff: ").concat(e,", lastFrameDiff: ").concat(this.lastFrameDiff)),this.lastFrameDiff=e,this.lastDowngradeTime=Date.now()}checkDowngradeByTimestampDiff(A){let e=this.downgradeLevel;this.lastDecodeFrameTimestamp-A>9e4?(this.downgradeLevel++,this.downgradeLevel>4&&(this.downgradeLevel=4)):this.downgradeLevel>0&&this.downgradeLevel--,this.downgradeLevel!==e&&this.track.log.debug("downgrade level ".concat(e," to ").concat(this.downgradeLevel))}pipe(A){return e=>WA(this,null,function*(){this._decodeSink=e;let o,a=A.mediaTrack;e.defer(()=>{var h;a&&(A.player.setCanvas(),A.setInputMediaStreamTrack(a)),o?.close(),(h=this.videoContext)==null||h.destroy(),delete this._decodeSink});let{renderer:l,type:d}=this;A.log.info("decoder type: ".concat(this.type," renderer: ").concat(this.renderer));try{switch(d){case"wasm":o=this.createDecoder(d,this.wasmOption);break;case"webCodecs":o=this.createDecoder(d);break;default:throw new Error("not supported yet")}let h=0;if(o.on("videoFrame",y=>{this.decodedFrameCount++,h++,(h<=10||h%500==0)&&A.log.debug("frame ".concat(h," ").concat(this.decodedFrameCount,"/").concat(this.decodeFrameCount," decoded ").concat(y.timestamp)),Date.now()-this.lastDowngradeTime>5e3&&(this.type==="webCodecs"?this.checkDowngradeByFrameDiff():this.type==="wasm"&&this.checkDowngradeByTimestampDiff(y.timestamp)),e.next(y)}),o.on("error",y=>{A.log.error(y),e.error(d==="webCodecs"?4:8)}),yield o.initialize(this.videoElement),!this._decodeSink)return;if(o.configure(this.config),d==="wasm"&&l==="webgl"){this.videoContext=new qC({frameRate:15,logger:A.log,name:A.userId}),this.videoContext.create(),this.videoContext.on(qC.UNAVAILABLE,S=>{A.log.error(S),e.error(7)});let y=new $oA(this.videoContext);o.on("videoCodecInfo",S=>y.resize(S.width,S.height)),o.on("videoFrame",S=>{({y:y.Y,u:y.U,v:y.V}=S),this.downgradeLevel===1?this.decodedFrameCount%2==0&&y.render(this.decodedFrameCount):y.render(this.decodedFrameCount)}),A.source=y,A.player.setCanvas(this.videoContext._canvas,2)}else if(l==="videoFrame"){A.player.setCanvas();let y=new MediaStreamTrackGenerator({kind:"video"}),S=y.writable.getWriter();A.setInputMediaStreamTrack(y),o.on("videoFrame",k=>S.write(k))}else{this.videoContext=new QQ({frameRate:15,logger:A.log,name:A.userId}),this.videoContext.create({alpha:!1});let y=this.videoContext.createVideoImageSource();o.on("videoFrame",k=>{try{y.image=k,y.update()}catch(V){delete this.goodType,A.log.error(V),e.error(11)}});let S=new rj(this.videoContext,{name:"remotePlayer",logger:A.log});y.connect(S),A.source=y,A.player.setCanvas(this.videoContext._canvas,2)}this.decoder=o}catch(h){A.log.error(h),e.error(d==="webCodecs"?2:6)}})}},c8=Promise.resolve(),l8=class extends zoA.EventEmitter{constructor(A){super(),this.room=A,Y(this,"videoContext"),Y(this,"_glVideoContext"),Y(this,"_2dVideoContext"),Y(this,"destination"),Y(this,"smallVideoContext"),Y(this,"smallDestination"),Y(this,"smallTrackSource"),Y(this,"smallImageSource"),Y(this,"_isMirror",!1),Y(this,"_rotation",0),Y(this,"cameraTrack"),Y(this,"cameraNode"),Y(this,"transformNode"),Y(this,"mixNode"),Y(this,"screenTrack"),Y(this,"screenNode"),Y(this,"selfModel",!1),Y(this,"blurRadius",3),Y(this,"arTrack"),Y(this,"_enableFaceCentering",!1),Y(this,"_enableEffectOptimization",!1),Y(this,"onAbort"),Y(this,"_color"),Y(this,"Wasm"),Y(this,"waterMarkNode"),Y(this,"_waterMarkOption"),Y(this,"watermarkImageList",[]),Y(this,"_beautyParams"),Y(this,"isUsingArTrack",!1),Y(this,"mixTrack"),Y(this,"_isMixScreen",!1),Y(this,"_virtualBackground"),Y(this,"_virtualBackgroundAbortCallback"),Y(this,"virtualBackgroundInstance"),Y(this,"_bgAssetPath"),Y(this,"log"),Y(this,"_mat4"),Y(this,"_postProcessing"),Y(this,"_checkId",0),Y(this,"_use2d",!1),Y(this,"_autoSwitchRenderMode",!0),Y(this,"encodePipeline",[]),Y(this,"decodePipeline",[]),Y(this,"updated",c8),Y(this,"_updateFlag",!1),this.log=pA.createLogger({parent:A?.getLogger(),id:"vm",userId:A?.userId,sdkAppId:A?.sdkAppId}),this.smallVideoContext=new QQ({frameRate:15,logger:this.log,name:"s"}),this.enablePrintDetail()}get smallMode(){var A;return((A=this.room)==null?void 0:A.smallMode)||"canvas"}get _hasVirtualBg(){return!!this._virtualBackground}get _hasWaterMark(){return this.watermarkImageList.length>0}get _isRotate(){return this._rotation!==0}get _isTransform(){return this._isMirror||this._isRotate}get renderMode(){return this._autoSwitchRenderMode?"auto":this._use2d?"2d":"webgl"}set renderMode(A){if(this._autoSwitchRenderMode=A==="auto",this._autoSwitchRenderMode)return;let e=A==="2d";this._use2d!==e&&(this._use2d=e,this.clear(),this.videoContext=this._use2d?this.get2dVideoContext():this.getGlVideoContext(),this.update())}get cameraResolution(){var A;let{width:e,height:o}=((A=this.cameraTrack)==null?void 0:A.settings)||{};return tQ(this._rotation)?{width:o,height:e}:{width:e,height:o}}get2dVideoContext(){return this._2dVideoContext?this._2dVideoContext.destroy():this._2dVideoContext=new QQ({frameRate:15,logger:this.log,name:"m"}),this._2dVideoContext.create({alpha:this._hasWaterMark||this._hasVirtualBg}),this._2dVideoContext}getGlVideoContext(){if(this._glVideoContext){if(this._glVideoContext.available)return this._glVideoContext}else this._glVideoContext=new qC({frameRate:15,logger:this.log,name:"m"});return this.initializeGlVideoContext(),this._glVideoContext}initializeGlVideoContext(){try{this._glVideoContext.create(T2<=22),this._glVideoContext.on(qC.UNAVAILABLE,A=>{var e;this.emit("error",A),this.log.warn("video context unavailable",A),(e=this._virtualBackgroundAbortCallback)==null||e.call(this,A),this.update().catch(o=>{this.log.error(o)})})}catch(A){this.emit("error",A)}}initVirtualBackground(A,e,o){this.onAbort=A,this._mat4=e,this._postProcessing=o}enablePrintDetail(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:2e3;this._checkId=Gr.run("interval",()=>{this.destination&&this.log.debug(this.destination.getInfo())},{delay:A})}destroy(){var A,e;(A=this._2dVideoContext)==null||A.destroy(),(e=this._glVideoContext)==null||e.destroy(),this.smallVideoContext.destroy(),Gr.clearTask(this._checkId)}get needAlpha(){return this._hasWaterMark||this._hasVirtualBg}get active(){return(xp||this._isMixScreen||this._isTransform||this._hasWaterMark||this._hasVirtualBg||this._beautyParams)&&this.checkOrCreateVideoContext()}sendCreateResult(){let A=arguments.length>1?arguments[1]:void 0,e=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:"videoCtxGl")==="videoCtxGl"?512700:512701;A?si.addFailedEvent({key:e,error:A}):si.addSuccessEvent({key:e})}checkOrCreateVideoContext(){let A=this._use2d;if(this._autoSwitchRenderMode&&(this._use2d=!this._hasVirtualBg),this.videoContext)if(this.videoContext.available){let e=!this.videoContext.hasAlpha&&this.needAlpha;if(this._autoSwitchRenderMode&&A===this._hasVirtualBg)this.clear();else{if(!e||!this._use2d)return!0;this.clear()}}else{if(this._glVideoContext=new qC({frameRate:15,logger:this.log,name:"m"}),this.initializeGlVideoContext(),this._glVideoContext.available)return this.videoContext=this._glVideoContext,this.videoContext.available;this.log.warn("webgl is still not available"),this.clear(),this._use2d=!0}return this.videoContext=this._use2d?this.get2dVideoContext():this.getGlVideoContext(),this.videoContext.available}get smallTrack(){var A;return(A=this.smallDestination)==null?void 0:A.videoTrack}get hasSmall(){return!!this.smallTrack}get initialTrack(){var A;return(A=this.cameraTrack)==null?void 0:A.mediaTrack}setSmallVideo(A,e){if(this.smallMode!=="api")if(A){if(!this.smallVideoContext.available){if(this.smallVideoContext.create({alpha:!1}),!this.smallVideoContext.available)return;this.smallDestination=new viA(this.smallVideoContext,A,this.log),this.smallVideoContext.on(qC.UNAVAILABLE,o=>{this.log.warn("small video context lost",o)})}if(this.smallVideoContext.frameRate=A.frameRate,this.smallDestination.resolution=A,e)this.smallTrackSource&&(this.smallTrackSource.close(),delete this.smallTrackSource),this.smallImageSource?this.smallImageSource.image=e:(this.smallImageSource=this.smallVideoContext.createVideoImageSource(e),this.smallImageSource.resize(e.width,e.height),this.smallImageSource.connect(this.smallDestination));else if(this.smallImageSource&&(this.smallImageSource.close(),delete this.smallImageSource),this.smallTrackSource)this.smallTrackSource.replaceTrack(this.initialTrack);else{this.smallTrackSource=this.smallVideoContext.createVideoTrackSource(this.initialTrack,"smallTrackSource");let{width:o,height:a}=this.cameraTrack.settings;this.smallTrackSource.resize(o,a),this.smallTrackSource.connect(this.smallDestination)}}else this.smallVideoContext.available&&(this.smallVideoContext.destroy(),delete this.smallDestination,delete this.smallTrackSource,delete this.smallImageSource)}_setMainOutput(A){var e,o;try{let a=this.cameraTrack,{small:l,player:d}=a;xp&&d.setCanvas(A);let h=A&&((e=this.destination)==null?void 0:e.videoTrack)||this.initialTrack;return this.isUsingArTrack&&this.arTrack&&(this.emit("output-track-changed"),h=this.arTrack),this.log.info("set main output ".concat(h?h.label:"no output track")),this.setSmallVideo(l,A),F.emit(nA.LOCAL_VIDEO_TRACK_PREPROCESSED,{mediaTrack:h,profile:(o=this.cameraTrack)==null?void 0:o.profile,room:this.room}),a.setOutputMediaStreamTrack(h)}catch(a){this.log.error("set main output failed",a)}}update(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return WA(this,null,function*(){var e;if(!this.cameraTrack||!this.initialTrack)return;if(!this.active)return this.cameraNode&&this.clear(),this._setMainOutput();let{settings:o,profile:a}=this.cameraTrack;if(this._use2d||!this._virtualBackground&&!this._beautyParams)this.destination||(this.destination=this.videoContext.createVideoTrackDestination({name:"mainDestination2d",logger:this.log}),this.destination.on(AC.RENDER,l=>{var d;(d=this.cameraTrack)==null||d.emit("render",l)})),Zd===16?this.initialTrack instanceof CanvasCaptureMediaStreamTrack?(this.cameraNode&&(this.cameraNode instanceof d_?(this.cameraNode.close(),delete this.cameraNode):this.cameraNode.image=this.initialTrack.canvas),this.cameraNode||(this.cameraNode=this.videoContext.createVideoImageSource(this.initialTrack.canvas,{name:"cameraCanvasSource",logger:this.log}))):(this.cameraNode&&(this.cameraNode instanceof d_?this.cameraNode.replaceTrack(this.initialTrack):(this.cameraNode.close(),delete this.cameraNode)),this.cameraNode||(this.cameraNode=this.videoContext.createVideoTrackSource(this.initialTrack,"cameraTrackSource"))):this.cameraNode?this.cameraNode.replaceTrack(this.initialTrack):this.cameraNode=this.videoContext.createVideoTrackSource(this.initialTrack,"cameraNodeSource"),this.cameraNode.resize(o.width,o.height);else if(A&&this.cameraNode&&this.destination)this.cameraNode.replaceTrack(this.initialTrack);else{this.cameraNode&&this.cameraNode.close(),this.destination?this.destination.disableCheckMute():(this.destination=new MiA(this.videoContext,{name:"mainDestination",logger:this.log}),this.destination.on(AC.RENDER,y=>{var S;(S=this.cameraTrack)==null||S.emit("render",y)}));let{width:l,height:d}=this.cameraResolution,h=yield this.getWatermarkImage(l,d);this._waterMarkOption={x:0,y:0,width:h.width,height:h.height,image:h},this.cameraNode=new XoA(this.videoContext,{input:this.initialTrack,width:l,height:d,mirror:this._isMirror,rotation:this._rotation,bg:this._virtualBackground,selfModel:this.selfModel,waterMark:this._waterMarkOption,beautyParams:this._beautyParams,useTflite:!0,blurRadius:this.blurRadius,assetPath:this._bgAssetPath,Wasm:this.Wasm,enableFaceCentering:this._enableFaceCentering,enableEffectOptimization:this._enableEffectOptimization,onAbort:this.onAbort,mat4:this._mat4,postProcessing:this._postProcessing,color:this._color}),this.cameraNode.connect(this.destination),this.destination.enableCheckMute(),yield this.cameraNode.predictReady}if(this.videoContext.frameRate=a.frameRate,this._use2d){let l=this.cameraNode;if(l.disconnect(),this._isTransform&&(this.transformNode?(this.transformNode.mirror=this._isMirror,this.transformNode.rotation=this._rotation):this.transformNode=new Ry(this.videoContext,this.log,this._isMirror,this._rotation),l=l.connect(this.transformNode),l.disconnect(),this.log.info("start mirror ".concat(this._isMirror," rotate ").concat(this.rotation))),this.mixNode&&this.mixNode.close(),delete this.mixNode,this._isMixScreen||this._hasWaterMark){if(this.mixNode=new rz(this.videoContext,this.log),l.connect(this.mixNode,{zIndex:1}),this._hasWaterMark&&!this.waterMarkNode&&this._waterMarkOption)this.waterMarkNode=this.videoContext.createVideoImageSource(this._waterMarkOption.image,{autoResize:!1,logger:this.log}),this.waterMarkNode.resize(this._waterMarkOption.width,this._waterMarkOption.height),this.waterMarkNode.x=this._waterMarkOption.x,this.waterMarkNode.y=this._waterMarkOption.y;else if(this.waterMarkNode){let{width:d,height:h}=this.cameraResolution;this.waterMarkNode.image=yield this.getWatermarkImage(d,h),d&&h&&this.waterMarkNode.resize(d,h)}(e=this.waterMarkNode)==null||e.connect(this.mixNode,{zIndex:2}),this._isMixScreen&&this.screenTrack&&(this.screenNode||(this.screenNode=this.videoContext.createVideoTrackSource(this.screenTrack.mediaTrack,"screenNodeSource"),this.screenNode.resize(this.screenTrack.settings.width,this.screenTrack.settings.height)),this.screenNode.shouldUpdate=!1,this.screenNode.connect(this.mixNode,{zIndex:0})),l=this.mixNode,this.log.info("start mix","".concat(this.mixNode.width,"x").concat(this.mixNode.height))}l.connect(this.destination)}return this.log.info("update ".concat(this._use2d?"2d":"webgl")),this._setMainOutput(this.videoContext.canvas)})}clearLastFrame(){var A;this.destination&&((A=this.destination.ctx2d)==null||A.clearRect(0,0,this.destination.width,this.destination.height))}changeInput(A){var e,o,a,l,d;if(A instanceof WM)return this.log.info("change screen input",(e=A.mediaTrack)==null?void 0:e.label),this.setScreenTrack(A);if(A instanceof BQ)return this.log.info("change video input",(o=A.mediaTrack)==null?void 0:o.label),this.setCameraTrack(A);if(A instanceof CL){this.log.info("change remote input",(a=A.mediaTrack)==null?void 0:a.label);let h=A.mediaTrack;return A.setOutputMediaStreamTrack(h)}if(A instanceof gj)return this.log.info("change mix input",(l=A.outMediaTrack)==null?void 0:l.label),this.setMixTrack(A);this.log.warn("change unknown input",(d=A.mediaTrack)==null?void 0:d.label)}removeInput(A){var e;A instanceof WM?((e=this.screenNode)==null||e.close(),delete this.screenNode,delete this.screenTrack,this.update()):A instanceof BQ?this._isMixScreen?(delete this.cameraNode,this.cameraTrack._inputTrack=null,this.update()):(this.clear(),delete this.cameraTrack,this.smallImageSource&&(this.smallImageSource.close(),delete this.smallImageSource),this.smallTrackSource&&(this.smallTrackSource.close(),delete this.smallTrackSource)):A instanceof CL?A.source&&A.source.context.destroy():A instanceof gj&&(delete this.mixTrack,this.update())}setMixTrack(A){this.mixTrack=A}setCameraTrack(A){return this.cameraTrack=A,this.update(!0)}setScreenTrack(A){return WA(this,null,function*(){return this.screenTrack=A,this._isMixScreen&&(this.screenNode?this.screenNode.replaceTrack(A.mediaTrack):yield this.update()),A.setOutputMediaStreamTrack(A.mediaTrack)})}getWatermarkImage(A,e){return WA(this,null,function*(){let o=document.createElement("canvas");e&&A&&(o.height=e,o.width=A);let a=o.getContext("2d");if(!a)throw new gi({code:Ct.NOT_SUPPORTED,message:"Make image failed because of canvas context is null"});return this.watermarkImageList.sort((l,d)=>l.zIndex-d.zIndex),this.watermarkImageList.forEach(l=>{let{image:d,x:h,y,width:S,height:k,fillVideo:V}=l,J=V&&A||S,cA=V&&e||k,CA=V?0:h,MA=V?0:y;a.drawImage(d,CA,MA,J,cA)}),cM(o.toDataURL())})}pushWaterMarkImageList(A){let{type:e}=A;this.watermarkImageList.some(o=>o.imageUrl===A.imageUrl&&o.height===A.height&&o.width===A.width&&o.x===A.x&&o.y===A.y&&o.type===A.type&&o.zIndex===A.zIndex&&o.fillVideo===A.fillVideo)||((e==="mute"||e==="watermark")&&(this.watermarkImageList=this.watermarkImageList.filter(o=>o.type!==e)),this.watermarkImageList.push(A))}setBeautyParams(A){return WA(this,null,function*(){this._beautyParams=A,this.update()})}stopBeauty(){return WA(this,null,function*(){this._beautyParams=void 0,this.update()})}setWatermark(A){return WA(this,null,function*(){let e;try{e=yield cM(A?.imageElement||A.imageUrl)}catch{throw new gi({code:Ct.INVALID_PARAMETER,message:"load image failed, url: ".concat(A.imageUrl)})}let{x:o=0,y:a=0,width:l=e.width,height:d=e.height,type:h="watermark",zIndex:y=2,fillVideo:S=!1}=A;this.watermarkImageList.some(k=>k.type===h)?(this.watermarkImageList=this.watermarkImageList.filter(k=>k.type!==h),this.pushWaterMarkImageList({x:o,y:a,width:l,height:d,image:e,zIndex:y,type:h,imageUrl:A.imageUrl,fillVideo:S}),e=yield this.getWatermarkImage(this.cameraResolution.width,this.cameraResolution.height),this._waterMarkOption={x:0,y:0,width:e.width,height:e.height,image:e},this.waterMarkNode?(this.waterMarkNode.x=0,this.waterMarkNode.y=0,this.waterMarkNode.resize(e.width,e.height),this.waterMarkNode.image=e):this.update()):(this.pushWaterMarkImageList({x:o,y:a,width:l,height:d,image:e,zIndex:y,type:h,imageUrl:A.imageUrl,fillVideo:S}),yield this.freshWatermark()),this.log.info("set watermark",JSON.stringify(this.watermarkImageList,(k,V)=>k==="imageUrl"?void 0:V))})}deleteWatermark(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"watermark";return WA(this,null,function*(){this.watermarkImageList=this.watermarkImageList.filter(e=>e.type!==A),this.log.info("delete watermark",A,JSON.stringify(this.watermarkImageList,(e,o)=>e==="imageUrl"?void 0:o)),yield this.freshWatermark()})}freshWatermark(){return WA(this,null,function*(){var A;(A=this.waterMarkNode)==null||A.close(),delete this.waterMarkNode,delete this._waterMarkOption;let{width:e,height:o}=this.cameraResolution,a=yield this.getWatermarkImage(e,o);this._waterMarkOption={x:0,y:0,width:a.width,height:a.height,image:a},this.update()})}setVirtualBackground(A){return WA(this,null,function*(){var e,o,a;if(A){if(A.onAbort&&(this._virtualBackgroundAbortCallback=A.onAbort),this._use2d&&!this._autoSwitchRenderMode)return Promise.reject(new Error("not support virtual background in 2d mode"));this._bgAssetPath=A.assetPath,A.type==="image"?this._virtualBackground=yield cM(A.imageUrl):(this.blurRadius=A.blurLevel||this.blurRadius||3,this._virtualBackground=A.type),this._enableFaceCentering=(e=A.enableFaceCentering)!=null?e:this._enableFaceCentering,this._enableEffectOptimization=(o=A.enableEffectOptimization)!=null?o:this._enableEffectOptimization,this._color=(a=A.color)!=null?a:[0,1,0]}else delete this._virtualBackground,delete this._virtualBackgroundAbortCallback;if(this.log.info("".concat(this._virtualBackground?"start":"stop"," virtual background, ").concat(A?.type||"",", ").concat(this.blurRadius||"")),yield this.update(),this._virtualBackground&&!this._glVideoContext.available)throw new gi({code:Ct.INVALID_OPERATION,message:"webgl context create failed, ".concat(this._glVideoContext.error)})})}get mixScreen(){return this._isMixScreen}set mixScreen(A){var e;this._isMixScreen=A,this._isMixScreen||((e=this.screenNode)==null||e.close(),delete this.screenNode),this.update()}set mirror(A){var e;this._isMirror!==A&&(this._isMirror=A,this._isTransform||((e=this.transformNode)==null||e.close(),delete this.transformNode),this.update())}get mirror(){return this._isMirror}set rotation(A){var e;this._rotation!==A&&(this._rotation=A,this._isTransform||((e=this.transformNode)==null||e.close(),delete this.transformNode),this.update())}get rotation(){return this._rotation}enableAr(A){this.arTrack=A,this.isUsingArTrack=!0,this.update()}updateAr(){return WA(this,null,function*(){var A;(A=this.cameraTrack)!=null&&A.mediaTrack&&(yield this.virtualBackgroundInstance.ar.updateInputTrack(this.cameraTrack.mediaTrack.clone()))})}disableAr(){var A;this.isUsingArTrack=!1,(A=this.arTrack)==null||A.stop(),this.arTrack=void 0,this.update()}createDecodeContext(A){return new esA(A)}clear(){var A,e;(A=this.videoContext)==null||A.disconnect(),(e=this.destination)==null||e.removeAllListeners(),delete this.destination,delete this.cameraNode,delete this.transformNode,delete this.screenNode,delete this.waterMarkNode}addEncodeProcessor(A){let{processor:e,type:o}=A;var a;this.encodePipeline.includes(e)||(this.encodePipeline[o]=e,(a=this.room)==null||a.enableInsertableStreams())}addDecodeProcessor(A){let{processor:e,type:o}=A;var a;this.decodePipeline.includes(e)||(this.decodePipeline[o]=e,(a=this.room)==null||a.enableInsertableStreams())}removeEncodeProcessor(A){let{type:e}=A;this.encodePipeline[e]=void 0}removeDecodeProcessor(A){let{type:e}=A;this.decodePipeline[e]=void 0}};hi([_5(function(A){this.log.error("update failed",A)}),jr(A=>function(){for(var e=arguments.length,o=new Array(e),a=0;a{A.apply(this,o).then(l,d),setTimeout(d,5e3,new gi({code:Ct.API_CALL_TIMEOUT,message:"update timeout"}))}),this._updateFlag=!1,yield this.updated)})})],l8.prototype,"update");var tsA=0,isA=class extends Zs{constructor(A){super("room"),Y(this,"seq",++tsA),Y(this,"sdkAppId"),Y(this,"userId"),Y(this,"userSig"),Y(this,"privateMapKey"),Y(this,"latencyLevel"),Y(this,"tinyId"),Y(this,"scene"),Y(this,"roomId"),Y(this,"useStringRoomId"),Y(this,"role","anchor"),Y(this,"joinParams",null),Y(this,"localPublishFlag",0),Y(this,"localTracks",new Set),Y(this,"enableAutoPlayDialog",!0),Y(this,"autoReceiveAudio",!0),Y(this,"autoReceiveVideo",!0),Y(this,"proxy_ws"),Y(this,"proxy_wt"),Y(this,"proxy_unified"),Y(this,"checkSystemResult",{result:!0,detail:{isBrowserSupported:!0,isWebRTCSupported:!0,isWebCodecsSupported:!0,isMediaDevicesSupported:!0,isScreenShareSupported:!0,isSmallStreamSupported:!0,isH264EncodeSupported:!0,isVp8EncodeSupported:!0,isH264DecodeSupported:!0,isVp8DecodeSupported:!0,isH265EncodeSupported:!0,isH265DecodeSupported:!0}}),Y(this,"keyPointManager"),Y(this,"audioManager"),Y(this,"videoManager"),Y(this,"callDurationCalculator"),Y(this,"badCaseDetector"),Y(this,"scheduleResult",{domains:null,iceServers:null,iceTransportPolicy:null,trtcAutoConf:null}),Y(this,"videoDecodeFallbackType"),Y(this,"smallMode","canvas"),Y(this,"prelinkPromise",null),Y(this,"enableChorus",!1),Y(this,"_isUsingCachedSchedule",!1),Y(this,"_log"),Y(this,"_joinedTimestamp",0),Y(this,"_sdkType"),Y(this,"heartbeatReport"),Y(this,"heartbeatCount",0),Y(this,"quality"),Y(this,"enableSEI"),Y(this,"isDestroyed",!1),this._log=pA.createLogger({parent:A.logger,id:"r".concat(this.seq)}),this.useStringRoomId=!!A.useStringRoomId,Nr(A.autoReceiveAudio)&&(this.autoReceiveAudio=A.autoReceiveAudio),Nr(A.autoReceiveVideo)&&(this.autoReceiveVideo=A.autoReceiveVideo),Nr(A.enableAutoPlayDialog)&&(this.enableAutoPlayDialog=A.enableAutoPlayDialog),this._sdkType=A.sdkType,this.keyPointManager=new qoA({room:this,frameWorkType:A.frameWorkType,component:A.component,language:A.language}),this.callDurationCalculator=new KoA({room:this}),this.badCaseDetector=new WoA({room:this}),this.audioManager=new GiA(this),this.videoManager=new l8(this)}get videoCodec(){return"h264"}get scriptTransformWorker(){}get isMainStreamPublished(){for(let A of this.localTracks)if(4&A.mediaType)return!0;return!1}get isAuxStreamPublished(){for(let A of this.localTracks)if(2&A.mediaType)return!0;return!1}get hasAuxStream(){for(let A of this.remotePublishedUserMap.values())if(A.muteState.hasAuxiliary)return!0;return this.isAuxStreamPublished}get localMainAudioTrack(){for(let A of this.localTracks)if(1&A.mediaType)return A;return null}get localMainVideoTrack(){for(let A of this.localTracks)if(4&A.mediaType)return A;return null}get localAuxVideoTrack(){for(let A of this.localTracks)if(2&A.mediaType)return A;return null}get publishState(){let A={audio:!1,bigVideo:!1,smallVideo:!1,auxVideo:!1};return this.localTracks.forEach(e=>{if(e.isPublished||e.isPublishing)switch(e.mediaType){case 1:A.audio=!0;break;case 4:A.bigVideo=!0,A.smallVideo=e.hasSmall;break;case 2:A.auxVideo=!0}}),A}get muteState(){var A,e,o;return{audio:!((A=this.localMainAudioTrack)==null||!A.muted),bigVideo:!((e=this.localMainVideoTrack)==null||!e.muted),auxVideo:!((o=this.localAuxVideoTrack)==null||!o.muted)}}getLogger(){return this._log}get isJoining(){return this.state.toString()==="joining"}get isJoined(){return this.state==="joined"}get isLeft(){return this.state==="left"}addTrack(A){return WA(this,null,function*(){return this.publish(A)})}removeTrack(A){return WA(this,null,function*(){return this.unpublish(A)})}replaceTrack(A){return WA(this,null,function*(){})}setEncodedDataProcessingListener(A){throw new Error("Method not implemented.")}enableAIVoice(A){throw new Error("Method not implemented.")}setProxyServer(A){if(Vn(A))/^wss?:\/\//i.test(A)?this.proxy_ws=A:/^https?:\/\//i.test(A)&&(this.proxy_wt=A);else if(IE(A)){let{websocketProxy:e,webtransportProxy:o,loggerProxy:a,scheduleProxy:l,unifiedProxy:d}=A;this.proxy_ws=e,this.proxy_wt=o,this.proxy_unified=d,d?(Ej([d,d]),qS("https://".concat(d))):(a&&qS(a),l&&Ej(l))}F.once(nA.JOIN_RECEIVED_CMD_RES,()=>this.sendAbilityStatus({sched_domain:om.main,sched_back_domain:om.backup,signal_domain:this.proxy_ws||this.proxy_wt||""}))}getRemoteAudioStats(){return WA(this,null,function*(){let A={};return this.remotePublishedUserMap.forEach(e=>{A[e.userId]=e.remoteAudioTrack.stat}),A})}getTransportStats(){return WA(this,null,function*(){var A;let e={rtt:((A=this.quality)==null?void 0:A.uplinkRTT)||0,downlinksRTT:{}};if(this.quality)for(let o of this.quality.downlinkInfo)e.downlinksRTT[o.userId]=o.rtt;return e})}getRemoteVideoStats(){return WA(this,arguments,function(){var A=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"main";return function*(){let o={};return A.remotePublishedUserMap.forEach(a=>{let l=e==="auxiliary"?a.remoteAuxiliaryTrack:a.remoteVideoTrack;o[a.userId]=l.stat}),o}()})}checkDestroy(){if(this.isDestroyed)throw new gi({code:Ct.INVALID_OPERATION,message:Xo({key:vo.CLIENT_DESTROYED,data:{funName:"join"}})})}destroy(){if(this.isJoined)throw this._log.warn(cc.INVALID_DESTROY),new gi({code:Ct.INVALID_OPERATION,message:Xo({key:vo.INVALID_DESTROY})});this._log.info("destroy room"),this.audioManager.destroy(),this.videoManager.destroy(),this.keyPointManager.destroy(),this.callDurationCalculator.destroy(),this.badCaseDetector.destroy(),this.isDestroyed=!0,F.emit(nA.ROOM_DESTROY,{room:this})}schedule(A,e){return WA(this,null,function*(){var o,a,l,d;let h=ko();try{let{isCached:y,result:S,detailCost:k}=yield Sz({userId:this.userId,sdkAppId:this.sdkAppId,roomId:this.useStringRoomId?A.strRoomId:A.roomId,useStringRoomId:this.useStringRoomId,version:qd,userSig:this.userSig,role:this.scene==="live"?A.role:void 0,frameWorkType:e,latencyLevel:A.latencyLevel});this._isUsingCachedSchedule=y,this._log.info("schedule cache:".concat(+y," ").concat(zd(S,{keysToExclude:["username","credential"]}))),y&&F.once(nA.JOIN_RECEIVED_CMD_RES,()=>this.sendAbilityStatus({scheduleCache:1})),this.scheduleResult=fi(fi({},this.scheduleResult),S),kn((o=S.config)==null?void 0:o.retryCount)&&u0(S.config.retryCount),Vn((a=S.config)==null?void 0:a.loggerDomain)&&qS(S.config.loggerDomain),this.videoDecodeFallbackType=((l=S.config)==null?void 0:l.videoDecodeFallback)||this.videoDecodeFallbackType,this.smallMode=((d=S.config)==null?void 0:d.smallMode)||this.smallMode,F.emit(nA.JOIN_SCHEDULE_SUCCESS,{room:this,schedule:this.scheduleResult,detailCost:k}),si.addSuccessEvent({key:521700,cost:ko()-h})}catch(y){throw si.addFailedEvent({key:521700,error:y}),y}})}sendAbilityStatus(A){}enableInsertableStreams(){return Promise.resolve()}switchRoom(A){return Promise.reject()}isSwitchRoomSupported(){return!1}prelink(A,e,o,a,l,d){return WA(this,null,function*(){return Promise.resolve()})}closePrelink(){return WA(this,null,function*(){return Promise.resolve()})}},osA=gc(jl()),I8=gc(Sb());function u8(A){var e;let o=[];for(let a=0;ad.payload===A.rtp[a].payload)[0];o.push({payload:A.rtp[a].payload,codec:A.rtp[a].codec,fmtp:l?l.config:"",rate:A.rtp[a].rate,rtx:((e=A.rtp[a+1])==null?void 0:e.codec)==="rtx"?A.rtp[a+1].payload:0,rtcpfb:(A?.rtcpFb||[]).filter(d=>d.payload===A.rtp[a].payload).map(d=>{let{type:h,subtype:y}=d;return{id:h,params:y?[y]:[]}})})}return o}var ssA=(A,e,o)=>WA(null,null,function*(){var a;let l=uc(A),d={ice:{ufrag:"",password:""},dtls:{hash:"",fingerprint:"",setup:""},audio:{codecs:[],extensions:[]},video:{codecs:[],decoders:[],extensions:[]},useDataChannel:o};d.ice.ufrag=String(l.media[0].iceUfrag),d.ice.password=l.media[0].icePwd||"",l.fingerprint&&(d.dtls.hash=l.fingerprint.type,d.dtls.fingerprint=l.fingerprint.hash,d.dtls.setup=l.setup||""),l.media[0].fingerprint&&(d.dtls.hash=l.media[0].fingerprint.type,d.dtls.fingerprint=l.media[0].fingerprint.hash),d.dtls.setup=l.media[0].setup||"";let h=l.media[0],y=l.media[1];h.ext&&(d.audio.extensions=h.ext.map(k=>({id:k.value,uri:k.uri}))),y.ext&&(d.video.extensions=y.ext.map(k=>({id:k.value,uri:k.uri})));for(let k of h.rtp){if(k.codec!=="opus")continue;let V=h.fmtp.find(cA=>cA.payload===k.payload);if(!V)continue;let J={codec:k.codec,fmtp:V.config,payload:V.payload,rate:k.rate,channels:k.encoding,rtcpfb:[],rtx:0};(a=h.rtcpFb)==null||a.forEach(cA=>{let{payload:CA,type:MA,subtype:ie}=cA;if(CA===J.payload){let pe={id:MA,params:[]};ie&&pe.params.push(ie),J.rtcpfb.push(pe)}}),d.audio.codecs.push(J);break}let S=["h264","vp8","h265"];return e&&S.shift(),d.video.codecs=[...u8(y)].filter(k=>S.includes(k.codec.toLocaleLowerCase())),d.video.decoders=(yield function(){return WA(this,null,function*(){let k=new RTCPeerConnection;k.addTransceiver(YA.VIDEO,{direction:YA.TRANSCEIVER_DIRECTION_RECVONLY});let V=yield k.createOffer();if(!V.sdp)return[];let J=u8(uc(V.sdp).media[0]);return k.close(),J})}()).filter(k=>["h264","vp8","h265"].includes(k.codec.toLocaleLowerCase())),d}),E8=(A,e)=>{let o=(A||"").trim(),a=(e||"").trim(),l="profile-level-id",d="".concat(l,"=[0-9a-fA-F]{6}");if(new RegExp(d).test(o)){let y=new RegExp(d,"g");return o.replace(y,"".concat(l,"=").concat(a))}if(!o)return"".concat(l,"=").concat(a);let h=o.endsWith(";")?"":";";return"".concat(o).concat(h).concat(l,"=").concat(a)},nsA=A=>{let{serverAbility:e,clientAbility:o,offerSDP:a,enableCustomMessage:l,profileLevelIdConfig:d}=A,h=uc(a),y={extmapAllowMixed:"extmap-allow-mixed",groups:h.groups,icelite:"ice-lite",media:[],msidSemantic:{semantic:"",token:"WMS"},name:"-",origin:{address:"127.0.0.1",username:"-",sessionId:String(Date.now()),sessionVersion:1,netType:"IN",ipVer:4},timing:{start:0,stop:0},version:0},S={candidates:e.candidates.map(V=>({component:1,foundation:"1",generation:0,ip:V.ip,port:V.port,priority:V.priority,transport:V.foundation,type:V.type})),connection:{version:4,ip:"0.0.0.0"},direction:YA.TRANSCEIVER_DIRECTION_RECVONLY,ext:e.audio.extensions.map(V=>({value:V.id,uri:V.uri})),fingerprint:{type:e.dtls.hash,hash:e.dtls.fingerprint},fmtp:[{payload:e.audio.codecs[0].payload,config:e.audio.codecs[0].fmtp}],icePwd:e.ice.password,iceUfrag:e.ice.ufrag,mid:"0",payloads:String(e.audio.codecs[0].payload),port:h.media[0].port,protocol:h.media[0].protocol,type:YA.AUDIO,setup:e.dtls.setup,rtcpFb:e.audio.codecs[0].rtcpfb.map(V=>({payload:e.audio.codecs[0].payload,type:V.id,subtype:V.params[0]})),rtcpMux:"rtcp-mux",rtcpRsize:"rtcp-rsize",rtp:[{payload:e.audio.codecs[0].payload,codec:e.audio.codecs[0].codec,rate:e.audio.codecs[0].rate,encoding:e.audio.codecs[0].channels}]};y.media.push(S);let k=[d?.big,d?.small,d?.aux];return[1,2,3].forEach((V,J)=>{y.media.push(d8({mid:V,serverAbility:e,clientAbility:o,parsedOffer:h,profileLevelId:k[J]}))}),l&&y.media.push(h.media.find(V=>V.mid==="dc")),_y(y)},d8=A=>{let{mid:e,serverAbility:o,clientAbility:a,parsedOffer:l,isDownlink:d=!1,profileLevelId:h}=A,y={candidates:o.candidates.map(S=>({component:1,foundation:"1",generation:0,ip:S.ip,port:S.port,priority:S.priority,transport:S.foundation,type:S.type})),connection:{version:4,ip:"0.0.0.0"},direction:YA.TRANSCEIVER_DIRECTION_RECVONLY,ext:o.video.extensions.map(S=>({value:S.id,uri:S.uri})),fingerprint:{type:o.dtls.hash,hash:o.dtls.fingerprint},fmtp:[],icePwd:o.ice.password,iceUfrag:o.ice.ufrag,mid:String(e),payloads:"",port:l.media[0].port,protocol:l.media[0].protocol,type:YA.VIDEO,setup:o.dtls.setup,rtcpFb:[],rtcpMux:"rtcp-mux",rtcpRsize:"rtcp-rsize",rtp:[]};if(d){let S=o.video.decoders;(!S||S.length===0)&&(S=o.video.codecs),(!S||S.length===0)&&(S=a.video.decoders),S.forEach(k=>{f_(y,k)})}else{let S;S=o.useH265?o.video.codecs.findIndex(V=>V.codec.toLowerCase()==="h265"):o.video.codecs.findIndex(V=>V.codec.toLowerCase()===(o.useVp8?"vp8":"h264"));let k=o.video.codecs[S]||a.video.codecs[0];f_(y,k)}if(!d&&h){let S=y.fmtp,k=y.rtp.find(V=>{var J;return((J=V.codec)==null?void 0:J.toLowerCase())==="h264"});if(k){let V=S.find(J=>String(J.payload)===String(k.payload));V&&(V.config=E8(V.config,h))}}return y},f_=(A,e)=>{A.payloads="".concat(A.payloads," ").concat(e.payload).trim(),A.fmtp.push({payload:e.payload,config:e.fmtp}),A.rtcpFb=[...A.rtcpFb||[],...e.rtcpfb.map(o=>({payload:e.payload,type:o.id,subtype:o.params[0]}))],A.rtp.push({payload:e.payload,codec:e.codec.toUpperCase(),rate:e.rate}),e.rtx&&(A.payloads="".concat(A.payloads," ").concat(e.rtx),A.fmtp.push({payload:e.rtx,config:"apt=".concat(e.payload)}),A.rtp.push({payload:e.rtx,codec:"rtx",rate:e.rate}))},rsA=(A,e,o)=>{let a=I8.default.parse(A);return a.media.forEach((l,d)=>{var h;if((l.type===YA.AUDIO||l.type===YA.VIDEO)&&(function(y){if(!y.rtcpFb)return;let S=[];y.rtcpFb.forEach((k,V)=>{var J;S.push(k),y.rtcpFb&&((J=y.rtcpFb[V+1])==null?void 0:J.payload)!==k.payload&&k.type!=="rrtr"&&S.push({payload:k.payload,type:"rrtr"})}),y.rtcpFb=S}(l),function(y){y.type===YA.VIDEO&&y.fmtp&&y.fmtp.forEach(S=>{S.config.includes("apt")||(S.config+=";sps-pps-idr-in-keyframe=1")})}(l),function(y){y.type===YA.AUDIO&&y.fmtp&&y.fmtp.forEach(S=>{S.config+=";sprop-stereo=1;stereo=1"})}(l),function(y){let S=new Set(["urn:ietf:params:rtp-hdrext:sdes:mid","urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id","urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id"]);y.ext&&(y.ext=y.ext.filter(k=>!S.has(k.uri)))}(l),l.type===YA.VIDEO)){if(d<4)l.payloads="",l.fmtp=[],l.rtp=[],l.rtcpFb=[],e.video.codecs.forEach(y=>f_(l,y));else if(o){l.payloads="",l.fmtp=[],l.rtp=[],l.rtcpFb=[];let y=o.video.decoders;(!y||y.length===0)&&(y=o.video.codecs),(!y||y.length===0)&&(y=e.video.decoders),y.forEach(S=>f_(l,S))}}(h=l.payloads)!=null&&h.includes("datachannel")&&a.groups&&l.mid&&(a.groups[0].mids=a.groups[0].mids.replace(l.mid,"dc"),l.mid="dc")}),I8.default.write(a)};function Uj(A){var e,o;let a=/profile-level-id=([0-9a-fA-F]{6})/.exec(A);return(o=(e=a?.[1])==null?void 0:e.toLowerCase())!=null?o:null}function Fj(A){let e=A.toLowerCase();if(!/^[0-9a-f]{6}$/.test(e))return"unknown";let o=parseInt(e.slice(0,2),16);return o===66?"baseline":o===77?"main":o===100?"high":"unknown"}function C8(A,e){if(!e)return"";let o=A.trim().toLowerCase().replace(/_/g,"-");if(!o)return"";if(/^[0-9a-f]{6}$/.test(o))return o;if(o!=="baseline"&&o!=="main"&&o!=="high")return"";for(let a of e.video.codecs){let l=Uj(a.fmtp);if(l&&Fj(l)===o)return l}return""}var asA=gc(jl()),h8=class extends asA.EventEmitter{constructor(A){super(),this.room=A,Y(this,"mainFpsHealth",1),Y(this,"mainBitrateHealth",1),Y(this,"badMainBitrateHealthCount",0),Y(this,"lastEmitBadHealthTime",0),Y(this,"log"),!Ha&&uE&&F.on("262",this.onVideoCodecChanged,this),this.log=A.getLogger().createChild({id:"h-d"})}onVideoCodecChanged(A){let{remoteUserId:e,streamType:o,isHWCodec:a,codec:l}=A;if(!e&&o!==7&&l==="h264"){if(!a)return void this.room.off("heartbeat-report",this.onHeartbeatReport,this);this.room.listeners("heartbeat-report").includes(this.onHeartbeatReport)||this.room.on("heartbeat-report",this.onHeartbeatReport,this)}}onHeartbeatReport(A){Date.now()-this.lastEmitBadHealthTime<3e4||(A.msg_up_stream_info.msg_video_status.forEach(e=>{if(e.uint32_video_enc_fps&&e.uint32_video_capture_fps){let o=e.uint32_video_enc_fps/e.uint32_video_capture_fps;e.uint32_video_stream_type===2&&(this.mainFpsHealth=o)}if(e.uint32_video_codec_bitrate&&e.uint32_video_stream_type===2){let{localMainVideoTrack:o}=this.room;o&&(this.mainBitrateHealth=e.uint32_video_codec_bitrate/1e3/o.profile.bitrate)}}),this.log.debug("mainBitrateHealth: ".concat(this.mainBitrateHealth," mainFpsHealth: ").concat(this.mainFpsHealth)),this.mainBitrateHealth>.5&&(this.badMainBitrateHealthCount=0),this.mainFpsHealth>.9&&this.mainBitrateHealth<.5&&(this.badMainBitrateHealthCount++,this.badMainBitrateHealthCount>3&&(this.badMainBitrateHealthCount=0,this.lastEmitBadHealthTime=Date.now(),this.log.warn("bad main bitrate health: ".concat(this.mainBitrateHealth)),this.emit("1",{isAux:!1}))))}destroy(){F.off("262",this.onVideoCodecChanged,this),this.room.off("heartbeat-report",this.onHeartbeatReport,this)}};Y(h8,"EVENT_BAD_HEALTH","bad_health");var gsA=h8,y_=(A=>(A.TRACK="track",A.DATA_CHANNEL_MESSAGE="data_channel_msg",A[A.CONNECTION_STATE_CHANGED="connection-state-changed"]="CONNECTION_STATE_CHANGED",A[A.FIREWALL_RESTRICTION="firewall-restriction"]="FIREWALL_RESTRICTION",A.RECONNECTED="spc-reconnected",A.RECONNECT_FAILED="spc-reconnect-failed",A.ERROR="error",A.SEI_MESSAGE="sei-message",A.DUMP="dump",A))(y_||{}),csA=1,Ty=class extends osA.default{constructor(A){let{signalChannel:e,room:o,enableDataChannel:a}=A;super(),Y(this,"stat",{iceStartTime:0,iceEndTime:0,dtlsStartTime:0,dtlsEndTime:0,peerConnectionStartTime:0,peerConnectionEndTime:0}),Y(this,"isDestroyed",!1),Y(this,"currentState","DISCONNECTED"),Y(this,"_room"),Y(this,"_signalChannel"),Y(this,"_peerConnection",null),Y(this,"_datachannel",null),Y(this,"_enableDataChannel"),Y(this,"_log"),Y(this,"_downlinkMIDMap",new Map),Y(this,"_downlinkMIDUserIDMap",new Map),Y(this,"_reconnectionTimer",-1),Y(this,"reconnectionCount",0),Y(this,"clientAbility"),Y(this,"_serverAbility",null),Y(this,"addDownlinkQueue",new Set),Y(this,"removeDownlinkQueue",new Set),Y(this,"_parsedAnswer",null),Y(this,"_updateSDPPromise",null),Y(this,"_waitForPCConnectedPromise"),Y(this,"clearWaitForConnectedPromise"),Y(this,"clearConnectTimeout"),Y(this,"_isSDPLogged",!1),Y(this,"enableInsertableStreams",!1),Y(this,"insertableStreamsAbortMap",new Map),Y(this,"receiverRemoteTrackMap",new WeakMap),Y(this,"scriptTransformWorker"),Y(this,"_isRelayTried",!1),Y(this,"_rttOverCount",0),Y(this,"originOffer",null),Y(this,"autoSubscribedSsrcGroups",new Map),Y(this,"autoSubscribedUserMap",new Map),Y(this,"_h265DecodeFailed",!1),this._room=o,this._enableDataChannel=a,this._signalChannel=e,this._log=pA.createLogger({parent:this._room.getLogger(),id:"spc".concat(csA++),userId:this._room.userId,sdkAppId:this._room.sdkAppId}),this._room.enableCodecPipeline&&(zp?this.enableInsertableStreams=!0:this.initScriptTransformWorker()),this._room.healthDetector.on("1",this.onBadHealth,this)}get isH264EncodeSupported(){let A=this._room.checkSystemResult.detail.isH264EncodeSupported;return this._serverAbility&&(A=A&&!!this._serverAbility.video.codecs.find(e=>e.codec.toLowerCase()==="h264")),A}addAbortController(A,e){var o;(o=this.insertableStreamsAbortMap.get(A))==null||o.abort("destroy"),this.insertableStreamsAbortMap.set(A,e)}get isVP8EncodeSupported(){let A=this._room.checkSystemResult.detail.isVp8EncodeSupported;return this._serverAbility&&(A=A&&this._serverAbility.video.codecs.find(e=>e.codec.toLowerCase()==="vp8")),A}get isH265EncodeSupported(){let A=this._room.checkSystemResult.detail.isH265EncodeSupported;return this._serverAbility&&(A=A&&!!this._serverAbility.video.codecs.find(e=>e.codec.toLowerCase()==="h265")),A}get videoCodec(){var A,e,o;let a=(A=this._parsedAnswer)==null?void 0:A.media[1].rtp.find(l=>["h264","vp8","h265"].includes(l.codec.toLowerCase()));return a?a.codec.toLowerCase():(e=this._serverAbility)!=null&&e.useH265?"h265":(o=this._serverAbility)!=null&&o.useVp8?"vp8":"h264"}get downlinkVideoCodec(){var A,e,o;return(A=this._serverAbility)!=null&&A.useH265&&(e=this._serverAbility)!=null&&e.video.decoders.find(a=>a.codec.toLowerCase()==="h265")&&!this._h265DecodeFailed?"h265":(o=this._serverAbility)!=null&&o.video.decoders.find(a=>a.codec.toLowerCase()==="h264")?"h264":"vp8"}get isUsingH264(){return this.videoCodec==="h264"}get isUsingH265(){return this.videoCodec==="h265"}get isUsingVP8(){return this.videoCodec==="vp8"}get is42001fSupported(){return!!this.clientAbility&&!!this.clientAbility.video.codecs.find(A=>A.fmtp.includes("42001f"))}isProfileLevelIdSupported(A){return!!this.clientAbility&&!!this.clientAbility.video.codecs.find(e=>e.fmtp.includes(A))}get uplinkSSRC(){return this._peerConnection&&this._peerConnection.localDescription?(A=>{let e=uc(A),o={audioSsrc:0,audioRtxSsrc:0,bigVideoSsrc:0,bigVideoRtxSsrc:0,smallVideoSsrc:0,smallVideoRtxSsrc:0,auxVideoSsrc:0,auxVideoRtxSsrc:0};return e.media.forEach((a,l)=>{var d;if(a.ssrcs&&!Ke(a.ssrcs[0].id)){let h=Number(a.ssrcs[0].id),y=Number((d=a.ssrcs.filter(S=>S.attribute==="cname")[1])==null?void 0:d.id);switch(l){case 0:o.audioSsrc=h;break;case 1:o.bigVideoSsrc=h,o.bigVideoRtxSsrc=y;break;case 2:o.smallVideoSsrc=h,o.smallVideoRtxSsrc=y;break;case 3:o.auxVideoSsrc=h,o.auxVideoRtxSsrc=y}}}),o})(this._peerConnection.localDescription.sdp):{audioSsrc:0,audioRtxSsrc:0,bigVideoSsrc:0,bigVideoRtxSsrc:0,smallVideoSsrc:0,smallVideoRtxSsrc:0,auxVideoSsrc:0,auxVideoRtxSsrc:0}}onBadHealth(A){}initScriptTransformWorker(){o_&&(this.scriptTransformWorker=Lz({videoEncodePipeline:this._room.videoManager.encodePipeline,videoDecodePipeline:this._room.videoManager.decodePipeline,audioEncodePipeline:this._room.audioManager.encodePipeline,audioDecodePipeline:this._room.audioManager.decodePipeline}),this.scriptTransformWorker.onmessage=A=>{A.data.type==="sei"?this.emit("sei-message",A.data):A.data.type,A.data.type==="dump"&&this.emit("dump",A.data)},this.scriptTransformWorker.onerror=A=>{this._log.error("scriptTransformWorker error: ",A.message)})}get isReconnecting(){return this.currentState==="RECONNECTING"||this._reconnectionTimer>0||this.reconnectionCount>0}get dtlsTransport(){if(!this._peerConnection)return null;let A=this._peerConnection.getSenders();return A.length===0?null:A[0].transport}getPeerConnectionConfig(A){var e;let o={encodedInsertableStreams:this.enableInsertableStreams,offerExtmapAllowMixed:!0,iceServers:A,iceTransportPolicy:this._room.getIceTransportPolicy(),sdpSemantics:this._room.sdpSemantics,bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",tcpCandidatePolicy:"disable",IceTransportsType:"nohost"},a=(e=this._peerConnection)==null?void 0:e.getConfiguration().encodedInsertableStreams;return f2(a)&&(o.encodedInsertableStreams=a),this._log.debug("getPeerConnectionConfig",JSON.stringify(o)),o}initialize(A){return WA(this,null,function*(){var e;let o;try{return this._peerConnection=new RTCPeerConnection(this.getPeerConnectionConfig(A)),this._peerConnection.oniceconnectionstatechange=()=>{if(!this._peerConnection)return;let a=this._peerConnection.iceConnectionState;this._log.debug("ice state: ".concat(a)),a==="checking"&&this.stat.iceStartTime===0?this.stat.iceStartTime=Date.now():a==="connected"&&this.stat.iceEndTime===0?(this.stat.iceEndTime=Date.now(),this._signalChannel.clearBakRelayIps(),si.addSuccessEvent({key:521711,cost:this.stat.iceEndTime-this.stat.iceStartTime})):a==="failed"&&si.addFailedEvent({key:521711})},this._peerConnection.onsignalingstatechange=()=>{var a;let l=((a=this._peerConnection)==null?void 0:a.signalingState)||"";this._log[l==="closed"?"debug":"info"]("signaling state: ".concat(l))},this._peerConnection.onconnectionstatechange=this.onConnectionStateChange.bind(this),this._peerConnection.ontrack=a=>this.emit("track",a),this._enableDataChannel&&(this._datachannel=this._peerConnection.createDataChannel("".concat(this._room.userId,"dc")),this._datachannel.binaryType="arraybuffer",this._datachannel.onopen=()=>{this._log.info("datachannel open")},this._datachannel.onclose=()=>{this._log.warn("datachannel close")},this._datachannel.onmessage=a=>{let l=new IsA(a.data);this.emit("data_channel_msg",{data:l})},this._datachannel.onerror=a=>{this._log.warn("datachannel error",a)}),this._peerConnection.addTransceiver(YA.AUDIO,{direction:YA.TRANSCEIVER_DIRECTION_SENDONLY}),this._peerConnection.addTransceiver(YA.VIDEO,{direction:YA.TRANSCEIVER_DIRECTION_SENDONLY}),this._peerConnection.addTransceiver(YA.VIDEO,{direction:YA.TRANSCEIVER_DIRECTION_SENDONLY}),this._peerConnection.addTransceiver(YA.VIDEO,{direction:YA.TRANSCEIVER_DIRECTION_SENDONLY}),o=yield this._peerConnection.createOffer(),this.clientAbility=yield ssA(o.sdp,((e=this._room.scheduleResult.config)==null?void 0:e.remove264FromSDP)||!1,this._enableDataChannel),this.originOffer=o,this.dtlsTransport&&(this.dtlsTransport.onstatechange=()=>{let{dtlsTransport:a}=this;a&&(this._log.debug("dtls state: ".concat(a.state)),a.state==="connecting"&&this.stat.dtlsStartTime===0?this.stat.dtlsStartTime=Date.now():a.state==="connected"&&this.stat.dtlsEndTime===0&&(this.stat.dtlsEndTime=Date.now()))}),si.addSuccessEvent({key:521707}),this.clientAbility}catch(a){throw si.addFailedEvent({key:521707,error:a}),this._log.error("initialize failed ".concat(a,` +offer: `).concat(o?.sdp)),a}})}setIceServers(A){return WA(this,null,function*(){var e;if(this._peerConnection&&A.length!==0)try{if(this._log.info("setIceServers",JSON.stringify(A,(o,a)=>o==="username"||o==="credential"?"hided":a)),this._peerConnection.setConfiguration(this.getPeerConnectionConfig(A)),(e=this._peerConnection)!=null&&e.localDescription||!this.originOffer)return void this._log.warn("setIceServers already has localDescription or no origin Offer");yield this.setOffer(this.originOffer)}catch(o){this._log.warn("setIceServers error ",o)}})}setPriority(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"high";if(this._peerConnection)try{this._peerConnection.getSenders().forEach(e=>{let o=e.getParameters();o.encodings[0]&&(o.encodings[0].priority=A,o.encodings[0].networkPriority=A,e.setParameters(o).catch(a=>{this._log.warn("setPriority error ",a)}))})}catch(e){this._log.warn("setPriority error ",e)}}connect(A){let e=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return WA(this,null,function*(){var o,a,l;try{if(this.currentState==="CONNECTED")return;((o=this._peerConnection)==null||!o.localDescription)&&this.originOffer&&(yield this.setOffer(this.originOffer));let d=ko(),h=this.getProfileLevelIdConfig(),y={type:"answer",sdp:nsA({serverAbility:A,clientAbility:this.clientAbility,offerSDP:this._peerConnection.localDescription.sdp,enableCustomMessage:this._enableDataChannel,profileLevelIdConfig:h})};this._serverAbility=A,yield this.setAnswer(y),yield this.waitForPeerConnectionConnected(),this._room.firewallDetector.resetTimeoutCount();let S=((a=this._room.scheduleResult.config)==null?void 0:a.priority)||((l=this._room.joinParams)==null?void 0:l.priority)||new URLSearchParams(location.search).get("priority");S&&this.setPriority(S),e||si.addSuccessEvent({key:521703,cost:ko()-d})}catch(d){let h=d instanceof gi&&d.code===Ct.API_CALL_ABORTED;throw h||this._log.error("connect failed: ".concat(d),A),this.reset(),!h&&!this.isReconnecting&&!this.isDestroyed&&(si.addFailedEvent({key:521703,error:d}),this.emitConnectionStateChangedEvent("DISCONNECTED"),this.startReconnection()),d}})}reconnect(){return WA(this,null,function*(){if(this._reconnectionTimer===-1){if(!this._signalChannel.isConnected)return this._log.warn("reconnect() wait signal channel is connected"),void this._signalChannel.once(yL,this.reconnect,this);try{this.reconnectionCount+=1,this._log.warn("reconnect() trying [".concat(this.reconnectionCount,"]")),this.reset();let A=this._signalChannel.getBackupRelayIpPair(),e=yield this.initialize(this._room.getIceServers(A!=null&&A.iceServer?[A.iceServer]:[])),o=fi({ability:e},A),a=yield this._signalChannel.sendWaitForResponse({command:ToA,responseCommand:ls.REBUILD_PEER_CONNECTION_RES,data:o,enableLog:!1});if(a.data.code!==0)throw new gi({code:a.data.code,message:a.data.message});yield this.connect(a.data.data.ability,!0),si.addSuccessEvent({key:521704}),this._log.warn("reconnect() success"),this.stopReconnection(),F.emit(nA.SPC_RECONNECTED,{room:this._room}),this.emit("spc-reconnected")}catch(A){if(!this.isReconnecting||this.isDestroyed)return;if(A!=null&&A.message.includes("timeout")){let e=Tp(this.reconnectionCount);this._log.warn("reconnect() timeout, try again after ".concat(e/1e3,"s")),yield OC(e,o=>{this._reconnectionTimer=o}),this.clearReconnectionTimer(),yield this.reconnect()}else this._log.error("reconnect() failed ".concat(A?.code," ").concat(A)),si.addFailedEvent({key:521704,error:A}),this.reconnectionCount>=Jf()&&this._log.warn("SDK has tried reconnect for ".concat(Jf()," times, but all failed, please check your network")),this.stopReconnection(),this.emitConnectionStateChangedEvent("DISCONNECTED"),this.emit("error")}}else this._log.warn("reconnect() is reconnecting, ignore current reconnection")})}getPeerConnection(){return this._peerConnection}startReconnection(){return WA(this,null,function*(){this.isReconnecting||(this._log.warn("start reconnect"),this._updateSDPPromise=null,this.emitConnectionStateChangedEvent("RECONNECTING"),yield this.reconnect())})}stopReconnection(){var A;this.isReconnecting&&(this._log.info("stop reconnect"),this.reconnectionCount=0,this.clearReconnectionTimer(),(A=this.clearConnectTimeout)==null||A.call(this),this._signalChannel.off(yL,this.reconnect,this),this.currentState==="RECONNECTING"&&this.emitConnectionStateChangedEvent("DISCONNECTED"))}checkPeerConnectionToReconnect(){var A;!this.isReconnecting&&((A=this._peerConnection)==null?void 0:A.connectionState)===ho.CLOSED&&this.startReconnection()}clearReconnectionTimer(){this._reconnectionTimer!==-1&&(clearTimeout(this._reconnectionTimer),this._reconnectionTimer=-1)}onConnectionStateChange(A){var e;let o=((e=this._peerConnection)==null?void 0:e.iceConnectionState)||"closed",a=this.getDTLSTransportState();this._log.info("connectionState: ".concat(A.target.connectionState," ICE: ").concat(o," DTLS: ").concat(a)),A.target.connectionState===ho.CONNECTING&&(this.stat.peerConnectionStartTime===0&&(this.stat.peerConnectionStartTime=Date.now()),this.emitConnectionStateChangedEvent("CONNECTING")),(A.target.connectionState===ho.FAILED||A.target.connectionState===ho.CLOSED)&&(this.emitConnectionStateChangedEvent("DISCONNECTED"),this._room.forceRelay?this.switchRelay(!1):this.startReconnection()),(A.target.connectionState===ho.CONNECTED||A.target.connectionState===ho.COMPLETED)&&(this.stat.peerConnectionEndTime===0&&(this.stat.peerConnectionEndTime=Date.now()),F.emit(nA.SINGLE_CONNECTION_STAT,{room:this._room,stat:{ice:this.stat.iceEndTime-this.stat.iceStartTime,dtls:this.stat.dtlsEndTime-this.stat.dtlsStartTime,peerConnection:this.stat.peerConnectionEndTime-this.stat.peerConnectionStartTime}}),this.logSelectedCandidate(),this.emitConnectionStateChangedEvent("CONNECTED"))}getDTLSTransportState(){if(!this._peerConnection)return zh;let A=null;return UI()&&this._peerConnection.getSenders().length!==0?(A=this._peerConnection.getSenders()[0].transport,By()&&this._peerConnection.getReceivers().length!==0&&A?A.state:zh):zh}emitConnectionStateChangedEvent(A){A!==this.currentState&&(this.currentState==="RECONNECTING"&&A==="CONNECTING"||(this.emit(y_.CONNECTION_STATE_CHANGED,{prevState:this.currentState,state:A}),this.currentState=A))}logSelectedCandidate(){return WA(this,null,function*(){if(!this._peerConnection)return;let A=yield this._peerConnection.getStats();for(let[e,o]of A)if(GM(o)){let a=A.get(o.localCandidateId),l=A.get(o.remoteCandidateId);a&&(this._log.info("local candidate: ".concat(a.candidateType," ").concat(a.protocol,":").concat(a.ip||a.address,":").concat(a.port," ").concat(a.networkType||""," ").concat(a.relayProtocol?"relayProtocol:".concat(a.relayProtocol," url: ").concat(a.url):"")),a.networkType&&S0(a.networkType)),l&&this._log.info("remote candidate: ".concat(l.candidateType," ").concat(l.protocol,":").concat(l.ip||l.address,":").concat(l.port));break}})}waitForPeerConnectionConnected(){return this._waitForPCConnectedPromise||(this._waitForPCConnectedPromise=new Promise((A,e)=>{if(this.currentState==="CONNECTED")return A();let o=h=>{h.state==="CONNECTED"&&(clearTimeout(d),l(),A())},a=h=>{let{room:y}=h;y===this._room&&(clearTimeout(d),l(),e(new gi({code:Ct.API_CALL_ABORTED,message:Xo({key:vo.CONNECTION_ABORTED,data:"leave room"})})))},l=()=>{F.off(nA.LEAVE_SUCCESS,a,this),this.off(y_.CONNECTION_STATE_CHANGED,o,this)},d=setTimeout(()=>{l();let h=new gi({code:Ct.API_CALL_TIMEOUT,message:"connection timeout"});this._room.firewallDetector.increaseTimeoutCount(),e(h)},Fb);this.clearConnectTimeout=()=>{l(),clearTimeout(d),delete this.clearConnectTimeout},this.clearWaitForConnectedPromise=()=>{this._waitForPCConnectedPromise=null,e(new gi({code:Ct.API_CALL_TIMEOUT,message:"connection timeout"}))},F.on(nA.LEAVE_SUCCESS,a,this),this.on(y_.CONNECTION_STATE_CHANGED,o,this)}),this._waitForPCConnectedPromise=this._waitForPCConnectedPromise.finally(()=>{this._waitForPCConnectedPromise=null,delete this.clearConnectTimeout})),this._waitForPCConnectedPromise}waitForReconnected(){return this.isReconnecting?new Promise((A,e)=>{this.once("spc-reconnected",A),this.once("error",e)}):Promise.resolve()}addDownlink(A){return WA(this,null,function*(){if(this._log.info("addDownlink(".concat(A.userId,") trying")),this.isReconnecting&&(yield this.waitForReconnected()),this._updateSDPPromise&&(yield this._updateSDPPromise),this.updateLocalAndRemoteSDPConfig(A),this.addDownlinkQueue.size===0)try{yield this.updateSDP(),this._log.info("addDownlink(".concat(A.userId,") done"))}catch(e){this._log.error("addDownlink(".concat(A.userId,") failed ").concat(e)),yield this.startReconnection()}})}updateLocalAndRemoteSDPConfig(A){let{ssrc:e,userId:o,tinyId:a,prevMids:l}=A;if(!this._peerConnection)return;this._log.info("updateLocalAndRemoteSDPConfig ".concat(o," ").concat(JSON.stringify(e))),this._parsedAnswer||(this._parsedAnswer=uc(this._peerConnection.remoteDescription.sdp));let d,h,y,S=this._parsedAnswer.media.filter(J=>{var cA;return(cA=J.ssrcs)==null?void 0:cA.find(CA=>{var MA;return(MA=CA.value)==null?void 0:MA.includes(a)})});if(S.length===3)d=S[0],h=S[1],y=S[2];else{let J,cA=this._peerConnection.getTransceivers().slice(4);if(l?.length===3&&l.every(MA=>{var ie;return((ie=cA.find(pe=>Number(pe.mid)===MA))==null?void 0:ie.direction)==="inactive"})?(J=l,this._log.info("reusing previous mids for ".concat(o,": ").concat(J.join(","))),cA.forEach(MA=>{J.includes(Number(MA.mid))&&(MA.direction=YA.TRANSCEIVER_DIRECTION_RECVONLY)})):J=cA.filter(MA=>MA.direction==="inactive").slice(0,3).map(MA=>(MA.direction=YA.TRANSCEIVER_DIRECTION_RECVONLY,Number(MA.mid))),J.length===3)d=this._parsedAnswer.media.find(MA=>Number(MA.mid)===Number(J[0])),h=this._parsedAnswer.media.find(MA=>Number(MA.mid)===Number(J[1])),y=this._parsedAnswer.media.find(MA=>Number(MA.mid)===Number(J[2]));else if(J.length===0){this._peerConnection.addTransceiver(YA.AUDIO,{direction:YA.TRANSCEIVER_DIRECTION_RECVONLY}),this._peerConnection.addTransceiver(YA.VIDEO,{direction:YA.TRANSCEIVER_DIRECTION_RECVONLY}),this._peerConnection.addTransceiver(YA.VIDEO,{direction:YA.TRANSCEIVER_DIRECTION_RECVONLY}),d=JSON.parse(JSON.stringify(this._parsedAnswer.media[0]));let MA=d8({mid:1,serverAbility:this._serverAbility,clientAbility:this.clientAbility,parsedOffer:uc(this._peerConnection.localDescription.sdp),isDownlink:!0});h=JSON.parse(JSON.stringify(MA)),y=JSON.parse(JSON.stringify(MA)),d.mid=this._parsedAnswer.media.length,this._parsedAnswer.media.push(d),h.mid=this._parsedAnswer.media.length,this._parsedAnswer.media.push(h),y.mid=this._parsedAnswer.media.length,this._parsedAnswer.media.push(y)}}d.direction=YA.TRANSCEIVER_DIRECTION_SENDONLY;let k="".concat(a,"-").concat(e.audio);d.ssrcs=[{id:e.audio,attribute:"cname",value:"".concat(k)},{id:e.audio,attribute:"msid",value:"".concat(k,"-").concat(YA.MAIN," ").concat(k,"-audio")}],h.direction=YA.TRANSCEIVER_DIRECTION_SENDONLY,h.ssrcs=[{id:e.video,attribute:"cname",value:"".concat(k)},{id:e.video,attribute:"msid",value:"".concat(k,"-").concat(YA.MAIN," ").concat(k,"-bigvideo")},{id:e.videoRtx,attribute:"cname",value:"".concat(k)},{id:e.videoRtx,attribute:"msid",value:"".concat(k,"-").concat(YA.MAIN," ").concat(k,"-bigvideo")}],h.ssrcGroups=[{semantics:"FID",ssrcs:"".concat(e.video," ").concat(e.videoRtx)}],y.direction=YA.TRANSCEIVER_DIRECTION_SENDONLY;let V="".concat(k,"-aux");y.ssrcs=[{id:e.auxiliary,attribute:"cname",value:V},{id:e.auxiliary,attribute:"msid",value:"".concat(V," ").concat(k,"-aux").concat(YA.VIDEO)},{id:e.auxiliaryRtx,attribute:"cname",value:"".concat(V," ").concat(k,"-aux").concat(YA.VIDEO)},{id:e.auxiliaryRtx,attribute:"msid",value:"".concat(V," ").concat(k,"-aux").concat(YA.VIDEO)}],y.ssrcGroups=[{semantics:"FID",ssrcs:"".concat(e.auxiliary," ").concat(e.auxiliaryRtx)}],this._parsedAnswer.groups&&(this._parsedAnswer.groups[0].mids=this._parsedAnswer.media.map(J=>J.mid).join(" ")),this._downlinkMIDMap.set(o,[d.mid,h.mid,y.mid]),this._downlinkMIDUserIDMap.set(d.mid,o),this._downlinkMIDUserIDMap.set(h.mid,o),this._downlinkMIDUserIDMap.set(y.mid,o)}removeDownlink(A){return WA(this,null,function*(){if(!this._downlinkMIDMap.has(A)||!this._peerConnection)return;this._log.info("removeDownlink(".concat(A,") trying")),this.isReconnecting&&(yield this.waitForReconnected()),this._updateSDPPromise&&(yield this._updateSDPPromise);let e=this._downlinkMIDMap.get(A),o=!1;return this._peerConnection.getTransceivers().forEach(a=>{e!=null&&e.includes(Number(a.mid))&&(o=!0,a.direction="inactive")}),this._parsedAnswer||(this._parsedAnswer=uc(this._peerConnection.remoteDescription.sdp)),this._parsedAnswer.media.forEach(a=>{e!=null&&e.includes(Number(a.mid))&&(o=!0,a.direction="inactive",a.ssrcs=[],a.ssrcGroups=[])}),this.removeDownlinkQueue.size===0&&o&&(yield this.updateSDP()),this._downlinkMIDMap.delete(A),e?.forEach(a=>this._downlinkMIDUserIDMap.delete(a)),this._log.info("removeDownlink(".concat(A,") done")),e})}setBandwidth(A){return WA(this,null,function*(){if(!this._peerConnection)return;let{audio:e,bigVideo:o,smallVideo:a,auxVideo:l}=A;try{if(Hk()){let d=this._peerConnection.getSenders().slice(0,4);for(let y=0;y5e3?5e3:e),!0)}setSenderMaxBitrate(A,e){let o=A.getParameters();if((!o.encodings||o.encodings.length===0)&&(o.encodings=[{}]),e==="unlimited")delete o.encodings[0].maxBitrate;else{if(o.encodings[0].maxBitrate===1e3*e)return;o.encodings[0].maxBitrate=1e3*e}return A.setParameters(o)}setBandwidthBySDP(A){let{audio:e,bigVideo:o,smallVideo:a,auxVideo:l}=A;if(!this._peerConnection||!this._peerConnection.localDescription)return;let d=uc(this._peerConnection.localDescription.sdp);this._parsedAnswer||(this._parsedAnswer=uc(this._peerConnection.remoteDescription.sdp));let h=or?"TIAS":"AS";e&&(d.media[0].bandwidth=[{type:h,limit:or?1e3*e:e}],this._parsedAnswer.media[0].bandwidth=[{type:h,limit:or?1e3*e:e}]),o&&(d.media[1].bandwidth=[{type:h,limit:or?1e3*o:o}],this._parsedAnswer.media[1].bandwidth=[{type:h,limit:or?1e3*o:o}]),a&&(d.media[2].bandwidth=[{type:h,limit:or?1e3*a:a}],this._parsedAnswer.media[2].bandwidth=[{type:h,limit:or?1e3*a:a}]),l&&(d.media[3].bandwidth=[{type:h,limit:or?1e3*l:l}],this._parsedAnswer.media[3].bandwidth=[{type:h,limit:or?1e3*l:l}]);let y={type:"offer",sdp:_y(d)};return this.updateSDP({localDescription:y})}setScaleResolutionDownBy(A,e,o){let a=A.getParameters();(!a.encodings||a.encodings.length===0)&&(a.encodings=[{}]);let l=a.encodings[0].scaleResolutionDownBy;if(Ke(l)?e===1:e===l)return;let d="setScaleResolutionDownBy ".concat(o," ").concat(e);return l&&(d+=" prevScale: ".concat(l)),this._log.warn(d),a.encodings[0].scaleResolutionDownBy=e,A.setParameters(a)}setDegradationPreference(A,e,o){if(uE&&td<83||eg&&yk(LI,"12.1")||or&&O0<138)return;let a=A.getParameters(),l="balanced";if(e==="motion"?l="maintain-framerate":e==="detail"&&(l="maintain-resolution"),a.degradationPreference===l)return;let d="setDegradationPreference ".concat(o," ").concat(l);return this._log.info(d),a.degradationPreference=l,A.setParameters(a).catch(h=>this._log.warn("".concat(d," failed: ").concat(h)))}updateSDP(){let{localDescription:A}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!this._parsedAnswer)return Promise.resolve();let e=_y(this._parsedAnswer);return this._updateSDPPromise=new Promise((o,a)=>WA(this,null,function*(){var l,d;try{!A&&this._peerConnection&&(this._log.info("creating offer"),A=yield this._peerConnection.createOffer()),A&&(yield this.setOffer(A)),yield this.setAnswer({type:"answer",sdp:e}),this._updateSDPPromise=null,o()}catch(h){this._log.error(h),!this._isSDPLogged&&this._peerConnection&&(this._log.warn("current offer: ".concat(this.filterSDPDirection((l=this._peerConnection.localDescription)==null?void 0:l.sdp),` next offer: `).concat(this.filterSDPDirection(A?.sdp))),this._log.warn("current answer: ".concat(this.filterSDPDirection((d=this._peerConnection.remoteDescription)==null?void 0:d.sdp),` -next answer: `).concat(this.filterSDPDirection(e))),this._log.warn("offer: ".concat(A?.sdp)),this._log.warn("answer: ".concat(e)),this._log.warn("transceivers: ".concat(JSON.stringify(this._peerConnection.getTransceivers().map(y=>{let{mid:S,currentDirection:k,direction:V,stopped:J}=y;return{mid:S,currentDirection:k,direction:V,stopped:J}})))),this._log.warn("parsedAnswer: ".concat(JSON.stringify(this._parsedAnswer))),this._isSDPLogged=!0),this._updateSDPPromise=null,a(C)}})),this._updateSDPPromise}setTransceiverDirection(A,e){return KA(this,null,function*(){if(!er||!this._peerConnection||!this._parsedAnswer)return;this._log.info("setting transceiver ".concat(e.join(",")," direction to ").concat(A));let o=this._peerConnection.getTransceivers();e.forEach(a=>{o[a].direction!==A&&(o[a].direction=A)});for(let a of e){let c=this._parsedAnswer.media[a].direction;A===zn.INACTIVE&&c===zn.RECVONLY&&(this._parsedAnswer.media[a].direction=A),A===zn.SENDONLY&&c===zn.INACTIVE&&(this._parsedAnswer.media[a].direction=zn.RECVONLY)}yield this.updateSDP()})}filterSDPDirection(){return uc(arguments.length>0&&arguments[0]!==void 0?arguments[0]:"").media.map(A=>A.direction)}setOffer(A){this._log.info("setting offer");let e=NoA(A.sdp,this.clientAbility,this._serverAbility);return this._log.debug(e),this._peerConnection.setLocalDescription({type:"offer",sdp:e})}setAnswer(A){return this._log.info("setting answer"),this._log.debug(A.sdp),this._peerConnection.setRemoteDescription(A)}switchVideoEncoder(A){return KA(this,null,function*(){if(this._parsedAnswer||(this._parsedAnswer=uc(this._peerConnection.remoteDescription.sdp)),!this._peerConnection||!this._parsedAnswer||!this._serverAbility)return;let e=!1;this._parsedAnswer.media.forEach(o=>{var a;if(o.type===YA.VIDEO){let c=this._serverAbility.video.codecs.find(d=>d.codec.toLowerCase()===A);c&&((a=o.payloads)==null||!a.includes(String(c.payload)))&&(o.fmtp=[],o.payloads="",o.rtp=[],o.rtcpFb=[],Q_(o,c),e=!0)}}),e&&(this._log.warn("switch video encoder to ".concat(A)),yield this.updateSDP())})}getScheduleProfileLevelId(A){var e;try{let o=(e=this._room.scheduleResult.config)==null?void 0:e.profileLevelId,a="";if(A===2?a=Zb(o?.big)?o.big:"":A===3?a=Zb(o?.small)?o.small:"":A===7&&(a=Zb(o?.aux)?o.aux:""),!a)return"";let c=Kz(a,this.clientAbility);return c?this._log.info("use schedule profile level id: streamType=".concat(A,", raw=").concat(a,", resolved=").concat(c)):this._log.warn("schedule profile level id not resolved: streamType=".concat(A,", raw=").concat(a)),c}catch(o){return this._log.warn("getScheduleProfileLevelId error: ".concat(o)),""}}getProfileLevelIdConfig(){try{let A=new URLSearchParams(location.search).get("profileLevelId")||"",e=Kz(A,this.clientAbility);if(e)return this._log.info("use url profile level id: raw=".concat(A,", resolved=").concat(e)),{big:e,small:e,aux:e};let o=this.getScheduleProfileLevelId(2),a=this.getScheduleProfileLevelId(3),c=this.getScheduleProfileLevelId(7);if(!o&&!a&&!c)return;let d={};return o&&(d.big=o),a&&(d.small=a),c&&(d.aux=c),d}catch(A){return void this._log.warn("getProfileLevelIdConfig error: ".concat(A))}}setH264ProfileLevelId(A,e){return KA(this,null,function*(){if(!this._peerConnection||!this._serverAbility)return;this._updateSDPPromise&&(yield this._updateSDPPromise),this._log.info("set H264 profile-level-id to ".concat(e?"high":"default"," for ").concat(A)),this._parsedAnswer||(this._parsedAnswer=uc(this._peerConnection.remoteDescription.sdp));let o=A==="main"?1:3,a=this._parsedAnswer.media[o];if(!a||a.type!==YA.VIDEO)return;let c=a.rtp||[],d=a.fmtp||[],C=c.find(gA=>{var CA;return((CA=gA.codec)==null?void 0:CA.toLowerCase())==="h264"});if(!C)return;let y=d.find(gA=>String(gA.payload)===String(C.payload));if(!y)return;let S=fj(y.config);if(!S)return;let k=yj(S)==="high";if(e&&k||!e&&!k)return;let V=this._serverAbility.video.codecs.map(gA=>fj(gA.fmtp)).filter(Boolean).find(gA=>{let CA=yj(gA);return e?CA==="high":CA!=="high"});if(!V)return;let J=y.config;y.config=Hz(y.config,V),y.config!==J&&(yield this.updateSDP(),this._log.info("set H264 profile-level-id to ".concat(e?"high":"default"," success")))})}useHWEncoder(){let A=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0],e=arguments.length>1?arguments[1]:void 0;return KA(this,null,function*(){if(!this._peerConnection||!this._parsedAnswer||!this._serverAbility)return;let o=!1,a=[];Je(e)?a=this._parsedAnswer.media.slice(1,4):e===2?a.push(this._parsedAnswer.media[1]):e===3?a.push(this._parsedAnswer.media[2]):e===7&&a.push(this._parsedAnswer.media[3]),a.forEach(c=>{var d;if(c.type===YA.VIDEO){let C;A&&this.is42001fSupported?C=this.clientAbility.video.codecs.find(y=>y.fmtp.includes("42001f")):A||(C=this._serverAbility.video.codecs.find(y=>y.codec.toLowerCase()===(this._serverAbility.useVp8?"vp8":"h264"))),C&&((d=c.payloads)==null||!d.includes(String(C.payload)))&&(c.fmtp=[],c.payloads="",c.rtp=[],c.rtcpFb=[],Q_(c,C),o=!0)}}),o&&(this._log.warn("use ".concat(A?"hw":"sw"," encoder")),yield this.updateSDP())})}sendDataChannelMessage(A){var e;(e=this._datachannel)==null||e.send(A)}reset(){var A;this._peerConnection&&(this._peerConnection.close(),this._peerConnection.removeEventListener("track",this._peerConnection._onaddstreampoly,this),this._peerConnection._onaddstreampoly=null,this._peerConnection=null),this._datachannel=null,(A=this.clearWaitForConnectedPromise)==null||A.call(this),this._parsedAnswer=null,this.originOffer=null}close(){this._log.info("close pc"),this.isDestroyed=!0,this.removeRTCListener(),this.insertableStreamsAbortMap.forEach(A=>Np(A.abort)&&A.abort("destroy")),this.insertableStreamsAbortMap.clear(),this.reset(),this.emitConnectionStateChangedEvent("DISCONNECTED"),this._downlinkMIDMap.clear(),this.stopReconnection(),this.removeAllListeners(),this._room.healthDetector.off("1",this.onBadHealth,this)}getReceiversByUserId(A){if(!this._peerConnection)return[];let e=this._peerConnection.getReceivers();return(this._downlinkMIDMap.get(A)||[]).map(o=>e[o])}get isUsingRelay(){return this._room.getIceTransportPolicy()==="relay"}detectTCPAndUDP(A){let{uplinkRTT:e,downlinkRTT:o}=A;var a;if(this.currentState!=="CONNECTED"||this._isRelayTried&&!this._room.forceRelay||this._room.getIceServers().length===0)return;let c=this._signalChannel.rtt,d=Math.max(e,o),{rttRatioThreshold:C,rttThreshold:y}=((a=this._room.scheduleResult.config)==null?void 0:a.useTurnTcpInfo)||{};if(!(C&&y&&c&&d))return;let S=Math.floor(d/c),k=(this._isRelayTried||S>C)&&d>y;k?++this._rttOverCount<5||(this._log.warn("detectTCPAndUDP ws-rtt: ".concat(c," upRTT: ").concat(e," downRTT: ").concat(o," ratio: ").concat(S," over-count: ").concat(this._rttOverCount," isOver: ").concat(k," isRelayTried: ").concat(this._isRelayTried," force-relay: ").concat(this._room.forceRelay)),this.isUsingRelay||this._isRelayTried?this._room.forceRelay&&this.switchRelay(!1):(this._isRelayTried=!0,this._rttOverCount=0,this.switchRelay(!0))):this._rttOverCount=0}switchRelay(A){let e=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return KA(this,null,function*(){if(this.isUsingRelay===A)return;let o=A?"relay":"udp",a=A?521709:521710;try{this._room.forceRelay=A,this._log.warn("switchRelay ".concat(o));let c=Date.now();yield this.doSwitchRelay(o),this._log.warn("switchRelay ".concat(o," success")),ii.addSuccessEvent({key:a,cost:Date.now()-c})}catch(c){this._log.warn("switchRelay ".concat(o," failed"),c),ii.addFailedEvent({key:a,error:c}),e?this._room.reJoin():yield this.switchRelay(!A,!0)}})}doSwitchRelay(A){return new Promise((e,o)=>{let a=setTimeout(()=>{this.stopReconnection(),o(new Error("switch ".concat(A," timeout")))},1e4);this.startReconnection().then(e,o).finally(()=>clearTimeout(a))})}removeRTCListener(){this._peerConnection&&(this._peerConnection.oniceconnectionstatechange=null,this._peerConnection.onconnectionstatechange=null,this._peerConnection.onsignalingstatechange=null,this._peerConnection.ontrack=null),this.dtlsTransport&&(this.dtlsTransport.onstatechange=null)}requestRemoteFallbackToH264(){this._log.warn("H265 decode failed, remote need to fallback h264"),this._h265DecodeFailed=!0,this._signalChannel.sendWaitForResponse({command:Qj,data:{videoDecCodec:"h264"},responseCommand:ls.UPDATE_CONSTRAINT_CONFIG_RES}).then(A=>{A.data.code!==0&&this._log.warn(A.data.message)})}};Ci([g5("reconnect")],Ry.prototype,"startReconnection"),Ci([py(A=>A.userId)],Ry.prototype,"addDownlink"),Ci([py(A=>A)],Ry.prototype,"removeDownlink"),Ci([$k(!0)],Ry.prototype,"updateSDP"),Ci([fy(521712,!1),o1(10,0)],Ry.prototype,"setOffer"),Ci([fy(521713,!1),o1(10,0)],Ry.prototype,"setAnswer"),Ci([jr((A,e)=>function(){for(var o=arguments.length,a=new Array(o),c=0;cclearTimeout(d)),this._checkPendingPromiseSet.clear()),A.apply(this,a)})],Ry.prototype,"close");var LoA=class{constructor(A){Y(this,"tag"),Y(this,"len"),Y(this,"data");let e=new DataView(A);this.tag=e.getUint16(),this.len=e.getUint16(2),this.data=new Uint8Array(A).slice(4,4+this.len).buffer}},UoA=class{constructor(A){Y(this,"tinyId"),Y(this,"data");let e=new DataView(A),o=0,a=[];for(;o{S.tag===1?this.tinyId=new TextDecoder().decode(S.data):S.tag===2&&c.push(S.data)});let d=c.reduce((S,k)=>S+k.byteLength,0),C=new Uint8Array(d),y=0;c.forEach(S=>{C.set(new Uint8Array(S),y),y+=S.byteLength}),this.data=C.buffer}},Wz=new Set;function tB(){let A=Math.floor(4294967296*Math.random());return Wz.has(A)?tB():(Wz.add(A),A)}var FoA=gc(Kl()),zz=class extends FoA.default{constructor(A){super(),Y(this,"userId"),Y(this,"tinyId"),Y(this,"_sdpSemantics"),Y(this,"_isUplink"),Y(this,"_room"),Y(this,"_log"),Y(this,"_currentState","DISCONNECTED"),Y(this,"_prevTime",-1),Y(this,"_blackSmallVideoDetectionId"),Y(this,"isDestroyed",!1),this.userId=A.userId,this.tinyId=A.tinyId,this._room=A.room,this._sdpSemantics=A.room.sdpSemantics,this._isUplink=A.isUplink,this._log=QA.createLogger({parent:this._room.getLogger(),id:"n",userId:this._room.userId,remoteUserId:this._isUplink?void 0:this.userId,sdkAppId:this._room.sdkAppId,isLocal:this._isUplink})}get _peerConnection(){var A;return((A=this.singlePC)==null?void 0:A.getPeerConnection())||null}get singlePC(){return this._room.singlePC}get _signalChannel(){return this._room.signalChannel}close(A){this._log.info("close connection"),this.emit("closed",A)}destroy(){this.isDestroyed=!0}emitConnectionStateChangedEvent(A){return A!==this._currentState&&(F.emit(nA.PEER_CONNECTION_STATE_CHANGED,{room:this._room,prevState:this._currentState,state:A,remoteUserId:this._isUplink?void 0:this.userId}),this.emit("connection-state-changed",{prevState:this._currentState,state:A}),this._currentState=A,!0)}getPeerConnection(){return this._peerConnection}getRoom(){return this._room}getUserId(){return this.userId}getTinyId(){return this.tinyId}getCurrentState(){return this._currentState}get isH264(){var A,e;return!((e=(A=this._peerConnection)==null?void 0:A.remoteDescription)==null||!e.sdp.includes("H264"))}};function Zz(A){let{when:e,onSkip:o}=A;return jr((a,c)=>function(){for(var d=arguments.length,C=new Array(d),y=0;y{let{mid:S,currentDirection:k,direction:V,stopped:J}=y;return{mid:S,currentDirection:k,direction:V,stopped:J}})))),this._log.warn("parsedAnswer: ".concat(JSON.stringify(this._parsedAnswer))),this._isSDPLogged=!0),this._updateSDPPromise=null,a(h)}})),this._updateSDPPromise}setTransceiverDirection(A,e){return WA(this,null,function*(){if(!or||!this._peerConnection||!this._parsedAnswer)return;this._log.info("setting transceiver ".concat(e.join(",")," direction to ").concat(A));let o=this._peerConnection.getTransceivers();e.forEach(a=>{o[a].direction!==A&&(o[a].direction=A)});for(let a of e){let l=this._parsedAnswer.media[a].direction;A===Xn.INACTIVE&&l===Xn.RECVONLY&&(this._parsedAnswer.media[a].direction=A),A===Xn.SENDONLY&&l===Xn.INACTIVE&&(this._parsedAnswer.media[a].direction=Xn.RECVONLY)}yield this.updateSDP()})}filterSDPDirection(){return uc(arguments.length>0&&arguments[0]!==void 0?arguments[0]:"").media.map(A=>A.direction)}setOffer(A){this._log.info("setting offer");let e=rsA(A.sdp,this.clientAbility,this._serverAbility);return this._log.debug(e),this._peerConnection.setLocalDescription({type:"offer",sdp:e})}setAnswer(A){return this._log.info("setting answer"),this._log.debug(A.sdp),this._peerConnection.setRemoteDescription(A)}switchVideoEncoder(A){return WA(this,null,function*(){if(this._parsedAnswer||(this._parsedAnswer=uc(this._peerConnection.remoteDescription.sdp)),!this._peerConnection||!this._parsedAnswer||!this._serverAbility)return;let e=!1;this._parsedAnswer.media.forEach(o=>{var a;if(o.type===YA.VIDEO){let l=this._serverAbility.video.codecs.find(d=>d.codec.toLowerCase()===A);l&&((a=o.payloads)==null||!a.includes(String(l.payload)))&&(o.fmtp=[],o.payloads="",o.rtp=[],o.rtcpFb=[],f_(o,l),e=!0)}}),e&&(this._log.warn("switch video encoder to ".concat(A)),yield this.updateSDP())})}getScheduleProfileLevelId(A){var e;try{let o=(e=this._room.scheduleResult.config)==null?void 0:e.profileLevelId,a="";if(A===2?a=ik(o?.big)?o.big:"":A===3?a=ik(o?.small)?o.small:"":A===7&&(a=ik(o?.aux)?o.aux:""),!a)return"";let l=C8(a,this.clientAbility);return l?this._log.info("use schedule profile level id: streamType=".concat(A,", raw=").concat(a,", resolved=").concat(l)):this._log.warn("schedule profile level id not resolved: streamType=".concat(A,", raw=").concat(a)),l}catch(o){return this._log.warn("getScheduleProfileLevelId error: ".concat(o)),""}}getProfileLevelIdConfig(){try{let A=new URLSearchParams(location.search).get("profileLevelId")||"",e=C8(A,this.clientAbility);if(e)return this._log.info("use url profile level id: raw=".concat(A,", resolved=").concat(e)),{big:e,small:e,aux:e};let o=this.getScheduleProfileLevelId(2),a=this.getScheduleProfileLevelId(3),l=this.getScheduleProfileLevelId(7);if(!o&&!a&&!l)return;let d={};return o&&(d.big=o),a&&(d.small=a),l&&(d.aux=l),d}catch(A){return void this._log.warn("getProfileLevelIdConfig error: ".concat(A))}}setH264ProfileLevelId(A,e){return WA(this,null,function*(){if(!this._peerConnection||!this._serverAbility)return;this._updateSDPPromise&&(yield this._updateSDPPromise),this._log.info("set H264 profile-level-id to ".concat(e?"high":"default"," for ").concat(A)),this._parsedAnswer||(this._parsedAnswer=uc(this._peerConnection.remoteDescription.sdp));let o=A==="main"?1:3,a=this._parsedAnswer.media[o];if(!a||a.type!==YA.VIDEO)return;let l=a.rtp||[],d=a.fmtp||[],h=l.find(cA=>{var CA;return((CA=cA.codec)==null?void 0:CA.toLowerCase())==="h264"});if(!h)return;let y=d.find(cA=>String(cA.payload)===String(h.payload));if(!y)return;let S=Uj(y.config);if(!S)return;let k=Fj(S)==="high";if(e&&k||!e&&!k)return;let V=this._serverAbility.video.codecs.map(cA=>Uj(cA.fmtp)).filter(Boolean).find(cA=>{let CA=Fj(cA);return e?CA==="high":CA!=="high"});if(!V)return;let J=y.config;y.config=E8(y.config,V),y.config!==J&&(yield this.updateSDP(),this._log.info("set H264 profile-level-id to ".concat(e?"high":"default"," success")))})}useHWEncoder(){let A=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0],e=arguments.length>1?arguments[1]:void 0;return WA(this,null,function*(){if(!this._peerConnection||!this._parsedAnswer||!this._serverAbility)return;let o=!1,a=[];Ke(e)?a=this._parsedAnswer.media.slice(1,4):e===2?a.push(this._parsedAnswer.media[1]):e===3?a.push(this._parsedAnswer.media[2]):e===7&&a.push(this._parsedAnswer.media[3]),a.forEach(l=>{var d;if(l.type===YA.VIDEO){let h;A&&this.is42001fSupported?h=this.clientAbility.video.codecs.find(y=>y.fmtp.includes("42001f")):A||(h=this._serverAbility.video.codecs.find(y=>y.codec.toLowerCase()===(this._serverAbility.useVp8?"vp8":"h264"))),h&&((d=l.payloads)==null||!d.includes(String(h.payload)))&&(l.fmtp=[],l.payloads="",l.rtp=[],l.rtcpFb=[],f_(l,h),o=!0)}}),o&&(this._log.warn("use ".concat(A?"hw":"sw"," encoder")),yield this.updateSDP())})}sendDataChannelMessage(A){var e;(e=this._datachannel)==null||e.send(A)}reset(){var A;this._peerConnection&&(this._peerConnection.close(),this._peerConnection.removeEventListener("track",this._peerConnection._onaddstreampoly,this),this._peerConnection._onaddstreampoly=null,this._peerConnection=null),this._datachannel=null,(A=this.clearWaitForConnectedPromise)==null||A.call(this),this._parsedAnswer=null,this.originOffer=null}close(){this._log.info("close pc"),this.isDestroyed=!0,this.removeRTCListener(),this.insertableStreamsAbortMap.forEach(A=>kp(A.abort)&&A.abort("destroy")),this.insertableStreamsAbortMap.clear(),this.reset(),this.emitConnectionStateChangedEvent("DISCONNECTED"),this._downlinkMIDMap.clear(),this.stopReconnection(),this.removeAllListeners(),this._room.healthDetector.off("1",this.onBadHealth,this)}getReceiversByUserId(A){if(!this._peerConnection)return[];let e=this._peerConnection.getReceivers();return(this._downlinkMIDMap.get(A)||[]).map(o=>e[o])}get isUsingRelay(){return this._room.getIceTransportPolicy()==="relay"}detectTCPAndUDP(A){let{uplinkRTT:e,downlinkRTT:o}=A;var a;if(this.currentState!=="CONNECTED"||this._isRelayTried&&!this._room.forceRelay||this._room.getIceServers().length===0)return;let l=this._signalChannel.rtt,d=Math.max(e,o),{rttRatioThreshold:h,rttThreshold:y}=((a=this._room.scheduleResult.config)==null?void 0:a.useTurnTcpInfo)||{};if(!(h&&y&&l&&d))return;let S=Math.floor(d/l),k=(this._isRelayTried||S>h)&&d>y;k?++this._rttOverCount<5||(this._log.warn("detectTCPAndUDP ws-rtt: ".concat(l," upRTT: ").concat(e," downRTT: ").concat(o," ratio: ").concat(S," over-count: ").concat(this._rttOverCount," isOver: ").concat(k," isRelayTried: ").concat(this._isRelayTried," force-relay: ").concat(this._room.forceRelay)),this.isUsingRelay||this._isRelayTried?this._room.forceRelay&&this.switchRelay(!1):(this._isRelayTried=!0,this._rttOverCount=0,this.switchRelay(!0))):this._rttOverCount=0}switchRelay(A){let e=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return WA(this,null,function*(){if(this.isUsingRelay===A)return;let o=A?"relay":"udp",a=A?521709:521710;try{this._room.forceRelay=A,this._log.warn("switchRelay ".concat(o));let l=Date.now();yield this.doSwitchRelay(o),this._log.warn("switchRelay ".concat(o," success")),si.addSuccessEvent({key:a,cost:Date.now()-l})}catch(l){this._log.warn("switchRelay ".concat(o," failed"),l),si.addFailedEvent({key:a,error:l}),e?this._room.reJoin():yield this.switchRelay(!A,!0)}})}doSwitchRelay(A){return new Promise((e,o)=>{let a=setTimeout(()=>{this.stopReconnection(),o(new Error("switch ".concat(A," timeout")))},1e4);this.startReconnection().then(e,o).finally(()=>clearTimeout(a))})}removeRTCListener(){this._peerConnection&&(this._peerConnection.oniceconnectionstatechange=null,this._peerConnection.onconnectionstatechange=null,this._peerConnection.onsignalingstatechange=null,this._peerConnection.ontrack=null),this.dtlsTransport&&(this.dtlsTransport.onstatechange=null)}requestRemoteFallbackToH264(){this._log.warn("H265 decode failed, remote need to fallback h264"),this._h265DecodeFailed=!0,this._signalChannel.sendWaitForResponse({command:bj,data:{videoDecCodec:"h264"},responseCommand:ls.UPDATE_CONSTRAINT_CONFIG_RES}).then(A=>{A.data.code!==0&&this._log.warn(A.data.message)})}};hi([N5("reconnect")],Ty.prototype,"startReconnection"),hi([Dy(A=>A.userId)],Ty.prototype,"addDownlink"),hi([Dy(A=>A)],Ty.prototype,"removeDownlink"),hi([sL(!0)],Ty.prototype,"updateSDP"),hi([Sy(521712,!1),E1(10,0)],Ty.prototype,"setOffer"),hi([Sy(521713,!1),E1(10,0)],Ty.prototype,"setAnswer"),hi([jr((A,e)=>function(){for(var o=arguments.length,a=new Array(o),l=0;lclearTimeout(d)),this._checkPendingPromiseSet.clear()),A.apply(this,a)})],Ty.prototype,"close");var lsA=class{constructor(A){Y(this,"tag"),Y(this,"len"),Y(this,"data");let e=new DataView(A);this.tag=e.getUint16(),this.len=e.getUint16(2),this.data=new Uint8Array(A).slice(4,4+this.len).buffer}},IsA=class{constructor(A){Y(this,"tinyId"),Y(this,"data");let e=new DataView(A),o=0,a=[];for(;o{S.tag===1?this.tinyId=new TextDecoder().decode(S.data):S.tag===2&&l.push(S.data)});let d=l.reduce((S,k)=>S+k.byteLength,0),h=new Uint8Array(d),y=0;l.forEach(S=>{h.set(new Uint8Array(S),y),y+=S.byteLength}),this.data=h.buffer}},B8=new Set;function sB(){let A=Math.floor(4294967296*Math.random());return B8.has(A)?sB():(B8.add(A),A)}var usA=gc(jl()),Q8=class extends usA.default{constructor(A){super(),Y(this,"userId"),Y(this,"tinyId"),Y(this,"_sdpSemantics"),Y(this,"_isUplink"),Y(this,"_room"),Y(this,"_log"),Y(this,"_currentState","DISCONNECTED"),Y(this,"_prevTime",-1),Y(this,"_blackSmallVideoDetectionId"),Y(this,"isDestroyed",!1),this.userId=A.userId,this.tinyId=A.tinyId,this._room=A.room,this._sdpSemantics=A.room.sdpSemantics,this._isUplink=A.isUplink,this._log=pA.createLogger({parent:this._room.getLogger(),id:"n",userId:this._room.userId,remoteUserId:this._isUplink?void 0:this.userId,sdkAppId:this._room.sdkAppId,isLocal:this._isUplink})}get _peerConnection(){var A;return((A=this.singlePC)==null?void 0:A.getPeerConnection())||null}get singlePC(){return this._room.singlePC}get _signalChannel(){return this._room.signalChannel}close(A){this._log.info("close connection"),this.emit("closed",A)}destroy(){this.isDestroyed=!0}emitConnectionStateChangedEvent(A){return A!==this._currentState&&(F.emit(nA.PEER_CONNECTION_STATE_CHANGED,{room:this._room,prevState:this._currentState,state:A,remoteUserId:this._isUplink?void 0:this.userId}),this.emit("connection-state-changed",{prevState:this._currentState,state:A}),this._currentState=A,!0)}getPeerConnection(){return this._peerConnection}getRoom(){return this._room}getUserId(){return this.userId}getTinyId(){return this.tinyId}getCurrentState(){return this._currentState}get isH264(){var A,e;return!((e=(A=this._peerConnection)==null?void 0:A.remoteDescription)==null||!e.sdp.includes("H264"))}};function p8(A){let{when:e,onSkip:o}=A;return jr((a,l)=>function(){for(var d=arguments.length,h=new Array(d),y=0;ypostMessage({type:"log",message:"[worker] "+t.join(" ")});function startDetection(e,t,a){if(!tracks.has(e)){const c={reader:a.getReader(),blackCount:0,timeoutId:null,intervalId:null};tracks.set(e,c),c.timeoutId=setTimeout(()=>stopDetection(e,"timeout"),t),c.intervalId=setInterval(async()=>{try{await isFrameBlack(e)?(c.blackCount++,postMessage({type:"blackCount",trackId:e,count:c.blackCount}),3<=c.blackCount&&(postMessage({type:"black",trackId:e}),stopDetection(e,"black"))):c.blackCount=0}catch(t){log("check black video error:",t.message),stopDetection(e,"error")}},1e3)}}function stopDetection(t,e){var a=tracks.get(t);a&&(a.timeoutId&&clearTimeout(a.timeoutId),a.intervalId&&clearInterval(a.intervalId),a.reader&&a.reader.cancel(),tracks.delete(t),postMessage({type:e,trackId:t}))}async function isFrameBlack(t){t=tracks.get(t);if(!t)return!1;var t=t.reader,{done:t,value:e}=await t.read();if(!e||t)return!1;canvas||(canvas=new OffscreenCanvas(e.codedWidth,e.codedHeight),ctx=canvas.getContext("2d",{willReadFrequently:!0})),canvas.width===e.codedWidth&&canvas.height===e.codedHeight||(canvas.width=e.codedWidth,canvas.height=e.codedHeight,ctx=canvas.getContext("2d",{willReadFrequently:!0})),ctx.drawImage(e,0,0,canvas.width,canvas.height);t=getFrameBlackRatio(ctx.getImageData(0,0,canvas.width,canvas.height));return e.close(),1===t}function getFrameBlackRatio(t){var e=t.data;let a=0;for(let t=0;t<100;t++){var c=4*Math.floor(Math.random()*(e.length/4)),[c,r,n,o]=[e[c],e[1+c],e[2+c],e[3+c]];0{var{type:t,trackId:e,timeout:a,readable:c}=t.data;"addTrack"===t&&startDetection(e,a,c),"removeTrack"===t&&stopDetection(e)}; - `],{type:"application/javascript"}),e=URL.createObjectURL(A);this.worker=new Worker(e),URL.revokeObjectURL(e),this.worker.onerror=o=>this._log.warn("worker error:",o.message,o.filename||"unknown",o.lineno||"unknown"),this.worker.onmessage=o=>{var a;let{type:c,trackId:d,message:C,count:y}=o.data;if(c==="black")(a=this.callbacks.get(d))==null||a();else if(c==="log")this._log.warn(C);else if(c==="blackCount"){let S=this.userIdMap.get(d);this._log.warn("".concat(S||d," black count: ").concat(y))}}}return this.worker}start(A){let{track:e,isUplink:o,room:a,userId:c,onBlack:d}=A;if(this._log.debug("start detect black video",e.id),!RM()||!d||!e||typeof Worker>"u")return void this._log.warn("black video detector not supported");let C=y=>{var S,k,V,J;let gA;if(o)gA=(k=(S=y.msg_up_stream_info)==null?void 0:S.msg_video_status)==null?void 0:k.filter(CA=>CA.uint32_video_stream_type===3)[0];else{let CA=(V=y.msg_down_stream_info)==null?void 0:V.filter(MA=>{var $A;return(($A=MA.msg_user_info)==null?void 0:$A.str_identifier)===c})[0];gA=(J=CA?.msg_video_status)==null?void 0:J.filter(MA=>MA.uint32_video_stream_type===3)[0]}if(gA){let CA=(gA.uint32_video_codec_bitrate||0)/1e3;if(this.sleep[e.id]&&this.sleep[e.id]>0)return void(this.sleep[e.id]-=1);CA>0&&CA<10&&(this.sleep[e.id]=30,this._log.info("track bitrate",CA,"start check"),this.checkOnce(e,3e4))}};return a.on("heartbeat-report",C),this.heartbeatListenerCleaner.set(e.id,()=>a.off("heartbeat-report",C)),this.callbacks.set(e.id,d),this.userIdMap.set(e.id,c),e.id}checkOnce(A,e){try{let o=this.getWorker();if(!o)throw new Error("Worker not available");let a=new MediaStreamTrackProcessor({track:A});o.postMessage({type:"addTrack",trackId:A.id,timeout:e,readable:a.readable},[a.readable])}catch(o){this._log.warn("check error:",o),this.stop(A.id)}}stop(A){if(A){this.worker&&this.worker.postMessage({type:"removeTrack",trackId:A}),this.callbacks.delete(A),delete this.sleep[A];let e=this.heartbeatListenerCleaner.get(A);e&&e(),this.heartbeatListenerCleaner.delete(A),this.userIdMap.delete(A)}}destroy(){this.callbacks.forEach((A,e)=>this.stop(e)),this.worker&&(this.worker.terminate(),this.worker=null)}},R1=class extends zz{constructor(A){super(Qo(mi({},A),{isUplink:!0})),Y(this,"localMainAudioTrack",null),Y(this,"localMainVideoTrack",null),Y(this,"localAuxAudioTrack",null),Y(this,"localAuxVideoTrack",null),Y(this,"_isPublishingAux",!1),Y(this,"_publishingLocalAudioTrack"),Y(this,"_publishingLocalVideoTrack"),Y(this,"_mediaSettings",{videoCodec:"",videoWidth:0,videoHeight:0,videoBps:0,videoFps:0,videoDecCodec:"",audioCodec:"opus",audioFs:0,audioChannel:0,audioBps:0,smallVideoWidth:0,smallVideoHeight:0,smallVideoFps:0,smallVideoBps:0,auxVideoWidth:0,auxVideoHeight:0,auxVideoFps:0,auxVideoBps:0}),Y(this,"_flag",0),Y(this,"_checkPublishStateTimeoutId",-1),this.initialize()}get videoCodec(){var A;return((A=this.singlePC)==null?void 0:A.videoCodec)||"h264"}get ssrc(){if(!this.singlePC)return{audio:0,video:0,videoRtx:0,small:0,smallRtx:0,auxiliary:0,auxiliaryRtx:0};let{audioSsrc:A,bigVideoSsrc:e,bigVideoRtxSsrc:o,smallVideoSsrc:a,smallVideoRtxSsrc:c,auxVideoSsrc:d,auxVideoRtxSsrc:C}=this.singlePC.uplinkSSRC;return{audio:A||0,video:e||0,videoRtx:o||0,small:a||0,smallRtx:c||0,auxiliary:d||0,auxiliaryRtx:C||0}}get flag(){return this._flag}set flag(A){this._flag!==A&&(this._flag=A,this.checkPublishState())}checkPublishState(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];try{if(!A&&this._checkPublishStateTimeoutId>0)return;let{serverPublishState:e}=this,{publishState:o}=this._room,a=Object.keys(o).filter(c=>{if(o[c]!==e[c]&&o[c])switch(c){case"audio":return!(!this.localMainAudioTrack||!this.localMainAudioTrack.isMediaTrackActive);case"bigVideo":case"smallVideo":return!(!this.localMainVideoTrack||!this.localMainVideoTrack.isMediaTrackActive);case"auxVideo":return!(!this.localAuxVideoTrack||!this.localAuxVideoTrack.isMediaTrackActive)}return!1});if(a.length>0){if(!A)return void(this._checkPublishStateTimeoutId=Gr.run("timeout",()=>this.checkPublishState(!0),{delay:1e4,count:1}));ii.addCount({key:521e3}),a.forEach(c=>{this._log.warn("".concat(c," publish failed during call ").concat(Yp()," ").concat(rQ())),ii.addEnum({key:521719,value:Xz[c]})}),Gr.clearTask(this._checkPublishStateTimeoutId),this._checkPublishStateTimeoutId=-1}}catch(e){this._log.warn("checkPublishState failed",e)}}get isMainStreamPublished(){return!(!this.localMainAudioTrack&&!this.localMainVideoTrack)}get isAuxStreamPublished(){return!(!this.localAuxVideoTrack&&!this.localAuxAudioTrack)}get serverPublishState(){return{audio:!!(this.flag&jS),bigVideo:!!(this.flag&qS),smallVideo:!!(this.flag&Mb),auxVideo:!!(this.flag&KS)}}initialize(){this.installEvents()}close(A){var e;let o=((e=this._peerConnection)==null?void 0:e.getSenders())||[];for(let a of o)a.replaceTrack(null);super.close(A),this.uninstallEvents(),this.uninstallTrackMuteEvents(this.localMainAudioTrack,this.localMainVideoTrack,this.localAuxVideoTrack),this.emitConnectionStateChangedEvent("DISCONNECTED")}installEvents(){this.listeners("connection-state-changed").includes(this.handleConnectionStateChange)||this.on("connection-state-changed",this.handleConnectionStateChange,this),this.installSPCEvents()}installSPCEvents(){var A,e;(A=this.singlePC)!=null&&A.listeners("spc-reconnected").includes(this.onSinglePCReconnected)||(e=this.singlePC)==null||e.on("spc-reconnected",this.onSinglePCReconnected,this)}uninstallSPCEvents(){var A;(A=this.singlePC)==null||A.off("spc-reconnected",this.onSinglePCReconnected,this)}uninstallEvents(){this.off("connection-state-changed",this.handleConnectionStateChange,this),this.uninstallSPCEvents()}emitConnectionStateChangedEvent(A,e){var o,a,c;let d=this._currentState,C=super.emitConnectionStateChangedEvent(A);return C&&d!==A&&(e?e.emit("connection-state-changed",{prevState:d,state:A}):((o=this.localMainVideoTrack)==null||o.emit("connection-state-changed",{prevState:d,state:A}),(a=this.localAuxVideoTrack)==null||a.emit("connection-state-changed",{prevState:d,state:A}),(c=this._publishingLocalVideoTrack)==null||c.emit("connection-state-changed",{prevState:d,state:A}))),C}onVideoEncodeFailed(A){return KA(this,null,function*(){if(!A||!A.isMediaTrackActive)return;let{videoCodec:e,singlePC:o}=this;if(!o)return;let a={h265:{supported:o.isH264EncodeSupported,target:"h264",log:"h265 encoder not working"},h264:{supported:o.isVP8EncodeSupported,target:"vp8",log:"h264 encoder not working"},vp8:{supported:!1,target:"vp8",log:"vp8 encoder not working, no fallback available"}};if(e==="vp9"||e==="av1")return;let c=a[e];this._log.warn(c.log),c!=null&&c.supported&&(yield o.switchVideoEncoder(c.target))})}publish(A){return KA(this,arguments,function(e){var o=this;let{localAudioTrack:a,localVideoTrack:c,isAuxiliary:d}=e;return function*(){var C,y,S,k,V,J,gA;if(!o.singlePC)return;if(o.installEvents(),o.installTrackMuteEvents(a,c),c&&(c.retryEncodeFailed=o.onVideoEncodeFailed.bind(o),eg&&(ny(kI,"26.2",!0)||ny(oQ,"26.2",!0)||tQ&&ny(kI,"18.7",!0)))){o._log.warn("detectH264Supported for fallback 26.2 video encode issue");try{yield te.detectH264SupportedByFakeStreaming(500)}catch{}}if(yield o.singlePC.waitForPeerConnectionConnected(),a&&(o._publishingLocalAudioTrack=a),c){if(!o.singlePC.isH264EncodeSupported&&!o.singlePC.isVP8EncodeSupported)throw new ai({code:dt.NOT_SUPPORTED_H264,message:Xo({key:Mo.NOT_SUPPORTED_H264ENCODE})});o.singlePC.isUsingH264&&!o.singlePC.isH264EncodeSupported&&o.singlePC.isVP8EncodeSupported&&(o._log.warn("h264 encoder not supported"),yield o.singlePC.switchVideoEncoder("vp8")),Ha&&pM()===115&&c.profile.width*c.profile.height<=230400&&(o._log.warn("fallback video to defaultBigVideoProfile: ".concat(JSON.stringify(HS))),c.setProfile(HS),yield c.applyProfile()),o._publishingLocalVideoTrack=c}let CA;if(o._isPublishingAux=d,c&&!d&&c.small&&(CA=o._room.videoManager.smallTrack),yield o._signalChannel.sendWaitForResponseWithRetry({command:_z,responseCommand:ls.SPC_PUBLISH_RESULT,data:Qo(mi({},o.singlePC.uplinkSSRC),{state:o._room.publishState,muteState:o._room.muteState}),retries:3}),c&&(yield o.checkHighProfile({streamType:c.streamType,newWidth:c.settings.width,newHeight:c.settings.height})),yield o.publishByTransceiver({localAudioTrack:a,localVideoTrack:c,smallTrack:CA,isAuxiliary:d}),o._publishingLocalAudioTrack=null,o._publishingLocalVideoTrack=null,o._isPublishingAux=!1,c){o[d?"localAuxVideoTrack":"localMainVideoTrack"]=c,yield o.singlePC.setDegradationPreference(o._peerConnection.getSenders()[d?3:1],c.contentHint,c.streamType);let{scaleResolutionDownBy:$A}=c;yield o.singlePC.setScaleResolutionDownBy(o._peerConnection.getSenders()[d?3:1],$A,c.streamType)}a&&(o[d?"localAuxAudioTrack":"localMainAudioTrack"]=a),yield o.singlePC.setBandwidth({audio:((C=o.localMainAudioTrack)==null?void 0:C.profile.bitrate)||((y=o.localAuxAudioTrack)==null?void 0:y.profile.bitrate),bigVideo:(S=o.localMainVideoTrack)==null?void 0:S.profile.bitrate,smallVideo:(V=(k=o.localMainVideoTrack)==null?void 0:k.small)==null?void 0:V.bitrate,auxVideo:(J=o.localAuxVideoTrack)==null?void 0:J.profile.bitrate}),o.sendMediaSettings();let MA=d?7:2;(o._room.preferHW||(gA=o._room.scheduleResult.config)!=null&&gA.preferHW)&&c&&c.profile.width*c.profile.height>=921600&&o.singlePC.useHWEncoder(!0,MA)}()})}publishByTransceiver(A){let{localAudioTrack:e,localVideoTrack:o,smallTrack:a,isAuxiliary:c}=A;if(!Xd())return;this._log.info("publish by transceiver");let d=o?.outMediaTrack,C=e?.outMediaTrack,y=this._peerConnection.getTransceivers(),S=[],k=[],V=(gA,CA,MA)=>{var $A;let Be=y[CA].sender.replaceTrack(MA);k.push(CA),($A=this.singlePC)!=null&&$A.enableInsertableStreams&&Be.then(()=>this.createEncodedStreams(y[CA].sender,gA)),this.initSenderTransform(y[CA].sender,gA),S.push(Be)};C&&V(e.mediaType,0,C),d&&V(o.mediaType,c?3:1,d),o!=null&&o.small&&S.push(this.publishSmall(this._room.videoManager.smallMode,o));let J=this.singlePC.setTransceiverDirection(zn.SENDONLY,k);return S.push(J),Promise.all(S)}getTrackByMediaType(A){switch(A){case 1:return this.localMainAudioTrack||this._room.localMainAudioTrack;case 4:case 8:return this.localMainVideoTrack||this._room.localMainVideoTrack;case 2:return this.localAuxVideoTrack||this._room.localAuxVideoTrack;default:return null}}createEncodedStreams(A,e){var o,a;if(this.singlePC.insertableStreamsAbortMap.has(A))return;let c=A.createEncodedStreams(),d=new AbortController;(o=this.singlePC)==null||o.addAbortController(A,d),((a=this.getTrackByMediaType(e))!=null&&a.enableEncodeFrame?c.readable.pipeThrough(new TransformStream({transform:(C,y)=>{var S,k;let V=this.getTrackByMediaType(e);if(!V||!V.encodeFrame)return y.enqueue(C);V.isAudio?y.enqueue(V.enableEncodeFrame?V.encodeFrame(C):C):y.enqueue((S=this.singlePC)!=null&&S.isUsingH264||(k=this.singlePC)!=null&&k.isUsingH265?V.encodeFrame(C,e===8):C)}}),d):c.readable).pipeTo(c.writable,d).catch(C=>{this._log.debug("encoded stream error",C),C!=="destroy"&&this._log.warn(C)})}initSenderTransform(A,e){if(!(this._peerConnection&&this.singlePC&&this.singlePC.scriptTransformWorker&&e_))return;let o=e!==2,a=e===8;A.transform||(A.transform=new RTCRtpScriptTransform(this.singlePC.scriptTransformWorker,{isReceiver:!1,isAudio:e===1,isMain:o,isSmall:a}))}enableSmall(A){return KA(this,null,function*(){A?yield this.publishSmall(this._room.videoManager.smallMode):yield this.unpublishSmall()})}publishSmall(A){return KA(this,arguments,function(e){var o=this;let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.localMainVideoTrack;return function*(){var c;if(!o.singlePC)return;if(e==="canvas"&&!A_())return void o._log.warn("canvas mode small stream is not supported");let d=o._peerConnection.getTransceivers(),{sender:C}=d[2],y=yield o.doPublishSmall(e,a),S=e==="canvas"?524700:524701;ii.addSuccessEvent({key:S}),y?((c=o.singlePC)!=null&&c.enableInsertableStreams&&o.createEncodedStreams(C,8),o.initSenderTransform(C,8),yield o.singlePC.setTransceiverDirection(zn.SENDONLY,[2]),o.updateMediaSettings(),yield o.doPublishChange(),C.track&&(o._blackSmallVideoDetectionId=$M.start({track:C.track,room:o._room,isUplink:!0,userId:o.userId,onBlack:()=>{o._log.warn("small video is black");let k=e==="canvas"?524700:524701;ii.addFailedEvent({key:k,error:10002}),$M.stop(o._blackSmallVideoDetectionId),o._blackSmallVideoDetectionId=void 0}}))):ii.addFailedEvent({key:S,error:10001})}()})}doPublishSmall(A){return KA(this,arguments,function(e){var o=this;let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.localMainVideoTrack;return function*(){if(!o.singlePC)return null;o._log.info("publish small",e);let c=o._peerConnection.getTransceivers(),{sender:d}=c[2];if(e==="canvas"&&o._room.videoManager.smallTrack)return yield d.replaceTrack(o._room.videoManager.smallTrack),"canvas";if(e==="api"&&a!=null&&a.outMediaTrack&&a!=null&&a.small){yield d.replaceTrack(a?.outMediaTrack);let C=d.getParameters(),y=w0(a?.profile,a?.small);return o._log.info("small scaleResolutionDownBy",y),C.encodings[0].scaleResolutionDownBy=y,d.setParameters(C),"api"}return o._log.warn("small track can not be enabled, smallMode: ".concat(o._room.videoManager.smallMode,", smallTrack: ").concat(!!o._room.videoManager.smallTrack,", bigVideoTrack: ").concat(!(a==null||!a.outMediaTrack))),null}()})}unpublishSmall(){return KA(this,null,function*(){this.singlePC&&(this._log.info("unpublish small"),yield this._peerConnection.getTransceivers()[2].sender.replaceTrack(null),yield this.singlePC.setTransceiverDirection(zn.INACTIVE,[2]),this.updateMediaSettings(),yield this.doPublishChange(),$M.stop(this._blackSmallVideoDetectionId),this._blackSmallVideoDetectionId=void 0)})}checkHighProfile(A){return KA(this,null,function*(){var e,o;if((((e=this._room.scheduleResult.config)==null?void 0:e.profileLevelId)||{})[A.streamType==="main"?"big":"aux"]!=="high")return;let a=A.newWidth*A.newHeight>=921600&&!ry();try{yield(o=this.singlePC)==null?void 0:o.setH264ProfileLevelId(A.streamType,a)}catch(c){this._log.warn("setH264ProfileLevelId failed, ignore",c)}})}installTrackMuteEvents(){for(var A=arguments.length,e=new Array(A),o=0;o{a&&(a?.on("mute",this.sendMutedFlag,this),a?.on("unmute",this.sendMutedFlag,this))})}uninstallTrackMuteEvents(){for(var A=arguments.length,e=new Array(A),o=0;o{a&&(a?.off("mute",this.sendMutedFlag,this),a?.off("unmute",this.sendMutedFlag,this))})}unpublish(A){return KA(this,arguments,function(e){var o=this;let{localAudioTrack:a,localVideoTrack:c}=e;return function*(){var d;yield(d=o.singlePC)==null?void 0:d.waitForPeerConnectionConnected();let C=c&&c===o.localAuxVideoTrack||a&&a===o.localAuxAudioTrack,y=c?.outMediaTrack,S=o._peerConnection.getSenders(),k=[];a&&(C?o.localAuxAudioTrack=null:o.localMainAudioTrack=null,!o.localMainAudioTrack&&!o.localAuxAudioTrack&&(yield S[0].replaceTrack(null),k.push(0))),y&&(C?(yield S[3].replaceTrack(null),o.localAuxVideoTrack=null,o._mediaSettings=Qo(mi({},o._mediaSettings),{auxVideoBps:0,auxVideoFps:0,auxVideoWidth:0,auxVideoHeight:0}),k.push(3)):(yield S[1].replaceTrack(null),yield S[2].replaceTrack(null),o.localMainVideoTrack=null,o._mediaSettings=Qo(mi({},o._mediaSettings),{videoWidth:0,videoHeight:0,videoBps:0,videoFps:0,audioFs:0,audioChannel:0,audioBps:0,smallVideoWidth:0,smallVideoHeight:0,smallVideoFps:0,smallVideoBps:0}),k.push(1,2))),o.isMainStreamPublished||o.isAuxStreamPublished?(yield o.singlePC.setTransceiverDirection(zn.INACTIVE,k),yield o.doPublishChange(!1)):yield o.doUnpublish(),o.uninstallTrackMuteEvents(a,c),c?.emit("connection-state-changed",{prevState:o._currentState,state:"DISCONNECTED"})}()})}doPublishChange(){let A=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];return KA(this,null,function*(){let e={state:this._room.publishState,constraintConfig:this._mediaSettings},o=yield this._signalChannel.sendWaitForResponseWithRetry({command:Cj,data:e,responseCommand:ls.PUBLISH_STATE_CHANGE_RESULT,enableLog:A,retries:3});this.checkPublishResultCode(o.data.code,o.data.message)})}doUnpublish(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return this._signalChannel.sendWaitForResponse({command:f1,commandDesc:"unpublish",responseCommand:ls.UNPUBLISH_RESULT,enableLog:A}).catch(e=>{if(e.getCode()===dt.API_CALL_TIMEOUT||e.getCode()===dt.API_CALL_ABORTED)return Promise.resolve();throw e})}updateMediaSettings(){var A,e;this._mediaSettings.videoCodec=((A=this.singlePC)==null?void 0:A.videoCodec)||"h264",this._mediaSettings.videoDecCodec=((e=this.singlePC)==null?void 0:e.downlinkVideoCodec)||"h264";let o=this._publishingLocalAudioTrack||this.localMainAudioTrack||this.localAuxAudioTrack,{localMainVideoTrack:a,localAuxVideoTrack:c}=this;if(this._publishingLocalVideoTrack&&(this._isPublishingAux?c=this._publishingLocalVideoTrack:a=this._publishingLocalVideoTrack),Cy){if(o&&o.outMediaTrack){let d=o.outMediaTrack.getSettings();this._mediaSettings.audioChannel=d.channelCount||1,this._mediaSettings.audioBps=1e3*o.profile.bitrate,this._mediaSettings.audioFs=d.sampleRate||0}if(a&&a.outMediaTrack){let d=a.outMediaTrack.getSettings(),{scaleResolutionDownBy:C}=a;this._mediaSettings.videoWidth=(d.width||0)/C||0,this._mediaSettings.videoHeight=(d.height||0)/C||0,this._mediaSettings.videoFps=d.frameRate||0,this._mediaSettings.videoBps=1e3*a.profile.bitrate,a.small&&(this._mediaSettings.smallVideoWidth=a.small.width,this._mediaSettings.smallVideoHeight=a.small.height,this._mediaSettings.smallVideoFps=a.small.frameRate,this._mediaSettings.smallVideoBps=1e3*a.small.bitrate)}if(c&&c.outMediaTrack){let d=c.outMediaTrack.getSettings(),{scaleResolutionDownBy:C}=c;this._mediaSettings.auxVideoWidth=(d.width||0)/C||0,this._mediaSettings.auxVideoHeight=(d.height||0)/C||0,this._mediaSettings.auxVideoFps=d.frameRate||0,this._mediaSettings.auxVideoBps=1e3*c.profile.bitrate}}else o&&o.outMediaTrack&&(this._mediaSettings.audioChannel=o.profile.channelCount,this._mediaSettings.audioBps=1e3*o.profile.bitrate,this._mediaSettings.audioFs=o.profile.sampleRate),a&&a.outMediaTrack&&(this._mediaSettings.videoWidth=a.profile.width,this._mediaSettings.videoHeight=a.profile.height,this._mediaSettings.videoFps=a.profile.frameRate,this._mediaSettings.videoBps=1e3*a.profile.bitrate);this._log.info("updateMediaSettings: ".concat(JSON.stringify(this._mediaSettings)))}sendMediaSettings(){this.updateMediaSettings(),this._signalChannel.sendWaitForResponse({command:Qj,data:this._mediaSettings,responseCommand:ls.UPDATE_CONSTRAINT_CONFIG_RES}).then(A=>{A.data.code!==0&&this._log.warn(A.data.message)}).catch(()=>{})}addTrack(A){return KA(this,null,function*(){if(!this._peerConnection)return;let e=A===this.localAuxAudioTrack||A===this.localAuxVideoTrack;this._log.info("is adding ".concat(A.kind," track to current published local ").concat(e?YA.AUXILIARY:YA.MAIN," stream")),IQ()&&(yield this.addTrackByTransceiver(A,e))})}addTrackByTransceiver(A,e){return KA(this,null,function*(){var o;if(!A.mediaTrack)return;let a=this._peerConnection.getTransceivers();if(A.kind===YA.AUDIO)yield a[0].sender.replaceTrack(A.outMediaTrack);else{let c=e?3:1;yield a[c].sender.replaceTrack(A.outMediaTrack),c===1&&(o=this.localMainVideoTrack)!=null&&o.small&&this._room.videoManager.smallTrack&&(yield a[2].sender.replaceTrack(this._room.videoManager.smallTrack)),a[c].direction===zn.INACTIVE&&(yield this.singlePC.setTransceiverDirection(zn.SENDONLY,[c]))}this.updateMediaSettings(),yield this.doPublishChange()})}removeTrack(A){return KA(this,null,function*(){if(!this._peerConnection)return;let e=A===this.localAuxAudioTrack||A===this.localAuxVideoTrack;this._log.info("is removing ".concat(A.kind," track from current published local ").concat(e?YA.AUXILIARY:YA.MAIN," stream")),IQ()&&(yield this.removeTrackByTransceiver(A,e))})}removeTrackByTransceiver(A,e){return KA(this,null,function*(){if(!A.mediaTrack)return;let o=this._peerConnection.getTransceivers();if(A.kind===YA.AUDIO)yield o[0].sender.replaceTrack(null);else{let a=e?3:1;yield o[a].sender.replaceTrack(null),a===1&&this._room.videoManager.hasSmall&&(yield o[2].sender.replaceTrack(null)),yield this.singlePC.setTransceiverDirection(zn.INACTIVE,[a])}this.updateMediaSettings(),yield this.doPublishChange()})}replaceTrack(A){return KA(this,null,function*(){var e;let o=(e=this._peerConnection)==null?void 0:e.getSenders(),a=A.outMediaTrack||A.mediaTrack;if(!o||o.length===0||!a||o.find(d=>d.track===a))return!1;let c=A.mediaType===2||A===this.localAuxAudioTrack||A===this.localAuxVideoTrack;return this._log.info("is replacing ".concat(a.kind," track ").concat(a.id," ").concat(a.label," on ").concat(c?YA.AUXILIARY:YA.MAIN," stream")),a.kind===YA.AUDIO&&o[0]&&(yield o[0].replaceTrack(a)),a.kind===YA.VIDEO&&(!c&&o[1]&&(yield o[1].replaceTrack(a)),c&&o[3]&&(yield o[3].replaceTrack(a))),!0})}setBandwidth(A){return KA(this,arguments,function(e){var o=this;let{bandwidth:a,type:c,videoType:d}=e;return function*(){if(o.singlePC){let C={};c===YA.AUDIO?C.audio=a:d==="big"?C.bigVideo=a:d==="small"?C.smallVideo=a:C.auxVideo=a,yield o.singlePC.setBandwidth(C)}}()})}sendMutedFlag(A){A===this.localAuxAudioTrack||A===this.localAuxVideoTrack||(this._log.info("send muted state: ".concat(JSON.stringify(this._room.muteState))),this._signalChannel.sendWaitForResponseWithRetry({command:vz,responseCommand:ls.MUTE_RESULT,data:this._room.muteState,retries:3}).catch(()=>{}))}handleConnectionStateChange(A){A.state==="CONNECTED"&&(this.localMainVideoTrack||this._publishingLocalVideoTrack&&!this._isPublishingAux)&&F.emit(nA.SEND_FIRST_VIDEO_FRAME,{room:this._room})}getVideoTrackId(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:YA.VIDEO;if(this._peerConnection){let e=this._peerConnection.getSenders();if(A===YA.AUXILIARY&&e[3]&&e[3].track)return e[3].track.id;if(A===YA.VIDEO&&e[1]&&e[1].track)return e[1].track.id}if(this.localMainVideoTrack&&A===YA.VIDEO){let e=this.localMainVideoTrack.mediaTrack;if(e)return e.id}if(this.localAuxVideoTrack&&A===YA.AUXILIARY){let e=this.localAuxVideoTrack.mediaTrack;if(e)return e.id}return""}getSSRC(){return this.ssrc}checkPublishResultCode(A,e){if(A!==0)throw A===I0?(this._log.error(cc.NOT_SUPPORTED_H264ENCODE),new ai({code:dt.NOT_SUPPORTED_H264,message:Xo({key:Mo.NOT_SUPPORTED_H264ENCODE})})):new ai({code:dt.UNKNOWN,message:Xo({key:Mo.SIGNAL_RESPONSE_FAILED,data:{signalResponse:ls.PUBLISH_RESULT,code:A,message:e}})})}onSinglePCReconnected(){return KA(this,null,function*(){this.isMainStreamPublished&&(this._log.warn("republish main stream"),yield this.publish({localAudioTrack:this.localMainAudioTrack,localVideoTrack:this.localMainVideoTrack,isAuxiliary:!1})),this.isAuxStreamPublished&&(this._log.warn("republish aux stream"),yield this.publish({localAudioTrack:this.localAuxAudioTrack,localVideoTrack:this.localAuxVideoTrack,isAuxiliary:!0}))})}};Ci([VM(A=>{let{localVideoTrack:e}=A;e==null||delete e.retryEncodeFailed})],R1.prototype,"unpublish"),Ci([Zz({when(){return this.isDestroyed}})],R1.prototype,"doPublishChange"),Ci([Zz({when(){return this.isDestroyed}})],R1.prototype,"doUnpublish");var Xz=(A=>(A[A.audio=1]="audio",A[A.bigVideo=2]="bigVideo",A[A.smallVideo=3]="smallVideo",A[A.auxVideo=4]="auxVideo",A))(Xz||{}),$z=R1;function A8(A){return Object.keys(A).filter(e=>A[e])}var w1=class extends zz{constructor(A){super(Qo(mi({},A),{isUplink:!1})),Y(this,"_flag",0),Y(this,"isRobot",!1),Y(this,"role","anchor"),Y(this,"fromType"),Y(this,"remoteAudioTrack"),Y(this,"remoteVideoTrack"),Y(this,"remoteAuxiliaryTrack"),Y(this,"ssrc",{audio:0,video:0,videoRtx:0,auxiliary:0,auxiliaryRtx:0}),Y(this,"_prevMids"),Y(this,"jitterBufferTimeoutId",-1),Y(this,"_jitterBufferResolve"),Y(this,"_videoCodec"),Y(this,"avPlayerStateSyncManager"),Y(this,"isDataChannelSubscribed",!1),this.flag=A.flag,this.isRobot=A.isRobot||!1,this.fromType=A.fromType,this.remoteAudioTrack=new s1(this._room,this),this.remoteVideoTrack=new cL(this._room,this),this.remoteAuxiliaryTrack=new P5(this._room,this),this.avPlayerStateSyncManager=new ij({log:this._log,audioPlayer:this.remoteAudioTrack.player,videoPlayer:this.remoteVideoTrack.player}),this.initialize()}get videoCodec(){var A;return this._videoCodec||((A=this.singlePC)==null?void 0:A.downlinkVideoCodec)||"h264"}set videoCodec(A){this._videoCodec=A}get subscribeState(){return{audio:this.remoteAudioTrack.isSubscribed||this.remoteAudioTrack.isSubscribing,video:this.remoteVideoTrack.isBig&&(this.remoteVideoTrack.isSubscribed||this.remoteVideoTrack.isSubscribing),smallVideo:this.remoteVideoTrack.isSmall&&(this.remoteVideoTrack.isSubscribed||this.remoteVideoTrack.isSubscribing),auxiliary:this.remoteAuxiliaryTrack.isSubscribed||this.remoteAuxiliaryTrack.isSubscribing,datachannel:this.isDataChannelSubscribed}}get muteState(){return wp(this.flag,this.userId)}get flag(){return this._flag}set flag(A){var e,o,a;A!==this._flag&&(this._flag=A,(e=this.remoteAudioTrack)==null||e.onFlagChanged(),(o=this.remoteVideoTrack)==null||o.onFlagChanged(),(a=this.remoteAuxiliaryTrack)==null||a.onFlagChanged())}get hasMainStream(){return this.muteState.hasAudio||this.muteState.hasVideo||this.muteState.hasSmall}get hasAuxStream(){return this.muteState.hasAuxiliary}get isMainStreamSubscribed(){return(this.subscribeState.audio||this.subscribeState.video||this.subscribeState.smallVideo)&&(this.muteState.hasAudio||this.muteState.hasVideo||this.muteState.hasSmall)}get isAuxStreamSubscribed(){return this.subscribeState.auxiliary&&this.muteState.hasAuxiliary}get isSmallStreamSubscribed(){return this.subscribeState.smallVideo&&this.muteState.hasSmall}get isBigStreamSubscribed(){return this.subscribeState.video&&this.muteState.hasVideo}isStreamUnpublished(A){return A===YA.MAIN?!this.muteState.hasAudio&&!this.muteState.hasVideo:!this.muteState.hasAuxiliary}initialize(){this.installEvents()}close(A){clearTimeout(this.jitterBufferTimeoutId),super.close(A),this.emitConnectionStateChangedEvent("DISCONNECTED"),this.remoteAudioTrack.close(),this.remoteVideoTrack.close(),this.remoteAuxiliaryTrack.close(),this.avPlayerStateSyncManager.destroy(),this.uninstallEvents(),this.removeDownlink()}installEvents(){this.singlePC&&(this.listeners("track").includes(this.onTrack)||this.singlePC.on("track",this.onTrack,this),this.listeners("spc-reconnected").includes(this.onSinglePCReconnected)||this.singlePC.on("spc-reconnected",this.onSinglePCReconnected,this),this.remoteVideoTrack.on("decode-failed",this.onDecodeFailed,this))}uninstallEvents(){this.singlePC&&(this.singlePC.off("track",this.onTrack,this),this.singlePC.off("spc-reconnected",this.onSinglePCReconnected,this),this.remoteVideoTrack.off("decode-failed",this.onDecodeFailed,this))}emitConnectionStateChangedEvent(A){var e,o;let a=this._currentState,c=super.emitConnectionStateChangedEvent(A);return c&&a!==A&&((e=this.remoteVideoTrack)==null||e.emit("connection-state-changed",{prevState:a,state:A}),(o=this.remoteAuxiliaryTrack)==null||o.emit("connection-state-changed",{prevState:a,state:A})),c}onTrack(A){var e,o;let a=A.streams[0],{track:c,receiver:d}=A;if(!a.id.includes(this.tinyId))return;let C=a.id.includes("aux")?"auxiliary":"main";this._log.debug("ontrack ".concat(C," ").concat(c.kind));let y=YA.AUDIO;c.kind===YA.VIDEO&&(y=C===YA.MAIN?YA.VIDEO:YA.AUXILIARY);let S=this.remoteAudioTrack;y===YA.VIDEO?S=this.remoteVideoTrack:y===YA.AUXILIARY&&(S=this.remoteAuxiliaryTrack),(e=this.singlePC)==null||e.receiverRemoteTrackMap.set(d,S),(o=this.singlePC)!=null&&o.scriptTransformWorker&&this.initReceiverTransform(d,C,c.kind===YA.AUDIO),this.singlePC.enableInsertableStreams&&this.createEncodedStreams(d),S.setInputMediaStreamTrack(c)}createEncodedStreams(A){if(!this.singlePC.insertableStreamsAbortMap.has(A)){let e=A.createEncodedStreams(),o=new AbortController,a={abortController:o,enqueue:c=>{var d,C,y;let S=(d=this.singlePC)==null?void 0:d.receiverRemoteTrackMap.get(A);return S&&(S.kind!=="video"||(C=this.singlePC)!=null&&C.isUsingH264||(y=this.singlePC)!=null&&y.isUsingH265)?S.decodeFrame(c):c}};e.readable.pipeThrough(new TransformStream({transform:(c,d)=>{let C=a.enqueue(c);C&&d.enqueue(C)}})).pipeTo(e.writable,o).catch(c=>{c!=="destroy"&&this._log.warn(c)}),this.singlePC.addAbortController(A,o)}}initReceiverTransform(A,e,o){!this._peerConnection||!this.singlePC||!this.singlePC.scriptTransformWorker||A.transform||(A.transform=new RTCRtpScriptTransform(this.singlePC.scriptTransformWorker,{isReceiver:!0,isAudio:o,userId:this.userId,streamType:e}))}subscribe(A,e){return KA(this,null,function*(){var o,a;try{let c=!0;if(this._log.info("subscribe ".concat(e," ").concat(A8(A))),this.hasSSRC){let y="subscribe_change";Object.values(A).find(S=>S===!0)||(y="unsubscribe"),yield this.sendSubscription(y,A)}else{if(yield this._room.switchRoomSubedReq,(o=this.singlePC)!=null&&o.autoSubscribedUserMap.size){let y=this.singlePC.autoSubscribedUserMap.get(this.userId);if(y){this.singlePC.autoSubscribedUserMap.delete(this.userId);let S=(a=this.singlePC.autoSubscribedSsrcGroups.get(this._room.roomId))==null?void 0:a[y.groupIndex];S&&(this.ssrc={audio:S.audioSsrc,video:S.bigVideoSsrc,videoRtx:S.bigVideoRtxSsrc,auxiliary:S.auxVideoSsrc,auxiliaryRtx:S.auxVideoRtxSsrc},c=!1)}}yield this.doSubscribe(A,c),this.checkTrackEnded(A)}let{user:d,mediaTrack:C}=this.remoteVideoTrack;A.smallVideo&&C?(ii.addSuccessEvent({key:524702}),this._blackSmallVideoDetectionId=$M.start({track:C,isUplink:!1,room:this._room,userId:this.userId,onBlack:()=>{this._log.warn("small video is black, auto change to big"),this._room.changeType(!1,d),ii.addFailedEvent({key:524702}),$M.stop(this._blackSmallVideoDetectionId),this._blackSmallVideoDetectionId=void 0}})):($M.stop(this._blackSmallVideoDetectionId),this._blackSmallVideoDetectionId=void 0)}catch(c){throw this._room.isJoined&&this.isStreamUnpublished(e)?(this._log.warn("".concat(c.message," ").concat(JSON.stringify(this.muteState))),new ai({code:dt.REMOTE_STREAM_NOT_EXIST,message:"remote user ".concat(this.userId," unpublished stream")})):c}})}checkTrackEnded(A){var e,o,a;if((A.audio&&((e=this.remoteAudioTrack.mediaTrack)==null?void 0:e.readyState)==="ended"||A.video&&((o=this.remoteVideoTrack.mediaTrack)==null?void 0:o.readyState)==="ended"||A.auxiliary&&((a=this.remoteAuxiliaryTrack.mediaTrack)==null?void 0:a.readyState)==="ended")&&this.singlePC&&!this.singlePC.isReconnecting){if(this._log.warn("remote track ended start spc reconnect"),IE&&id<92)return;this.singlePC.startReconnection()}}unsubscribe(A){return KA(this,arguments,function(e){var o=this;let{remoteTracks:a,streamType:c}=e;return function*(){var d;if(c==="main"&&!o.isMainStreamSubscribed||c==="auxiliary"&&!o.isAuxStreamSubscribed)return void o._log.info("".concat(c," stream already unsubscribed"));let C=mi({},o.subscribeState);a.forEach(S=>{switch(S.mediaType){case 1:C.audio=!1;break;case 4:C.video=!1;break;case 8:C.smallVideo=!1;break;case 2:C.auxiliary=!1}});let y="subscribe_change";Object.values(C).find(S=>S===!0)||(y="unsubscribe"),o._log.info("".concat(y==="unsubscribe"?y:"subscribe"," ").concat(c," [").concat(A8(C),"]")),y==="unsubscribe"&&((d=o.singlePC)==null||d.removeDownlinkQueue.add(o.tinyId)),yield o.sendSubscription(y,C),c==="main"&&($M.stop(o._blackSmallVideoDetectionId),o._blackSmallVideoDetectionId=void 0),y==="unsubscribe"&&(yield o.removeDownlink())}()})}subscribeDataChannel(){return KA(this,null,function*(){if(!this.singlePC)return;yield this.singlePC.waitForPeerConnectionConnected();let A=Qo(mi({},this.subscribeState),{datachannel:!0});yield this.doSubscribe(A)})}unsubscribeDataChannel(){return KA(this,null,function*(){let A=Qo(mi({},this.subscribeState),{datachannel:!1});yield this.sendSubscription("unsubscribe",A),yield this.removeDownlink()})}sendSubscription(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscribeState,o={srcTinyId:this.tinyId,srcUserId:this.userId},a=hj,c=ls.UNSUBSCRIBE_RESULT;return A==="subscribe_change"&&(o={audio:e.audio,bigVideo:e.video,auxVideo:e.auxiliary,smallVideo:e.smallVideo,customData:e.datachannel,srcTinyId:this.tinyId},a=Bj,c=ls.SUBSCRIBE_CHANGE_RESULT),this._signalChannel.sendWaitForResponseWithRetry({command:a,data:o,responseCommand:c,timeout:1e4,retries:3}).then(d=>{let{data:C}=d;if(C.code!==0){let y=new ai({code:C.code,message:Xo({key:Mo.ERROR_MESSAGE,data:{type:A,message:C.message}})});throw this._log.error(y),y}})}getMainStreamVideoTrackId(){return this.remoteVideoTrack&&this.remoteVideoTrack.mediaTrack?this.remoteVideoTrack.mediaTrack.id:""}getAuxStreamVideoTrackId(){return this.remoteAuxiliaryTrack&&this.remoteAuxiliaryTrack.mediaTrack?this.remoteAuxiliaryTrack.mediaTrack.id:""}setDelay(A){let{audioDelay:e,videoDelay:o}=A;this.remoteAudioTrack.stat.end2EndDelay=e,this.remoteVideoTrack.stat.end2EndDelay=o}onSinglePCReconnected(){return KA(this,null,function*(){(this.ssrc.audio||this.ssrc.video||this.ssrc.auxiliary||this.isDataChannelSubscribed)&&(this._log.warn("resubscribe ".concat(JSON.stringify(this.subscribeState))),yield this.doSubscribe(this.subscribeState),this.remoteAudioTrack.checkDecodeResult(),this.remoteVideoTrack.checkDecodeResult(),this.remoteAuxiliaryTrack.checkDecodeResult())})}get hasSSRC(){return this.ssrc.audio&&this.ssrc.video&&this.ssrc.auxiliary}doSubscribe(){return KA(this,arguments,function(){var A=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.subscribeState,o=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];return function*(){var a,c;if(A.singlePC){A.singlePC.addDownlinkQueue.add(A.tinyId),yield A.singlePC.waitForPeerConnectionConnected();try{if(o||!A.hasSSRC){let d={audioSsrc:tB(),bigVideoSsrc:tB(),bigVideoRtxSsrc:tB(),auxVideoSsrc:tB(),auxVideoRtxSsrc:tB()},{audioSsrc:C,bigVideoSsrc:y,bigVideoRtxSsrc:S,auxVideoSsrc:k,auxVideoRtxSsrc:V}=d;A.ssrc={audio:C,video:y,videoRtx:S,auxiliary:k,auxiliaryRtx:V},A.singlePC.addDownlinkQueue.delete(A.tinyId),yield A.singlePC.addDownlink({userId:A.userId,tinyId:A.tinyId,ssrc:A.ssrc,prevMids:A._prevMids});try{let J=yield A._signalChannel.sendWaitForResponseWithRetry({command:Tz,responseCommand:ls.SPC_SUBSCRIBE_RESULT,data:{srcUserId:A.userId,srcTinyId:A.tinyId,audio:e.audio,bigVideo:e.video,auxVideo:e.auxiliary,smallVideo:e.smallVideo,customData:(a=e.datachannel)!=null&&a,ssrc:d},retries:3,retryTimeout:0});if(J.data.code!==0&&J.data.code!==-10036)throw new ai({code:J.data.code,message:J.data.message});A.isDataChannelSubscribed=(c=e.datachannel)!=null&&c}catch(J){throw yield A.removeDownlink(),J}return}A.singlePC.addDownlinkQueue.delete(A.tinyId),yield A.singlePC.addDownlink({userId:A.userId,tinyId:A.tinyId,ssrc:A.ssrc,prevMids:A._prevMids})}finally{if((e.audio||e.video||e.smallVideo||e.auxiliary||!e.datachannel)&&uQ){let{main:d,aux:C}=A._room.jitterBufferDelay||{},{jitterDelay:y=d,jitterDelayAux:S=C}=A._room.scheduleResult.config||{};(bn(y)||bn(S))&&A.setJitterBufferDelay({mainDelay:y,auxDelay:S})}}}}()})}removeDownlink(){return KA(this,null,function*(){this.singlePC&&(this.isDataChannelSubscribed=!1,this.ssrc={audio:0,video:0,videoRtx:0,auxiliary:0,auxiliaryRtx:0},this.singlePC.removeDownlinkQueue.delete(this.tinyId),clearTimeout(this.jitterBufferTimeoutId),this._jitterBufferResolve&&(this._jitterBufferResolve(),this._jitterBufferResolve=void 0),this.setJitterBufferDelay({mainDelay:0,auxDelay:0}),this._prevMids=yield this.singlePC.removeDownlink(this.userId))})}setJitterBufferDelay(A){let{mainDelay:e,auxDelay:o}=A;if(!uQ||!this.singlePC||!this._peerConnection||Ad(e)&&Ad(o))return Promise.resolve();this._log.info("set jitterBuffer main: ".concat(e," aux: ").concat(o));let a=this.singlePC.getReceiversByUserId(this.userId);return bn(e)&&(this.remoteAudioTrack.jitterBufferDelay=e,this.remoteVideoTrack.jitterBufferDelay=e),bn(o)&&(this.remoteAuxiliaryTrack.jitterBufferDelay=o,Ad(e)&&(this.remoteAudioTrack.jitterBufferDelay=o)),new Promise(c=>{this._jitterBufferResolve=c,this.doSetJitterBufferDelay({mainDelay:e,auxDelay:o,receivers:a,resolve:c})})}doSetJitterBufferDelay(A){let{mainDelay:e,auxDelay:o,receivers:a,resolve:c}=A;try{if(e===0&&o===0)return a.forEach(d=>d.jitterBufferTarget=0),this._jitterBufferResolve=void 0,c();if(a.forEach(d=>{var C;let y=d.track===this.remoteAuxiliaryTrack.outMediaTrack||Ad(e)&&d.track===this.remoteAudioTrack.outMediaTrack;if(y&&Ad(o)||!y&&Ad(e))return;let S=y?o||0:e,k=(d.jitterBufferTarget||0)+100;k>S||(d.jitterBufferTarget=k,this._log.debug("set ".concat(y?"aux ":"").concat((C=d?.track)==null?void 0:C.kind," jitterBuffer delay ").concat(k," -> ").concat(S)))}),!a.find(d=>{let C=d.track===this.remoteAuxiliaryTrack.outMediaTrack?o||0:e;return d.jitterBufferTarget{this.doSetJitterBufferDelay({mainDelay:e,auxDelay:o,receivers:a,resolve:c})},1e3)}catch(d){this._log.warn("set jitterBuffer delay error: ".concat(d)),clearTimeout(this.jitterBufferTimeoutId),this._jitterBufferResolve=void 0,c()}}get audioReceiver(){var A;return((A=this.singlePC)==null?void 0:A.getReceiversByUserId(this.userId)[0])||null}onDecodeFailed(){this._room.downlinkVideoCodec==="h265"&&this._room.requestRemoteFallbackToH264()}};Ci([$k(),jr(A=>function(){for(var e=arguments.length,o=new Array(e),a=0;a{let C=y=>{this.off("closed",C),d(new ai({code:dt.API_CALL_ABORTED,message:Xo({key:Mo.CONNECTION_ABORTED,data:y})}))};this.on("closed",C),A.apply(this,o).then(c,d).finally(()=>{this.off("closed",C)})})})],w1.prototype,"subscribe"),Ci([$k()],w1.prototype,"unsubscribe"),Ci([py(()=>"jitter")],w1.prototype,"setJitterBufferDelay");var OoA=w1,PoA=gc(Kl()),e8=class x9 extends PoA.EventEmitter{constructor(e,o){super(),this.room=e,this.signalChannel=o,Y(this,"log"),Y(this,"cmdIdSeqMap",new Map),Y(this,"messageMap",new Map),this.log=QA.createLogger({parent:e.getLogger(),id:"cmm",userId:e.userId}),this.onReceiveMsg=this.onReceiveMsg.bind(this),o.on(ls.RECEIVE_CUSTOM_MSG,this.onReceiveMsg),this.room.on("peer-leave",a=>{let{userId:c}=a;[...this.messageMap.keys()].forEach(d=>{d.split("_").slice(0,-1).join("_")===c&&this.messageMap.delete(d)})})}send(e){let{cmdId:o,data:a}=e,c=this.cmdIdSeqMap.get(o)||Math.floor(16383*Math.random()),d={cmdId:o,msg:btoa(String.fromCharCode(...new Uint8Array(a))),ordered:!0,reliable:!0,streamSeq:c};this.cmdIdSeqMap.set(o,c+1),this.signalChannel.send(noA,d),this.log.debug("send custom msg: ".concat(JSON.stringify(d)))}onReceiveMsg(e){let{data:o}=e.data,a=this.room.tinyIdToUserIdMap.get(o.srcTinyId);if(a){let c={userId:a,cmdId:o.cmdId,seq:o.streamSeq,data:Uint8Array.from(atob(o.msg),d=>d.charCodeAt(0)).buffer};if(o.ordered){let d="".concat(a,"_").concat(c.cmdId),C=this.messageMap.get(d);if(C&&C.lastSeq!==0)if(Math.abs(C.lastSeq-c.seq)>x9.SEQ_INTERVAL)this.messageMap.set(d,{lastSeq:c.seq,cachedMessageMap:new Map}),this.emitMessage(c);else if(c.seq>C.lastSeq){if(c.seq===C.lastSeq+1)this.emitMessage(c);else if(!C.cachedMessageMap.has(c.seq)){let y=setTimeout(()=>this.emitMessage(c,!0),5e3);C.cachedMessageMap.set(c.seq,{message:c,timeoutId:y})}}else this.log.debug("drop message ".concat(c.userId,"-").concat(c.cmdId,"-").concat(c.seq));else C||(C={lastSeq:0,cachedMessageMap:new Map},this.messageMap.set(d,C),setTimeout(()=>this.emitMessage(c,!0),100)),C.cachedMessageMap.set(c.seq,{message:c})}else this.emit("message",c)}else{this.log.warn("receive msg from unknown user, wait peer-join tinyId: ".concat(o.srcTinyId));let c=d=>{d.tinyId===o.srcTinyId&&(this.room.off("peer-join",c),this.onReceiveMsg(e))};this.room.on("peer-join",c),LC(2e3).then(()=>this.room.off("peer-join",c))}}emitMessage(e){let o=arguments.length>1&&arguments[1]!==void 0&&arguments[1];var a;let c=this.messageMap.get("".concat(e.userId,"_").concat(e.cmdId)),d=e;if(c){if(o){let y=[...c.cachedMessageMap.values()].sort((S,k)=>S.message.seq-k.message.seq);y[0]&&(d=y[0].message)}c.lastSeq!==0&&d.seq-c.lastSeq>1&&this.log.debug("msg lost userId: ".concat(d.userId," seq: ").concat(c.lastSeq," -> ").concat(d.seq)),c.lastSeq=d.seq,clearTimeout((a=c.cachedMessageMap.get(d.seq))==null?void 0:a.timeoutId),c.cachedMessageMap.delete(d.seq)}this.log.debug("receive custom msg: ".concat(JSON.stringify(d))),this.emit("message",d);let C=c?.cachedMessageMap.get(d.seq+1);C&&this.emitMessage(C.message)}};Y(e8,"SEQ_INTERVAL",300);var xoA=e8,{isString:t8,isUndefined:Av,getNetworkType:YoA,isEmpty:VoA}=Hd,wy=class extends RoA{constructor(A){super(A),Y(this,"_businessInfo"),Y(this,"userManager"),Y(this,"_version"),Y(this,"_heartbeat",-1),Y(this,"_lastHeartBeatTime",-1),Y(this,"_stats"),Y(this,"_joinTimeout",-1),Y(this,"_firstPublishedList",null),Y(this,"_joinReject",null),Y(this,"_isRelayChanged",!1),Y(this,"sdpSemantics"),Y(this,"signalChannel",null),Y(this,"uplinkConnection",null),Y(this,"singlePC",null),Y(this,"enableSPC",GM),Y(this,"_changeBigSmallRecords",new Map),Y(this,"networkQuality"),Y(this,"_iceTransportPolicy"),Y(this,"forceRelay",!1),Y(this,"_turnServers",[]),Y(this,"_iceServersFromJoin"),Y(this,"_syncUserListInterval",-1),Y(this,"_smallStreamConfig",{bitrate:100,frameRate:15,height:120,width:160}),Y(this,"enableSEI",!1),Y(this,"_enableAudioVolumeEvaluation",!1),Y(this,"_audioVolumeIntervalId",0),Y(this,"_enableMultiAuxStream",!1),Y(this,"_pureAudioPushMode",!1),Y(this,"_customMessageManager"),Y(this,"_enableDataChannel",!1),Y(this,"preferHW",!1),Y(this,"healthDetector"),Y(this,"playoutDelay"),Y(this,"jitterBufferDelay"),Y(this,"_updateAudioLevelTaskId",-1),Y(this,"switchRoomSubedReq"),Y(this,"resolveSwitchRoomSubedReq"),Y(this,"enableVolumeControlInIOS"),Y(this,"capturedLocalMainAudioTrack"),Y(this,"capturedLocalMainVideoTrack"),Y(this,"capturedLocalAuxVideoTrack"),Y(this,"PRELINK_EXPIRED_TIME",3e5),Y(this,"PRELINK_TIMEOUT",1e4),Y(this,"prelinkTimeoutId",null),Y(this,"firewallDetector"),this.firewallDetector=new ciA,this.firewallDetector.on("firewall-restriction",()=>{this._log.warn("firewall restriction"),this.emit("firewall-restriction")}),this._stats=new uoA(this,this._log),this.userManager=new aiA(this.userId,this._log),this._version=qd,this.sdpSemantics=l0,Av(A.sdpSemantics)?te.isUnifiedPlanDefault()&&(this.sdpSemantics=zS):this.sdpSemantics=A.sdpSemantics,this._log.info("sdpSemantics: ".concat(this.sdpSemantics,", netType: ").concat(YoA())),A.iceTransportPolicy&&(this._iceTransportPolicy=A.iceTransportPolicy),this._enableMultiAuxStream=!Av(A.enableMultiAuxStream)&&A.enableMultiAuxStream,this.enableSEI=A.enableSEI&&GM,!Av(A.enableSPC)&&GM&&(this.enableSPC=A.enableSPC),this.preferHW=!!A.preferHW,this.enableVolumeControlInIOS=A.enableVolumeControlInIOS,this._initBusinessInfo(A),this.healthDetector=new boA(this)}get isMainStreamPublished(){var A;return!((A=this.uplinkConnection)==null||!A.isMainStreamPublished)}get isMainAudioPublished(){var A;return!((A=this.uplinkConnection)==null||!A.localMainAudioTrack)}get isAuxStreamPublished(){var A;return!((A=this.uplinkConnection)==null||!A.isAuxStreamPublished)}get hasAuxStream(){return[...this.remotePublishedUserMap.values()].findIndex(A=>A.muteState.hasAuxiliary)>=0}get userMap(){return this.userManager.userMap}get remotePublishedUserMap(){return this.userManager.remotePublishedUserMap}get tinyIdToUserIdMap(){return new Map([...this.userMap.values()].map(A=>[A.tinyId,A.userId]))}get videoCodec(){var A;return((A=this.singlePC)==null?void 0:A.videoCodec)||"h264"}get downlinkVideoCodec(){var A;return((A=this.singlePC)==null?void 0:A.downlinkVideoCodec)||"h264"}join(A,e,o){return KA(this,null,function*(){return this.userManager.mySelfId=this.userId,this.userManager.on("1",a=>{this.emit("peer-join",a)}),this.userManager.on("8",a=>{this.emit("asr-robot-peer-join",a)}),this.userManager.on("9",a=>{this.emit("asr-robot-peer-leave",a)}),this.userManager.on("2",a=>{let{userId:c,reason:d}=a;this.closeDownLinkConnection(c,"remote user exitRoom"),this.emit("peer-leave",{userId:c,reason:d})}),this.userManager.on("3",this.createDownlinkConnection,this),this.userManager.on("5",this.closeDownLinkConnection,this),this.userManager.on("6",a=>{var c=yx(a,[]);F.emit(nA.REMOTE_PUBLISH_STATE_CHANGED,mi({room:this},c)),this.emit("remote-publish-state-changed",mi({},c))}),this.joinParams=A,Nr(A.enableDataChannel)&&(this._enableDataChannel=A.enableDataChannel),new Promise((a,c)=>KA(this,null,function*(){var d,C;this._joinReject=c;try{this.checkDestroy();try{yield Promise.all([this.initialize(),this.initSinglePC()])}catch(S){if(!(S instanceof ai&&S.code===dt.SPC_INITIALIZED_FAILED))return c(S);(d=this.signalChannel)==null||d.destroy(),yield this.initialize()}let y=ko();yield this.doJoin(A,(C=this.singlePC)==null?void 0:C.clientAbility),ii.addSuccessEvent({key:521708,cost:ko()-y}),a(),this._firstPublishedList&&this.onPublishedUserList({data:{userList:this._firstPublishedList}})}catch(y){ii.addFailedEvent({key:521708,error:y}),c(y)}this._joinReject=null}))})}initSinglePC(){return KA(this,null,function*(){if(this.enableSPC&&!this.singlePC){this.singlePC=new Ry({signalChannel:this.signalChannel,room:this,enableDataChannel:this._enableDataChannel}),this.singlePC.on("sei-message",A=>this.emit("sei-message",A)),this.singlePC.on("dump",A=>this.emit("dump",A)),this.singlePC.once("error",()=>this.fallbackToMPC()),this.singlePC.on("data_channel_msg",A=>{let e=new TextDecoder().decode(A.data.data||A.data);try{this.emit("data-channel-message",{data:JSON.parse(e)})}catch{}});try{return yield this.singlePC.initialize()}catch(A){throw this.fallbackToMPC(),new ai({code:dt.SPC_INITIALIZED_FAILED,message:A?.message})}}})}doJoin(A,e){return new Promise((o,a)=>KA(this,null,function*(){var c,d,C,y,S,k,V,J;A.privateMapKey&&(this.privateMapKey=A.privateMapKey),A.latencyLevel&&(this.latencyLevel=A.latencyLevel),this.signalChannel.once(p1,MA=>{this.clearJoinTimeout(),F.emit(nA.JOIN_SIGNAL_CONNECTION_END,{room:this,error:MA}),a(MA)}),Nr((d=(c=this.scheduleResult)==null?void 0:c.config)==null?void 0:d.singlePC)&&GM&&(this.enableSPC=this.scheduleResult.config.singlePC),this.keyPointManager.setConnectionType(this.singlePC?1:2),(!((y=(C=this.scheduleResult)==null?void 0:C.config)!=null&&y.jitterDelay)&&!((k=(S=this.scheduleResult)==null?void 0:S.config)!=null&&k.jitterDelayAux)||!uQ)&&e&&this.playoutDelay&&(this._log.info("set playoutDelay",JSON.stringify(this.playoutDelay)),e.playoutDelay=this.playoutDelay);let gA={roomId:String(A.roomId||A.strRoomId),useStringRoomId:this.useStringRoomId,privateMapKey:this.privateMapKey,latencyLevel:this.latencyLevel,trtcRole:A.role,trtcScene:this.scene==="live"?2:1,sdpSemantics:this.sdpSemantics,version:this._version,ua:navigator&&navigator.userAgent||"",terminalType:Cn(),netType:qf(),bussinessInfo:this._businessInfo,ability:e,sdkType:this._sdkType,userSig:this.userSig,receiveMix:!0,isChorus:!!this.enableChorus,enableNtpAudioFrame:!!this.enableChorus&&$0(),transcription:this._enableDataChannel,downUseVp8:((V=this.scheduleResult.config)==null?void 0:V.downUseVp8)||!1};this._log.debug("join room signal data: ".concat(JSON.stringify(gA)));let CA=5e3;(J=this.scheduleResult.config)!=null&&J.enterRoomTimeout&&this.scheduleResult.config.enterRoomTimeout>=1&&(CA=1e3*this.scheduleResult.config.enterRoomTimeout),this._joinTimeout=window.setTimeout(()=>{a(new ai({code:dt.JOIN_ROOM_FAILED,message:Xo({key:Mo.JOIN_ROOM_TIMEOUT})}))},CA),F.emit(nA.JOIN_SEND_CMD,{room:this}),this.signalChannel.send(this.singlePC?ioA:YiA,gA),this.signalChannel.once(ls.JOIN_ROOM_RESULT,MA=>KA(this,null,function*(){this.clearJoinTimeout();let{code:$A,message:Be,data:Ye,tinyId:ve}=MA.data;F.emit(nA.JOIN_RECEIVED_CMD_RES,{room:this,code:$A}),$A===0?(this._log.info("Join room success, start heartbeat"),ve&&(this.tinyId=ve),this.startHeartbeat(),this.syncUserList(),this.startSyncUserListInterval(),this._firstPublishedList=Ye.publishers,this._iceServersFromJoin=Ye.iceServer?[Ye.iceServer]:[],this.singlePC&&this.singlePC.setIceServers(this.getIceServers()).then(()=>{var yi;(yi=this.singlePC)==null||yi.connect(Qo(mi({},Ye.ability),{useVp8:Ye.ability.useVp8||!!A.useVp8,useH265:Ye.ability.useH265&&!!A.useH265})).catch(()=>{})}),o()):(this._log.error("Join room failed result: ".concat($A," error: ").concat(Be)),a(new ai({code:dt.JOIN_ROOM_FAILED,extraCode:$A,message:Xo({key:Mo.JOIN_ROOM_FAILED,data:{error:Be,code:$A}})})))}))}))}reJoin(){return KA(this,null,function*(){if(this.isJoined)try{this._log.warn("reJoin pending: ".concat(this.joinParams.roomId));let A,e=[];if(this.singlePC&&(this.singlePC.close(),this.singlePC=null,e.push(this.initSinglePC().then(o=>(A=o,o)))),this.signalChannel&&(this.signalChannel.close(),e.push(this.signalChannel.connect())),yield Promise.all(e),yield this.doJoin(Qo(mi({},this.joinParams),{role:this.role==="anchor"?20:21,privateMapKey:this.privateMapKey,latencyLevel:this.latencyLevel}),A),this._log.warn("reJoin success"),sn.logSuccessEvent({userId:this.userId,eventType:Ja.REJOIN}),this.singlePC){let o=a=>{var c;a.state==="CONNECTED"&&((c=this.singlePC)==null||c.off(p_.CONNECTION_STATE_CHANGED,o),this.uplinkConnection instanceof $z&&(this.uplinkConnection.installEvents(),this.uplinkConnection.onSinglePCReconnected()),this.remotePublishedUserMap.forEach(d=>{d.installEvents(),d.onSinglePCReconnected()}))};this.singlePC.on(p_.CONNECTION_STATE_CHANGED,o),this.checkConnectionsToReconnect(),this.uplinkConnection instanceof M1&&!this.uplinkConnection.getIsReconnecting()&&this.uplinkConnection.startReconnection()}}catch(A){this._log.warn("reJoin fail ".concat(A)),this.reset(),sn.logFailedEvent({userId:this.userId,eventType:Ja.REJOIN,error:A}),this.emit("error",new ai({code:dt.JOIN_ROOM_FAILED,message:Xo({key:Mo.REJOIN_ROOM_FAILED,data:{roomId:this.joinParams.roomId}})}))}else this._log.warn("reJoin abort")})}initialize(A){return KA(this,null,function*(){var e,o;if(!(A!=null&&A.isPrelink)&&this.prelinkPromise&&(yield this.prelinkPromise),(e=this.signalChannel)!=null&&e.isPrelinkValid(this.sdkAppId,this.userId,this.userSig))return this._log.info("reuse prelink signal channel"),void this.signalChannel.consumePrelink();(o=this.signalChannel)!=null&&o.prelink&&this.signalChannel.close();let a,{mainUrl:c,backupUrl:d}=this.getSignalChannelUrl(),C=this.signalChannel||function(S){return[...y1.values()].find(V=>V.room.userId===S&&!V.room.isJoined)||null}(this.userId),y=!!(C&&C.isConnected&&C.keepAlive&&C.userId===this.userId);return Array.isArray(this.scheduleResult.domains)&&this.scheduleResult.domains.length>0&&(a=this.scheduleResult.domains[0]),this._log.info("".concat(y?"reuse":"setup"," signal channel")),y?(C.url=c,C.backupUrl=d,C.room.setSignalChannel(null),C.room=this,this.signalChannel=C):(C&&C.close(),this.signalChannel=new Nz({sdkAppId:this.sdkAppId,userId:this.userId,userSig:this.userSig,url:c,backupUrl:d,room:this,signalDomainWhenUnifiedProxy:this.proxy_unified?a:void 0,prelink:A?.isPrelink}),this._customMessageManager=new xoA(this,this.signalChannel),this._customMessageManager.on("message",S=>{this.emit("custom-message",S)})),this.networkQuality||(this.networkQuality=new Uz({signalChannel:this.signalChannel,room:this}),this.networkQuality.on(Uz.EVENT_NETWORK_QUALITY,S=>{var k;this.emit("network-quality",S),(k=this.singlePC)==null||k.detectTCPAndUDP(S)})),rd(this,this.signalChannel).add(dj,S=>{F.emit(nA.SIGNAL_CONNECTION_STATE_CHANGED,mi({room:this},S)),this.emit("signal-connection-state-changed",S)}).add(OiA,S=>{this.reset(),this.emit("error",S)}).add(ls.PEER_JOIN,S=>{let{srcTinyId:k,userId:V,role:J,fromType:gA}=S.data.data;this.userManager.addUser({userId:V,tinyId:k,role:J,fromType:gA})}).add(ls.PEER_LEAVE,S=>{let{userId:k,reason:V=0}=S.data.data;this.userManager.deleteUser(k,V)}).add(ls.UPDATE_REMOTE_MUTE_STAT,S=>{this._lastHeartBeatTime>0&&Date.now()-this._lastHeartBeatTime>=1e4&&this.doHeartbeat(),this.onPublishedUserList(S.data)}).add(ls.CLIENT_BANNED,S=>{let k=S.data.data,{reason:V}=k;if(sn.uploadEvent({log:"stat-banned:".concat(V),userId:this.userId}),V==="user_time_out")return this._log.warn("".concat(V," last heart beat time: ").concat(this._lastHeartBeatTime," interval: ").concat(Date.now()-this._lastHeartBeatTime,", visibility: ").concat(document.visibilityState)),void this.reJoin();this._log[V==="kick"?"error":"info"]("user was banned because of [".concat(V,"]")),this.reset(),this.emit("banned",{reason:V})}).add(ls.SEND_SWITCH_ROOM_SUBED_REQ,S=>{if(!this.singlePC)return;let{subList:k}=S.data.data;this._log.info("auto subscribe ".concat(zd(k,{keysToInclude:["userId"]}))),k.forEach(V=>{this.singlePC.autoSubscribedUserMap.set(V.userId,V)}),this.resolveSwitchRoomSubedReq()}).add(ls.FALLBACK_CODEC,S=>KA(this,null,function*(){var k,V,J,gA,CA;let MA=S.data.data;((k=MA.videoControlInfo)==null?void 0:k.enableH265Enc)===0&&((V=this.singlePC)==null?void 0:V.videoCodec)==="h265"&&(this._log.warn("fallback codec enableH265Enc: ".concat((J=MA.videoControlInfo)==null?void 0:J.enableH265Enc)),ii.addCount({key:513e3}),yield(gA=this.singlePC)==null?void 0:gA.switchVideoEncoder("h264"),yield(CA=this.uplinkConnection)==null?void 0:CA.sendMediaSettings())})),this.signalChannel.once(Dz,S=>{this.tinyId=S.signalInfo.tinyId,F.emit(nA.JOIN_SIGNAL_CONNECTION_END,{room:this})}),F.emit(nA.JOIN_SIGNAL_CONNECTION_START,{room:this}),yield this.signalChannel.connect(),y&&F.emit(nA.JOIN_SIGNAL_CONNECTION_END,{room:this}),y})}setSignalChannel(A){this.signalChannel=A,A||kn(this)}leave(){return KA(this,null,function*(){var A;try{yield this.doHeartbeat()}catch{}this._log.info("leave() => leaving room"),F.emit(nA.LEAVE_SEND_CMD,{room:this}),(A=this.signalChannel)==null||A.send(ViA),this.switchRoomSubedReq=void 0,this._changeBigSmallRecords.clear()})}clearNetworkQuality(){this.networkQuality&&(this.networkQuality.stop(),delete this.networkQuality)}closeConnections(){this.remotePublishedUserMap.forEach(A=>{this.closeDownLinkConnection(A.userId,"you exitRoom")})}clearJoinTimeout(){clearTimeout(this._joinTimeout),this._joinTimeout=-1}startHeartbeat(){this._heartbeat===-1&&(this._heartbeat=Gr.run("ric",this.doHeartbeat.bind(this),{delay:2e3}),this.enableChorus&&this.startUpdateNTPTime())}stopHeartbeat(){this._heartbeat!==-1&&(this._log.info("stopHeartbeat"),Gr.clearTask(this._heartbeat),this._heartbeat=-1,this._lastHeartBeatTime=-1)}doHeartbeat(){return KA(this,null,function*(){var A;let e=this.badCaseDetector.getMonitorFreeze(),o=yield this._stats.getStatsReport({uplinkConnection:this.uplinkConnection,downlinkConnections:this.remotePublishedUserMap,freezeMap:e});this.badCaseDetector.resetMonitor();let a=(A=this.signalChannel)!=null&&A.isConnected?function(d){if(u_.has(d)){let C=u_.get(d).map(y=>({uint32_event_id:y.eventId,uint64_date:y.timestamp,str_userid:y.remoteUserId,uint32_param1:y.param1,uint32_param2:y.param2,uint32_video_stream_type:y.streamType}));return u_.delete(d),C}return[]}(this.userId):[],c=Qo(mi({str_sdk_version:t0,uint64_datetime:new Date().getTime(),msg_user_info:{str_identifier:this.userId,uint64_tinyid:this.tinyId},msg_event_msg:a,str_acc_ip:this.getSignalInfo().relayIp,str_client_ip:this.getSignalInfo().clientIp},o),{msg_device_info:mi({uint32_terminal_type:15,str_device_name:rQ(),str_os_version:"",uint32_net_type:qf()},o.msg_device_info)});if(this.heartbeatReport=c,this.heartbeatCount++,F.emit(nA.HEARTBEAT_REPORT,{room:this,report:c}),this.signalChannel){if(this.signalChannel.isConnected){this.signalChannel.send(JiA,c);let d=Date.now();this._lastHeartBeatTime>0&&d-this._lastHeartBeatTime>1e4&&this._log.warn("heartbeat took ".concat(d-this._lastHeartBeatTime)),this._lastHeartBeatTime=d,this.signalChannel.isOnline||(this._log.warn("signal channel is not online"),this.signalChannel.startReconnection())}this.emit("heartbeat-report",Qo(mi({},c),{bytes_sent:this._stats.totalBytesSent+this.signalChannel.bytesSent,bytes_received:this._stats.totalBytesReceived+this.signalChannel.bytesReceived}))}!this._isRelayChanged&&this.isRelayMaybeFailed()&&(this.reJoin(),this._isRelayChanged=!0)})}onPublishedUserList(A){if(!this.isJoined)return;let e=!1,o=A.data.userList||[],a=A.data.mixRobotList||[],c=[];for(let C of o){if(C.flag===vb)continue;let{userId:y,srcTinyId:S,flag:k,fromType:V}=C;y===this.userId&&(e=!0,this.uplinkConnection&&(this.uplinkConnection.flag=k),this.localPublishFlag!==k&&(this.localPublishFlag=k,this.emit("local-publish-flag-changed",k))),c.push({userId:y,tinyId:S,flag:k,fromType:V})}let d=[...a.map(C=>{let{userId:y,srcTinyId:S,flag:k,mixUserList:V,fromType:J}=C;return{userId:y,tinyId:S,flag:k,isRobot:!0,mixUserList:V,fromType:J}}),...c];d.forEach(C=>{let{userId:y}=C,S=this.remotePublishedUserMap.get(y);S&&this.checkSubscribeBigSmallVideo(S)}),A.data.fakeMixUser&&(A.data.fakeMixUser.tinyId=A.data.fakeMixUser.srcTinyId,d.push(A.data.fakeMixUser)),F.emit(nA.RECEIVED_PUBLISHED_USER_LIST,{room:this,publishedUserList:d}),e||(this.localPublishFlag=0,this.emit("local-publish-flag-changed",0)),this.userManager.setRemotePublishedUserList(d)}closeUplink(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"you unpublished";this.uplinkConnection&&(this.localTracks.size>0&&this.uplinkConnection.doUnpublish().catch(()=>{}),this.uplinkConnection.close(A),A==="you exitRoom"&&(this.uplinkConnection.destroy(),this.uplinkConnection=null),this.uplinkConnection instanceof M1&&(this.uplinkConnection=null)),this.localTracks.forEach(e=>e.unpublish()),this.localTracks.clear()}createDownlinkConnection(A){let{userId:e,tinyId:o,flag:a,isRobot:c,fromType:d}=A,C=new(this.singlePC?OoA:kz)({userId:e,tinyId:o,room:this,signalChannel:this.signalChannel,enableSEI:this.enableSEI,flag:a,isRobot:c,fromType:d});this.userManager.addRemotePublishedUser(C),this.installDownlinkEvents(C,e),this.emit("remote-published",C)}closeDownLinkConnection(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"remote user unpublished",o=this.remotePublishedUserMap.get(A);o&&(o.close(e),this.emit("remote-unpublished",o))}installDownlinkEvents(A,e){A.on("error",o=>{let a=o.getCode();a!==dt.ICE_TRANSPORT_ERROR&&(a===dt.DOWNLINK_RECONNECTION_FAILED&&this.closeDownLinkConnection(e),this.emit("error",o))}),A.on("connection-state-changed",o=>{this.emit("media-connection-state-changed",Qo(mi({},o),{userId:A.userId}))})}startSyncUserListInterval(){this._syncUserListInterval===-1&&(this._syncUserListInterval=Gr.run("ric",this.syncUserList.bind(this)))}stopSyncUserListInterval(){Gr.clearTask(this._syncUserListInterval),this._syncUserListInterval=-1}syncUserList(){return this.getUserList().then(A=>{this.userManager.setUserList(A)}).catch(A=>{this._log.debug("sync user list failed: ".concat(A))})}getUserList(){var A;return(A=this.signalChannel)!=null&&A.isConnected?this.signalChannel.sendWaitForResponse({command:AoA,responseCommand:ls.USER_LIST_RES,enableLog:!1,timeout:2e3}).then(e=>{let{data:o}=e,{code:a,message:c}=o;if(a===0)return(o.data&&o.data.userList||[]).map(d=>{let{userId:C,srcTinyId:y,role:S,fromType:k}=d;return{userId:C,tinyId:y,role:S,fromType:k}});throw Xo({key:Mo.SIGNAL_RESPONSE_FAILED,data:{signalResponse:ls.USER_LIST_RES,code:a,message:c}})}):Promise.reject("not connected")}getAllConnections(){let A=[...this.remotePublishedUserMap.values()];return this.uplinkConnection&&A.push(this.uplinkConnection),A}isRelayMaybeFailed(){if(this.signalChannel&&!this.signalChannel.isOnline||!Gz)return!1;if(this.singlePC)return this.singlePC.reconnectionCount>6;let A=this.getAllConnections();if(A.length===0)return!1;for(let e=0;e{if(e instanceof tm&&!e.getIsReconnecting()){let o=e.getPeerConnection();o&&o.connectionState===Co.CLOSED&&(this._log.warn("[".concat(e.getUserId(),"] pc is closed but not reconnect")),e.startReconnection())}})}fallbackToMPC(){return KA(this,null,function*(){var A;if(this._log.warn("fallback to multi pc"),sn.uploadEvent({log:"stat-fallback",userId:this.userId}),this.enableSPC=!1,(A=this.singlePC)==null||A.close(),this.singlePC=null,this.isJoined&&(yield this.reJoin()),this.uplinkConnection){let e=this.uplinkConnection;this.uplinkConnection=new M1({userId:this.userId,tinyId:this.tinyId,room:this,signalChannel:this.signalChannel,enableSEI:this.enableSEI}),e.isMainStreamPublished&&(yield this.uplinkConnection.publish({localAudioTrack:e.localMainAudioTrack,localVideoTrack:e.localMainVideoTrack,isAuxiliary:!1})),e.isAuxStreamPublished&&(yield this.uplinkConnection.publish({localAudioTrack:e.localAuxAudioTrack,localVideoTrack:e.localAuxVideoTrack,isAuxiliary:!0})),e.close()}for(let e of[...this.remotePublishedUserMap.values()]){let o=new kz({userId:e.userId,tinyId:e.tinyId,room:this,signalChannel:this.signalChannel,enableSEI:this.enableSEI,flag:e.flag,remoteAudioTrack:e.remoteAudioTrack,remoteVideoTrack:e.remoteVideoTrack,remoteAuxiliaryTrack:e.remoteAuxiliaryTrack});this.installDownlinkEvents(o,e.userId),this.remotePublishedUserMap.set(e.userId,o),e.isMainStreamSubscribed&&(yield o.subscribe(e.subscribeState,"main")),e.isAuxStreamSubscribed&&(yield o.subscribe(e.subscribeState,"auxiliary"))}})}destroy(){this.isDestroyed||(this.signalChannel&&(this._log.info("destroying SignalChannel"),this.signalChannel.close(),this.signalChannel=null),super.destroy(),this._joinReject&&(this._joinReject(new ai({code:dt.INVALID_OPERATION,message:Xo({key:Mo.CLIENT_DESTROYED,data:{funName:"join"}})})),this.clearJoinTimeout(),this.reset()),this.firewallDetector.destroy(),this.removeAllListeners(),this.healthDetector.destroy(),Gr.clearTask(this._audioVolumeIntervalId))}switchRole(A){return KA(this,null,function*(){this.role!==A&&(A==="audience"&&this.uplinkConnection&&this.closeUplink("you switch role to audience"),yield this.doSwitchRole(A))})}doSwitchRole(A){let e={command:eoA,data:{role:A==="anchor"?20:21,privateMapKey:this.privateMapKey,latencyLevel:this.latencyLevel},responseCommand:ls.SWITCH_ROLE_RES,retries:1};return this._log.info("switchRole signal data: ".concat(JSON.stringify(e.data))),this.signalChannel.sendWaitForResponseWithRetry(e).then(o=>{let{code:a,message:c}=o.data;if(a!==0)throw new ai({code:dt.SWITCH_ROLE_FAILED,message:Xo({key:Mo.SWITCH_ROLE_FAILED,data:{message:c,code:a}})});this.role=A}).catch(o=>{throw o instanceof ai&&o.getCode()===dt.API_CALL_TIMEOUT&&(o=new ai({code:dt.SWITCH_ROLE_FAILED,message:Xo({key:Mo.SWITCH_ROLE_TIMEOUT})})),this._log.error(o),o})}subscribeDataChannel(){return KA(this,null,function*(){if(this.remotePublishedUserMap.size===0)return;let A=[...this.remotePublishedUserMap.values()].filter(e=>e.fromType===d0);this._log.info("subscribeDataChannel",A.map(e=>e.userId)),yield Promise.all(A.map(e=>KA(this,null,function*(){try{yield e.subscribe(Qo(mi({},e.subscribeState),{datachannel:!0}),"main")}catch(o){this._log.error("subscribeDataChannel failed:",e.userId,o)}})))})}unsubscribeDataChannel(){return KA(this,null,function*(){if(this.remotePublishedUserMap.size===0)return;let A=[...this.remotePublishedUserMap.values()].filter(e=>e.fromType===d0);this._log.info("unsubscribeDataChannel",A.map(e=>e.userId)),yield Promise.all(A.map(e=>e.unsubscribeDataChannel()))})}_initUplinkConnection(){this.uplinkConnection=this.singlePC?new $z({userId:this.userId,tinyId:this.tinyId,room:this}):new M1({userId:this.userId,tinyId:this.tinyId,room:this,signalChannel:this.signalChannel,enableSEI:this.enableSEI}),this.uplinkConnection.on("connection-state-changed",A=>{this.emit("media-connection-state-changed",Qo(mi({},A),{userId:this.userId}))}),this.uplinkConnection.on("error",A=>{let e=A.getCode();e!==dt.ICE_TRANSPORT_ERROR&&(e===dt.UPLINK_RECONNECTION_FAILED&&this.closeUplink(),this.emit("error",A))})}publish(A){return KA(this,null,function*(){var e;this.uplinkConnection||this._initUplinkConnection();let o="".concat(A.streamType," ").concat(A.isAudio&&A.isScreen?"screen":"").concat(A.kind);this._log.info("publish() => ".concat(o)),yield(e=this.singlePC)==null?void 0:e.waitForPeerConnectionConnected(),yield this.uplinkConnection.publish({localAudioTrack:A instanceof HM?A:null,localVideoTrack:A instanceof dQ?A:null,isAuxiliary:A.streamType==="auxiliary"})})}unpublish(A){return KA(this,null,function*(){if((this.scene!=="live"||this.role==="anchor")&&(this.isMainStreamPublished||this.isAuxStreamPublished)&&this.uplinkConnection){try{let e="".concat(A.streamType," ").concat(A.isAudio&&A.isScreen?"screen":"").concat(A.kind);this._log.info("unpublish() => ".concat(e)),yield this.uplinkConnection.unpublish({localAudioTrack:A instanceof HM?A:null,localVideoTrack:A instanceof dQ?A:null})}catch{}this.localTracks.size===0&&this.closeUplink("you unpublished")}})}addTrack(A){if(!this.uplinkConnection||!A.mediaTrack)return Promise.resolve();let e=this.uplinkConnection.addTrack(A);return A.publish(this,e),e}removeTrack(A){return this.uplinkConnection&&A.mediaTrack?(A.unpublish(),this.uplinkConnection.removeTrack(A)):Promise.resolve()}replaceTrack(A){return this.uplinkConnection&&A.mediaTrack&&b2()?this.uplinkConnection.replaceTrack(A).then(e=>{e&&F.emit(nA.LOCAL_TRACK_REPLACED,{track:A})}):Promise.resolve()}setBandWidth(A){return KA(this,null,function*(){this.uplinkConnection&&(yield this.uplinkConnection.setBandwidth(A),yield this.uplinkConnection.sendMediaSettings())})}enableSmall(A){return KA(this,null,function*(){if(!this.uplinkConnection||!this.uplinkConnection.localMainVideoTrack)return Promise.resolve();A&&this.uplinkConnection.localMainVideoTrack.small&&(yield this.setBandWidth({type:YA.VIDEO,videoType:YA.SMALL,bandwidth:this.uplinkConnection.localMainVideoTrack.small.bitrate})),yield this.uplinkConnection.enableSmall(A)})}subscribe(){for(var A=arguments.length,e=new Array(A),o=0;o!C.isSubscribed),e.length===0)return;let{userId:a}=e[0],c=this.remotePublishedUserMap.get(a);if(!c)return;let d=e.find(C=>C.mediaType===2)?"auxiliary":"main";try{let C=mi({},c.subscribeState);e.forEach(S=>{switch(S.mediaType){case 1:C.audio=!0;break;case 4:C.video=!0;break;case 8:C.smallVideo=!0;break;case 2:C.auxiliary=!0}});let y=this._changeBigSmallRecords.get(a);y&&y.options.smallVideo&&c.muteState.hasSmall&&C.video&&(C.video=!1,C.smallVideo=!0),F.emit(nA.SUBSCRIBE_START,{room:this,streamType:d,remotePublishedUser:c,subscribeState:C}),this._log.info("subscribe() => ".concat(a," ").concat(d," ").concat(e.map(S=>S.strMediaType).join(",")," [").concat(pj(C),"] prev: [").concat(pj(c.subscribeState),"]")),yield c.subscribe(C,d),this._log.info("subscribe ".concat(a," ").concat(d," done"));for(let S of e)S.mediaTrack||(yield S.waitHasMediaTrack());F.emit(nA.SUBSCRIBE_SUCCESS,{room:this,streamType:d,remotePublishedUser:c})}catch(C){let y=C instanceof ai?C.getCode():dt.UNKNOWN,S=C;throw C instanceof ai?y===dt.REMOTE_STREAM_NOT_EXIST&&(S=new ai({code:dt.API_CALL_ABORTED,message:Xo({key:Mo.API_CALL_ABORTED,data:{message:C.message,userId:a,streamType:d}})}),this._log.warn(S)):(S=new ai({code:y,message:Xo({key:Mo.SUBSCRIBE_FAILED,data:{message:C.message,userId:a,streamType:d}})}),this._log.error(S)),S}})}unsubscribe(){for(var A=arguments.length,e=new Array(A),o=0;oC.mediaType===2)?"auxiliary":"main";this._log.info("unsubscribe() => ".concat(a," ").concat(d," ").concat(e.map(C=>C.strMediaType).join(",")));try{yield c.unsubscribe({remoteTracks:e,streamType:d})}catch(C){this._log.warn("unsubscribe() => failed ".concat(C))}e.forEach(C=>{C.unsubscribe(),C.mediaType===8&&C.setMediaType(4)}),F.emit(nA.UNSUBSCRIBE_SUCCESS,{room:this,streamType:d,remotePublishedUser:c})})}setEncodedDataProcessingListener(A){throw new Error("Method not implemented.")}enableAudioVolumeEvaluation(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:2e3,e=arguments.length>1?arguments[1]:void 0;if(A<=0)return this._enableAudioVolumeEvaluation=!1,void Gr.clearTask(this._audioVolumeIntervalId);A=Math.floor(Math.max(A,100)),F.emit(nA.AUDIO_LEVEL_INTERVAL,{interval:A}),this._audioVolumeIntervalId&&Gr.clearTask(this._audioVolumeIntervalId),this._enableAudioVolumeEvaluation=!0,this._audioVolumeIntervalId=Gr.run("intervalInWorker",()=>{var o;H2.isRunning?this.stopUpdateAudioLevelFromSenderStat():this.updateAudioLevelFromSenderStat(A,e);let a=[];(o=this.remotePublishedUserMap)==null||o.forEach(c=>{if(c.muteState.hasAudio){!H2.isRunning&&c.muteState.audioAvailable&&c.remoteAudioTrack.isSubscribed?this.updateDownlinkAudioLevelFromReceiver(c):c.remoteAudioTrack.volume=0;let d=Math.floor(100*c.remoteAudioTrack.getAudioLevel());a.push({userId:c.userId,volume:d,floatVolume:c.remoteAudioTrack.getInternalAudioLevel()})}}),this.emit("audio-volume",a)},{delay:A,backgroundTask:e})}updateAudioLevelFromSenderStat(A,e){return KA(this,null,function*(){var o;if(!this.uplinkConnection||!this.uplinkConnection.localMainAudioTrack||this._updateAudioLevelTaskId!==-1)return;let a=(o=this.uplinkConnection.getPeerConnection())==null?void 0:o.getSenders()[0];if(!a)return;let c=Math.max(A,500);this._log.warn("updateAudioLevelFromSenderStat ".concat(c)),this._updateAudioLevelTaskId=Gr.run("intervalInWorker",()=>KA(this,null,function*(){if(!this.uplinkConnection||!this.uplinkConnection.localMainAudioTrack)return void this.stopUpdateAudioLevelFromSenderStat();let d=yield a.getStats();if(this._updateAudioLevelTaskId<0)return;let{localMainAudioTrack:C}=this.uplinkConnection;d.forEach(y=>{y.type==="media-source"&&y.audioLevel&&(C.volume=y.audioLevel)})}),{delay:c,backgroundTask:e})})}stopUpdateAudioLevelFromSenderStat(){var A;this._updateAudioLevelTaskId!==-1&&(this._log.warn("stopUpdateAudioLevelFromSenderStat"),Gr.clearTask(this._updateAudioLevelTaskId),this._updateAudioLevelTaskId=-1,(A=this.uplinkConnection)!=null&&A.localMainAudioTrack&&(this.uplinkConnection.localMainAudioTrack.volume=0))}updateDownlinkAudioLevelFromReceiver(A){var e;let{audioReceiver:o}=A;if(!Pk||!o)return;let a=(e=o.getSynchronizationSources()[0])==null?void 0:e.audioLevel;bn(a)?A.remoteAudioTrack.volume=Math.min(2*a,1):o.getStats().then(c=>{c.forEach(d=>{d.type==="inbound-rtp"&&bn(d.audioLevel)&&(A.remoteAudioTrack.volume=d.audioLevel)})})}getLocalAudioStats(){return KA(this,null,function*(){var A;let e={};return e[this.userId]={bytesSent:0,packetsSent:0,audioLevel:0},(A=this.uplinkConnection)!=null&&A.localMainAudioTrack&&(e[this.userId]=this.uplinkConnection.localMainAudioTrack.stat),e})}getLocalVideoStats(){return KA(this,null,function*(){var A,e;let o={};return o[this.userId]=((e=(A=this.uplinkConnection)==null?void 0:A.localMainVideoTrack)==null?void 0:e.stat)||{bytesSent:0,packetsSent:0,framesEncoded:0,framesSent:0,frameWidth:0,frameHeight:0,fpsCapture:0},o})}getTransportStats(){return KA(this,null,function*(){let A={rtt:0,downlinksRTT:{}};if(this.uplinkConnection){let e=yield this._stats.getSenderStats(this.uplinkConnection);A.rtt=e.rtt}for(let[,e]of this.remotePublishedUserMap){let o=yield this._stats.getReceiverStats(e);A.downlinksRTT[o.userId]=o.rtt}return A})}getRemoteVideoStats(A){return KA(this,null,function*(){let e={};for(let[o,a]of this.remotePublishedUserMap)A==="main"&&a.muteState.hasVideo&&(e[o]=a.remoteVideoTrack.stat),A==="auxiliary"&&a.muteState.hasAuxiliary&&(e[o]=a.remoteAuxiliaryTrack.stat);return e})}getRemoteAudioStats(){return KA(this,null,function*(){let A={};for(let[e,o]of this.remotePublishedUserMap)o.muteState.hasAudio&&(A[e]=o.remoteAudioTrack.stat);return A})}setTurnServer(A,e){this._log.info("set turn server: ".concat(JSON.stringify(A)," ").concat(e||""));let o=[];Array.isArray(A)?A.forEach(a=>o.push(Hd.getTurnServer(a))):Hd.isPlainObject(A)&&o.push(Hd.getTurnServer(A)),this._turnServers=o,e&&(this._iceTransportPolicy=e)}sendStartMixTranscode(A){return this.signalChannel.sendWaitForResponse({command:WiA,data:A,timeout:5e3,responseCommand:ls.START_MIX_TRANSCODE_RES,commandDesc:"startMixTranscode"}).catch(e=>{if(e.code!==dt.API_CALL_ABORTED)throw e})}sendStopMixTranscode(A){return this.signalChannel.sendWaitForResponse({command:ziA,data:A,timeout:5e3,responseCommand:ls.STOP_MIX_TRANSCODE_RES,commandDesc:"stopMixTranscode"}).catch(e=>{if(e.code!==dt.API_CALL_ABORTED)throw e})}sendStartPublishCDN(A){let e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];return this.signalChannel.sendWaitForResponse({command:e?HiA:KiA,data:A,timeout:5e3,responseCommand:e?ls.START_PUBLISH_TENCENT_CDN_RES:ls.START_PUBLISH_GIVEN_CDN_RES,commandDesc:"startPublishCDN"}).catch(o=>{if(o.code!==dt.API_CALL_ABORTED)throw o})}sendStopPublishCDN(A){let e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];return this.signalChannel.sendWaitForResponse({command:e?qiA:jiA,data:A,timeout:5e3,responseCommand:e?ls.STOP_PUBLISH_TENCENT_CDN_RES:ls.STOP_PUBLISH_GIVEN_CDN_RES,commandDesc:"stopPublishCDN"}).catch(o=>{if(o.code!==dt.API_CALL_ABORTED)throw o})}sendStartPushStreamToRoom(A){return this.signalChannel.sendWaitForResponse({command:ZiA,data:A,timeout:5e3,responseCommand:ls.START_PUBLISH_CDN_STREAM_RES,commandDesc:"startPublishCDNStream"}).catch(e=>{if(e.code!==dt.API_CALL_ABORTED)throw e})}sendUpdatePushStreamToRoom(A){return this.signalChannel.sendWaitForResponse({command:XiA,data:A,timeout:5e3,responseCommand:ls.UPDATE_PUBLISH_CDN_STREAM_RES,commandDesc:"updatePublishCDNStream"}).catch(e=>{if(e.code!==dt.API_CALL_ABORTED)throw e})}sendStopPushStreamToRoom(A){return this.signalChannel.sendWaitForResponse({command:$iA,data:A,timeout:5e3,responseCommand:ls.STOP_PUBLISH_CDN_STREAM_RES,commandDesc:"stopPublishCDNStream"}).catch(e=>{if(e.code!==dt.API_CALL_ABORTED)throw e})}sendAbilityStatus(A){var e;(e=this.signalChannel)==null||e.sendWaitForResponse({command:ooA,data:A,timeout:5e3,responseCommand:ls.ABILITY_STATUS_REPORT_RESULT,commandDesc:"ability status report"}).catch(o=>{})}getIceServers(A){var e,o;return this._turnServers.length>0?this._turnServers:(e=this.scheduleResult.iceServers)!=null&&e.length?this.scheduleResult.iceServers:A!=null&&A.length?A:(o=this._iceServersFromJoin)!=null&&o.length?this._iceServersFromJoin:[]}getIceTransportPolicy(){return this.forceRelay?"relay":this._iceTransportPolicy||this.scheduleResult.iceTransportPolicy||"all"}getLogger(){return this._log}enableAIVoice(){throw new Error("Method not implemented.")}getSignalChannelUrl(){let A={mainUrl:"",backupUrl:""},e=Hd.getEnv();return e?(A.mainUrl="wss://".concat(Hd.getTestSignalDomain(e)),A.backupUrl=A.mainUrl):this.proxy_ws?(A.mainUrl=this.proxy_ws,A.backupUrl=A.mainUrl):this.proxy_unified?(A.mainUrl="wss://".concat(this.proxy_unified),A.backupUrl=A.mainUrl):Array.isArray(this.scheduleResult.domains)&&this.scheduleResult.domains.length>0&&(A.mainUrl="wss://".concat(this.scheduleResult.domains[0]),A.backupUrl=A.mainUrl,this.scheduleResult.domains[1]&&(A.backupUrl="wss://".concat(this.scheduleResult.domains[1]))),A}getSignalInfo(){var A;return((A=this.signalChannel)==null?void 0:A.getSignalInfo())||{clientIp:"",relayIp:""}}reset(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.stopSyncUserListInterval(),this.stopHeartbeat(),this.closeConnections(),this.clearNetworkQuality(),this.closeUplink("you exitRoom"),this.signalChannel&&(A&&this.signalChannel.keepAlive&&this.signalChannel.isConnected?this.signalChannel.stopKeepAliveIn(3600):(this.signalChannel.close(),this.setSignalChannel(null))),this.localPublishFlag=0,this.heartbeatCount=0,this._stats.reset(),this.userManager.clear(),this.userManager.removeAllListeners(),this.singlePC&&(this.singlePC.close(),this.singlePC=null),this.scheduleResult={domains:null,iceServers:null,iceTransportPolicy:null,trtcAutoConf:null},this.clearPrelinkTimeout(),this.prelinkPromise=null}prelink(A,e,o,a,c,d){return KA(this,null,function*(){var C;if(this.isJoined)throw new ai({code:dt.INVALID_OPERATION,message:"already joined room"});if(!c&&!d)throw new ai({code:dt.INVALID_OPERATION,message:"roomId or strRoomId is required"});if((C=this.signalChannel)!=null&&C.prelink){if(this.signalChannel.isConnecting)return void this._log.warn("prelink is connecting, please wait");if(this.signalChannel.isConnected)return void this._log.warn("prelink is already connected")}return this.userId=e,this.sdkAppId=A,this.userSig=o,this.roomId=String(c||d),this.useStringRoomId=!(!d||c),this._log.setSdkAppId(this.sdkAppId),this._log.setUserId(this.userId),this.prelinkPromise=Promise.race([this.doPrelink(A,e,o,a,c,d),new Promise((y,S)=>{this.prelinkTimeoutId=setTimeout(()=>{S(new ai({code:dt.INVALID_OPERATION,message:"prelink timeout after ".concat(this.PRELINK_TIMEOUT,"ms")}))},this.PRELINK_TIMEOUT)})]).then(()=>{this.clearPrelinkTimeout()}).catch(y=>{throw this.clearPrelinkTimeout(),this.closePrelink().catch(()=>{}),y}),this.prelinkPromise})}doPrelink(A,e,o,a,c,d){return KA(this,null,function*(){var C,y,S;try{if(!this.proxy_ws&&!this.proxy_wt&&!this.scheduleResult.domains&&!Hd.getEnv()&&(yield this.schedule({sdkAppId:A,userId:e,userSig:o,roomId:c,strRoomId:d,role:20,privateMapKey:null,businessInfo:null,streamId:null,userDefineRecordId:null},a)),(C=this.scheduleResult.config)==null||!C.prelink)throw new ai({code:dt.INVALID_OPERATION,message:"prelink failed: your sdkAppId is not supported, please contact us [https://trtc.io/contact] to enable it."});yield this.initialize({isPrelink:!0}),(y=this.signalChannel)==null||y.markPrelinkConnected({sdkAppId:A,userId:e,userSig:o}),(S=this.signalChannel)==null||S.stopPrelinkIn(this.PRELINK_EXPIRED_TIME/1e3),this._log.info("prelink success")}catch(k){throw this._log.error("prelink failed",k),k}})}clearPrelinkTimeout(){this.prelinkTimeoutId&&(clearTimeout(this.prelinkTimeoutId),this.prelinkTimeoutId=null)}closePrelink(){return KA(this,null,function*(){var A;if(this.isJoined)throw new ai({code:dt.INVALID_OPERATION,message:"close prelink failed: has joined room"});if((A=this.signalChannel)!=null&&A.prelink){if(this.signalChannel.keepAlive)return void this._log.info("skip close prelink: use keepAlive");this.reset()}})}checkSubscribeBigSmallVideo(A){return KA(this,null,function*(){let{subscribeState:e,userId:o,muteState:{hasSmall:a,hasVideo:c}}=A;if(!a&&!c||!e.video&&!e.smallVideo)return;let d=this._changeBigSmallRecords.get(o);if(!d||d.isSubscribing||d.reSubscribeCount<=0)return;let{options:C,reSubscribeCount:y}=d;if(C.video&&e.video||C.smallVideo&&e.smallVideo&&a)return;let S={audio:A.remoteAudioTrack.isSubscribed||A.remoteAudioTrack.isSubscribing,auxiliary:A.remoteAuxiliaryTrack.isSubscribed||A.remoteAuxiliaryTrack.isSubscribing,video:C.video,smallVideo:C.smallVideo,datachannel:A.subscribeState.datachannel};try{if(!a&&S.smallVideo&&(S.video=!0,S.smallVideo=!1),S.smallVideo===e.smallVideo&&S.video===e.video)return;d.isSubscribing=!0,d.reSubscribeCount=y-1,yield A.subscribe(S,"main"),A.remoteVideoTrack.setMediaType(S.smallVideo?8:4),this._log.info("change [".concat(o,"] to ").concat(S.smallVideo?"small":"big"," video successfully. count ").concat(XS-d.reSubscribeCount,".")),d.isSubscribing=!1,d.reSubscribeCount=XS}catch(k){this._log.info("change [".concat(o,"] to ").concat(S.smallVideo?"small":"big"," video failed. count ").concat(XS-d.reSubscribeCount,". reason: ").concat(k)),d.isSubscribing=!1,d.reSubscribeCount===0&&this._changeBigSmallRecords.delete(o)}})}changeType(A,e){let o={options:{video:!A,smallVideo:A},isSubscribing:!1,reSubscribeCount:XS};this._changeBigSmallRecords.set(e.userId,o),this._log.info("set [".concat(e.userId,"] video prefer type: ").concat(A?"small":"big")),this.emit("subscribe-small-video-changed",{userId:e.userId,isSmall:A});let a=this.remotePublishedUserMap.get(e.userId);a&&this.checkSubscribeBigSmallVideo(a)}get smallStreamConfig(){return this._smallStreamConfig}_initBusinessInfo(A){this._businessInfo=A.businessInfo;let e={};if(t8(A.businessInfo)&&(e=JSON.parse(A.businessInfo)),!Av(A.pureAudioPushMode)){if(!Number.isInteger(Number(A.pureAudioPushMode)))throw new ai({code:dt.INVALID_PARAMETER,message:Xo({key:Mo.INVALID_PURE_AUDIO})});this._pureAudioPushMode=A.pureAudioPushMode,e.Str_uc_params||(e.Str_uc_params={}),e.Str_uc_params.pure_audio_push_mod=this._pureAudioPushMode}if(!Av(A.userDefineRecordId)){let o=/^[A-Za-z0-9_-]{1,64}$/gi;if(A.userDefineRecordId.match(o)===null)throw new ai({code:dt.INVALID_PARAMETER,message:Xo({key:Mo.INVALID_USER_DEFINE_RECORDID})});e.Str_uc_params||(e.Str_uc_params={}),e.Str_uc_params.userdefine_record_id=A.userDefineRecordId}if(!Av(A.userDefinePushArgs)){if(!(t8(A.userDefinePushArgs)&&String(A.userDefinePushArgs)&&String(A.userDefinePushArgs).length<=256))throw new ai({code:dt.INVALID_PARAMETER,message:Xo({key:Mo.INVALID_USER_DEFINE_PUSH_ARGS})});e.Str_uc_params||(e.Str_uc_params={}),e.Str_uc_params.userdefine_push_args=A.userDefinePushArgs}VoA(e)||(this._businessInfo=JSON.stringify(e))}sendCustomMessage(A){var e;(e=this._customMessageManager)==null||e.send(A)}enableInsertableStreams(){return KA(this,null,function*(){if(this.singlePC&&!this.singlePC.enableInsertableStreams&&Kp)return this.singlePC.enableInsertableStreams=!0,yield this.singlePC.waitForPeerConnectionConnected(),yield this.singlePC.startReconnection()})}sendSignalMessage(A){var e;return this.signalChannel?(e=this.signalChannel)==null?void 0:e.sendWaitForResponseWithRetry(A):Promise.reject(new ai({code:dt.INVALID_OPERATION,message:"not join"}))}get enableCodecPipeline(){return this.videoManager.encodePipeline.length>0||this.videoManager.decodePipeline.length>0||this.audioManager.encodePipeline.length>0||this.audioManager.decodePipeline.length>0}get scriptTransformWorker(){var A;return(A=this.singlePC)==null?void 0:A.scriptTransformWorker}switchRoom(A){return KA(this,null,function*(){var e;if(!this.signalChannel||!this.singlePC)return;let{roomId:o,strRoomId:a,userSig:c,privateMapKey:d}=A,C=((e=this.scheduleResult.config)==null?void 0:e.autoSubscribeCount)||A?.autoSubscribeCount||1,y=String(this.useStringRoomId?a:o),S=[];for(let gA=0;gA{this.resolveSwitchRoomSubedReq=gA,LC(5e3).then(gA)}),F.emit(nA.SWITCH_ROOM_START,{room:this}),yield this.singlePC.waitForPeerConnectionConnected();try{this.userManager.clear(),V=yield this.signalChannel.sendWaitForResponse({command:roA,responseCommand:ls.SEND_SWITCH_ROOM_RES,data:k});let{code:gA,message:CA}=V.data;if(gA!==0){this._log.error("switch room failed. result: ".concat(gA," error: ").concat(CA));let MA=new ai({code:dt.SWITCH_ROOM_FAILED,extraCode:gA,message:CA});throw F.emit(nA.SWITCH_ROOM_FAILED,{room:this,error:MA}),MA}this.userSig=c,Av(d)||(this.privateMapKey=d),F.emit(nA.SWITCH_ROOM_SUCCESS,{room:this,currentRoomId:J,targetRoomId:y})}catch(gA){throw this.singlePC.autoSubscribedSsrcGroups.clear(),this.roomId=J,this.resolveSwitchRoomSubedReq(),gA}})}isSwitchRoomSupported(){var A;let e="unable to use switchRoom API, fallback to exitRoom and enterRoom.";return((A=this.scheduleResult.config)==null?void 0:A.switchRoom)!==!0?(this._log.warn("".concat(e," Reason: this sdkAppId is not supported, please contact us [https://trtc.io/contact] to enable it.")),!1):this.scene!=="live"?(this._log.warn("".concat(e," Reason: the scene is not 'live'.")),!1):this.role!=="audience"?(this._log.warn("".concat(e," Reason: the role is not 'audience'.")),!1):!!this.singlePC||(this._log.warn("".concat(e," Reason: is not using single peerConnection.")),!1)}requestRemoteFallbackToH264(){var A;(A=this.singlePC)==null||A.requestRemoteFallbackToH264()}startUpdateNTPTime(){if(!this.signalChannel)return;let A=[];for(let e=0;e<5;e++)A.push(this.updateNTPTime());return Promise.all(A).then(e=>{var o;let a=e[0].offset,c=e[0].offset;e.forEach(y=>{a=Math.min(y.offset,a),c=Math.max(y.offset,c)});let d=Math.floor(e.reduce((y,S)=>y+S.rtt,0)/e.length),C=Math.floor(e.reduce((y,S)=>y+S.offset,0)/e.length);(c-a>30||d>50)&&setTimeout(()=>this.startUpdateNTPTime(),5e3),KB(C),(o=this.scriptTransformWorker)==null||o.postMessage({type:"ntp-offset",data:C}),this._log.debug("ntp updated offset: ".concat(C)),this.emit("ntp-time-updated")}).catch(e=>{this._log.warn("ntp updated failed: ".concat(e))})}updateNTPTime(){let A=Date.now();return this.signalChannel.sendWaitForResponse({command:aoA,responseCommand:ls.UPDATE_NETWORK_TIME_RESULT,addReceiveTime:!0,data:{clientSendTime:String(A)},enableLog:!1}).then(e=>{let o=Number(e.data.data.serverSendTime),a=Number(e.data.data.serverRecvTime),c=e.data.receiveTime||Date.now();return{rtt:c-A-(a-o),offset:(a-A+(o-c))/2}})}};return Ci([lc(["left",Zs.INIT],"joined"),$h({settings:{retries:1,timeout:0},onRetrying(A){this._log.warn("join retry ".concat(A))},onRetryFailed(A){this._log.error("join failed",A)},onError(A,e){this._isUsingCachedSchedule&&!this.isDestroyed?(this._log.warn("is using cached schedule, retry join"),hQ(!0),this.reset(),e()):this.signalChannel&&this.signalChannel.isConnected&&this.signalChannel.keepAlive?(this._log.warn("is using keepAlive ws, retry join"),this.signalChannel.close(),this.reset(),e()):(this.reset(),e())}}),jr(A=>{let e=new LiA;return function(o,a,c){return KA(this,null,function*(){let d=String(o.roomId||o.strRoomId);if(this.userId=o.userId,this.sdkAppId=o.sdkAppId,this.userSig=o.userSig,this._log.setSdkAppId(this.sdkAppId),this._log.setUserId(this.userId),this.scene=a,o.privateMapKey=o.privateMapKey||"",this.isJoined)throw new ai({code:dt.INVALID_OPERATION,message:Xo({key:Mo.INVALID_JOIN})});if(this.checkDestroy(),e.isJoined({userId:this.userId,roomId:d,sdkAppId:this.sdkAppId,room:this}))throw new ai({code:dt.INVALID_OPERATION,message:Xo({key:Mo.REPEAT_JOIN,data:this.userId})});e.add({room:this,roomId:d}),this.role=o.role===21?"audience":"anchor",this._log.info("Join() => joining room: ".concat(d," useStringRoomId: ").concat(this.useStringRoomId," scene: ").concat(this.scene," role: ").concat(this.role)),F.emit(nA.JOIN_START,{room:this,roomId:d,params:o});let C=Hd.getEnv();C||(C=jB.QCLOUD,this.proxy_ws&&(this.proxy_ws.startsWith(Uf.OLD_CLOUD_LADDER)?C=jB.OLD_CLOUD_LADDER:this.proxy_ws.startsWith(Uf.WEBRTC)&&(C=jB.WEBRTC))),sn.setConfig({env:C,sdkAppId:String(this.sdkAppId),userId:this.userId,roomId:d}),te.checkSystemRequirementsInternal(c).then(y=>{this.checkSystemResult=y,UiA.call(this)});try{!this.prelinkPromise&&!this.proxy_ws&&!this.proxy_wt&&!this.scheduleResult.domains&&!Hd.getEnv()&&(yield this.schedule(o,c));let y=yield A.call(this,o,a,c);return this.roomId=d,this._joinedTimestamp=Hd.performanceNow(),F.emit(nA.JOIN_SUCCESS,{room:this}),c===30&&!o.component&&sn.uploadEvent({log:"stat-conv-".concat(Number(Op),"-").concat(location.hostname),userId:this.userId}),y}catch(y){throw e.delete({room:this,roomId:d}),F.emit(nA.JOIN_FAILED,{room:this,error:y}),y}})}})],wy.prototype,"join"),Ci([lc("joined","left",{ignoreError:!0,success(){this.reset(!0)}}),jr(A=>function(){for(var e=arguments.length,o=new Array(e),a=0;aA.mediaType),jr(A=>function(){for(var e=arguments.length,o=new Array(e),a=0;ad.outMediaTrack&&d.state==="ready"),!o.length))return;F.emit("61",{room:this});let c=A.apply(this,o);return Promise.all(o.map(d=>d.publish(this,c)))})}),$h({settings:{retries:xf,timeout:A=>Rp(A)},onError(A,e,o,a){let[c]=a;var d;(d=A.message)!=null&&d.includes("timeout")?(this._log.warn("publish ".concat(c.strMediaType," timeout"),A),e()):(this._log.error("publish ".concat(c.strMediaType," failed: ").concat(A)),o(A),F.emit(nA.PUBLISH_FAILED,{room:this}))}})],wy.prototype,"publish"),Ci([n_({fnName:"publish"}),py(A=>A.mediaType),jr(A=>function(){for(var e=arguments.length,o=new Array(e),a=0;ad.unpublish()),c}),VM(function(){var A,e;this.localTracks.size===0&&LI()&&((e=(A=this.singlePC)==null?void 0:A.getPeerConnection())==null||e.getSenders().forEach(o=>o.track&&o.replaceTrack(null)))})],wy.prototype,"unpublish"),Ci([r5(A=>{if(A.code!==dt.API_CALL_ABORTED)throw A}),py(A=>A.userId)],wy.prototype,"replaceTrack"),Ci([py(function(){for(var A=arguments.length,e=new Array(A),o=0;ofunction(){for(var e=arguments.length,o=new Array(e),a=0;a!d.isSubscribed&&d.subscribe(c)),c}),$h({settings:{retries:xf,timeout:A=>Rp(A)},onError(A,e,o,a){if(A.message.includes("timeout"))this._log.warn("subscribe timeout"),e();else{let c=A?.code===dt.API_CALL_ABORTED;this._log[c?"warn":"error"]("subscribe failed ".concat(a.map(d=>d.strMediaType).join(","),": ").concat(A)),o(A),F.emit(nA.SUBSCRIBE_FAILED,{room:this,remoteTracks:a})}}})],wy.prototype,"subscribe"),Ci([n_({fnName:"subscribe",callback(){for(var A=arguments.length,e=new Array(A),o=0;o{let c=this.remotePublishedUserMap.get(a.userId);c&&!c.isMainStreamSubscribed&&!c.isAuxStreamSubscribed&&c.close("you unsubscribed")})}}),py(function(){for(var A=arguments.length,e=new Array(A),o=0;oi in t?IV(t,i,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[i]=r,OrA=(t,i)=>{for(var r in i||(i={}))J9.call(i,r)&&F3(t,r,i[r]);if(z8)for(var r of z8(i))FrA.call(i,r)&&F3(t,r,i[r]);return t},PrA=(t,i)=>function(){return i||(0,t[V9(t)[0]])((i={exports:{}}).exports,i),i.exports},xrA=(t,i,r,l)=>{if(i&&typeof i=="object"||typeof i=="function")for(let I of V9(i))J9.call(t,I)||I===r||IV(t,I,{get:()=>i[I],enumerable:!(l=Y9(i,I))||l.enumerable});return t},YrA=(t,i,r)=>(r=t!=null?LrA(UrA(t)):{},xrA(IV(r,"default",{value:t,enumerable:!0}),t)),P_=(t,i,r,l)=>{for(var I,h=Y9(i,r),f=t.length-1;f>=0;f--)(I=t[f])&&(h=I(i,r,h)||h);return h&&IV(i,r,h),h},pn=(t,i,r)=>F3(t,typeof i!="symbol"?i+"":i,r),VrA=PrA({"../node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.js"(t,i){var r=Object.prototype.hasOwnProperty,l="~";function I(){}function h(G,U,j){this.fn=G,this.context=U,this.once=j||!1}function f(G,U,j,lA,sA){if(typeof j!="function")throw new TypeError("The listener must be a function");var mA=new h(j,lA||G,sA),IA=l?l+U:U;return G._events[IA]?G._events[IA].fn?G._events[IA]=[G._events[IA],mA]:G._events[IA].push(mA):(G._events[IA]=mA,G._eventsCount++),G}function w(G,U){--G._eventsCount===0?G._events=new I:delete G._events[U]}function _(){this._events=new I,this._eventsCount=0}Object.create&&(I.prototype=Object.create(null),new I().__proto__||(l=!1)),_.prototype.eventNames=function(){var G,U,j=[];if(this._eventsCount===0)return j;for(U in G=this._events)r.call(G,U)&&j.push(l?U.slice(1):U);return Object.getOwnPropertySymbols?j.concat(Object.getOwnPropertySymbols(G)):j},_.prototype.listeners=function(G){var U=l?l+G:G,j=this._events[U];if(!j)return[];if(j.fn)return[j.fn];for(var lA=0,sA=j.length,mA=new Array(sA);lA{if(!navigator.userAgent.includes("Firefox"))return t;const i=t.split(`\r -`),r=[],l=[];i.forEach(f=>{const w=f.toLowerCase();w.includes("a=rtpmap")&&w.includes("h264")&&r.push(f)}),r.length>1&&l.push(...r.slice(1));const I=l.map(f=>{const w=/a=rtpmap:(\d+)\s/.exec(f);return w&&w.length>1?w[1]:null}).filter(f=>f!==null),h=[];return i.forEach(f=>{let w=f;if(f.includes("a=setup")&&(w="a=setup:passive"),(f.includes("m=audio")||f.includes("m=video"))&&(w=f.split(" ").filter((_,G)=>G<3||!I.includes(_)).join(" ")),f.includes("a=fmtp")||f.includes("a=rtcp-fb")||f.includes("a=rtpmap")){const _=/a=(?:fmtp|rtcp-fb|rtpmap):(\d+)\s/.exec(f);if(_&&_.length>1&&I.includes(_[1]))return}h.push(w)}),h.join(`\r -`)},Z8=t=>{const i=t.split(`\r -`),r=[];i.forEach(f=>{const w=f.toLowerCase();w.includes("a=rtpmap")&&w.includes("h264")&&r.push(f)});const l=r.map(f=>{const w=/a=rtpmap:(\d+)\s/.exec(f);return w&&w.length>1?w[1]:null}).filter(f=>f!==null),I=[];i.forEach(f=>{let w=f;if(f.includes("a=fmtp:111")&&(w=`${f};stereo=1`),f.includes("a=fmtp")){const _=/a=fmtp:(\d+)\s/.exec(f);_&&_.length>1&&l.includes(_[1])&&(w=`${f};sps-pps-idr-in-keyframe=1`)}I.push(w)});const h=I.join(`\r -`);return HrA(h)},qrA="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",Fj=(t=21)=>{let i="",r=crypto.getRandomValues(new Uint8Array(t|=0));for(;t--;)i+=qrA[63&r[t]];return i},N_=t=>typeof t=="function",KrA=0,jrA=1,X8=2;function WrA({retryFunction:t,settings:i,onError:r,onRetrying:l,onRetryFailed:I,onRetrySuccess:h,context:f}){return function(...w){const{retries:_=5,timeout:G=1e3}=i;let U=0,j=-1,lA=KrA;const sA=async(mA,IA)=>{const cA=f||this;try{const TA=await t.apply(cA,w);U>0&&h&&h.call(this,U),U=0,mA(TA)}catch(TA){const WA=()=>{clearTimeout(j),U=0,lA=X8,IA(TA)},ue=()=>{lA!==X8&&U<(N_(_)?_():_)?(U++,lA=jrA,N_(l)&&l.call(this,U,WA),j=window.setTimeout(()=>{j=-1,sA(mA,IA)},N_(G)?G(U):G)):(WA(),N_(I)&&I.call(this,TA))};N_(r)?r.call(this,{error:TA,retry:ue,reject:IA,retryFuncArgs:w,retriedCount:U}):ue()}};return new Promise(sA)}}var zrA=WrA,pQ=new WeakMap;function ZrA({settings:t={retries:5,timeout:2e3},onError:i,onRetrying:r,onRetryFailed:l}){return function(I,h,f){const w=zrA({retryFunction:f.value,settings:t,onError({error:_,retry:G,reject:U,retryFuncArgs:j}){var lA;i?i.call(this,_,()=>{var sA;(sA=pQ.get(I))!=null&&sA.has(h)?G():U(_)},U,j):(lA=pQ.get(I))!=null&&lA.has(h)?G():U(_)},onRetrying(_,G){var U;N_(r)&&r.call(this,_,G),(U=pQ.get(I))!=null&&U.has(h)&&(pQ.get(I).get(h).stopRetry=G)},onRetryFailed:l});return f.value=function(..._){const G=pQ.get(I);return G?G.set(h,{args:_}):pQ.set(I,new Map([[h,{args:_}]])),w.apply(this,_).finally(()=>{var U;return(U=pQ.get(I))==null?void 0:U.delete(h)})},f}}function XrA({fnName:t,callback:i,validateArgs:r=!0}){return function(l,I,h){const f=h.value;return h.value=function(...w){var _,G;if((_=pQ.get(l))!=null&&_.has(t)){const{stopRetry:U,args:j}=pQ.get(l).get(t);let lA=!0;if(r){for(const sA of j)if(!w.find(mA=>mA===sA)){lA=!1;break}}lA&&(i&&i.apply(this,w),U&&U(),(G=pQ.get(l))==null||G.delete(t))}return f.apply(this,w)},h}}var $rA=class{constructor(t,i){this.core=i,pn(this,"peerConnection"),pn(this,"audioTransceiver",null),pn(this,"videoTransceiver",null),pn(this,"timerId",null),pn(this,"callback",null),pn(this,"previousRawStats",null),pn(this,"_prevReportTime",0),pn(this,"_prevDecoderImplementation",""),pn(this,"_decodeMap",new Map),this.peerConnection=t,this.findTransceivers()}get statInterval(){return this._prevReportTime===0?2:(Date.now()-this._prevReportTime)/1e3}findTransceivers(){const t=this.peerConnection.getTransceivers();for(const i of t)if(i.receiver&&i.receiver.track){const{track:r}=i.receiver;r.kind==="audio"?this.audioTransceiver=i:r.kind==="video"&&(this.videoTransceiver=i)}}start(t,i=2e3){this.stop(),this.callback=t,this.collectStats(),this.timerId=window.setInterval(()=>{this.collectStats()},i)}stop(){this.timerId!==null&&(clearInterval(this.timerId),this.timerId=null),this.callback=null,this.previousRawStats=null,this._prevReportTime=0}async collectStats(){if(this.callback)try{const t=await this.peerConnection.getStats(),i=new Set(["inbound-rtp","track","candidate-pair","media-source","codec"]),r=[];t.forEach(w=>i.has(w.type)&&r.push(w));const l=Date.now(),I=this.parseAudioStats(r),h=this.parseVideoStats(r),f=this.parseNetworkStats(r);this._prevReportTime=l,this.callback({audio:I,video:h,network:f})}catch(t){this.core.log.error("Failed to collect WebRTC stats:",t)}}getDifferenceValue(t,i){if(this.core.utils.isUndefined(t))return i;const r=(i||0)-t;return r<0?0:r}parseAudioStats(t){var i,r,l,I;const h={bitrate:0,volume:0,packetLossRate:0,jitterBufferDelay:0,bytesReceived:0,packetsReceived:0,packetsLost:0};for(const f of t){if(f.type==="inbound-rtp"&&(f.mediaType==="audio"||f.kind==="audio")){if(h.bytesReceived=f.bytesReceived||0,h.packetsReceived=f.packetsReceived||0,h.packetsLost=f.packetsLost||0,this.previousRawStats&&this.previousRawStats.audio){const G=this.getDifferenceValue(this.previousRawStats.audio.bytesReceived,h.bytesReceived);h.bitrate=Math.round(8*G/this.statInterval/1e3)}const w=this.getDifferenceValue((i=this.previousRawStats)==null?void 0:i.audio.packetsLost,h.packetsLost),_=this.getDifferenceValue((r=this.previousRawStats)==null?void 0:r.audio.packetsReceived,h.packetsReceived)+w;if(_>0&&(h.packetLossRate=Math.round(w/_*100)),this.core.utils.isUndefined(f.audioLevel)||(h.volume=f.audioLevel||0),f.jitterBufferDelay&&f.jitterBufferEmittedCount){let{jitterBufferEmittedCount:G}=f,{jitterBufferDelay:U}=f;(l=this.previousRawStats)!=null&&l.audio&&(G=this.getDifferenceValue(this.previousRawStats.audio.jitterBufferEmittedCount,f.jitterBufferEmittedCount),U=this.getDifferenceValue(this.previousRawStats.audio.jitterBufferDelay,f.jitterBufferDelay)),G>0&&(h.jitterBufferDelay=Math.floor(U/G*1e3)),this.previousRawStats||this.initPreviousRawStats(),this.previousRawStats.audio.jitterBufferDelay=f.jitterBufferDelay,this.previousRawStats.audio.jitterBufferEmittedCount=f.jitterBufferEmittedCount}this.previousRawStats||this.initPreviousRawStats(),this.previousRawStats.audio.bytesReceived=h.bytesReceived,this.previousRawStats.audio.packetsReceived=h.packetsReceived,this.previousRawStats.audio.packetsLost=h.packetsLost}!this.core.utils.isUndefined(f.audioLevel)&&((I=this.audioTransceiver)!=null&&I.receiver.track)&&f.trackIdentifier===this.audioTransceiver.receiver.track.id&&(h.volume=f.audioLevel||0)}return h}parseVideoStats(t){var i,r,l,I,h;const f={bitrate:0,frameRate:0,width:0,height:0,packetLossRate:0,jitterBufferDelay:0,bytesReceived:0,packetsReceived:0,packetsLost:0,framesDecoded:0};for(const w of t){if(w.type==="codec"&&this._decodeMap.set(w.id,w),w.type==="inbound-rtp"&&(w.mediaType==="video"||w.kind==="video")){if(f.bytesReceived=w.bytesReceived||0,f.packetsReceived=w.packetsReceived||0,f.packetsLost=w.packetsLost||0,f.framesDecoded=w.framesDecoded||0,this.core.utils.isUndefined(w.framesPerSecond)||(f.frameRate=Math.round(w.framesPerSecond)),w.decoderImplementation&&this._prevDecoderImplementation!==w.decoderImplementation){const U=this._decodeMap.get(w.codecId),j=((i=U?.mimeType)==null?void 0:i.split("/")[1])||"unknown",lA=w.powerEfficientDecoder;this.core.log.info(`decoderImplementation change to ${w.decoderImplementation}(${j}) HWDecoder: ${lA}`),this._prevDecoderImplementation=w.decoderImplementation}if(this.previousRawStats&&this.previousRawStats.video){const U=this.getDifferenceValue(this.previousRawStats.video.bytesReceived,f.bytesReceived);f.bitrate=Math.round(8*U/this.statInterval/1e3)}const _=this.getDifferenceValue((r=this.previousRawStats)==null?void 0:r.video.packetsLost,f.packetsLost),G=this.getDifferenceValue((l=this.previousRawStats)==null?void 0:l.video.packetsReceived,f.packetsReceived)+_;if(G>0&&(f.packetLossRate=Math.round(_/G*100)),w.jitterBufferDelay&&w.jitterBufferEmittedCount){let{jitterBufferEmittedCount:U}=w,{jitterBufferDelay:j}=w;(I=this.previousRawStats)!=null&&I.video&&(U=this.getDifferenceValue(this.previousRawStats.video.jitterBufferEmittedCount,w.jitterBufferEmittedCount),j=this.getDifferenceValue(this.previousRawStats.video.jitterBufferDelay,w.jitterBufferDelay)),U>0&&(f.jitterBufferDelay=Math.floor(j/U*1e3)),this.previousRawStats||this.initPreviousRawStats(),this.previousRawStats.video.jitterBufferDelay=w.jitterBufferDelay,this.previousRawStats.video.jitterBufferEmittedCount=w.jitterBufferEmittedCount}this.previousRawStats||this.initPreviousRawStats(),this.previousRawStats.video.bytesReceived=f.bytesReceived,this.previousRawStats.video.packetsReceived=f.packetsReceived,this.previousRawStats.video.packetsLost=f.packetsLost}!this.core.utils.isUndefined(w.frameWidth)&&((h=this.videoTransceiver)!=null&&h.receiver.track)&&w.trackIdentifier===this.videoTransceiver.receiver.track.id&&(f.width=w.frameWidth,f.height=w.frameHeight)}return f}parseNetworkStats(t){const i={rtt:0};for(const r of t)if(r.type==="candidate-pair"&&(r.selected||r.state==="succeeded")&&this.core.utils.isNumber(r.currentRoundTripTime)){i.rtt=Math.floor(1e3*r.currentRoundTripTime);break}return i}initPreviousRawStats(){this.previousRawStats={timestamp:Date.now(),audio:{bytesReceived:0,packetsReceived:0,packetsLost:0},video:{bytesReceived:0,packetsReceived:0,packetsLost:0}}}},AaA=YrA(VrA()),$8=Symbol("instance"),k1=Symbol("cacheResult"),Oj=class{constructor(i,r,l){this.oldState=i,this.newState=r,this.action=l,this.aborted=!1}abort(i){this.aborted=!0,eU.call(i,this.oldState,new Error(`action '${this.action}' aborted`))}toString(){return`${this.action}ing`}},Pj=class extends Error{constructor(i,r,l){super(r),this.state=i,this.message=r,this.cause=l}};function eaA(t){return typeof t=="object"&&t&&"then"in t}var AU=new Map;function L1(t,i,r={}){return(l,I,h)=>{const f=r.action||I;if(!r.context){const _=AU.get(l)||[];AU.has(l)||AU.set(l,_),_.push({from:t,to:i,action:f})}const w=h.value;h.value=function(..._){let G=this;if(r.context&&(G=XC.get(typeof r.context=="function"?r.context.call(this,..._):r.context)),G.state===i)return r.sync?G[k1]:Promise.resolve(G[k1]);G.state instanceof Oj&&G.state.action==r.abortAction&&G.state.abort(G);let U=null;Array.isArray(t)?t.length==0?G.state instanceof Oj&&G.state.abort(G):typeof G.state=="string"&&t.includes(G.state)||(U=new Pj(G._state,`${G.name} ${f} to ${i} failed: current state ${G._state} not from ${t.join("|")}`)):t!==G.state&&(U=new Pj(G._state,`${G.name} ${f} to ${i} failed: current state ${G._state} not from ${t}`));const j=cA=>{if(r.fail&&r.fail.call(this,cA),r.sync){if(r.ignoreError)return cA;throw cA}return r.ignoreError?Promise.resolve(cA):Promise.reject(cA)};if(U)return j(U);const lA=G.state,sA=new Oj(lA,i,f);eU.call(G,sA);const mA=cA=>{var TA;return G[k1]=cA,sA.aborted||(eU.call(G,i),(TA=r.success)===null||TA===void 0||TA.call(this,G[k1])),cA},IA=cA=>(eU.call(G,lA,cA),j(cA));try{const cA=w.apply(this,_);return eaA(cA)?cA.then(mA).catch(IA):r.sync?mA(cA):Promise.resolve(mA(cA))}catch(cA){return IA(new Pj(G._state,`${G.name} ${f} from ${t} to ${i} failed: ${cA}`,cA instanceof Error?cA:new Error(String(cA))))}}}}var taA=typeof window<"u"&&window.__AFSM__?(r,l)=>{window.dispatchEvent(new CustomEvent(r,{detail:l}))}:typeof importScripts<"u"?(r,l)=>{postMessage({type:r,payload:l})}:()=>{};function eU(t,i){const r=this._state;this._state=t;const l=t.toString();t&&this.emit(l,r),this.emit(XC.STATECHANGED,t,r,i),this.updateDevTools({value:t,old:r,err:i instanceof Error?i.message:String(i)})}var XC=class jC extends AaA.default{constructor(i,r,l){super(),this.name=i,this.groupName=r,this._state=jC.INIT,i||(i=Date.now().toString(36)),l?Object.setPrototypeOf(this,l):l=Object.getPrototypeOf(this),r||(this.groupName=this.constructor.name);const I=l[$8];I?this.name=I.name+"-"+I.count++:l[$8]={name:this.name,count:0},this.updateDevTools({diagram:this.stateDiagram})}get stateDiagram(){const i=Object.getPrototypeOf(this),r=AU.get(i)||[];let l=new Set,I=[],h=[];const f=new Set,w=Object.getPrototypeOf(i);AU.has(w)&&(w.stateDiagram.forEach(G=>l.add(G)),w.allStates.forEach(G=>f.add(G))),r.forEach(({from:G,to:U,action:j})=>{typeof G=="string"?I.push({from:G,to:U,action:j}):G.length?G.forEach(lA=>{I.push({from:lA,to:U,action:j})}):h.push({to:U,action:j})}),I.forEach(({from:G,to:U,action:j})=>{f.add(G),f.add(U),f.add(j+"ing"),l.add(`${G} --> ${j}ing : ${j}`),l.add(`${j}ing --> ${U} : ${j} 🟢`),l.add(`${j}ing --> ${G} : ${j} 🔴`)}),h.forEach(({to:G,action:U})=>{l.add(`${U}ing --> ${G} : ${U} 🟢`),f.forEach(j=>{j!==G&&l.add(`${j} --> ${U}ing : ${U}`)})});const _=[...l];return Object.defineProperties(i,{stateDiagram:{value:_},allStates:{value:f}}),_}static get(i){let r;return typeof i=="string"?(r=jC.instances.get(i),r||jC.instances.set(i,r=new jC(i,void 0,Object.create(jC.prototype)))):(r=jC.instances2.get(i),r||jC.instances2.set(i,r=new jC(i.constructor.name,void 0,Object.create(jC.prototype)))),r}static getState(i){var r;return(r=jC.get(i))===null||r===void 0?void 0:r.state}updateDevTools(i={}){taA(jC.UPDATEAFSM,Object.assign({name:this.name,group:this.groupName},i))}get state(){return this._state}set state(i){eU.call(this,i)}};XC.STATECHANGED="stateChanged",XC.UPDATEAFSM="updateAFSM",XC.INIT="[*]",XC.ON="on",XC.OFF="off",XC.instances=new Map,XC.instances2=new WeakMap;var LL=class extends XC{constructor(i,r){super(),this.core=i,pn(this,"audioPlayer"),pn(this,"videoPlayer"),pn(this,"callback"),pn(this,"avPlayerStateSyncManager"),pn(this,"_log"),pn(this,"_videoPlayerLog"),pn(this,"_audioPlayerLog"),pn(this,"lastPausedReason"),pn(this,"muted",!1),this._log=r,this._videoPlayerLog=this._log.createChild({id:"vp"}),this._audioPlayerLog=this._log.createChild({id:"ap"}),this.videoPlayer=new i.VideoPlayer({id:"vp",log:this._videoPlayerLog,track:null,muted:!1,container:null,enableLogTrackState:!0}),this.audioPlayer=new i.RemoteAudioPlayer({id:"ap",log:this._audioPlayerLog,track:null,muted:!1,container:null,enableVolumeControlInIOS:!0,enableLogTrackState:!0}),this.audioPlayer.on(i.PlayerEvent.AUTOPLAY_FAILED,l=>this.handleAutoPlayFailed(this.audioPlayer,l)),this.videoPlayer.on(i.PlayerEvent.LOAD_START,()=>this.handleLoadStart("video")),this.audioPlayer.on(i.PlayerEvent.LOAD_START,()=>this.handleLoadStart("audio")),this.videoPlayer.on(i.PlayerEvent.PLAYER_STATE_CHANGED,this.handlePlayerStateChanged,this),this.audioPlayer.on(i.PlayerEvent.PLAYER_STATE_CHANGED,this.handlePlayerStateChanged,this),this.videoPlayer.on(i.PlayerEvent.ENTER_PICTURE_IN_PICTURE,this.handleEnterPictureInPicture,this),this.videoPlayer.on(i.PlayerEvent.LEAVE_PICTURE_IN_PICTURE,this.handleLeavePictureInPicture,this),this.videoPlayer.on(i.PlayerEvent.ENTER_FULL_SCREEN,this.handleEnterFullScreen,this),this.videoPlayer.on(i.PlayerEvent.LEAVE_FULL_SCREEN,this.handleLeaveFullScreen,this),this.avPlayerStateSyncManager=new i.AVPlayerStateSyncManager({log:this._log,audioPlayer:this.audioPlayer,videoPlayer:this.videoPlayer})}get isPlaying(){return this.videoPlayer.isPlaying&&this.audioPlayer.isPlaying}get isPaused(){return this.videoPlayer.isPaused&&this.audioPlayer.isPaused}get isStopped(){return this.videoPlayer.isStopped&&this.audioPlayer.isStopped}setCallback(i){this.callback=i}updateLogConfig(i){this._audioPlayerLog.setSdkAppId(i.sdkAppId),this._audioPlayerLog.setUserId(i.userId),this._videoPlayerLog.setSdkAppId(i.sdkAppId),this._videoPlayerLog.setUserId(i.userId)}handleLoadStart(i){this.onLoadStart()}handlePlayerStateChanged(i){i.state==="PLAYING"&&this.isPlaying&&this.onPlaying(),i.state==="PAUSED"&&this.isPaused&&this.onPaused(i.reason),i.state==="STOPPED"&&this.isStopped&&this.onStopped()}async handleEnterPictureInPicture(){var i,r;await this.videoPlayer.enterPIPPromise,(r=(i=this.callback)==null?void 0:i.onPictureInPictureStateChanged)==null||r.call(i,{isPictureInPicture:!0,pictureInPictureWindow:this.videoPlayer.pipWindow})}handleLeavePictureInPicture(){var i,r;(r=(i=this.callback)==null?void 0:i.onPictureInPictureStateChanged)==null||r.call(i,{isPictureInPicture:!1})}handleEnterFullScreen(){var i,r;(r=(i=this.callback)==null?void 0:i.onFullScreenStateChanged)==null||r.call(i,{isFullScreen:!0})}handleLeaveFullScreen(){var i,r;(r=(i=this.callback)==null?void 0:i.onFullScreenStateChanged)==null||r.call(i,{isFullScreen:!1})}onLoadStart(){}onPlaying(){}onPaused(i){this.lastPausedReason=i}onStopped(){}setVideoContainer(i){if(this.core.utils.isString(i)){const r=document.getElementById(i);r&&this.videoPlayer.setContainer(r)}else this.videoPlayer.setContainer(i)}setVolume(i){this.core.utils.isUndefined(i)||this.audioPlayer.setVolume(i/100)}setMuted(i){this.core.utils.isUndefined(i)||(this.muted=i,this.audioPlayer.setMuted(i))}setFillMode(i){i&&this.videoPlayer.setObjectFit(i)}setAudioTrack(i){this.audioPlayer.setTrack(i)}setVideoTrack(i){this.videoPlayer.setTrack(i)}async play(){const i=this.videoPlayer.play().catch(l=>{this.handleAutoPlayFailed(this.videoPlayer,l,"video")}),r=this.audioPlayer.play().catch(l=>{this.handleAutoPlayFailed(this.audioPlayer,l)});await Promise.all([i,r])}handleAutoPlayFailed(i,r,l="audio"){var I,h;this._log.warn("handleAutoPlayFailed",r);const f=()=>{this.audioPlayer.resume().then(()=>{document.removeEventListener("click",f,!0)})};document.addEventListener("click",f,!0),(h=(I=this.callback)==null?void 0:I.onAutoPlayFailed)==null||h.call(I,{type:l,resume:()=>i.resume()})}pause(){this.videoPlayer.pause(!0),this.audioPlayer.setMuted(!0),this.audioPlayer.pause()}resume(){this.videoPlayer.resume(!0),this.audioPlayer.setMuted(this.muted),this.audioPlayer.resume()}async enterFullscreen(){await this.videoPlayer.enterFullscreen()}async exitFullscreen(){await this.videoPlayer.exitFullscreen()}async enterPictureInPicture(){await this.videoPlayer.enterPictureInPicture()}async exitPictureInPicture(){await this.videoPlayer.exitPictureInPicture()}stop(){this.videoPlayer&&this.videoPlayer.stop(),this.audioPlayer&&(this.audioPlayer.stop(),this.audioPlayer.setMuted(!1))}};P_([L1([XC.INIT,"PAUSED"],"LOADSTART",{ignoreError:!0,sync:!0,success(){var t,i;(i=(t=this.callback)==null?void 0:t.onLoadStart)==null||i.call(t)},fail(t){this._log.warn("onLoadStart",t)}})],LL.prototype,"onLoadStart"),P_([L1(["LOADSTART","PAUSED"],"PLAYING",{ignoreError:!0,sync:!0,success(){var t,i;(i=(t=this.callback)==null?void 0:t.onPlaying)==null||i.call(t)},fail(t){this._log.warn("onPlaying",t)}})],LL.prototype,"onPlaying"),P_([L1("PLAYING","PAUSED",{ignoreError:!0,sync:!0,success(){var t,i;(i=(t=this.callback)==null?void 0:t.onPaused)==null||i.call(t,{reason:this.lastPausedReason})},fail(t){this._log.warn("onPaused",t)}})],LL.prototype,"onPaused"),P_([L1([],XC.INIT,{ignoreError:!0,sync:!0,success(){var t,i;(i=(t=this.callback)==null?void 0:t.onStopped)==null||i.call(t)},fail(t){this._log.warn("onStopped",t)}})],LL.prototype,"onStopped");var AZ=LL,iaA=["overseas-webrtc.tlivewebrtc.com","oswebrtc-lint.tliveplay.com"],sY=class H9{constructor(i){this.core=i,pn(this,"_sdkAppId"),pn(this,"_userId"),pn(this,"connectedRoomIdSet",new Set),pn(this,"updateSeq",0),pn(this,"_log"),pn(this,"player"),pn(this,"peerConnection"),pn(this,"svrSig"),pn(this,"streamURL"),pn(this,"signalURL"),pn(this,"insertableStreamsAbortMap",new Map),pn(this,"scriptTransformWorker"),pn(this,"connectionState","disconnected"),pn(this,"isStarted",!1),pn(this,"isStopped",!0),pn(this,"isReconnecting",!1),pn(this,"callback"),pn(this,"isFireWallErrorEmitted",!1),pn(this,"stat"),pn(this,"isH264DecodeSupported"),pn(this,"connectionTimeoutId"),pn(this,"streamHealthCheckTimeoutId"),pn(this,"streamHealthCheckReject"),i.loggerManager.startUpload(),this._log=this.core.log.createChild({id:`${this.getAlias()}`}),this.player=new AZ(i,this._log),i.innerEmitter.on(i.INNER_EVENT.SEI_MESSAGE,this.onSEIMessage,this)}getName(){return H9.Name}getAlias(){return"LEB"}getGroup(){return""}getValidateRule(i){switch(i){case"start":return JrA;case"update":case"stop":return{}}}get enableSEI(){return this.core.room.enableSEI&&(this.core.rtcDectection.IS_INSERTABLE_STREAM_SUPPORTED||this.core.rtcDectection.IS_SCRIPT_TRANSFORM_SUPPORTED)}wrapCallback(i){if(!i)return;const r={},l=["onStats","onSEIMessage"];for(const I of Object.keys(i)){const h=i[I];typeof h=="function"&&(l.includes(I)?r[I]=h:r[I]=(...f)=>(this._log.debug(`callback ${I} called`,f.length>0?f[0]:""),h(...f)))}return r}async start(i){var r;this.isStopped=!1;const{view:l,url:I,volume:h,muted:f,fillMode:w,loggerConfig:_,callback:G}=i;this.callback=this.wrapCallback(G),this.player.setCallback(this.callback);const{errorModule:{RtcError:U,ErrorCode:j,ErrorCodeDictionary:lA},loggerManager:sA,rtcDectection:mA}=this.core;if(this._sdkAppId=_.sdkAppId,this._userId=_.userId,this._log.setSdkAppId(_.sdkAppId),this._log.setUserId(_.userId),this.player.updateLogConfig(_),sA.addJoinedUser(_),!mA.isWebRTCSupported()||!mA.isAddTransceiverSupported())throw new U({code:j.ENV_NOT_SUPPORTED,extraCode:lA.NOT_SUPPORTED_WEBRTC,message:"webrtc not supported"});if(!(await mA.decodeSupportStatus()).isH264DecodeSupported||this.isH264DecodeSupported===!1)throw this.isH264DecodeSupported=!1,new U({code:j.ENV_NOT_SUPPORTED,extraCode:lA.NOT_SUPPORTED_H264_DECODE,message:"h264 not supported"});!mA.IS_SEI_SUPPORTED&&G?.onSEIMessage&&((r=G.onError)==null||r.call(G,new U({code:j.ENV_NOT_SUPPORTED,extraCode:lA.NOT_SUPPORTED_SEI,message:"sei not supported"}))),this.player.setVideoContainer(l),this.player.setMuted(f),this.player.setFillMode(w);try{await this.connect(I),this.stat=new $rA(this.peerConnection,this.core),this.stat.start(TA=>{var WA,ue;return(ue=(WA=this.callback)==null?void 0:WA.onStats)==null?void 0:ue.call(WA,TA)});const IA=this.player.play();this.player.setVolume(h);const cA=this.createStreamHealthCheckPromise();await Promise.race([IA,cA]),this.clearStreamHealthCheck(),this.isStarted=!0}catch(IA){throw this.stop(),IA}}async update(i){const{view:r,url:l,volume:I,muted:h,fillMode:f,action:w,fullScreen:_,pictureInPicture:G}=i;l&&l!==this.streamURL&&await this.switchStream(l),this.player.setMuted(h),this.player.setVolume(I),this.player.setFillMode(f),r&&this.player.videoPlayer.setContainer(this.core.utils.isString(r)?document.getElementById(r):r),w==="pause"?this.player.pause():w==="resume"&&this.player.resume(),this.core.utils.isBoolean(_)&&(_?await this.player.enterFullscreen():await this.player.exitFullscreen()),this.core.utils.isBoolean(G)&&(G?await this.player.enterPictureInPicture():await this.player.exitPictureInPicture())}async switchStream(i){this._log.info("switchStream",i);const r=this.peerConnection,l=this.streamURL,I=this.signalURL,h=this.svrSig,f=new Map(this.insertableStreamsAbortMap),w=this.player;delete this.peerConnection,delete this.streamURL,delete this.signalURL,delete this.svrSig,this.insertableStreamsAbortMap.clear();const _=new AZ(this.core,this._log);_.setVideoContainer(w.videoPlayer.container),_.setFillMode(w.videoPlayer.objectFit),_.setMuted(w.muted),_.setCallback(this.callback);const G=U=>{const{track:j}=U;this.createEncodedStreams(U.receiver),this.initReceiverTransform(U.receiver,j.kind==="audio"),j.kind==="audio"?_.setAudioTrack(j):_.setVideoTrack(j)};try{await this.connectForSwitch(i,G),this._log.info("switchStream: new connection established"),await this.waitForNewPlayerFirstFrame(_),this._log.info("switchStream: new stream first frame received"),w.audioPlayer.setMuted(!0),w.stop(),this.player=_,r&&(clearTimeout(this.connectionTimeoutId),r.close(),r.getReceivers().forEach(U=>f.delete(U)),l&&h&&I&&this.fetchStopStreamWithParams(l,I,h).catch(U=>{this._log.warn("switchStream: stop old stream failed",U)})),this._log.info("switchStream: switch completed successfully")}catch(U){this._log.error("switchStream failed",U),_.stop();const j=this.peerConnection;throw j&&(j.close(),j.getReceivers().forEach(lA=>this.insertableStreamsAbortMap.delete(lA))),this.peerConnection=r,this.streamURL=l,this.signalURL=I,this.svrSig=h,this.insertableStreamsAbortMap=f,this.player=w,w.audioPlayer.setMuted(w.muted),U}}waitForNewPlayerFirstFrame(i){return new Promise((r,l)=>{let I=0,h=!1;const f=i.videoPlayer.getElement();if(!f)return void l(new Error("VideoPlayer has no video element"));const w=()=>{h=!0,clearInterval(U),f.removeEventListener("loadeddata",_),f.removeEventListener("playing",G)},_=()=>{h||(this._log.info("waitForNewPlayerFirstFrame: loadeddata event fired"),w(),r())},G=()=>{h||(this._log.info("waitForNewPlayerFirstFrame: playing event fired"),w(),r())};f.addEventListener("loadeddata",_,{once:!0}),f.addEventListener("playing",G,{once:!0}),i.play().catch(j=>{this._log.warn("waitForNewPlayerFirstFrame: play failed",j)});const U=setInterval(()=>{if(!h){if(I+=100,f.videoWidth>0&&f.videoHeight>0)return this._log.info(`waitForNewPlayerFirstFrame: video has valid dimensions ${f.videoWidth}x${f.videoHeight}`),w(),void r();I>=1e4&&(w(),l(new Error("waitForNewPlayerFirstFrame timeout")))}},100)})}connectForSwitch(i,r){return new Promise((l,I)=>{try{this.initScriptTransformWorker();const h={encodedInsertableStreams:this.enableSEI,iceServers:[],sdpSemantics:"unified-plan",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",tcpCandidatePolicy:"disable",IceTransportsType:"nohost"},f=new RTCPeerConnection(h);this.peerConnection=f,f.onconnectionstatechange=()=>{this.connectionState=f.connectionState,this._log.info("connectForSwitch connectionState",f.connectionState),f.connectionState!=="failed"&&f.connectionState!=="closed"||I(new Error(`connection is ${f.connectionState}`)),f.connectionState==="connected"&&(this.logSelectedCandidate(),l())},f.ontrack=r,f.addTransceiver("audio",{direction:"recvonly"}),f.addTransceiver("video",{direction:"recvonly"}),this._log.info("connectForSwitch createOffer"),f.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0,voiceActivityDetection:!1}).then(w=>(w.sdp=Z8(w.sdp),this._log.info("connectForSwitch setOffer"),f.setLocalDescription(w))).then(()=>{const w={sessionId:Fj(),streamurl:i,clientinfo:this.core.environment.getOSString(),localsdp:f.localDescription};return this.exchangeSDP(i,w)}).then(w=>(this._log.info("connectForSwitch setAnswer"),f.setRemoteDescription(w))).catch(I)}catch(h){I(h)}this.connectionTimeoutId=setTimeout(()=>I(new Error("connection timeout")),1e4)})}async fetchStopStreamWithParams(i,r,l){try{const I=`${r}/webrtc/v1/stopstream`,h=await U1(I,{streamurl:i,svrsig:l},{timeout:3}),{errcode:f,errmsg:w}=h;if(f!==0)throw new Error(`errCode:${f}, errmsg:${w}`);return h}catch(I){this._log.error("fetchStopStreamWithParams error",I)}}async stop(){this.isStopped=!0,this.clearStreamHealthCheck(),this.player.stop(),this.peerConnection&&(clearTimeout(this.connectionTimeoutId),this.peerConnection.close(),this.peerConnection.getReceivers().forEach(i=>this.insertableStreamsAbortMap.delete(i)),delete this.peerConnection,await this.fetchStopStream(),delete this.streamURL,delete this.signalURL,delete this.svrSig),this.stat&&(this.stat.stop(),delete this.stat),this.core.room.keyPointManager.uploadKVStat(this.core.kvStatManager,this._sdkAppId)}destroy(){this.stop(),this.core.innerEmitter.off(this.core.INNER_EVENT.SEI_MESSAGE,this.onSEIMessage,this)}createStreamHealthCheckPromise(){return new Promise((i,r)=>{this.streamHealthCheckReject=r,this.streamHealthCheckTimeoutId=window.setTimeout(()=>this.checkStreamHealth(r),5e3)})}clearStreamHealthCheck(){this.streamHealthCheckTimeoutId&&(clearTimeout(this.streamHealthCheckTimeoutId),delete this.streamHealthCheckTimeoutId),delete this.streamHealthCheckReject}async checkStreamHealth(i){if(!this.isStopped&&this.peerConnection)try{const r=this.peerConnection.getReceivers().find(j=>{var lA;return((lA=j.track)==null?void 0:lA.kind)==="video"});if(!r)return void this._log.warn("checkStreamHealth: no video receiver found");const l=await r.getStats();let I=0,h=0;l.forEach(j=>{j.type==="inbound-rtp"&&(j.mediaType==="video"||j.kind==="video")&&(I=j.bytesReceived||0,h=j.framesDecoded||0)});const{isPlaying:f}=this.player,w=f||h>0;this._log.info(`checkStreamHealth: bytesReceived=${I}, framesDecoded=${h}, isPlaying=${f}`);const{RtcError:_,ErrorCode:G,ErrorCodeDictionary:U}=this.core.errorModule;I===0?(this._log.warn("checkStreamHealth: no stream data received after 5s"),i(new _({code:G.OPERATION_FAILED,message:"no stream data received"}))):w||(this._log.warn("checkStreamHealth: decode failed"),this.isH264DecodeSupported=!1,i(new _({code:G.ENV_NOT_SUPPORTED,extraCode:U.NOT_SUPPORTED_H264_DECODE,message:"h264 decode failed"})))}catch(r){this._log.warn("checkStreamHealth error",r)}}connect(i){return new Promise((r,l)=>{try{this.initScriptTransformWorker();const I={encodedInsertableStreams:this.enableSEI,iceServers:[],sdpSemantics:"unified-plan",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",tcpCandidatePolicy:"disable",IceTransportsType:"nohost"},h=new RTCPeerConnection(I);this.peerConnection=h,h.onconnectionstatechange=()=>{this.connectionState=h.connectionState,this._log.info("connectionState",h.connectionState),h.connectionState!=="failed"&&h.connectionState!=="closed"||(this.isStarted?this.reconnect(i):l(new Error(`connection is ${h.connectionState}`))),h.connectionState==="connected"&&(this.logSelectedCandidate(),r())},h.ontrack=f=>this.onTrack(f),h.addTransceiver("audio",{direction:"recvonly"}),h.addTransceiver("video",{direction:"recvonly"}),this._log.info("createOffer"),h.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0,voiceActivityDetection:!1}).then(f=>(f.sdp=Z8(f.sdp),this._log.info("setOffer"),h.setLocalDescription(f))).then(()=>{const f={sessionId:Fj(),streamurl:i,clientinfo:this.core.environment.getOSString(),localsdp:h.localDescription};return this.exchangeSDP(i,f)}).then(f=>(this._log.info("setAnswer"),h.setRemoteDescription(f))).catch(l)}catch(I){l(I)}this.connectionTimeoutId=setTimeout(()=>l(new Error("connection timeout")),1e4)})}async exchangeSDP(i,r){let l,I,h;try{this._log.info("exchangeSDP");const f=oaA(i);if(!f)throw new Error("streamDomain is empty");const{signalDomain:w,cached:_}=await this.fetchSignalDomain(f);if(!w)throw new Error("signalDomain is empty");{this._log.info("try exchangeSDP signalDomain:",w,_);const G=await this.doExchangeSDP(`https://${w}`,r,3);l=G.url,I=G.remoteSdp,h=G.svrSig}}catch(f){this._log.warn("exchangeSDP failed, fallback",f);try{const w=await this.core.utils.promiseAny(iaA.map(_=>this.doExchangeSDP(`https://${_}`,r,3)));l=w.url,I=w.remoteSdp,h=w.svrSig}catch(w){throw this._log.error("exchangeSDP failed",w),w[0]||w}}return this.streamURL=i,this.signalURL=l,this.svrSig=h,I}async reconnect(i){var r,l;if(!this.isReconnecting){this.isReconnecting=!0;try{this._log.warn("start reconnect"),await this.connect(i),this._log.warn("reconnect success")}catch(I){this._log.error("reconnect error",I);const{RtcError:h,ErrorCode:f}=this.core.errorModule;(l=(r=this.callback)==null?void 0:r.onError)==null||l.call(r,new h({code:f.OPERATION_FAILED,message:"reconnect failed"}))}finally{this.isReconnecting=!1}}}async logSelectedCandidate(){if(!this.peerConnection)return;const i=await this.peerConnection.getStats();for(const[r,l]of i)if(this.core.rtcDectection.isSelectedCandidatePair(l)){const I=i.get(l.localCandidateId),h=i.get(l.remoteCandidateId);I&&this._log.info(`local candidate: ${I.candidateType} ${I.protocol}:${I.ip||I.address}:${I.port} ${I.networkType||""} ${I.relayProtocol?`relayProtocol:${I.relayProtocol} url: ${I.url}`:""}`),h&&this._log.info(`remote candidate: ${h.candidateType} ${h.protocol}:${h.ip||h.address}:${h.port}`);break}}async doExchangeSDP(i,r,l){const I=`${i}/webrtc/v1/pullstream`,h=await U1(I,r,{timeout:l}),{errcode:f,errmsg:w,remotesdp:_,svrsig:G}=h;if(f!==0){const U=new Error(`errCode:${f}, errMsg:${w}`);throw U.name="RequestSignalError",U}return{url:i,remoteSdp:_,svrSig:G}}createEncodedStreams(i){var r;if(this.enableSEI&&this.core.rtcDectection.IS_INSERTABLE_STREAM_SUPPORTED)try{if(this._log.warn("enableSEI",this.enableSEI),!this.insertableStreamsAbortMap.has(i)){const l=i.createEncodedStreams(),I=new AbortController,h={abortController:I,enqueue:f=>i.track.kind==="audio"?f:this.decodeVideoFrame(f)};l.readable.pipeThrough(new TransformStream({transform:(f,w)=>{const _=h.enqueue(f);_&&w.enqueue(_)}})).pipeTo(l.writable,I).catch(f=>{f!=="destroy"&&this._log.warn(f)}),(r=this.insertableStreamsAbortMap.get(i))==null||r.abort("destroy"),this.insertableStreamsAbortMap.set(i,I)}}catch(l){this._log.warn(`createEncodedStreams ${i.track.kind} failed`,l)}}initReceiverTransform(i,r){this.peerConnection&&this.enableSEI&&this.scriptTransformWorker&&!i.transform&&(i.transform=new RTCRtpScriptTransform(this.scriptTransformWorker,{isReceiver:!0,isAudio:r,userId:"",streamType:this.core.enums.RemoteStreamType.Main}))}initScriptTransformWorker(){const{room:i,rtcDectection:r,createScriptTransformWorker:l,trtc:I,TRTC:h}=this.core;!this.enableSEI||r.IS_INSERTABLE_STREAM_SUPPORTED||this.scriptTransformWorker||r.IS_SCRIPT_TRANSFORM_SUPPORTED&&(this._log.info("initScriptTransformWorker"),this.scriptTransformWorker=l({videoEncodePipeline:i.videoManager.encodePipeline,videoDecodePipeline:i.videoManager.decodePipeline,audioEncodePipeline:i.audioManager.encodePipeline,audioDecodePipeline:i.audioManager.decodePipeline}),this.scriptTransformWorker.onmessage=f=>{var w,_;f.data.type==="sei"&&((_=(w=this.callback)==null?void 0:w.onSEIMessage)==null||_.call(w,{data:f.data.data,seiPayloadType:f.data.seiPayloadType}))},this.scriptTransformWorker.onerror=f=>{this._log.error("scriptTransformWorker error: ",f.message)})}decodeVideoFrame(i){if(!this.core.room.videoManager)return i;for(const r of this.core.room.videoManager.decodePipeline)if(r&&!(i=r({frame:i})))return;return i}async fetchStopStream(){if(this.streamURL&&this.svrSig&&this.signalURL)try{const i=`${this.signalURL}/webrtc/v1/stopstream`,r=await U1(i,{streamurl:this.streamURL,svrsig:this.svrSig},{timeout:3}),{errcode:l,errmsg:I}=r;if(l!==0)throw new Error(`errCode:${l}, errmsg:${I}`);return r}catch(i){this._log.error("fetchStopStream error",i)}}onTrack(i){const{track:r}=i;this.createEncodedStreams(i.receiver),this.initReceiverTransform(i.receiver,r.kind==="audio"),r.kind==="audio"?this.player.setAudioTrack(r):this.player.setVideoTrack(r)}onSEIMessage({room:i,nalu:r}){var l,I;i===this.core.room&&((I=(l=this.callback)==null?void 0:l.onSEIMessage)==null||I.call(l,{data:r.seiPayload.buffer,seiPayloadType:r.seiPayloadType}))}async fetchSignalDomain(i,r=F1[0]){var l;const I=`https://${r}/signal_query`;try{const h=window.localStorage.getItem(xj);if(h){const U=JSON.parse(h);if(((l=U[i])==null?void 0:l.expire)-new Date().getTime()>0)return{signalDomain:U[i].signal,cached:!0}}const f=await U1(I,{domain:i,requestid:Fj(16),client_type:"Web",client_info:window.navigator.userAgent}),{errcode:w,errmsg:_,data:G}=f;if(w===0){const{signal_domain:U,cache_time:j}=G;let lA={};const sA=window.localStorage.getItem(xj);sA&&(lA=JSON.parse(sA)),lA[i]={signal:U,expire:new Date().getTime()+1e3*j};try{window.localStorage.setItem(xj,JSON.stringify(lA))}catch{}return{signalDomain:U,cached:!1}}throw new Error(`errCode:${w} errmsg:${_}`)}catch(h){return this._log.error("fetchSignalDomain error",h),F1[1]&&r!==F1[1]?this.fetchSignalDomain(i,F1[1]):{signalDomain:"",cached:!1}}}};pn(sY,"Name","LEBPlayer"),P_([XrA({fnName:"connect"})],sY.prototype,"stop"),P_([ZrA({settings:{retries:1/0,timeout:2e3},onRetrying(t){var i;if(this._log.warn(`retry connect ${t}`),t>=3&&((i=this.callback)==null?void 0:i.onError)&&!this.isFireWallErrorEmitted){const{RtcError:r,ErrorCode:l,ErrorCodeDictionary:I}=this.core.errorModule;this.isFireWallErrorEmitted=!0,this.callback.onError(new r({code:l.OPERATION_FAILED,extraCode:I.FIREWALL_RESTRICTION,message:"firewall restriction"}))}},onError(t,i,r,l){var I;if(this._log.warn("connect failed",t),this.peerConnection&&(this.peerConnection.close(),delete this.peerConnection),!this.isStopped&&((I=t.message||t)==null?void 0:I.includes("connection")))i();else{const{RtcError:h,ErrorCode:f}=this.core.errorModule;r(new h({code:f.UNKNOWN_ERROR,message:t.message}))}}})],sY.prototype,"connect");var q9=sY,U1=async(t,i,r={})=>{const{timeout:l=10}=r;let I,h=0,f={};window.AbortController&&(I=new window.AbortController,f={signal:I.signal},h=window.setTimeout(()=>I.abort(),1e3*l));const w=await fetch(t,OrA({body:JSON.stringify(i),cache:"no-cache",credentials:"same-origin",headers:{"content-type":"text/plain;charset=utf-8"},method:"POST",mode:"cors"},f));if(h&&window.clearTimeout(h),w.status!==200)throw new Error(`Network Error, status code:${w.status}`);return w.json()},F1=["webrtc-signal-scheduler.tlivesource.com","bak-webrtc-signal-scheduler.tlivesource.com"],xj="LEB_PLAYER_STORAGE_KEY",oaA=t=>{const i=/^(?:webrtc:\/\/)([0-9.\-A-Za-z_]+)(?:\/)(?:[0-9.\-A-Za-z_=]+)(?:\/)(?:[^?#]*)(?:\?*)(?:[^?#]*)/.exec(t);return i?i[1]:""},saA=q9;const naA=Object.freeze(Object.defineProperty({__proto__:null,LEBPlayer:q9,default:saA},Symbol.toStringTag,{value:"Module"})),raA=kU(naA);var K9=Object.defineProperty,aaA=Object.defineProperties,gaA=Object.getOwnPropertyDescriptors,eZ=Object.getOwnPropertySymbols,caA=Object.prototype.hasOwnProperty,laA=Object.prototype.propertyIsEnumerable,O3=(t,i,r)=>i in t?K9(t,i,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[i]=r,IaA=(t,i)=>{for(var r in i||(i={}))caA.call(i,r)&&O3(t,r,i[r]);if(eZ)for(var r of eZ(i))laA.call(i,r)&&O3(t,r,i[r]);return t},uaA=(t,i)=>aaA(t,gaA(i)),EaA=(t,i)=>{for(var r in i)K9(t,r,{get:i[r],enumerable:!0})},Hg=(t,i,r)=>O3(t,typeof i!="symbol"?i+"":i,r);async function daA({sdkAppId:t,userId:i,userSig:r,core:l}){var I;const h=Math.round(new Date().getTime()/1e3);try{const f=await l.schedule.getAbilityConfig(t,l.schedule.ScheduleRequestType.TRTC_AUTO_CONF,{sdkAppId:t,userId:i,userSig:r,timestamp:h});l.log.info(`virtual background ability response: ${JSON.stringify(f)}`);const{data:w}=f;return(I=w?.trtcAutoConf)!=null&&I.web_ar?{auth:!0,timestamp:h}:{auth:!1}}catch(f){return l.log.error("virtual background fetch error",f),{auth:!1}}}var CaA={sdkAppId:{required:!0,type:"number"},userId:{required:!0,type:"string"},userSig:{required:!0,type:"string"}};function haA(t){return{name:"VirtualBackgroundOptions",type:"object",required:!0,allowEmpty:!1,properties:uaA(IaA({},CaA),{type:{required:!1,type:"string",values:["image","blur","color"]},src:{required:!1,type:"string"},blurLevel:{required:!1,type:"number",min:1,max:10},onAbort:{required:!1},color:{required:!1,type:["array","string"]},enableFaceCentering:{required:!1,type:"boolean"},enableEffectOptimization:{required:!1,type:"boolean"}}),validate(i,r,l,I){var h;const{RtcError:f,ErrorCode:w,ErrorCodeDictionary:_}=t.errorModule;if(!i)return;const{type:G,src:U,onAbort:j}=i;if(G==="image"&&!U)throw new f({code:w.INVALID_PARAMETER,extraCode:_.INVALID_PARAMETER_REQUIRED,fnName:l,messageParams:{key:"src"}});if(j&&!t.utils.isFunction(j))throw new f({code:w.INVALID_PARAMETER,extraCode:_.INVALID_PARAMETER_TYPE,fnName:l,messageParams:{key:"onAbort",value:typeof j,rule:{type:"Function"}}});if(!((h=t.room.videoManager.cameraTrack)!=null&&h.mediaTrack))throw new f({code:w.INVALID_OPERATION,extraCode:_.INVALID_OPERATION_NEED_VIDEO,fnName:l})}}}function BaA(t){return{name:"UpdateVirtualBackgroundOptions",type:"object",required:!0,allowEmpty:!1,properties:{type:{required:!0,type:"string",values:["image","blur","color"]},src:{required:!1,type:"string"},blurLevel:{required:!1,type:"number",min:1,max:10},color:{required:!1,type:["array","string"]},enableFaceCentering:{required:!1,type:"boolean"},enableEffectOptimization:{required:!1,type:"boolean"}},validate(i,r,l,I){if(!i)return;const{RtcError:h,ErrorCode:f,ErrorCodeDictionary:w}=t.errorModule,{type:_,src:G}=i;if(_==="image"&&!G)throw new h({code:f.INVALID_PARAMETER,extraCode:w.INVALID_PARAMETER_REQUIRED,fnName:l,messageParams:{key:"src"}})}}}function QaA(t){return{name:"StopVirtualBackgroundOptions",required:!1}}var paA=(()=>{var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(i={}){var r,l,I=i;I.ready=new Promise(($,K)=>{r=$,l=K});var h=Object.assign({},I),f="";typeof document<"u"&&document.currentScript&&(f=document.currentScript.src),t&&(f=t),f=f.indexOf("blob:")!==0?f.substr(0,f.replace(/[?#].*/,"").lastIndexOf("/")+1):"";var w,_,G=I.print||console.log.bind(console),U=I.printErr||console.error.bind(console);function j($){if(Me($))return function(K){for(var vA=atob(K),qA=new Uint8Array(vA.length),Ae=0;Ae$.startsWith(yt);function Oe($){return Promise.resolve().then(()=>function(K){if(K==re&&w)return new Uint8Array(w);var vA=j(K);if(vA)return vA;throw"both async and sync fetching of the wasm failed"}($))}function gt($,K,vA,qA){return function(Ae,me,Pe){return Oe(Ae).then(Fe=>WebAssembly.instantiate(Fe,me)).then(Fe=>Fe).then(Pe,Fe=>{U(`failed to asynchronously prepare wasm: ${Fe}`),Et(Fe)})}(K,vA,qA)}Me(re="data:application/octet-stream;base64,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IAEoAgA2AgAgAiABKAIENgIEIAIgASgCCDYCCCACIAEoAgw2AgwgAiABKAIQNgIQIAIgASgCFDYCFCACIAEoAhg2AhggAiABKAIcNgIcIAIgASgCIDYCICACIAEoAiQ2AiQgAiABKAIoNgIoIAIgASgCLDYCLCACIAEoAjA2AjAgAiABKAI0NgI0IAIgASgCODYCOCACIAEoAjw2AjwgAUFAayEBIAJBQGsiAiAFTQ0ACwsgAiAETw0BA0AgAiABKAIANgIAIAFBBGohASACQQRqIgIgBEkNAAsMAQsgA0EESQRAIAAhAgwBCyAAIANBBGsiBEsEQCAAIQIMAQsgACECA0AgAiABLQAAOgAAIAIgAS0AAToAASACIAEtAAI6AAIgAiABLQADOgADIAFBBGohASACQQRqIgIgBE0NAAsLIAIgA0kEQANAIAIgAS0AADoAACABQQFqIQEgAkEBaiICIANHDQALCyAACwsAIAEgAiAAEEIaCxIAIAFBAXRB8MoAakECIAAQQgv5AQEEfwJ/IAEQKiECIwBBEGsiBSQAAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0AC0H/AHELIgRBAE8EQAJAIAIgAC0AC0EHdgR/IAAoAghB/////wdxQQFrBUEKCyIDIARrTQRAIAJFDQECfyAALQALQQd2BEAgACgCAAwBCyAACyIDIAQEfyACIANqIAMgBBBFIAEgAkEAIAMgBGogAUsbQQAgASADTxtqBSABCyACEEUgACACIARqIgEQMSAFQQA6AA8gASADaiAFLQAPOgAADAELIAAgAyACIARqIANrIARBACACIAEQRAsgBUEQaiQAIAAMAQsQJwALC/ICAgJ/AX4CQCACRQ0AIAAgAToAACAAIAJqIgNBAWsgAToAACACQQNJDQAgACABOgACIAAgAToAASADQQNrIAE6AAAgA0ECayABOgAAIAJBB0kNACAAIAE6AAMgA0EEayABOgAAIAJBCUkNACAAQQAgAGtBA3EiBGoiAyABQf8BcUGBgoQIbCIBNgIAIAMgAiAEa0F8cSIEaiICQQRrIAE2AgAgBEEJSQ0AIAMgATYCCCADIAE2AgQgAkEIayABNgIAIAJBDGsgATYCACAEQRlJDQAgAyABNgIYIAMgATYCFCADIAE2AhAgAyABNgIMIAJBEGsgATYCACACQRRr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ACACQQA6AA8DQCABBEAgACACLQAPOgAAIAFBAWshASAAQQFqIQAMAQsLIAJBEGokAAsaACAALQALQQd2BEAgACgCCBogACgCABAZCwvmAQEFfyMAQRBrIgUkACMAQSBrIgMkACMAQRBrIgQkACAEIAA2AgwgBCAAIAFqNgIIIAMgBCgCDDYCGCADIAQoAgg2AhwgBEEQaiQAIAMoAhghBCADKAIcIQYjAEEQayIBJAAgASAGNgIMIAIgBCAGIARrIgQQQyABIAIgBGo2AgggAyABKAIMNgIQIAMgASgCCDYCFCABQRBqJAAgAyAAIAMoAhAgAGtqNgIMIAMgAiADKAIUIAJrajYCCCAFIAMoAgw2AgggBSADKAIINgIMIANBIGokACAFKAIMIQcgBUEQaiQAIAcLDwAgAgRAIAAgASACEDILC/UCAQV/IwBBEGsiByQAIAIgAUF/c0Hv////B2pNBEACfyAALQALQQd2BEAgACgCAAwBCyAACyEIIAdBBGoiCSAAIAFB5////wNJBH8gByABQQF0NgIMIAcgASACajYCBCMAQRBrIgIkACAJKAIAIAdBDGoiCigCAEkhCyACQRBqJAAgCiAJIAsbKAIAIgJBC08EfyACQRBqQXBxIgIgAkEBayICIAJBC0YbBUEKC0EBagVB7////wcLEDAgBygCBCECIAcoAggaIAQEQCACIAggBBAjCyAFBEAgAiAEaiAGIAUQIwsgAyAEayEGIAMgBEcEQCACIARqIAVqIAQgCGogBhAjCyABQQpHBEAgCBAZCyAAIAI2AgAgACAAKAIIQYCAgIB4cSAHKAIIQf////8HcXI2AgggACAAKAIIQYCAgIB4cjYCCCAAIAQgBWogBmoiADYCBCAHQQA6AAwgACACaiAHLQAMOgAAIAdBEGokAA8LECcACwoAIAAgASACEEMLuQEBBH8jAEEQayIEJAAgBCACNgIMIwBBoAFrIgMkACADIAAgA0GeAWogARsiBjYClAFBfyEFIAMgAUEBayIAQQAgACABTRs2ApgBIANBAEGQARAmIgBBfzYCTCAAQSA2AiQgAEF/NgJQIAAgAEGfAWo2AiwgACAAQZQBajYCVAJAIAFBAEgEQEHo3gBBPTYCAAwBCyAGQQA6AAAgAEH9CiACQR8QTSEFCyAAQaABaiQAIARBEGokACAFCwQAIAALmQIAIABFBEBBAA8LAn8CQCAABH8gAUH/AE0NAQJAQbTWACgCACgCAEUEQCABQYB/cUGAvwNGDQMMAQsgAUH/D00EQCAAIAFBP3FBgAFyOgABIAAgAUEGdkHAAXI6AABBAgwECyABQYBAcUGAwANHIAFBgLADT3FFBEAgACABQT9xQYABcjoAAiAAIAFBDHZB4AFyOgAAIAAgAUEGdkE/cUGAAXI6AAFBAwwECyABQYCABGtB//8/TQRAIAAgAUE/cUGAAXI6AAMgACABQRJ2QfABcjoAACAAIAFBBnZBP3FBgAFyOgACIAAgAUEMdkE/cUGAAXI6AAFBBAwECwtB6N4AQRk2AgBBfwVBAQsMAQsgACABOgAAQQELC54YAxN/AXwCfiMAQbAEayIMJAAgDEEANgIsAkAgAb0iGkIAUwRAQQEhD0GUCCETIAGaIgG9IRoMAQsgBEGAEHEEQEEBIQ9BlwghEwwBC0GaCEGVCCAEQQFxIg8bIRMgD0UhFQsCQCAaQoCAgICAgID4/wCDQoCAgICAgID4/wBRBEAgAEEgIAIgD0EDaiIDIARB//97cRAfIAAgEyAPEB0gAEHLCUHVCyAFQSBxIgUbQfkKQdkLIAUbIAEgAWIbQQMQHSAAQSAgAiADIARBgMAAcxAfIAMgAiACIANIGyEJDAELIAxBEGohEgJAAn8CQCABIAxBLGoQTiIBIAGgIgFEAAAAAAAAAABiBEAgDCAMKAIsIgZBAWs2AiwgBUEgciIOQeEARw0BDAMLIAVBIHIiDkHhAEYNAiAMKAIsIQpBBiADIANBAEgbDAELIAwgBkEdayIKNgIsIAFEAAAAAAAAsEGiIQFBBiADIANBAEgbCyELIAxBMGpBoAJBACAKQQBOG2oiDSEHA0AgBwJ/IAFEAAAAAAAA8EFjIAFEAAAAAAAAAABmcQRAIAGrDAELQQALIgM2AgAgB0EEaiEHIAEgA7ihRAAAAABlzc1BoiIBRAAAAAAAAAAAYg0ACwJAIApBAEwEQCAKIQMgByEGIA0hCAwBCyANIQggCiEDA0BBHSADIANBHU4bIQMCQCAHQQRrIgYgCEkNACADrSEbQgAhGgNAIAYgGkL/////D4MgBjUCACAbhnwiGiAaQoCU69wDgCIaQoCU69wDfn0+AgAgBkEEayIGIAhPDQALIBqnIgZFDQAgCEEEayIIIAY2AgALA0AgCCAHIgZJBEAgBkEEayIHKAIARQ0BCwsgDCAMKAIsIANrIgM2AiwgBiEHIANBAEoNAAsLIANBAEgEQCALQRlqQQluQQFqIRAgDkHmAEYhEQNAQQlBACADayIDIANBCU4bIQkCQCAGIAhNBEAgCCgCACEHDAELQYCU69wDIAl2IRRBfyAJdEF/cyEWQQAhAyAIIQcDQCAHIAMgBygCACIXIAl2ajYCACAWIBdxIBRsIQMgB0EEaiIHIAZJDQALIAgoAgAhByADRQ0AIAYgAzYCACAGQQRqIQYLIAwgDCgCLCAJaiIDNgIsIA0gCCAHRUECdGoiCCARGyIHIBBBAnRqIAYgBiAHa0ECdSAQShshBiADQQBIDQALC0EAIQMCQCAGIAhNDQAgDSAIa0ECdUEJbCEDQQohByAIKAIAIglBCkkNAANAIANBAWohAyAJIAdBCmwiB08NAAsLIAsgA0EAIA5B5gBHG2sgDkHnAEYgC0EAR3FrIgcgBiANa0ECdUEJbEEJa0gEQCAMQTBqQQRBpAIgCkEASBtqIAdBgMgAaiIJQQltIhFBAnRqIhBBgCBrIQpBCiEHIAkgEUEJbGsiCUEHTARAA0AgB0EKbCEHIAlBAWoiCUEIRw0ACwsCQCAKKAIAIhEgESAHbiIUIAdsayIJRSAQQfwfayIWIAZGcQ0AAkAgFEEBcUUEQEQAAAAAAABAQyEBIAdBgJTr3ANHDQEgCCAKTw0BIBBBhCBrLQAAQQFxRQ0BC0QBAAAAAABAQyEBC0QAAAAAAADgP0QAAAAAAADwP0QAAAAAAAD4PyAGIBZGG0QAAAAAAAD4PyAJIAdBAXYiFEYbIAkgFEkbIRkCQCAVDQAgEy0AAEEtRw0AIBmaIRkgAZohAQsgCiARIAlrIgk2AgAgASAZoCABYQ0AIAogByAJaiIDNgIAIANBgJTr3ANPBEADQCAKQQA2AgAgCCAKQQRrIgpLBEAgCEEEayIIQQA2AgALIAogCigCAEEBaiIDNgIAIANB/5Pr3ANLDQALCyANIAhrQQJ1QQlsIQNBCiEHIAgoAgAiCUEKSQ0AA0AgA0EBaiEDIAkgB0EKbCIHTw0ACwsgCkEEaiIHIAYgBiAHSxshBgsDQCAGIgcgCE0iCUUEQCAGQQRrIgYoAgBFDQELCwJAIA5B5wBHBEAgBEEIcSEKDAELIANBf3NBfyALQQEgCxsiBiADSiADQXtKcSIKGyAGaiELQX9BfiAKGyAFaiEFIARBCHEiCg0AQXchBgJAIAkNACAHQQRrKAIAIg5FDQBBCiEJQQAhBiAOQQpwDQADQCAGIgpBAWohBiAOIAlBCmwiCXBFDQALIApBf3MhBgsgByANa0ECdUEJbCEJIAVBX3FBxgBGBEBBACEKIAsgBiAJakEJayIGQQAgBkEAShsiBiAGIAtKGyELDAELQQAhCiALIAMgCWogBmpBCWsiBkEAIAZBAEobIgYgBiALShshCwtBfyEJIAtB/f///wdB/v///wcgCiALciIRG0oNASALIBFBAEdqQQFqIQ4CQCAFQV9xIhVBxgBGBEAgAyAOQf////8Hc0oNAyADQQAgA0EAShshBgwBCyASIAMgA0EfdSIGcyAGa60gEhApIgZrQQFMBEADQCAGQQFrIgZBMDoAACASIAZrQQJIDQALCyAGQQJrIhAgBToAACAGQQFrQS1BKyADQQBIGzoAACASIBBrIgYgDkH/////B3NKDQILIAYgDmoiAyAPQf////8Hc0oNASAAQSAgAiADIA9qIgUgBBAfIAAgEyAPEB0gAEEwIAIgBSAEQYCABHMQHwJAAkACQCAVQcYARgRAIAxBEGoiBkEIciEDIAZBCXIhCiANIAggCCANSxsiCSEIA0AgCDUCACAKECkhBgJAIAggCUcEQCAGIAxBEGpNDQEDQCAGQQFrIgZBMDoAACAGIAxBEGpLDQALDAELIAYgCkcNACAMQTA6ABggAyEGCyAAIAYgCiAGaxAdIAhBBGoiCCANTQ0ACyARBEAgAEGhEkEBEB0LIAcgCE0NASALQQBMDQEDQCAINQIAIAoQKSIGIAxBEGpLBEADQCAGQQFrIgZBMDoAACAGIAxBEGpLDQALCyAAIAZBCSALIAtBCU4bEB0gC0EJayEGIAhBBGoiCCAHTw0DIAtBCUohGCAGIQsgGA0ACwwCCwJAIAtBAEgNACAHIAhBBGogByAISxshCSAMQRBqIgZBCHIhAyAGQQlyIQ0gCCEHA0AgDSAHNQIAIA0QKSIGRgRAIAxBMDoAGCADIQYLAkAgByAIRwRAIAYgDEEQak0NAQNAIAZBAWsiBkEwOgAAIAYgDEEQaksNAAsMAQsgACAGQQEQHSAGQQFqIQYgCiALckUNACAAQaESQQEQHQsgACAGIA0gBmsiBiALIAYgC0gbEB0gCyAGayELIAdBBGoiByAJTw0BIAtBAE4NAAsLIABBMCALQRJqQRJBABAfIAAgECASIBBrEB0MAgsgCyEGCyAAQTAgBkEJakEJQQAQHwsgAEEgIAIgBSAEQYDAAHMQHyAFIAIgAiAFSBshCQwBCyATIAVBGnRBH3VBCXFqIQgCQCADQQtLDQBBDCADayEGRAAAAAAAADBAIRkDQCAZRAAAAAAAADBAoiEZIAZBAWsiBg0ACyAILQAAQS1GBEAgGSABmiAZoaCaIQEMAQsgASAZoCAZoSEBCyASIAwoAiwiBiAGQR91IgZzIAZrrSASECkiBkYEQCAMQTA6AA8gDEEPaiEGCyAPQQJyIQsgBUEgcSENIAwoAiwhByAGQQJrIgogBUEPajoAACAGQQFrQS1BKyAHQQBIGzoAACAEQQhxIQYgDEEQaiEHA0AgByIFAn8gAZlEAAAAAAAA4EFjBEAgAaoMAQtBgICAgHgLIgdBsMoAai0AACANcjoAACABIAe3oUQAAAAAAAAwQKIhAQJAIAVBAWoiByAMQRBqa0EBRw0AAkAgBg0AIANBAEoNACABRAAAAAAAAAAAYQ0BCyAFQS46AAEgBUECaiEHCyABRAAAAAAAAAAAYg0AC0F/IQlB/f///wcgCyASIAprIgZqIg1rIANIDQAgAEEgIAIgDSADQQJqIAcgDEEQaiIHayIFIAVBAmsgA0gbIAUgAxsiCWoiAyAEEB8gACAIIAsQHSAAQTAgAiADIARBgIAEcxAfIAAgByAFEB0gAEEwIAkgBWtBAEEAEB8gACAKIAYQHSAAQSAgAiADIARBgMAAcxAfIAMgAiACIANIGyEJCyAMQbAEaiQAIAkLvAIAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACAkKCAkBAgMECgkKCggJBQYHCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCyACIAIoAgAiAUEEajYCACAAIAEyAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEzAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAPCyACIAIoAgAiAUEEajYCACAAIAExAAA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAErAwA5AwAPCyAAIAIgAxEAAAsPCyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAPCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwALcgEDfyAAKAIALAAAQTBrQQpPBEBBAA8LA0AgACgCACEDQX8hASACQcyZs+YATQRAQX8gAywAAEEwayIBIAJBCmwiAmogASACQf////8Hc0obIQELIAAgA0EBajYCACABIQIgAywAAUEwa0EKSQ0ACyACC9AUAhh/AX4jAEHQAGsiByQAIAcgATYCTCAEQcABayEXIANBgANrIRggB0E3aiEZIAdBOGohEwJAAkACQANAQQAhBgNAIAEhDCAGIBJB/////wdzSg0CIAYgEmohEgJAAkACQCABIgYtAAAiCARAA0ACQAJAIAhB/wFxIgFFBEAgBiEBDAELIAFBJUcNASAGIQgDQCAILQABQSVHBEAgCCEBDAILIAZBAWohBiAILQACIRsgCEECaiIBIQggG0ElRg0ACwsgBiAMayIGIBJB/////wdzIhpKDQggAARAIAAgDCAGEB0LIAYNBiAHIAE2AkwgAUEBaiEGQX8hDgJAIAEsAAFBMGsiCkEKTw0AIAEtAAJBJEcNACABQQNqIQYgCiEOQQEhFAsgByAGNgJMQQAhCwJAIAYsAAAiCEEgayIBQR9LBEAgBiEKDAELIAYhCkEBIAF0IgFBidEEcUUNAANAIAcgBkEBaiIKNgJMIAEgC3IhCyAGLAABIghBIGsiAUEgTw0BIAohBkEBIAF0IgFBidEEcQ0ACwsCQCAIQSpGBEAgCkEBaiEIAn8CQCAKLAABQTBrQQpPDQAgCi0AAkEkRw0AIAgsAAAhASAKQQNqIQhBASEUAn8gAEUEQCAXIAFBAnRqQQo2AgBBAAwBCyAYIAFBA3RqKAIACwwBCyAUDQYgAEUEQCAHIAg2AkxBACEUQQAhDwwDCyACIAIoAgAiAUEEajYCAEEAIRQgASgCAAshDyAHIAg2AkwgD0EATg0BQQAgD2shDyALQYDAAHIhCwwBCyAHQcwAahBLIg9BAEgNCSAHKAJMIQgLQQAhBkF/IQkCfyAILQAAQS5HBEAgCCEBQQAMAQsgCC0AAUEqRgRAIAhBAmohAQJAAkAgCCwAAkEwa0EKTw0AIAgtAANBJEcNACABLAAAIQECfyAARQRAIBcgAUECdGpBCjYCAEEADAELIBggAUEDdGooAgALIQkgCEEEaiEBDAELIBQNBiAARQRAQQAhCQwBCyACIAIoAgAiCkEEajYCACAKKAIAIQkLIAcgATYCTCAJQQBODAELIAcgCEEBajYCTCAHQcwAahBLIQkgBygCTCEBQQELIRUDQCAGIQ1BHCEQIAEiESwAACIGQfsAa0FGSQ0KIAFBAWohASAGIA1BOmxqQZ/GAGotAAAiBkEBa0EISQ0ACyAHIAE2AkwCQCAGQRtHBEAgBkUNCyAOQQBOBEAgAEUEQCAEIA5BAnRqIAY2AgAMCwsgByADIA5BA3RqKQMANwNADAILIABFDQcgB0FAayAGIAIgBRBKDAELIA5BAE4NCkEAIQYgAEUNBwtBfyEQIAAtAABBIHENCiALQf//e3EiCCALIAtBgMAAcRshC0EAIQ5BigghFiATIQoCQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQCARLAAAIgZBX3EgBiAGQQ9xQQNGGyAGIA0bIgZB2ABrDiEEFBQUFBQUFBQOFA8GDg4OFAYUFBQUAgUDFBQJFAEUFAQACwJAIAZBwQBrDgcOFAsUDg4OAAsgBkHTAEYNCQwTCyAHKQNAIR5BiggMBQtBACEGAkACQAJAAkACQAJAAkAgDUH/AXEOCAABAgMEGgUGGgsgBygCQCASNgIADBkLIAcoAkAgEjYCAAwYCyAHKAJAIBKsNwMADBcLIAcoAkAgEjsBAAwWCyAHKAJAIBI6AAAMFQsgBygCQCASNgIADBQLIAcoAkAgEqw3AwAMEwtBCCAJIAlBCE0bIQkgC0EIciELQfgAIQYLIBMhASAHKQNAIh5CAFIEQCAGQSBxIQgDQCABQQFrIgEgHqdBD3FBsMoAai0AACAIcjoAACAeQg9WIRwgHkIEiCEeIBwNAAsLIAEhDCAHKQNAUA0DIAtBCHFFDQMgBkEEdkGKCGohFkECIQ4MAwsgEyEBIAcpA0AiHkIAUgRAA0AgAUEBayIBIB6nQQdxQTByOgAAIB5CB1YhHSAeQgOIIR4gHQ0ACwsgASEMIAtBCHFFDQIgCSATIAFrIgFBAWogASAJSBshCQwCCyAHKQNAIh5CAFMEQCAHQgAgHn0iHjcDQEEBIQ5BiggMAQsgC0GAEHEEQEEBIQ5BiwgMAQtBjAhBigggC0EBcSIOGwshFiAeIBMQKSEMCyAVIAlBAEhxDQ8gC0H//3txIAsgFRshCwJAIAcpA0AiHkIAUg0AIAkNACATIQxBACEJDAwLIAkgHlAgEyAMa2oiASABIAlIGyEJDAsLAn9B/////wcgCSAJQf////8HTxsiCiIRQQBHIQsCQAJAAkAgBygCQCIBQa8SIAEbIgwiBiINQQNxRQ0AIBFFDQADQCANLQAARQ0CIBFBAWsiEUEARyELIA1BAWoiDUEDcUUNASARDQALCyALRQ0BAkAgDS0AAEUNACARQQRJDQADQCANKAIAIgFBf3MgAUGBgoQIa3FBgIGChHhxDQIgDUEEaiENIBFBBGsiEUEDSw0ACwsgEUUNAQsDQCANIA0tAABFDQIaIA1BAWohDSARQQFrIhENAAsLQQALIgEgBmsgCiABGyIBIAxqIQogCUEATgRAIAghCyABIQkMCwsgCCELIAEhCSAKLQAADQ4MCgsgCQRAIAcoAkAMAgtBACEGIABBICAPQQAgCxAfDAILIAdBADYCDCAHIAcpA0A+AgggByAHQQhqIgY2AkBBfyEJIAYLIQhBACEGAkADQCAIKAIAIgxFDQECQCAHQQRqIAwQSCIKQQBIIgwNACAKIAkgBmtLDQAgCEEEaiEIIAYgCmoiBiAJSQ0BDAILCyAMDQ4LQT0hECAGQQBIDQwgAEEgIA8gBiALEB8gBkUEQEEAIQYMAQtBACEKIAcoAkAhCANAIAgoAgAiDEUNASAHQQRqIgkgDBBIIgwgCmoiCiAGSw0BIAAgCSAMEB0gCEEEaiEIIAYgCksNAAsLIABBICAPIAYgC0GAwABzEB8gDyAGIAYgD0gbIQYMCAsgFSAJQQBIcQ0JQT0hECAAIAcrA0AgDyAJIAsgBhBJIgZBAE4NBwwKCyAHIAcpA0A8ADdBASEJIBkhDCAIIQsMBAsgBi0AASEIIAZBAWohBgwACwALIBIhECAADQcgFEUNAkEBIQYDQCAEIAZBAnRqKAIAIgAEQCADIAZBA3RqIAAgAiAFEEpBASEQIAZBAWoiBkEKRw0BDAkLC0EBIRAgBkEKTw0HA0AgBCAGQQJ0aigCAA0BIAZBAWoiBkEKRw0ACwwHC0EcIRAMBQsgCSAKIAxrIgogCSAKShsiASAOQf////8Hc0oNA0E9IRAgDyABIA5qIgggCCAPSBsiBiAaSg0EIABBICAGIAggCxAfIAAgFiAOEB0gAEEwIAYgCCALQYCABHMQHyAAQTAgASAKQQAQHyAAIAwgChAdIABBICAGIAggC0GAwABzEB8gBygCTCEBDAELCwtBACEQDAILQT0hEAtB6N4AIBA2AgBBfyEQCyAHQdAAaiQAIBALvwIBBX8jAEHQAWsiBCQAIAQgAjYCzAEgBEGgAWoiAkEAQSgQJhogBCAEKALMATYCyAECQEEAIAEgBEHIAWogBEHQAGogAiADEExBAEgEQEF/IQMMAQsgACgCTEEASCEIIAAgACgCACIHQV9xNgIAAn8CQAJAIAAoAjBFBEAgAEHQADYCMCAAQQA2AhwgAEIANwMQIAAoAiwhBSAAIAQ2AiwMAQsgACgCEA0BC0F/IAAQTw0BGgsgACABIARByAFqIARB0ABqIARBoAFqIAMQTAshAiAFBEAgAEEAQQAgACgCJBECABogAEEANgIwIAAgBTYCLCAAQQA2AhwgACgCFCEBIABCADcDECACQX8gARshAgsgACAAKAIAIgAgB0EgcXI2AgBBfyACIABBIHEbIQMgCA0ACyAEQdABaiQAIAMLfgIBfwF+IAC9IgNCNIinQf8PcSICQf8PRwR8IAJFBEAgASAARAAAAAAAAAAAYQR/QQAFIABEAAAAAAAA8EOiIAEQTiEAIAEoAgBBQGoLNgIAIAAPCyABIAJB/gdrNgIAIANC/////////4eAf4NCgICAgICAgPA/hL8FIAALC1kBAX8gACAAKAJIIgFBAWsgAXI2AkggACgCACIBQQhxBEAgACABQSByNgIAQX8PCyAAQgA3AgQgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCEEEACwIAC/ADAEG8zwBBoQsQFUHUzwBB9wlBAUEAEBRB4M8AQa4JQQFBgH9B/wAQBkH4zwBBpwlBAUGAf0H/ABAGQezPAEGlCUEBQQBB/wEQBkGE0ABBsAhBAkGAgH5B//8BEAZBkNAAQacIQQJBAEH//wMQBkGc0ABBvwhBBEGAgICAeEH/////BxAGQajQAEG2CEEEQQBBfxAGQbTQAEGwCkEEQYCAgIB4Qf////8HEAZBwNAAQacKQQRBAEF/EAZBzNAAQc8IQoCAgICAgICAgH9C////////////ABBUQdjQAEHOCEIAQn8QVEHk0ABByAhBBBAPQfDQAEGGC0EIEA9BoC9BzwoQDkH4L0HVDxAOQcAwQQRBtQoQC0GMMUECQdsKEAtB2DFBBEHqChALQcwtQfwJEBNBgDJBAEGQDxAAQagyQQBB9g8QAEHQMkEBQa4PEABB+DJBAkHdCxAAQaAzQQNB/AsQAEHIM0EEQaQMEABB8DNBBUHBDBAAQZg0QQRBmxAQAEHANEEFQbkQEABBqDJBAEGnDRAAQdAyQQFBhg0QAEH4MkECQekNEABBoDNBA0HHDRAAQcgzQQRB7w4QAEHwM0EFQc0OEABB6DRBCEGsDhAAQZA1QQlBig4QAEG4NUEGQecMEABB4DVBB0HgEBAAC2YBA39B2AAQLUHQAGoiAUGg0gA2AgAgAUHM0gA2AgAgABAqIgJBDWoQHCIDQQA2AgggAyACNgIEIAMgAjYCACABIANBDGogACACQQFqECI2AgQgAUH80gA2AgAgAUGc0wBBGBAWAAvYAwIEfwF8IwBBEGsiBCQAIAQgAjYCCCAEQQA2AgRB9NQALQAAQQFxRQRAQQJBzC5BABAFIQJB9NQAQQE6AABB8NQAIAI2AgALAn9B8NQAKAIAIAEoAgRBigkgBEEEaiAEQQhqEAQiCEQAAAAAAADwQWMgCEQAAAAAAAAAAGZxBEAgCKsMAQtBAAshBSAEKAIEIQIgACAFNgIEIABB1NUANgIAIAIEQCACEAELIwBBIGsiAiQAIAAoAgQiBRACIAIgBTYCECADKAIEIAMtAAsiBSAFwEEASCIHGyIFQQRqEC0iBiAFNgIAIAZBBGogAygCACADIAcbIAUQIhogAiAGNgIYIAJBADYCDEH81AAtAABBAXFFBEBBA0HULkEAEAUhA0H81ABBAToAAEH41AAgAzYCAAtB+NQAKAIAIAEoAgRBlAsgAkEMaiACQRBqEAQaIAIoAgwiAwRAIAMQAQsgAkEgaiQAIAAoAgQiABACIAQgADYCCCAEQQA2AgRB7NQALQAAQQFxRQRAQQJBvC5BABAFIQBB7NQAQQE6AABB6NQAIAA2AgALQejUACgCACABKAIEQZcJIARBBGogBEEIahAEGiAEKAIEIgAEQCAAEAELIARBEGokAAscACAAIAFBCCACpyACQiCIpyADpyADQiCIpxAQC4sEAQJ/QegsQfwsQZgtQQBBqC1BAUGrLUEAQastQQBBmhJBrS1BAhAYQegsQQJBsC1B1C1BA0EEEBdBCBAcIgBBADYCBCAAQQU2AgBBCBAcIgFBADYCBCABQQY2AgBB6CxB6QhBzC1B1C1BByAAQcwtQdgtQQggARAKQQgQHCIAQQA2AgQgAEEJNgIAQQgQHCIBQQA2AgQgAUEKNgIAQegsQY0LQcwtQdQtQQcgAEHMLUHYLUEIIAEQCkEIEBwiAEEANgIEIABBCzYCAEEIEBwiAUEANgIEIAFBDDYCAEHoLEHXCEHMLUHULUEHIABBzC1B2C1BCCABEApBCBAcIgBBADYCBCAAQQ02AgBBCBAcIgFBADYCBCABQQ42AgBB6CxBwglBzC1B1C1BByAAQcwtQdgtQQggARAKQQgQHCIAQQA2AgQgAEEPNgIAQegsQYAIQQdB4C1B/C1BECAAQQBBABAIQQgQHCIAQQA2AgQgAEERNgIAQegsQYwKQQZBkC5BqC5BEiAAQQBBABAIQQgQHCIAQQA2AgQgAEETNgIAQegsQZkKQQJBsC5BuC5BFCAAQQBBABAIQQgQHCIAQQA2AgQgAEEVNgIAQegsQYALQQJBsC5BuC5BFCAAQQBBABAIQQgQHCIAQQA2AgQgAEEWNgIAQegsQcMIQQJBxC5B1C1BFyAAQQBBABAICwcAIAAoAgQLBQBBswkLFgAgAEUEQEEADwsgAEHszQAQIEEARwsaACAAIAEoAgggBRAeBEAgASACIAMgBBA7Cws3ACAAIAEoAgggBRAeBEAgASACIAMgBBA7DwsgACgCCCIAIAEgAiADIAQgBSAAKAIAKAIUEQkAC6cBACAAIAEoAgggBBAeBEACQCABKAIEIAJHDQAgASgCHEEBRg0AIAEgAzYCHAsPCwJAIAAgASgCACAEEB5FDQACQCACIAEoAhBHBEAgASgCFCACRw0BCyADQQFHDQEgAUEBNgIgDwsgASACNgIUIAEgAzYCICABIAEoAihBAWo2AigCQCABKAIkQQFHDQAgASgCGEECRw0AIAFBAToANgsgAUEENgIsCwuIAgAgACABKAIIIAQQHgRAAkAgASgCBCACRw0AIAEoAhxBAUYNACABIAM2AhwLDwsCQCAAIAEoAgAgBBAeBEACQCACIAEoAhBHBEAgASgCFCACRw0BCyADQQFHDQIgAUEBNgIgDwsgASADNgIgAkAgASgCLEEERg0AIAFBADsBNCAAKAIIIgAgASACIAJBASAEIAAoAgAoAhQRCQAgAS0ANQRAIAFBAzYCLCABLQA0RQ0BDAMLIAFBBDYCLAsgASACNgIUIAEgASgCKEEBajYCKCABKAIkQQFHDQEgASgCGEECRw0BIAFBAToANg8LIAAoAggiACABIAIgAyAEIAAoAgAoAhgRCAALC2kBAn8jAEEQayIDJAAgASAAKAIEIgRBAXVqIQEgACgCACEAIARBAXEEQCABKAIAIABqKAIAIQALIAMgAjYCDCADQdTVADYCCCABIANBCGogABEAACADKAIMIgAEQCAAEAMLIANBEGokAAuEBQEEfyMAQUBqIgQkAAJAIAFByM8AQQAQHgRAIAJBADYCAEEBIQUMAQsCQCAAIAEgAC0ACEEYcQR/QQEFIAFFDQEgAUG8zQAQICIDRQ0BIAMtAAhBGHFBAEcLEB4hBgsgBgRAQQEhBSACKAIAIgBFDQEgAiAAKAIANgIADAELAkAgAUUNACABQezNABAgIgZFDQEgAigCACIBBEAgAiABKAIANgIACyAGKAIIIgMgACgCCCIBQX9zcUEHcQ0BIANBf3MgAXFB4ABxDQFBASEFIAAoAgwgBigCDEEAEB4NASAAKAIMQbzPAEEAEB4EQCAGKAIMIgBFDQIgAEGgzgAQIEUhBQwCCyAAKAIMIgNFDQBBACEFIANB7M0AECAiAQRAIAAtAAhBAXFFDQICfyAGKAIMIQBBACECAkADQEEAIABFDQIaIABB7M0AECAiA0UNASADKAIIIAEoAghBf3NxDQFBASABKAIMIAMoAgxBABAeDQIaIAEtAAhBAXFFDQEgASgCDCIARQ0BIABB7M0AECAiAQRAIAMoAgwhAAwBCwsgAEHczgAQICIARQ0AIAAgAygCDBA8IQILIAILIQUMAgsgA0HczgAQICIBBEAgAC0ACEEBcUUNAiABIAYoAgwQPCEFDAILIANBjM0AECAiAUUNASAGKAIMIgBFDQEgAEGMzQAQICIARQ0BIARBDGpBAEE0ECYaIARBATYCOCAEQX82AhQgBCABNgIQIAQgADYCCCAAIARBCGogAigCAEEBIAAoAgAoAhwRBgACQCAEKAIgIgBBAUcNACACKAIARQ0AIAIgBCgCGDYCAAsgAEEBRiEFDAELQQAhBQsgBEFAayQAIAULMQAgACABKAIIQQAQHgRAIAEgAiADED0PCyAAKAIIIgAgASACIAMgACgCACgCHBEGAAsYACAAIAEoAghBABAeBEAgASACIAMQPQsLnQEBAn8jAEFAaiIDJAACf0EBIAAgAUEAEB4NABpBACABRQ0AGkEAIAFBjM0AECAiAUUNABogA0EMakEAQTQQJhogA0EBNgI4IANBfzYCFCADIAA2AhAgAyABNgIIIAEgA0EIaiACKAIAQQEgASgCACgCHBEGACADKAIgIgBBAUYEQCACIAMoAhg2AgALIABBAUYLIQQgA0FAayQAIAQLCgAgACABQQAQHgtOAgF/AXwjAEEQayICJAAgAkEANgIMIAEoAgRB1M8AIAJBDGoQCSEDIAIoAgwiAQRAIAEQAQsgACADRAAAAAAAAAAAYjoAOCACQRBqJAALNwEBfyMAQRBrIgIkACACIAEtADg2AgggAEHUzwAgAkEIahAHNgIEIABB1NUANgIAIAJBEGokAAuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECIaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECIaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACC5wBAQJ/IwBBEGsiAiQAQcgAEBwhASAAKAIEIgAQAiACIAA2AgggAUHMLSACQQhqEAc2AgQgAUHU1QA2AgAgAUEBNgIcIAFB1NUANgIYIAFBATYCFCABQdTVADYCECABQQE2AgwgAUHU1QA2AgggAUEAOgAgIAFBADYCRCABQoCAgIAwNwI8IAFBADsANyABQQA7ACsgAkEQaiQAIAELigUCBn4CfyABIAEoAgBBB2pBeHEiAUEQajYCACAAIQkgASkDACEDIAEpAwghBSMAQSBrIgAkAAJAIAVC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBUIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAhSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBUIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIBQZH3AEkNACADIQIgBUL///////8/g0KAgICAgIDAAIQiBCEGAkAgAUGB9wBrIghBwABxBEAgAyAIQUBqrYYhBkIAIQIMAQsgCEUNACAGIAitIgeGIAJBwAAgCGutiIQhBiACIAeGIQILIAAgAjcDECAAIAY3AxgCQEGB+AAgAWsiAUHAAHEEQCAEIAFBQGqtiCEDQgAhBAwBCyABRQ0AIARBwAAgAWuthiADIAGtIgKIhCEDIAQgAoghBAsgACADNwMAIAAgBDcDCCAAKQMIQgSGIAApAwAiA0I8iIQhAiAAKQMQIAApAxiEQgBSrSADQv//////////D4OEIgNCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyADQoCAgICAgICACFINACACQgGDIAJ8IQILIABBIGokACAJIAIgBUKAgICAgICAgIB/g4S/OQMAC0ABAn8jAEEQayICJAAgAiABNgIMIAJB1NUANgIIIAJBCGogABEBACEDIAIoAgwiAQRAIAEQAwsgAkEQaiQAIAMLBABCAAsEAEEAC/YCAQh/IwBBIGsiAyQAIAMgACgCHCIENgIQIAAoAhQhBSADIAI2AhwgAyABNgIYIAMgBSAEayIBNgIUIAEgAmohBUECIQcCfwJAAkACQCAAKAI8IANBEGoiAUECIANBDGoQDSIEBH9B6N4AIAQ2AgBBfwVBAAsEQCABIQQMAQsDQCAFIAMoAgwiBkYNAiAGQQBIBEAgASEEDAQLIAEgBiABKAIEIghLIglBA3RqIgQgBiAIQQAgCRtrIgggBCgCAGo2AgAgAUEMQQQgCRtqIgEgASgCACAIazYCACAFIAZrIQUgACgCPCAEIgEgByAJayIHIANBDGoQDSIGBH9B6N4AIAY2AgBBfwVBAAtFDQALCyAFQX9HDQELIAAgACgCLCIBNgIcIAAgATYCFCAAIAEgACgCMGo2AhAgAgwBCyAAQQA2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EGokAAsiAQF+IAEgAq0gA61CIIaEIAQgABEMACIFQiCIpyQBIAWnCzcBAX8jAEEQayICJAAgAiABKAI8NgIIIABBnNAAIAJBCGoQBzYCBCAAQdTVADYCACACQRBqJAALC/NKFQBBgAgLhCZzZXRCZWF1dHkALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweAB1bnNpZ25lZCBzaG9ydAB1bnNpZ25lZCBpbnQAaW5pdABmbG9hdAB1aW50NjRfdABibHVyUmFkaXVzAHZlY3RvcgBtaXJyb3IAYXR0YWNoU2hhZGVyAGRlbGV0ZVNoYWRlcgBjcmVhdGVTaGFkZXIAY29tcGlsZVNoYWRlcgB1bnNpZ25lZCBjaGFyAHN0ZDo6ZXhjZXB0aW9uAHJvdGF0aW9uAG5hbgBsaW5rUHJvZ3JhbQBkZWxldGVQcm9ncmFtAGNyZWF0ZVByb2dyYW0AYm9vbABlbXNjcmlwdGVuOjp2YWwAc2V0V2F0ZXJNYXJrAHN0b3BXYXRlck1hcmsAdW5zaWduZWQgbG9uZwBzdGQ6OndzdHJpbmcAYmFzaWNfc3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGluZgAlZgBjbG9zZQBkb3VibGUAdmJNb2RlAHNoYWRlclNvdXJjZQB2b2lkAHNhbXBsZUNvbG9yICs9IHRleHR1cmUoZnJhbWUsIGJsdXJDb29yZGluYXRlc1sATkFOAElORgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDhfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDY0X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDY0X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgbG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZG91YmxlPgB2ZWMyIGMgPSB2X3RleENvb3JkOwB2ZWMyIGMgPSB2ZWMyKDEuMCAtIHZfdGV4Q29vcmQueCwgdl90ZXhDb29yZC55KTsAYyA9IHZlYzIoMS4wIC0gYy54LCAxLjAgLSBjLnkpOwBjID0gdmVjMihjLnksIDEuMCAtIGMueCk7AGMgPSB2ZWMyKDEuMCAtIGMueSwgYy54KTsAQWxsSW4xAC4ALjAsAC4wKSpvKSoAKG51bGwpACkqby55KTsgICAgdmVjMiBjb29yZDIgPSB2ZWMyKGZsb2F0KAAgICAgYyA9IHZlYzIodl90ZXhDb29yZC54LCAxLjAgLSB2X3RleENvb3JkLnkpOyAgICB2ZWMyIGNvb3JkMSA9IHZlYzIoZmxvYXQoACksIChjLnkgLWNvb3JkMS55KSAvIG8ueSAvIGZsb2F0KAApKm8ueSk7ICAgIGlmIChjLnggPiBjb29yZDEueCAmJiBjLnggPCBjb29yZDIueCAmJiBjLnkgPiBjb29yZDEueSAmJiBjLnkgPCBjb29yZDIueSkgeyAgICAgIHZlYzQgd2F0ZXJDb2xvciA9IHRleHR1cmUod2F0ZXJNYXJrLCB2ZWMyKChjLnggLSBjb29yZDEueCkgIC8gby54IC8gZmxvYXQoACkgKiBvLngsIGZsb2F0KABvdXRDb2xvci5yZ2IgKz0gdmVjMygAKTsgICAgICAgdmVjMyBzbW9vdGhDb2xvciA9IG91dENvbG9yLnJnYiArIChvdXRDb2xvci5yZ2ItdmVjMyhoaWdoUGFzcykpKmFscGhhKjAuMTsgICAgICAgc21vb3RoQ29sb3IgPSBtYXgoc21vb3RoQ29sb3IsIHZlYzMoMC4wKSk7ICAgICAgIHNtb290aENvbG9yID0gY2xhbXAocG93KHNtb290aENvbG9yLCB2ZWMzKABnKz1HKGMsdmVjMigAICAgICAgdmVjMiBvZmZzZXQgPSB2ZWMyKABdID0gdl90ZXhDb29yZC54eSArIG9mZnNldCAqIHZlYzIoADsgACkpLCB2ZWMzKDAuMCksIHZlYzMoMS4wKSk7ICAgICAgdmVjMyBzY3JlZW4gPSB2ZWMzKDEuMCkgLSAodmVjMygxLjApLXNtb290aENvbG9yKSAqICh2ZWMzKDEuMCktb3V0Q29sb3IucmdiKTsgICAgICAgdmVjMyBsaWdodGVuID0gbWF4KHNtb290aENvbG9yLCBvdXRDb2xvci5yZ2IpOyAgICAgICB2ZWMzIGJlYXV0eUNvbG9yID0gbWl4KG1peChvdXRDb2xvci5yZ2IsIHNjcmVlbiwgYWxwaGEpLCBsaWdodGVuLCBhbHBoYSk7ICAgICAgb3V0Q29sb3IucmdiID0gbWl4KG91dENvbG9yLnJnYiwgYmVhdXR5Q29sb3IsIAAKICAgICAgY29uc3QgbWF0MyBzYXR1cmF0ZU1hdHJpeCA9IG1hdDMoMS4xMTAyLC0wLjA1OTgsLTAuMDYxLC0wLjA3NzQsMS4wODI2LC0wLjExODYsLTAuMDIyOCwtMC4wMjI4LDEuMTc3Mik7CiAgICAgIHZlYzMgd2FybUNvbG9yID0gb3V0Q29sb3IucmdiICogc2F0dXJhdGVNYXRyaXg7CiAgICAgIG91dENvbG9yLnJnYiA9IG1peChvdXRDb2xvci5yZ2IsIHdhcm1Db2xvciwgACAgICAgIHNhbXBsZUNvbG9yID0gc2FtcGxlQ29sb3IgLyA2Mi4wOyAgICAgICBmbG9hdCBoaWdoUGFzcyA9IG91dENvbG9yLmcgLSBzYW1wbGVDb2xvciArIDAuNTsgICAgICAgY29uc3QgaGlnaHAgdmVjMyBXID0gdmVjMygwLjI5OSwwLjU4NywwLjExNCk7ICAgICAgZmxvYXQgbHVtaW5hbmNlID0gZG90KG91dENvbG9yLnJnYiwgVyk7ICAgICAgIGZsb2F0IGFscGhhID0gcG93KGx1bWluYW5jZSwgAF0pLmcgKiAAKSkpOyAgICAgIG91dENvbG9yID0gbWl4KG91dENvbG9yLHdhdGVyQ29sb3IsICB3YXRlckNvbG9yLmEpOyAgICB9ICAgIAApOyAgICAAKTsgICAgICB2ZWMyIGJsdXJDb29yZGluYXRlc1syNF07ICAgICAgACAgICAgIGZsb2F0IHNhbXBsZUNvbG9yID0gb3V0Q29sb3IuZyAqIDIyLjA7ICAgICAgIAAjdmVyc2lvbiAzMDAgZXMKICAgIHByZWNpc2lvbiBoaWdocCBmbG9hdDsKICAgIHVuaWZvcm0gc2FtcGxlcjJEIGZyYW1lOwogICAgdW5pZm9ybSBzYW1wbGVyMkQgbWFzazsKICAgIHVuaWZvcm0gc2FtcGxlcjJEIGJnOwogICAgdW5pZm9ybSBzYW1wbGVyMkQgd2F0ZXJNYXJrOwogICAgdW5pZm9ybSBzYW1wbGVyMkQgbGFzdE1hc2s7CiAgICB1bmlmb3JtIG1hdDQgdV9vZmZzZXRNYXRyaXg7CiAgICB1bmlmb3JtIHZlYzMgdV9jb2xvcjsKICAgIGluIHZlYzIgdl90ZXhDb29yZDsKICAgIG91dCB2ZWM0IG91dENvbG9yOwogICAgdmVjNCBHKHZlYzIgYyx2ZWMyIHMpewogICAgICByZXR1cm4gdGV4dHVyZShmcmFtZSx0ZXh0dXJlKG1hc2ssYytzKS5yPjAuMz9jOmMrcyk7CiAgICB9CiAgICB2b2lkIG1haW4oKSB7CiAgICAgIAAKICAgICAgdmVjMiBvZmZzZXRNYXNrVVYgPSAodV9vZmZzZXRNYXRyaXggKiB2ZWM0KGMsIDAsIDEpKS54eTsKICAgICAgZmxvYXQgaXNJbnNpZGVYID0gKG9mZnNldE1hc2tVVi54ID49IDAuMCkgJiYgKG9mZnNldE1hc2tVVi54IDw9IDEuMCkgPyAxLjAgOiAwLjA7CiAgICAgIGZsb2F0IGlzSW5zaWRlWSA9IChvZmZzZXRNYXNrVVYueSA+PSAwLjApICYmIChvZmZzZXRNYXNrVVYueSA8PSAxLjApID8gMS4wIDogMC4wOwogICAgICBmbG9hdCBpc0luc2lkZSA9IGlzSW5zaWRlWCAqIGlzSW5zaWRlWTsKICAgICAgZmxvYXQgbWFza2VkQWxwaGEgPSB0ZXh0dXJlKG1hc2ssIG9mZnNldE1hc2tVVikuciAqIGlzSW5zaWRlOwogICAgICBtYXNrZWRBbHBoYSA9IG1hc2tlZEFscGhhPDAuNT8yLjAqbWFza2VkQWxwaGEqbWFza2VkQWxwaGE6MS4wLTIuMCooMS4wLW1hc2tlZEFscGhhKSooMS4wLW1hc2tlZEFscGhhKTsKICAgICAgc3JjX2NvbG9yID0gdGV4dHVyZShmcmFtZSwgb2Zmc2V0TWFza1VWICwgaXNJbnNpZGUpOwogICAgICBvdXRDb2xvciA9IG1peCh0ZXh0dXJlKGJnLCBjKSwgc3JjX2NvbG9yLCBtYXNrZWRBbHBoYSk7CiAgICAACiAgICB2ZWM0IGcgPSB2ZWM0KDAuMCk7CiAgICAACiAgICAgIGMueSA9IDEuMCAtIGMueTsKICAgICAgdmVjNCBzcmNfY29sb3IgPSB0ZXh0dXJlKGZyYW1lLCBjKTsKICAgICAgZmxvYXQgYSA9IHRleHR1cmUobWFzaywgYykucjsKICAgICAgYSA9IGE8MC41PzIuMCphKmE6MS4wLTIuMCooMS4wLWEpKigxLjAtYSk7CiAgICAgIC8vIGZsb2F0IGEyID0gdGV4dHVyZShsYXN0TWFzaywgYykuYTsKICAgICAgLy8gYTIgPSBhMjwwLjU/Mi4wKmEyKmEyOjEuMC0yLjAqKDEuMC1hMikqKDEuMC1hMik7CiAgICAgIC8vIGZsb2F0IGRlbHRhID0gYSAtIGEyOwogICAgICAvLyBpZiAoZGVsdGEgPCAwLjI1ICYmIGRlbHRhID4gLTAuMjUpCiAgICAgIC8vIHsKICAgICAgLy8gICAgIGEgPSBhICsgMC41KmRlbHRhOwogICAgICAvLyB9CiAgICAgIAogICAgICB2ZWMyIG8gPSAxLjAgLyB2ZWMyKHRleHR1cmVTaXplKGZyYW1lLCAwKSk7CiAgICAACiAgICAgIG91dENvbG9yID0gZzsKICAAI3ZlcnNpb24gMzAwIGVzCmluIHZlYzIgYV9wb3NpdGlvbjsKaW4gdmVjMiBhX3RleENvb3JkOwoKdW5pZm9ybSBtYXQ0IHVfdGV4dHVyZU1hdHJpeDsKCm91dCB2ZWMyIHZfdGV4Q29vcmQ7CnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQoYV9wb3NpdGlvbi54LCBhX3Bvc2l0aW9uLnksIDAsIDEpOwogIHZfdGV4Q29vcmQgPSh1X3RleHR1cmVNYXRyaXggKiB2ZWM0KGFfdGV4Q29vcmQsIDAsIDEpKS54eTsKfQoAc2V0QmVhdXR5ICVmICVmICVmICVmICVmCgBvdXRDb2xvciA9IHNyY19jb2xvcjsKAG91dENvbG9yID0gbWl4KHZlYzQodV9jb2xvciwxLjApLHNyY19jb2xvcixhKTsKADZBbGxJbjEAAIAoAABfFgAAUDZBbGxJbjEAAAAABCkAAHAWAAAAAAAAaBYAAFBLNkFsbEluMQAAAAQpAACMFgAAAQAAAGgWAABpaQB2AHZpAHwWAADMFgAATjEwZW1zY3JpcHRlbjN2YWxFAACAKAAAuBYAAGlpaQB2aWlpAAAAALwnAAB8FgAAcCgAAHAoAABwKAAAcCgAAHAoAAB2aWlkZGRkZABBkC4LyAi8JwAAfBYAAHAoAABwKAAAcCgAAHAoAAB2aWlkZGRkALwnAAB8FgAAdmlpALwnAADMFgAAzBYAAHwWAADMFgAAHCgAALwnAADMFgAAoBcAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAACAKAAAYBcAAMwWAAC8JwAAzBYAAMwWAABOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQAAgCgAALgXAABOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQAAgCgAAAAYAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRHNOU18xMWNoYXJfdHJhaXRzSURzRUVOU185YWxsb2NhdG9ySURzRUVFRQAAAIAoAABIGAAATlN0M19fMjEyYmFzaWNfc3RyaW5nSURpTlNfMTFj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")||(qe=re,re=I.locateFile?I.locateFile(qe,f):f+qe);var Fi=$=>{for(;$.length>0;)$.shift()(I)};I.noExitRuntime;function To($){this.excPtr=$,this.ptr=$-24,this.set_type=function(K){TA[this.ptr+4>>2]=K},this.get_type=function(){return TA[this.ptr+4>>2]},this.set_destructor=function(K){TA[this.ptr+8>>2]=K},this.get_destructor=function(){return TA[this.ptr+8>>2]},this.set_caught=function(K){K=K?1:0,lA[this.ptr+12|0]=K},this.get_caught=function(){return lA[this.ptr+12|0]!=0},this.set_rethrown=function(K){K=K?1:0,lA[this.ptr+13|0]=K},this.get_rethrown=function(){return lA[this.ptr+13|0]!=0},this.init=function(K,vA){this.set_adjusted_ptr(0),this.set_type(K),this.set_destructor(vA)},this.set_adjusted_ptr=function(K){TA[this.ptr+16>>2]=K},this.get_adjusted_ptr=function(){return TA[this.ptr+16>>2]},this.get_exception_ptr=function(){if(ba(this.get_type()))return TA[this.excPtr>>2];var K=this.get_adjusted_ptr();return K!==0?K:this.excPtr}}var io,Eo,Vs,ki=$=>{for(var K="",vA=$;sA[vA];)K+=io[sA[vA++]];return K},ns={},jo={},Ao={},Zt=$=>{throw new Eo($)},oo=$=>{throw new Vs($)},bi=($,K,vA)=>{function qA(Fe){var rt=vA(Fe);rt.length!==$.length&&oo("Mismatched type converter count");for(var Ct=0;Ct<$.length;++Ct)vs($[Ct],rt[Ct])}$.forEach(function(Fe){Ao[Fe]=K});var Ae=new Array(K.length),me=[],Pe=0;K.forEach((Fe,rt)=>{jo.hasOwnProperty(Fe)?Ae[rt]=jo[Fe]:(me.push(Fe),ns.hasOwnProperty(Fe)||(ns[Fe]=[]),ns[Fe].push(()=>{Ae[rt]=jo[Fe],++Pe===me.length&&qA(Ae)}))}),me.length===0&&qA(Ae)};function vs($,K,vA={}){if(!("argPackAdvance"in K))throw new TypeError("registerType registeredInstance requires argPackAdvance");return function(qA,Ae,me={}){var Pe=Ae.name;if(qA||Zt(`type "${Pe}" must have a positive integer typeid pointer`),jo.hasOwnProperty(qA)){if(me.ignoreDuplicateRegistrations)return;Zt(`Cannot register type '${Pe}' twice`)}if(jo[qA]=Ae,delete Ao[qA],ns.hasOwnProperty(qA)){var Fe=ns[qA];delete ns[qA],Fe.forEach(rt=>rt())}}($,K,vA)}var HA,ce=$=>{Zt($.$$.ptrType.registeredClass.name+" instance already deleted")},Ve=!1,Ot=$=>{},nt=$=>{$.count.value-=1,$.count.value===0&&(K=>{K.smartPtr?K.smartPtrType.rawDestructor(K.smartPtr):K.ptrType.registeredClass.rawDestructor(K.ptr)})($)},It=($,K,vA)=>{if(K===vA)return $;if(vA.baseClass===void 0)return null;var qA=It($,K,vA.baseClass);return qA===null?null:vA.downcast(qA)},ei={},ti=()=>Object.keys(Oi).length,be=()=>{var $=[];for(var K in Oi)Oi.hasOwnProperty(K)&&$.push(Oi[K]);return $},Ze=[],wt=()=>{for(;Ze.length;){var $=Ze.pop();$.$$.deleteScheduled=!1,$.delete()}},Nt=$=>{HA=$,Ze.length&&HA&&HA(wt)},Oi={},po=($,K)=>(K=((vA,qA)=>{for(qA===void 0&&Zt("ptr should not be undefined");vA.baseClass;)qA=vA.upcast(qA),vA=vA.baseClass;return qA})($,K),Oi[K]),No=($,K)=>(K.ptrType&&K.ptr||oo("makeClassHandle requires ptr and ptrType"),!!K.smartPtrType!=!!K.smartPtr&&oo("Both smartPtrType and smartPtr must be specified"),K.count={value:1},Go(Object.create($,{$$:{value:K}})));function so($){var K=this.getPointee($);if(!K)return this.destructor($),null;var vA=po(this.registeredClass,K);if(vA!==void 0){if(vA.$$.count.value===0)return vA.$$.ptr=K,vA.$$.smartPtr=$,vA.clone();var qA=vA.clone();return this.destructor($),qA}function Ae(){return this.isSmartPointer?No(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:K,smartPtrType:this,smartPtr:$}):No(this.registeredClass.instancePrototype,{ptrType:this,ptr:$})}var me,Pe=this.registeredClass.getActualType(K),Fe=ei[Pe];if(!Fe)return Ae.call(this);me=this.isConst?Fe.constPointerType:Fe.pointerType;var rt=It(K,this.registeredClass,me.registeredClass);return rt===null?Ae.call(this):this.isSmartPointer?No(me.registeredClass.instancePrototype,{ptrType:me,ptr:rt,smartPtrType:this,smartPtr:$}):No(me.registeredClass.instancePrototype,{ptrType:me,ptr:rt})}var Go=$=>typeof FinalizationRegistry>"u"?(Go=K=>K,$):(Ve=new FinalizationRegistry(K=>{nt(K.$$)}),Ot=K=>Ve.unregister(K),(Go=K=>{var vA=K.$$;if(vA.smartPtr){var qA={$$:vA};Ve.register(K,qA,K)}return K})($));function An(){}var rn=($,K)=>Object.defineProperty(K,"name",{value:$}),Es=($,K,vA)=>{if($[K].overloadTable===void 0){var qA=$[K];$[K]=function(){return $[K].overloadTable.hasOwnProperty(arguments.length)||Zt(`Function '${vA}' called with an invalid number of arguments (${arguments.length}) - expects one of (${$[K].overloadTable})!`),$[K].overloadTable[arguments.length].apply(this,arguments)},$[K].overloadTable=[],$[K].overloadTable[qA.argCount]=qA}};function an($,K,vA,qA,Ae,me,Pe,Fe){this.name=$,this.constructor=K,this.instancePrototype=vA,this.rawDestructor=qA,this.baseClass=Ae,this.getActualType=me,this.upcast=Pe,this.downcast=Fe,this.pureVirtualFunctions=[]}var Do=($,K,vA)=>{for(;K!==vA;)K.upcast||Zt(`Expected null or instance of ${vA.name}, got an instance of ${K.name}`),$=K.upcast($),K=K.baseClass;return $};function pA($,K){if(K===null)return this.isReference&&Zt(`null is not a valid ${this.name}`),0;K.$$||Zt(`Cannot pass "${as(K)}" as a ${this.name}`),K.$$.ptr||Zt(`Cannot pass deleted object as a pointer of type ${this.name}`);var vA=K.$$.ptrType.registeredClass;return Do(K.$$.ptr,vA,this.registeredClass)}function Jn($,K){var vA;if(K===null)return this.isReference&&Zt(`null is not a valid ${this.name}`),this.isSmartPointer?(vA=this.rawConstructor(),$!==null&&$.push(this.rawDestructor,vA),vA):0;K.$$||Zt(`Cannot pass "${as(K)}" as a ${this.name}`),K.$$.ptr||Zt(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&K.$$.ptrType.isConst&&Zt(`Cannot convert argument of type ${K.$$.smartPtrType?K.$$.smartPtrType.name:K.$$.ptrType.name} to parameter type ${this.name}`);var qA=K.$$.ptrType.registeredClass;if(vA=Do(K.$$.ptr,qA,this.registeredClass),this.isSmartPointer)switch(K.$$.smartPtr===void 0&&Zt("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:K.$$.smartPtrType===this?vA=K.$$.smartPtr:Zt(`Cannot convert argument of type ${K.$$.smartPtrType?K.$$.smartPtrType.name:K.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:vA=K.$$.smartPtr;break;case 2:if(K.$$.smartPtrType===this)vA=K.$$.smartPtr;else{var Ae=K.clone();vA=this.rawShare(vA,cn.toHandle(()=>Ae.delete())),$!==null&&$.push(this.rawDestructor,vA)}break;default:Zt("Unsupporting sharing policy")}return vA}function Qr($,K){if(K===null)return this.isReference&&Zt(`null is not a valid ${this.name}`),0;K.$$||Zt(`Cannot pass "${as(K)}" as a ${this.name}`),K.$$.ptr||Zt(`Cannot pass deleted object as a pointer of type ${this.name}`),K.$$.ptrType.isConst&&Zt(`Cannot convert argument of type ${K.$$.ptrType.name} to parameter type ${this.name}`);var vA=K.$$.ptrType.registeredClass;return Do(K.$$.ptr,vA,this.registeredClass)}function ds($){return this.fromWireType(TA[$>>2])}function zr($,K,vA,qA,Ae,me,Pe,Fe,rt,Ct,Rt){this.name=$,this.registeredClass=K,this.isReference=vA,this.isConst=qA,this.isSmartPointer=Ae,this.pointeeType=me,this.sharingPolicy=Pe,this.rawGetPointee=Fe,this.rawConstructor=rt,this.rawShare=Ct,this.rawDestructor=Rt,Ae||K.baseClass!==void 0?this.toWireType=Jn:qA?(this.toWireType=pA,this.destructorFunction=null):(this.toWireType=Qr,this.destructorFunction=null)}var Pi,Rs,or=[],en=$=>{var K=or[$];return K||($>=or.length&&(or.length=$+1),or[$]=K=Pi.get($)),K},wn=($,K,vA)=>$.includes("j")?((qA,Ae,me)=>{var Pe=I["dynCall_"+qA];return me&&me.length?Pe.apply(null,[Ae].concat(me)):Pe.call(null,Ae)})($,K,vA):en(K).apply(null,vA),qt=($,K)=>{var vA,qA,Ae,me=($=ki($)).includes("j")?(vA=$,qA=K,Ae=[],function(){return Ae.length=0,Object.assign(Ae,arguments),wn(vA,qA,Ae)}):en(K);return typeof me!="function"&&Zt(`unknown function pointer with signature ${$}: ${K}`),me},yg=$=>{var K=Ea($),vA=ki(K);return yn(K),vA},On=($,K)=>{var vA=[],qA={};throw K.forEach(function Ae(me){qA[me]||jo[me]||(Ao[me]?Ao[me].forEach(Ae):(vA.push(me),qA[me]=!0))}),new Rs(`${$}: `+vA.map(yg).join([", "]))},Gn=($,K)=>{for(var vA=[],qA=0;qA<$;qA++)vA.push(TA[K+4*qA>>2]);return vA},Js=$=>{for(;$.length;){var K=$.pop();$.pop()(K)}};function pr($,K,vA,qA,Ae,me){var Pe=K.length;Pe<2&&Zt("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var Fe=K[1]!==null&&vA!==null,rt=!1,Ct=1;Ct($ instanceof Object||Zt(`${vA} with invalid "this": ${$}`),$ instanceof K.registeredClass.constructor||Zt(`${vA} incompatible with "this" of type ${$.constructor.name}`),$.$$.ptr||Zt(`cannot call emscripten binding method ${vA} on deleted object`),Do($.$$.ptr,$.$$.ptrType.registeredClass,K.registeredClass));function mr(){this.allocated=[void 0],this.freelist=[]}var mo=new mr,gn=$=>{$>=mo.reserved&&--mo.get($).refcount===0&&mo.free($)},Sl=()=>{for(var $=0,K=mo.reserved;K($||Zt("Cannot use deleted val. handle = "+$),mo.get($).value),toHandle:$=>{switch($){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:return mo.allocate({refcount:1,value:$})}}};function fr($){return this.fromWireType(cA[$>>2])}var Ls,Jc,ms,as=$=>{if($===null)return"null";var K=typeof $;return K==="object"||K==="array"||K==="function"?$.toString():""+$},Ru=($,K)=>{switch(K){case 4:return function(vA){return this.fromWireType(WA[vA>>2])};case 8:return function(vA){return this.fromWireType(ue[vA>>3])};default:throw new TypeError(`invalid float width (${K}): ${$}`)}},Wa=($,K,vA)=>{switch(K){case 1:return vA?qA=>lA[qA|0]:qA=>sA[qA|0];case 2:return vA?qA=>mA[qA>>1]:qA=>IA[qA>>1];case 4:return vA?qA=>cA[qA>>2]:qA=>TA[qA>>2];default:throw new TypeError(`invalid integer width (${K}): ${$}`)}},Cs=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0,sg=($,K,vA)=>{for(var qA=K+vA,Ae=K;$[Ae]&&!(Ae>=qA);)++Ae;if(Ae-K>16&&$.buffer&&Cs)return Cs.decode($.subarray(K,Ae));for(var me="";K>10,56320|1023&Ct)}}else me+=String.fromCharCode((31&Pe)<<6|Fe)}else me+=String.fromCharCode(Pe)}return me},HI=($,K)=>$?sg(sA,$,K):"",As=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0,$i=($,K)=>{for(var vA=$,qA=vA>>1,Ae=qA+K/2;!(qA>=Ae)&&IA[qA];)++qA;if((vA=qA<<1)-$>32&&As)return As.decode(sA.subarray($,vA));for(var me="",Pe=0;!(Pe>=K/2);++Pe){var Fe=mA[$+2*Pe>>1];if(Fe==0)break;me+=String.fromCharCode(Fe)}return me},pc=($,K,vA)=>{if(vA===void 0&&(vA=2147483647),vA<2)return 0;for(var qA=K,Ae=(vA-=2)<2*$.length?vA/2:$.length,me=0;me>1]=Pe,K+=2}return mA[K>>1]=0,K-qA},ng=$=>2*$.length,Dg=($,K)=>{for(var vA=0,qA="";!(vA>=K/4);){var Ae=cA[$+4*vA>>2];if(Ae==0)break;if(++vA,Ae>=65536){var me=Ae-65536;qA+=String.fromCharCode(55296|me>>10,56320|1023&me)}else qA+=String.fromCharCode(Ae)}return qA},ua=($,K,vA)=>{if(vA===void 0&&(vA=2147483647),vA<4)return 0;for(var qA=K,Ae=qA+vA-4,me=0;me<$.length;++me){var Pe=$.charCodeAt(me);if(Pe>=55296&&Pe<=57343&&(Pe=65536+((1023&Pe)<<10)|1023&$.charCodeAt(++me)),cA[K>>2]=Pe,(K+=4)+4>Ae)break}return cA[K>>2]=0,K-qA},bo=$=>{for(var K=0,vA=0;vA<$.length;++vA){var qA=$.charCodeAt(vA);qA>=55296&&qA<=57343&&++vA,K+=4}return K},Zr=($,K)=>{var vA=jo[$];return vA===void 0&&Zt(K+" has unknown type "+yg($)),vA},_o=($,K,vA)=>{var qA=[],Ae=$.toWireType(qA,vA);return qA.length&&(TA[K>>2]=cn.toHandle(qA)),Ae},Hc={},Hn=[],Hs=Reflect.construct,Sg=[null,[],[]],mc=($,K)=>{var vA=Sg[$];K===0||K===10?(($===1?G:U)(sg(vA,0)),vA.length=0):vA.push(K)};(()=>{for(var $=new Array(256),K=0;K<256;++K)$[K]=String.fromCharCode(K);io=$})(),Eo=I.BindingError=class extends Error{constructor($){super($),this.name="BindingError"}},Vs=I.InternalError=class extends Error{constructor($){super($),this.name="InternalError"}},Object.assign(An.prototype,{isAliasOf($){if(!(this instanceof An)||!($ instanceof An))return!1;var K=this.$$.ptrType.registeredClass,vA=this.$$.ptr;$.$$=$.$$;for(var qA=$.$$.ptrType.registeredClass,Ae=$.$$.ptr;K.baseClass;)vA=K.upcast(vA),K=K.baseClass;for(;qA.baseClass;)Ae=qA.upcast(Ae),qA=qA.baseClass;return K===qA&&vA===Ae},clone(){if(this.$$.ptr||ce(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var $,K=Go(Object.create(Object.getPrototypeOf(this),{$$:{value:($=this.$$,{count:$.count,deleteScheduled:$.deleteScheduled,preservePointerOnDelete:$.preservePointerOnDelete,ptr:$.ptr,ptrType:$.ptrType,smartPtr:$.smartPtr,smartPtrType:$.smartPtrType})}}));return K.$$.count.value+=1,K.$$.deleteScheduled=!1,K},delete(){this.$$.ptr||ce(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&Zt("Object already scheduled for deletion"),Ot(this),nt(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||ce(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&Zt("Object already scheduled for deletion"),Ze.push(this),Ze.length===1&&HA&&HA(wt),this.$$.deleteScheduled=!0,this}}),I.getInheritedInstanceCount=ti,I.getLiveInheritedInstances=be,I.flushPendingDeletes=wt,I.setDelayFunction=Nt,Object.assign(zr.prototype,{getPointee($){return this.rawGetPointee&&($=this.rawGetPointee($)),$},destructor($){this.rawDestructor&&this.rawDestructor($)},argPackAdvance:8,readValueFromPointer:ds,deleteObject($){$!==null&&$.delete()},fromWireType:so}),Rs=I.UnboundTypeError=(Ls=Error,(ms=rn(Jc="UnboundTypeError",function($){this.name=Jc,this.message=$;var K=new Error($).stack;K!==void 0&&(this.stack=this.toString()+` -`+K.replace(/^Error(:[^\n]*)?\n/,""))})).prototype=Object.create(Ls.prototype),ms.prototype.constructor=ms,ms.prototype.toString=function(){return this.message===void 0?this.name:`${this.name}: ${this.message}`},ms),Object.assign(mr.prototype,{get($){return this.allocated[$]},has($){return this.allocated[$]!==void 0},allocate($){var K=this.freelist.pop()||this.allocated.length;return this.allocated[K]=$,K},free($){this.allocated[$]=void 0,this.freelist.push($)}}),mo.allocated.push({value:void 0},{value:null},{value:!0},{value:!1}),mo.reserved=mo.allocated.length,I.count_emval_handles=Sl;var fn,Ga={w:($,K,vA)=>{throw new To($).init(K,vA),$},q:($,K,vA,qA,Ae)=>{},u:($,K,vA,qA)=>{vs($,{name:K=ki(K),fromWireType:function(Ae){return!!Ae},toWireType:function(Ae,me){return me?vA:qA},argPackAdvance:8,readValueFromPointer:function(Ae){return this.fromWireType(sA[Ae])},destructorFunction:null})},y:($,K,vA,qA,Ae,me,Pe,Fe,rt,Ct,Rt,Yt,Ii)=>{Rt=ki(Rt),me=qt(Ae,me),Fe&&(Fe=qt(Pe,Fe)),Ct&&(Ct=qt(rt,Ct)),Ii=qt(Yt,Ii);var ct=(xt=>{if(xt===void 0)return"_unknown";var Ji=(xt=xt.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return Ji>=48&&Ji<=57?`_${xt}`:xt})(Rt);((xt,Ji,Ki)=>{I.hasOwnProperty(xt)?(Zt(`Cannot register public name '${xt}' twice`),Es(I,xt,xt),I.hasOwnProperty(Ki)&&Zt(`Cannot register multiple overloads of a function with the same number of arguments (${Ki})!`),I[xt].overloadTable[Ki]=Ji):I[xt]=Ji})(ct,function(){On(`Cannot construct ${Rt} due to unbound types`,[qA])}),bi([$,K,vA],qA?[qA]:[],function(xt){var Ji,Ki;xt=xt[0],Ki=qA?(Ji=xt.registeredClass).instancePrototype:An.prototype;var qs=rn(Rt,function(){if(Object.getPrototypeOf(this)!==Mi)throw new Eo("Use 'new' to construct "+Rt);if(zo.constructor_body===void 0)throw new Eo(Rt+" has no accessible constructor");var xn=zo.constructor_body[arguments.length];if(xn===void 0)throw new Eo(`Tried to invoke ctor of ${Rt} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(zo.constructor_body).toString()}) parameters instead!`);return xn.apply(this,arguments)}),Mi=Object.create(Ki,{constructor:{value:qs}});qs.prototype=Mi;var zo=new an(Rt,qs,Mi,Ii,Ji,me,Fe,Ct);zo.baseClass&&(zo.baseClass.__derivedClasses===void 0&&(zo.baseClass.__derivedClasses=[]),zo.baseClass.__derivedClasses.push(zo));var Mg=new zr(Rt,zo,!0,!1,!1),sr=new zr(Rt+"*",zo,!1,!1,!1),yr=new zr(Rt+" const*",zo,!1,!0,!1);return ei[$]={pointerType:sr,constPointerType:yr},((xn,Ml,Ks)=>{I.hasOwnProperty(xn)||oo("Replacing nonexistant public symbol"),I[xn].overloadTable!==void 0&&Ks!==void 0?I[xn].overloadTable[Ks]=Ml:(I[xn]=Ml,I[xn].argCount=Ks)})(ct,qs),[Mg,sr,yr]})},x:($,K,vA,qA,Ae,me)=>{var Pe=Gn(K,vA);Ae=qt(qA,Ae),bi([],[$],function(Fe){var rt=`constructor ${(Fe=Fe[0]).name}`;if(Fe.registeredClass.constructor_body===void 0&&(Fe.registeredClass.constructor_body=[]),Fe.registeredClass.constructor_body[K-1]!==void 0)throw new Eo(`Cannot register multiple constructors with identical number of parameters (${K-1}) for class '${Fe.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return Fe.registeredClass.constructor_body[K-1]=()=>{On(`Cannot construct ${Fe.name} due to unbound types`,Pe)},bi([],Pe,Ct=>(Ct.splice(1,0,null),Fe.registeredClass.constructor_body[K-1]=pr(rt,Ct,null,Ae,me),[])),[]})},i:($,K,vA,qA,Ae,me,Pe,Fe,rt)=>{var Ct=Gn(vA,qA);K=(Rt=>{const Yt=(Rt=Rt.trim()).indexOf("(");return Yt!==-1?Rt.substr(0,Yt):Rt})(K=ki(K)),me=qt(Ae,me),bi([],[$],function(Rt){var Yt=`${(Rt=Rt[0]).name}.${K}`;function Ii(){On(`Cannot call ${Yt} due to unbound types`,Ct)}K.startsWith("@@")&&(K=Symbol[K.substring(2)]),Fe&&Rt.registeredClass.pureVirtualFunctions.push(K);var ct=Rt.registeredClass.instancePrototype,xt=ct[K];return xt===void 0||xt.overloadTable===void 0&&xt.className!==Rt.name&&xt.argCount===vA-2?(Ii.argCount=vA-2,Ii.className=Rt.name,ct[K]=Ii):(Es(ct,K,Yt),ct[K].overloadTable[vA-2]=Ii),bi([],Ct,function(Ji){var Ki=pr(Yt,Ji,Rt,me,Pe);return ct[K].overloadTable===void 0?(Ki.argCount=vA-2,ct[K]=Ki):ct[K].overloadTable[vA-2]=Ki,[]}),[]})},k:($,K,vA,qA,Ae,me,Pe,Fe,rt,Ct)=>{K=ki(K),Ae=qt(qA,Ae),bi([],[$],function(Rt){var Yt=`${(Rt=Rt[0]).name}.${K}`,Ii={get(){On(`Cannot access ${Yt} due to unbound types`,[vA,Pe])},enumerable:!0,configurable:!0};return Ii.set=rt?()=>On(`Cannot access ${Yt} due to unbound types`,[vA,Pe]):ct=>Zt(Yt+" is a read-only property"),Object.defineProperty(Rt.registeredClass.instancePrototype,K,Ii),bi([],rt?[vA,Pe]:[vA],function(ct){var xt=ct[0],Ji={get(){var qs=Pn(this,Rt,Yt+" getter");return xt.fromWireType(Ae(me,qs))},enumerable:!0};if(rt){rt=qt(Fe,rt);var Ki=ct[1];Ji.set=function(qs){var Mi=Pn(this,Rt,Yt+" setter"),zo=[];rt(Ct,Mi,Ki.toWireType(zo,qs)),Js(zo)}}return Object.defineProperty(Rt.registeredClass.instancePrototype,K,Ji),[]}),[]})},t:($,K)=>{vs($,{name:K=ki(K),fromWireType:vA=>{var qA=cn.toValue(vA);return gn(vA),qA},toWireType:(vA,qA)=>cn.toHandle(qA),argPackAdvance:8,readValueFromPointer:fr,destructorFunction:null})},p:($,K,vA)=>{vs($,{name:K=ki(K),fromWireType:qA=>qA,toWireType:(qA,Ae)=>Ae,argPackAdvance:8,readValueFromPointer:Ru(K,vA),destructorFunction:null})},g:($,K,vA,qA,Ae)=>{K=ki(K);var me=rt=>rt;if(qA===0){var Pe=32-8*vA;me=rt=>rt<>>Pe}var Fe=K.includes("unsigned");vs($,{name:K,fromWireType:me,toWireType:Fe?function(rt,Ct){return this.name,Ct>>>0}:function(rt,Ct){return this.name,Ct},argPackAdvance:8,readValueFromPointer:Wa(K,vA,qA!==0),destructorFunction:null})},a:($,K,vA)=>{var qA=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][K];function Ae(me){var Pe=TA[me>>2],Fe=TA[me+4>>2];return new qA(lA.buffer,Fe,Pe)}vs($,{name:vA=ki(vA),fromWireType:Ae,argPackAdvance:8,readValueFromPointer:Ae},{ignoreDuplicateRegistrations:!0})},o:($,K)=>{var vA=(K=ki(K))==="std::string";vs($,{name:K,fromWireType(qA){var Ae,me=TA[qA>>2],Pe=qA+4;if(vA)for(var Fe=Pe,rt=0;rt<=me;++rt){var Ct=Pe+rt;if(rt==me||sA[Ct]==0){var Rt=HI(Fe,Ct-Fe);Ae===void 0?Ae=Rt:(Ae+="\0",Ae+=Rt),Fe=Ct+1}}else{var Yt=new Array(me);for(rt=0;rt{for(var Ii=0,ct=0;ct=55296&&xt<=57343?(Ii+=4,++ct):Ii+=3}return Ii})(Ae):Ae.length;var Fe=fs(4+me+1),rt=Fe+4;if(TA[Fe>>2]=me,vA&&Pe)((Yt,Ii,ct,xt)=>{if(!(xt>0))return 0;for(var Ji=ct,Ki=ct+xt-1,qs=0;qs=55296&&Mi<=57343&&(Mi=65536+((1023&Mi)<<10)|1023&Yt.charCodeAt(++qs)),Mi<=127){if(ct>=Ki)break;Ii[ct++]=Mi}else if(Mi<=2047){if(ct+1>=Ki)break;Ii[ct++]=192|Mi>>6,Ii[ct++]=128|63&Mi}else if(Mi<=65535){if(ct+2>=Ki)break;Ii[ct++]=224|Mi>>12,Ii[ct++]=128|Mi>>6&63,Ii[ct++]=128|63&Mi}else{if(ct+3>=Ki)break;Ii[ct++]=240|Mi>>18,Ii[ct++]=128|Mi>>12&63,Ii[ct++]=128|Mi>>6&63,Ii[ct++]=128|63&Mi}}Ii[ct]=0})(Ae,sA,rt,me+1);else if(Pe)for(var Ct=0;Ct255&&(yn(rt),Zt("String has UTF-16 code units that do not fit in 8 bits")),sA[rt+Ct]=Rt}else for(Ct=0;Ct{var qA,Ae,me,Pe,Fe;vA=ki(vA),K===2?(qA=$i,Ae=pc,Pe=ng,me=()=>IA,Fe=1):K===4&&(qA=Dg,Ae=ua,Pe=bo,me=()=>TA,Fe=2),vs($,{name:vA,fromWireType:rt=>{for(var Ct,Rt=TA[rt>>2],Yt=me(),Ii=rt+4,ct=0;ct<=Rt;++ct){var xt=rt+4+ct*K;if(ct==Rt||Yt[xt>>Fe]==0){var Ji=qA(Ii,xt-Ii);Ct===void 0?Ct=Ji:(Ct+="\0",Ct+=Ji),Ii=xt+K}}return yn(rt),Ct},toWireType:(rt,Ct)=>{typeof Ct!="string"&&Zt(`Cannot pass non-string to C++ string type ${vA}`);var Rt=Pe(Ct),Yt=fs(4+Rt+K);return TA[Yt>>2]=Rt>>Fe,Ae(Ct,Yt+4,Rt+K),rt!==null&&rt.push(yn,Yt),Yt},argPackAdvance:8,readValueFromPointer:fr,destructorFunction(rt){yn(rt)}})},v:($,K)=>{vs($,{isVoid:!0,name:K=ki(K),argPackAdvance:0,fromWireType:()=>{},toWireType:(vA,qA)=>{}})},j:($,K,vA)=>($=cn.toValue($),K=Zr(K,"emval::as"),_o(K,vA,$)),e:($,K,vA,qA,Ae)=>{var me,Pe;return($=Hn[$])(K=cn.toValue(K),K[vA=(Pe=Hc[me=vA])===void 0?ki(me):Pe],qA,Ae)},d:gn,f:($,K,vA)=>{var qA=((Ct,Rt)=>{for(var Yt=new Array(Ct),Ii=0;Ii>2],"parameter "+Ii);return Yt})($,K),Ae=qA.shift();$--;var me,Pe,Fe=new Array($),rt=`methodCaller<(${qA.map(Ct=>Ct.name).join(", ")}) => ${Ae.name}>`;return me=rn(rt,(Ct,Rt,Yt,Ii)=>{for(var ct=0,xt=0;xt<$;++xt)Fe[xt]=qA[xt].readValueFromPointer(Ii+ct),ct+=qA[xt].argPackAdvance;var Ji=vA===1?Hs(Rt,Fe):Rt.apply(Ct,Fe);for(xt=0;xt<$;++xt)qA[xt].deleteObject&&qA[xt].deleteObject(Fe[xt]);return _o(Ae,Yt,Ji)}),Pe=Hn.length,Hn.push(me),Pe},c:$=>{$>4&&(mo.get($).refcount+=1)},b:$=>{var K=cn.toValue($);Js(K),gn($)},h:($,K)=>{var vA=($=Zr($,"_emval_take_value")).readValueFromPointer(K);return cn.toHandle(vA)},m:()=>{Et("")},s:($,K,vA)=>sA.copyWithin($,K,K+vA),r:$=>{sA.length,Et("OOM")},n:($,K,vA,qA)=>{for(var Ae=0,me=0;me>2],Fe=TA[K+4>>2];K+=8;for(var rt=0;rt>2]=Ae,0}},In=function(){var $={a:Ga};function K(vA,qA){var Ae,me;return In=vA.exports,_=In.z,Ae=_.buffer,I.HEAP8=lA=new Int8Array(Ae),I.HEAP16=mA=new Int16Array(Ae),I.HEAPU8=sA=new Uint8Array(Ae),I.HEAPU16=IA=new Uint16Array(Ae),I.HEAP32=cA=new Int32Array(Ae),I.HEAPU32=TA=new Uint32Array(Ae),I.HEAPF32=WA=new Float32Array(Ae),I.HEAPF64=ue=new Float64Array(Ae),Pi=In.C,me=In.A,Qe.unshift(me),function(){if(Mt--,I.monitorRunDependencies&&I.monitorRunDependencies(Mt),Mt==0&&jt){var Pe=jt;jt=null,Pe()}}(),In}if(Mt++,I.monitorRunDependencies&&I.monitorRunDependencies(Mt),I.instantiateWasm)try{return I.instantiateWasm($,K)}catch(vA){U(`Module.instantiateWasm callback failed with error: ${vA}`),l(vA)}return gt(0,re,$,function(vA){K(vA.instance)}).catch(l),{}}(),fs=$=>(fs=In.B)($),Ea=$=>(Ea=In.D)($),yn=$=>(yn=In.E)($),ba=$=>(ba=In.F)($);I.dynCall_jiji=($,K,vA,qA,Ae)=>(I.dynCall_jiji=In.G)($,K,vA,qA,Ae),I._vertexShaderSource=10688;function Sa(){function $(){fn||(fn=!0,I.calledRun=!0,Ce||(Fi(Qe),r(I),I.onRuntimeInitialized&&I.onRuntimeInitialized(),function(){if(I.postRun)for(typeof I.postRun=="function"&&(I.postRun=[I.postRun]);I.postRun.length;)je(I.postRun.shift());Fi(ut)}()))}Mt>0||(function(){if(I.preRun)for(typeof I.preRun=="function"&&(I.preRun=[I.preRun]);I.preRun.length;)ft(I.preRun.shift());Fi(xe)}(),Mt>0||(I.setStatus?(I.setStatus("Running..."),setTimeout(function(){setTimeout(function(){I.setStatus("")},1),$()},1)):$()))}if(jt=function $(){fn||Sa(),fn||(jt=$)},I.preInit)for(typeof I.preInit=="function"&&(I.preInit=[I.preInit]);I.preInit.length>0;)I.preInit.pop()();return Sa(),i.ready}})(),maA=paA,um=typeof navigator>"u"?"":navigator.userAgent,xs=t=>new RegExp(t,"i").test(um),Bc=t=>{if(xs(t)){const i=new RegExp(`${t}\\/([\\d.]+)`),r=um.match(i);if(r&&r[1])return r[1]}return""},uV=t=>{if(xs(t)){const i=new RegExp(`${t}\\/(\\d+)`),r=um.match(i);if(r&&r[1])return parseFloat(r[1])}return NaN},tZ=/AppleWebKit\/([\d.]+)/i.exec(um);tZ&&parseFloat(tZ[1]);var j9=xs("iPad"),W9=typeof navigator<"u"&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2&&xs("Macintosh"),z9=xs("iPhone")&&!j9,faA=xs("iPod"),Z9=z9||j9||faA||W9,xW=xs("Android"),yaA=function(){if(xW){const t=um.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);if(t){const i=t[1]&&parseFloat(t[1]),r=t[2]&&parseFloat(t[2]);if(i&&r)return parseFloat(`${t[1]}.${t[2]}`);if(i)return i}}return NaN}();xW&&xs("webkit")&&yaA<2.3;var DaA=xs("Firefox"),SaA=Bc("Firefox");uV("Firefox");var X9=xs("Edge"),MaA=Bc("Edge"),$9=xs("Edg"),vaA=Bc("Edg");uV("Edg");var AX=xs("SogouMobileBrowser"),RaA=Bc("SogouMobileBrowser"),eX=xs("MetaSr\\s"),waA=Bc("MetaSr\\s"),Lv=xs("TBS"),_aA=Bc("TBS"),tX=xs("XWEB"),TaA=Bc("XWEB");xs("MSIE\\s8\\.0");var NaA=xs("MSIE\\/\\d+");(function(){if(NaA){const t=/MSIE\s(\d+)\.\d/.exec(um);let i=t&&parseFloat(t[1]);return!i&&/Trident\/7.0/i.test(um)&&/rv:11.0/.test(um)&&(i=11),i}return NaN})();var GaA=xs("(micromessenger|webbrowser)"),baA=Bc("MicroMessenger"),YW=!Lv&&xs("MQQBrowser")&&xs("COVC"),VW=!Lv&&xs("MQQBrowser")&&!xs("COVC"),iZ=VW||YW?Bc("MQQBrowser"):"",iX=!Lv&&xs(" QQBrowser"),kaA=Bc(" QQBrowser"),oX=!Lv&&xs("QQBrowserLite"),LaA=Bc("QQBrowserLite"),sX=!Lv&&xs("MQBHD"),UaA=Bc("MQBHD");xs("Windows");!Z9&&xs("MAC OS X");!xW&&xs("Linux");xs("CrOS");xs("MicroMessenger");xs("UCBrowser");xs("Electron");var nX=xs("MiuiBrowser"),FaA=Bc("MiuiBrowser"),rX=xs("HuaweiBrowser");xs("Huawei")||xs("HUAWEI");xs("Honor")||xs("HONOR");var OaA=Bc("HuaweiBrowser"),aX=xs("SamsungBrowser"),PaA=Bc("SamsungBrowser"),gX=xs("HeyTapBrowser"),xaA=Bc("HeyTapBrowser"),cX=xs("VivoBrowser"),YaA=Bc("VivoBrowser");xs("OpenHarmony");Bc("OpenHarmony");var VaA=()=>uV("Chrome"),oZ=xs("CriOS"),lX=xs("Chrome"),JaA=!X9&&!eX&&!AX&&!Lv&&!tX&&!$9&&!iX&&!nX&&!rX&&!aX&&!gX&&!cX&&lX;xs("HeadlessChrome");var HaA=VaA(),qaA=Bc("Chrome");uV("Electron");var KaA=!lX&&!VW&&!YW&&!oX&&!sX&&xs("Safari"),IX=Bc("Version"),uX=(()=>{if(W9)return IX;if(Z9){const t=um.match(/OS (\d+)_(\d+)/i);if(t&&t[1]){let i=t[1];return t[2]&&(i+=`.${t[2]}`),i}}return""})();Number(uX.split(".")[0]);(()=>{const t=Number(uX.split(".")[0]);return t===14||t===13})();jaA();function jaA(){const t=new Map([[DaA,["Firefox",SaA]],[$9,["Edg",vaA]],[JaA,["Chrome",qaA]],[oZ,["ChiOS",Bc("CriOS")]],[KaA&&!oZ,["Safari",IX]],[Lv,["TBS",_aA]],[tX,["XWEB",TaA]],[GaA&&z9,["WeChat",baA]],[iX,["QQ(Win)",kaA]],[VW,["QQ(Mobile)",iZ]],[YW,["QQ(Mobile X5)",iZ]],[oX,["QQ(Mac)",LaA]],[sX,["QQ(iPad)",UaA]],[nX,["MI",FaA]],[rX,["HW",OaA]],[aX,["Samsung",PaA]],[gX,["OPPO",xaA]],[cX,["VIVO",YaA]],[X9,["EDGE",MaA]],[AX,["SogouMobile",RaA]],[eX,["Sogou",waA]]]);let i="unknown",r="unknown";return t.has(!0)&&([i,r]=t.get(!0)),{name:i,version:r}}var dc=1e-6,sT=typeof Float32Array<"u"?Float32Array:Array,EX={};function WaA(){var t=new sT(16);return sT!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t}function zaA(t){var i=new sT(16);return i[0]=t[0],i[1]=t[1],i[2]=t[2],i[3]=t[3],i[4]=t[4],i[5]=t[5],i[6]=t[6],i[7]=t[7],i[8]=t[8],i[9]=t[9],i[10]=t[10],i[11]=t[11],i[12]=t[12],i[13]=t[13],i[14]=t[14],i[15]=t[15],i}function ZaA(t,i){return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],t}function XaA(t,i,r,l,I,h,f,w,_,G,U,j,lA,sA,mA,IA){var cA=new sT(16);return cA[0]=t,cA[1]=i,cA[2]=r,cA[3]=l,cA[4]=I,cA[5]=h,cA[6]=f,cA[7]=w,cA[8]=_,cA[9]=G,cA[10]=U,cA[11]=j,cA[12]=lA,cA[13]=sA,cA[14]=mA,cA[15]=IA,cA}function $aA(t,i,r,l,I,h,f,w,_,G,U,j,lA,sA,mA,IA,cA){return t[0]=i,t[1]=r,t[2]=l,t[3]=I,t[4]=h,t[5]=f,t[6]=w,t[7]=_,t[8]=G,t[9]=U,t[10]=j,t[11]=lA,t[12]=sA,t[13]=mA,t[14]=IA,t[15]=cA,t}function dX(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function AgA(t,i){if(t===i){var r=i[1],l=i[2],I=i[3],h=i[6],f=i[7],w=i[11];t[1]=i[4],t[2]=i[8],t[3]=i[12],t[4]=r,t[6]=i[9],t[7]=i[13],t[8]=l,t[9]=h,t[11]=i[14],t[12]=I,t[13]=f,t[14]=w}else t[0]=i[0],t[1]=i[4],t[2]=i[8],t[3]=i[12],t[4]=i[1],t[5]=i[5],t[6]=i[9],t[7]=i[13],t[8]=i[2],t[9]=i[6],t[10]=i[10],t[11]=i[14],t[12]=i[3],t[13]=i[7],t[14]=i[11],t[15]=i[15];return t}function egA(t,i){var r=i[0],l=i[1],I=i[2],h=i[3],f=i[4],w=i[5],_=i[6],G=i[7],U=i[8],j=i[9],lA=i[10],sA=i[11],mA=i[12],IA=i[13],cA=i[14],TA=i[15],WA=r*w-l*f,ue=r*_-I*f,Ce=r*G-h*f,xe=l*_-I*w,Qe=l*G-h*w,ut=I*G-h*_,ft=U*IA-j*mA,je=U*cA-lA*mA,Mt=U*TA-sA*mA,jt=j*cA-lA*IA,Et=j*TA-sA*IA,re=lA*TA-sA*cA,qe=WA*re-ue*Et+Ce*jt+xe*Mt-Qe*je+ut*ft;return qe?(qe=1/qe,t[0]=(w*re-_*Et+G*jt)*qe,t[1]=(I*Et-l*re-h*jt)*qe,t[2]=(IA*ut-cA*Qe+TA*xe)*qe,t[3]=(lA*Qe-j*ut-sA*xe)*qe,t[4]=(_*Mt-f*re-G*je)*qe,t[5]=(r*re-I*Mt+h*je)*qe,t[6]=(cA*Ce-mA*ut-TA*ue)*qe,t[7]=(U*ut-lA*Ce+sA*ue)*qe,t[8]=(f*Et-w*Mt+G*ft)*qe,t[9]=(l*Mt-r*Et-h*ft)*qe,t[10]=(mA*Qe-IA*Ce+TA*WA)*qe,t[11]=(j*Ce-U*Qe-sA*WA)*qe,t[12]=(w*je-f*jt-_*ft)*qe,t[13]=(r*jt-l*je+I*ft)*qe,t[14]=(IA*ue-mA*xe-cA*WA)*qe,t[15]=(U*xe-j*ue+lA*WA)*qe,t):null}function tgA(t,i){var r=i[0],l=i[1],I=i[2],h=i[3],f=i[4],w=i[5],_=i[6],G=i[7],U=i[8],j=i[9],lA=i[10],sA=i[11],mA=i[12],IA=i[13],cA=i[14],TA=i[15],WA=r*w-l*f,ue=r*_-I*f,Ce=r*G-h*f,xe=l*_-I*w,Qe=l*G-h*w,ut=I*G-h*_,ft=U*IA-j*mA,je=U*cA-lA*mA,Mt=U*TA-sA*mA,jt=j*cA-lA*IA,Et=j*TA-sA*IA,re=lA*TA-sA*cA;return t[0]=w*re-_*Et+G*jt,t[1]=I*Et-l*re-h*jt,t[2]=IA*ut-cA*Qe+TA*xe,t[3]=lA*Qe-j*ut-sA*xe,t[4]=_*Mt-f*re-G*je,t[5]=r*re-I*Mt+h*je,t[6]=cA*Ce-mA*ut-TA*ue,t[7]=U*ut-lA*Ce+sA*ue,t[8]=f*Et-w*Mt+G*ft,t[9]=l*Mt-r*Et-h*ft,t[10]=mA*Qe-IA*Ce+TA*WA,t[11]=j*Ce-U*Qe-sA*WA,t[12]=w*je-f*jt-_*ft,t[13]=r*jt-l*je+I*ft,t[14]=IA*ue-mA*xe-cA*WA,t[15]=U*xe-j*ue+lA*WA,t}function igA(t){var i=t[0],r=t[1],l=t[2],I=t[3],h=t[4],f=t[5],w=t[6],_=t[7],G=t[8],U=t[9],j=t[10],lA=t[11],sA=t[12],mA=t[13],IA=t[14],cA=i*f-r*h,TA=i*w-l*h,WA=r*w-l*f,ue=G*mA-U*sA,Ce=G*IA-j*sA,xe=U*IA-j*mA;return _*(i*xe-r*Ce+l*ue)-I*(h*xe-f*Ce+w*ue)+t[15]*(G*WA-U*TA+j*cA)-lA*(sA*WA-mA*TA+IA*cA)}function CX(t,i,r){var l=i[0],I=i[1],h=i[2],f=i[3],w=i[4],_=i[5],G=i[6],U=i[7],j=i[8],lA=i[9],sA=i[10],mA=i[11],IA=i[12],cA=i[13],TA=i[14],WA=i[15],ue=r[0],Ce=r[1],xe=r[2],Qe=r[3];return t[0]=ue*l+Ce*w+xe*j+Qe*IA,t[1]=ue*I+Ce*_+xe*lA+Qe*cA,t[2]=ue*h+Ce*G+xe*sA+Qe*TA,t[3]=ue*f+Ce*U+xe*mA+Qe*WA,ue=r[4],Ce=r[5],xe=r[6],Qe=r[7],t[4]=ue*l+Ce*w+xe*j+Qe*IA,t[5]=ue*I+Ce*_+xe*lA+Qe*cA,t[6]=ue*h+Ce*G+xe*sA+Qe*TA,t[7]=ue*f+Ce*U+xe*mA+Qe*WA,ue=r[8],Ce=r[9],xe=r[10],Qe=r[11],t[8]=ue*l+Ce*w+xe*j+Qe*IA,t[9]=ue*I+Ce*_+xe*lA+Qe*cA,t[10]=ue*h+Ce*G+xe*sA+Qe*TA,t[11]=ue*f+Ce*U+xe*mA+Qe*WA,ue=r[12],Ce=r[13],xe=r[14],Qe=r[15],t[12]=ue*l+Ce*w+xe*j+Qe*IA,t[13]=ue*I+Ce*_+xe*lA+Qe*cA,t[14]=ue*h+Ce*G+xe*sA+Qe*TA,t[15]=ue*f+Ce*U+xe*mA+Qe*WA,t}function ogA(t,i,r){var l,I,h,f,w,_,G,U,j,lA,sA,mA,IA=r[0],cA=r[1],TA=r[2];return i===t?(t[12]=i[0]*IA+i[4]*cA+i[8]*TA+i[12],t[13]=i[1]*IA+i[5]*cA+i[9]*TA+i[13],t[14]=i[2]*IA+i[6]*cA+i[10]*TA+i[14],t[15]=i[3]*IA+i[7]*cA+i[11]*TA+i[15]):(l=i[0],I=i[1],h=i[2],f=i[3],w=i[4],_=i[5],G=i[6],U=i[7],j=i[8],lA=i[9],sA=i[10],mA=i[11],t[0]=l,t[1]=I,t[2]=h,t[3]=f,t[4]=w,t[5]=_,t[6]=G,t[7]=U,t[8]=j,t[9]=lA,t[10]=sA,t[11]=mA,t[12]=l*IA+w*cA+j*TA+i[12],t[13]=I*IA+_*cA+lA*TA+i[13],t[14]=h*IA+G*cA+sA*TA+i[14],t[15]=f*IA+U*cA+mA*TA+i[15]),t}function sgA(t,i,r){var l=r[0],I=r[1],h=r[2];return t[0]=i[0]*l,t[1]=i[1]*l,t[2]=i[2]*l,t[3]=i[3]*l,t[4]=i[4]*I,t[5]=i[5]*I,t[6]=i[6]*I,t[7]=i[7]*I,t[8]=i[8]*h,t[9]=i[9]*h,t[10]=i[10]*h,t[11]=i[11]*h,t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],t}function ngA(t,i,r,l){var I,h,f,w,_,G,U,j,lA,sA,mA,IA,cA,TA,WA,ue,Ce,xe,Qe,ut,ft,je,Mt,jt,Et=l[0],re=l[1],qe=l[2],yt=Math.sqrt(Et*Et+re*re+qe*qe);return yt0?(r[0]=2*(w*f+U*l+_*h-G*I)/j,r[1]=2*(_*f+U*I+G*l-w*h)/j,r[2]=2*(G*f+U*h+w*I-_*l)/j):(r[0]=2*(w*f+U*l+_*h-G*I),r[1]=2*(_*f+U*I+G*l-w*h),r[2]=2*(G*f+U*h+w*I-_*l)),hX(t,i,r),t}function hgA(t,i){return t[0]=i[12],t[1]=i[13],t[2]=i[14],t}function BX(t,i){var r=i[0],l=i[1],I=i[2],h=i[4],f=i[5],w=i[6],_=i[8],G=i[9],U=i[10];return t[0]=Math.sqrt(r*r+l*l+I*I),t[1]=Math.sqrt(h*h+f*f+w*w),t[2]=Math.sqrt(_*_+G*G+U*U),t}function BgA(t,i){var r=new sT(3);BX(r,i);var l=1/r[0],I=1/r[1],h=1/r[2],f=i[0]*l,w=i[1]*I,_=i[2]*h,G=i[4]*l,U=i[5]*I,j=i[6]*h,lA=i[8]*l,sA=i[9]*I,mA=i[10]*h,IA=f+U+mA,cA=0;return IA>0?(cA=2*Math.sqrt(IA+1),t[3]=.25*cA,t[0]=(j-sA)/cA,t[1]=(lA-_)/cA,t[2]=(w-G)/cA):f>U&&f>mA?(cA=2*Math.sqrt(1+f-U-mA),t[3]=(j-sA)/cA,t[0]=.25*cA,t[1]=(w+G)/cA,t[2]=(lA+_)/cA):U>mA?(cA=2*Math.sqrt(1+U-f-mA),t[3]=(lA-_)/cA,t[0]=(w+G)/cA,t[1]=.25*cA,t[2]=(j+sA)/cA):(cA=2*Math.sqrt(1+mA-f-U),t[3]=(w-G)/cA,t[0]=(lA+_)/cA,t[1]=(j+sA)/cA,t[2]=.25*cA),t}function QgA(t,i,r,l){i[0]=l[12],i[1]=l[13],i[2]=l[14];var I=l[0],h=l[1],f=l[2],w=l[4],_=l[5],G=l[6],U=l[8],j=l[9],lA=l[10];r[0]=Math.sqrt(I*I+h*h+f*f),r[1]=Math.sqrt(w*w+_*_+G*G),r[2]=Math.sqrt(U*U+j*j+lA*lA);var sA=1/r[0],mA=1/r[1],IA=1/r[2],cA=I*sA,TA=h*mA,WA=f*IA,ue=w*sA,Ce=_*mA,xe=G*IA,Qe=U*sA,ut=j*mA,ft=lA*IA,je=cA+Ce+ft,Mt=0;return je>0?(Mt=2*Math.sqrt(je+1),t[3]=.25*Mt,t[0]=(xe-ut)/Mt,t[1]=(Qe-WA)/Mt,t[2]=(TA-ue)/Mt):cA>Ce&&cA>ft?(Mt=2*Math.sqrt(1+cA-Ce-ft),t[3]=(xe-ut)/Mt,t[0]=.25*Mt,t[1]=(TA+ue)/Mt,t[2]=(Qe+WA)/Mt):Ce>ft?(Mt=2*Math.sqrt(1+Ce-cA-ft),t[3]=(Qe-WA)/Mt,t[0]=(TA+ue)/Mt,t[1]=.25*Mt,t[2]=(xe+ut)/Mt):(Mt=2*Math.sqrt(1+ft-cA-Ce),t[3]=(TA-ue)/Mt,t[0]=(Qe+WA)/Mt,t[1]=(xe+ut)/Mt,t[2]=.25*Mt),t}function pgA(t,i,r,l){var I=i[0],h=i[1],f=i[2],w=i[3],_=I+I,G=h+h,U=f+f,j=I*_,lA=I*G,sA=I*U,mA=h*G,IA=h*U,cA=f*U,TA=w*_,WA=w*G,ue=w*U,Ce=l[0],xe=l[1],Qe=l[2];return t[0]=(1-(mA+cA))*Ce,t[1]=(lA+ue)*Ce,t[2]=(sA-WA)*Ce,t[3]=0,t[4]=(lA-ue)*xe,t[5]=(1-(j+cA))*xe,t[6]=(IA+TA)*xe,t[7]=0,t[8]=(sA+WA)*Qe,t[9]=(IA-TA)*Qe,t[10]=(1-(j+mA))*Qe,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function mgA(t,i,r,l,I){var h=i[0],f=i[1],w=i[2],_=i[3],G=h+h,U=f+f,j=w+w,lA=h*G,sA=h*U,mA=h*j,IA=f*U,cA=f*j,TA=w*j,WA=_*G,ue=_*U,Ce=_*j,xe=l[0],Qe=l[1],ut=l[2],ft=I[0],je=I[1],Mt=I[2],jt=(1-(IA+TA))*xe,Et=(sA+Ce)*xe,re=(mA-ue)*xe,qe=(sA-Ce)*Qe,yt=(1-(lA+TA))*Qe,Me=(cA+WA)*Qe,Oe=(mA+ue)*ut,gt=(cA-WA)*ut,Fi=(1-(lA+IA))*ut;return t[0]=jt,t[1]=Et,t[2]=re,t[3]=0,t[4]=qe,t[5]=yt,t[6]=Me,t[7]=0,t[8]=Oe,t[9]=gt,t[10]=Fi,t[11]=0,t[12]=r[0]+ft-(jt*ft+qe*je+Oe*Mt),t[13]=r[1]+je-(Et*ft+yt*je+gt*Mt),t[14]=r[2]+Mt-(re*ft+Me*je+Fi*Mt),t[15]=1,t}function fgA(t,i){var r=i[0],l=i[1],I=i[2],h=i[3],f=r+r,w=l+l,_=I+I,G=r*f,U=l*f,j=l*w,lA=I*f,sA=I*w,mA=I*_,IA=h*f,cA=h*w,TA=h*_;return t[0]=1-j-mA,t[1]=U+TA,t[2]=lA-cA,t[3]=0,t[4]=U-TA,t[5]=1-G-mA,t[6]=sA+IA,t[7]=0,t[8]=lA+cA,t[9]=sA-IA,t[10]=1-G-j,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function ygA(t,i,r,l,I,h,f){var w=1/(r-i),_=1/(I-l),G=1/(h-f);return t[0]=2*h*w,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*h*_,t[6]=0,t[7]=0,t[8]=(r+i)*w,t[9]=(I+l)*_,t[10]=(f+h)*G,t[11]=-1,t[12]=0,t[13]=0,t[14]=f*h*2*G,t[15]=0,t}function QX(t,i,r,l,I){var h=1/Math.tan(i/2);if(t[0]=h/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,I!=null&&I!==1/0){var f=1/(l-I);t[10]=(I+l)*f,t[14]=2*I*l*f}else t[10]=-1,t[14]=-2*l;return t}EaA(EX,{add:()=>GgA,adjoint:()=>tgA,clone:()=>zaA,copy:()=>ZaA,create:()=>WaA,decompose:()=>QgA,determinant:()=>igA,equals:()=>UgA,exactEquals:()=>LgA,frob:()=>NgA,fromQuat:()=>fgA,fromQuat2:()=>CgA,fromRotation:()=>IgA,fromRotationTranslation:()=>hX,fromRotationTranslationScale:()=>pgA,fromRotationTranslationScaleOrigin:()=>mgA,fromScaling:()=>lgA,fromTranslation:()=>cgA,fromValues:()=>XaA,fromXRotation:()=>ugA,fromYRotation:()=>EgA,fromZRotation:()=>dgA,frustum:()=>ygA,getRotation:()=>BgA,getScaling:()=>BX,getTranslation:()=>hgA,identity:()=>dX,invert:()=>egA,lookAt:()=>wgA,mul:()=>FgA,multiply:()=>CX,multiplyScalar:()=>bgA,multiplyScalarAndAdd:()=>kgA,ortho:()=>vgA,orthoNO:()=>pX,orthoZO:()=>RgA,perspective:()=>DgA,perspectiveFromFieldOfView:()=>MgA,perspectiveNO:()=>QX,perspectiveZO:()=>SgA,rotate:()=>ngA,rotateX:()=>rgA,rotateY:()=>agA,rotateZ:()=>ggA,scale:()=>sgA,set:()=>$aA,str:()=>TgA,sub:()=>OgA,subtract:()=>mX,targetTo:()=>_gA,translate:()=>ogA,transpose:()=>AgA});var DgA=QX;function SgA(t,i,r,l,I){var h=1/Math.tan(i/2);if(t[0]=h/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,I!=null&&I!==1/0){var f=1/(l-I);t[10]=I*f,t[14]=I*l*f}else t[10]=-1,t[14]=-l;return t}function MgA(t,i,r,l){var I=Math.tan(i.upDegrees*Math.PI/180),h=Math.tan(i.downDegrees*Math.PI/180),f=Math.tan(i.leftDegrees*Math.PI/180),w=Math.tan(i.rightDegrees*Math.PI/180),_=2/(f+w),G=2/(I+h);return t[0]=_,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=G,t[6]=0,t[7]=0,t[8]=-(f-w)*_*.5,t[9]=(I-h)*G*.5,t[10]=l/(r-l),t[11]=-1,t[12]=0,t[13]=0,t[14]=l*r/(r-l),t[15]=0,t}function pX(t,i,r,l,I,h,f){var w=1/(i-r),_=1/(l-I),G=1/(h-f);return t[0]=-2*w,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*_,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*G,t[11]=0,t[12]=(i+r)*w,t[13]=(I+l)*_,t[14]=(f+h)*G,t[15]=1,t}var vgA=pX;function RgA(t,i,r,l,I,h,f){var w=1/(i-r),_=1/(l-I),G=1/(h-f);return t[0]=-2*w,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*_,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=G,t[11]=0,t[12]=(i+r)*w,t[13]=(I+l)*_,t[14]=h*G,t[15]=1,t}function wgA(t,i,r,l){var I,h,f,w,_,G,U,j,lA,sA,mA=i[0],IA=i[1],cA=i[2],TA=l[0],WA=l[1],ue=l[2],Ce=r[0],xe=r[1],Qe=r[2];return Math.abs(mA-Ce)0&&(U*=sA=1/Math.sqrt(sA),j*=sA,lA*=sA);var mA=_*lA-G*j,IA=G*U-w*lA,cA=w*j-_*U;return(sA=mA*mA+IA*IA+cA*cA)>0&&(mA*=sA=1/Math.sqrt(sA),IA*=sA,cA*=sA),t[0]=mA,t[1]=IA,t[2]=cA,t[3]=0,t[4]=j*cA-lA*IA,t[5]=lA*mA-U*cA,t[6]=U*IA-j*mA,t[7]=0,t[8]=U,t[9]=j,t[10]=lA,t[11]=0,t[12]=I,t[13]=h,t[14]=f,t[15]=1,t}function TgA(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"}function NgA(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]+t[3]*t[3]+t[4]*t[4]+t[5]*t[5]+t[6]*t[6]+t[7]*t[7]+t[8]*t[8]+t[9]*t[9]+t[10]*t[10]+t[11]*t[11]+t[12]*t[12]+t[13]*t[13]+t[14]*t[14]+t[15]*t[15])}function GgA(t,i,r){return t[0]=i[0]+r[0],t[1]=i[1]+r[1],t[2]=i[2]+r[2],t[3]=i[3]+r[3],t[4]=i[4]+r[4],t[5]=i[5]+r[5],t[6]=i[6]+r[6],t[7]=i[7]+r[7],t[8]=i[8]+r[8],t[9]=i[9]+r[9],t[10]=i[10]+r[10],t[11]=i[11]+r[11],t[12]=i[12]+r[12],t[13]=i[13]+r[13],t[14]=i[14]+r[14],t[15]=i[15]+r[15],t}function mX(t,i,r){return t[0]=i[0]-r[0],t[1]=i[1]-r[1],t[2]=i[2]-r[2],t[3]=i[3]-r[3],t[4]=i[4]-r[4],t[5]=i[5]-r[5],t[6]=i[6]-r[6],t[7]=i[7]-r[7],t[8]=i[8]-r[8],t[9]=i[9]-r[9],t[10]=i[10]-r[10],t[11]=i[11]-r[11],t[12]=i[12]-r[12],t[13]=i[13]-r[13],t[14]=i[14]-r[14],t[15]=i[15]-r[15],t}function bgA(t,i,r){return t[0]=i[0]*r,t[1]=i[1]*r,t[2]=i[2]*r,t[3]=i[3]*r,t[4]=i[4]*r,t[5]=i[5]*r,t[6]=i[6]*r,t[7]=i[7]*r,t[8]=i[8]*r,t[9]=i[9]*r,t[10]=i[10]*r,t[11]=i[11]*r,t[12]=i[12]*r,t[13]=i[13]*r,t[14]=i[14]*r,t[15]=i[15]*r,t}function kgA(t,i,r,l){return t[0]=i[0]+r[0]*l,t[1]=i[1]+r[1]*l,t[2]=i[2]+r[2]*l,t[3]=i[3]+r[3]*l,t[4]=i[4]+r[4]*l,t[5]=i[5]+r[5]*l,t[6]=i[6]+r[6]*l,t[7]=i[7]+r[7]*l,t[8]=i[8]+r[8]*l,t[9]=i[9]+r[9]*l,t[10]=i[10]+r[10]*l,t[11]=i[11]+r[11]*l,t[12]=i[12]+r[12]*l,t[13]=i[13]+r[13]*l,t[14]=i[14]+r[14]*l,t[15]=i[15]+r[15]*l,t}function LgA(t,i){return t[0]===i[0]&&t[1]===i[1]&&t[2]===i[2]&&t[3]===i[3]&&t[4]===i[4]&&t[5]===i[5]&&t[6]===i[6]&&t[7]===i[7]&&t[8]===i[8]&&t[9]===i[9]&&t[10]===i[10]&&t[11]===i[11]&&t[12]===i[12]&&t[13]===i[13]&&t[14]===i[14]&&t[15]===i[15]}function UgA(t,i){var r=t[0],l=t[1],I=t[2],h=t[3],f=t[4],w=t[5],_=t[6],G=t[7],U=t[8],j=t[9],lA=t[10],sA=t[11],mA=t[12],IA=t[13],cA=t[14],TA=t[15],WA=i[0],ue=i[1],Ce=i[2],xe=i[3],Qe=i[4],ut=i[5],ft=i[6],je=i[7],Mt=i[8],jt=i[9],Et=i[10],re=i[11],qe=i[12],yt=i[13],Me=i[14],Oe=i[15];return Math.abs(r-WA)<=dc*Math.max(1,Math.abs(r),Math.abs(WA))&&Math.abs(l-ue)<=dc*Math.max(1,Math.abs(l),Math.abs(ue))&&Math.abs(I-Ce)<=dc*Math.max(1,Math.abs(I),Math.abs(Ce))&&Math.abs(h-xe)<=dc*Math.max(1,Math.abs(h),Math.abs(xe))&&Math.abs(f-Qe)<=dc*Math.max(1,Math.abs(f),Math.abs(Qe))&&Math.abs(w-ut)<=dc*Math.max(1,Math.abs(w),Math.abs(ut))&&Math.abs(_-ft)<=dc*Math.max(1,Math.abs(_),Math.abs(ft))&&Math.abs(G-je)<=dc*Math.max(1,Math.abs(G),Math.abs(je))&&Math.abs(U-Mt)<=dc*Math.max(1,Math.abs(U),Math.abs(Mt))&&Math.abs(j-jt)<=dc*Math.max(1,Math.abs(j),Math.abs(jt))&&Math.abs(lA-Et)<=dc*Math.max(1,Math.abs(lA),Math.abs(Et))&&Math.abs(sA-re)<=dc*Math.max(1,Math.abs(sA),Math.abs(re))&&Math.abs(mA-qe)<=dc*Math.max(1,Math.abs(mA),Math.abs(qe))&&Math.abs(IA-yt)<=dc*Math.max(1,Math.abs(IA),Math.abs(yt))&&Math.abs(cA-Me)<=dc*Math.max(1,Math.abs(cA),Math.abs(Me))&&Math.abs(TA-Oe)<=dc*Math.max(1,Math.abs(TA),Math.abs(Oe))}var FgA=CX,OgA=mX,fL=`#version 300 es + `],{type:"application/javascript"}),e=URL.createObjectURL(A);this.worker=new Worker(e),URL.revokeObjectURL(e),this.worker.onerror=o=>this._log.warn("worker error:",o.message,o.filename||"unknown",o.lineno||"unknown"),this.worker.onmessage=o=>{var a;let{type:l,trackId:d,message:h,count:y}=o.data;if(l==="black")(a=this.callbacks.get(d))==null||a();else if(l==="log")this._log.warn(h);else if(l==="blackCount"){let S=this.userIdMap.get(d);this._log.warn("".concat(S||d," black count: ").concat(y))}}}return this.worker}start(A){let{track:e,isUplink:o,room:a,userId:l,onBlack:d}=A;if(this._log.debug("start detect black video",e.id),!TM()||!d||!e||typeof Worker>"u")return void this._log.warn("black video detector not supported");let h=y=>{var S,k,V,J;let cA;if(o)cA=(k=(S=y.msg_up_stream_info)==null?void 0:S.msg_video_status)==null?void 0:k.filter(CA=>CA.uint32_video_stream_type===3)[0];else{let CA=(V=y.msg_down_stream_info)==null?void 0:V.filter(MA=>{var ie;return((ie=MA.msg_user_info)==null?void 0:ie.str_identifier)===l})[0];cA=(J=CA?.msg_video_status)==null?void 0:J.filter(MA=>MA.uint32_video_stream_type===3)[0]}if(cA){let CA=(cA.uint32_video_codec_bitrate||0)/1e3;if(this.sleep[e.id]&&this.sleep[e.id]>0)return void(this.sleep[e.id]-=1);CA>0&&CA<10&&(this.sleep[e.id]=30,this._log.info("track bitrate",CA,"start check"),this.checkOnce(e,3e4))}};return a.on("heartbeat-report",h),this.heartbeatListenerCleaner.set(e.id,()=>a.off("heartbeat-report",h)),this.callbacks.set(e.id,d),this.userIdMap.set(e.id,l),e.id}checkOnce(A,e){try{let o=this.getWorker();if(!o)throw new Error("Worker not available");let a=new MediaStreamTrackProcessor({track:A});o.postMessage({type:"addTrack",trackId:A.id,timeout:e,readable:a.readable},[a.readable])}catch(o){this._log.warn("check error:",o),this.stop(A.id)}}stop(A){if(A){this.worker&&this.worker.postMessage({type:"removeTrack",trackId:A}),this.callbacks.delete(A),delete this.sleep[A];let e=this.heartbeatListenerCleaner.get(A);e&&e(),this.heartbeatListenerCleaner.delete(A),this.userIdMap.delete(A)}}destroy(){this.callbacks.forEach((A,e)=>this.stop(e)),this.worker&&(this.worker.terminate(),this.worker=null)}},F1=class extends Q8{constructor(A){super(po(fi({},A),{isUplink:!0})),Y(this,"localMainAudioTrack",null),Y(this,"localMainVideoTrack",null),Y(this,"localAuxAudioTrack",null),Y(this,"localAuxVideoTrack",null),Y(this,"_isPublishingAux",!1),Y(this,"_publishingLocalAudioTrack"),Y(this,"_publishingLocalVideoTrack"),Y(this,"_mediaSettings",{videoCodec:"",videoWidth:0,videoHeight:0,videoBps:0,videoFps:0,videoDecCodec:"",audioCodec:"opus",audioFs:0,audioChannel:0,audioBps:0,smallVideoWidth:0,smallVideoHeight:0,smallVideoFps:0,smallVideoBps:0,auxVideoWidth:0,auxVideoHeight:0,auxVideoFps:0,auxVideoBps:0}),Y(this,"_flag",0),Y(this,"_checkPublishStateTimeoutId",-1),this.initialize()}get videoCodec(){var A;return((A=this.singlePC)==null?void 0:A.videoCodec)||"h264"}get ssrc(){if(!this.singlePC)return{audio:0,video:0,videoRtx:0,small:0,smallRtx:0,auxiliary:0,auxiliaryRtx:0};let{audioSsrc:A,bigVideoSsrc:e,bigVideoRtxSsrc:o,smallVideoSsrc:a,smallVideoRtxSsrc:l,auxVideoSsrc:d,auxVideoRtxSsrc:h}=this.singlePC.uplinkSSRC;return{audio:A||0,video:e||0,videoRtx:o||0,small:a||0,smallRtx:l||0,auxiliary:d||0,auxiliaryRtx:h||0}}get flag(){return this._flag}set flag(A){this._flag!==A&&(this._flag=A,this.checkPublishState())}checkPublishState(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];try{if(!A&&this._checkPublishStateTimeoutId>0)return;let{serverPublishState:e}=this,{publishState:o}=this._room,a=Object.keys(o).filter(l=>{if(o[l]!==e[l]&&o[l])switch(l){case"audio":return!(!this.localMainAudioTrack||!this.localMainAudioTrack.isMediaTrackActive);case"bigVideo":case"smallVideo":return!(!this.localMainVideoTrack||!this.localMainVideoTrack.isMediaTrackActive);case"auxVideo":return!(!this.localAuxVideoTrack||!this.localAuxVideoTrack.isMediaTrackActive)}return!1});if(a.length>0){if(!A)return void(this._checkPublishStateTimeoutId=Gr.run("timeout",()=>this.checkPublishState(!0),{delay:1e4,count:1}));si.addCount({key:521e3}),a.forEach(l=>{this._log.warn("".concat(l," publish failed during call ").concat(Hp()," ").concat(cQ())),si.addEnum({key:521719,value:m8[l]})}),Gr.clearTask(this._checkPublishStateTimeoutId),this._checkPublishStateTimeoutId=-1}}catch(e){this._log.warn("checkPublishState failed",e)}}get isMainStreamPublished(){return!(!this.localMainAudioTrack&&!this.localMainVideoTrack)}get isAuxStreamPublished(){return!(!this.localAuxVideoTrack&&!this.localAuxAudioTrack)}get serverPublishState(){return{audio:!!(this.flag&ZS),bigVideo:!!(this.flag&WS),smallVideo:!!(this.flag&Nb),auxVideo:!!(this.flag&zS)}}initialize(){this.installEvents()}close(A){var e;let o=((e=this._peerConnection)==null?void 0:e.getSenders())||[];for(let a of o)a.replaceTrack(null);super.close(A),this.uninstallEvents(),this.uninstallTrackMuteEvents(this.localMainAudioTrack,this.localMainVideoTrack,this.localAuxVideoTrack),this.emitConnectionStateChangedEvent("DISCONNECTED")}installEvents(){this.listeners("connection-state-changed").includes(this.handleConnectionStateChange)||this.on("connection-state-changed",this.handleConnectionStateChange,this),this.installSPCEvents()}installSPCEvents(){var A,e;(A=this.singlePC)!=null&&A.listeners("spc-reconnected").includes(this.onSinglePCReconnected)||(e=this.singlePC)==null||e.on("spc-reconnected",this.onSinglePCReconnected,this)}uninstallSPCEvents(){var A;(A=this.singlePC)==null||A.off("spc-reconnected",this.onSinglePCReconnected,this)}uninstallEvents(){this.off("connection-state-changed",this.handleConnectionStateChange,this),this.uninstallSPCEvents()}emitConnectionStateChangedEvent(A,e){var o,a,l;let d=this._currentState,h=super.emitConnectionStateChangedEvent(A);return h&&d!==A&&(e?e.emit("connection-state-changed",{prevState:d,state:A}):((o=this.localMainVideoTrack)==null||o.emit("connection-state-changed",{prevState:d,state:A}),(a=this.localAuxVideoTrack)==null||a.emit("connection-state-changed",{prevState:d,state:A}),(l=this._publishingLocalVideoTrack)==null||l.emit("connection-state-changed",{prevState:d,state:A}))),h}onVideoEncodeFailed(A){return WA(this,null,function*(){if(!A||!A.isMediaTrackActive)return;let{videoCodec:e,singlePC:o}=this;if(!o)return;let a={h265:{supported:o.isH264EncodeSupported,target:"h264",log:"h265 encoder not working"},h264:{supported:o.isVP8EncodeSupported,target:"vp8",log:"h264 encoder not working"},vp8:{supported:!1,target:"vp8",log:"vp8 encoder not working, no fallback available"}};if(e==="vp9"||e==="av1")return;let l=a[e];this._log.warn(l.log),l!=null&&l.supported&&(yield o.switchVideoEncoder(l.target))})}publish(A){return WA(this,arguments,function(e){var o=this;let{localAudioTrack:a,localVideoTrack:l,isAuxiliary:d}=e;return function*(){var h,y,S,k,V,J,cA;if(!o.singlePC)return;if(o.installEvents(),o.installTrackMuteEvents(a,l),l&&(l.retryEncodeFailed=o.onVideoEncodeFailed.bind(o),eg&&(gy(LI,"26.2",!0)||gy(rQ,"26.2",!0)||sQ&&gy(LI,"18.7",!0)))){o._log.warn("detectH264Supported for fallback 26.2 video encode issue");try{yield re.detectH264SupportedByFakeStreaming(500)}catch{}}if(yield o.singlePC.waitForPeerConnectionConnected(),a&&(o._publishingLocalAudioTrack=a),l){if(!o.singlePC.isH264EncodeSupported&&!o.singlePC.isVP8EncodeSupported)throw new gi({code:Ct.NOT_SUPPORTED_H264,message:Xo({key:vo.NOT_SUPPORTED_H264ENCODE})});o.singlePC.isUsingH264&&!o.singlePC.isH264EncodeSupported&&o.singlePC.isVP8EncodeSupported&&(o._log.warn("h264 encoder not supported"),yield o.singlePC.switchVideoEncoder("vp8")),Ha&&yM()===115&&l.profile.width*l.profile.height<=230400&&(o._log.warn("fallback video to defaultBigVideoProfile: ".concat(JSON.stringify(jS))),l.setProfile(jS),yield l.applyProfile()),o._publishingLocalVideoTrack=l}let CA;if(o._isPublishingAux=d,l&&!d&&l.small&&(CA=o._room.videoManager.smallTrack),yield o._signalChannel.sendWaitForResponseWithRetry({command:$z,responseCommand:ls.SPC_PUBLISH_RESULT,data:po(fi({},o.singlePC.uplinkSSRC),{state:o._room.publishState,muteState:o._room.muteState}),retries:3}),l&&(yield o.checkHighProfile({streamType:l.streamType,newWidth:l.settings.width,newHeight:l.settings.height})),yield o.publishByTransceiver({localAudioTrack:a,localVideoTrack:l,smallTrack:CA,isAuxiliary:d}),o._publishingLocalAudioTrack=null,o._publishingLocalVideoTrack=null,o._isPublishingAux=!1,l){o[d?"localAuxVideoTrack":"localMainVideoTrack"]=l,yield o.singlePC.setDegradationPreference(o._peerConnection.getSenders()[d?3:1],l.contentHint,l.streamType);let{scaleResolutionDownBy:ie}=l;yield o.singlePC.setScaleResolutionDownBy(o._peerConnection.getSenders()[d?3:1],ie,l.streamType)}a&&(o[d?"localAuxAudioTrack":"localMainAudioTrack"]=a),yield o.singlePC.setBandwidth({audio:((h=o.localMainAudioTrack)==null?void 0:h.profile.bitrate)||((y=o.localAuxAudioTrack)==null?void 0:y.profile.bitrate),bigVideo:(S=o.localMainVideoTrack)==null?void 0:S.profile.bitrate,smallVideo:(V=(k=o.localMainVideoTrack)==null?void 0:k.small)==null?void 0:V.bitrate,auxVideo:(J=o.localAuxVideoTrack)==null?void 0:J.profile.bitrate}),o.sendMediaSettings();let MA=d?7:2;(o._room.preferHW||(cA=o._room.scheduleResult.config)!=null&&cA.preferHW)&&l&&l.profile.width*l.profile.height>=921600&&o.singlePC.useHWEncoder(!0,MA)}()})}publishByTransceiver(A){let{localAudioTrack:e,localVideoTrack:o,smallTrack:a,isAuxiliary:l}=A;if(!Xd())return;this._log.info("publish by transceiver");let d=o?.outMediaTrack,h=e?.outMediaTrack,y=this._peerConnection.getTransceivers(),S=[],k=[],V=(cA,CA,MA)=>{var ie;let pe=y[CA].sender.replaceTrack(MA);k.push(CA),(ie=this.singlePC)!=null&&ie.enableInsertableStreams&&pe.then(()=>this.createEncodedStreams(y[CA].sender,cA)),this.initSenderTransform(y[CA].sender,cA),S.push(pe)};h&&V(e.mediaType,0,h),d&&V(o.mediaType,l?3:1,d),o!=null&&o.small&&S.push(this.publishSmall(this._room.videoManager.smallMode,o));let J=this.singlePC.setTransceiverDirection(Xn.SENDONLY,k);return S.push(J),Promise.all(S)}getTrackByMediaType(A){switch(A){case 1:return this.localMainAudioTrack||this._room.localMainAudioTrack;case 4:case 8:return this.localMainVideoTrack||this._room.localMainVideoTrack;case 2:return this.localAuxVideoTrack||this._room.localAuxVideoTrack;default:return null}}createEncodedStreams(A,e){var o,a;if(this.singlePC.insertableStreamsAbortMap.has(A))return;let l=A.createEncodedStreams(),d=new AbortController;(o=this.singlePC)==null||o.addAbortController(A,d),((a=this.getTrackByMediaType(e))!=null&&a.enableEncodeFrame?l.readable.pipeThrough(new TransformStream({transform:(h,y)=>{var S,k;let V=this.getTrackByMediaType(e);if(!V||!V.encodeFrame)return y.enqueue(h);V.isAudio?y.enqueue(V.enableEncodeFrame?V.encodeFrame(h):h):y.enqueue((S=this.singlePC)!=null&&S.isUsingH264||(k=this.singlePC)!=null&&k.isUsingH265?V.encodeFrame(h,e===8):h)}}),d):l.readable).pipeTo(l.writable,d).catch(h=>{this._log.debug("encoded stream error",h),h!=="destroy"&&this._log.warn(h)})}initSenderTransform(A,e){if(!(this._peerConnection&&this.singlePC&&this.singlePC.scriptTransformWorker&&o_))return;let o=e!==2,a=e===8;A.transform||(A.transform=new RTCRtpScriptTransform(this.singlePC.scriptTransformWorker,{isReceiver:!1,isAudio:e===1,isMain:o,isSmall:a}))}enableSmall(A){return WA(this,null,function*(){A?yield this.publishSmall(this._room.videoManager.smallMode):yield this.unpublishSmall()})}publishSmall(A){return WA(this,arguments,function(e){var o=this;let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.localMainVideoTrack;return function*(){var l;if(!o.singlePC)return;if(e==="canvas"&&!i_())return void o._log.warn("canvas mode small stream is not supported");let d=o._peerConnection.getTransceivers(),{sender:h}=d[2],y=yield o.doPublishSmall(e,a),S=e==="canvas"?524700:524701;si.addSuccessEvent({key:S}),y?((l=o.singlePC)!=null&&l.enableInsertableStreams&&o.createEncodedStreams(h,8),o.initSenderTransform(h,8),yield o.singlePC.setTransceiverDirection(Xn.SENDONLY,[2]),o.updateMediaSettings(),yield o.doPublishChange(),h.track&&(o._blackSmallVideoDetectionId=tv.start({track:h.track,room:o._room,isUplink:!0,userId:o.userId,onBlack:()=>{o._log.warn("small video is black");let k=e==="canvas"?524700:524701;si.addFailedEvent({key:k,error:10002}),tv.stop(o._blackSmallVideoDetectionId),o._blackSmallVideoDetectionId=void 0}}))):si.addFailedEvent({key:S,error:10001})}()})}doPublishSmall(A){return WA(this,arguments,function(e){var o=this;let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.localMainVideoTrack;return function*(){if(!o.singlePC)return null;o._log.info("publish small",e);let l=o._peerConnection.getTransceivers(),{sender:d}=l[2];if(e==="canvas"&&o._room.videoManager.smallTrack)return yield d.replaceTrack(o._room.videoManager.smallTrack),"canvas";if(e==="api"&&a!=null&&a.outMediaTrack&&a!=null&&a.small){yield d.replaceTrack(a?.outMediaTrack);let h=d.getParameters(),y=N0(a?.profile,a?.small);return o._log.info("small scaleResolutionDownBy",y),h.encodings[0].scaleResolutionDownBy=y,d.setParameters(h),"api"}return o._log.warn("small track can not be enabled, smallMode: ".concat(o._room.videoManager.smallMode,", smallTrack: ").concat(!!o._room.videoManager.smallTrack,", bigVideoTrack: ").concat(!(a==null||!a.outMediaTrack))),null}()})}unpublishSmall(){return WA(this,null,function*(){this.singlePC&&(this._log.info("unpublish small"),yield this._peerConnection.getTransceivers()[2].sender.replaceTrack(null),yield this.singlePC.setTransceiverDirection(Xn.INACTIVE,[2]),this.updateMediaSettings(),yield this.doPublishChange(),tv.stop(this._blackSmallVideoDetectionId),this._blackSmallVideoDetectionId=void 0)})}checkHighProfile(A){return WA(this,null,function*(){var e,o;if((((e=this._room.scheduleResult.config)==null?void 0:e.profileLevelId)||{})[A.streamType==="main"?"big":"aux"]!=="high")return;let a=A.newWidth*A.newHeight>=921600&&!cy();try{yield(o=this.singlePC)==null?void 0:o.setH264ProfileLevelId(A.streamType,a)}catch(l){this._log.warn("setH264ProfileLevelId failed, ignore",l)}})}installTrackMuteEvents(){for(var A=arguments.length,e=new Array(A),o=0;o{a&&(a?.on("mute",this.sendMutedFlag,this),a?.on("unmute",this.sendMutedFlag,this))})}uninstallTrackMuteEvents(){for(var A=arguments.length,e=new Array(A),o=0;o{a&&(a?.off("mute",this.sendMutedFlag,this),a?.off("unmute",this.sendMutedFlag,this))})}unpublish(A){return WA(this,arguments,function(e){var o=this;let{localAudioTrack:a,localVideoTrack:l}=e;return function*(){var d;yield(d=o.singlePC)==null?void 0:d.waitForPeerConnectionConnected();let h=l&&l===o.localAuxVideoTrack||a&&a===o.localAuxAudioTrack,y=l?.outMediaTrack,S=o._peerConnection.getSenders(),k=[];a&&(h?o.localAuxAudioTrack=null:o.localMainAudioTrack=null,!o.localMainAudioTrack&&!o.localAuxAudioTrack&&(yield S[0].replaceTrack(null),k.push(0))),y&&(h?(yield S[3].replaceTrack(null),o.localAuxVideoTrack=null,o._mediaSettings=po(fi({},o._mediaSettings),{auxVideoBps:0,auxVideoFps:0,auxVideoWidth:0,auxVideoHeight:0}),k.push(3)):(yield S[1].replaceTrack(null),yield S[2].replaceTrack(null),o.localMainVideoTrack=null,o._mediaSettings=po(fi({},o._mediaSettings),{videoWidth:0,videoHeight:0,videoBps:0,videoFps:0,audioFs:0,audioChannel:0,audioBps:0,smallVideoWidth:0,smallVideoHeight:0,smallVideoFps:0,smallVideoBps:0}),k.push(1,2))),o.isMainStreamPublished||o.isAuxStreamPublished?(yield o.singlePC.setTransceiverDirection(Xn.INACTIVE,k),yield o.doPublishChange(!1)):yield o.doUnpublish(),o.uninstallTrackMuteEvents(a,l),l?.emit("connection-state-changed",{prevState:o._currentState,state:"DISCONNECTED"})}()})}doPublishChange(){let A=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];return WA(this,null,function*(){let e={state:this._room.publishState,constraintConfig:this._mediaSettings},o=yield this._signalChannel.sendWaitForResponseWithRetry({command:Tj,data:e,responseCommand:ls.PUBLISH_STATE_CHANGE_RESULT,enableLog:A,retries:3});this.checkPublishResultCode(o.data.code,o.data.message)})}doUnpublish(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return this._signalChannel.sendWaitForResponse({command:N1,commandDesc:"unpublish",responseCommand:ls.UNPUBLISH_RESULT,enableLog:A}).catch(e=>{if(e.getCode()===Ct.API_CALL_TIMEOUT||e.getCode()===Ct.API_CALL_ABORTED)return Promise.resolve();throw e})}updateMediaSettings(){var A,e;this._mediaSettings.videoCodec=((A=this.singlePC)==null?void 0:A.videoCodec)||"h264",this._mediaSettings.videoDecCodec=((e=this.singlePC)==null?void 0:e.downlinkVideoCodec)||"h264";let o=this._publishingLocalAudioTrack||this.localMainAudioTrack||this.localAuxAudioTrack,{localMainVideoTrack:a,localAuxVideoTrack:l}=this;if(this._publishingLocalVideoTrack&&(this._isPublishingAux?l=this._publishingLocalVideoTrack:a=this._publishingLocalVideoTrack),Qy){if(o&&o.outMediaTrack){let d=o.outMediaTrack.getSettings();this._mediaSettings.audioChannel=d.channelCount||1,this._mediaSettings.audioBps=1e3*o.profile.bitrate,this._mediaSettings.audioFs=d.sampleRate||0}if(a&&a.outMediaTrack){let d=a.outMediaTrack.getSettings(),{scaleResolutionDownBy:h}=a;this._mediaSettings.videoWidth=(d.width||0)/h||0,this._mediaSettings.videoHeight=(d.height||0)/h||0,this._mediaSettings.videoFps=d.frameRate||0,this._mediaSettings.videoBps=1e3*a.profile.bitrate,a.small&&(this._mediaSettings.smallVideoWidth=a.small.width,this._mediaSettings.smallVideoHeight=a.small.height,this._mediaSettings.smallVideoFps=a.small.frameRate,this._mediaSettings.smallVideoBps=1e3*a.small.bitrate)}if(l&&l.outMediaTrack){let d=l.outMediaTrack.getSettings(),{scaleResolutionDownBy:h}=l;this._mediaSettings.auxVideoWidth=(d.width||0)/h||0,this._mediaSettings.auxVideoHeight=(d.height||0)/h||0,this._mediaSettings.auxVideoFps=d.frameRate||0,this._mediaSettings.auxVideoBps=1e3*l.profile.bitrate}}else o&&o.outMediaTrack&&(this._mediaSettings.audioChannel=o.profile.channelCount,this._mediaSettings.audioBps=1e3*o.profile.bitrate,this._mediaSettings.audioFs=o.profile.sampleRate),a&&a.outMediaTrack&&(this._mediaSettings.videoWidth=a.profile.width,this._mediaSettings.videoHeight=a.profile.height,this._mediaSettings.videoFps=a.profile.frameRate,this._mediaSettings.videoBps=1e3*a.profile.bitrate);this._log.info("updateMediaSettings: ".concat(JSON.stringify(this._mediaSettings)))}sendMediaSettings(){this.updateMediaSettings(),this._signalChannel.sendWaitForResponse({command:bj,data:this._mediaSettings,responseCommand:ls.UPDATE_CONSTRAINT_CONFIG_RES}).then(A=>{A.data.code!==0&&this._log.warn(A.data.message)}).catch(()=>{})}addTrack(A){return WA(this,null,function*(){if(!this._peerConnection)return;let e=A===this.localAuxAudioTrack||A===this.localAuxVideoTrack;this._log.info("is adding ".concat(A.kind," track to current published local ").concat(e?YA.AUXILIARY:YA.MAIN," stream")),dQ()&&(yield this.addTrackByTransceiver(A,e))})}addTrackByTransceiver(A,e){return WA(this,null,function*(){var o;if(!A.mediaTrack)return;let a=this._peerConnection.getTransceivers();if(A.kind===YA.AUDIO)yield a[0].sender.replaceTrack(A.outMediaTrack);else{let l=e?3:1;yield a[l].sender.replaceTrack(A.outMediaTrack),l===1&&(o=this.localMainVideoTrack)!=null&&o.small&&this._room.videoManager.smallTrack&&(yield a[2].sender.replaceTrack(this._room.videoManager.smallTrack)),a[l].direction===Xn.INACTIVE&&(yield this.singlePC.setTransceiverDirection(Xn.SENDONLY,[l]))}this.updateMediaSettings(),yield this.doPublishChange()})}removeTrack(A){return WA(this,null,function*(){if(!this._peerConnection)return;let e=A===this.localAuxAudioTrack||A===this.localAuxVideoTrack;this._log.info("is removing ".concat(A.kind," track from current published local ").concat(e?YA.AUXILIARY:YA.MAIN," stream")),dQ()&&(yield this.removeTrackByTransceiver(A,e))})}removeTrackByTransceiver(A,e){return WA(this,null,function*(){if(!A.mediaTrack)return;let o=this._peerConnection.getTransceivers();if(A.kind===YA.AUDIO)yield o[0].sender.replaceTrack(null);else{let a=e?3:1;yield o[a].sender.replaceTrack(null),a===1&&this._room.videoManager.hasSmall&&(yield o[2].sender.replaceTrack(null)),yield this.singlePC.setTransceiverDirection(Xn.INACTIVE,[a])}this.updateMediaSettings(),yield this.doPublishChange()})}replaceTrack(A){return WA(this,null,function*(){var e;let o=(e=this._peerConnection)==null?void 0:e.getSenders(),a=A.outMediaTrack||A.mediaTrack;if(!o||o.length===0||!a||o.find(d=>d.track===a))return!1;let l=A.mediaType===2||A===this.localAuxAudioTrack||A===this.localAuxVideoTrack;return this._log.info("is replacing ".concat(a.kind," track ").concat(a.id," ").concat(a.label," on ").concat(l?YA.AUXILIARY:YA.MAIN," stream")),a.kind===YA.AUDIO&&o[0]&&(yield o[0].replaceTrack(a)),a.kind===YA.VIDEO&&(!l&&o[1]&&(yield o[1].replaceTrack(a)),l&&o[3]&&(yield o[3].replaceTrack(a))),!0})}setBandwidth(A){return WA(this,arguments,function(e){var o=this;let{bandwidth:a,type:l,videoType:d}=e;return function*(){if(o.singlePC){let h={};l===YA.AUDIO?h.audio=a:d==="big"?h.bigVideo=a:d==="small"?h.smallVideo=a:h.auxVideo=a,yield o.singlePC.setBandwidth(h)}}()})}sendMutedFlag(A){A===this.localAuxAudioTrack||A===this.localAuxVideoTrack||(this._log.info("send muted state: ".concat(JSON.stringify(this._room.muteState))),this._signalChannel.sendWaitForResponseWithRetry({command:zz,responseCommand:ls.MUTE_RESULT,data:this._room.muteState,retries:3}).catch(()=>{}))}handleConnectionStateChange(A){A.state==="CONNECTED"&&(this.localMainVideoTrack||this._publishingLocalVideoTrack&&!this._isPublishingAux)&&F.emit(nA.SEND_FIRST_VIDEO_FRAME,{room:this._room})}getVideoTrackId(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:YA.VIDEO;if(this._peerConnection){let e=this._peerConnection.getSenders();if(A===YA.AUXILIARY&&e[3]&&e[3].track)return e[3].track.id;if(A===YA.VIDEO&&e[1]&&e[1].track)return e[1].track.id}if(this.localMainVideoTrack&&A===YA.VIDEO){let e=this.localMainVideoTrack.mediaTrack;if(e)return e.id}if(this.localAuxVideoTrack&&A===YA.AUXILIARY){let e=this.localAuxVideoTrack.mediaTrack;if(e)return e.id}return""}getSSRC(){return this.ssrc}checkPublishResultCode(A,e){if(A!==0)throw A===d0?(this._log.error(cc.NOT_SUPPORTED_H264ENCODE),new gi({code:Ct.NOT_SUPPORTED_H264,message:Xo({key:vo.NOT_SUPPORTED_H264ENCODE})})):new gi({code:Ct.UNKNOWN,message:Xo({key:vo.SIGNAL_RESPONSE_FAILED,data:{signalResponse:ls.PUBLISH_RESULT,code:A,message:e}})})}onSinglePCReconnected(){return WA(this,null,function*(){this.isMainStreamPublished&&(this._log.warn("republish main stream"),yield this.publish({localAudioTrack:this.localMainAudioTrack,localVideoTrack:this.localMainVideoTrack,isAuxiliary:!1})),this.isAuxStreamPublished&&(this._log.warn("republish aux stream"),yield this.publish({localAudioTrack:this.localAuxAudioTrack,localVideoTrack:this.localAuxVideoTrack,isAuxiliary:!0}))})}};hi([qM(A=>{let{localVideoTrack:e}=A;e==null||delete e.retryEncodeFailed})],F1.prototype,"unpublish"),hi([p8({when(){return this.isDestroyed}})],F1.prototype,"doPublishChange"),hi([p8({when(){return this.isDestroyed}})],F1.prototype,"doUnpublish");var m8=(A=>(A[A.audio=1]="audio",A[A.bigVideo=2]="bigVideo",A[A.smallVideo=3]="smallVideo",A[A.auxVideo=4]="auxVideo",A))(m8||{}),f8=F1;function y8(A){return Object.keys(A).filter(e=>A[e])}var O1=class extends Q8{constructor(A){super(po(fi({},A),{isUplink:!1})),Y(this,"_flag",0),Y(this,"isRobot",!1),Y(this,"role","anchor"),Y(this,"fromType"),Y(this,"remoteAudioTrack"),Y(this,"remoteVideoTrack"),Y(this,"remoteAuxiliaryTrack"),Y(this,"ssrc",{audio:0,video:0,videoRtx:0,auxiliary:0,auxiliaryRtx:0}),Y(this,"_prevMids"),Y(this,"jitterBufferTimeoutId",-1),Y(this,"_jitterBufferResolve"),Y(this,"_videoCodec"),Y(this,"avPlayerStateSyncManager"),Y(this,"isDataChannelSubscribed",!1),this.flag=A.flag,this.isRobot=A.isRobot||!1,this.fromType=A.fromType,this.remoteAudioTrack=new d1(this._room,this),this.remoteVideoTrack=new CL(this._room,this),this.remoteAuxiliaryTrack=new gz(this._room,this),this.avPlayerStateSyncManager=new Bj({log:this._log,audioPlayer:this.remoteAudioTrack.player,videoPlayer:this.remoteVideoTrack.player}),this.initialize()}get videoCodec(){var A;return this._videoCodec||((A=this.singlePC)==null?void 0:A.downlinkVideoCodec)||"h264"}set videoCodec(A){this._videoCodec=A}get subscribeState(){return{audio:this.remoteAudioTrack.isSubscribed||this.remoteAudioTrack.isSubscribing,video:this.remoteVideoTrack.isBig&&(this.remoteVideoTrack.isSubscribed||this.remoteVideoTrack.isSubscribing),smallVideo:this.remoteVideoTrack.isSmall&&(this.remoteVideoTrack.isSubscribed||this.remoteVideoTrack.isSubscribing),auxiliary:this.remoteAuxiliaryTrack.isSubscribed||this.remoteAuxiliaryTrack.isSubscribing,datachannel:this.isDataChannelSubscribed}}get muteState(){return Np(this.flag,this.userId)}get flag(){return this._flag}set flag(A){var e,o,a;A!==this._flag&&(this._flag=A,(e=this.remoteAudioTrack)==null||e.onFlagChanged(),(o=this.remoteVideoTrack)==null||o.onFlagChanged(),(a=this.remoteAuxiliaryTrack)==null||a.onFlagChanged())}get hasMainStream(){return this.muteState.hasAudio||this.muteState.hasVideo||this.muteState.hasSmall}get hasAuxStream(){return this.muteState.hasAuxiliary}get isMainStreamSubscribed(){return(this.subscribeState.audio||this.subscribeState.video||this.subscribeState.smallVideo)&&(this.muteState.hasAudio||this.muteState.hasVideo||this.muteState.hasSmall)}get isAuxStreamSubscribed(){return this.subscribeState.auxiliary&&this.muteState.hasAuxiliary}get isSmallStreamSubscribed(){return this.subscribeState.smallVideo&&this.muteState.hasSmall}get isBigStreamSubscribed(){return this.subscribeState.video&&this.muteState.hasVideo}isStreamUnpublished(A){return A===YA.MAIN?!this.muteState.hasAudio&&!this.muteState.hasVideo:!this.muteState.hasAuxiliary}initialize(){this.installEvents()}close(A){clearTimeout(this.jitterBufferTimeoutId),super.close(A),this.emitConnectionStateChangedEvent("DISCONNECTED"),this.remoteAudioTrack.close(),this.remoteVideoTrack.close(),this.remoteAuxiliaryTrack.close(),this.avPlayerStateSyncManager.destroy(),this.uninstallEvents(),this.removeDownlink()}installEvents(){this.singlePC&&(this.listeners("track").includes(this.onTrack)||this.singlePC.on("track",this.onTrack,this),this.listeners("spc-reconnected").includes(this.onSinglePCReconnected)||this.singlePC.on("spc-reconnected",this.onSinglePCReconnected,this),this.remoteVideoTrack.on("decode-failed",this.onDecodeFailed,this))}uninstallEvents(){this.singlePC&&(this.singlePC.off("track",this.onTrack,this),this.singlePC.off("spc-reconnected",this.onSinglePCReconnected,this),this.remoteVideoTrack.off("decode-failed",this.onDecodeFailed,this))}emitConnectionStateChangedEvent(A){var e,o;let a=this._currentState,l=super.emitConnectionStateChangedEvent(A);return l&&a!==A&&((e=this.remoteVideoTrack)==null||e.emit("connection-state-changed",{prevState:a,state:A}),(o=this.remoteAuxiliaryTrack)==null||o.emit("connection-state-changed",{prevState:a,state:A})),l}onTrack(A){var e,o;let a=A.streams[0],{track:l,receiver:d}=A;if(!a.id.includes(this.tinyId))return;let h=a.id.includes("aux")?"auxiliary":"main";this._log.debug("ontrack ".concat(h," ").concat(l.kind));let y=YA.AUDIO;l.kind===YA.VIDEO&&(y=h===YA.MAIN?YA.VIDEO:YA.AUXILIARY);let S=this.remoteAudioTrack;y===YA.VIDEO?S=this.remoteVideoTrack:y===YA.AUXILIARY&&(S=this.remoteAuxiliaryTrack),(e=this.singlePC)==null||e.receiverRemoteTrackMap.set(d,S),(o=this.singlePC)!=null&&o.scriptTransformWorker&&this.initReceiverTransform(d,h,l.kind===YA.AUDIO),this.singlePC.enableInsertableStreams&&this.createEncodedStreams(d),S.setInputMediaStreamTrack(l)}createEncodedStreams(A){if(!this.singlePC.insertableStreamsAbortMap.has(A)){let e=A.createEncodedStreams(),o=new AbortController,a={abortController:o,enqueue:l=>{var d,h,y;let S=(d=this.singlePC)==null?void 0:d.receiverRemoteTrackMap.get(A);return S&&(S.kind!=="video"||(h=this.singlePC)!=null&&h.isUsingH264||(y=this.singlePC)!=null&&y.isUsingH265)?S.decodeFrame(l):l}};e.readable.pipeThrough(new TransformStream({transform:(l,d)=>{let h=a.enqueue(l);h&&d.enqueue(h)}})).pipeTo(e.writable,o).catch(l=>{l!=="destroy"&&this._log.warn(l)}),this.singlePC.addAbortController(A,o)}}initReceiverTransform(A,e,o){!this._peerConnection||!this.singlePC||!this.singlePC.scriptTransformWorker||A.transform||(A.transform=new RTCRtpScriptTransform(this.singlePC.scriptTransformWorker,{isReceiver:!0,isAudio:o,userId:this.userId,streamType:e}))}subscribe(A,e){return WA(this,null,function*(){var o,a;try{let l=!0;if(this._log.info("subscribe ".concat(e," ").concat(y8(A))),this.hasSSRC){let y="subscribe_change";Object.values(A).find(S=>S===!0)||(y="unsubscribe"),yield this.sendSubscription(y,A)}else{if(yield this._room.switchRoomSubedReq,(o=this.singlePC)!=null&&o.autoSubscribedUserMap.size){let y=this.singlePC.autoSubscribedUserMap.get(this.userId);if(y){this.singlePC.autoSubscribedUserMap.delete(this.userId);let S=(a=this.singlePC.autoSubscribedSsrcGroups.get(this._room.roomId))==null?void 0:a[y.groupIndex];S&&(this.ssrc={audio:S.audioSsrc,video:S.bigVideoSsrc,videoRtx:S.bigVideoRtxSsrc,auxiliary:S.auxVideoSsrc,auxiliaryRtx:S.auxVideoRtxSsrc},l=!1)}}yield this.doSubscribe(A,l),this.checkTrackEnded(A)}let{user:d,mediaTrack:h}=this.remoteVideoTrack;A.smallVideo&&h?(si.addSuccessEvent({key:524702}),this._blackSmallVideoDetectionId=tv.start({track:h,isUplink:!1,room:this._room,userId:this.userId,onBlack:()=>{this._log.warn("small video is black, auto change to big"),this._room.changeType(!1,d),si.addFailedEvent({key:524702}),tv.stop(this._blackSmallVideoDetectionId),this._blackSmallVideoDetectionId=void 0}})):(tv.stop(this._blackSmallVideoDetectionId),this._blackSmallVideoDetectionId=void 0)}catch(l){throw this._room.isJoined&&this.isStreamUnpublished(e)?(this._log.warn("".concat(l.message," ").concat(JSON.stringify(this.muteState))),new gi({code:Ct.REMOTE_STREAM_NOT_EXIST,message:"remote user ".concat(this.userId," unpublished stream")})):l}})}checkTrackEnded(A){var e,o,a;if((A.audio&&((e=this.remoteAudioTrack.mediaTrack)==null?void 0:e.readyState)==="ended"||A.video&&((o=this.remoteVideoTrack.mediaTrack)==null?void 0:o.readyState)==="ended"||A.auxiliary&&((a=this.remoteAuxiliaryTrack.mediaTrack)==null?void 0:a.readyState)==="ended")&&this.singlePC&&!this.singlePC.isReconnecting){if(this._log.warn("remote track ended start spc reconnect"),uE&&td<92)return;this.singlePC.startReconnection()}}unsubscribe(A){return WA(this,arguments,function(e){var o=this;let{remoteTracks:a,streamType:l}=e;return function*(){var d;if(l==="main"&&!o.isMainStreamSubscribed||l==="auxiliary"&&!o.isAuxStreamSubscribed)return void o._log.info("".concat(l," stream already unsubscribed"));let h=fi({},o.subscribeState);a.forEach(S=>{switch(S.mediaType){case 1:h.audio=!1;break;case 4:h.video=!1;break;case 8:h.smallVideo=!1;break;case 2:h.auxiliary=!1}});let y="subscribe_change";Object.values(h).find(S=>S===!0)||(y="unsubscribe"),o._log.info("".concat(y==="unsubscribe"?y:"subscribe"," ").concat(l," [").concat(y8(h),"]")),y==="unsubscribe"&&((d=o.singlePC)==null||d.removeDownlinkQueue.add(o.tinyId)),yield o.sendSubscription(y,h),l==="main"&&(tv.stop(o._blackSmallVideoDetectionId),o._blackSmallVideoDetectionId=void 0),y==="unsubscribe"&&(yield o.removeDownlink())}()})}subscribeDataChannel(){return WA(this,null,function*(){if(!this.singlePC)return;yield this.singlePC.waitForPeerConnectionConnected();let A=po(fi({},this.subscribeState),{datachannel:!0});yield this.doSubscribe(A)})}unsubscribeDataChannel(){return WA(this,null,function*(){let A=po(fi({},this.subscribeState),{datachannel:!1});yield this.sendSubscription("unsubscribe",A),yield this.removeDownlink()})}sendSubscription(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscribeState,o={srcTinyId:this.tinyId,srcUserId:this.userId},a=Nj,l=ls.UNSUBSCRIBE_RESULT;return A==="subscribe_change"&&(o={audio:e.audio,bigVideo:e.video,auxVideo:e.auxiliary,smallVideo:e.smallVideo,customData:e.datachannel,srcTinyId:this.tinyId},a=Gj,l=ls.SUBSCRIBE_CHANGE_RESULT),this._signalChannel.sendWaitForResponseWithRetry({command:a,data:o,responseCommand:l,timeout:1e4,retries:3}).then(d=>{let{data:h}=d;if(h.code!==0){let y=new gi({code:h.code,message:Xo({key:vo.ERROR_MESSAGE,data:{type:A,message:h.message}})});throw this._log.error(y),y}})}getMainStreamVideoTrackId(){return this.remoteVideoTrack&&this.remoteVideoTrack.mediaTrack?this.remoteVideoTrack.mediaTrack.id:""}getAuxStreamVideoTrackId(){return this.remoteAuxiliaryTrack&&this.remoteAuxiliaryTrack.mediaTrack?this.remoteAuxiliaryTrack.mediaTrack.id:""}setDelay(A){let{audioDelay:e,videoDelay:o}=A;this.remoteAudioTrack.stat.end2EndDelay=e,this.remoteVideoTrack.stat.end2EndDelay=o}onSinglePCReconnected(){return WA(this,null,function*(){(this.ssrc.audio||this.ssrc.video||this.ssrc.auxiliary||this.isDataChannelSubscribed)&&(this._log.warn("resubscribe ".concat(JSON.stringify(this.subscribeState))),yield this.doSubscribe(this.subscribeState),this.remoteAudioTrack.checkDecodeResult(),this.remoteVideoTrack.checkDecodeResult(),this.remoteAuxiliaryTrack.checkDecodeResult())})}get hasSSRC(){return this.ssrc.audio&&this.ssrc.video&&this.ssrc.auxiliary}doSubscribe(){return WA(this,arguments,function(){var A=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.subscribeState,o=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];return function*(){var a,l;if(A.singlePC){A.singlePC.addDownlinkQueue.add(A.tinyId),yield A.singlePC.waitForPeerConnectionConnected();try{if(o||!A.hasSSRC){let d={audioSsrc:sB(),bigVideoSsrc:sB(),bigVideoRtxSsrc:sB(),auxVideoSsrc:sB(),auxVideoRtxSsrc:sB()},{audioSsrc:h,bigVideoSsrc:y,bigVideoRtxSsrc:S,auxVideoSsrc:k,auxVideoRtxSsrc:V}=d;A.ssrc={audio:h,video:y,videoRtx:S,auxiliary:k,auxiliaryRtx:V},A.singlePC.addDownlinkQueue.delete(A.tinyId),yield A.singlePC.addDownlink({userId:A.userId,tinyId:A.tinyId,ssrc:A.ssrc,prevMids:A._prevMids});try{let J=yield A._signalChannel.sendWaitForResponseWithRetry({command:A8,responseCommand:ls.SPC_SUBSCRIBE_RESULT,data:{srcUserId:A.userId,srcTinyId:A.tinyId,audio:e.audio,bigVideo:e.video,auxVideo:e.auxiliary,smallVideo:e.smallVideo,customData:(a=e.datachannel)!=null&&a,ssrc:d},retries:3,retryTimeout:0});if(J.data.code!==0&&J.data.code!==-10036)throw new gi({code:J.data.code,message:J.data.message});A.isDataChannelSubscribed=(l=e.datachannel)!=null&&l}catch(J){throw yield A.removeDownlink(),J}return}A.singlePC.addDownlinkQueue.delete(A.tinyId),yield A.singlePC.addDownlink({userId:A.userId,tinyId:A.tinyId,ssrc:A.ssrc,prevMids:A._prevMids})}finally{if((e.audio||e.video||e.smallVideo||e.auxiliary||!e.datachannel)&&CQ){let{main:d,aux:h}=A._room.jitterBufferDelay||{},{jitterDelay:y=d,jitterDelayAux:S=h}=A._room.scheduleResult.config||{};(kn(y)||kn(S))&&A.setJitterBufferDelay({mainDelay:y,auxDelay:S})}}}}()})}removeDownlink(){return WA(this,null,function*(){this.singlePC&&(this.isDataChannelSubscribed=!1,this.ssrc={audio:0,video:0,videoRtx:0,auxiliary:0,auxiliaryRtx:0},this.singlePC.removeDownlinkQueue.delete(this.tinyId),clearTimeout(this.jitterBufferTimeoutId),this._jitterBufferResolve&&(this._jitterBufferResolve(),this._jitterBufferResolve=void 0),this.setJitterBufferDelay({mainDelay:0,auxDelay:0}),this._prevMids=yield this.singlePC.removeDownlink(this.userId))})}setJitterBufferDelay(A){let{mainDelay:e,auxDelay:o}=A;if(!CQ||!this.singlePC||!this._peerConnection||$E(e)&&$E(o))return Promise.resolve();this._log.info("set jitterBuffer main: ".concat(e," aux: ").concat(o));let a=this.singlePC.getReceiversByUserId(this.userId);return kn(e)&&(this.remoteAudioTrack.jitterBufferDelay=e,this.remoteVideoTrack.jitterBufferDelay=e),kn(o)&&(this.remoteAuxiliaryTrack.jitterBufferDelay=o,$E(e)&&(this.remoteAudioTrack.jitterBufferDelay=o)),new Promise(l=>{this._jitterBufferResolve=l,this.doSetJitterBufferDelay({mainDelay:e,auxDelay:o,receivers:a,resolve:l})})}doSetJitterBufferDelay(A){let{mainDelay:e,auxDelay:o,receivers:a,resolve:l}=A;try{if(e===0&&o===0)return a.forEach(d=>d.jitterBufferTarget=0),this._jitterBufferResolve=void 0,l();if(a.forEach(d=>{var h;let y=d.track===this.remoteAuxiliaryTrack.outMediaTrack||$E(e)&&d.track===this.remoteAudioTrack.outMediaTrack;if(y&&$E(o)||!y&&$E(e))return;let S=y?o||0:e,k=(d.jitterBufferTarget||0)+100;k>S||(d.jitterBufferTarget=k,this._log.debug("set ".concat(y?"aux ":"").concat((h=d?.track)==null?void 0:h.kind," jitterBuffer delay ").concat(k," -> ").concat(S)))}),!a.find(d=>{let h=d.track===this.remoteAuxiliaryTrack.outMediaTrack?o||0:e;return d.jitterBufferTarget{this.doSetJitterBufferDelay({mainDelay:e,auxDelay:o,receivers:a,resolve:l})},1e3)}catch(d){this._log.warn("set jitterBuffer delay error: ".concat(d)),clearTimeout(this.jitterBufferTimeoutId),this._jitterBufferResolve=void 0,l()}}get audioReceiver(){var A;return((A=this.singlePC)==null?void 0:A.getReceiversByUserId(this.userId)[0])||null}onDecodeFailed(){this._room.downlinkVideoCodec==="h265"&&this._room.requestRemoteFallbackToH264()}};hi([sL(),jr(A=>function(){for(var e=arguments.length,o=new Array(e),a=0;a{let h=y=>{this.off("closed",h),d(new gi({code:Ct.API_CALL_ABORTED,message:Xo({key:vo.CONNECTION_ABORTED,data:y})}))};this.on("closed",h),A.apply(this,o).then(l,d).finally(()=>{this.off("closed",h)})})})],O1.prototype,"subscribe"),hi([sL()],O1.prototype,"unsubscribe"),hi([Dy(()=>"jitter")],O1.prototype,"setJitterBufferDelay");var EsA=O1,dsA=gc(jl()),D8=class cX extends dsA.EventEmitter{constructor(e,o){super(),this.room=e,this.signalChannel=o,Y(this,"log"),Y(this,"cmdIdSeqMap",new Map),Y(this,"messageMap",new Map),this.log=pA.createLogger({parent:e.getLogger(),id:"cmm",userId:e.userId}),this.onReceiveMsg=this.onReceiveMsg.bind(this),o.on(ls.RECEIVE_CUSTOM_MSG,this.onReceiveMsg),this.room.on("peer-leave",a=>{let{userId:l}=a;[...this.messageMap.keys()].forEach(d=>{d.split("_").slice(0,-1).join("_")===l&&this.messageMap.delete(d)})})}send(e){let{cmdId:o,data:a}=e,l=this.cmdIdSeqMap.get(o)||Math.floor(16383*Math.random()),d={cmdId:o,msg:btoa(String.fromCharCode(...new Uint8Array(a))),ordered:!0,reliable:!0,streamSeq:l};this.cmdIdSeqMap.set(o,l+1),this.signalChannel.send(koA,d),this.log.debug("send custom msg: ".concat(JSON.stringify(d)))}onReceiveMsg(e){let{data:o}=e.data,a=this.room.tinyIdToUserIdMap.get(o.srcTinyId);if(a){let l={userId:a,cmdId:o.cmdId,seq:o.streamSeq,data:Uint8Array.from(atob(o.msg),d=>d.charCodeAt(0)).buffer};if(o.ordered){let d="".concat(a,"_").concat(l.cmdId),h=this.messageMap.get(d);if(h&&h.lastSeq!==0)if(Math.abs(h.lastSeq-l.seq)>cX.SEQ_INTERVAL)this.messageMap.set(d,{lastSeq:l.seq,cachedMessageMap:new Map}),this.emitMessage(l);else if(l.seq>h.lastSeq){if(l.seq===h.lastSeq+1)this.emitMessage(l);else if(!h.cachedMessageMap.has(l.seq)){let y=setTimeout(()=>this.emitMessage(l,!0),5e3);h.cachedMessageMap.set(l.seq,{message:l,timeoutId:y})}}else this.log.debug("drop message ".concat(l.userId,"-").concat(l.cmdId,"-").concat(l.seq));else h||(h={lastSeq:0,cachedMessageMap:new Map},this.messageMap.set(d,h),setTimeout(()=>this.emitMessage(l,!0),100)),h.cachedMessageMap.set(l.seq,{message:l})}else this.emit("message",l)}else{this.log.warn("receive msg from unknown user, wait peer-join tinyId: ".concat(o.srcTinyId));let l=d=>{d.tinyId===o.srcTinyId&&(this.room.off("peer-join",l),this.onReceiveMsg(e))};this.room.on("peer-join",l),OC(2e3).then(()=>this.room.off("peer-join",l))}}emitMessage(e){let o=arguments.length>1&&arguments[1]!==void 0&&arguments[1];var a;let l=this.messageMap.get("".concat(e.userId,"_").concat(e.cmdId)),d=e;if(l){if(o){let y=[...l.cachedMessageMap.values()].sort((S,k)=>S.message.seq-k.message.seq);y[0]&&(d=y[0].message)}l.lastSeq!==0&&d.seq-l.lastSeq>1&&this.log.debug("msg lost userId: ".concat(d.userId," seq: ").concat(l.lastSeq," -> ").concat(d.seq)),l.lastSeq=d.seq,clearTimeout((a=l.cachedMessageMap.get(d.seq))==null?void 0:a.timeoutId),l.cachedMessageMap.delete(d.seq)}this.log.debug("receive custom msg: ".concat(JSON.stringify(d))),this.emit("message",d);let h=l?.cachedMessageMap.get(d.seq+1);h&&this.emitMessage(h.message)}};Y(D8,"SEQ_INTERVAL",300);var CsA=D8,{isString:S8,isUndefined:iv,getNetworkType:hsA,isEmpty:BsA}=Hd,Ny=class extends isA{constructor(A){super(A),Y(this,"_businessInfo"),Y(this,"userManager"),Y(this,"_version"),Y(this,"_heartbeat",-1),Y(this,"_lastHeartBeatTime",-1),Y(this,"_stats"),Y(this,"_joinTimeout",-1),Y(this,"_firstPublishedList",null),Y(this,"_joinReject",null),Y(this,"_isRelayChanged",!1),Y(this,"sdpSemantics"),Y(this,"signalChannel",null),Y(this,"uplinkConnection",null),Y(this,"singlePC",null),Y(this,"enableSPC",LM),Y(this,"_changeBigSmallRecords",new Map),Y(this,"networkQuality"),Y(this,"_iceTransportPolicy"),Y(this,"forceRelay",!1),Y(this,"_turnServers",[]),Y(this,"_iceServersFromJoin"),Y(this,"_syncUserListInterval",-1),Y(this,"_smallStreamConfig",{bitrate:100,frameRate:15,height:120,width:160}),Y(this,"enableSEI",!1),Y(this,"_enableAudioVolumeEvaluation",!1),Y(this,"_audioVolumeIntervalId",0),Y(this,"_enableMultiAuxStream",!1),Y(this,"_pureAudioPushMode",!1),Y(this,"_customMessageManager"),Y(this,"_enableDataChannel",!1),Y(this,"preferHW",!1),Y(this,"healthDetector"),Y(this,"playoutDelay"),Y(this,"jitterBufferDelay"),Y(this,"_updateAudioLevelTaskId",-1),Y(this,"switchRoomSubedReq"),Y(this,"resolveSwitchRoomSubedReq"),Y(this,"enableVolumeControlInIOS"),Y(this,"capturedLocalMainAudioTrack"),Y(this,"capturedLocalMainVideoTrack"),Y(this,"capturedLocalAuxVideoTrack"),Y(this,"PRELINK_EXPIRED_TIME",3e5),Y(this,"PRELINK_TIMEOUT",1e4),Y(this,"prelinkTimeoutId",null),Y(this,"firewallDetector"),this.firewallDetector=new OiA,this.firewallDetector.on("firewall-restriction",()=>{this._log.warn("firewall restriction"),this.emit("firewall-restriction")}),this._stats=new YoA(this,this._log),this.userManager=new UiA(this.userId,this._log),this._version=qd,this.sdpSemantics=E0,iv(A.sdpSemantics)?re.isUnifiedPlanDefault()&&(this.sdpSemantics=$S):this.sdpSemantics=A.sdpSemantics,this._log.info("sdpSemantics: ".concat(this.sdpSemantics,", netType: ").concat(hsA())),A.iceTransportPolicy&&(this._iceTransportPolicy=A.iceTransportPolicy),this._enableMultiAuxStream=!iv(A.enableMultiAuxStream)&&A.enableMultiAuxStream,this.enableSEI=A.enableSEI&&LM,!iv(A.enableSPC)&&LM&&(this.enableSPC=A.enableSPC),this.preferHW=!!A.preferHW,this.enableVolumeControlInIOS=A.enableVolumeControlInIOS,this._initBusinessInfo(A),this.healthDetector=new gsA(this)}get isMainStreamPublished(){var A;return!((A=this.uplinkConnection)==null||!A.isMainStreamPublished)}get isMainAudioPublished(){var A;return!((A=this.uplinkConnection)==null||!A.localMainAudioTrack)}get isAuxStreamPublished(){var A;return!((A=this.uplinkConnection)==null||!A.isAuxStreamPublished)}get hasAuxStream(){return[...this.remotePublishedUserMap.values()].findIndex(A=>A.muteState.hasAuxiliary)>=0}get userMap(){return this.userManager.userMap}get remotePublishedUserMap(){return this.userManager.remotePublishedUserMap}get tinyIdToUserIdMap(){return new Map([...this.userMap.values()].map(A=>[A.tinyId,A.userId]))}get videoCodec(){var A;return((A=this.singlePC)==null?void 0:A.videoCodec)||"h264"}get downlinkVideoCodec(){var A;return((A=this.singlePC)==null?void 0:A.downlinkVideoCodec)||"h264"}join(A,e,o){return WA(this,null,function*(){return this.userManager.mySelfId=this.userId,this.userManager.on("1",a=>{this.emit("peer-join",a)}),this.userManager.on("8",a=>{this.emit("asr-robot-peer-join",a)}),this.userManager.on("9",a=>{this.emit("asr-robot-peer-leave",a)}),this.userManager.on("2",a=>{let{userId:l,reason:d}=a;this.closeDownLinkConnection(l,"remote user exitRoom"),this.emit("peer-leave",{userId:l,reason:d})}),this.userManager.on("3",this.createDownlinkConnection,this),this.userManager.on("5",this.closeDownLinkConnection,this),this.userManager.on("6",a=>{var l=bx(a,[]);F.emit(nA.REMOTE_PUBLISH_STATE_CHANGED,fi({room:this},l)),this.emit("remote-publish-state-changed",fi({},l))}),this.joinParams=A,Nr(A.enableDataChannel)&&(this._enableDataChannel=A.enableDataChannel),new Promise((a,l)=>WA(this,null,function*(){var d,h;this._joinReject=l;try{this.checkDestroy();try{yield Promise.all([this.initialize(),this.initSinglePC()])}catch(S){if(!(S instanceof gi&&S.code===Ct.SPC_INITIALIZED_FAILED))return l(S);(d=this.signalChannel)==null||d.destroy(),yield this.initialize()}let y=ko();yield this.doJoin(A,(h=this.singlePC)==null?void 0:h.clientAbility),si.addSuccessEvent({key:521708,cost:ko()-y}),a(),this._firstPublishedList&&this.onPublishedUserList({data:{userList:this._firstPublishedList}})}catch(y){si.addFailedEvent({key:521708,error:y}),l(y)}this._joinReject=null}))})}initSinglePC(){return WA(this,null,function*(){if(this.enableSPC&&!this.singlePC){this.singlePC=new Ty({signalChannel:this.signalChannel,room:this,enableDataChannel:this._enableDataChannel}),this.singlePC.on("sei-message",A=>this.emit("sei-message",A)),this.singlePC.on("dump",A=>this.emit("dump",A)),this.singlePC.once("error",()=>this.fallbackToMPC()),this.singlePC.on("data_channel_msg",A=>{let e=new TextDecoder().decode(A.data.data||A.data);try{this.emit("data-channel-message",{data:JSON.parse(e)})}catch{}});try{return yield this.singlePC.initialize()}catch(A){throw this.fallbackToMPC(),new gi({code:Ct.SPC_INITIALIZED_FAILED,message:A?.message})}}})}doJoin(A,e){return new Promise((o,a)=>WA(this,null,function*(){var l,d,h,y,S,k,V,J;A.privateMapKey&&(this.privateMapKey=A.privateMapKey),A.latencyLevel&&(this.latencyLevel=A.latencyLevel),this.signalChannel.once(_1,MA=>{this.clearJoinTimeout(),F.emit(nA.JOIN_SIGNAL_CONNECTION_END,{room:this,error:MA}),a(MA)}),Nr((d=(l=this.scheduleResult)==null?void 0:l.config)==null?void 0:d.singlePC)&&LM&&(this.enableSPC=this.scheduleResult.config.singlePC),this.keyPointManager.setConnectionType(this.singlePC?1:2),(!((y=(h=this.scheduleResult)==null?void 0:h.config)!=null&&y.jitterDelay)&&!((k=(S=this.scheduleResult)==null?void 0:S.config)!=null&&k.jitterDelayAux)||!CQ)&&e&&this.playoutDelay&&(this._log.info("set playoutDelay",JSON.stringify(this.playoutDelay)),e.playoutDelay=this.playoutDelay);let cA={roomId:String(A.roomId||A.strRoomId),useStringRoomId:this.useStringRoomId,privateMapKey:this.privateMapKey,latencyLevel:this.latencyLevel,trtcRole:A.role,trtcScene:this.scene==="live"?2:1,sdpSemantics:this.sdpSemantics,version:this._version,ua:navigator&&navigator.userAgent||"",terminalType:Cn(),netType:Wf(),bussinessInfo:this._businessInfo,ability:e,sdkType:this._sdkType,userSig:this.userSig,receiveMix:!0,isChorus:!!this.enableChorus,enableNtpAudioFrame:!!this.enableChorus&&t_(),transcription:this._enableDataChannel,downUseVp8:((V=this.scheduleResult.config)==null?void 0:V.downUseVp8)||!1};this._log.debug("join room signal data: ".concat(JSON.stringify(cA)));let CA=5e3;(J=this.scheduleResult.config)!=null&&J.enterRoomTimeout&&this.scheduleResult.config.enterRoomTimeout>=1&&(CA=1e3*this.scheduleResult.config.enterRoomTimeout),this._joinTimeout=window.setTimeout(()=>{a(new gi({code:Ct.JOIN_ROOM_FAILED,message:Xo({key:vo.JOIN_ROOM_TIMEOUT})}))},CA),F.emit(nA.JOIN_SEND_CMD,{room:this}),this.signalChannel.send(this.singlePC?NoA:hoA,cA),this.signalChannel.once(ls.JOIN_ROOM_RESULT,MA=>WA(this,null,function*(){this.clearJoinTimeout();let{code:ie,message:pe,data:qe,tinyId:we}=MA.data;F.emit(nA.JOIN_RECEIVED_CMD_RES,{room:this,code:ie}),ie===0?(this._log.info("Join room success, start heartbeat"),we&&(this.tinyId=we),this.startHeartbeat(),this.syncUserList(),this.startSyncUserListInterval(),this._firstPublishedList=qe.publishers,this._iceServersFromJoin=qe.iceServer?[qe.iceServer]:[],this.singlePC&&this.singlePC.setIceServers(this.getIceServers()).then(()=>{var Di;(Di=this.singlePC)==null||Di.connect(po(fi({},qe.ability),{useVp8:qe.ability.useVp8||!!A.useVp8,useH265:qe.ability.useH265&&!!A.useH265})).catch(()=>{})}),o()):(this._log.error("Join room failed result: ".concat(ie," error: ").concat(pe)),a(new gi({code:Ct.JOIN_ROOM_FAILED,extraCode:ie,message:Xo({key:vo.JOIN_ROOM_FAILED,data:{error:pe,code:ie}})})))}))}))}reJoin(){return WA(this,null,function*(){if(this.isJoined)try{this._log.warn("reJoin pending: ".concat(this.joinParams.roomId));let A,e=[];if(this.singlePC&&(this.singlePC.close(),this.singlePC=null,e.push(this.initSinglePC().then(o=>(A=o,o)))),this.signalChannel&&(this.signalChannel.close(),e.push(this.signalChannel.connect())),yield Promise.all(e),yield this.doJoin(po(fi({},this.joinParams),{role:this.role==="anchor"?20:21,privateMapKey:this.privateMapKey,latencyLevel:this.latencyLevel}),A),this._log.warn("reJoin success"),sn.logSuccessEvent({userId:this.userId,eventType:Ja.REJOIN}),this.singlePC){let o=a=>{var l;a.state==="CONNECTED"&&((l=this.singlePC)==null||l.off(y_.CONNECTION_STATE_CHANGED,o),this.uplinkConnection instanceof f8&&(this.uplinkConnection.installEvents(),this.uplinkConnection.onSinglePCReconnected()),this.remotePublishedUserMap.forEach(d=>{d.installEvents(),d.onSinglePCReconnected()}))};this.singlePC.on(y_.CONNECTION_STATE_CHANGED,o),this.checkConnectionsToReconnect(),this.uplinkConnection instanceof L1&&!this.uplinkConnection.getIsReconnecting()&&this.uplinkConnection.startReconnection()}}catch(A){this._log.warn("reJoin fail ".concat(A)),this.reset(),sn.logFailedEvent({userId:this.userId,eventType:Ja.REJOIN,error:A}),this.emit("error",new gi({code:Ct.JOIN_ROOM_FAILED,message:Xo({key:vo.REJOIN_ROOM_FAILED,data:{roomId:this.joinParams.roomId}})}))}else this._log.warn("reJoin abort")})}initialize(A){return WA(this,null,function*(){var e,o;if(!(A!=null&&A.isPrelink)&&this.prelinkPromise&&(yield this.prelinkPromise),(e=this.signalChannel)!=null&&e.isPrelinkValid(this.sdkAppId,this.userId,this.userSig))return this._log.info("reuse prelink signal channel"),void this.signalChannel.consumePrelink();(o=this.signalChannel)!=null&&o.prelink&&this.signalChannel.close();let a,{mainUrl:l,backupUrl:d}=this.getSignalChannelUrl(),h=this.signalChannel||function(S){return[...G1.values()].find(V=>V.room.userId===S&&!V.room.isJoined)||null}(this.userId),y=!!(h&&h.isConnected&&h.keepAlive&&h.userId===this.userId);return Array.isArray(this.scheduleResult.domains)&&this.scheduleResult.domains.length>0&&(a=this.scheduleResult.domains[0]),this._log.info("".concat(y?"reuse":"setup"," signal channel")),y?(h.url=l,h.backupUrl=d,h.room.setSignalChannel(null),h.room=this,this.signalChannel=h):(h&&h.close(),this.signalChannel=new e8({sdkAppId:this.sdkAppId,userId:this.userId,userSig:this.userSig,url:l,backupUrl:d,room:this,signalDomainWhenUnifiedProxy:this.proxy_unified?a:void 0,prelink:A?.isPrelink}),this._customMessageManager=new CsA(this,this.signalChannel),this._customMessageManager.on("message",S=>{this.emit("custom-message",S)})),this.networkQuality||(this.networkQuality=new n8({signalChannel:this.signalChannel,room:this}),this.networkQuality.on(n8.EVENT_NETWORK_QUALITY,S=>{var k;this.emit("network-quality",S),(k=this.singlePC)==null||k.detectTCPAndUDP(S)})),nd(this,this.signalChannel).add(_j,S=>{F.emit(nA.SIGNAL_CONNECTION_STATE_CHANGED,fi({room:this},S)),this.emit("signal-connection-state-changed",S)}).add(EoA,S=>{this.reset(),this.emit("error",S)}).add(ls.PEER_JOIN,S=>{let{srcTinyId:k,userId:V,role:J,fromType:cA}=S.data.data;this.userManager.addUser({userId:V,tinyId:k,role:J,fromType:cA})}).add(ls.PEER_LEAVE,S=>{let{userId:k,reason:V=0}=S.data.data;this.userManager.deleteUser(k,V)}).add(ls.UPDATE_REMOTE_MUTE_STAT,S=>{this._lastHeartBeatTime>0&&Date.now()-this._lastHeartBeatTime>=1e4&&this.doHeartbeat(),this.onPublishedUserList(S.data)}).add(ls.CLIENT_BANNED,S=>{let k=S.data.data,{reason:V}=k;if(sn.uploadEvent({log:"stat-banned:".concat(V),userId:this.userId}),V==="user_time_out")return this._log.warn("".concat(V," last heart beat time: ").concat(this._lastHeartBeatTime," interval: ").concat(Date.now()-this._lastHeartBeatTime,", visibility: ").concat(document.visibilityState)),void this.reJoin();this._log[V==="kick"?"error":"info"]("user was banned because of [".concat(V,"]")),this.reset(),this.emit("banned",{reason:V})}).add(ls.SEND_SWITCH_ROOM_SUBED_REQ,S=>{if(!this.singlePC)return;let{subList:k}=S.data.data;this._log.info("auto subscribe ".concat(zd(k,{keysToInclude:["userId"]}))),k.forEach(V=>{this.singlePC.autoSubscribedUserMap.set(V.userId,V)}),this.resolveSwitchRoomSubedReq()}).add(ls.FALLBACK_CODEC,S=>WA(this,null,function*(){var k,V,J,cA,CA;let MA=S.data.data;((k=MA.videoControlInfo)==null?void 0:k.enableH265Enc)===0&&((V=this.singlePC)==null?void 0:V.videoCodec)==="h265"&&(this._log.warn("fallback codec enableH265Enc: ".concat((J=MA.videoControlInfo)==null?void 0:J.enableH265Enc)),si.addCount({key:513e3}),yield(cA=this.singlePC)==null?void 0:cA.switchVideoEncoder("h264"),yield(CA=this.uplinkConnection)==null?void 0:CA.sendMediaSettings())})),this.signalChannel.once(Kz,S=>{this.tinyId=S.signalInfo.tinyId,F.emit(nA.JOIN_SIGNAL_CONNECTION_END,{room:this})}),F.emit(nA.JOIN_SIGNAL_CONNECTION_START,{room:this}),yield this.signalChannel.connect(),y&&F.emit(nA.JOIN_SIGNAL_CONNECTION_END,{room:this}),y})}setSignalChannel(A){this.signalChannel=A,A||Ln(this)}leave(){return WA(this,null,function*(){var A;try{yield this.doHeartbeat()}catch{}this._log.info("leave() => leaving room"),F.emit(nA.LEAVE_SEND_CMD,{room:this}),(A=this.signalChannel)==null||A.send(BoA),this.switchRoomSubedReq=void 0,this._changeBigSmallRecords.clear()})}clearNetworkQuality(){this.networkQuality&&(this.networkQuality.stop(),delete this.networkQuality)}closeConnections(){this.remotePublishedUserMap.forEach(A=>{this.closeDownLinkConnection(A.userId,"you exitRoom")})}clearJoinTimeout(){clearTimeout(this._joinTimeout),this._joinTimeout=-1}startHeartbeat(){this._heartbeat===-1&&(this._heartbeat=Gr.run("ric",this.doHeartbeat.bind(this),{delay:2e3}),this.enableChorus&&this.startUpdateNTPTime())}stopHeartbeat(){this._heartbeat!==-1&&(this._log.info("stopHeartbeat"),Gr.clearTask(this._heartbeat),this._heartbeat=-1,this._lastHeartBeatTime=-1)}doHeartbeat(){return WA(this,null,function*(){var A;let e=this.badCaseDetector.getMonitorFreeze(),o=yield this._stats.getStatsReport({uplinkConnection:this.uplinkConnection,downlinkConnections:this.remotePublishedUserMap,freezeMap:e});this.badCaseDetector.resetMonitor();let a=(A=this.signalChannel)!=null&&A.isConnected?function(d){if(C_.has(d)){let h=C_.get(d).map(y=>({uint32_event_id:y.eventId,uint64_date:y.timestamp,str_userid:y.remoteUserId,uint32_param1:y.param1,uint32_param2:y.param2,uint32_video_stream_type:y.streamType}));return C_.delete(d),h}return[]}(this.userId):[],l=po(fi({str_sdk_version:s0,uint64_datetime:new Date().getTime(),msg_user_info:{str_identifier:this.userId,uint64_tinyid:this.tinyId},msg_event_msg:a,str_acc_ip:this.getSignalInfo().relayIp,str_client_ip:this.getSignalInfo().clientIp},o),{msg_device_info:fi({uint32_terminal_type:15,str_device_name:cQ(),str_os_version:"",uint32_net_type:Wf()},o.msg_device_info)});if(this.heartbeatReport=l,this.heartbeatCount++,F.emit(nA.HEARTBEAT_REPORT,{room:this,report:l}),this.signalChannel){if(this.signalChannel.isConnected){this.signalChannel.send(QoA,l);let d=Date.now();this._lastHeartBeatTime>0&&d-this._lastHeartBeatTime>1e4&&this._log.warn("heartbeat took ".concat(d-this._lastHeartBeatTime)),this._lastHeartBeatTime=d,this.signalChannel.isOnline||(this._log.warn("signal channel is not online"),this.signalChannel.startReconnection())}this.emit("heartbeat-report",po(fi({},l),{bytes_sent:this._stats.totalBytesSent+this.signalChannel.bytesSent,bytes_received:this._stats.totalBytesReceived+this.signalChannel.bytesReceived}))}!this._isRelayChanged&&this.isRelayMaybeFailed()&&(this.reJoin(),this._isRelayChanged=!0)})}onPublishedUserList(A){if(!this.isJoined)return;let e=!1,o=A.data.userList||[],a=A.data.mixRobotList||[],l=[];for(let h of o){if(h.flag===Gb)continue;let{userId:y,srcTinyId:S,flag:k,fromType:V}=h;y===this.userId&&(e=!0,this.uplinkConnection&&(this.uplinkConnection.flag=k),this.localPublishFlag!==k&&(this.localPublishFlag=k,this.emit("local-publish-flag-changed",k))),l.push({userId:y,tinyId:S,flag:k,fromType:V})}let d=[...a.map(h=>{let{userId:y,srcTinyId:S,flag:k,mixUserList:V,fromType:J}=h;return{userId:y,tinyId:S,flag:k,isRobot:!0,mixUserList:V,fromType:J}}),...l];d.forEach(h=>{let{userId:y}=h,S=this.remotePublishedUserMap.get(y);S&&this.checkSubscribeBigSmallVideo(S)}),A.data.fakeMixUser&&(A.data.fakeMixUser.tinyId=A.data.fakeMixUser.srcTinyId,d.push(A.data.fakeMixUser)),F.emit(nA.RECEIVED_PUBLISHED_USER_LIST,{room:this,publishedUserList:d}),e||(this.localPublishFlag=0,this.emit("local-publish-flag-changed",0)),this.userManager.setRemotePublishedUserList(d)}closeUplink(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"you unpublished";this.uplinkConnection&&(this.localTracks.size>0&&this.uplinkConnection.doUnpublish().catch(()=>{}),this.uplinkConnection.close(A),A==="you exitRoom"&&(this.uplinkConnection.destroy(),this.uplinkConnection=null),this.uplinkConnection instanceof L1&&(this.uplinkConnection=null)),this.localTracks.forEach(e=>e.unpublish()),this.localTracks.clear()}createDownlinkConnection(A){let{userId:e,tinyId:o,flag:a,isRobot:l,fromType:d}=A,h=new(this.singlePC?EsA:o8)({userId:e,tinyId:o,room:this,signalChannel:this.signalChannel,enableSEI:this.enableSEI,flag:a,isRobot:l,fromType:d});this.userManager.addRemotePublishedUser(h),this.installDownlinkEvents(h,e),this.emit("remote-published",h)}closeDownLinkConnection(A){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"remote user unpublished",o=this.remotePublishedUserMap.get(A);o&&(o.close(e),this.emit("remote-unpublished",o))}installDownlinkEvents(A,e){A.on("error",o=>{let a=o.getCode();a!==Ct.ICE_TRANSPORT_ERROR&&(a===Ct.DOWNLINK_RECONNECTION_FAILED&&this.closeDownLinkConnection(e),this.emit("error",o))}),A.on("connection-state-changed",o=>{this.emit("media-connection-state-changed",po(fi({},o),{userId:A.userId}))})}startSyncUserListInterval(){this._syncUserListInterval===-1&&(this._syncUserListInterval=Gr.run("ric",this.syncUserList.bind(this)))}stopSyncUserListInterval(){Gr.clearTask(this._syncUserListInterval),this._syncUserListInterval=-1}syncUserList(){return this.getUserList().then(A=>{this.userManager.setUserList(A)}).catch(A=>{this._log.debug("sync user list failed: ".concat(A))})}getUserList(){var A;return(A=this.signalChannel)!=null&&A.isConnected?this.signalChannel.sendWaitForResponse({command:woA,responseCommand:ls.USER_LIST_RES,enableLog:!1,timeout:2e3}).then(e=>{let{data:o}=e,{code:a,message:l}=o;if(a===0)return(o.data&&o.data.userList||[]).map(d=>{let{userId:h,srcTinyId:y,role:S,fromType:k}=d;return{userId:h,tinyId:y,role:S,fromType:k}});throw Xo({key:vo.SIGNAL_RESPONSE_FAILED,data:{signalResponse:ls.USER_LIST_RES,code:a,message:l}})}):Promise.reject("not connected")}getAllConnections(){let A=[...this.remotePublishedUserMap.values()];return this.uplinkConnection&&A.push(this.uplinkConnection),A}isRelayMaybeFailed(){if(this.signalChannel&&!this.signalChannel.isOnline||!t8)return!1;if(this.singlePC)return this.singlePC.reconnectionCount>6;let A=this.getAllConnections();if(A.length===0)return!1;for(let e=0;e{if(e instanceof sm&&!e.getIsReconnecting()){let o=e.getPeerConnection();o&&o.connectionState===ho.CLOSED&&(this._log.warn("[".concat(e.getUserId(),"] pc is closed but not reconnect")),e.startReconnection())}})}fallbackToMPC(){return WA(this,null,function*(){var A;if(this._log.warn("fallback to multi pc"),sn.uploadEvent({log:"stat-fallback",userId:this.userId}),this.enableSPC=!1,(A=this.singlePC)==null||A.close(),this.singlePC=null,this.isJoined&&(yield this.reJoin()),this.uplinkConnection){let e=this.uplinkConnection;this.uplinkConnection=new L1({userId:this.userId,tinyId:this.tinyId,room:this,signalChannel:this.signalChannel,enableSEI:this.enableSEI}),e.isMainStreamPublished&&(yield this.uplinkConnection.publish({localAudioTrack:e.localMainAudioTrack,localVideoTrack:e.localMainVideoTrack,isAuxiliary:!1})),e.isAuxStreamPublished&&(yield this.uplinkConnection.publish({localAudioTrack:e.localAuxAudioTrack,localVideoTrack:e.localAuxVideoTrack,isAuxiliary:!0})),e.close()}for(let e of[...this.remotePublishedUserMap.values()]){let o=new o8({userId:e.userId,tinyId:e.tinyId,room:this,signalChannel:this.signalChannel,enableSEI:this.enableSEI,flag:e.flag,remoteAudioTrack:e.remoteAudioTrack,remoteVideoTrack:e.remoteVideoTrack,remoteAuxiliaryTrack:e.remoteAuxiliaryTrack});this.installDownlinkEvents(o,e.userId),this.remotePublishedUserMap.set(e.userId,o),e.isMainStreamSubscribed&&(yield o.subscribe(e.subscribeState,"main")),e.isAuxStreamSubscribed&&(yield o.subscribe(e.subscribeState,"auxiliary"))}})}destroy(){this.isDestroyed||(this.signalChannel&&(this._log.info("destroying SignalChannel"),this.signalChannel.close(),this.signalChannel=null),super.destroy(),this._joinReject&&(this._joinReject(new gi({code:Ct.INVALID_OPERATION,message:Xo({key:vo.CLIENT_DESTROYED,data:{funName:"join"}})})),this.clearJoinTimeout(),this.reset()),this.firewallDetector.destroy(),this.removeAllListeners(),this.healthDetector.destroy(),Gr.clearTask(this._audioVolumeIntervalId))}switchRole(A){return WA(this,null,function*(){this.role!==A&&(A==="audience"&&this.uplinkConnection&&this.closeUplink("you switch role to audience"),yield this.doSwitchRole(A))})}doSwitchRole(A){let e={command:_oA,data:{role:A==="anchor"?20:21,privateMapKey:this.privateMapKey,latencyLevel:this.latencyLevel},responseCommand:ls.SWITCH_ROLE_RES,retries:1};return this._log.info("switchRole signal data: ".concat(JSON.stringify(e.data))),this.signalChannel.sendWaitForResponseWithRetry(e).then(o=>{let{code:a,message:l}=o.data;if(a!==0)throw new gi({code:Ct.SWITCH_ROLE_FAILED,message:Xo({key:vo.SWITCH_ROLE_FAILED,data:{message:l,code:a}})});this.role=A}).catch(o=>{throw o instanceof gi&&o.getCode()===Ct.API_CALL_TIMEOUT&&(o=new gi({code:Ct.SWITCH_ROLE_FAILED,message:Xo({key:vo.SWITCH_ROLE_TIMEOUT})})),this._log.error(o),o})}subscribeDataChannel(){return WA(this,null,function*(){if(this.remotePublishedUserMap.size===0)return;let A=[...this.remotePublishedUserMap.values()].filter(e=>e.fromType===B0);this._log.info("subscribeDataChannel",A.map(e=>e.userId)),yield Promise.all(A.map(e=>WA(this,null,function*(){try{yield e.subscribe(po(fi({},e.subscribeState),{datachannel:!0}),"main")}catch(o){this._log.error("subscribeDataChannel failed:",e.userId,o)}})))})}unsubscribeDataChannel(){return WA(this,null,function*(){if(this.remotePublishedUserMap.size===0)return;let A=[...this.remotePublishedUserMap.values()].filter(e=>e.fromType===B0);this._log.info("unsubscribeDataChannel",A.map(e=>e.userId)),yield Promise.all(A.map(e=>e.unsubscribeDataChannel()))})}_initUplinkConnection(){this.uplinkConnection=this.singlePC?new f8({userId:this.userId,tinyId:this.tinyId,room:this}):new L1({userId:this.userId,tinyId:this.tinyId,room:this,signalChannel:this.signalChannel,enableSEI:this.enableSEI}),this.uplinkConnection.on("connection-state-changed",A=>{this.emit("media-connection-state-changed",po(fi({},A),{userId:this.userId}))}),this.uplinkConnection.on("error",A=>{let e=A.getCode();e!==Ct.ICE_TRANSPORT_ERROR&&(e===Ct.UPLINK_RECONNECTION_FAILED&&this.closeUplink(),this.emit("error",A))})}publish(A){return WA(this,null,function*(){var e;this.uplinkConnection||this._initUplinkConnection();let o="".concat(A.streamType," ").concat(A.isAudio&&A.isScreen?"screen":"").concat(A.kind);this._log.info("publish() => ".concat(o)),yield(e=this.singlePC)==null?void 0:e.waitForPeerConnectionConnected(),yield this.uplinkConnection.publish({localAudioTrack:A instanceof jM?A:null,localVideoTrack:A instanceof BQ?A:null,isAuxiliary:A.streamType==="auxiliary"})})}unpublish(A){return WA(this,null,function*(){if((this.scene!=="live"||this.role==="anchor")&&(this.isMainStreamPublished||this.isAuxStreamPublished)&&this.uplinkConnection){try{let e="".concat(A.streamType," ").concat(A.isAudio&&A.isScreen?"screen":"").concat(A.kind);this._log.info("unpublish() => ".concat(e)),yield this.uplinkConnection.unpublish({localAudioTrack:A instanceof jM?A:null,localVideoTrack:A instanceof BQ?A:null})}catch{}this.localTracks.size===0&&this.closeUplink("you unpublished")}})}addTrack(A){if(!this.uplinkConnection||!A.mediaTrack)return Promise.resolve();let e=this.uplinkConnection.addTrack(A);return A.publish(this,e),e}removeTrack(A){return this.uplinkConnection&&A.mediaTrack?(A.unpublish(),this.uplinkConnection.removeTrack(A)):Promise.resolve()}replaceTrack(A){return this.uplinkConnection&&A.mediaTrack&&J2()?this.uplinkConnection.replaceTrack(A).then(e=>{e&&F.emit(nA.LOCAL_TRACK_REPLACED,{track:A})}):Promise.resolve()}setBandWidth(A){return WA(this,null,function*(){this.uplinkConnection&&(yield this.uplinkConnection.setBandwidth(A),yield this.uplinkConnection.sendMediaSettings())})}enableSmall(A){return WA(this,null,function*(){if(!this.uplinkConnection||!this.uplinkConnection.localMainVideoTrack)return Promise.resolve();A&&this.uplinkConnection.localMainVideoTrack.small&&(yield this.setBandWidth({type:YA.VIDEO,videoType:YA.SMALL,bandwidth:this.uplinkConnection.localMainVideoTrack.small.bitrate})),yield this.uplinkConnection.enableSmall(A)})}subscribe(){for(var A=arguments.length,e=new Array(A),o=0;o!h.isSubscribed),e.length===0)return;let{userId:a}=e[0],l=this.remotePublishedUserMap.get(a);if(!l)return;let d=e.find(h=>h.mediaType===2)?"auxiliary":"main";try{let h=fi({},l.subscribeState);e.forEach(S=>{switch(S.mediaType){case 1:h.audio=!0;break;case 4:h.video=!0;break;case 8:h.smallVideo=!0;break;case 2:h.auxiliary=!0}});let y=this._changeBigSmallRecords.get(a);y&&y.options.smallVideo&&l.muteState.hasSmall&&h.video&&(h.video=!1,h.smallVideo=!0),F.emit(nA.SUBSCRIBE_START,{room:this,streamType:d,remotePublishedUser:l,subscribeState:h}),this._log.info("subscribe() => ".concat(a," ").concat(d," ").concat(e.map(S=>S.strMediaType).join(",")," [").concat(kj(h),"] prev: [").concat(kj(l.subscribeState),"]")),yield l.subscribe(h,d),this._log.info("subscribe ".concat(a," ").concat(d," done"));for(let S of e)S.mediaTrack||(yield S.waitHasMediaTrack());F.emit(nA.SUBSCRIBE_SUCCESS,{room:this,streamType:d,remotePublishedUser:l})}catch(h){let y=h instanceof gi?h.getCode():Ct.UNKNOWN,S=h;throw h instanceof gi?y===Ct.REMOTE_STREAM_NOT_EXIST&&(S=new gi({code:Ct.API_CALL_ABORTED,message:Xo({key:vo.API_CALL_ABORTED,data:{message:h.message,userId:a,streamType:d}})}),this._log.warn(S)):(S=new gi({code:y,message:Xo({key:vo.SUBSCRIBE_FAILED,data:{message:h.message,userId:a,streamType:d}})}),this._log.error(S)),S}})}unsubscribe(){for(var A=arguments.length,e=new Array(A),o=0;oh.mediaType===2)?"auxiliary":"main";this._log.info("unsubscribe() => ".concat(a," ").concat(d," ").concat(e.map(h=>h.strMediaType).join(",")));try{yield l.unsubscribe({remoteTracks:e,streamType:d})}catch(h){this._log.warn("unsubscribe() => failed ".concat(h))}e.forEach(h=>{h.unsubscribe(),h.mediaType===8&&h.setMediaType(4)}),F.emit(nA.UNSUBSCRIBE_SUCCESS,{room:this,streamType:d,remotePublishedUser:l})})}setEncodedDataProcessingListener(A){throw new Error("Method not implemented.")}enableAudioVolumeEvaluation(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:2e3,e=arguments.length>1?arguments[1]:void 0;if(A<=0)return this._enableAudioVolumeEvaluation=!1,void Gr.clearTask(this._audioVolumeIntervalId);A=Math.floor(Math.max(A,100)),F.emit(nA.AUDIO_LEVEL_INTERVAL,{interval:A}),this._audioVolumeIntervalId&&Gr.clearTask(this._audioVolumeIntervalId),this._enableAudioVolumeEvaluation=!0,this._audioVolumeIntervalId=Gr.run("intervalInWorker",()=>{var o;e1.isRunning?this.stopUpdateAudioLevelFromSenderStat():this.updateAudioLevelFromSenderStat(A,e);let a=[];(o=this.remotePublishedUserMap)==null||o.forEach(l=>{if(l.muteState.hasAudio){!e1.isRunning&&l.muteState.audioAvailable&&l.remoteAudioTrack.isSubscribed?this.updateDownlinkAudioLevelFromReceiver(l):l.remoteAudioTrack.volume=0;let d=Math.floor(100*l.remoteAudioTrack.getAudioLevel());a.push({userId:l.userId,volume:d,floatVolume:l.remoteAudioTrack.getInternalAudioLevel()})}}),this.emit("audio-volume",a)},{delay:A,backgroundTask:e})}updateAudioLevelFromSenderStat(A,e){return WA(this,null,function*(){var o;if(!this.uplinkConnection||!this.uplinkConnection.localMainAudioTrack||this._updateAudioLevelTaskId!==-1)return;let a=(o=this.uplinkConnection.getPeerConnection())==null?void 0:o.getSenders()[0];if(!a)return;let l=Math.max(A,500);this._log.warn("updateAudioLevelFromSenderStat ".concat(l)),this._updateAudioLevelTaskId=Gr.run("intervalInWorker",()=>WA(this,null,function*(){if(!this.uplinkConnection||!this.uplinkConnection.localMainAudioTrack)return void this.stopUpdateAudioLevelFromSenderStat();let d=yield a.getStats();if(this._updateAudioLevelTaskId<0)return;let{localMainAudioTrack:h}=this.uplinkConnection;d.forEach(y=>{y.type==="media-source"&&y.audioLevel&&(h.volume=y.audioLevel)})}),{delay:l,backgroundTask:e})})}stopUpdateAudioLevelFromSenderStat(){var A;this._updateAudioLevelTaskId!==-1&&(this._log.warn("stopUpdateAudioLevelFromSenderStat"),Gr.clearTask(this._updateAudioLevelTaskId),this._updateAudioLevelTaskId=-1,(A=this.uplinkConnection)!=null&&A.localMainAudioTrack&&(this.uplinkConnection.localMainAudioTrack.volume=0))}updateDownlinkAudioLevelFromReceiver(A){var e;let{audioReceiver:o}=A;if(!qk||!o)return;let a=(e=o.getSynchronizationSources()[0])==null?void 0:e.audioLevel;kn(a)?A.remoteAudioTrack.volume=Math.min(2*a,1):o.getStats().then(l=>{l.forEach(d=>{d.type==="inbound-rtp"&&kn(d.audioLevel)&&(A.remoteAudioTrack.volume=d.audioLevel)})})}getLocalAudioStats(){return WA(this,null,function*(){var A;let e={};return e[this.userId]={bytesSent:0,packetsSent:0,audioLevel:0},(A=this.uplinkConnection)!=null&&A.localMainAudioTrack&&(e[this.userId]=this.uplinkConnection.localMainAudioTrack.stat),e})}getLocalVideoStats(){return WA(this,null,function*(){var A,e;let o={};return o[this.userId]=((e=(A=this.uplinkConnection)==null?void 0:A.localMainVideoTrack)==null?void 0:e.stat)||{bytesSent:0,packetsSent:0,framesEncoded:0,framesSent:0,frameWidth:0,frameHeight:0,fpsCapture:0},o})}getTransportStats(){return WA(this,null,function*(){let A={rtt:0,downlinksRTT:{}};if(this.uplinkConnection){let e=yield this._stats.getSenderStats(this.uplinkConnection);A.rtt=e.rtt}for(let[,e]of this.remotePublishedUserMap){let o=yield this._stats.getReceiverStats(e);A.downlinksRTT[o.userId]=o.rtt}return A})}getRemoteVideoStats(A){return WA(this,null,function*(){let e={};for(let[o,a]of this.remotePublishedUserMap)A==="main"&&a.muteState.hasVideo&&(e[o]=a.remoteVideoTrack.stat),A==="auxiliary"&&a.muteState.hasAuxiliary&&(e[o]=a.remoteAuxiliaryTrack.stat);return e})}getRemoteAudioStats(){return WA(this,null,function*(){let A={};for(let[e,o]of this.remotePublishedUserMap)o.muteState.hasAudio&&(A[e]=o.remoteAudioTrack.stat);return A})}setTurnServer(A,e){this._log.info("set turn server: ".concat(JSON.stringify(A)," ").concat(e||""));let o=[];Array.isArray(A)?A.forEach(a=>o.push(Hd.getTurnServer(a))):Hd.isPlainObject(A)&&o.push(Hd.getTurnServer(A)),this._turnServers=o,e&&(this._iceTransportPolicy=e)}sendStartMixTranscode(A){return this.signalChannel.sendWaitForResponse({command:DoA,data:A,timeout:5e3,responseCommand:ls.START_MIX_TRANSCODE_RES,commandDesc:"startMixTranscode"}).catch(e=>{if(e.code!==Ct.API_CALL_ABORTED)throw e})}sendStopMixTranscode(A){return this.signalChannel.sendWaitForResponse({command:SoA,data:A,timeout:5e3,responseCommand:ls.STOP_MIX_TRANSCODE_RES,commandDesc:"stopMixTranscode"}).catch(e=>{if(e.code!==Ct.API_CALL_ABORTED)throw e})}sendStartPublishCDN(A){let e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];return this.signalChannel.sendWaitForResponse({command:e?poA:foA,data:A,timeout:5e3,responseCommand:e?ls.START_PUBLISH_TENCENT_CDN_RES:ls.START_PUBLISH_GIVEN_CDN_RES,commandDesc:"startPublishCDN"}).catch(o=>{if(o.code!==Ct.API_CALL_ABORTED)throw o})}sendStopPublishCDN(A){let e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];return this.signalChannel.sendWaitForResponse({command:e?moA:yoA,data:A,timeout:5e3,responseCommand:e?ls.STOP_PUBLISH_TENCENT_CDN_RES:ls.STOP_PUBLISH_GIVEN_CDN_RES,commandDesc:"stopPublishCDN"}).catch(o=>{if(o.code!==Ct.API_CALL_ABORTED)throw o})}sendStartPushStreamToRoom(A){return this.signalChannel.sendWaitForResponse({command:MoA,data:A,timeout:5e3,responseCommand:ls.START_PUBLISH_CDN_STREAM_RES,commandDesc:"startPublishCDNStream"}).catch(e=>{if(e.code!==Ct.API_CALL_ABORTED)throw e})}sendUpdatePushStreamToRoom(A){return this.signalChannel.sendWaitForResponse({command:voA,data:A,timeout:5e3,responseCommand:ls.UPDATE_PUBLISH_CDN_STREAM_RES,commandDesc:"updatePublishCDNStream"}).catch(e=>{if(e.code!==Ct.API_CALL_ABORTED)throw e})}sendStopPushStreamToRoom(A){return this.signalChannel.sendWaitForResponse({command:RoA,data:A,timeout:5e3,responseCommand:ls.STOP_PUBLISH_CDN_STREAM_RES,commandDesc:"stopPublishCDNStream"}).catch(e=>{if(e.code!==Ct.API_CALL_ABORTED)throw e})}sendAbilityStatus(A){var e;(e=this.signalChannel)==null||e.sendWaitForResponse({command:GoA,data:A,timeout:5e3,responseCommand:ls.ABILITY_STATUS_REPORT_RESULT,commandDesc:"ability status report"}).catch(o=>{})}getIceServers(A){var e,o;return this._turnServers.length>0?this._turnServers:(e=this.scheduleResult.iceServers)!=null&&e.length?this.scheduleResult.iceServers:A!=null&&A.length?A:(o=this._iceServersFromJoin)!=null&&o.length?this._iceServersFromJoin:[]}getIceTransportPolicy(){return this.forceRelay?"relay":this._iceTransportPolicy||this.scheduleResult.iceTransportPolicy||"all"}getLogger(){return this._log}enableAIVoice(){throw new Error("Method not implemented.")}getSignalChannelUrl(){let A={mainUrl:"",backupUrl:""},e=Hd.getEnv();return e?(A.mainUrl="wss://".concat(Hd.getTestSignalDomain(e)),A.backupUrl=A.mainUrl):this.proxy_ws?(A.mainUrl=this.proxy_ws,A.backupUrl=A.mainUrl):this.proxy_unified?(A.mainUrl="wss://".concat(this.proxy_unified),A.backupUrl=A.mainUrl):Array.isArray(this.scheduleResult.domains)&&this.scheduleResult.domains.length>0&&(A.mainUrl="wss://".concat(this.scheduleResult.domains[0]),A.backupUrl=A.mainUrl,this.scheduleResult.domains[1]&&(A.backupUrl="wss://".concat(this.scheduleResult.domains[1]))),A}getSignalInfo(){var A;return((A=this.signalChannel)==null?void 0:A.getSignalInfo())||{clientIp:"",relayIp:""}}reset(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.stopSyncUserListInterval(),this.stopHeartbeat(),this.closeConnections(),this.clearNetworkQuality(),this.closeUplink("you exitRoom"),this.signalChannel&&(A&&this.signalChannel.keepAlive&&this.signalChannel.isConnected?this.signalChannel.stopKeepAliveIn(3600):(this.signalChannel.close(),this.setSignalChannel(null))),this.localPublishFlag=0,this.heartbeatCount=0,this._stats.reset(),this.userManager.clear(),this.userManager.removeAllListeners(),this.singlePC&&(this.singlePC.close(),this.singlePC=null),this.scheduleResult={domains:null,iceServers:null,iceTransportPolicy:null,trtcAutoConf:null},this.clearPrelinkTimeout(),this.prelinkPromise=null}prelink(A,e,o,a,l,d){return WA(this,null,function*(){var h;if(this.isJoined)throw new gi({code:Ct.INVALID_OPERATION,message:"already joined room"});if(!l&&!d)throw new gi({code:Ct.INVALID_OPERATION,message:"roomId or strRoomId is required"});if((h=this.signalChannel)!=null&&h.prelink){if(this.signalChannel.isConnecting)return void this._log.warn("prelink is connecting, please wait");if(this.signalChannel.isConnected)return void this._log.warn("prelink is already connected")}return this.userId=e,this.sdkAppId=A,this.userSig=o,this.roomId=String(l||d),this.useStringRoomId=!(!d||l),this._log.setSdkAppId(this.sdkAppId),this._log.setUserId(this.userId),this.prelinkPromise=Promise.race([this.doPrelink(A,e,o,a,l,d),new Promise((y,S)=>{this.prelinkTimeoutId=setTimeout(()=>{S(new gi({code:Ct.INVALID_OPERATION,message:"prelink timeout after ".concat(this.PRELINK_TIMEOUT,"ms")}))},this.PRELINK_TIMEOUT)})]).then(()=>{this.clearPrelinkTimeout()}).catch(y=>{throw this.clearPrelinkTimeout(),this.closePrelink().catch(()=>{}),y}),this.prelinkPromise})}doPrelink(A,e,o,a,l,d){return WA(this,null,function*(){var h,y,S;try{if(!this.proxy_ws&&!this.proxy_wt&&!this.scheduleResult.domains&&!Hd.getEnv()&&(yield this.schedule({sdkAppId:A,userId:e,userSig:o,roomId:l,strRoomId:d,role:20,privateMapKey:null,businessInfo:null,streamId:null,userDefineRecordId:null},a)),(h=this.scheduleResult.config)==null||!h.prelink)throw new gi({code:Ct.INVALID_OPERATION,message:"prelink failed: your sdkAppId is not supported, please contact us [https://trtc.io/contact] to enable it."});yield this.initialize({isPrelink:!0}),(y=this.signalChannel)==null||y.markPrelinkConnected({sdkAppId:A,userId:e,userSig:o}),(S=this.signalChannel)==null||S.stopPrelinkIn(this.PRELINK_EXPIRED_TIME/1e3),this._log.info("prelink success")}catch(k){throw this._log.error("prelink failed",k),k}})}clearPrelinkTimeout(){this.prelinkTimeoutId&&(clearTimeout(this.prelinkTimeoutId),this.prelinkTimeoutId=null)}closePrelink(){return WA(this,null,function*(){var A;if(this.isJoined)throw new gi({code:Ct.INVALID_OPERATION,message:"close prelink failed: has joined room"});if((A=this.signalChannel)!=null&&A.prelink){if(this.signalChannel.keepAlive)return void this._log.info("skip close prelink: use keepAlive");this.reset()}})}checkSubscribeBigSmallVideo(A){return WA(this,null,function*(){let{subscribeState:e,userId:o,muteState:{hasSmall:a,hasVideo:l}}=A;if(!a&&!l||!e.video&&!e.smallVideo)return;let d=this._changeBigSmallRecords.get(o);if(!d||d.isSubscribing||d.reSubscribeCount<=0)return;let{options:h,reSubscribeCount:y}=d;if(h.video&&e.video||h.smallVideo&&e.smallVideo&&a)return;let S={audio:A.remoteAudioTrack.isSubscribed||A.remoteAudioTrack.isSubscribing,auxiliary:A.remoteAuxiliaryTrack.isSubscribed||A.remoteAuxiliaryTrack.isSubscribing,video:h.video,smallVideo:h.smallVideo,datachannel:A.subscribeState.datachannel};try{if(!a&&S.smallVideo&&(S.video=!0,S.smallVideo=!1),S.smallVideo===e.smallVideo&&S.video===e.video)return;d.isSubscribing=!0,d.reSubscribeCount=y-1,yield A.subscribe(S,"main"),A.remoteVideoTrack.setMediaType(S.smallVideo?8:4),this._log.info("change [".concat(o,"] to ").concat(S.smallVideo?"small":"big"," video successfully. count ").concat(eM-d.reSubscribeCount,".")),d.isSubscribing=!1,d.reSubscribeCount=eM}catch(k){this._log.info("change [".concat(o,"] to ").concat(S.smallVideo?"small":"big"," video failed. count ").concat(eM-d.reSubscribeCount,". reason: ").concat(k)),d.isSubscribing=!1,d.reSubscribeCount===0&&this._changeBigSmallRecords.delete(o)}})}changeType(A,e){let o={options:{video:!A,smallVideo:A},isSubscribing:!1,reSubscribeCount:eM};this._changeBigSmallRecords.set(e.userId,o),this._log.info("set [".concat(e.userId,"] video prefer type: ").concat(A?"small":"big")),this.emit("subscribe-small-video-changed",{userId:e.userId,isSmall:A});let a=this.remotePublishedUserMap.get(e.userId);a&&this.checkSubscribeBigSmallVideo(a)}get smallStreamConfig(){return this._smallStreamConfig}_initBusinessInfo(A){this._businessInfo=A.businessInfo;let e={};if(S8(A.businessInfo)&&(e=JSON.parse(A.businessInfo)),!iv(A.pureAudioPushMode)){if(!Number.isInteger(Number(A.pureAudioPushMode)))throw new gi({code:Ct.INVALID_PARAMETER,message:Xo({key:vo.INVALID_PURE_AUDIO})});this._pureAudioPushMode=A.pureAudioPushMode,e.Str_uc_params||(e.Str_uc_params={}),e.Str_uc_params.pure_audio_push_mod=this._pureAudioPushMode}if(!iv(A.userDefineRecordId)){let o=/^[A-Za-z0-9_-]{1,64}$/gi;if(A.userDefineRecordId.match(o)===null)throw new gi({code:Ct.INVALID_PARAMETER,message:Xo({key:vo.INVALID_USER_DEFINE_RECORDID})});e.Str_uc_params||(e.Str_uc_params={}),e.Str_uc_params.userdefine_record_id=A.userDefineRecordId}if(!iv(A.userDefinePushArgs)){if(!(S8(A.userDefinePushArgs)&&String(A.userDefinePushArgs)&&String(A.userDefinePushArgs).length<=256))throw new gi({code:Ct.INVALID_PARAMETER,message:Xo({key:vo.INVALID_USER_DEFINE_PUSH_ARGS})});e.Str_uc_params||(e.Str_uc_params={}),e.Str_uc_params.userdefine_push_args=A.userDefinePushArgs}BsA(e)||(this._businessInfo=JSON.stringify(e))}sendCustomMessage(A){var e;(e=this._customMessageManager)==null||e.send(A)}enableInsertableStreams(){return WA(this,null,function*(){if(this.singlePC&&!this.singlePC.enableInsertableStreams&&zp)return this.singlePC.enableInsertableStreams=!0,yield this.singlePC.waitForPeerConnectionConnected(),yield this.singlePC.startReconnection()})}sendSignalMessage(A){var e;return this.signalChannel?(e=this.signalChannel)==null?void 0:e.sendWaitForResponseWithRetry(A):Promise.reject(new gi({code:Ct.INVALID_OPERATION,message:"not join"}))}get enableCodecPipeline(){return this.videoManager.encodePipeline.length>0||this.videoManager.decodePipeline.length>0||this.audioManager.encodePipeline.length>0||this.audioManager.decodePipeline.length>0}get scriptTransformWorker(){var A;return(A=this.singlePC)==null?void 0:A.scriptTransformWorker}switchRoom(A){return WA(this,null,function*(){var e;if(!this.signalChannel||!this.singlePC)return;let{roomId:o,strRoomId:a,userSig:l,privateMapKey:d}=A,h=((e=this.scheduleResult.config)==null?void 0:e.autoSubscribeCount)||A?.autoSubscribeCount||1,y=String(this.useStringRoomId?a:o),S=[];for(let cA=0;cA{this.resolveSwitchRoomSubedReq=cA,OC(5e3).then(cA)}),F.emit(nA.SWITCH_ROOM_START,{room:this}),yield this.singlePC.waitForPeerConnectionConnected();try{this.userManager.clear(),V=yield this.signalChannel.sendWaitForResponse({command:LoA,responseCommand:ls.SEND_SWITCH_ROOM_RES,data:k});let{code:cA,message:CA}=V.data;if(cA!==0){this._log.error("switch room failed. result: ".concat(cA," error: ").concat(CA));let MA=new gi({code:Ct.SWITCH_ROOM_FAILED,extraCode:cA,message:CA});throw F.emit(nA.SWITCH_ROOM_FAILED,{room:this,error:MA}),MA}this.userSig=l,iv(d)||(this.privateMapKey=d),F.emit(nA.SWITCH_ROOM_SUCCESS,{room:this,currentRoomId:J,targetRoomId:y})}catch(cA){throw this.singlePC.autoSubscribedSsrcGroups.clear(),this.roomId=J,this.resolveSwitchRoomSubedReq(),cA}})}isSwitchRoomSupported(){var A;let e="unable to use switchRoom API, fallback to exitRoom and enterRoom.";return((A=this.scheduleResult.config)==null?void 0:A.switchRoom)!==!0?(this._log.warn("".concat(e," Reason: this sdkAppId is not supported, please contact us [https://trtc.io/contact] to enable it.")),!1):this.scene!=="live"?(this._log.warn("".concat(e," Reason: the scene is not 'live'.")),!1):this.role!=="audience"?(this._log.warn("".concat(e," Reason: the role is not 'audience'.")),!1):!!this.singlePC||(this._log.warn("".concat(e," Reason: is not using single peerConnection.")),!1)}requestRemoteFallbackToH264(){var A;(A=this.singlePC)==null||A.requestRemoteFallbackToH264()}startUpdateNTPTime(){if(!this.signalChannel)return;let A=[];for(let e=0;e<5;e++)A.push(this.updateNTPTime());return Promise.all(A).then(e=>{var o;let a=e[0].offset,l=e[0].offset;e.forEach(y=>{a=Math.min(y.offset,a),l=Math.max(y.offset,l)});let d=Math.floor(e.reduce((y,S)=>y+S.rtt,0)/e.length),h=Math.floor(e.reduce((y,S)=>y+S.offset,0)/e.length);(l-a>30||d>50)&&setTimeout(()=>this.startUpdateNTPTime(),5e3),zB(h),(o=this.scriptTransformWorker)==null||o.postMessage({type:"ntp-offset",data:h}),this._log.debug("ntp updated offset: ".concat(h)),this.emit("ntp-time-updated")}).catch(e=>{this._log.warn("ntp updated failed: ".concat(e))})}updateNTPTime(){let A=Date.now();return this.signalChannel.sendWaitForResponse({command:UoA,responseCommand:ls.UPDATE_NETWORK_TIME_RESULT,addReceiveTime:!0,data:{clientSendTime:String(A)},enableLog:!1}).then(e=>{let o=Number(e.data.data.serverSendTime),a=Number(e.data.data.serverRecvTime),l=e.data.receiveTime||Date.now();return{rtt:l-A-(a-o),offset:(a-A+(o-l))/2}})}};return hi([lc(["left",Zs.INIT],"joined"),tB({settings:{retries:1,timeout:0},onRetrying(A){this._log.warn("join retry ".concat(A))},onRetryFailed(A){this._log.error("join failed",A)},onError(A,e){this._isUsingCachedSchedule&&!this.isDestroyed?(this._log.warn("is using cached schedule, retry join"),pQ(!0),this.reset(),e()):this.signalChannel&&this.signalChannel.isConnected&&this.signalChannel.keepAlive?(this._log.warn("is using keepAlive ws, retry join"),this.signalChannel.close(),this.reset(),e()):(this.reset(),e())}}),jr(A=>{let e=new loA;return function(o,a,l){return WA(this,null,function*(){let d=String(o.roomId||o.strRoomId);if(this.userId=o.userId,this.sdkAppId=o.sdkAppId,this.userSig=o.userSig,this._log.setSdkAppId(this.sdkAppId),this._log.setUserId(this.userId),this.scene=a,o.privateMapKey=o.privateMapKey||"",this.isJoined)throw new gi({code:Ct.INVALID_OPERATION,message:Xo({key:vo.INVALID_JOIN})});if(this.checkDestroy(),e.isJoined({userId:this.userId,roomId:d,sdkAppId:this.sdkAppId,room:this}))throw new gi({code:Ct.INVALID_OPERATION,message:Xo({key:vo.REPEAT_JOIN,data:this.userId})});e.add({room:this,roomId:d}),this.role=o.role===21?"audience":"anchor",this._log.info("Join() => joining room: ".concat(d," useStringRoomId: ").concat(this.useStringRoomId," scene: ").concat(this.scene," role: ").concat(this.role)),F.emit(nA.JOIN_START,{room:this,roomId:d,params:o});let h=Hd.getEnv();h||(h=ZB.QCLOUD,this.proxy_ws&&(this.proxy_ws.startsWith(Pf.OLD_CLOUD_LADDER)?h=ZB.OLD_CLOUD_LADDER:this.proxy_ws.startsWith(Pf.WEBRTC)&&(h=ZB.WEBRTC))),sn.setConfig({env:h,sdkAppId:String(this.sdkAppId),userId:this.userId,roomId:d}),re.checkSystemRequirementsInternal(l).then(y=>{this.checkSystemResult=y,IoA.call(this)});try{!this.prelinkPromise&&!this.proxy_ws&&!this.proxy_wt&&!this.scheduleResult.domains&&!Hd.getEnv()&&(yield this.schedule(o,l));let y=yield A.call(this,o,a,l);return this.roomId=d,this._joinedTimestamp=Hd.performanceNow(),F.emit(nA.JOIN_SUCCESS,{room:this}),l===30&&!o.component&&sn.uploadEvent({log:"stat-conv-".concat(Number(Yp),"-").concat(location.hostname),userId:this.userId}),y}catch(y){throw e.delete({room:this,roomId:d}),F.emit(nA.JOIN_FAILED,{room:this,error:y}),y}})}})],Ny.prototype,"join"),hi([lc("joined","left",{ignoreError:!0,success(){this.reset(!0)}}),jr(A=>function(){for(var e=arguments.length,o=new Array(e),a=0;aA.mediaType),jr(A=>function(){for(var e=arguments.length,o=new Array(e),a=0;ad.outMediaTrack&&d.state==="ready"),!o.length))return;F.emit("61",{room:this});let l=A.apply(this,o);return Promise.all(o.map(d=>d.publish(this,l)))})}),tB({settings:{retries:Jf,timeout:A=>Tp(A)},onError(A,e,o,a){let[l]=a;var d;(d=A.message)!=null&&d.includes("timeout")?(this._log.warn("publish ".concat(l.strMediaType," timeout"),A),e()):(this._log.error("publish ".concat(l.strMediaType," failed: ").concat(A)),o(A),F.emit(nA.PUBLISH_FAILED,{room:this}))}})],Ny.prototype,"publish"),hi([g_({fnName:"publish"}),Dy(A=>A.mediaType),jr(A=>function(){for(var e=arguments.length,o=new Array(e),a=0;ad.unpublish()),l}),qM(function(){var A,e;this.localTracks.size===0&&UI()&&((e=(A=this.singlePC)==null?void 0:A.getPeerConnection())==null||e.getSenders().forEach(o=>o.track&&o.replaceTrack(null)))})],Ny.prototype,"unpublish"),hi([_5(A=>{if(A.code!==Ct.API_CALL_ABORTED)throw A}),Dy(A=>A.userId)],Ny.prototype,"replaceTrack"),hi([Dy(function(){for(var A=arguments.length,e=new Array(A),o=0;ofunction(){for(var e=arguments.length,o=new Array(e),a=0;a!d.isSubscribed&&d.subscribe(l)),l}),tB({settings:{retries:Jf,timeout:A=>Tp(A)},onError(A,e,o,a){if(A.message.includes("timeout"))this._log.warn("subscribe timeout"),e();else{let l=A?.code===Ct.API_CALL_ABORTED;this._log[l?"warn":"error"]("subscribe failed ".concat(a.map(d=>d.strMediaType).join(","),": ").concat(A)),o(A),F.emit(nA.SUBSCRIBE_FAILED,{room:this,remoteTracks:a})}}})],Ny.prototype,"subscribe"),hi([g_({fnName:"subscribe",callback(){for(var A=arguments.length,e=new Array(A),o=0;o{let l=this.remotePublishedUserMap.get(a.userId);l&&!l.isMainStreamSubscribed&&!l.isAuxStreamSubscribed&&l.close("you unsubscribed")})}}),Dy(function(){for(var A=arguments.length,e=new Array(A),o=0;oi in t?MV(t,i,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[i]=n,daA=(t,i)=>{for(var n in i||(i={}))uX.call(i,n)&&AW(t,n,i[n]);if(QZ)for(var n of QZ(i))EaA.call(i,n)&&AW(t,n,i[n]);return t},CaA=(t,i)=>function(){return i||(0,t[IX(t)[0]])((i={exports:{}}).exports,i),i.exports},haA=(t,i,n,c)=>{if(i&&typeof i=="object"||typeof i=="function")for(let I of IX(i))uX.call(t,I)||I===n||MV(t,I,{get:()=>i[I],enumerable:!(c=lX(i,I))||c.enumerable});return t},BaA=(t,i,n)=>(n=t!=null?IaA(uaA(t)):{},haA(MV(n,"default",{value:t,enumerable:!0}),t)),V_=(t,i,n,c)=>{for(var I,C=lX(i,n),f=t.length-1;f>=0;f--)(I=t[f])&&(C=I(i,n,C)||C);return C&&MV(i,n,C),C},pn=(t,i,n)=>AW(t,typeof i!="symbol"?i+"":i,n),QaA=CaA({"../node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.js"(t,i){var n=Object.prototype.hasOwnProperty,c="~";function I(){}function C(N,L,q){this.fn=N,this.context=L,this.once=q||!1}function f(N,L,q,lA,tA){if(typeof q!="function")throw new TypeError("The listener must be a function");var BA=new C(q,lA||N,tA),IA=c?c+L:L;return N._events[IA]?N._events[IA].fn?N._events[IA]=[N._events[IA],BA]:N._events[IA].push(BA):(N._events[IA]=BA,N._eventsCount++),N}function w(N,L){--N._eventsCount===0?N._events=new I:delete N._events[L]}function _(){this._events=new I,this._eventsCount=0}Object.create&&(I.prototype=Object.create(null),new I().__proto__||(c=!1)),_.prototype.eventNames=function(){var N,L,q=[];if(this._eventsCount===0)return q;for(L in N=this._events)n.call(N,L)&&q.push(c?L.slice(1):L);return Object.getOwnPropertySymbols?q.concat(Object.getOwnPropertySymbols(N)):q},_.prototype.listeners=function(N){var L=c?c+N:N,q=this._events[L];if(!q)return[];if(q.fn)return[q.fn];for(var lA=0,tA=q.length,BA=new Array(tA);lA{if(!navigator.userAgent.includes("Firefox"))return t;const i=t.split(`\r +`),n=[],c=[];i.forEach(f=>{const w=f.toLowerCase();w.includes("a=rtpmap")&&w.includes("h264")&&n.push(f)}),n.length>1&&c.push(...n.slice(1));const I=c.map(f=>{const w=/a=rtpmap:(\d+)\s/.exec(f);return w&&w.length>1?w[1]:null}).filter(f=>f!==null),C=[];return i.forEach(f=>{let w=f;if(f.includes("a=setup")&&(w="a=setup:passive"),(f.includes("m=audio")||f.includes("m=video"))&&(w=f.split(" ").filter((_,N)=>N<3||!I.includes(_)).join(" ")),f.includes("a=fmtp")||f.includes("a=rtcp-fb")||f.includes("a=rtpmap")){const _=/a=(?:fmtp|rtcp-fb|rtpmap):(\d+)\s/.exec(f);if(_&&_.length>1&&I.includes(_[1]))return}C.push(w)}),C.join(`\r +`)},pZ=t=>{const i=t.split(`\r +`),n=[];i.forEach(f=>{const w=f.toLowerCase();w.includes("a=rtpmap")&&w.includes("h264")&&n.push(f)});const c=n.map(f=>{const w=/a=rtpmap:(\d+)\s/.exec(f);return w&&w.length>1?w[1]:null}).filter(f=>f!==null),I=[];i.forEach(f=>{let w=f;if(f.includes("a=fmtp:111")&&(w=`${f};stereo=1`),f.includes("a=fmtp")){const _=/a=fmtp:(\d+)\s/.exec(f);_&&_.length>1&&c.includes(_[1])&&(w=`${f};sps-pps-idr-in-keyframe=1`)}I.push(w)});const C=I.join(`\r +`);return maA(C)},faA="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",$j=(t=21)=>{let i="",n=crypto.getRandomValues(new Uint8Array(t|=0));for(;t--;)i+=faA[63&n[t]];return i},k_=t=>typeof t=="function",yaA=0,DaA=1,mZ=2;function SaA({retryFunction:t,settings:i,onError:n,onRetrying:c,onRetryFailed:I,onRetrySuccess:C,context:f}){return function(...w){const{retries:_=5,timeout:N=1e3}=i;let L=0,q=-1,lA=yaA;const tA=async(BA,IA)=>{const gA=f||this;try{const RA=await t.apply(gA,w);L>0&&C&&C.call(this,L),L=0,BA(RA)}catch(RA){const HA=()=>{clearTimeout(q),L=0,lA=mZ,IA(RA)},ZA=()=>{lA!==mZ&&L<(k_(_)?_():_)?(L++,lA=DaA,k_(c)&&c.call(this,L,HA),q=window.setTimeout(()=>{q=-1,tA(BA,IA)},k_(N)?N(L):N)):(HA(),k_(I)&&I.call(this,RA))};k_(n)?n.call(this,{error:RA,retry:ZA,reject:IA,retryFuncArgs:w,retriedCount:L}):ZA()}};return new Promise(tA)}}var MaA=SaA,yQ=new WeakMap;function vaA({settings:t={retries:5,timeout:2e3},onError:i,onRetrying:n,onRetryFailed:c}){return function(I,C,f){const w=MaA({retryFunction:f.value,settings:t,onError({error:_,retry:N,reject:L,retryFuncArgs:q}){var lA;i?i.call(this,_,()=>{var tA;(tA=yQ.get(I))!=null&&tA.has(C)?N():L(_)},L,q):(lA=yQ.get(I))!=null&&lA.has(C)?N():L(_)},onRetrying(_,N){var L;k_(n)&&n.call(this,_,N),(L=yQ.get(I))!=null&&L.has(C)&&(yQ.get(I).get(C).stopRetry=N)},onRetryFailed:c});return f.value=function(..._){const N=yQ.get(I);return N?N.set(C,{args:_}):yQ.set(I,new Map([[C,{args:_}]])),w.apply(this,_).finally(()=>{var L;return(L=yQ.get(I))==null?void 0:L.delete(C)})},f}}function RaA({fnName:t,callback:i,validateArgs:n=!0}){return function(c,I,C){const f=C.value;return C.value=function(...w){var _,N;if((_=yQ.get(c))!=null&&_.has(t)){const{stopRetry:L,args:q}=yQ.get(c).get(t);let lA=!0;if(n){for(const tA of q)if(!w.find(BA=>BA===tA)){lA=!1;break}}lA&&(i&&i.apply(this,w),L&&L(),(N=yQ.get(c))==null||N.delete(t))}return f.apply(this,w)},C}}var waA=class{constructor(t,i){this.core=i,pn(this,"peerConnection"),pn(this,"audioTransceiver",null),pn(this,"videoTransceiver",null),pn(this,"timerId",null),pn(this,"callback",null),pn(this,"previousRawStats",null),pn(this,"_prevReportTime",0),pn(this,"_prevDecoderImplementation",""),pn(this,"_decodeMap",new Map),this.peerConnection=t,this.findTransceivers()}get statInterval(){return this._prevReportTime===0?2:(Date.now()-this._prevReportTime)/1e3}findTransceivers(){const t=this.peerConnection.getTransceivers();for(const i of t)if(i.receiver&&i.receiver.track){const{track:n}=i.receiver;n.kind==="audio"?this.audioTransceiver=i:n.kind==="video"&&(this.videoTransceiver=i)}}start(t,i=2e3){this.stop(),this.callback=t,this.collectStats(),this.timerId=window.setInterval(()=>{this.collectStats()},i)}stop(){this.timerId!==null&&(clearInterval(this.timerId),this.timerId=null),this.callback=null,this.previousRawStats=null,this._prevReportTime=0}async collectStats(){if(this.callback)try{const t=await this.peerConnection.getStats(),i=new Set(["inbound-rtp","track","candidate-pair","media-source","codec"]),n=[];t.forEach(w=>i.has(w.type)&&n.push(w));const c=Date.now(),I=this.parseAudioStats(n),C=this.parseVideoStats(n),f=this.parseNetworkStats(n);this._prevReportTime=c,this.callback({audio:I,video:C,network:f})}catch(t){this.core.log.error("Failed to collect WebRTC stats:",t)}}getDifferenceValue(t,i){if(this.core.utils.isUndefined(t))return i;const n=(i||0)-t;return n<0?0:n}parseAudioStats(t){var i,n,c,I;const C={bitrate:0,volume:0,packetLossRate:0,jitterBufferDelay:0,bytesReceived:0,packetsReceived:0,packetsLost:0};for(const f of t){if(f.type==="inbound-rtp"&&(f.mediaType==="audio"||f.kind==="audio")){if(C.bytesReceived=f.bytesReceived||0,C.packetsReceived=f.packetsReceived||0,C.packetsLost=f.packetsLost||0,this.previousRawStats&&this.previousRawStats.audio){const N=this.getDifferenceValue(this.previousRawStats.audio.bytesReceived,C.bytesReceived);C.bitrate=Math.round(8*N/this.statInterval/1e3)}const w=this.getDifferenceValue((i=this.previousRawStats)==null?void 0:i.audio.packetsLost,C.packetsLost),_=this.getDifferenceValue((n=this.previousRawStats)==null?void 0:n.audio.packetsReceived,C.packetsReceived)+w;if(_>0&&(C.packetLossRate=Math.round(w/_*100)),this.core.utils.isUndefined(f.audioLevel)||(C.volume=f.audioLevel||0),f.jitterBufferDelay&&f.jitterBufferEmittedCount){let{jitterBufferEmittedCount:N}=f,{jitterBufferDelay:L}=f;(c=this.previousRawStats)!=null&&c.audio&&(N=this.getDifferenceValue(this.previousRawStats.audio.jitterBufferEmittedCount,f.jitterBufferEmittedCount),L=this.getDifferenceValue(this.previousRawStats.audio.jitterBufferDelay,f.jitterBufferDelay)),N>0&&(C.jitterBufferDelay=Math.floor(L/N*1e3)),this.previousRawStats||this.initPreviousRawStats(),this.previousRawStats.audio.jitterBufferDelay=f.jitterBufferDelay,this.previousRawStats.audio.jitterBufferEmittedCount=f.jitterBufferEmittedCount}this.previousRawStats||this.initPreviousRawStats(),this.previousRawStats.audio.bytesReceived=C.bytesReceived,this.previousRawStats.audio.packetsReceived=C.packetsReceived,this.previousRawStats.audio.packetsLost=C.packetsLost}!this.core.utils.isUndefined(f.audioLevel)&&((I=this.audioTransceiver)!=null&&I.receiver.track)&&f.trackIdentifier===this.audioTransceiver.receiver.track.id&&(C.volume=f.audioLevel||0)}return C}parseVideoStats(t){var i,n,c,I,C;const f={bitrate:0,frameRate:0,width:0,height:0,packetLossRate:0,jitterBufferDelay:0,bytesReceived:0,packetsReceived:0,packetsLost:0,framesDecoded:0};for(const w of t){if(w.type==="codec"&&this._decodeMap.set(w.id,w),w.type==="inbound-rtp"&&(w.mediaType==="video"||w.kind==="video")){if(f.bytesReceived=w.bytesReceived||0,f.packetsReceived=w.packetsReceived||0,f.packetsLost=w.packetsLost||0,f.framesDecoded=w.framesDecoded||0,this.core.utils.isUndefined(w.framesPerSecond)||(f.frameRate=Math.round(w.framesPerSecond)),w.decoderImplementation&&this._prevDecoderImplementation!==w.decoderImplementation){const L=this._decodeMap.get(w.codecId),q=((i=L?.mimeType)==null?void 0:i.split("/")[1])||"unknown",lA=w.powerEfficientDecoder;this.core.log.info(`decoderImplementation change to ${w.decoderImplementation}(${q}) HWDecoder: ${lA}`),this._prevDecoderImplementation=w.decoderImplementation}if(this.previousRawStats&&this.previousRawStats.video){const L=this.getDifferenceValue(this.previousRawStats.video.bytesReceived,f.bytesReceived);f.bitrate=Math.round(8*L/this.statInterval/1e3)}const _=this.getDifferenceValue((n=this.previousRawStats)==null?void 0:n.video.packetsLost,f.packetsLost),N=this.getDifferenceValue((c=this.previousRawStats)==null?void 0:c.video.packetsReceived,f.packetsReceived)+_;if(N>0&&(f.packetLossRate=Math.round(_/N*100)),w.jitterBufferDelay&&w.jitterBufferEmittedCount){let{jitterBufferEmittedCount:L}=w,{jitterBufferDelay:q}=w;(I=this.previousRawStats)!=null&&I.video&&(L=this.getDifferenceValue(this.previousRawStats.video.jitterBufferEmittedCount,w.jitterBufferEmittedCount),q=this.getDifferenceValue(this.previousRawStats.video.jitterBufferDelay,w.jitterBufferDelay)),L>0&&(f.jitterBufferDelay=Math.floor(q/L*1e3)),this.previousRawStats||this.initPreviousRawStats(),this.previousRawStats.video.jitterBufferDelay=w.jitterBufferDelay,this.previousRawStats.video.jitterBufferEmittedCount=w.jitterBufferEmittedCount}this.previousRawStats||this.initPreviousRawStats(),this.previousRawStats.video.bytesReceived=f.bytesReceived,this.previousRawStats.video.packetsReceived=f.packetsReceived,this.previousRawStats.video.packetsLost=f.packetsLost}!this.core.utils.isUndefined(w.frameWidth)&&((C=this.videoTransceiver)!=null&&C.receiver.track)&&w.trackIdentifier===this.videoTransceiver.receiver.track.id&&(f.width=w.frameWidth,f.height=w.frameHeight)}return f}parseNetworkStats(t){const i={rtt:0};for(const n of t)if(n.type==="candidate-pair"&&(n.selected||n.state==="succeeded")&&this.core.utils.isNumber(n.currentRoundTripTime)){i.rtt=Math.floor(1e3*n.currentRoundTripTime);break}return i}initPreviousRawStats(){this.previousRawStats={timestamp:Date.now(),audio:{bytesReceived:0,packetsReceived:0,packetsLost:0},video:{bytesReceived:0,packetsReceived:0,packetsLost:0}}}},_aA=BaA(QaA()),fZ=Symbol("instance"),H1=Symbol("cacheResult"),A3=class{constructor(i,n,c){this.oldState=i,this.newState=n,this.action=c,this.aborted=!1}abort(i){this.aborted=!0,cU.call(i,this.oldState,new Error(`action '${this.action}' aborted`))}toString(){return`${this.action}ing`}},e3=class extends Error{constructor(i,n,c){super(n),this.state=i,this.message=n,this.cause=c}};function TaA(t){return typeof t=="object"&&t&&"then"in t}var gU=new Map;function q1(t,i,n={}){return(c,I,C)=>{const f=n.action||I;if(!n.context){const _=gU.get(c)||[];gU.has(c)||gU.set(c,_),_.push({from:t,to:i,action:f})}const w=C.value;C.value=function(..._){let N=this;if(n.context&&(N=eh.get(typeof n.context=="function"?n.context.call(this,..._):n.context)),N.state===i)return n.sync?N[H1]:Promise.resolve(N[H1]);N.state instanceof A3&&N.state.action==n.abortAction&&N.state.abort(N);let L=null;Array.isArray(t)?t.length==0?N.state instanceof A3&&N.state.abort(N):typeof N.state=="string"&&t.includes(N.state)||(L=new e3(N._state,`${N.name} ${f} to ${i} failed: current state ${N._state} not from ${t.join("|")}`)):t!==N.state&&(L=new e3(N._state,`${N.name} ${f} to ${i} failed: current state ${N._state} not from ${t}`));const q=gA=>{if(n.fail&&n.fail.call(this,gA),n.sync){if(n.ignoreError)return gA;throw gA}return n.ignoreError?Promise.resolve(gA):Promise.reject(gA)};if(L)return q(L);const lA=N.state,tA=new A3(lA,i,f);cU.call(N,tA);const BA=gA=>{var RA;return N[H1]=gA,tA.aborted||(cU.call(N,i),(RA=n.success)===null||RA===void 0||RA.call(this,N[H1])),gA},IA=gA=>(cU.call(N,lA,gA),q(gA));try{const gA=w.apply(this,_);return TaA(gA)?gA.then(BA).catch(IA):n.sync?BA(gA):Promise.resolve(BA(gA))}catch(gA){return IA(new e3(N._state,`${N.name} ${f} from ${t} to ${i} failed: ${gA}`,gA instanceof Error?gA:new Error(String(gA))))}}}}var NaA=typeof window<"u"&&window.__AFSM__?(n,c)=>{window.dispatchEvent(new CustomEvent(n,{detail:c}))}:typeof importScripts<"u"?(n,c)=>{postMessage({type:n,payload:c})}:()=>{};function cU(t,i){const n=this._state;this._state=t;const c=t.toString();t&&this.emit(c,n),this.emit(eh.STATECHANGED,t,n,i),this.updateDevTools({value:t,old:n,err:i instanceof Error?i.message:String(i)})}var eh=class ZC extends _aA.default{constructor(i,n,c){super(),this.name=i,this.groupName=n,this._state=ZC.INIT,i||(i=Date.now().toString(36)),c?Object.setPrototypeOf(this,c):c=Object.getPrototypeOf(this),n||(this.groupName=this.constructor.name);const I=c[fZ];I?this.name=I.name+"-"+I.count++:c[fZ]={name:this.name,count:0},this.updateDevTools({diagram:this.stateDiagram})}get stateDiagram(){const i=Object.getPrototypeOf(this),n=gU.get(i)||[];let c=new Set,I=[],C=[];const f=new Set,w=Object.getPrototypeOf(i);gU.has(w)&&(w.stateDiagram.forEach(N=>c.add(N)),w.allStates.forEach(N=>f.add(N))),n.forEach(({from:N,to:L,action:q})=>{typeof N=="string"?I.push({from:N,to:L,action:q}):N.length?N.forEach(lA=>{I.push({from:lA,to:L,action:q})}):C.push({to:L,action:q})}),I.forEach(({from:N,to:L,action:q})=>{f.add(N),f.add(L),f.add(q+"ing"),c.add(`${N} --> ${q}ing : ${q}`),c.add(`${q}ing --> ${L} : ${q} 🟢`),c.add(`${q}ing --> ${N} : ${q} 🔴`)}),C.forEach(({to:N,action:L})=>{c.add(`${L}ing --> ${N} : ${L} 🟢`),f.forEach(q=>{q!==N&&c.add(`${q} --> ${L}ing : ${L}`)})});const _=[...c];return Object.defineProperties(i,{stateDiagram:{value:_},allStates:{value:f}}),_}static get(i){let n;return typeof i=="string"?(n=ZC.instances.get(i),n||ZC.instances.set(i,n=new ZC(i,void 0,Object.create(ZC.prototype)))):(n=ZC.instances2.get(i),n||ZC.instances2.set(i,n=new ZC(i.constructor.name,void 0,Object.create(ZC.prototype)))),n}static getState(i){var n;return(n=ZC.get(i))===null||n===void 0?void 0:n.state}updateDevTools(i={}){NaA(ZC.UPDATEAFSM,Object.assign({name:this.name,group:this.groupName},i))}get state(){return this._state}set state(i){cU.call(this,i)}};eh.STATECHANGED="stateChanged",eh.UPDATEAFSM="updateAFSM",eh.INIT="[*]",eh.ON="on",eh.OFF="off",eh.instances=new Map,eh.instances2=new WeakMap;var YL=class extends eh{constructor(i,n){super(),this.core=i,pn(this,"audioPlayer"),pn(this,"videoPlayer"),pn(this,"callback"),pn(this,"avPlayerStateSyncManager"),pn(this,"_log"),pn(this,"_videoPlayerLog"),pn(this,"_audioPlayerLog"),pn(this,"lastPausedReason"),pn(this,"muted",!1),this._log=n,this._videoPlayerLog=this._log.createChild({id:"vp"}),this._audioPlayerLog=this._log.createChild({id:"ap"}),this.videoPlayer=new i.VideoPlayer({id:"vp",log:this._videoPlayerLog,track:null,muted:!1,container:null,enableLogTrackState:!0}),this.audioPlayer=new i.RemoteAudioPlayer({id:"ap",log:this._audioPlayerLog,track:null,muted:!1,container:null,enableVolumeControlInIOS:!0,enableLogTrackState:!0}),this.audioPlayer.on(i.PlayerEvent.AUTOPLAY_FAILED,c=>this.handleAutoPlayFailed(this.audioPlayer,c)),this.videoPlayer.on(i.PlayerEvent.LOAD_START,()=>this.handleLoadStart("video")),this.audioPlayer.on(i.PlayerEvent.LOAD_START,()=>this.handleLoadStart("audio")),this.videoPlayer.on(i.PlayerEvent.PLAYER_STATE_CHANGED,this.handlePlayerStateChanged,this),this.audioPlayer.on(i.PlayerEvent.PLAYER_STATE_CHANGED,this.handlePlayerStateChanged,this),this.videoPlayer.on(i.PlayerEvent.ENTER_PICTURE_IN_PICTURE,this.handleEnterPictureInPicture,this),this.videoPlayer.on(i.PlayerEvent.LEAVE_PICTURE_IN_PICTURE,this.handleLeavePictureInPicture,this),this.videoPlayer.on(i.PlayerEvent.ENTER_FULL_SCREEN,this.handleEnterFullScreen,this),this.videoPlayer.on(i.PlayerEvent.LEAVE_FULL_SCREEN,this.handleLeaveFullScreen,this),this.avPlayerStateSyncManager=new i.AVPlayerStateSyncManager({log:this._log,audioPlayer:this.audioPlayer,videoPlayer:this.videoPlayer})}get isPlaying(){return this.videoPlayer.isPlaying&&this.audioPlayer.isPlaying}get isPaused(){return this.videoPlayer.isPaused&&this.audioPlayer.isPaused}get isStopped(){return this.videoPlayer.isStopped&&this.audioPlayer.isStopped}setCallback(i){this.callback=i}updateLogConfig(i){this._audioPlayerLog.setSdkAppId(i.sdkAppId),this._audioPlayerLog.setUserId(i.userId),this._videoPlayerLog.setSdkAppId(i.sdkAppId),this._videoPlayerLog.setUserId(i.userId)}handleLoadStart(i){this.onLoadStart()}handlePlayerStateChanged(i){i.state==="PLAYING"&&this.isPlaying&&this.onPlaying(),i.state==="PAUSED"&&this.isPaused&&this.onPaused(i.reason),i.state==="STOPPED"&&this.isStopped&&this.onStopped()}async handleEnterPictureInPicture(){var i,n;await this.videoPlayer.enterPIPPromise,(n=(i=this.callback)==null?void 0:i.onPictureInPictureStateChanged)==null||n.call(i,{isPictureInPicture:!0,pictureInPictureWindow:this.videoPlayer.pipWindow})}handleLeavePictureInPicture(){var i,n;(n=(i=this.callback)==null?void 0:i.onPictureInPictureStateChanged)==null||n.call(i,{isPictureInPicture:!1})}handleEnterFullScreen(){var i,n;(n=(i=this.callback)==null?void 0:i.onFullScreenStateChanged)==null||n.call(i,{isFullScreen:!0})}handleLeaveFullScreen(){var i,n;(n=(i=this.callback)==null?void 0:i.onFullScreenStateChanged)==null||n.call(i,{isFullScreen:!1})}onLoadStart(){}onPlaying(){}onPaused(i){this.lastPausedReason=i}onStopped(){}setVideoContainer(i){if(this.core.utils.isString(i)){const n=document.getElementById(i);n&&this.videoPlayer.setContainer(n)}else this.videoPlayer.setContainer(i)}setVolume(i){this.core.utils.isUndefined(i)||this.audioPlayer.setVolume(i/100)}setMuted(i){this.core.utils.isUndefined(i)||(this.muted=i,this.audioPlayer.setMuted(i))}setFillMode(i){i&&this.videoPlayer.setObjectFit(i)}setAudioTrack(i){this.audioPlayer.setTrack(i)}setVideoTrack(i){this.videoPlayer.setTrack(i)}async play(){const i=this.videoPlayer.play().catch(c=>{this.handleAutoPlayFailed(this.videoPlayer,c,"video")}),n=this.audioPlayer.play().catch(c=>{this.handleAutoPlayFailed(this.audioPlayer,c)});await Promise.all([i,n])}handleAutoPlayFailed(i,n,c="audio"){var I,C;this._log.warn("handleAutoPlayFailed",n);const f=()=>{this.audioPlayer.resume().then(()=>{document.removeEventListener("click",f,!0)})};document.addEventListener("click",f,!0),(C=(I=this.callback)==null?void 0:I.onAutoPlayFailed)==null||C.call(I,{type:c,resume:()=>i.resume()})}pause(){this.videoPlayer.pause(!0),this.audioPlayer.setMuted(!0),this.audioPlayer.pause()}resume(){this.videoPlayer.resume(!0),this.audioPlayer.setMuted(this.muted),this.audioPlayer.resume()}async enterFullscreen(){await this.videoPlayer.enterFullscreen()}async exitFullscreen(){await this.videoPlayer.exitFullscreen()}async enterPictureInPicture(){await this.videoPlayer.enterPictureInPicture()}async exitPictureInPicture(){await this.videoPlayer.exitPictureInPicture()}stop(){this.videoPlayer&&this.videoPlayer.stop(),this.audioPlayer&&(this.audioPlayer.stop(),this.audioPlayer.setMuted(!1))}};V_([q1([eh.INIT,"PAUSED"],"LOADSTART",{ignoreError:!0,sync:!0,success(){var t,i;(i=(t=this.callback)==null?void 0:t.onLoadStart)==null||i.call(t)},fail(t){this._log.warn("onLoadStart",t)}})],YL.prototype,"onLoadStart"),V_([q1(["LOADSTART","PAUSED"],"PLAYING",{ignoreError:!0,sync:!0,success(){var t,i;(i=(t=this.callback)==null?void 0:t.onPlaying)==null||i.call(t)},fail(t){this._log.warn("onPlaying",t)}})],YL.prototype,"onPlaying"),V_([q1("PLAYING","PAUSED",{ignoreError:!0,sync:!0,success(){var t,i;(i=(t=this.callback)==null?void 0:t.onPaused)==null||i.call(t,{reason:this.lastPausedReason})},fail(t){this._log.warn("onPaused",t)}})],YL.prototype,"onPaused"),V_([q1([],eh.INIT,{ignoreError:!0,sync:!0,success(){var t,i;(i=(t=this.callback)==null?void 0:t.onStopped)==null||i.call(t)},fail(t){this._log.warn("onStopped",t)}})],YL.prototype,"onStopped");var yZ=YL,GaA=["overseas-webrtc.tlivewebrtc.com","oswebrtc-lint.tliveplay.com"],hY=class EX{constructor(i){this.core=i,pn(this,"_sdkAppId"),pn(this,"_userId"),pn(this,"connectedRoomIdSet",new Set),pn(this,"updateSeq",0),pn(this,"_log"),pn(this,"player"),pn(this,"peerConnection"),pn(this,"svrSig"),pn(this,"streamURL"),pn(this,"signalURL"),pn(this,"insertableStreamsAbortMap",new Map),pn(this,"scriptTransformWorker"),pn(this,"connectionState","disconnected"),pn(this,"isStarted",!1),pn(this,"isStopped",!0),pn(this,"isReconnecting",!1),pn(this,"callback"),pn(this,"isFireWallErrorEmitted",!1),pn(this,"stat"),pn(this,"isH264DecodeSupported"),pn(this,"connectionTimeoutId"),pn(this,"streamHealthCheckTimeoutId"),pn(this,"streamHealthCheckReject"),i.loggerManager.startUpload(),this._log=this.core.log.createChild({id:`${this.getAlias()}`}),this.player=new yZ(i,this._log),i.innerEmitter.on(i.INNER_EVENT.SEI_MESSAGE,this.onSEIMessage,this)}getName(){return EX.Name}getAlias(){return"LEB"}getGroup(){return""}getValidateRule(i){switch(i){case"start":return paA;case"update":case"stop":return{}}}get enableSEI(){return this.core.room.enableSEI&&(this.core.rtcDectection.IS_INSERTABLE_STREAM_SUPPORTED||this.core.rtcDectection.IS_SCRIPT_TRANSFORM_SUPPORTED)}wrapCallback(i){if(!i)return;const n={},c=["onStats","onSEIMessage"];for(const I of Object.keys(i)){const C=i[I];typeof C=="function"&&(c.includes(I)?n[I]=C:n[I]=(...f)=>(this._log.debug(`callback ${I} called`,f.length>0?f[0]:""),C(...f)))}return n}async start(i){var n;this.isStopped=!1;const{view:c,url:I,volume:C,muted:f,fillMode:w,loggerConfig:_,callback:N}=i;this.callback=this.wrapCallback(N),this.player.setCallback(this.callback);const{errorModule:{RtcError:L,ErrorCode:q,ErrorCodeDictionary:lA},loggerManager:tA,rtcDectection:BA}=this.core;if(this._sdkAppId=_.sdkAppId,this._userId=_.userId,this._log.setSdkAppId(_.sdkAppId),this._log.setUserId(_.userId),this.player.updateLogConfig(_),tA.addJoinedUser(_),!BA.isWebRTCSupported()||!BA.isAddTransceiverSupported())throw new L({code:q.ENV_NOT_SUPPORTED,extraCode:lA.NOT_SUPPORTED_WEBRTC,message:"webrtc not supported"});if(!(await BA.decodeSupportStatus()).isH264DecodeSupported||this.isH264DecodeSupported===!1)throw this.isH264DecodeSupported=!1,new L({code:q.ENV_NOT_SUPPORTED,extraCode:lA.NOT_SUPPORTED_H264_DECODE,message:"h264 not supported"});!BA.IS_SEI_SUPPORTED&&N?.onSEIMessage&&((n=N.onError)==null||n.call(N,new L({code:q.ENV_NOT_SUPPORTED,extraCode:lA.NOT_SUPPORTED_SEI,message:"sei not supported"}))),this.player.setVideoContainer(c),this.player.setMuted(f),this.player.setFillMode(w);try{await this.connect(I),this.stat=new waA(this.peerConnection,this.core),this.stat.start(RA=>{var HA,ZA;return(ZA=(HA=this.callback)==null?void 0:HA.onStats)==null?void 0:ZA.call(HA,RA)});const IA=this.player.play();this.player.setVolume(C);const gA=this.createStreamHealthCheckPromise();await Promise.race([IA,gA]),this.clearStreamHealthCheck(),this.isStarted=!0}catch(IA){throw this.stop(),IA}}async update(i){const{view:n,url:c,volume:I,muted:C,fillMode:f,action:w,fullScreen:_,pictureInPicture:N}=i;c&&c!==this.streamURL&&await this.switchStream(c),this.player.setMuted(C),this.player.setVolume(I),this.player.setFillMode(f),n&&this.player.videoPlayer.setContainer(this.core.utils.isString(n)?document.getElementById(n):n),w==="pause"?this.player.pause():w==="resume"&&this.player.resume(),this.core.utils.isBoolean(_)&&(_?await this.player.enterFullscreen():await this.player.exitFullscreen()),this.core.utils.isBoolean(N)&&(N?await this.player.enterPictureInPicture():await this.player.exitPictureInPicture())}async switchStream(i){this._log.info("switchStream",i);const n=this.peerConnection,c=this.streamURL,I=this.signalURL,C=this.svrSig,f=new Map(this.insertableStreamsAbortMap),w=this.player;delete this.peerConnection,delete this.streamURL,delete this.signalURL,delete this.svrSig,this.insertableStreamsAbortMap.clear();const _=new yZ(this.core,this._log);_.setVideoContainer(w.videoPlayer.container),_.setFillMode(w.videoPlayer.objectFit),_.setMuted(w.muted),_.setCallback(this.callback);const N=L=>{const{track:q}=L;this.createEncodedStreams(L.receiver),this.initReceiverTransform(L.receiver,q.kind==="audio"),q.kind==="audio"?_.setAudioTrack(q):_.setVideoTrack(q)};try{await this.connectForSwitch(i,N),this._log.info("switchStream: new connection established"),await this.waitForNewPlayerFirstFrame(_),this._log.info("switchStream: new stream first frame received"),w.audioPlayer.setMuted(!0),w.stop(),this.player=_,n&&(clearTimeout(this.connectionTimeoutId),n.close(),n.getReceivers().forEach(L=>f.delete(L)),c&&C&&I&&this.fetchStopStreamWithParams(c,I,C).catch(L=>{this._log.warn("switchStream: stop old stream failed",L)})),this._log.info("switchStream: switch completed successfully")}catch(L){this._log.error("switchStream failed",L),_.stop();const q=this.peerConnection;throw q&&(q.close(),q.getReceivers().forEach(lA=>this.insertableStreamsAbortMap.delete(lA))),this.peerConnection=n,this.streamURL=c,this.signalURL=I,this.svrSig=C,this.insertableStreamsAbortMap=f,this.player=w,w.audioPlayer.setMuted(w.muted),L}}waitForNewPlayerFirstFrame(i){return new Promise((n,c)=>{let I=0,C=!1;const f=i.videoPlayer.getElement();if(!f)return void c(new Error("VideoPlayer has no video element"));const w=()=>{C=!0,clearInterval(L),f.removeEventListener("loadeddata",_),f.removeEventListener("playing",N)},_=()=>{C||(this._log.info("waitForNewPlayerFirstFrame: loadeddata event fired"),w(),n())},N=()=>{C||(this._log.info("waitForNewPlayerFirstFrame: playing event fired"),w(),n())};f.addEventListener("loadeddata",_,{once:!0}),f.addEventListener("playing",N,{once:!0}),i.play().catch(q=>{this._log.warn("waitForNewPlayerFirstFrame: play failed",q)});const L=setInterval(()=>{if(!C){if(I+=100,f.videoWidth>0&&f.videoHeight>0)return this._log.info(`waitForNewPlayerFirstFrame: video has valid dimensions ${f.videoWidth}x${f.videoHeight}`),w(),void n();I>=1e4&&(w(),c(new Error("waitForNewPlayerFirstFrame timeout")))}},100)})}connectForSwitch(i,n){return new Promise((c,I)=>{try{this.initScriptTransformWorker();const C={encodedInsertableStreams:this.enableSEI,iceServers:[],sdpSemantics:"unified-plan",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",tcpCandidatePolicy:"disable",IceTransportsType:"nohost"},f=new RTCPeerConnection(C);this.peerConnection=f,f.onconnectionstatechange=()=>{this.connectionState=f.connectionState,this._log.info("connectForSwitch connectionState",f.connectionState),f.connectionState!=="failed"&&f.connectionState!=="closed"||I(new Error(`connection is ${f.connectionState}`)),f.connectionState==="connected"&&(this.logSelectedCandidate(),c())},f.ontrack=n,f.addTransceiver("audio",{direction:"recvonly"}),f.addTransceiver("video",{direction:"recvonly"}),this._log.info("connectForSwitch createOffer"),f.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0,voiceActivityDetection:!1}).then(w=>(w.sdp=pZ(w.sdp),this._log.info("connectForSwitch setOffer"),f.setLocalDescription(w))).then(()=>{const w={sessionId:$j(),streamurl:i,clientinfo:this.core.environment.getOSString(),localsdp:f.localDescription};return this.exchangeSDP(i,w)}).then(w=>(this._log.info("connectForSwitch setAnswer"),f.setRemoteDescription(w))).catch(I)}catch(C){I(C)}this.connectionTimeoutId=setTimeout(()=>I(new Error("connection timeout")),1e4)})}async fetchStopStreamWithParams(i,n,c){try{const I=`${n}/webrtc/v1/stopstream`,C=await K1(I,{streamurl:i,svrsig:c},{timeout:3}),{errcode:f,errmsg:w}=C;if(f!==0)throw new Error(`errCode:${f}, errmsg:${w}`);return C}catch(I){this._log.error("fetchStopStreamWithParams error",I)}}async stop(){this.isStopped=!0,this.clearStreamHealthCheck(),this.player.stop(),this.peerConnection&&(clearTimeout(this.connectionTimeoutId),this.peerConnection.close(),this.peerConnection.getReceivers().forEach(i=>this.insertableStreamsAbortMap.delete(i)),delete this.peerConnection,await this.fetchStopStream(),delete this.streamURL,delete this.signalURL,delete this.svrSig),this.stat&&(this.stat.stop(),delete this.stat),this.core.room.keyPointManager.uploadKVStat(this.core.kvStatManager,this._sdkAppId)}destroy(){this.stop(),this.core.innerEmitter.off(this.core.INNER_EVENT.SEI_MESSAGE,this.onSEIMessage,this)}createStreamHealthCheckPromise(){return new Promise((i,n)=>{this.streamHealthCheckReject=n,this.streamHealthCheckTimeoutId=window.setTimeout(()=>this.checkStreamHealth(n),5e3)})}clearStreamHealthCheck(){this.streamHealthCheckTimeoutId&&(clearTimeout(this.streamHealthCheckTimeoutId),delete this.streamHealthCheckTimeoutId),delete this.streamHealthCheckReject}async checkStreamHealth(i){if(!this.isStopped&&this.peerConnection)try{const n=this.peerConnection.getReceivers().find(q=>{var lA;return((lA=q.track)==null?void 0:lA.kind)==="video"});if(!n)return void this._log.warn("checkStreamHealth: no video receiver found");const c=await n.getStats();let I=0,C=0;c.forEach(q=>{q.type==="inbound-rtp"&&(q.mediaType==="video"||q.kind==="video")&&(I=q.bytesReceived||0,C=q.framesDecoded||0)});const{isPlaying:f}=this.player,w=f||C>0;this._log.info(`checkStreamHealth: bytesReceived=${I}, framesDecoded=${C}, isPlaying=${f}`);const{RtcError:_,ErrorCode:N,ErrorCodeDictionary:L}=this.core.errorModule;I===0?(this._log.warn("checkStreamHealth: no stream data received after 5s"),i(new _({code:N.OPERATION_FAILED,message:"no stream data received"}))):w||(this._log.warn("checkStreamHealth: decode failed"),this.isH264DecodeSupported=!1,i(new _({code:N.ENV_NOT_SUPPORTED,extraCode:L.NOT_SUPPORTED_H264_DECODE,message:"h264 decode failed"})))}catch(n){this._log.warn("checkStreamHealth error",n)}}connect(i){return new Promise((n,c)=>{try{this.initScriptTransformWorker();const I={encodedInsertableStreams:this.enableSEI,iceServers:[],sdpSemantics:"unified-plan",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",tcpCandidatePolicy:"disable",IceTransportsType:"nohost"},C=new RTCPeerConnection(I);this.peerConnection=C,C.onconnectionstatechange=()=>{this.connectionState=C.connectionState,this._log.info("connectionState",C.connectionState),C.connectionState!=="failed"&&C.connectionState!=="closed"||(this.isStarted?this.reconnect(i):c(new Error(`connection is ${C.connectionState}`))),C.connectionState==="connected"&&(this.logSelectedCandidate(),n())},C.ontrack=f=>this.onTrack(f),C.addTransceiver("audio",{direction:"recvonly"}),C.addTransceiver("video",{direction:"recvonly"}),this._log.info("createOffer"),C.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0,voiceActivityDetection:!1}).then(f=>(f.sdp=pZ(f.sdp),this._log.info("setOffer"),C.setLocalDescription(f))).then(()=>{const f={sessionId:$j(),streamurl:i,clientinfo:this.core.environment.getOSString(),localsdp:C.localDescription};return this.exchangeSDP(i,f)}).then(f=>(this._log.info("setAnswer"),C.setRemoteDescription(f))).catch(c)}catch(I){c(I)}this.connectionTimeoutId=setTimeout(()=>c(new Error("connection timeout")),1e4)})}async exchangeSDP(i,n){let c,I,C;try{this._log.info("exchangeSDP");const f=baA(i);if(!f)throw new Error("streamDomain is empty");const{signalDomain:w,cached:_}=await this.fetchSignalDomain(f);if(!w)throw new Error("signalDomain is empty");{this._log.info("try exchangeSDP signalDomain:",w,_);const N=await this.doExchangeSDP(`https://${w}`,n,3);c=N.url,I=N.remoteSdp,C=N.svrSig}}catch(f){this._log.warn("exchangeSDP failed, fallback",f);try{const w=await this.core.utils.promiseAny(GaA.map(_=>this.doExchangeSDP(`https://${_}`,n,3)));c=w.url,I=w.remoteSdp,C=w.svrSig}catch(w){throw this._log.error("exchangeSDP failed",w),w[0]||w}}return this.streamURL=i,this.signalURL=c,this.svrSig=C,I}async reconnect(i){var n,c;if(!this.isReconnecting){this.isReconnecting=!0;try{this._log.warn("start reconnect"),await this.connect(i),this._log.warn("reconnect success")}catch(I){this._log.error("reconnect error",I);const{RtcError:C,ErrorCode:f}=this.core.errorModule;(c=(n=this.callback)==null?void 0:n.onError)==null||c.call(n,new C({code:f.OPERATION_FAILED,message:"reconnect failed"}))}finally{this.isReconnecting=!1}}}async logSelectedCandidate(){if(!this.peerConnection)return;const i=await this.peerConnection.getStats();for(const[n,c]of i)if(this.core.rtcDectection.isSelectedCandidatePair(c)){const I=i.get(c.localCandidateId),C=i.get(c.remoteCandidateId);I&&this._log.info(`local candidate: ${I.candidateType} ${I.protocol}:${I.ip||I.address}:${I.port} ${I.networkType||""} ${I.relayProtocol?`relayProtocol:${I.relayProtocol} url: ${I.url}`:""}`),C&&this._log.info(`remote candidate: ${C.candidateType} ${C.protocol}:${C.ip||C.address}:${C.port}`);break}}async doExchangeSDP(i,n,c){const I=`${i}/webrtc/v1/pullstream`,C=await K1(I,n,{timeout:c}),{errcode:f,errmsg:w,remotesdp:_,svrsig:N}=C;if(f!==0){const L=new Error(`errCode:${f}, errMsg:${w}`);throw L.name="RequestSignalError",L}return{url:i,remoteSdp:_,svrSig:N}}createEncodedStreams(i){var n;if(this.enableSEI&&this.core.rtcDectection.IS_INSERTABLE_STREAM_SUPPORTED)try{if(this._log.warn("enableSEI",this.enableSEI),!this.insertableStreamsAbortMap.has(i)){const c=i.createEncodedStreams(),I=new AbortController,C={abortController:I,enqueue:f=>i.track.kind==="audio"?f:this.decodeVideoFrame(f)};c.readable.pipeThrough(new TransformStream({transform:(f,w)=>{const _=C.enqueue(f);_&&w.enqueue(_)}})).pipeTo(c.writable,I).catch(f=>{f!=="destroy"&&this._log.warn(f)}),(n=this.insertableStreamsAbortMap.get(i))==null||n.abort("destroy"),this.insertableStreamsAbortMap.set(i,I)}}catch(c){this._log.warn(`createEncodedStreams ${i.track.kind} failed`,c)}}initReceiverTransform(i,n){this.peerConnection&&this.enableSEI&&this.scriptTransformWorker&&!i.transform&&(i.transform=new RTCRtpScriptTransform(this.scriptTransformWorker,{isReceiver:!0,isAudio:n,userId:"",streamType:this.core.enums.RemoteStreamType.Main}))}initScriptTransformWorker(){const{room:i,rtcDectection:n,createScriptTransformWorker:c,trtc:I,TRTC:C}=this.core;!this.enableSEI||n.IS_INSERTABLE_STREAM_SUPPORTED||this.scriptTransformWorker||n.IS_SCRIPT_TRANSFORM_SUPPORTED&&(this._log.info("initScriptTransformWorker"),this.scriptTransformWorker=c({videoEncodePipeline:i.videoManager.encodePipeline,videoDecodePipeline:i.videoManager.decodePipeline,audioEncodePipeline:i.audioManager.encodePipeline,audioDecodePipeline:i.audioManager.decodePipeline}),this.scriptTransformWorker.onmessage=f=>{var w,_;f.data.type==="sei"&&((_=(w=this.callback)==null?void 0:w.onSEIMessage)==null||_.call(w,{data:f.data.data,seiPayloadType:f.data.seiPayloadType}))},this.scriptTransformWorker.onerror=f=>{this._log.error("scriptTransformWorker error: ",f.message)})}decodeVideoFrame(i){if(!this.core.room.videoManager)return i;for(const n of this.core.room.videoManager.decodePipeline)if(n&&!(i=n({frame:i})))return;return i}async fetchStopStream(){if(this.streamURL&&this.svrSig&&this.signalURL)try{const i=`${this.signalURL}/webrtc/v1/stopstream`,n=await K1(i,{streamurl:this.streamURL,svrsig:this.svrSig},{timeout:3}),{errcode:c,errmsg:I}=n;if(c!==0)throw new Error(`errCode:${c}, errmsg:${I}`);return n}catch(i){this._log.error("fetchStopStream error",i)}}onTrack(i){const{track:n}=i;this.createEncodedStreams(i.receiver),this.initReceiverTransform(i.receiver,n.kind==="audio"),n.kind==="audio"?this.player.setAudioTrack(n):this.player.setVideoTrack(n)}onSEIMessage({room:i,nalu:n}){var c,I;i===this.core.room&&((I=(c=this.callback)==null?void 0:c.onSEIMessage)==null||I.call(c,{data:n.seiPayload.buffer,seiPayloadType:n.seiPayloadType}))}async fetchSignalDomain(i,n=j1[0]){var c;const I=`https://${n}/signal_query`;try{const C=window.localStorage.getItem(t3);if(C){const L=JSON.parse(C);if(((c=L[i])==null?void 0:c.expire)-new Date().getTime()>0)return{signalDomain:L[i].signal,cached:!0}}const f=await K1(I,{domain:i,requestid:$j(16),client_type:"Web",client_info:window.navigator.userAgent}),{errcode:w,errmsg:_,data:N}=f;if(w===0){const{signal_domain:L,cache_time:q}=N;let lA={};const tA=window.localStorage.getItem(t3);tA&&(lA=JSON.parse(tA)),lA[i]={signal:L,expire:new Date().getTime()+1e3*q};try{window.localStorage.setItem(t3,JSON.stringify(lA))}catch{}return{signalDomain:L,cached:!1}}throw new Error(`errCode:${w} errmsg:${_}`)}catch(C){return this._log.error("fetchSignalDomain error",C),j1[1]&&n!==j1[1]?this.fetchSignalDomain(i,j1[1]):{signalDomain:"",cached:!1}}}};pn(hY,"Name","LEBPlayer"),V_([RaA({fnName:"connect"})],hY.prototype,"stop"),V_([vaA({settings:{retries:1/0,timeout:2e3},onRetrying(t){var i;if(this._log.warn(`retry connect ${t}`),t>=3&&((i=this.callback)==null?void 0:i.onError)&&!this.isFireWallErrorEmitted){const{RtcError:n,ErrorCode:c,ErrorCodeDictionary:I}=this.core.errorModule;this.isFireWallErrorEmitted=!0,this.callback.onError(new n({code:c.OPERATION_FAILED,extraCode:I.FIREWALL_RESTRICTION,message:"firewall restriction"}))}},onError(t,i,n,c){var I;if(this._log.warn("connect failed",t),this.peerConnection&&(this.peerConnection.close(),delete this.peerConnection),!this.isStopped&&((I=t.message||t)==null?void 0:I.includes("connection")))i();else{const{RtcError:C,ErrorCode:f}=this.core.errorModule;n(new C({code:f.UNKNOWN_ERROR,message:t.message}))}}})],hY.prototype,"connect");var dX=hY,K1=async(t,i,n={})=>{const{timeout:c=10}=n;let I,C=0,f={};window.AbortController&&(I=new window.AbortController,f={signal:I.signal},C=window.setTimeout(()=>I.abort(),1e3*c));const w=await fetch(t,daA({body:JSON.stringify(i),cache:"no-cache",credentials:"same-origin",headers:{"content-type":"text/plain;charset=utf-8"},method:"POST",mode:"cors"},f));if(C&&window.clearTimeout(C),w.status!==200)throw new Error(`Network Error, status code:${w.status}`);return w.json()},j1=["webrtc-signal-scheduler.tlivesource.com","bak-webrtc-signal-scheduler.tlivesource.com"],t3="LEB_PLAYER_STORAGE_KEY",baA=t=>{const i=/^(?:webrtc:\/\/)([0-9.\-A-Za-z_]+)(?:\/)(?:[0-9.\-A-Za-z_=]+)(?:\/)(?:[^?#]*)(?:\?*)(?:[^?#]*)/.exec(t);return i?i[1]:""},kaA=dX;const LaA=Object.freeze(Object.defineProperty({__proto__:null,LEBPlayer:dX,default:kaA},Symbol.toStringTag,{value:"Module"})),UaA=HU(LaA);var CX=Object.defineProperty,FaA=Object.defineProperties,OaA=Object.getOwnPropertyDescriptors,DZ=Object.getOwnPropertySymbols,PaA=Object.prototype.hasOwnProperty,xaA=Object.prototype.propertyIsEnumerable,eW=(t,i,n)=>i in t?CX(t,i,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[i]=n,YaA=(t,i)=>{for(var n in i||(i={}))PaA.call(i,n)&&eW(t,n,i[n]);if(DZ)for(var n of DZ(i))xaA.call(i,n)&&eW(t,n,i[n]);return t},VaA=(t,i)=>FaA(t,OaA(i)),JaA=(t,i)=>{for(var n in i)CX(t,n,{get:i[n],enumerable:!0})},Hg=(t,i,n)=>eW(t,typeof i!="symbol"?i+"":i,n);async function HaA({sdkAppId:t,userId:i,userSig:n,core:c}){var I;const C=Math.round(new Date().getTime()/1e3);try{const f=await c.schedule.getAbilityConfig(t,c.schedule.ScheduleRequestType.TRTC_AUTO_CONF,{sdkAppId:t,userId:i,userSig:n,timestamp:C});c.log.info(`virtual background ability response: ${JSON.stringify(f)}`);const{data:w}=f;return(I=w?.trtcAutoConf)!=null&&I.web_ar?{auth:!0,timestamp:C}:{auth:!1}}catch(f){return c.log.error("virtual background fetch error",f),{auth:!1}}}var qaA={sdkAppId:{required:!0,type:"number"},userId:{required:!0,type:"string"},userSig:{required:!0,type:"string"}};function KaA(t){return{name:"VirtualBackgroundOptions",type:"object",required:!0,allowEmpty:!1,properties:VaA(YaA({},qaA),{type:{required:!1,type:"string",values:["image","blur","color"]},src:{required:!1,type:"string"},blurLevel:{required:!1,type:"number",min:1,max:10},onAbort:{required:!1},color:{required:!1,type:["array","string"]},enableFaceCentering:{required:!1,type:"boolean"},enableEffectOptimization:{required:!1,type:"boolean"}}),validate(i,n,c,I){var C;const{RtcError:f,ErrorCode:w,ErrorCodeDictionary:_}=t.errorModule;if(!i)return;const{type:N,src:L,onAbort:q}=i;if(N==="image"&&!L)throw new f({code:w.INVALID_PARAMETER,extraCode:_.INVALID_PARAMETER_REQUIRED,fnName:c,messageParams:{key:"src"}});if(q&&!t.utils.isFunction(q))throw new f({code:w.INVALID_PARAMETER,extraCode:_.INVALID_PARAMETER_TYPE,fnName:c,messageParams:{key:"onAbort",value:typeof q,rule:{type:"Function"}}});if(!((C=t.room.videoManager.cameraTrack)!=null&&C.mediaTrack))throw new f({code:w.INVALID_OPERATION,extraCode:_.INVALID_OPERATION_NEED_VIDEO,fnName:c})}}}function jaA(t){return{name:"UpdateVirtualBackgroundOptions",type:"object",required:!0,allowEmpty:!1,properties:{type:{required:!0,type:"string",values:["image","blur","color"]},src:{required:!1,type:"string"},blurLevel:{required:!1,type:"number",min:1,max:10},color:{required:!1,type:["array","string"]},enableFaceCentering:{required:!1,type:"boolean"},enableEffectOptimization:{required:!1,type:"boolean"}},validate(i,n,c,I){if(!i)return;const{RtcError:C,ErrorCode:f,ErrorCodeDictionary:w}=t.errorModule,{type:_,src:N}=i;if(_==="image"&&!N)throw new C({code:f.INVALID_PARAMETER,extraCode:w.INVALID_PARAMETER_REQUIRED,fnName:c,messageParams:{key:"src"}})}}}function WaA(t){return{name:"StopVirtualBackgroundOptions",required:!1}}var zaA=(()=>{var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(i={}){var n,c,I=i;I.ready=new Promise(($,j)=>{n=$,c=j});var C=Object.assign({},I),f="";typeof document<"u"&&document.currentScript&&(f=document.currentScript.src),t&&(f=t),f=f.indexOf("blob:")!==0?f.substr(0,f.replace(/[?#].*/,"").lastIndexOf("/")+1):"";var w,_,N=I.print||console.log.bind(console),L=I.printErr||console.error.bind(console);function q($){if(ti($))return function(j){for(var vA=atob(j),jA=new Uint8Array(vA.length),oe=0;oe$.startsWith(Dt);function Pt($){return Promise.resolve().then(()=>function(j){if(j==ce&&w)return new Uint8Array(w);var vA=q(j);if(vA)return vA;throw"both async and sync fetching of the wasm failed"}($))}function oi($,j,vA,jA){return function(oe,ye,He){return Pt(oe).then(Pe=>WebAssembly.instantiate(Pe,ye)).then(Pe=>Pe).then(He,Pe=>{L(`failed to asynchronously prepare wasm: ${Pe}`),ct(Pe)})}(j,vA,jA)}ti(ce="data:application/octet-stream;base64,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IAEoAgA2AgAgAiABKAIENgIEIAIgASgCCDYCCCACIAEoAgw2AgwgAiABKAIQNgIQIAIgASgCFDYCFCACIAEoAhg2AhggAiABKAIcNgIcIAIgASgCIDYCICACIAEoAiQ2AiQgAiABKAIoNgIoIAIgASgCLDYCLCACIAEoAjA2AjAgAiABKAI0NgI0IAIgASgCODYCOCACIAEoAjw2AjwgAUFAayEBIAJBQGsiAiAFTQ0ACwsgAiAETw0BA0AgAiABKAIANgIAIAFBBGohASACQQRqIgIgBEkNAAsMAQsgA0EESQRAIAAhAgwBCyAAIANBBGsiBEsEQCAAIQIMAQsgACECA0AgAiABLQAAOgAAIAIgAS0AAToAASACIAEtAAI6AAIgAiABLQADOgADIAFBBGohASACQQRqIgIgBE0NAAsLIAIgA0kEQANAIAIgAS0AADoAACABQQFqIQEgAkEBaiICIANHDQALCyAACwsAIAEgAiAAEEIaCxIAIAFBAXRB8MoAakECIAAQQgv5AQEEfwJ/IAEQKiECIwBBEGsiBSQAAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0AC0H/AHELIgRBAE8EQAJAIAIgAC0AC0EHdgR/IAAoAghB/////wdxQQFrBUEKCyIDIARrTQRAIAJFDQECfyAALQALQQd2BEAgACgCAAwBCyAACyIDIAQEfyACIANqIAMgBBBFIAEgAkEAIAMgBGogAUsbQQAgASADTxtqBSABCyACEEUgACACIARqIgEQMSAFQQA6AA8gASADaiAFLQAPOgAADAELIAAgAyACIARqIANrIARBACACIAEQRAsgBUEQaiQAIAAMAQsQJwALC/ICAgJ/AX4CQCACRQ0AIAAgAToAACAAIAJqIgNBAWsgAToAACACQQNJDQAgACABOgACIAAgAToAASADQQNrIAE6AAAgA0ECayABOgAAIAJBB0kNACAAIAE6AAMgA0EEayABOgAAIAJBCUkNACAAQQAgAGtBA3EiBGoiAyABQf8BcUGBgoQIbCIBNgIAIAMgAiAEa0F8cSIEaiICQQRrIAE2AgAgBEEJSQ0AIAMgATYCCCADIAE2AgQgAkEIayABNgIAIAJBDGsgATYCACAEQRlJDQAgAyABNgIYIAMgATYCFCADIAE2AhAgAyABNgIMIAJBEGsgATYCACACQRRr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ACACQQA6AA8DQCABBEAgACACLQAPOgAAIAFBAWshASAAQQFqIQAMAQsLIAJBEGokAAsaACAALQALQQd2BEAgACgCCBogACgCABAZCwvmAQEFfyMAQRBrIgUkACMAQSBrIgMkACMAQRBrIgQkACAEIAA2AgwgBCAAIAFqNgIIIAMgBCgCDDYCGCADIAQoAgg2AhwgBEEQaiQAIAMoAhghBCADKAIcIQYjAEEQayIBJAAgASAGNgIMIAIgBCAGIARrIgQQQyABIAIgBGo2AgggAyABKAIMNgIQIAMgASgCCDYCFCABQRBqJAAgAyAAIAMoAhAgAGtqNgIMIAMgAiADKAIUIAJrajYCCCAFIAMoAgw2AgggBSADKAIINgIMIANBIGokACAFKAIMIQcgBUEQaiQAIAcLDwAgAgRAIAAgASACEDILC/UCAQV/IwBBEGsiByQAIAIgAUF/c0Hv////B2pNBEACfyAALQALQQd2BEAgACgCAAwBCyAACyEIIAdBBGoiCSAAIAFB5////wNJBH8gByABQQF0NgIMIAcgASACajYCBCMAQRBrIgIkACAJKAIAIAdBDGoiCigCAEkhCyACQRBqJAAgCiAJIAsbKAIAIgJBC08EfyACQRBqQXBxIgIgAkEBayICIAJBC0YbBUEKC0EBagVB7////wcLEDAgBygCBCECIAcoAggaIAQEQCACIAggBBAjCyAFBEAgAiAEaiAGIAUQIwsgAyAEayEGIAMgBEcEQCACIARqIAVqIAQgCGogBhAjCyABQQpHBEAgCBAZCyAAIAI2AgAgACAAKAIIQYCAgIB4cSAHKAIIQf////8HcXI2AgggACAAKAIIQYCAgIB4cjYCCCAAIAQgBWogBmoiADYCBCAHQQA6AAwgACACaiAHLQAMOgAAIAdBEGokAA8LECcACwoAIAAgASACEEMLuQEBBH8jAEEQayIEJAAgBCACNgIMIwBBoAFrIgMkACADIAAgA0GeAWogARsiBjYClAFBfyEFIAMgAUEBayIAQQAgACABTRs2ApgBIANBAEGQARAmIgBBfzYCTCAAQSA2AiQgAEF/NgJQIAAgAEGfAWo2AiwgACAAQZQBajYCVAJAIAFBAEgEQEHo3gBBPTYCAAwBCyAGQQA6AAAgAEH9CiACQR8QTSEFCyAAQaABaiQAIARBEGokACAFCwQA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KAIARQ0AIAIgBCgCGDYCAAsgAEEBRiEFDAELQQAhBQsgBEFAayQAIAULMQAgACABKAIIQQAQHgRAIAEgAiADED0PCyAAKAIIIgAgASACIAMgACgCACgCHBEGAAsYACAAIAEoAghBABAeBEAgASACIAMQPQsLnQEBAn8jAEFAaiIDJAACf0EBIAAgAUEAEB4NABpBACABRQ0AGkEAIAFBjM0AECAiAUUNABogA0EMakEAQTQQJhogA0EBNgI4IANBfzYCFCADIAA2AhAgAyABNgIIIAEgA0EIaiACKAIAQQEgASgCACgCHBEGACADKAIgIgBBAUYEQCACIAMoAhg2AgALIABBAUYLIQQgA0FAayQAIAQLCgAgACABQQAQHgtOAgF/AXwjAEEQayICJAAgAkEANgIMIAEoAgRB1M8AIAJBDGoQCSEDIAIoAgwiAQRAIAEQAQsgACADRAAAAAAAAAAAYjoAOCACQRBqJAALNwEBfyMAQRBrIgIkACACIAEtADg2AgggAEHUzwAgAkEIahAHNgIEIABB1NUANgIAIAJBEGokAAuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECIaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECIaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACC5wBAQJ/IwBBEGsiAiQAQcgAEBwhASAAKAIEIgAQAiACIAA2AgggAUHMLSACQQhqEAc2AgQgAUHU1QA2AgAgAUEBNgIcIAFB1NUANgIYIAFBATYCFCABQdTVADYCECABQQE2AgwgAUHU1QA2AgggAUEAOgAgIAFBADYCRCABQoCAgIAwNwI8IAFBADsANyABQQA7ACsgAkEQaiQAIAELigUCBn4CfyABIAEoAgBBB2pBeHEiAUEQajYCACAAIQkgASkDACEDIAEpAwghBSMAQSBrIgAkAAJAIAVC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBUIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAhSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBUIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIBQZH3AEkNACADIQIgBUL///////8/g0KAgICAgIDAAIQiBCEGAkAgAUGB9wBrIghBwABxBEAgAyAIQUBqrYYhBkIAIQIMAQsgCEUNACAGIAitIgeGIAJBwAAgCGutiIQhBiACIAeGIQILIAAgAjcDECAAIAY3AxgCQEGB+AAgAWsiAUHAAHEEQCAEIAFBQGqtiCEDQgAhBAwBCyABRQ0AIARBwAAgAWuthiADIAGtIgKIhCEDIAQgAoghBAsgACADNwMAIAAgBDcDCCAAKQMIQgSGIAApAwAiA0I8iIQhAiAAKQMQIAApAxiEQgBSrSADQv//////////D4OEIgNCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyADQoCAgICAgICACFINACACQgGDIAJ8IQILIABBIGokACAJIAIgBUKAgICAgICAgIB/g4S/OQMAC0ABAn8jAEEQayICJAAgAiABNgIMIAJB1NUANgIIIAJBCGogABEBACEDIAIoAgwiAQRAIAEQAwsgAkEQaiQAIAMLBABCAAsEAEEAC/YCAQh/IwBBIGsiAyQAIAMgACgCHCIENgIQIAAoAhQhBSADIAI2AhwgAyABNgIYIAMgBSAEayIBNgIUIAEgAmohBUECIQcCfwJAAkACQCAAKAI8IANBEGoiAUECIANBDGoQDSIEBH9B6N4AIAQ2AgBBfwVBAAsEQCABIQQMAQsDQCAFIAMoAgwiBkYNAiAGQQBIBEAgASEEDAQLIAEgBiABKAIEIghLIglBA3RqIgQgBiAIQQAgCRtrIgggBCgCAGo2AgAgAUEMQQQgCRtqIgEgASgCACAIazYCACAFIAZrIQUgACgCPCAEIgEgByAJayIHIANBDGoQDSIGBH9B6N4AIAY2AgBBfwVBAAtFDQALCyAFQX9HDQELIAAgACgCLCIBNgIcIAAgATYCFCAAIAEgACgCMGo2AhAgAgwBCyAAQQA2AhwgAEIANwMQIAAgACgCAEEgcjYCAEEAIAdBAkYNABogAiAEKAIEawshCiADQSBqJAAgCgt+AQF/IAAEQCAALAA3QQBIBEAgACgCLBAZCyAALAArQQBIBEAgACgCIBAZCyAAKAIcIgEEQCABEAMgAEEANgIcCyAAKAIUIgEEQCABEAMgAEEANgIUCyAAKAIMIgEEQCABEAMgAEEANgIMCyAAKAIEIgEEQCABEAMLIAAQGQsLJAECfyAAKAIEIgAQKkEBaiIBEC0iAgR/IAIgACABECIFQQALC/AeAw1/AnwBfSMAQUBqIgMkACADQaADEBwiAjYCHCADQp2DgICAtICAgH83AiAgAkGuHkGdAxAiQQA6AJ0DIANBHGoiAkGVEUGAESABLQA4GxAaGgJAIAICf0GAEiABKAJEIgJB2gBGDQAaIAJBjgJHBEAgAkG0AUcNAkHGEQwBC0HmEQsQGhoLIANBHGpBtyYQGhoCQAJAAkACQAJAIAEoAjxBAWsOAwABAgMLIANBKGohDSABKAJAIQwjAEGgAWsiBiQAIwBBEGsiBCQAIARBADYCDCAEQgA3AgQgBEE4EBwiAjYCBCAEIAJBOGoiBTYCDCACQQBBOBAmGiAEIAU2AggCfyAGQZQBaiIFQQA2AgggBUIANwIAIAVB1AAQHCICNgIEIAUgAjYCACAFIAJB1ABqIgg2AggCQAJAIAQoAggiByAEKAIEIglGBEAgAkEAQdQAECYaDAELIAcgCWsiCkEDdSIHQYCAgIACTw0BIAdBA3QhCwNAIAJBADYCCCACQgA3AgAgAiAKEBwiBzYCBCACIAc2AgAgAiAHIAtqIg42AgggByAJIAoQIhogAiAONgIEIAJBDGoiAiAIRw0ACwsgBSAINgIEIAUMAQsgAkEANgIIIAJCADcCAEHiCBBSAAshCSAEKAIEIgIEQCAEIAI2AgggAhAZC0EAIQIDQCAJKAIAIAJBDGxqIQcgAiACbCEIAkAgAkUEQEEAIQUDQCAFIAVsIAhqt58iD0QAAAAAAAAcQGUEQCAHKAIAIAVBA3RqIA8gD5qiRAAAAAAAADJAoxA2RAMkJUW5G5I/oiIPOQMAIA8gEKAhEAsgBUEBaiIFQQdHDQALDAELIAi3nyIPRAAAAAAAABxAZQRAIA8gD5qiRAAAAAAAADJAoxA2IQ8gBygCACAPRAMkJUW5G5I/oiIPOQMAIA8gEKAhEAtBASEFA0AgBSAFbCAIarefIg9EAAAAAAAAHEBlBEAgBygCACAFQQN0aiAPIA+aokQAAAAAAAAyQKMQNkQDJCVFuRuSP6IiDzkDACAPRAAAAAAAABBAoiAQoCEQCyAFQQFqIgVBB0cNAAsLIAJBAWoiAkEHRw0ACyAJKAIAIQlBACECA0AgCSACQQxsaigCACEHQQAhBUEAIQgDQCAHIAVBA3QiCmoiCyALKwMAIBCjOQMAIAcgCkEIcmoiCiAKKwMAIBCjOQMAIAVBAmohBSAIQQJqIghBBkcNAAsgByAFQQN0aiIFIAUrAwAgEKM5AwAgAkEBaiICQQdHDQALIARBEGokACAGQQA6AIgBIAZBADoAkwFBeiEFA0AgBSAMbCEHIAUgBUEfdSICcyACa0EMbCEIQXohAgNAAkAgBigClAEgCGooAgAgAiACQR91IgRzIARrQQN0aisDALYiEUMAAAAAXkUNACAGQRxqIgQgBxAvIAYgBEHNFhAlIgQoAgg2AjAgBiAEKQIANwMoIARCADcCACAEQQA2AgggBkFAayAGQShqQaMSEBoiBCgCCDYCACAGIAQpAgA3AzggBEIANwIAIARBADYCCCAGQRBqIgQgAiAMbBAvIAYgBkE4aiAGKAIQIAQgBi0AGyIEwEEASCIJGyAGKAIUIAQgCRsQGyIEKAIINgJQIAYgBCkCADcDSCAEQgA3AgAgBEEANgIIIAYgBkHIAGpBpxIQGiIEKAIINgJgIAYgBCkCADcDWCAEQgA3AgAgBEEANgIIIAZBBGoiBCAREC4gBiAGQdgAaiAGKAIEIAQgBi0ADyIEwEEASCIJGyAGKAIIIAQgCRsQGyIEKAIINgJwIAYgBCkCADcDaCAEQgA3AgAgBEEANgIIIAYgBkHoAGpBmBIQGiIEKAIINgKAASAGIAQpAgA3A3ggBEIANwIAIARBADYCCCAGQYgBaiAGKAJ4IAZB+ABqIAYtAIMBIgTAQQBIIgkbIAYoAnwgBCAJGxAbGiAGLACDAUEASARAIAYoAngQGQsgBiwAc0EASARAIAYoAmgQGQsgBiwAD0EASARAIAYoAgQQGQsgBiwAY0EASARAIAYoAlgQGQsgBiwAU0EASARAIAYoAkgQGQsgBiwAG0EASARAIAYoAhAQGQsgBiwAQ0EASARAIAYoAjgQGQsgBiwAM0EASARAIAYoAigQGQsgBiwAJ0EATg0AIAYoAhwQGQsgAkEBaiICQQdHDQALIAVBAWoiBUEHRw0ACyMAQRBrIgwkAEGZJhAqIQcCfyAGQYgBaiIFLQALQQd2BEAgBSgCBAwBCyAFLQALQf8AcQshCAJ/An8jAEEQayIJJAAgBkH4AGohAiAHIAhqIgRB7////wdNBEACQCAEQQtJBEAgAkIANwIAIAJBADYCCCACIAItAAtBgAFxIARB/wBxcjoACyACIAItAAtB/wBxOgALDAELIARBC08EfyAEQRBqQXBxIgogCkEBayIKIApBC0YbBUEKC0EBaiIKEBwhCyACIAIoAghBgICAgHhxIApB/////wdxcjYCCCACIAIoAghBgICAgHhyNgIIIAIgCzYCACACIAQ2AgQLIAlBEGokACACDAELECcACyIELQALQQd2BEAgBCgCAAwBCyAECyIEQZkmIAcQIyAEIAdqIgQCfyAFLQALQQd2BEAgBSgCAAwBCyAFCyAIECMgBCAIakEBEEAgDEEQaiQAIA0gAkHzKRAaIgIpAgA3AgAgDSACKAIINgIIIAJCADcCACACQQA2AgggBiwAgwFBAEgEQCAGKAJ4EBkLIAYsAJMBQQBIBEAgBigCiAEQGQsgBigClAEiBQRAIAYoApgBIgQgBSICRwRAA0AgBEEMayICKAIAIgcEQCAEQQhrIAc2AgAgBxAZCyACIgQgBUcNAAsgBigClAEhAgsgBiAFNgKYASACEBkLIAZBoAFqJAAgA0EcaiADKAIoIA0gAy0AMyICwEEASCIFGyADKAIsIAIgBRsQGxogAywAM0EATg0DIAMoAigQGQwDCyADQRxqQcwhEBoaDAILIANBHGpBrywQGhoMAQsgA0EcakGYLBAaGgsCQAJAIAEoAjAgAS0ANyICIALAIgZBAEgbIgRBAWoiBUHw////B0kEQAJAAkAgBUELTwRAIAVBD3JBAWoiBxAcIQIgAyAFNgIsIAMgAjYCKCADIAdBgICAgHhyNgIwDAELIANBADYCMCADQgA3AyggAyAFOgAzIANBKGohAiAERQ0BCyACIAFBLGoiBSgCACAFIAZBAEgbIAQQMgsgAiAEakEKOwAAIANBHGogAygCKCADQShqIAMtADMiAsBBAEgiBRsgAygCLCACIAUbEBsaIAMsADNBAEgEQCADKAIoEBkLIAEoAiQgAS0AKyICIALAIgZBAEgbIgRBAmoiBUHw////B08NAQJAAkAgBUELTwRAIAVBD3JBAWoiBxAcIQIgAyAFNgIsIAMgAjYCKCADIAdBgICAgHhyNgIwDAELIANBADYCMCADQgA3AyggAyAFOgAzIANBKGohAiAERQ0BCyACIAFBIGoiBSgCACAFIAZBAEgbIAQQMgsgAiAEaiICQQA6AAIgAkH9FDsAACADQRxqIAMoAiggA0EoaiADLQAzIgLAQQBIIgUbIAMoAiwgAiAFGxAbGiADLAAzQQBIBEAgAygCKBAZC0HA0wAoAgAiBBAqIgJB8P///wdPDQICQAJAIAJBC08EQCACQQ9yQQFqIgYQHCEFIAMgBkGAgICAeHI2AhggAyAFNgIQIAMgAjYCFAwBCyADIAI6ABsgA0EQaiEFIAJFDQELIAUgBCACEDILIAIgBWpBADoAACADQShqIAFBsZYCIANBEGoQUyADKAIsIQIgA0EANgIsIAMoAighBQJAIAEoAhQiBEUEQCABIAI2AhQgASAFNgIQDAELIAQQAyADKAIsIQQgASACNgIUIAEgBTYCECAERQ0AIAQQAyADQQA2AiwLIAMsABtBAEgEQCADKAIQEBkLAkAgAywAJ0EATgRAIAMgAygCJDYCCCADIAMpAhw3AwAMAQsgAygCHCEGIAMoAiAhBSMAQRBrIgQkAAJAAkACQCAFQQtJBEAgAyECIAMgAy0AC0GAAXEgBUH/AHFyOgALIAMgAy0AC0H/AHE6AAsMAQsgBUHv////B0sNASAEQQhqIAMgBUELTwR/IAVBEGpBcHEiAiACQQFrIgIgAkELRhsFQQoLQQFqEDAgBCgCDBogAyAEKAIIIgI2AgAgAyADKAIIQYCAgIB4cSAEKAIMQf////8HcXI2AgggAyADKAIIQYCAgIB4cjYCCCADIAU2AgQLIAIgBiAFQQFqECMgBEEQaiQADAELECcACwsgA0EoaiABQbCWAiADEFMgAygCLCECIANBADYCLCADKAIoIQUCQCABKAIMIgRFBEAgASACNgIMIAEgBTYCCAwBCyAEEAMgAygCLCEEIAEgAjYCDCABIAU2AgggBEUNACAEEAMgA0EANgIsCyADLAALQQBIBEAgAygCABAZCyADQQA2AihBhNUALQAAQQFxRQRAQQFBqC9BABAFIQJBhNUAQQE6AABBgNUAIAI2AgALAn9BgNUAKAIAIAEoAgRB6QkgA0EoakEAEAQiEEQAAAAAAADwQWMgEEQAAAAAAAAAAGZxBEAgEKsMAQtBAAshAiADKAIoIgUEQCAFEAELIAEoAhwiBQRAIAUQAwsgASACNgIcIAFB1NUANgIYIAIQAiADIAI2AiggASgCFCICEAIgAyACNgIwIANBADYCPEGM1QAtAABBAXFFBEBBA0GsL0EAEAUhAkGM1QBBAToAAEGI1QAgAjYCAAtBiNUAKAIAIAEoAgRB8AggA0E8aiADQShqEAQaIAMoAjwiAgRAIAIQAQsgASgCHCICEAIgAyACNgIoIAEoAgwiAhACIAMgAjYCMCADQQA2AjxBjNUALQAAQQFxRQRAQQNBrC9BABAFIQJBjNUAQQE6AABBiNUAIAI2AgALQYjVACgCACABKAIEQfAIIANBPGogA0EoahAEGiADKAI8IgIEQCACEAELIAEoAhwiAhACIAMgAjYCKCADQQA2AjxB7NQALQAAQQFxRQRAQQJBvC5BABAFIQJB7NQAQQE6AABB6NQAIAI2AgALQejUACgCACABKAIEQc8JIANBPGogA0EoahAEGiADKAI8IgIEQCACEAELIAAgASgCHCIBNgIEIABB1NUANgIAIAEQAiADLAAnQQBIBEAgAygCHBAZCyADQUBrJAAPCxA3AAsQNwALEDcAC9gCAQJ/IwBBEGsiASQAIAAoAhQiAhACIAEgAjYCCCABQQA2AgRB7NQALQAAQQFxRQRAQQJBvC5BABAFIQJB7NQAQQE6AABB6NQAIAI2AgALQejUACgCACAAKAIEQf0IIAFBBGogAUEIahAEGiABKAIEIgIEQCACEAELIAAoAgwiAhACIAEgAjYCCCABQQA2AgRB7NQALQAAQQFxRQRAQQJBvC5BABAFIQJB7NQAQQE6AABB6NQAIAI2AgALQejUACgCACAAKAIEQf0IIAFBBGogAUEIahAEGiABKAIEIgIEQCACEAELIAAoAhwiAhACIAEgAjYCCCABQQA2AgRB7NQALQAAQQFxRQRAQQJBvC5BABAFIQJB7NQAQQE6AABB6NQAIAI2AgALQejUACgCACAAKAIEQdsJIAFBBGogAUEIahAEGiABKAIEIgAEQCAAEAELIAFBEGokAAs1AQF/IAEgACgCBCICQQF1aiEBIAAoAgAhACABIAJBAXEEfyABKAIAIABqKAIABSAACxEDAAsvAAJ/IAAsACtBAEgEQCAAQQA2AiQgACgCIAwBCyAAQQA6ACsgAEEgagtBADoAAAsFAEHoLAs9AQF/IAEgACgCBCIGQQF1aiEBIAAoAgAhACABIAIgAyAEIAUgBkEBcQR/IAEoAgAgAGooAgAFIAALEQ0AC7wJAgR/AXwjAEEQayIIJAAgASEJIAAoAkQhBiMAQYACayIFJAACQAJAIAZBjgJGDQAgBkHaAEYNACADIQEgBCEDDAELIAQhAQsgBUHEAGoiBiAJECEgBSAGQdsSECUiBigCCDYCWCAFIAYpAgA3A1AgBkIANwIAIAZBADYCCCAFIAVB0ABqQfEUEBoiBigCCDYCaCAFIAYpAgA3A2AgBkIANwIAIAZBADYCCCAFQThqIgYgAhAhIAUgBUHgAGogBSgCOCAGIAUtAEMiBsBBAEgiBxsgBSgCPCAGIAcbEBsiBigCCDYCeCAFIAYpAgA3A3AgBkIANwIAIAZBADYCCCAFIAVB8ABqQbYSEBoiBigCCDYCiAEgBSAGKQIANwOAASAGQgA3AgAgBkEANgIIIAVBLGoiBiABIAmgECEgBSAFQYABaiAFKAIsIAYgBS0ANyIGwEEASCIHGyAFKAIwIAYgBxsQGyIGKAIINgKYASAFIAYpAgA3A5ABIAZCADcCACAGQQA2AgggBSAFQZABakHxFBAaIgYoAgg2AqgBIAUgBikCADcDoAEgBkIANwIAIAZBADYCCCAFQSBqIgYgAyACoBAhIAUgBUGgAWogBSgCICAGIAUtACsiBsBBAEgiBxsgBSgCJCAGIAcbEBsiBigCCDYCuAEgBSAGKQIANwOwASAGQgA3AgAgBkEANgIIIAUgBUGwAWpByhMQGiIGKAIINgLIASAFIAYpAgA3A8ABIAZCADcCACAGQQA2AgggBUEUaiIGIAEQISAFIAVBwAFqIAUoAhQgBiAFLQAfIgbAQQBIIgcbIAUoAhggBiAHGxAbIgYoAgg2AtgBIAUgBikCADcD0AEgBkIANwIAIAZBADYCCCAFIAVB0AFqQagTEBoiBigCCDYC6AEgBSAGKQIANwPgASAGQgA3AgAgBkEANgIIIAVBCGoiBiADECEgBSAFQeABaiAFKAIIIAYgBS0AEyIGwEEASCIHGyAFKAIMIAYgBxsQGyIGKAIINgL4ASAFIAYpAgA3A/ABIAZCADcCACAGQQA2AgggCCAFQfABakGEHRAaIgYpAgA3AgQgCCAGKAIINgIMIAZCADcCACAGQQA2AgggBSwA+wFBAEgEQCAFKALwARAZCyAFLAATQQBIBEAgBSgCCBAZCyAFLADrAUEASARAIAUoAuABEBkLIAUsANsBQQBIBEAgBSgC0AEQGQsgBSwAH0EASARAIAUoAhQQGQsgBSwAywFBAEgEQCAFKALAARAZCyAFLAC7AUEASARAIAUoArABEBkLIAUsACtBAEgEQCAFKAIgEBkLIAUsAKsBQQBIBEAgBSgCoAEQGQsgBSwAmwFBAEgEQCAFKAKQARAZCyAFLAA3QQBIBEAgBSgCLBAZCyAFLACLAUEASARAIAUoAoABEBkLIAUsAHtBAEgEQCAFKAJwEBkLIAUsAENBAEgEQCAFKAI4EBkLIAUsAGtBAEgEQCAFKAJgEBkLIAUsAFtBAEgEQCAFKAJQEBkLIAUsAE9BAEgEQCAFKAJEEBkLIAVBgAJqJAAgACwAK0EASARAIAAoAiAQGQsgACAIKQIENwIgIAAgCCgCDDYCKCAIQRBqJAALPwEBfyABIAAoAgQiB0EBdWohASAAKAIAIQAgASACIAMgBCAFIAYgB0EBcQR/IAEoAgAgAGooAgAFIAALEQ4AC88bAgd/AXwjAEFAaiIJJAAgCSAFOQMgIAkgBDkDGCAJIAM5AxAgCSACOQMIIAkgATkDACMAQRBrIgYkACAGIAk2AgxByNMAQf4rIAlBABBNGiAGQRBqJAAjAEGABGsiBiQAIAlBNGoiC0EAOgAAIAtBADoACwJAIAFEAAAAAAAAAABkRQ0AIAZBADoA8AMgBkEAOgD7AyAGQQA6AOQDIAZBADoA7wMgBkKAgICAhICAgMAANwPYAyAGQoCAgICEgICAQDcD0AMgBkKAgICAjICAgMAANwPIAyAGQoCAgICMgICAQDcDwAMgBkKAgICEhICAwMAANwO4AyAGQoCAgISEgIDAQDcDsAMgBkKAgICEjICAwMAANwOoAyAGQoCAgISMgIDAQDcDoAMgBkKAgICGDDcDmAMgBkKAgICGBDcDkAMgBkKAgICAgICA4MAANwOIAyAGQoCAgICAgIDgQDcDgAMgBkKAgICIjICA0EA3A/gCIAZCgICAiIyAgNDAADcD8AIgBkKAgICIhICA0MAANwPoAiAGQoCAgIiEgIDQQDcD4AIgBkKAgICFjICAgEE3A9gCIAZCgICAhYyAgIDBADcD0AIgBkKAgICFhICAgMEANwPIAiAGQoCAgIWEgICAQTcDwAIgBkKAgICJBDcDuAIgBkKAgICJDDcDsAIgBkKAgICAgICAkMEANwOoAiAGQoCAgICAgICQQTcDoAJEAAAAAAAAAEAgBKMhBCABRJqZmZmZmem/okQAAAAAAADwP6AhDQNAIAZBsAFqIgggBxAvIAYgCEHECxAlIggoAgg2AsgBIAYgCCkCADcDwAEgCEIANwIAIAhBADYCCCAGIAZBwAFqQfQWEBoiCCgCCDYC2AEgBiAIKQIANwPQASAIQgA3AgAgCEEANgIIIAZBoAFqIgggBkGgAmogB0EDdGoiCioCABAuIAYgBkHQAWogBigCoAEgCCAGLQCrASIIwEEASCIMGyAGKAKkASAIIAwbEBsiCCgCCDYC6AEgBiAIKQIANwPgASAIQgA3AgAgCEEANgIIIAYgBkHgAWpB+RwQGiIIKAIINgL4ASAGIAgpAgA3A/ABIAhCADcCACAIQQA2AgggBkGQAWoiCCAKKgIEEC4gBiAGQfABaiAGKAKQASAIIAYtAJsBIgjAQQBIIgobIAYoApQBIAggChsQGyIIKAIINgKIAiAGIAgpAgA3A4ACIAhCADcCACAIQQA2AgggBiAGQYACakGXEhAaIggoAgg2ApgCIAYgCCkCADcDkAIgCEIANwIAIAhBADYCCCAGQeQDaiAGKAKQAiAGQZACaiAGLQCbAiIIwEEASCIKGyAGKAKUAiAIIAobEBsaIAYsAJsCQQBIBEAgBigCkAIQGQsgBiwAiwJBAEgEQCAGKAKAAhAZCyAGLACbAUEASARAIAYoApABEBkLIAYsAPsBQQBIBEAgBigC8AEQGQsgBiwA6wFBAEgEQCAGKALgARAZCyAGLACrAUEASARAIAYoAqABEBkLIAYsANsBQQBIBEAgBigC0AEQGQsgBiwAywFBAEgEQCAGKALAARAZCyAGLAC7AUEASARAIAYoArABEBkLIAZB0AFqIgggBxAvIAYgCEGmCxAlIggoAgg2AugBIAYgCCkCADcD4AEgCEIANwIAIAhBADYCCCAGIAZB4AFqQfwcEBoiCCgCCDYC+AEgBiAIKQIANwPwASAIQgA3AgAgCEEANgIIIAZBwAFqIghDAAAAQEMAAEBAQwAAgD8gB0ETSxsgB0EMa0EISRsQLiAGIAZB8AFqIAYoAsABIAggBi0AywEiCMBBAEgiChsgBigCxAEgCCAKGxAbIggoAgg2AogCIAYgCCkCADcDgAIgCEIANwIAIAhBADYCCCAGIAZBgAJqQZcXEBoiCCgCCDYCmAIgBiAIKQIANwOQAiAIQgA3AgAgCEEANgIIIAZB8ANqIAYoApACIAZBkAJqIAYtAJsCIgjAQQBIIgobIAYoApQCIAggChsQGxogBiwAmwJBAEgEQCAGKAKQAhAZCyAGLACLAkEASARAIAYoAoACEBkLIAYsAMsBQQBIBEAgBigCwAEQGQsgBiwA+wFBAEgEQCAGKALwARAZCyAGLADrAUEASARAIAYoAuABEBkLIAYsANsBQQBIBEAgBigC0AEQGQsgB0EBaiIHQRhHDQALIAZBNGoiByAEECEgBiAHQdoWECUiBygCCDYCSCAGIAcpAgA3A0AgB0IANwIAIAdBADYCCCAGIAZBQGtBpRIQGiIHKAIINgJYIAYgBykCADcDUCAHQgA3AgAgB0EANgIIIAZBKGoiB0QAAAAAAAAAQCAFoxAhIAYgBkHQAGogBigCKCAHIAYtADMiB8BBAEgiCBsgBigCLCAHIAgbEBsiBygCCDYCaCAGIAcpAgA3A2AgB0IANwIAIAdBADYCCCAGIAZB4ABqQdIdEBoiBygCCDYCeCAGIAcpAgA3A3AgB0IANwIAIAdBADYCCCAGIAZB8ABqIAYoAuQDIAZB5ANqIAYtAO8DIgfAQQBIIggbIAYoAugDIAcgCBsQGyIHKAIINgKIASAGIAcpAgA3A4ABIAdCADcCACAHQQA2AgggBiAGQYABakH6HRAaIgcoAgg2ApgBIAYgBykCADcDkAEgB0IANwIAIAdBADYCCCAGIAZBkAFqIAYoAvADIAZB8ANqIAYtAPsDIgfAQQBIIggbIAYoAvQDIAcgCBsQGyIHKAIINgKoASAGIAcpAgA3A6ABIAdCADcCACAHQQA2AgggBiAGQaABakGYGxAaIgcoAgg2ArgBIAYgBykCADcDsAEgB0IANwIAIAdBADYCCCAGQRxqIgcgDRAhIAYgBkGwAWogBigCHCAHIAYtACciB8BBAEgiCBsgBigCICAHIAgbEBsiBygCCDYCyAEgBiAHKQIANwPAASAHQgA3AgAgB0EANgIIIAYgBkHAAWpBlxUQGiIHKAIINgLYASAGIAcpAgA3A9ABIAdCADcCACAHQQA2AgggBkEQaiIHIAFEMzMzMzMz47+iRAAAAAAAAPA/oBAhIAYgBkHQAWogBigCECAHIAYtABsiB8BBAEgiCBsgBigCFCAHIAgbEBsiBygCCDYC6AEgBiAHKQIANwPgASAHQgA3AgAgB0EANgIIIAYgBkHgAWpBmhcQGiIHKAIINgL4ASAGIAcpAgA3A/ABIAdCADcCACAHQQA2AgggBkEEaiIHIAEQISAGIAZB8AFqIAYoAgQgByAGLQAPIgfAQQBIIggbIAYoAgggByAIGxAbIgcoAgg2AogCIAYgBykCADcDgAIgB0IANwIAIAdBADYCCCAGIAZBgAJqQcsdEBoiBygCCDYCmAIgBiAHKQIANwOQAiAHQgA3AgAgB0EANgIIIAsgBigCkAIgBkGQAmogBi0AmwIiB8BBAEgiCBsgBigClAIgByAIGxAbGiAGLACbAkEASARAIAYoApACEBkLIAYsAIsCQQBIBEAgBigCgAIQGQsgBiwAD0EASARAIAYoAgQQGQsgBiwA+wFBAEgEQCAGKALwARAZCyAGLADrAUEASARAIAYoAuABEBkLIAYsABtBAEgEQCAGKAIQEBkLIAYsANsBQQBIBEAgBigC0AEQGQsgBiwAywFBAEgEQCAGKALAARAZCyAGLAAnQQBIBEAgBigCHBAZCyAGLAC7AUEASARAIAYoArABEBkLIAYsAKsBQQBIBEAgBigCoAEQGQsgBiwAmwFBAEgEQCAGKAKQARAZCyAGLACLAUEASARAIAYoAoABEBkLIAYsAHtBAEgEQCAGKAJwEBkLIAYsAGtBAEgEQCAGKAJgEBkLIAYsADNBAEgEQCAGKAIoEBkLIAYsAFtBAEgEQCAGKAJQEBkLIAYsAEtBAEgEQCAGKAJAEBkLIAYsAD9BAEgEQCAGKAI0EBkLIAYsAO8DQQBIBEAgBigC5AMQGQsgBiwA+wNBAE4NACAGKALwAxAZCwJAIANEAAAAAAAAAABkRQ0AIAZB5ANqIgcgA0TNzMzMzMzcP6JEmpmZmZmZuT+gECEgBiAHQcEZECUiBygCCDYC+AMgBiAHKQIANwPwAyAHQgA3AgAgB0EANgIIIAYgBkHwA2pB6ykQGiIHKAIINgKoAiAGIAcpAgA3A6ACIAdCADcCACAHQQA2AgggCyAGKAKgAiAGQaACaiAGLQCrAiIHwEEASCIIGyAGKAKkAiAHIAgbEBsaIAYsAKsCQQBIBEAgBigCoAIQGQsgBiwA+wNBAEgEQCAGKALwAxAZCyAGLADvA0EATg0AIAYoAuQDEBkLAkAgAkQAAAAAAAAAAGRFDQAgBkHkA2oiByACRLgehetRuL4/ohAhIAYgB0GBFRAlIgcoAgg2AvgDIAYgBykCADcD8AMgB0IANwIAIAdBADYCCCAGIAZB8ANqQdssEBoiBygCCDYCqAIgBiAHKQIANwOgAiAHQgA3AgAgB0EANgIIIAsgBigCoAIgBkGgAmogBi0AqwIiB8BBAEgiCxsgBigCpAIgByALGxAbGiAGLACrAkEASARAIAYoAqACEBkLIAYsAPsDQQBIBEAgBigC8AMQGQsgBiwA7wNBAE4NACAGKALkAxAZCyAGQYAEaiQAIAAsADdBAEgEQCAAKAIsEBkLIAAgCSkCNDcCLCAAIAkoAjw2AjQgCUFAayQAC2ACAX8BfCMAQRBrIgIkACACQQA2AgwgASgCBEGc0AAgAkEMahAJIQMgAigCDCIBBEAgARABCyAAAn8gA5lEAAAAAAAA4EFjBEAgA6oMAQtBgICAgHgLNgJEIAJBEGokAAs3AQF/IwBBEGsiAiQAIAIgASgCRDYCCCAAQZzQACACQQhqEAc2AgQgAEHU1QA2AgAgAkEQaiQAC2ACAX8BfCMAQRBrIgIkACACQQA2AgwgASgCBEGc0AAgAkEMahAJIQMgAigCDCIBBEAgARABCyAAAn8gA5lEAAAAAAAA4EFjBEAgA6oMAQtBgICAgHgLNgJAIAJBEGokAAs3AQF/IwBBEGsiAiQAIAIgASgCQDYCCCAAQZzQACACQQhqEAc2AgQgAEHU1QA2AgAgAkEQaiQAC2ACAX8BfCMAQRBrIgIkACACQQA2AgwgASgCBEGc0AAgAkEMahAJIQMgAigCDCIBBEAgARABCyAAAn8gA5lEAAAAAAAA4EFjBEAgA6oMAQtBgICAgHgLNgI8IAJBEGokAAsiAQF+IAEgAq0gA61CIIaEIAQgABEMACIFQiCIpyQBIAWnCzcBAX8jAEEQayICJAAgAiABKAI8NgIIIABBnNAAIAJBCGoQBzYCBCAAQdTVADYCACACQRBqJAALC/NKFQBBgAgLhCZzZXRCZWF1dHkALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweAB1bnNpZ25lZCBzaG9ydAB1bnNpZ25lZCBpbnQAaW5pdABmbG9hdAB1aW50NjRfdABibHVyUmFkaXVzAHZlY3RvcgBtaXJyb3IAYXR0YWNoU2hhZGVyAGRlbGV0ZVNoYWRlcgBjcmVhdGVTaGFkZXIAY29tcGlsZVNoYWRlcgB1bnNpZ25lZCBjaGFyAHN0ZDo6ZXhjZXB0aW9uAHJvdGF0aW9uAG5hbgBsaW5rUHJvZ3JhbQBkZWxldGVQcm9ncmFtAGNyZWF0ZVByb2dyYW0AYm9vbABlbXNjcmlwdGVuOjp2YWwAc2V0V2F0ZXJNYXJrAHN0b3BXYXRlck1hcmsAdW5zaWduZWQgbG9uZwBzdGQ6OndzdHJpbmcAYmFzaWNfc3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGluZgAlZgBjbG9zZQBkb3VibGUAdmJNb2RlAHNoYWRlclNvdXJjZQB2b2lkAHNhbXBsZUNvbG9yICs9IHRleHR1cmUoZnJhbWUsIGJsdXJDb29yZGluYXRlc1sATkFOAElORgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDhfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDY0X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDY0X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgbG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZG91YmxlPgB2ZWMyIGMgPSB2X3RleENvb3JkOwB2ZWMyIGMgPSB2ZWMyKDEuMCAtIHZfdGV4Q29vcmQueCwgdl90ZXhDb29yZC55KTsAYyA9IHZlYzIoMS4wIC0gYy54LCAxLjAgLSBjLnkpOwBjID0gdmVjMihjLnksIDEuMCAtIGMueCk7AGMgPSB2ZWMyKDEuMCAtIGMueSwgYy54KTsAQWxsSW4xAC4ALjAsAC4wKSpvKSoAKG51bGwpACkqby55KTsgICAgdmVjMiBjb29yZDIgPSB2ZWMyKGZsb2F0KAAgICAgYyA9IHZlYzIodl90ZXhDb29yZC54LCAxLjAgLSB2X3RleENvb3JkLnkpOyAgICB2ZWMyIGNvb3JkMSA9IHZlYzIoZmxvYXQoACksIChjLnkgLWNvb3JkMS55KSAvIG8ueSAvIGZsb2F0KAApKm8ueSk7ICAgIGlmIChjLnggPiBjb29yZDEueCAmJiBjLnggPCBjb29yZDIueCAmJiBjLnkgPiBjb29yZDEueSAmJiBjLnkgPCBjb29yZDIueSkgeyAgICAgIHZlYzQgd2F0ZXJDb2xvciA9IHRleHR1cmUod2F0ZXJNYXJrLCB2ZWMyKChjLnggLSBjb29yZDEueCkgIC8gby54IC8gZmxvYXQoACkgKiBvLngsIGZsb2F0KABvdXRDb2xvci5yZ2IgKz0gdmVjMygAKTsgICAgICAgdmVjMyBzbW9vdGhDb2xvciA9IG91dENvbG9yLnJnYiArIChvdXRDb2xvci5yZ2ItdmVjMyhoaWdoUGFzcykpKmFscGhhKjAuMTsgICAgICAgc21vb3RoQ29sb3IgPSBtYXgoc21vb3RoQ29sb3IsIHZlYzMoMC4wKSk7ICAgICAgIHNtb290aENvbG9yID0gY2xhbXAocG93KHNtb290aENvbG9yLCB2ZWMzKABnKz1HKGMsdmVjMigAICAgICAgdmVjMiBvZmZzZXQgPSB2ZWMyKABdID0gdl90ZXhDb29yZC54eSArIG9mZnNldCAqIHZlYzIoADsgACkpLCB2ZWMzKDAuMCksIHZlYzMoMS4wKSk7ICAgICAgdmVjMyBzY3JlZW4gPSB2ZWMzKDEuMCkgLSAodmVjMygxLjApLXNtb290aENvbG9yKSAqICh2ZWMzKDEuMCktb3V0Q29sb3IucmdiKTsgICAgICAgdmVjMyBsaWdodGVuID0gbWF4KHNtb290aENvbG9yLCBvdXRDb2xvci5yZ2IpOyAgICAgICB2ZWMzIGJlYXV0eUNvbG9yID0gbWl4KG1peChvdXRDb2xvci5yZ2IsIHNjcmVlbiwgYWxwaGEpLCBsaWdodGVuLCBhbHBoYSk7ICAgICAgb3V0Q29sb3IucmdiID0gbWl4KG91dENvbG9yLnJnYiwgYmVhdXR5Q29sb3IsIAAKICAgICAgY29uc3QgbWF0MyBzYXR1cmF0ZU1hdHJpeCA9IG1hdDMoMS4xMTAyLC0wLjA1OTgsLTAuMDYxLC0wLjA3NzQsMS4wODI2LC0wLjExODYsLTAuMDIyOCwtMC4wMjI4LDEuMTc3Mik7CiAgICAgIHZlYzMgd2FybUNvbG9yID0gb3V0Q29sb3IucmdiICogc2F0dXJhdGVNYXRyaXg7CiAgICAgIG91dENvbG9yLnJnYiA9IG1peChvdXRDb2xvci5yZ2IsIHdhcm1Db2xvciwgACAgICAgIHNhbXBsZUNvbG9yID0gc2FtcGxlQ29sb3IgLyA2Mi4wOyAgICAgICBmbG9hdCBoaWdoUGFzcyA9IG91dENvbG9yLmcgLSBzYW1wbGVDb2xvciArIDAuNTsgICAgICAgY29uc3QgaGlnaHAgdmVjMyBXID0gdmVjMygwLjI5OSwwLjU4NywwLjExNCk7ICAgICAgZmxvYXQgbHVtaW5hbmNlID0gZG90KG91dENvbG9yLnJnYiwgVyk7ICAgICAgIGZsb2F0IGFscGhhID0gcG93KGx1bWluYW5jZSwgAF0pLmcgKiAAKSkpOyAgICAgIG91dENvbG9yID0gbWl4KG91dENvbG9yLHdhdGVyQ29sb3IsICB3YXRlckNvbG9yLmEpOyAgICB9ICAgIAApOyAgICAAKTsgICAgICB2ZWMyIGJsdXJDb29yZGluYXRlc1syNF07ICAgICAgACAgICAgIGZsb2F0IHNhbXBsZUNvbG9yID0gb3V0Q29sb3IuZyAqIDIyLjA7ICAgICAgIAAjdmVyc2lvbiAzMDAgZXMKICAgIHByZWNpc2lvbiBoaWdocCBmbG9hdDsKICAgIHVuaWZvcm0gc2FtcGxlcjJEIGZyYW1lOwogICAgdW5pZm9ybSBzYW1wbGVyMkQgbWFzazsKICAgIHVuaWZvcm0gc2FtcGxlcjJEIGJnOwogICAgdW5pZm9ybSBzYW1wbGVyMkQgd2F0ZXJNYXJrOwogICAgdW5pZm9ybSBzYW1wbGVyMkQgbGFzdE1hc2s7CiAgICB1bmlmb3JtIG1hdDQgdV9vZmZzZXRNYXRyaXg7CiAgICB1bmlmb3JtIHZlYzMgdV9jb2xvcjsKICAgIGluIHZlYzIgdl90ZXhDb29yZDsKICAgIG91dCB2ZWM0IG91dENvbG9yOwogICAgdmVjNCBHKHZlYzIgYyx2ZWMyIHMpewogICAgICByZXR1cm4gdGV4dHVyZShmcmFtZSx0ZXh0dXJlKG1hc2ssYytzKS5yPjAuMz9jOmMrcyk7CiAgICB9CiAgICB2b2lkIG1haW4oKSB7CiAgICAgIAAKICAgICAgdmVjMiBvZmZzZXRNYXNrVVYgPSAodV9vZmZzZXRNYXRyaXggKiB2ZWM0KGMsIDAsIDEpKS54eTsKICAgICAgZmxvYXQgaXNJbnNpZGVYID0gKG9mZnNldE1hc2tVVi54ID49IDAuMCkgJiYgKG9mZnNldE1hc2tVVi54IDw9IDEuMCkgPyAxLjAgOiAwLjA7CiAgICAgIGZsb2F0IGlzSW5zaWRlWSA9IChvZmZzZXRNYXNrVVYueSA+PSAwLjApICYmIChvZmZzZXRNYXNrVVYueSA8PSAxLjApID8gMS4wIDogMC4wOwogICAgICBmbG9hdCBpc0luc2lkZSA9IGlzSW5zaWRlWCAqIGlzSW5zaWRlWTsKICAgICAgZmxvYXQgbWFza2VkQWxwaGEgPSB0ZXh0dXJlKG1hc2ssIG9mZnNldE1hc2tVVikuciAqIGlzSW5zaWRlOwogICAgICBtYXNrZWRBbHBoYSA9IG1hc2tlZEFscGhhPDAuNT8yLjAqbWFza2VkQWxwaGEqbWFza2VkQWxwaGE6MS4wLTIuMCooMS4wLW1hc2tlZEFscGhhKSooMS4wLW1hc2tlZEFscGhhKTsKICAgICAgc3JjX2NvbG9yID0gdGV4dHVyZShmcmFtZSwgb2Zmc2V0TWFza1VWICwgaXNJbnNpZGUpOwogICAgICBvdXRDb2xvciA9IG1peCh0ZXh0dXJlKGJnLCBjKSwgc3JjX2NvbG9yLCBtYXNrZWRBbHBoYSk7CiAgICAACiAgICB2ZWM0IGcgPSB2ZWM0KDAuMCk7CiAgICAACiAgICAgIGMueSA9IDEuMCAtIGMueTsKICAgICAgdmVjNCBzcmNfY29sb3IgPSB0ZXh0dXJlKGZyYW1lLCBjKTsKICAgICAgZmxvYXQgYSA9IHRleHR1cmUobWFzaywgYykucjsKICAgICAgYSA9IGE8MC41PzIuMCphKmE6MS4wLTIuMCooMS4wLWEpKigxLjAtYSk7CiAgICAgIC8vIGZsb2F0IGEyID0gdGV4dHVyZShsYXN0TWFzaywgYykuYTsKICAgICAgLy8gYTIgPSBhMjwwLjU/Mi4wKmEyKmEyOjEuMC0yLjAqKDEuMC1hMikqKDEuMC1hMik7CiAgICAgIC8vIGZsb2F0IGRlbHRhID0gYSAtIGEyOwogICAgICAvLyBpZiAoZGVsdGEgPCAwLjI1ICYmIGRlbHRhID4gLTAuMjUpCiAgICAgIC8vIHsKICAgICAgLy8gICAgIGEgPSBhICsgMC41KmRlbHRhOwogICAgICAvLyB9CiAgICAgIAogICAgICB2ZWMyIG8gPSAxLjAgLyB2ZWMyKHRleHR1cmVTaXplKGZyYW1lLCAwKSk7CiAgICAACiAgICAgIG91dENvbG9yID0gZzsKICAAI3ZlcnNpb24gMzAwIGVzCmluIHZlYzIgYV9wb3NpdGlvbjsKaW4gdmVjMiBhX3RleENvb3JkOwoKdW5pZm9ybSBtYXQ0IHVfdGV4dHVyZU1hdHJpeDsKCm91dCB2ZWMyIHZfdGV4Q29vcmQ7CnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQoYV9wb3NpdGlvbi54LCBhX3Bvc2l0aW9uLnksIDAsIDEpOwogIHZfdGV4Q29vcmQgPSh1X3RleHR1cmVNYXRyaXggKiB2ZWM0KGFfdGV4Q29vcmQsIDAsIDEpKS54eTsKfQoAc2V0QmVhdXR5ICVmICVmICVmICVmICVmCgBvdXRDb2xvciA9IHNyY19jb2xvcjsKAG91dENvbG9yID0gbWl4KHZlYzQodV9jb2xvciwxLjApLHNyY19jb2xvcixhKTsKADZBbGxJbjEAAIAoAABfFgAAUDZBbGxJbjEAAAAABCkAAHAWAAAAAAAAaBYAAFBLNkFsbEluMQAAAAQpAACMFgAAAQAAAGgWAABpaQB2AHZpAHwWAADMFgAATjEwZW1zY3JpcHRlbjN2YWxFAACAKAAAuBYAAGlpaQB2aWlpAAAAALwnAAB8FgAAcCgAAHAoAABwKAAAcCgAAHAoAAB2aWlkZGRkZABBkC4LyAi8JwAAfBYAAHAoAABwKAAAcCgAAHAoAAB2aWlkZGRkALwnAAB8FgAAdmlpALwnAADMFgAAzBYAAHwWAADMFgAAHCgAALwnAADMFgAAoBcAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAACAKAAAYBcAAMwWAAC8JwAAzBYAAMwWAABOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQAAgCgAALgXAABOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQAAgCgAAAAYAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRHNOU18xMWNoYXJfdHJhaXRzSURzRUVOU185YWxsb2NhdG9ySURzRUVFRQAAAIAoAABIGAAATlN0M19fMjEyYmFzaWNfc3RyaW5nSURpTlNfMTFj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")||(Ve=ce,ce=I.locateFile?I.locateFile(Ve,f):f+Ve);var Ni=$=>{for(;$.length>0;)$.shift()(I)};I.noExitRuntime;function Co($){this.excPtr=$,this.ptr=$-24,this.set_type=function(j){RA[this.ptr+4>>2]=j},this.get_type=function(){return RA[this.ptr+4>>2]},this.set_destructor=function(j){RA[this.ptr+8>>2]=j},this.get_destructor=function(){return RA[this.ptr+8>>2]},this.set_caught=function(j){j=j?1:0,lA[this.ptr+12|0]=j},this.get_caught=function(){return lA[this.ptr+12|0]!=0},this.set_rethrown=function(j){j=j?1:0,lA[this.ptr+13|0]=j},this.get_rethrown=function(){return lA[this.ptr+13|0]!=0},this.init=function(j,vA){this.set_adjusted_ptr(0),this.set_type(j),this.set_destructor(vA)},this.set_adjusted_ptr=function(j){RA[this.ptr+16>>2]=j},this.get_adjusted_ptr=function(){return RA[this.ptr+16>>2]},this.get_exception_ptr=function(){if(ba(this.get_type()))return RA[this.excPtr>>2];var j=this.get_adjusted_ptr();return j!==0?j:this.excPtr}}var to,so,ks,Gi=$=>{for(var j="",vA=$;tA[vA];)j+=to[tA[vA++]];return j},As={},Lo={},$i={},zt=$=>{throw new so($)},Ao=$=>{throw new ks($)},Ri=($,j,vA)=>{function jA(Pe){var rt=vA(Pe);rt.length!==$.length&&Ao("Mismatched type converter count");for(var ht=0;ht<$.length;++ht)Es($[ht],rt[ht])}$.forEach(function(Pe){$i[Pe]=j});var oe=new Array(j.length),ye=[],He=0;j.forEach((Pe,rt)=>{Lo.hasOwnProperty(Pe)?oe[rt]=Lo[Pe]:(ye.push(Pe),As.hasOwnProperty(Pe)||(As[Pe]=[]),As[Pe].push(()=>{oe[rt]=Lo[Pe],++He===ye.length&&jA(oe)}))}),ye.length===0&&jA(oe)};function Es($,j,vA={}){if(!("argPackAdvance"in j))throw new TypeError("registerType registeredInstance requires argPackAdvance");return function(jA,oe,ye={}){var He=oe.name;if(jA||zt(`type "${He}" must have a positive integer typeid pointer`),Lo.hasOwnProperty(jA)){if(ye.ignoreDuplicateRegistrations)return;zt(`Cannot register type '${He}' twice`)}if(Lo[jA]=oe,delete $i[jA],As.hasOwnProperty(jA)){var Pe=As[jA];delete As[jA],Pe.forEach(rt=>rt())}}($,j,vA)}var VA,Ee=$=>{zt($.$$.ptrType.registeredClass.name+" instance already deleted")},Je=!1,Ut=$=>{},ot=$=>{$.count.value-=1,$.count.value===0&&(j=>{j.smartPtr?j.smartPtrType.rawDestructor(j.smartPtr):j.ptrType.registeredClass.rawDestructor(j.ptr)})($)},ut=($,j,vA)=>{if(j===vA)return $;if(vA.baseClass===void 0)return null;var jA=ut($,j,vA.baseClass);return jA===null?null:vA.downcast(jA)},$t={},Zt=()=>Object.keys(pt).length,Ge=()=>{var $=[];for(var j in pt)pt.hasOwnProperty(j)&&$.push(pt[j]);return $},Xe=[],se=()=>{for(;Xe.length;){var $=Xe.pop();$.$$.deleteScheduled=!1,$.delete()}},ve=$=>{VA=$,Xe.length&&VA&&VA(se)},pt={},mo=($,j)=>(j=((vA,jA)=>{for(jA===void 0&&zt("ptr should not be undefined");vA.baseClass;)jA=vA.upcast(jA),vA=vA.baseClass;return jA})($,j),pt[j]),No=($,j)=>(j.ptrType&&j.ptr||Ao("makeClassHandle requires ptr and ptrType"),!!j.smartPtrType!=!!j.smartPtr&&Ao("Both smartPtrType and smartPtr must be specified"),j.count={value:1},Go(Object.create($,{$$:{value:j}})));function no($){var j=this.getPointee($);if(!j)return this.destructor($),null;var vA=mo(this.registeredClass,j);if(vA!==void 0){if(vA.$$.count.value===0)return vA.$$.ptr=j,vA.$$.smartPtr=$,vA.clone();var jA=vA.clone();return this.destructor($),jA}function oe(){return this.isSmartPointer?No(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:j,smartPtrType:this,smartPtr:$}):No(this.registeredClass.instancePrototype,{ptrType:this,ptr:$})}var ye,He=this.registeredClass.getActualType(j),Pe=$t[He];if(!Pe)return oe.call(this);ye=this.isConst?Pe.constPointerType:Pe.pointerType;var rt=ut(j,this.registeredClass,ye.registeredClass);return rt===null?oe.call(this):this.isSmartPointer?No(ye.registeredClass.instancePrototype,{ptrType:ye,ptr:rt,smartPtrType:this,smartPtr:$}):No(ye.registeredClass.instancePrototype,{ptrType:ye,ptr:rt})}var Go=$=>typeof FinalizationRegistry>"u"?(Go=j=>j,$):(Je=new FinalizationRegistry(j=>{ot(j.$$)}),Ut=j=>Je.unregister(j),(Go=j=>{var vA=j.$$;if(vA.smartPtr){var jA={$$:vA};Je.register(j,jA,j)}return j})($));function An(){}var rn=($,j)=>Object.defineProperty(j,"name",{value:$}),ds=($,j,vA)=>{if($[j].overloadTable===void 0){var jA=$[j];$[j]=function(){return $[j].overloadTable.hasOwnProperty(arguments.length)||zt(`Function '${vA}' called with an invalid number of arguments (${arguments.length}) - expects one of (${$[j].overloadTable})!`),$[j].overloadTable[arguments.length].apply(this,arguments)},$[j].overloadTable=[],$[j].overloadTable[jA.argCount]=jA}};function an($,j,vA,jA,oe,ye,He,Pe){this.name=$,this.constructor=j,this.instancePrototype=vA,this.rawDestructor=jA,this.baseClass=oe,this.getActualType=ye,this.upcast=He,this.downcast=Pe,this.pureVirtualFunctions=[]}var So=($,j,vA)=>{for(;j!==vA;)j.upcast||zt(`Expected null or instance of ${vA.name}, got an instance of ${j.name}`),$=j.upcast($),j=j.baseClass;return $};function mA($,j){if(j===null)return this.isReference&&zt(`null is not a valid ${this.name}`),0;j.$$||zt(`Cannot pass "${as(j)}" as a ${this.name}`),j.$$.ptr||zt(`Cannot pass deleted object as a pointer of type ${this.name}`);var vA=j.$$.ptrType.registeredClass;return So(j.$$.ptr,vA,this.registeredClass)}function qn($,j){var vA;if(j===null)return this.isReference&&zt(`null is not a valid ${this.name}`),this.isSmartPointer?(vA=this.rawConstructor(),$!==null&&$.push(this.rawDestructor,vA),vA):0;j.$$||zt(`Cannot pass "${as(j)}" as a ${this.name}`),j.$$.ptr||zt(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&j.$$.ptrType.isConst&&zt(`Cannot convert argument of type ${j.$$.smartPtrType?j.$$.smartPtrType.name:j.$$.ptrType.name} to parameter type ${this.name}`);var jA=j.$$.ptrType.registeredClass;if(vA=So(j.$$.ptr,jA,this.registeredClass),this.isSmartPointer)switch(j.$$.smartPtr===void 0&&zt("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:j.$$.smartPtrType===this?vA=j.$$.smartPtr:zt(`Cannot convert argument of type ${j.$$.smartPtrType?j.$$.smartPtrType.name:j.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:vA=j.$$.smartPtr;break;case 2:if(j.$$.smartPtrType===this)vA=j.$$.smartPtr;else{var oe=j.clone();vA=this.rawShare(vA,cn.toHandle(()=>oe.delete())),$!==null&&$.push(this.rawDestructor,vA)}break;default:zt("Unsupporting sharing policy")}return vA}function mr($,j){if(j===null)return this.isReference&&zt(`null is not a valid ${this.name}`),0;j.$$||zt(`Cannot pass "${as(j)}" as a ${this.name}`),j.$$.ptr||zt(`Cannot pass deleted object as a pointer of type ${this.name}`),j.$$.ptrType.isConst&&zt(`Cannot convert argument of type ${j.$$.ptrType.name} to parameter type ${this.name}`);var vA=j.$$.ptrType.registeredClass;return So(j.$$.ptr,vA,this.registeredClass)}function Cs($){return this.fromWireType(RA[$>>2])}function Zr($,j,vA,jA,oe,ye,He,Pe,rt,ht,_t){this.name=$,this.registeredClass=j,this.isReference=vA,this.isConst=jA,this.isSmartPointer=oe,this.pointeeType=ye,this.sharingPolicy=He,this.rawGetPointee=Pe,this.rawConstructor=rt,this.rawShare=ht,this.rawDestructor=_t,oe||j.baseClass!==void 0?this.toWireType=qn:jA?(this.toWireType=mA,this.destructorFunction=null):(this.toWireType=mr,this.destructorFunction=null)}var Yi,Rs,rr=[],en=$=>{var j=rr[$];return j||($>=rr.length&&(rr.length=$+1),rr[$]=j=Yi.get($)),j},wn=($,j,vA)=>$.includes("j")?((jA,oe,ye)=>{var He=I["dynCall_"+jA];return ye&&ye.length?He.apply(null,[oe].concat(ye)):He.call(null,oe)})($,j,vA):en(j).apply(null,vA),jt=($,j)=>{var vA,jA,oe,ye=($=Gi($)).includes("j")?(vA=$,jA=j,oe=[],function(){return oe.length=0,Object.assign(oe,arguments),wn(vA,jA,oe)}):en(j);return typeof ye!="function"&&zt(`unknown function pointer with signature ${$}: ${j}`),ye},yg=$=>{var j=Ea($),vA=Gi(j);return yn(j),vA},Pn=($,j)=>{var vA=[],jA={};throw j.forEach(function oe(ye){jA[ye]||Lo[ye]||($i[ye]?$i[ye].forEach(oe):(vA.push(ye),jA[ye]=!0))}),new Rs(`${$}: `+vA.map(yg).join([", "]))},bn=($,j)=>{for(var vA=[],jA=0;jA<$;jA++)vA.push(RA[j+4*jA>>2]);return vA},Js=$=>{for(;$.length;){var j=$.pop();$.pop()(j)}};function fr($,j,vA,jA,oe,ye){var He=j.length;He<2&&zt("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var Pe=j[1]!==null&&vA!==null,rt=!1,ht=1;ht($ instanceof Object||zt(`${vA} with invalid "this": ${$}`),$ instanceof j.registeredClass.constructor||zt(`${vA} incompatible with "this" of type ${$.constructor.name}`),$.$$.ptr||zt(`cannot call emscripten binding method ${vA} on deleted object`),So($.$$.ptr,$.$$.ptrType.registeredClass,j.registeredClass));function yr(){this.allocated=[void 0],this.freelist=[]}var fo=new yr,gn=$=>{$>=fo.reserved&&--fo.get($).refcount===0&&fo.free($)},Ml=()=>{for(var $=0,j=fo.reserved;j($||zt("Cannot use deleted val. handle = "+$),fo.get($).value),toHandle:$=>{switch($){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:return fo.allocate({refcount:1,value:$})}}};function Dr($){return this.fromWireType(gA[$>>2])}var Us,Jc,fs,as=$=>{if($===null)return"null";var j=typeof $;return j==="object"||j==="array"||j==="function"?$.toString():""+$},wu=($,j)=>{switch(j){case 4:return function(vA){return this.fromWireType(HA[vA>>2])};case 8:return function(vA){return this.fromWireType(ZA[vA>>3])};default:throw new TypeError(`invalid float width (${j}): ${$}`)}},Wa=($,j,vA)=>{switch(j){case 1:return vA?jA=>lA[jA|0]:jA=>tA[jA|0];case 2:return vA?jA=>BA[jA>>1]:jA=>IA[jA>>1];case 4:return vA?jA=>gA[jA>>2]:jA=>RA[jA>>2];default:throw new TypeError(`invalid integer width (${j}): ${$}`)}},hs=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0,sg=($,j,vA)=>{for(var jA=j+vA,oe=j;$[oe]&&!(oe>=jA);)++oe;if(oe-j>16&&$.buffer&&hs)return hs.decode($.subarray(j,oe));for(var ye="";j>10,56320|1023&ht)}}else ye+=String.fromCharCode((31&He)<<6|Pe)}else ye+=String.fromCharCode(He)}return ye},qI=($,j)=>$?sg(tA,$,j):"",es=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0,eo=($,j)=>{for(var vA=$,jA=vA>>1,oe=jA+j/2;!(jA>=oe)&&IA[jA];)++jA;if((vA=jA<<1)-$>32&&es)return es.decode(tA.subarray($,vA));for(var ye="",He=0;!(He>=j/2);++He){var Pe=BA[$+2*He>>1];if(Pe==0)break;ye+=String.fromCharCode(Pe)}return ye},pc=($,j,vA)=>{if(vA===void 0&&(vA=2147483647),vA<2)return 0;for(var jA=j,oe=(vA-=2)<2*$.length?vA/2:$.length,ye=0;ye>1]=He,j+=2}return BA[j>>1]=0,j-jA},ng=$=>2*$.length,Dg=($,j)=>{for(var vA=0,jA="";!(vA>=j/4);){var oe=gA[$+4*vA>>2];if(oe==0)break;if(++vA,oe>=65536){var ye=oe-65536;jA+=String.fromCharCode(55296|ye>>10,56320|1023&ye)}else jA+=String.fromCharCode(oe)}return jA},ua=($,j,vA)=>{if(vA===void 0&&(vA=2147483647),vA<4)return 0;for(var jA=j,oe=jA+vA-4,ye=0;ye<$.length;++ye){var He=$.charCodeAt(ye);if(He>=55296&&He<=57343&&(He=65536+((1023&He)<<10)|1023&$.charCodeAt(++ye)),gA[j>>2]=He,(j+=4)+4>oe)break}return gA[j>>2]=0,j-jA},bo=$=>{for(var j=0,vA=0;vA<$.length;++vA){var jA=$.charCodeAt(vA);jA>=55296&&jA<=57343&&++vA,j+=4}return j},Xr=($,j)=>{var vA=Lo[$];return vA===void 0&&zt(j+" has unknown type "+yg($)),vA},To=($,j,vA)=>{var jA=[],oe=$.toWireType(jA,vA);return jA.length&&(RA[j>>2]=cn.toHandle(jA)),oe},Hc={},Kn=[],Hs=Reflect.construct,Sg=[null,[],[]],mc=($,j)=>{var vA=Sg[$];j===0||j===10?(($===1?N:L)(sg(vA,0)),vA.length=0):vA.push(j)};(()=>{for(var $=new Array(256),j=0;j<256;++j)$[j]=String.fromCharCode(j);to=$})(),so=I.BindingError=class extends Error{constructor($){super($),this.name="BindingError"}},ks=I.InternalError=class extends Error{constructor($){super($),this.name="InternalError"}},Object.assign(An.prototype,{isAliasOf($){if(!(this instanceof An)||!($ instanceof An))return!1;var j=this.$$.ptrType.registeredClass,vA=this.$$.ptr;$.$$=$.$$;for(var jA=$.$$.ptrType.registeredClass,oe=$.$$.ptr;j.baseClass;)vA=j.upcast(vA),j=j.baseClass;for(;jA.baseClass;)oe=jA.upcast(oe),jA=jA.baseClass;return j===jA&&vA===oe},clone(){if(this.$$.ptr||Ee(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var $,j=Go(Object.create(Object.getPrototypeOf(this),{$$:{value:($=this.$$,{count:$.count,deleteScheduled:$.deleteScheduled,preservePointerOnDelete:$.preservePointerOnDelete,ptr:$.ptr,ptrType:$.ptrType,smartPtr:$.smartPtr,smartPtrType:$.smartPtrType})}}));return j.$$.count.value+=1,j.$$.deleteScheduled=!1,j},delete(){this.$$.ptr||Ee(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&zt("Object already scheduled for deletion"),Ut(this),ot(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||Ee(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&zt("Object already scheduled for deletion"),Xe.push(this),Xe.length===1&&VA&&VA(se),this.$$.deleteScheduled=!0,this}}),I.getInheritedInstanceCount=Zt,I.getLiveInheritedInstances=Ge,I.flushPendingDeletes=se,I.setDelayFunction=ve,Object.assign(Zr.prototype,{getPointee($){return this.rawGetPointee&&($=this.rawGetPointee($)),$},destructor($){this.rawDestructor&&this.rawDestructor($)},argPackAdvance:8,readValueFromPointer:Cs,deleteObject($){$!==null&&$.delete()},fromWireType:no}),Rs=I.UnboundTypeError=(Us=Error,(fs=rn(Jc="UnboundTypeError",function($){this.name=Jc,this.message=$;var j=new Error($).stack;j!==void 0&&(this.stack=this.toString()+` +`+j.replace(/^Error(:[^\n]*)?\n/,""))})).prototype=Object.create(Us.prototype),fs.prototype.constructor=fs,fs.prototype.toString=function(){return this.message===void 0?this.name:`${this.name}: ${this.message}`},fs),Object.assign(yr.prototype,{get($){return this.allocated[$]},has($){return this.allocated[$]!==void 0},allocate($){var j=this.freelist.pop()||this.allocated.length;return this.allocated[j]=$,j},free($){this.allocated[$]=void 0,this.freelist.push($)}}),fo.allocated.push({value:void 0},{value:null},{value:!0},{value:!1}),fo.reserved=fo.allocated.length,I.count_emval_handles=Ml;var fn,Ga={w:($,j,vA)=>{throw new Co($).init(j,vA),$},q:($,j,vA,jA,oe)=>{},u:($,j,vA,jA)=>{Es($,{name:j=Gi(j),fromWireType:function(oe){return!!oe},toWireType:function(oe,ye){return ye?vA:jA},argPackAdvance:8,readValueFromPointer:function(oe){return this.fromWireType(tA[oe])},destructorFunction:null})},y:($,j,vA,jA,oe,ye,He,Pe,rt,ht,_t,Vt,ui)=>{_t=Gi(_t),ye=jt(oe,ye),Pe&&(Pe=jt(He,Pe)),ht&&(ht=jt(rt,ht)),ui=jt(Vt,ui);var It=(Yt=>{if(Yt===void 0)return"_unknown";var qi=(Yt=Yt.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return qi>=48&&qi<=57?`_${Yt}`:Yt})(_t);((Yt,qi,Wi)=>{I.hasOwnProperty(Yt)?(zt(`Cannot register public name '${Yt}' twice`),ds(I,Yt,Yt),I.hasOwnProperty(Wi)&&zt(`Cannot register multiple overloads of a function with the same number of arguments (${Wi})!`),I[Yt].overloadTable[Wi]=qi):I[Yt]=qi})(It,function(){Pn(`Cannot construct ${_t} due to unbound types`,[jA])}),Ri([$,j,vA],jA?[jA]:[],function(Yt){var qi,Wi;Yt=Yt[0],Wi=jA?(qi=Yt.registeredClass).instancePrototype:An.prototype;var qs=rn(_t,function(){if(Object.getPrototypeOf(this)!==vi)throw new so("Use 'new' to construct "+_t);if(zo.constructor_body===void 0)throw new so(_t+" has no accessible constructor");var Yn=zo.constructor_body[arguments.length];if(Yn===void 0)throw new so(`Tried to invoke ctor of ${_t} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(zo.constructor_body).toString()}) parameters instead!`);return Yn.apply(this,arguments)}),vi=Object.create(Wi,{constructor:{value:qs}});qs.prototype=vi;var zo=new an(_t,qs,vi,ui,qi,ye,Pe,ht);zo.baseClass&&(zo.baseClass.__derivedClasses===void 0&&(zo.baseClass.__derivedClasses=[]),zo.baseClass.__derivedClasses.push(zo));var Mg=new Zr(_t,zo,!0,!1,!1),ar=new Zr(_t+"*",zo,!1,!1,!1),Sr=new Zr(_t+" const*",zo,!1,!0,!1);return $t[$]={pointerType:ar,constPointerType:Sr},((Yn,vl,Ks)=>{I.hasOwnProperty(Yn)||Ao("Replacing nonexistant public symbol"),I[Yn].overloadTable!==void 0&&Ks!==void 0?I[Yn].overloadTable[Ks]=vl:(I[Yn]=vl,I[Yn].argCount=Ks)})(It,qs),[Mg,ar,Sr]})},x:($,j,vA,jA,oe,ye)=>{var He=bn(j,vA);oe=jt(jA,oe),Ri([],[$],function(Pe){var rt=`constructor ${(Pe=Pe[0]).name}`;if(Pe.registeredClass.constructor_body===void 0&&(Pe.registeredClass.constructor_body=[]),Pe.registeredClass.constructor_body[j-1]!==void 0)throw new so(`Cannot register multiple constructors with identical number of parameters (${j-1}) for class '${Pe.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return Pe.registeredClass.constructor_body[j-1]=()=>{Pn(`Cannot construct ${Pe.name} due to unbound types`,He)},Ri([],He,ht=>(ht.splice(1,0,null),Pe.registeredClass.constructor_body[j-1]=fr(rt,ht,null,oe,ye),[])),[]})},i:($,j,vA,jA,oe,ye,He,Pe,rt)=>{var ht=bn(vA,jA);j=(_t=>{const Vt=(_t=_t.trim()).indexOf("(");return Vt!==-1?_t.substr(0,Vt):_t})(j=Gi(j)),ye=jt(oe,ye),Ri([],[$],function(_t){var Vt=`${(_t=_t[0]).name}.${j}`;function ui(){Pn(`Cannot call ${Vt} due to unbound types`,ht)}j.startsWith("@@")&&(j=Symbol[j.substring(2)]),Pe&&_t.registeredClass.pureVirtualFunctions.push(j);var It=_t.registeredClass.instancePrototype,Yt=It[j];return Yt===void 0||Yt.overloadTable===void 0&&Yt.className!==_t.name&&Yt.argCount===vA-2?(ui.argCount=vA-2,ui.className=_t.name,It[j]=ui):(ds(It,j,Vt),It[j].overloadTable[vA-2]=ui),Ri([],ht,function(qi){var Wi=fr(Vt,qi,_t,ye,He);return It[j].overloadTable===void 0?(Wi.argCount=vA-2,It[j]=Wi):It[j].overloadTable[vA-2]=Wi,[]}),[]})},k:($,j,vA,jA,oe,ye,He,Pe,rt,ht)=>{j=Gi(j),oe=jt(jA,oe),Ri([],[$],function(_t){var Vt=`${(_t=_t[0]).name}.${j}`,ui={get(){Pn(`Cannot access ${Vt} due to unbound types`,[vA,He])},enumerable:!0,configurable:!0};return ui.set=rt?()=>Pn(`Cannot access ${Vt} due to unbound types`,[vA,He]):It=>zt(Vt+" is a read-only property"),Object.defineProperty(_t.registeredClass.instancePrototype,j,ui),Ri([],rt?[vA,He]:[vA],function(It){var Yt=It[0],qi={get(){var qs=xn(this,_t,Vt+" getter");return Yt.fromWireType(oe(ye,qs))},enumerable:!0};if(rt){rt=jt(Pe,rt);var Wi=It[1];qi.set=function(qs){var vi=xn(this,_t,Vt+" setter"),zo=[];rt(ht,vi,Wi.toWireType(zo,qs)),Js(zo)}}return Object.defineProperty(_t.registeredClass.instancePrototype,j,qi),[]}),[]})},t:($,j)=>{Es($,{name:j=Gi(j),fromWireType:vA=>{var jA=cn.toValue(vA);return gn(vA),jA},toWireType:(vA,jA)=>cn.toHandle(jA),argPackAdvance:8,readValueFromPointer:Dr,destructorFunction:null})},p:($,j,vA)=>{Es($,{name:j=Gi(j),fromWireType:jA=>jA,toWireType:(jA,oe)=>oe,argPackAdvance:8,readValueFromPointer:wu(j,vA),destructorFunction:null})},g:($,j,vA,jA,oe)=>{j=Gi(j);var ye=rt=>rt;if(jA===0){var He=32-8*vA;ye=rt=>rt<>>He}var Pe=j.includes("unsigned");Es($,{name:j,fromWireType:ye,toWireType:Pe?function(rt,ht){return this.name,ht>>>0}:function(rt,ht){return this.name,ht},argPackAdvance:8,readValueFromPointer:Wa(j,vA,jA!==0),destructorFunction:null})},a:($,j,vA)=>{var jA=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][j];function oe(ye){var He=RA[ye>>2],Pe=RA[ye+4>>2];return new jA(lA.buffer,Pe,He)}Es($,{name:vA=Gi(vA),fromWireType:oe,argPackAdvance:8,readValueFromPointer:oe},{ignoreDuplicateRegistrations:!0})},o:($,j)=>{var vA=(j=Gi(j))==="std::string";Es($,{name:j,fromWireType(jA){var oe,ye=RA[jA>>2],He=jA+4;if(vA)for(var Pe=He,rt=0;rt<=ye;++rt){var ht=He+rt;if(rt==ye||tA[ht]==0){var _t=qI(Pe,ht-Pe);oe===void 0?oe=_t:(oe+="\0",oe+=_t),Pe=ht+1}}else{var Vt=new Array(ye);for(rt=0;rt{for(var ui=0,It=0;It=55296&&Yt<=57343?(ui+=4,++It):ui+=3}return ui})(oe):oe.length;var Pe=ys(4+ye+1),rt=Pe+4;if(RA[Pe>>2]=ye,vA&&He)((Vt,ui,It,Yt)=>{if(!(Yt>0))return 0;for(var qi=It,Wi=It+Yt-1,qs=0;qs=55296&&vi<=57343&&(vi=65536+((1023&vi)<<10)|1023&Vt.charCodeAt(++qs)),vi<=127){if(It>=Wi)break;ui[It++]=vi}else if(vi<=2047){if(It+1>=Wi)break;ui[It++]=192|vi>>6,ui[It++]=128|63&vi}else if(vi<=65535){if(It+2>=Wi)break;ui[It++]=224|vi>>12,ui[It++]=128|vi>>6&63,ui[It++]=128|63&vi}else{if(It+3>=Wi)break;ui[It++]=240|vi>>18,ui[It++]=128|vi>>12&63,ui[It++]=128|vi>>6&63,ui[It++]=128|63&vi}}ui[It]=0})(oe,tA,rt,ye+1);else if(He)for(var ht=0;ht255&&(yn(rt),zt("String has UTF-16 code units that do not fit in 8 bits")),tA[rt+ht]=_t}else for(ht=0;ht{var jA,oe,ye,He,Pe;vA=Gi(vA),j===2?(jA=eo,oe=pc,He=ng,ye=()=>IA,Pe=1):j===4&&(jA=Dg,oe=ua,He=bo,ye=()=>RA,Pe=2),Es($,{name:vA,fromWireType:rt=>{for(var ht,_t=RA[rt>>2],Vt=ye(),ui=rt+4,It=0;It<=_t;++It){var Yt=rt+4+It*j;if(It==_t||Vt[Yt>>Pe]==0){var qi=jA(ui,Yt-ui);ht===void 0?ht=qi:(ht+="\0",ht+=qi),ui=Yt+j}}return yn(rt),ht},toWireType:(rt,ht)=>{typeof ht!="string"&&zt(`Cannot pass non-string to C++ string type ${vA}`);var _t=He(ht),Vt=ys(4+_t+j);return RA[Vt>>2]=_t>>Pe,oe(ht,Vt+4,_t+j),rt!==null&&rt.push(yn,Vt),Vt},argPackAdvance:8,readValueFromPointer:Dr,destructorFunction(rt){yn(rt)}})},v:($,j)=>{Es($,{isVoid:!0,name:j=Gi(j),argPackAdvance:0,fromWireType:()=>{},toWireType:(vA,jA)=>{}})},j:($,j,vA)=>($=cn.toValue($),j=Xr(j,"emval::as"),To(j,vA,$)),e:($,j,vA,jA,oe)=>{var ye,He;return($=Kn[$])(j=cn.toValue(j),j[vA=(He=Hc[ye=vA])===void 0?Gi(ye):He],jA,oe)},d:gn,f:($,j,vA)=>{var jA=((ht,_t)=>{for(var Vt=new Array(ht),ui=0;ui>2],"parameter "+ui);return Vt})($,j),oe=jA.shift();$--;var ye,He,Pe=new Array($),rt=`methodCaller<(${jA.map(ht=>ht.name).join(", ")}) => ${oe.name}>`;return ye=rn(rt,(ht,_t,Vt,ui)=>{for(var It=0,Yt=0;Yt<$;++Yt)Pe[Yt]=jA[Yt].readValueFromPointer(ui+It),It+=jA[Yt].argPackAdvance;var qi=vA===1?Hs(_t,Pe):_t.apply(ht,Pe);for(Yt=0;Yt<$;++Yt)jA[Yt].deleteObject&&jA[Yt].deleteObject(Pe[Yt]);return To(oe,Vt,qi)}),He=Kn.length,Kn.push(ye),He},c:$=>{$>4&&(fo.get($).refcount+=1)},b:$=>{var j=cn.toValue($);Js(j),gn($)},h:($,j)=>{var vA=($=Xr($,"_emval_take_value")).readValueFromPointer(j);return cn.toHandle(vA)},m:()=>{ct("")},s:($,j,vA)=>tA.copyWithin($,j,j+vA),r:$=>{tA.length,ct("OOM")},n:($,j,vA,jA)=>{for(var oe=0,ye=0;ye>2],Pe=RA[j+4>>2];j+=8;for(var rt=0;rt>2]=oe,0}},In=function(){var $={a:Ga};function j(vA,jA){var oe,ye;return In=vA.exports,_=In.z,oe=_.buffer,I.HEAP8=lA=new Int8Array(oe),I.HEAP16=BA=new Int16Array(oe),I.HEAPU8=tA=new Uint8Array(oe),I.HEAPU16=IA=new Uint16Array(oe),I.HEAP32=gA=new Int32Array(oe),I.HEAPU32=RA=new Uint32Array(oe),I.HEAPF32=HA=new Float32Array(oe),I.HEAPF64=ZA=new Float64Array(oe),Yi=In.C,ye=In.A,ae.unshift(ye),function(){if(lt--,I.monitorRunDependencies&&I.monitorRunDependencies(lt),lt==0&&wt){var He=wt;wt=null,He()}}(),In}if(lt++,I.monitorRunDependencies&&I.monitorRunDependencies(lt),I.instantiateWasm)try{return I.instantiateWasm($,j)}catch(vA){L(`Module.instantiateWasm callback failed with error: ${vA}`),c(vA)}return oi(0,ce,$,function(vA){j(vA.instance)}).catch(c),{}}(),ys=$=>(ys=In.B)($),Ea=$=>(Ea=In.D)($),yn=$=>(yn=In.E)($),ba=$=>(ba=In.F)($);I.dynCall_jiji=($,j,vA,jA,oe)=>(I.dynCall_jiji=In.G)($,j,vA,jA,oe),I._vertexShaderSource=10688;function Sa(){function $(){fn||(fn=!0,I.calledRun=!0,KA||(Ni(ae),n(I),I.onRuntimeInitialized&&I.onRuntimeInitialized(),function(){if(I.postRun)for(typeof I.postRun=="function"&&(I.postRun=[I.postRun]);I.postRun.length;)We(I.postRun.shift());Ni(gt)}()))}lt>0||(function(){if(I.preRun)for(typeof I.preRun=="function"&&(I.preRun=[I.preRun]);I.preRun.length;)dt(I.preRun.shift());Ni(me)}(),lt>0||(I.setStatus?(I.setStatus("Running..."),setTimeout(function(){setTimeout(function(){I.setStatus("")},1),$()},1)):$()))}if(wt=function $(){fn||Sa(),fn||(wt=$)},I.preInit)for(typeof I.preInit=="function"&&(I.preInit=[I.preInit]);I.preInit.length>0;)I.preInit.pop()();return Sa(),i.ready}})(),ZaA=zaA,Cm=typeof navigator>"u"?"":navigator.userAgent,Ys=t=>new RegExp(t,"i").test(Cm),Bc=t=>{if(Ys(t)){const i=new RegExp(`${t}\\/([\\d.]+)`),n=Cm.match(i);if(n&&n[1])return n[1]}return""},vV=t=>{if(Ys(t)){const i=new RegExp(`${t}\\/(\\d+)`),n=Cm.match(i);if(n&&n[1])return parseFloat(n[1])}return NaN},SZ=/AppleWebKit\/([\d.]+)/i.exec(Cm);SZ&&parseFloat(SZ[1]);var hX=Ys("iPad"),BX=typeof navigator<"u"&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2&&Ys("Macintosh"),QX=Ys("iPhone")&&!hX,XaA=Ys("iPod"),pX=QX||hX||XaA||BX,a4=Ys("Android"),$aA=function(){if(a4){const t=Cm.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);if(t){const i=t[1]&&parseFloat(t[1]),n=t[2]&&parseFloat(t[2]);if(i&&n)return parseFloat(`${t[1]}.${t[2]}`);if(i)return i}}return NaN}();a4&&Ys("webkit")&&$aA<2.3;var AgA=Ys("Firefox"),egA=Bc("Firefox");vV("Firefox");var mX=Ys("Edge"),tgA=Bc("Edge"),fX=Ys("Edg"),igA=Bc("Edg");vV("Edg");var yX=Ys("SogouMobileBrowser"),ogA=Bc("SogouMobileBrowser"),DX=Ys("MetaSr\\s"),sgA=Bc("MetaSr\\s"),Ov=Ys("TBS"),ngA=Bc("TBS"),SX=Ys("XWEB"),rgA=Bc("XWEB");Ys("MSIE\\s8\\.0");var agA=Ys("MSIE\\/\\d+");(function(){if(agA){const t=/MSIE\s(\d+)\.\d/.exec(Cm);let i=t&&parseFloat(t[1]);return!i&&/Trident\/7.0/i.test(Cm)&&/rv:11.0/.test(Cm)&&(i=11),i}return NaN})();var ggA=Ys("(micromessenger|webbrowser)"),cgA=Bc("MicroMessenger"),g4=!Ov&&Ys("MQQBrowser")&&Ys("COVC"),c4=!Ov&&Ys("MQQBrowser")&&!Ys("COVC"),MZ=c4||g4?Bc("MQQBrowser"):"",MX=!Ov&&Ys(" QQBrowser"),lgA=Bc(" QQBrowser"),vX=!Ov&&Ys("QQBrowserLite"),IgA=Bc("QQBrowserLite"),RX=!Ov&&Ys("MQBHD"),ugA=Bc("MQBHD");Ys("Windows");!pX&&Ys("MAC OS X");!a4&&Ys("Linux");Ys("CrOS");Ys("MicroMessenger");Ys("UCBrowser");Ys("Electron");var wX=Ys("MiuiBrowser"),EgA=Bc("MiuiBrowser"),_X=Ys("HuaweiBrowser");Ys("Huawei")||Ys("HUAWEI");Ys("Honor")||Ys("HONOR");var dgA=Bc("HuaweiBrowser"),TX=Ys("SamsungBrowser"),CgA=Bc("SamsungBrowser"),NX=Ys("HeyTapBrowser"),hgA=Bc("HeyTapBrowser"),GX=Ys("VivoBrowser"),BgA=Bc("VivoBrowser");Ys("OpenHarmony");Bc("OpenHarmony");var QgA=()=>vV("Chrome"),vZ=Ys("CriOS"),bX=Ys("Chrome"),pgA=!mX&&!DX&&!yX&&!Ov&&!SX&&!fX&&!MX&&!wX&&!_X&&!TX&&!NX&&!GX&&bX;Ys("HeadlessChrome");var mgA=QgA(),fgA=Bc("Chrome");vV("Electron");var ygA=!bX&&!c4&&!g4&&!vX&&!RX&&Ys("Safari"),kX=Bc("Version"),LX=(()=>{if(BX)return kX;if(pX){const t=Cm.match(/OS (\d+)_(\d+)/i);if(t&&t[1]){let i=t[1];return t[2]&&(i+=`.${t[2]}`),i}}return""})();Number(LX.split(".")[0]);(()=>{const t=Number(LX.split(".")[0]);return t===14||t===13})();DgA();function DgA(){const t=new Map([[AgA,["Firefox",egA]],[fX,["Edg",igA]],[pgA,["Chrome",fgA]],[vZ,["ChiOS",Bc("CriOS")]],[ygA&&!vZ,["Safari",kX]],[Ov,["TBS",ngA]],[SX,["XWEB",rgA]],[ggA&&QX,["WeChat",cgA]],[MX,["QQ(Win)",lgA]],[c4,["QQ(Mobile)",MZ]],[g4,["QQ(Mobile X5)",MZ]],[vX,["QQ(Mac)",IgA]],[RX,["QQ(iPad)",ugA]],[wX,["MI",EgA]],[_X,["HW",dgA]],[TX,["Samsung",CgA]],[NX,["OPPO",hgA]],[GX,["VIVO",BgA]],[mX,["EDGE",tgA]],[yX,["SogouMobile",ogA]],[DX,["Sogou",sgA]]]);let i="unknown",n="unknown";return t.has(!0)&&([i,n]=t.get(!0)),{name:i,version:n}}var dc=1e-6,cT=typeof Float32Array<"u"?Float32Array:Array,UX={};function SgA(){var t=new cT(16);return cT!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t}function MgA(t){var i=new cT(16);return i[0]=t[0],i[1]=t[1],i[2]=t[2],i[3]=t[3],i[4]=t[4],i[5]=t[5],i[6]=t[6],i[7]=t[7],i[8]=t[8],i[9]=t[9],i[10]=t[10],i[11]=t[11],i[12]=t[12],i[13]=t[13],i[14]=t[14],i[15]=t[15],i}function vgA(t,i){return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],t}function RgA(t,i,n,c,I,C,f,w,_,N,L,q,lA,tA,BA,IA){var gA=new cT(16);return gA[0]=t,gA[1]=i,gA[2]=n,gA[3]=c,gA[4]=I,gA[5]=C,gA[6]=f,gA[7]=w,gA[8]=_,gA[9]=N,gA[10]=L,gA[11]=q,gA[12]=lA,gA[13]=tA,gA[14]=BA,gA[15]=IA,gA}function wgA(t,i,n,c,I,C,f,w,_,N,L,q,lA,tA,BA,IA,gA){return t[0]=i,t[1]=n,t[2]=c,t[3]=I,t[4]=C,t[5]=f,t[6]=w,t[7]=_,t[8]=N,t[9]=L,t[10]=q,t[11]=lA,t[12]=tA,t[13]=BA,t[14]=IA,t[15]=gA,t}function FX(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function _gA(t,i){if(t===i){var n=i[1],c=i[2],I=i[3],C=i[6],f=i[7],w=i[11];t[1]=i[4],t[2]=i[8],t[3]=i[12],t[4]=n,t[6]=i[9],t[7]=i[13],t[8]=c,t[9]=C,t[11]=i[14],t[12]=I,t[13]=f,t[14]=w}else t[0]=i[0],t[1]=i[4],t[2]=i[8],t[3]=i[12],t[4]=i[1],t[5]=i[5],t[6]=i[9],t[7]=i[13],t[8]=i[2],t[9]=i[6],t[10]=i[10],t[11]=i[14],t[12]=i[3],t[13]=i[7],t[14]=i[11],t[15]=i[15];return t}function TgA(t,i){var n=i[0],c=i[1],I=i[2],C=i[3],f=i[4],w=i[5],_=i[6],N=i[7],L=i[8],q=i[9],lA=i[10],tA=i[11],BA=i[12],IA=i[13],gA=i[14],RA=i[15],HA=n*w-c*f,ZA=n*_-I*f,KA=n*N-C*f,me=c*_-I*w,ae=c*N-C*w,gt=I*N-C*_,dt=L*IA-q*BA,We=L*gA-lA*BA,lt=L*RA-tA*BA,wt=q*gA-lA*IA,ct=q*RA-tA*IA,ce=lA*RA-tA*gA,Ve=HA*ce-ZA*ct+KA*wt+me*lt-ae*We+gt*dt;return Ve?(Ve=1/Ve,t[0]=(w*ce-_*ct+N*wt)*Ve,t[1]=(I*ct-c*ce-C*wt)*Ve,t[2]=(IA*gt-gA*ae+RA*me)*Ve,t[3]=(lA*ae-q*gt-tA*me)*Ve,t[4]=(_*lt-f*ce-N*We)*Ve,t[5]=(n*ce-I*lt+C*We)*Ve,t[6]=(gA*KA-BA*gt-RA*ZA)*Ve,t[7]=(L*gt-lA*KA+tA*ZA)*Ve,t[8]=(f*ct-w*lt+N*dt)*Ve,t[9]=(c*lt-n*ct-C*dt)*Ve,t[10]=(BA*ae-IA*KA+RA*HA)*Ve,t[11]=(q*KA-L*ae-tA*HA)*Ve,t[12]=(w*We-f*wt-_*dt)*Ve,t[13]=(n*wt-c*We+I*dt)*Ve,t[14]=(IA*ZA-BA*me-gA*HA)*Ve,t[15]=(L*me-q*ZA+lA*HA)*Ve,t):null}function NgA(t,i){var n=i[0],c=i[1],I=i[2],C=i[3],f=i[4],w=i[5],_=i[6],N=i[7],L=i[8],q=i[9],lA=i[10],tA=i[11],BA=i[12],IA=i[13],gA=i[14],RA=i[15],HA=n*w-c*f,ZA=n*_-I*f,KA=n*N-C*f,me=c*_-I*w,ae=c*N-C*w,gt=I*N-C*_,dt=L*IA-q*BA,We=L*gA-lA*BA,lt=L*RA-tA*BA,wt=q*gA-lA*IA,ct=q*RA-tA*IA,ce=lA*RA-tA*gA;return t[0]=w*ce-_*ct+N*wt,t[1]=I*ct-c*ce-C*wt,t[2]=IA*gt-gA*ae+RA*me,t[3]=lA*ae-q*gt-tA*me,t[4]=_*lt-f*ce-N*We,t[5]=n*ce-I*lt+C*We,t[6]=gA*KA-BA*gt-RA*ZA,t[7]=L*gt-lA*KA+tA*ZA,t[8]=f*ct-w*lt+N*dt,t[9]=c*lt-n*ct-C*dt,t[10]=BA*ae-IA*KA+RA*HA,t[11]=q*KA-L*ae-tA*HA,t[12]=w*We-f*wt-_*dt,t[13]=n*wt-c*We+I*dt,t[14]=IA*ZA-BA*me-gA*HA,t[15]=L*me-q*ZA+lA*HA,t}function GgA(t){var i=t[0],n=t[1],c=t[2],I=t[3],C=t[4],f=t[5],w=t[6],_=t[7],N=t[8],L=t[9],q=t[10],lA=t[11],tA=t[12],BA=t[13],IA=t[14],gA=i*f-n*C,RA=i*w-c*C,HA=n*w-c*f,ZA=N*BA-L*tA,KA=N*IA-q*tA,me=L*IA-q*BA;return _*(i*me-n*KA+c*ZA)-I*(C*me-f*KA+w*ZA)+t[15]*(N*HA-L*RA+q*gA)-lA*(tA*HA-BA*RA+IA*gA)}function OX(t,i,n){var c=i[0],I=i[1],C=i[2],f=i[3],w=i[4],_=i[5],N=i[6],L=i[7],q=i[8],lA=i[9],tA=i[10],BA=i[11],IA=i[12],gA=i[13],RA=i[14],HA=i[15],ZA=n[0],KA=n[1],me=n[2],ae=n[3];return t[0]=ZA*c+KA*w+me*q+ae*IA,t[1]=ZA*I+KA*_+me*lA+ae*gA,t[2]=ZA*C+KA*N+me*tA+ae*RA,t[3]=ZA*f+KA*L+me*BA+ae*HA,ZA=n[4],KA=n[5],me=n[6],ae=n[7],t[4]=ZA*c+KA*w+me*q+ae*IA,t[5]=ZA*I+KA*_+me*lA+ae*gA,t[6]=ZA*C+KA*N+me*tA+ae*RA,t[7]=ZA*f+KA*L+me*BA+ae*HA,ZA=n[8],KA=n[9],me=n[10],ae=n[11],t[8]=ZA*c+KA*w+me*q+ae*IA,t[9]=ZA*I+KA*_+me*lA+ae*gA,t[10]=ZA*C+KA*N+me*tA+ae*RA,t[11]=ZA*f+KA*L+me*BA+ae*HA,ZA=n[12],KA=n[13],me=n[14],ae=n[15],t[12]=ZA*c+KA*w+me*q+ae*IA,t[13]=ZA*I+KA*_+me*lA+ae*gA,t[14]=ZA*C+KA*N+me*tA+ae*RA,t[15]=ZA*f+KA*L+me*BA+ae*HA,t}function bgA(t,i,n){var c,I,C,f,w,_,N,L,q,lA,tA,BA,IA=n[0],gA=n[1],RA=n[2];return i===t?(t[12]=i[0]*IA+i[4]*gA+i[8]*RA+i[12],t[13]=i[1]*IA+i[5]*gA+i[9]*RA+i[13],t[14]=i[2]*IA+i[6]*gA+i[10]*RA+i[14],t[15]=i[3]*IA+i[7]*gA+i[11]*RA+i[15]):(c=i[0],I=i[1],C=i[2],f=i[3],w=i[4],_=i[5],N=i[6],L=i[7],q=i[8],lA=i[9],tA=i[10],BA=i[11],t[0]=c,t[1]=I,t[2]=C,t[3]=f,t[4]=w,t[5]=_,t[6]=N,t[7]=L,t[8]=q,t[9]=lA,t[10]=tA,t[11]=BA,t[12]=c*IA+w*gA+q*RA+i[12],t[13]=I*IA+_*gA+lA*RA+i[13],t[14]=C*IA+N*gA+tA*RA+i[14],t[15]=f*IA+L*gA+BA*RA+i[15]),t}function kgA(t,i,n){var c=n[0],I=n[1],C=n[2];return t[0]=i[0]*c,t[1]=i[1]*c,t[2]=i[2]*c,t[3]=i[3]*c,t[4]=i[4]*I,t[5]=i[5]*I,t[6]=i[6]*I,t[7]=i[7]*I,t[8]=i[8]*C,t[9]=i[9]*C,t[10]=i[10]*C,t[11]=i[11]*C,t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],t}function LgA(t,i,n,c){var I,C,f,w,_,N,L,q,lA,tA,BA,IA,gA,RA,HA,ZA,KA,me,ae,gt,dt,We,lt,wt,ct=c[0],ce=c[1],Ve=c[2],Dt=Math.sqrt(ct*ct+ce*ce+Ve*Ve);return Dt0?(n[0]=2*(w*f+L*c+_*C-N*I)/q,n[1]=2*(_*f+L*I+N*c-w*C)/q,n[2]=2*(N*f+L*C+w*I-_*c)/q):(n[0]=2*(w*f+L*c+_*C-N*I),n[1]=2*(_*f+L*I+N*c-w*C),n[2]=2*(N*f+L*C+w*I-_*c)),PX(t,i,n),t}function KgA(t,i){return t[0]=i[12],t[1]=i[13],t[2]=i[14],t}function xX(t,i){var n=i[0],c=i[1],I=i[2],C=i[4],f=i[5],w=i[6],_=i[8],N=i[9],L=i[10];return t[0]=Math.sqrt(n*n+c*c+I*I),t[1]=Math.sqrt(C*C+f*f+w*w),t[2]=Math.sqrt(_*_+N*N+L*L),t}function jgA(t,i){var n=new cT(3);xX(n,i);var c=1/n[0],I=1/n[1],C=1/n[2],f=i[0]*c,w=i[1]*I,_=i[2]*C,N=i[4]*c,L=i[5]*I,q=i[6]*C,lA=i[8]*c,tA=i[9]*I,BA=i[10]*C,IA=f+L+BA,gA=0;return IA>0?(gA=2*Math.sqrt(IA+1),t[3]=.25*gA,t[0]=(q-tA)/gA,t[1]=(lA-_)/gA,t[2]=(w-N)/gA):f>L&&f>BA?(gA=2*Math.sqrt(1+f-L-BA),t[3]=(q-tA)/gA,t[0]=.25*gA,t[1]=(w+N)/gA,t[2]=(lA+_)/gA):L>BA?(gA=2*Math.sqrt(1+L-f-BA),t[3]=(lA-_)/gA,t[0]=(w+N)/gA,t[1]=.25*gA,t[2]=(q+tA)/gA):(gA=2*Math.sqrt(1+BA-f-L),t[3]=(w-N)/gA,t[0]=(lA+_)/gA,t[1]=(q+tA)/gA,t[2]=.25*gA),t}function WgA(t,i,n,c){i[0]=c[12],i[1]=c[13],i[2]=c[14];var I=c[0],C=c[1],f=c[2],w=c[4],_=c[5],N=c[6],L=c[8],q=c[9],lA=c[10];n[0]=Math.sqrt(I*I+C*C+f*f),n[1]=Math.sqrt(w*w+_*_+N*N),n[2]=Math.sqrt(L*L+q*q+lA*lA);var tA=1/n[0],BA=1/n[1],IA=1/n[2],gA=I*tA,RA=C*BA,HA=f*IA,ZA=w*tA,KA=_*BA,me=N*IA,ae=L*tA,gt=q*BA,dt=lA*IA,We=gA+KA+dt,lt=0;return We>0?(lt=2*Math.sqrt(We+1),t[3]=.25*lt,t[0]=(me-gt)/lt,t[1]=(ae-HA)/lt,t[2]=(RA-ZA)/lt):gA>KA&&gA>dt?(lt=2*Math.sqrt(1+gA-KA-dt),t[3]=(me-gt)/lt,t[0]=.25*lt,t[1]=(RA+ZA)/lt,t[2]=(ae+HA)/lt):KA>dt?(lt=2*Math.sqrt(1+KA-gA-dt),t[3]=(ae-HA)/lt,t[0]=(RA+ZA)/lt,t[1]=.25*lt,t[2]=(me+gt)/lt):(lt=2*Math.sqrt(1+dt-gA-KA),t[3]=(RA-ZA)/lt,t[0]=(ae+HA)/lt,t[1]=(me+gt)/lt,t[2]=.25*lt),t}function zgA(t,i,n,c){var I=i[0],C=i[1],f=i[2],w=i[3],_=I+I,N=C+C,L=f+f,q=I*_,lA=I*N,tA=I*L,BA=C*N,IA=C*L,gA=f*L,RA=w*_,HA=w*N,ZA=w*L,KA=c[0],me=c[1],ae=c[2];return t[0]=(1-(BA+gA))*KA,t[1]=(lA+ZA)*KA,t[2]=(tA-HA)*KA,t[3]=0,t[4]=(lA-ZA)*me,t[5]=(1-(q+gA))*me,t[6]=(IA+RA)*me,t[7]=0,t[8]=(tA+HA)*ae,t[9]=(IA-RA)*ae,t[10]=(1-(q+BA))*ae,t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t}function ZgA(t,i,n,c,I){var C=i[0],f=i[1],w=i[2],_=i[3],N=C+C,L=f+f,q=w+w,lA=C*N,tA=C*L,BA=C*q,IA=f*L,gA=f*q,RA=w*q,HA=_*N,ZA=_*L,KA=_*q,me=c[0],ae=c[1],gt=c[2],dt=I[0],We=I[1],lt=I[2],wt=(1-(IA+RA))*me,ct=(tA+KA)*me,ce=(BA-ZA)*me,Ve=(tA-KA)*ae,Dt=(1-(lA+RA))*ae,ti=(gA+HA)*ae,Pt=(BA+ZA)*gt,oi=(gA-HA)*gt,Ni=(1-(lA+IA))*gt;return t[0]=wt,t[1]=ct,t[2]=ce,t[3]=0,t[4]=Ve,t[5]=Dt,t[6]=ti,t[7]=0,t[8]=Pt,t[9]=oi,t[10]=Ni,t[11]=0,t[12]=n[0]+dt-(wt*dt+Ve*We+Pt*lt),t[13]=n[1]+We-(ct*dt+Dt*We+oi*lt),t[14]=n[2]+lt-(ce*dt+ti*We+Ni*lt),t[15]=1,t}function XgA(t,i){var n=i[0],c=i[1],I=i[2],C=i[3],f=n+n,w=c+c,_=I+I,N=n*f,L=c*f,q=c*w,lA=I*f,tA=I*w,BA=I*_,IA=C*f,gA=C*w,RA=C*_;return t[0]=1-q-BA,t[1]=L+RA,t[2]=lA-gA,t[3]=0,t[4]=L-RA,t[5]=1-N-BA,t[6]=tA+IA,t[7]=0,t[8]=lA+gA,t[9]=tA-IA,t[10]=1-N-q,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function $gA(t,i,n,c,I,C,f){var w=1/(n-i),_=1/(I-c),N=1/(C-f);return t[0]=2*C*w,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*C*_,t[6]=0,t[7]=0,t[8]=(n+i)*w,t[9]=(I+c)*_,t[10]=(f+C)*N,t[11]=-1,t[12]=0,t[13]=0,t[14]=f*C*2*N,t[15]=0,t}function YX(t,i,n,c,I){var C=1/Math.tan(i/2);if(t[0]=C/n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=C,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,I!=null&&I!==1/0){var f=1/(c-I);t[10]=(I+c)*f,t[14]=2*I*c*f}else t[10]=-1,t[14]=-2*c;return t}JaA(UX,{add:()=>gcA,adjoint:()=>NgA,clone:()=>MgA,copy:()=>vgA,create:()=>SgA,decompose:()=>WgA,determinant:()=>GgA,equals:()=>ucA,exactEquals:()=>IcA,frob:()=>acA,fromQuat:()=>XgA,fromQuat2:()=>qgA,fromRotation:()=>YgA,fromRotationTranslation:()=>PX,fromRotationTranslationScale:()=>zgA,fromRotationTranslationScaleOrigin:()=>ZgA,fromScaling:()=>xgA,fromTranslation:()=>PgA,fromValues:()=>RgA,fromXRotation:()=>VgA,fromYRotation:()=>JgA,fromZRotation:()=>HgA,frustum:()=>$gA,getRotation:()=>jgA,getScaling:()=>xX,getTranslation:()=>KgA,identity:()=>FX,invert:()=>TgA,lookAt:()=>scA,mul:()=>EcA,multiply:()=>OX,multiplyScalar:()=>ccA,multiplyScalarAndAdd:()=>lcA,ortho:()=>icA,orthoNO:()=>VX,orthoZO:()=>ocA,perspective:()=>AcA,perspectiveFromFieldOfView:()=>tcA,perspectiveNO:()=>YX,perspectiveZO:()=>ecA,rotate:()=>LgA,rotateX:()=>UgA,rotateY:()=>FgA,rotateZ:()=>OgA,scale:()=>kgA,set:()=>wgA,str:()=>rcA,sub:()=>dcA,subtract:()=>JX,targetTo:()=>ncA,translate:()=>bgA,transpose:()=>_gA});var AcA=YX;function ecA(t,i,n,c,I){var C=1/Math.tan(i/2);if(t[0]=C/n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=C,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,I!=null&&I!==1/0){var f=1/(c-I);t[10]=I*f,t[14]=I*c*f}else t[10]=-1,t[14]=-c;return t}function tcA(t,i,n,c){var I=Math.tan(i.upDegrees*Math.PI/180),C=Math.tan(i.downDegrees*Math.PI/180),f=Math.tan(i.leftDegrees*Math.PI/180),w=Math.tan(i.rightDegrees*Math.PI/180),_=2/(f+w),N=2/(I+C);return t[0]=_,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=N,t[6]=0,t[7]=0,t[8]=-(f-w)*_*.5,t[9]=(I-C)*N*.5,t[10]=c/(n-c),t[11]=-1,t[12]=0,t[13]=0,t[14]=c*n/(n-c),t[15]=0,t}function VX(t,i,n,c,I,C,f){var w=1/(i-n),_=1/(c-I),N=1/(C-f);return t[0]=-2*w,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*_,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*N,t[11]=0,t[12]=(i+n)*w,t[13]=(I+c)*_,t[14]=(f+C)*N,t[15]=1,t}var icA=VX;function ocA(t,i,n,c,I,C,f){var w=1/(i-n),_=1/(c-I),N=1/(C-f);return t[0]=-2*w,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*_,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=N,t[11]=0,t[12]=(i+n)*w,t[13]=(I+c)*_,t[14]=C*N,t[15]=1,t}function scA(t,i,n,c){var I,C,f,w,_,N,L,q,lA,tA,BA=i[0],IA=i[1],gA=i[2],RA=c[0],HA=c[1],ZA=c[2],KA=n[0],me=n[1],ae=n[2];return Math.abs(BA-KA)0&&(L*=tA=1/Math.sqrt(tA),q*=tA,lA*=tA);var BA=_*lA-N*q,IA=N*L-w*lA,gA=w*q-_*L;return(tA=BA*BA+IA*IA+gA*gA)>0&&(BA*=tA=1/Math.sqrt(tA),IA*=tA,gA*=tA),t[0]=BA,t[1]=IA,t[2]=gA,t[3]=0,t[4]=q*gA-lA*IA,t[5]=lA*BA-L*gA,t[6]=L*IA-q*BA,t[7]=0,t[8]=L,t[9]=q,t[10]=lA,t[11]=0,t[12]=I,t[13]=C,t[14]=f,t[15]=1,t}function rcA(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"}function acA(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]+t[3]*t[3]+t[4]*t[4]+t[5]*t[5]+t[6]*t[6]+t[7]*t[7]+t[8]*t[8]+t[9]*t[9]+t[10]*t[10]+t[11]*t[11]+t[12]*t[12]+t[13]*t[13]+t[14]*t[14]+t[15]*t[15])}function gcA(t,i,n){return t[0]=i[0]+n[0],t[1]=i[1]+n[1],t[2]=i[2]+n[2],t[3]=i[3]+n[3],t[4]=i[4]+n[4],t[5]=i[5]+n[5],t[6]=i[6]+n[6],t[7]=i[7]+n[7],t[8]=i[8]+n[8],t[9]=i[9]+n[9],t[10]=i[10]+n[10],t[11]=i[11]+n[11],t[12]=i[12]+n[12],t[13]=i[13]+n[13],t[14]=i[14]+n[14],t[15]=i[15]+n[15],t}function JX(t,i,n){return t[0]=i[0]-n[0],t[1]=i[1]-n[1],t[2]=i[2]-n[2],t[3]=i[3]-n[3],t[4]=i[4]-n[4],t[5]=i[5]-n[5],t[6]=i[6]-n[6],t[7]=i[7]-n[7],t[8]=i[8]-n[8],t[9]=i[9]-n[9],t[10]=i[10]-n[10],t[11]=i[11]-n[11],t[12]=i[12]-n[12],t[13]=i[13]-n[13],t[14]=i[14]-n[14],t[15]=i[15]-n[15],t}function ccA(t,i,n){return t[0]=i[0]*n,t[1]=i[1]*n,t[2]=i[2]*n,t[3]=i[3]*n,t[4]=i[4]*n,t[5]=i[5]*n,t[6]=i[6]*n,t[7]=i[7]*n,t[8]=i[8]*n,t[9]=i[9]*n,t[10]=i[10]*n,t[11]=i[11]*n,t[12]=i[12]*n,t[13]=i[13]*n,t[14]=i[14]*n,t[15]=i[15]*n,t}function lcA(t,i,n,c){return t[0]=i[0]+n[0]*c,t[1]=i[1]+n[1]*c,t[2]=i[2]+n[2]*c,t[3]=i[3]+n[3]*c,t[4]=i[4]+n[4]*c,t[5]=i[5]+n[5]*c,t[6]=i[6]+n[6]*c,t[7]=i[7]+n[7]*c,t[8]=i[8]+n[8]*c,t[9]=i[9]+n[9]*c,t[10]=i[10]+n[10]*c,t[11]=i[11]+n[11]*c,t[12]=i[12]+n[12]*c,t[13]=i[13]+n[13]*c,t[14]=i[14]+n[14]*c,t[15]=i[15]+n[15]*c,t}function IcA(t,i){return t[0]===i[0]&&t[1]===i[1]&&t[2]===i[2]&&t[3]===i[3]&&t[4]===i[4]&&t[5]===i[5]&&t[6]===i[6]&&t[7]===i[7]&&t[8]===i[8]&&t[9]===i[9]&&t[10]===i[10]&&t[11]===i[11]&&t[12]===i[12]&&t[13]===i[13]&&t[14]===i[14]&&t[15]===i[15]}function ucA(t,i){var n=t[0],c=t[1],I=t[2],C=t[3],f=t[4],w=t[5],_=t[6],N=t[7],L=t[8],q=t[9],lA=t[10],tA=t[11],BA=t[12],IA=t[13],gA=t[14],RA=t[15],HA=i[0],ZA=i[1],KA=i[2],me=i[3],ae=i[4],gt=i[5],dt=i[6],We=i[7],lt=i[8],wt=i[9],ct=i[10],ce=i[11],Ve=i[12],Dt=i[13],ti=i[14],Pt=i[15];return Math.abs(n-HA)<=dc*Math.max(1,Math.abs(n),Math.abs(HA))&&Math.abs(c-ZA)<=dc*Math.max(1,Math.abs(c),Math.abs(ZA))&&Math.abs(I-KA)<=dc*Math.max(1,Math.abs(I),Math.abs(KA))&&Math.abs(C-me)<=dc*Math.max(1,Math.abs(C),Math.abs(me))&&Math.abs(f-ae)<=dc*Math.max(1,Math.abs(f),Math.abs(ae))&&Math.abs(w-gt)<=dc*Math.max(1,Math.abs(w),Math.abs(gt))&&Math.abs(_-dt)<=dc*Math.max(1,Math.abs(_),Math.abs(dt))&&Math.abs(N-We)<=dc*Math.max(1,Math.abs(N),Math.abs(We))&&Math.abs(L-lt)<=dc*Math.max(1,Math.abs(L),Math.abs(lt))&&Math.abs(q-wt)<=dc*Math.max(1,Math.abs(q),Math.abs(wt))&&Math.abs(lA-ct)<=dc*Math.max(1,Math.abs(lA),Math.abs(ct))&&Math.abs(tA-ce)<=dc*Math.max(1,Math.abs(tA),Math.abs(ce))&&Math.abs(BA-Ve)<=dc*Math.max(1,Math.abs(BA),Math.abs(Ve))&&Math.abs(IA-Dt)<=dc*Math.max(1,Math.abs(IA),Math.abs(Dt))&&Math.abs(gA-ti)<=dc*Math.max(1,Math.abs(gA),Math.abs(ti))&&Math.abs(RA-Pt)<=dc*Math.max(1,Math.abs(RA),Math.abs(Pt))}var EcA=OX,dcA=JX,RL=`#version 300 es in vec2 a_position; in vec2 a_texCoord; out vec2 v_texCoord; void main() { gl_Position = vec4(a_position.x, a_position.y, 0, 1); v_texCoord = a_texCoord; -}`,JW=t=>`precision highp float; +}`,l4=t=>`precision highp float; uniform sampler2D mask;in vec2 v_texCoord; out vec4 outColor; -void main() {${t}}`,PgA=`#version 300 es +void main() {${t}}`,CcA=`#version 300 es uniform sampler2D lastMask; -${JW(`highp float current = texture(mask, v_texCoord).r; +${l4(`highp float current = texture(mask, v_texCoord).r; highp float previous = texture(lastMask, v_texCoord).r; highp float diff = abs(current - previous); const float smoothFactor = 0.05; @@ -392,8 +392,8 @@ ${JW(`highp float current = texture(mask, v_texCoord).r; ? previous * (1.0 - smoothFactor) + current * smoothFactor : current; outColor = vec4(blendedMask,0.0,0.0, 1.0);`)} -`,xgA=`#version 300 es -${JW(` vec2 o = 1.0 / vec2(textureSize(mask, 0)); +`,hcA=`#version 300 es +${l4(` vec2 o = 1.0 / vec2(textureSize(mask, 0)); float size = 3.0; int sizeDb = int(size*size); float samples[9]; @@ -417,8 +417,8 @@ ${JW(` vec2 o = 1.0 / vec2(textureSize(mask, 0)); } float endR=samples[sizeDb/2]>0.5?1.0:0.0; outColor = vec4(endR, 0.0, 0.0, 1.0);`)} -`,YgA=`#version 300 es -${JW(` vec2 o = 1.0 / vec2(textureSize(mask, 0)); +`,BcA=`#version 300 es +${l4(` vec2 o = 1.0 / vec2(textureSize(mask, 0)); float size = 3.0; float side = (size - 1.0) / 2.0; float stronglyEroded = 1.0; @@ -429,7 +429,7 @@ ${JW(` vec2 o = 1.0 / vec2(textureSize(mask, 0)); } } outColor = vec4(stronglyEroded, 0.0, 0.0, 1.0);`)} -`,VgA=`#version 300 es +`,QcA=`#version 300 es precision highp float; uniform sampler2D mask; uniform sampler2D originalMask; @@ -482,7 +482,7 @@ void main() { } outColor = vec4(finalAlpha, 0.0, 0.0, 1.0); } -`,JgA=`#version 300 es +`,pcA=`#version 300 es precision highp float; uniform sampler2D mask; in vec2 v_texCoord; @@ -524,18 +524,18 @@ void main() { float edge = nmsEdge > 0.0 ? 1.0 : 0.0; outColor = vec4(edge, 0.0, 0.0, 1.0); } -`,HgA=class{constructor(){Hg(this,"gl"),Hg(this,"positionBuffer"),Hg(this,"texCoordBuffer"),Hg(this,"ratio"),Hg(this,"_tdProgram"),Hg(this,"_kcProgram"),Hg(this,"_mdProgram"),Hg(this,"_edgeProgram"),Hg(this,"_borderProgram"),Hg(this,"_lastMaskTexture")}init(t,i,r,l){this.initParams(t,i,r,l),this.initPrograms()}initParams(t,i,r,l){this.gl=t,this.positionBuffer=i,this.texCoordBuffer=r,this.ratio=l}initPrograms(){this._tdProgram=this.createProgram(fL,PgA,["mask","lastMask"]),this._mdProgram=this.createProgram(fL,xgA,["mask"]),this._kcProgram=this.createProgram(fL,YgA,["mask"]),this._borderProgram=this.createProgram(fL,VgA,["mask","maskEdge","originalMask"]),this._edgeProgram=this.createProgram(fL,JgA,["mask"])}setAttributes(...t){const{gl:i}=this;t.forEach((r,l)=>{i.enableVertexAttribArray(l),i.bindBuffer(i.ARRAY_BUFFER,r),i.vertexAttribPointer(l,2,i.FLOAT,!1,0,0)})}createShader(t,i){const{gl:r}=this,l=r.createShader(t);return r.shaderSource(l,i),r.compileShader(l),l}createProgram(t,i,r){const{gl:l}=this,I=this.createShader(l.FRAGMENT_SHADER,i),h=this.createShader(l.VERTEX_SHADER,t),f=l.createProgram();if(l.attachShader(f,h),l.attachShader(f,I),l.linkProgram(f),!l.getProgramParameter(f,l.LINK_STATUS))throw new Error(`${l.getProgramInfoLog(f)}`);return l.useProgram(f),this.setAttributes(this.positionBuffer,this.texCoordBuffer),r.forEach((w,_)=>{l.uniform1i(l.getUniformLocation(f,w),1+_)}),f}createFramebuffer(t){const{gl:i}=this,r=i.createFramebuffer();return i.bindFramebuffer(i.FRAMEBUFFER,r),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,t,0),r}getTempTexture(t,i,r=!0,l){const{gl:I}=this;let h,f;I.useProgram(t),this.ratio===16/9?(h=640,f=360):(h=640,f=480);const w=I.createTexture();I.activeTexture(I.TEXTURE0),I.bindTexture(I.TEXTURE_2D,w),I.texParameteri(I.TEXTURE_2D,I.TEXTURE_MIN_FILTER,I.LINEAR),I.texParameteri(I.TEXTURE_2D,I.TEXTURE_MAG_FILTER,I.LINEAR),I.texParameteri(I.TEXTURE_2D,I.TEXTURE_WRAP_S,I.CLAMP_TO_EDGE),I.texParameteri(I.TEXTURE_2D,I.TEXTURE_WRAP_T,I.CLAMP_TO_EDGE),I.pixelStorei(I.PACK_ALIGNMENT,1),I.pixelStorei(I.UNPACK_ALIGNMENT,1),I.texImage2D(I.TEXTURE_2D,0,I.RGBA,h,f,0,I.RGBA,I.UNSIGNED_BYTE,null);const _=this.createFramebuffer(w);return i.forEach((G,U)=>{G&&(I.activeTexture(I.TEXTURE1+U),I.bindTexture(I.TEXTURE_2D,G||null))}),this.setAttributes(this.positionBuffer,this.texCoordBuffer),I.viewport(0,0,h,f),I.drawArrays(I.TRIANGLE_STRIP,0,4),r&&i.forEach((G,U)=>{G&&l!==U&&I.deleteTexture(G)}),I.deleteFramebuffer(_),w}postProcessing(t){this._lastMaskTexture=this.getTempTexture(this._tdProgram,[t,this._lastMaskTexture]);let i=this.getTempTexture(this._kcProgram,[this._lastMaskTexture],!1);for(let r=0;r<3;r++){i=this.getTempTexture(this._mdProgram,[i]);const l=this.getTempTexture(this._edgeProgram,[i],!1);i=this.getTempTexture(this._borderProgram,[i,l,this._lastMaskTexture],!0,2)}return i}close(){const{gl:t}=this;this._borderProgram&&t.deleteProgram(this._borderProgram),this._edgeProgram&&t.deleteProgram(this._edgeProgram),this._kcProgram&&t.deleteProgram(this._kcProgram),this._mdProgram&&t.deleteProgram(this._mdProgram),this._tdProgram&&t.deleteProgram(this._tdProgram)}},qgA=new HgA,KgA=(t=>(t[t.TRACE=0]="TRACE",t[t.DEBUG=1]="DEBUG",t[t.INFO=2]="INFO",t[t.WARN=3]="WARN",t[t.ERROR=4]="ERROR",t[t.NONE=5]="NONE",t))(KgA||{}),jgA={alpha:!0,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0,powerPreference:"low-power"},y_=570703,Yj=0,fX=class yX{constructor(i){this.core=i,Hg(this,"seq"),Hg(this,"_core"),Hg(this,"log"),Hg(this,"preLoadPromise"),Hg(this,"startResolve"),Hg(this,"startReject"),Hg(this,"mediaPipeSolutions"),Hg(this,"assetsPath"),Hg(this,"currentType"),Hg(this,"onAbort"),Hg(this,"isAborted",!1),Yj+=1,this.seq=Yj,this._core=i,this.log=i.log.createChild({id:`${this.getAlias()}${Yj}`}),this.log.info("created"),i.assetsPath&&(this.preLoadPromise=this.preload(i.assetsPath))}static isSupported(){if(HaA<90)return!1;const i=document.createElement("canvas").getContext("webgl2",jgA);return!!(i&&i instanceof WebGL2RenderingContext)}async preload(i){try{this._core.room.videoManager.Wasm||(this._core.room.videoManager.Wasm=await maA());const r=l=>{var I;this.core.kvStatManager.addEnum({key:y_,value:this.getKVTypeValue(!1,this.isAborted,"ABORT_IN_INFERENCE")}),this.isAborted=!0,this.log.error("mediaPipeSolutions abort",l),this.core.clearStarted(this,this.getGroup()),this.stop(),(I=this.onAbort)==null||I.call(this,l)};this._core.room.videoManager.initVirtualBackground(r,EX,qgA),await this._core.initVisionTaskRegistry(i,["ImageSegmenter"])}catch(r){const{RtcError:l,ErrorCode:I}=this._core.errorModule;throw new l({code:I.INVALID_OPERATION,message:`VirtualBackground preload error, please redeploy the assets of the npm package. detail: ${r}`})}}getName(){return yX.Name}getAlias(){return"vb"}getValidateRule(i){switch(i){case"start":return haA(this._core);case"update":return BaA(this._core);case"stop":return QaA(this._core)}}getGroup(){return"vb"}getKVTypeValue(i=!1,r=!1,l="NONE"){let I=0;switch(this.currentType){case"blur":I|=0;break;case"image":I|=1;break;case"color":I|=2}switch(i&&(I|=256),r&&(I|=512),l){case"ABORT_IN_INFERENCE":I|=4096;break;case"ABORT_IN_VIDEO_MANAGER":I|=8192;break;case"OTHER":I|=61440}return I}hexToRgb(i){const r=i.replace("#","");return[parseInt(r.slice(0,2),16)/255,parseInt(r.slice(2,4),16)/255,parseInt(r.slice(4,6),16)/255]}async start(i){const{type:r="blur",src:l,blurLevel:I=3,onAbort:h}=i;this.currentType=r,this.onAbort=h,r==="color"&&typeof i.color=="string"&&(i.color=this.hexToRgb(i.color));const{auth:f}=await daA({sdkAppId:i.sdkAppId,userId:i.userId,userSig:i.userSig,core:this._core}),{RtcError:w,ErrorCodeDictionary:_,ErrorCode:G}=this._core.errorModule;if(!f){const U=this._core.utils.isOverseaSdkAppId(i.sdkAppId)?"https://trtc.io/document/56025":"https://cloud.tencent.com/document/product/647/85386";throw new w({code:_.NEED_TO_BUY,messageParams:{value:"Virtual Background",url:U}})}if(!this.preLoadPromise){if(!this._core.assetsPath)throw new w({code:G.INVALID_PARAMETER,message:"you need to deploy the assets of the npm package and set assetsPath param in TRTC.create()"});this.preLoadPromise=this.preload(this._core.assetsPath)}return await this.preLoadPromise,this.core.room.videoManager.setVirtualBackground({type:r,imageUrl:l,blurLevel:I,enableFaceCentering:i.enableFaceCentering,enableEffectOptimization:i.enableEffectOptimization,color:i.color,onAbort:U=>{var j;this.core.kvStatManager.addEnum({key:y_,value:this.getKVTypeValue(!0,this.isAborted,"ABORT_IN_VIDEO_MANAGER")}),this.isAborted=!0,this.core.clearStarted(this,this.getGroup()),this.stop(),delete this.preLoadPromise,(j=this.onAbort)==null||j.call(this,U)}}).then(()=>{this.core.kvStatManager.addEnum({key:y_,value:this.getKVTypeValue(!1,this.isAborted,"NONE")})}).catch(U=>{throw this.core.kvStatManager.addEnum({key:y_,value:this.getKVTypeValue(!0,this.isAborted,"OTHER")}),U})}async update(i){const{type:r,src:l}=i;return r!==this.currentType&&(this.currentType=r),r==="color"&&typeof i.color=="string"&&(i.color=this.hexToRgb(i.color)),this.core.room.videoManager.setVirtualBackground({type:r,imageUrl:l,blurLevel:i.blurLevel,enableFaceCentering:i.enableFaceCentering,enableEffectOptimization:i.enableEffectOptimization,color:i.color}).then(()=>{this.core.kvStatManager.addEnum({key:y_,value:this.getKVTypeValue(!1,!1,"NONE")})}).catch(()=>{this.core.kvStatManager.addEnum({key:y_,value:this.getKVTypeValue(!0,!1,"OTHER")})})}async stop(){return this.core.room.videoManager.setVirtualBackground()}};Hg(fX,"Name","VirtualBackground");var DX=fX,WgA=DX;const zgA=Object.freeze(Object.defineProperty({__proto__:null,VirtualBackground:DX,default:WgA},Symbol.toStringTag,{value:"Module"})),ZgA=kU(zgA);var XgA=Object.defineProperty,$gA=(t,i,r)=>i in t?XgA(t,i,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[i]=r,UL=(t,i,r)=>$gA(t,typeof i!="symbol"?i+"":i,r);function AcA(t){return{name:"BasicBeautyOptions",type:"object",required:!0,allowEmpty:!1,properties:{beauty:{required:!1,type:"number"},brightness:{required:!1,type:"number"},ruddy:{required:!1,type:"number"}},validate(i,r,l,I){const{RtcError:h,ErrorCode:f,ErrorCodeDictionary:w}=t.errorModule;if(t.utils.isOverseaSdkAppId(i.sdkAppId))throw new h({code:f.INVALID_OPERATION,extraCode:w.INVALID_OPERATION,message:"This feature is not yet available in your country or region. If you have any questions, you can go to the community for consultation: https://zhiliao.qq.com/s/cWSPGIIM62CC/c3TPGIIM62CQ"})}}}function ecA(t){return{name:"StopBasicBeautyOptions",required:!1}}var tcA=(()=>{var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(i={}){var r,l,I=i;I.ready=new Promise(($,K)=>{r=$,l=K});var h=Object.assign({},I),f="";typeof document<"u"&&document.currentScript&&(f=document.currentScript.src),t&&(f=t),f=f.indexOf("blob:")!==0?f.substr(0,f.replace(/[?#].*/,"").lastIndexOf("/")+1):"";var w,_,G=I.print||console.log.bind(console),U=I.printErr||console.error.bind(console);function j($){if(Me($))return function(K){for(var vA=atob(K),qA=new Uint8Array(vA.length),Ae=0;Ae$.startsWith(yt);function Oe($){return Promise.resolve().then(()=>function(K){if(K==re&&w)return new Uint8Array(w);var vA=j(K);if(vA)return vA;throw"both async and sync fetching of the wasm failed"}($))}function gt($,K,vA,qA){return function(Ae,me,Pe){return Oe(Ae).then(Fe=>WebAssembly.instantiate(Fe,me)).then(Fe=>Fe).then(Pe,Fe=>{U(`failed to asynchronously prepare wasm: ${Fe}`),Et(Fe)})}(K,vA,qA)}Me(re="data:application/octet-stream;base64,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IAEoAgA2AgAgAiABKAIENgIEIAIgASgCCDYCCCACIAEoAgw2AgwgAiABKAIQNgIQIAIgASgCFDYCFCACIAEoAhg2AhggAiABKAIcNgIcIAIgASgCIDYCICACIAEoAiQ2AiQgAiABKAIoNgIoIAIgASgCLDYCLCACIAEoAjA2AjAgAiABKAI0NgI0IAIgASgCODYCOCACIAEoAjw2AjwgAUFAayEBIAJBQGsiAiAFTQ0ACwsgAiAETw0BA0AgAiABKAIANgIAIAFBBGohASACQQRqIgIgBEkNAAsMAQsgA0EESQRAIAAhAgwBCyAAIANBBGsiBEsEQCAAIQIMAQsgACECA0AgAiABLQAAOgAAIAIgAS0AAToAASACIAEtAAI6AAIgAiABLQADOgADIAFBBGohASACQQRqIgIgBE0NAAsLIAIgA0kEQANAIAIgAS0AADoAACABQQFqIQEgAkEBaiICIANHDQALCyAACwsAIAEgAiAAEEIaCxIAIAFBAXRB8MoAakECIAAQQgv5AQEEfwJ/IAEQKiECIwBBEGsiBSQAAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0AC0H/AHELIgRBAE8EQAJAIAIgAC0AC0EHdgR/IAAoAghB/////wdxQQFrBUEKCyIDIARrTQRAIAJFDQECfyAALQALQQd2BEAgACgCAAwBCyAACyIDIAQEfyACIANqIAMgBBBFIAEgAkEAIAMgBGogAUsbQQAgASADTxtqBSABCyACEEUgACACIARqIgEQMSAFQQA6AA8gASADaiAFLQAPOgAADAELIAAgAyACIARqIANrIARBACACIAEQRAsgBUEQaiQAIAAMAQsQJwALC/ICAgJ/AX4CQCACRQ0AIAAgAToAACAAIAJqIgNBAWsgAToAACACQQNJDQAgACABOgACIAAgAToAASADQQNrIAE6AAAgA0ECayABOgAAIAJBB0kNACAAIAE6AAMgA0EEayABOgAAIAJBCUkNACAAQQAgAGtBA3EiBGoiAyABQf8BcUGBgoQIbCIBNgIAIAMgAiAEa0F8cSIEaiICQQRrIAE2AgAgBEEJSQ0AIAMgATYCCCADIAE2AgQgAkEIayABNgIAIAJBDGsgATYCACAEQRlJDQAgAyABNgIYIAMgATYCFCADIAE2AhAgAyABNgIMIAJBEGsgATYCACACQRRr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ACACQQA6AA8DQCABBEAgACACLQAPOgAAIAFBAWshASAAQQFqIQAMAQsLIAJBEGokAAsaACAALQALQQd2BEAgACgCCBogACgCABAZCwvmAQEFfyMAQRBrIgUkACMAQSBrIgMkACMAQRBrIgQkACAEIAA2AgwgBCAAIAFqNgIIIAMgBCgCDDYCGCADIAQoAgg2AhwgBEEQaiQAIAMoAhghBCADKAIcIQYjAEEQayIBJAAgASAGNgIMIAIgBCAGIARrIgQQQyABIAIgBGo2AgggAyABKAIMNgIQIAMgASgCCDYCFCABQRBqJAAgAyAAIAMoAhAgAGtqNgIMIAMgAiADKAIUIAJrajYCCCAFIAMoAgw2AgggBSADKAIINgIMIANBIGokACAFKAIMIQcgBUEQaiQAIAcLDwAgAgRAIAAgASACEDILC/UCAQV/IwBBEGsiByQAIAIgAUF/c0Hv////B2pNBEACfyAALQALQQd2BEAgACgCAAwBCyAACyEIIAdBBGoiCSAAIAFB5////wNJBH8gByABQQF0NgIMIAcgASACajYCBCMAQRBrIgIkACAJKAIAIAdBDGoiCigCAEkhCyACQRBqJAAgCiAJIAsbKAIAIgJBC08EfyACQRBqQXBxIgIgAkEBayICIAJBC0YbBUEKC0EBagVB7////wcLEDAgBygCBCECIAcoAggaIAQEQCACIAggBBAjCyAFBEAgAiAEaiAGIAUQIwsgAyAEayEGIAMgBEcEQCACIARqIAVqIAQgCGogBhAjCyABQQpHBEAgCBAZCyAAIAI2AgAgACAAKAIIQYCAgIB4cSAHKAIIQf////8HcXI2AgggACAAKAIIQYCAgIB4cjYCCCAAIAQgBWogBmoiADYCBCAHQQA6AAwgACACaiAHLQAMOgAAIAdBEGokAA8LECcACwoAIAAgASACEEMLuQEBBH8jAEEQayIEJAAgBCACNgIMIwBBoAFrIgMkACADIAAgA0GeAWogARsiBjYClAFBfyEFIAMgAUEBayIAQQAgACABTRs2ApgBIANBAEGQARAmIgBBfzYCTCAAQSA2AiQgAEF/NgJQIAAgAEGfAWo2AiwgACAAQZQBajYCVAJAIAFBAEgEQEHo3gBBPTYCAAwBCyAGQQA6AAAgAEH9CiACQR8QTSEFCyAAQaABaiQAIARBEGokACAFCwQA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KAIARQ0AIAIgBCgCGDYCAAsgAEEBRiEFDAELQQAhBQsgBEFAayQAIAULMQAgACABKAIIQQAQHgRAIAEgAiADED0PCyAAKAIIIgAgASACIAMgACgCACgCHBEGAAsYACAAIAEoAghBABAeBEAgASACIAMQPQsLnQEBAn8jAEFAaiIDJAACf0EBIAAgAUEAEB4NABpBACABRQ0AGkEAIAFBjM0AECAiAUUNABogA0EMakEAQTQQJhogA0EBNgI4IANBfzYCFCADIAA2AhAgAyABNgIIIAEgA0EIaiACKAIAQQEgASgCACgCHBEGACADKAIgIgBBAUYEQCACIAMoAhg2AgALIABBAUYLIQQgA0FAayQAIAQLCgAgACABQQAQHgtOAgF/AXwjAEEQayICJAAgAkEANgIMIAEoAgRB1M8AIAJBDGoQCSEDIAIoAgwiAQRAIAEQAQsgACADRAAAAAAAAAAAYjoAOCACQRBqJAALNwEBfyMAQRBrIgIkACACIAEtADg2AgggAEHUzwAgAkEIahAHNgIEIABB1NUANgIAIAJBEGokAAuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECIaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECIaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACC5wBAQJ/IwBBEGsiAiQAQcgAEBwhASAAKAIEIgAQAiACIAA2AgggAUHMLSACQQhqEAc2AgQgAUHU1QA2AgAgAUEBNgIcIAFB1NUANgIYIAFBATYCFCABQdTVADYCECABQQE2AgwgAUHU1QA2AgggAUEAOgAgIAFBADYCRCABQoCAgIAwNwI8IAFBADsANyABQQA7ACsgAkEQaiQAIAELigUCBn4CfyABIAEoAgBBB2pBeHEiAUEQajYCACAAIQkgASkDACEDIAEpAwghBSMAQSBrIgAkAAJAIAVC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBUIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAhSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBUIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIBQZH3AEkNACADIQIgBUL///////8/g0KAgICAgIDAAIQiBCEGAkAgAUGB9wBrIghBwABxBEAgAyAIQUBqrYYhBkIAIQIMAQsgCEUNACAGIAitIgeGIAJBwAAgCGutiIQhBiACIAeGIQILIAAgAjcDECAAIAY3AxgCQEGB+AAgAWsiAUHAAHEEQCAEIAFBQGqtiCEDQgAhBAwBCyABRQ0AIARBwAAgAWuthiADIAGtIgKIhCEDIAQgAoghBAsgACADNwMAIAAgBDcDCCAAKQMIQgSGIAApAwAiA0I8iIQhAiAAKQMQIAApAxiEQgBSrSADQv//////////D4OEIgNCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyADQoCAgICAgICACFINACACQgGDIAJ8IQILIABBIGokACAJIAIgBUKAgICAgICAgIB/g4S/OQMAC0ABAn8jAEEQayICJAAgAiABNgIMIAJB1NUANgIIIAJBCGogABEBACEDIAIoAgwiAQRAIAEQAwsgAkEQaiQAIAMLBABCAAsEAEEAC/YCAQh/IwBBIGsiAyQAIAMgACgCHCIENgIQIAAoAhQhBSADIAI2AhwgAyABNgIYIAMgBSAEayIBNgIUIAEgAmohBUECIQcCfwJAAkACQCAAKAI8IANBEGoiAUECIANBDGoQDSIEBH9B6N4AIAQ2AgBBfwVBAAsEQCABIQQMAQsDQCAFIAMoAgwiBkYNAiAGQQBIBEAgASEEDAQLIAEgBiABKAIEIghLIglBA3RqIgQgBiAIQQAgCRtrIgggBCgCAGo2AgAgAUEMQQQgCRtqIgEgASgCACAIazYCACAFIAZrIQUgACgCPCAEIgEgByAJayIHIANBDGoQDSIGBH9B6N4AIAY2AgBBfwVBAAtFDQALCyAFQX9HDQELIAAgACgCLCIBNgIcIAAgATYCFCAAIAEgACgCMGo2AhAgAgwBCyAAQQA2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EGokAAsiAQF+IAEgAq0gA61CIIaEIAQgABEMACIFQiCIpyQBIAWnCzcBAX8jAEEQayICJAAgAiABKAI8NgIIIABBnNAAIAJBCGoQBzYCBCAAQdTVADYCACACQRBqJAALC/NKFQBBgAgLhCZzZXRCZWF1dHkALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweAB1bnNpZ25lZCBzaG9ydAB1bnNpZ25lZCBpbnQAaW5pdABmbG9hdAB1aW50NjRfdABibHVyUmFkaXVzAHZlY3RvcgBtaXJyb3IAYXR0YWNoU2hhZGVyAGRlbGV0ZVNoYWRlcgBjcmVhdGVTaGFkZXIAY29tcGlsZVNoYWRlcgB1bnNpZ25lZCBjaGFyAHN0ZDo6ZXhjZXB0aW9uAHJvdGF0aW9uAG5hbgBsaW5rUHJvZ3JhbQBkZWxldGVQcm9ncmFtAGNyZWF0ZVByb2dyYW0AYm9vbABlbXNjcmlwdGVuOjp2YWwAc2V0V2F0ZXJNYXJrAHN0b3BXYXRlck1hcmsAdW5zaWduZWQgbG9uZwBzdGQ6OndzdHJpbmcAYmFzaWNfc3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGluZgAlZgBjbG9zZQBkb3VibGUAdmJNb2RlAHNoYWRlclNvdXJjZQB2b2lkAHNhbXBsZUNvbG9yICs9IHRleHR1cmUoZnJhbWUsIGJsdXJDb29yZGluYXRlc1sATkFOAElORgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDhfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDY0X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDY0X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgbG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZG91YmxlPgB2ZWMyIGMgPSB2X3RleENvb3JkOwB2ZWMyIGMgPSB2ZWMyKDEuMCAtIHZfdGV4Q29vcmQueCwgdl90ZXhDb29yZC55KTsAYyA9IHZlYzIoMS4wIC0gYy54LCAxLjAgLSBjLnkpOwBjID0gdmVjMihjLnksIDEuMCAtIGMueCk7AGMgPSB2ZWMyKDEuMCAtIGMueSwgYy54KTsAQWxsSW4xAC4ALjAsAC4wKSpvKSoAKG51bGwpACkqby55KTsgICAgdmVjMiBjb29yZDIgPSB2ZWMyKGZsb2F0KAAgICAgYyA9IHZlYzIodl90ZXhDb29yZC54LCAxLjAgLSB2X3RleENvb3JkLnkpOyAgICB2ZWMyIGNvb3JkMSA9IHZlYzIoZmxvYXQoACksIChjLnkgLWNvb3JkMS55KSAvIG8ueSAvIGZsb2F0KAApKm8ueSk7ICAgIGlmIChjLnggPiBjb29yZDEueCAmJiBjLnggPCBjb29yZDIueCAmJiBjLnkgPiBjb29yZDEueSAmJiBjLnkgPCBjb29yZDIueSkgeyAgICAgIHZlYzQgd2F0ZXJDb2xvciA9IHRleHR1cmUod2F0ZXJNYXJrLCB2ZWMyKChjLnggLSBjb29yZDEueCkgIC8gby54IC8gZmxvYXQoACkgKiBvLngsIGZsb2F0KABvdXRDb2xvci5yZ2IgKz0gdmVjMygAKTsgICAgICAgdmVjMyBzbW9vdGhDb2xvciA9IG91dENvbG9yLnJnYiArIChvdXRDb2xvci5yZ2ItdmVjMyhoaWdoUGFzcykpKmFscGhhKjAuMTsgICAgICAgc21vb3RoQ29sb3IgPSBtYXgoc21vb3RoQ29sb3IsIHZlYzMoMC4wKSk7ICAgICAgIHNtb290aENvbG9yID0gY2xhbXAocG93KHNtb290aENvbG9yLCB2ZWMzKABnKz1HKGMsdmVjMigAICAgICAgdmVjMiBvZmZzZXQgPSB2ZWMyKABdID0gdl90ZXhDb29yZC54eSArIG9mZnNldCAqIHZlYzIoADsgACkpLCB2ZWMzKDAuMCksIHZlYzMoMS4wKSk7ICAgICAgdmVjMyBzY3JlZW4gPSB2ZWMzKDEuMCkgLSAodmVjMygxLjApLXNtb290aENvbG9yKSAqICh2ZWMzKDEuMCktb3V0Q29sb3IucmdiKTsgICAgICAgdmVjMyBsaWdodGVuID0gbWF4KHNtb290aENvbG9yLCBvdXRDb2xvci5yZ2IpOyAgICAgICB2ZWMzIGJlYXV0eUNvbG9yID0gbWl4KG1peChvdXRDb2xvci5yZ2IsIHNjcmVlbiwgYWxwaGEpLCBsaWdodGVuLCBhbHBoYSk7ICAgICAgb3V0Q29sb3IucmdiID0gbWl4KG91dENvbG9yLnJnYiwgYmVhdXR5Q29sb3IsIAAKICAgICAgY29uc3QgbWF0MyBzYXR1cmF0ZU1hdHJpeCA9IG1hdDMoMS4xMTAyLC0wLjA1OTgsLTAuMDYxLC0wLjA3NzQsMS4wODI2LC0wLjExODYsLTAuMDIyOCwtMC4wMjI4LDEuMTc3Mik7CiAgICAgIHZlYzMgd2FybUNvbG9yID0gb3V0Q29sb3IucmdiICogc2F0dXJhdGVNYXRyaXg7CiAgICAgIG91dENvbG9yLnJnYiA9IG1peChvdXRDb2xvci5yZ2IsIHdhcm1Db2xvciwgACAgICAgIHNhbXBsZUNvbG9yID0gc2FtcGxlQ29sb3IgLyA2Mi4wOyAgICAgICBmbG9hdCBoaWdoUGFzcyA9IG91dENvbG9yLmcgLSBzYW1wbGVDb2xvciArIDAuNTsgICAgICAgY29uc3QgaGlnaHAgdmVjMyBXID0gdmVjMygwLjI5OSwwLjU4NywwLjExNCk7ICAgICAgZmxvYXQgbHVtaW5hbmNlID0gZG90KG91dENvbG9yLnJnYiwgVyk7ICAgICAgIGZsb2F0IGFscGhhID0gcG93KGx1bWluYW5jZSwgAF0pLmcgKiAAKSkpOyAgICAgIG91dENvbG9yID0gbWl4KG91dENvbG9yLHdhdGVyQ29sb3IsICB3YXRlckNvbG9yLmEpOyAgICB9ICAgIAApOyAgICAAKTsgICAgICB2ZWMyIGJsdXJDb29yZGluYXRlc1syNF07ICAgICAgACAgICAgIGZsb2F0IHNhbXBsZUNvbG9yID0gb3V0Q29sb3IuZyAqIDIyLjA7ICAgICAgIAAjdmVyc2lvbiAzMDAgZXMKICAgIHByZWNpc2lvbiBoaWdocCBmbG9hdDsKICAgIHVuaWZvcm0gc2FtcGxlcjJEIGZyYW1lOwogICAgdW5pZm9ybSBzYW1wbGVyMkQgbWFzazsKICAgIHVuaWZvcm0gc2FtcGxlcjJEIGJnOwogICAgdW5pZm9ybSBzYW1wbGVyMkQgd2F0ZXJNYXJrOwogICAgdW5pZm9ybSBzYW1wbGVyMkQgbGFzdE1hc2s7CiAgICB1bmlmb3JtIG1hdDQgdV9vZmZzZXRNYXRyaXg7CiAgICB1bmlmb3JtIHZlYzMgdV9jb2xvcjsKICAgIGluIHZlYzIgdl90ZXhDb29yZDsKICAgIG91dCB2ZWM0IG91dENvbG9yOwogICAgdmVjNCBHKHZlYzIgYyx2ZWMyIHMpewogICAgICByZXR1cm4gdGV4dHVyZShmcmFtZSx0ZXh0dXJlKG1hc2ssYytzKS5yPjAuMz9jOmMrcyk7CiAgICB9CiAgICB2b2lkIG1haW4oKSB7CiAgICAgIAAKICAgICAgdmVjMiBvZmZzZXRNYXNrVVYgPSAodV9vZmZzZXRNYXRyaXggKiB2ZWM0KGMsIDAsIDEpKS54eTsKICAgICAgZmxvYXQgaXNJbnNpZGVYID0gKG9mZnNldE1hc2tVVi54ID49IDAuMCkgJiYgKG9mZnNldE1hc2tVVi54IDw9IDEuMCkgPyAxLjAgOiAwLjA7CiAgICAgIGZsb2F0IGlzSW5zaWRlWSA9IChvZmZzZXRNYXNrVVYueSA+PSAwLjApICYmIChvZmZzZXRNYXNrVVYueSA8PSAxLjApID8gMS4wIDogMC4wOwogICAgICBmbG9hdCBpc0luc2lkZSA9IGlzSW5zaWRlWCAqIGlzSW5zaWRlWTsKICAgICAgZmxvYXQgbWFza2VkQWxwaGEgPSB0ZXh0dXJlKG1hc2ssIG9mZnNldE1hc2tVVikuciAqIGlzSW5zaWRlOwogICAgICBtYXNrZWRBbHBoYSA9IG1hc2tlZEFscGhhPDAuNT8yLjAqbWFza2VkQWxwaGEqbWFza2VkQWxwaGE6MS4wLTIuMCooMS4wLW1hc2tlZEFscGhhKSooMS4wLW1hc2tlZEFscGhhKTsKICAgICAgc3JjX2NvbG9yID0gdGV4dHVyZShmcmFtZSwgb2Zmc2V0TWFza1VWICwgaXNJbnNpZGUpOwogICAgICBvdXRDb2xvciA9IG1peCh0ZXh0dXJlKGJnLCBjKSwgc3JjX2NvbG9yLCBtYXNrZWRBbHBoYSk7CiAgICAACiAgICB2ZWM0IGcgPSB2ZWM0KDAuMCk7CiAgICAACiAgICAgIGMueSA9IDEuMCAtIGMueTsKICAgICAgdmVjNCBzcmNfY29sb3IgPSB0ZXh0dXJlKGZyYW1lLCBjKTsKICAgICAgZmxvYXQgYSA9IHRleHR1cmUobWFzaywgYykucjsKICAgICAgYSA9IGE8MC41PzIuMCphKmE6MS4wLTIuMCooMS4wLWEpKigxLjAtYSk7CiAgICAgIC8vIGZsb2F0IGEyID0gdGV4dHVyZShsYXN0TWFzaywgYykuYTsKICAgICAgLy8gYTIgPSBhMjwwLjU/Mi4wKmEyKmEyOjEuMC0yLjAqKDEuMC1hMikqKDEuMC1hMik7CiAgICAgIC8vIGZsb2F0IGRlbHRhID0gYSAtIGEyOwogICAgICAvLyBpZiAoZGVsdGEgPCAwLjI1ICYmIGRlbHRhID4gLTAuMjUpCiAgICAgIC8vIHsKICAgICAgLy8gICAgIGEgPSBhICsgMC41KmRlbHRhOwogICAgICAvLyB9CiAgICAgIAogICAgICB2ZWMyIG8gPSAxLjAgLyB2ZWMyKHRleHR1cmVTaXplKGZyYW1lLCAwKSk7CiAgICAACiAgICAgIG91dENvbG9yID0gZzsKICAAI3ZlcnNpb24gMzAwIGVzCmluIHZlYzIgYV9wb3NpdGlvbjsKaW4gdmVjMiBhX3RleENvb3JkOwoKdW5pZm9ybSBtYXQ0IHVfdGV4dHVyZU1hdHJpeDsKCm91dCB2ZWMyIHZfdGV4Q29vcmQ7CnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQoYV9wb3NpdGlvbi54LCBhX3Bvc2l0aW9uLnksIDAsIDEpOwogIHZfdGV4Q29vcmQgPSh1X3RleHR1cmVNYXRyaXggKiB2ZWM0KGFfdGV4Q29vcmQsIDAsIDEpKS54eTsKfQoAc2V0QmVhdXR5ICVmICVmICVmICVmICVmCgBvdXRDb2xvciA9IHNyY19jb2xvcjsKAG91dENvbG9yID0gbWl4KHZlYzQodV9jb2xvciwxLjApLHNyY19jb2xvcixhKTsKADZBbGxJbjEAAIAoAABfFgAAUDZBbGxJbjEAAAAABCkAAHAWAAAAAAAAaBYAAFBLNkFsbEluMQAAAAQpAACMFgAAAQAAAGgWAABpaQB2AHZpAHwWAADMFgAATjEwZW1zY3JpcHRlbjN2YWxFAACAKAAAuBYAAGlpaQB2aWlpAAAAALwnAAB8FgAAcCgAAHAoAABwKAAAcCgAAHAoAAB2aWlkZGRkZABBkC4LyAi8JwAAfBYAAHAoAABwKAAAcCgAAHAoAAB2aWlkZGRkALwnAAB8FgAAdmlpALwnAADMFgAAzBYAAHwWAADMFgAAHCgAALwnAADMFgAAoBcAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAACAKAAAYBcAAMwWAAC8JwAAzBYAAMwWAABOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQAAgCgAALgXAABOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQAAgCgAAAAYAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRHNOU18xMWNoYXJfdHJhaXRzSURzRUVOU185YWxsb2NhdG9ySURzRUVFRQAAAIAoAABIGAAATlN0M19fMjEyYmFzaWNfc3RyaW5nSURpTlNfMTFjaGFyX3RyYWl0c0lEaUVFTlNfOWFsbG9jYXRvcklEaUVFRUUAAACAKAAAlBgAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWNFRQAAgCgAAOAYAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUAAIAoAAAIGQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaEVFAACAKAAAMBkAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXNFRQAAgCgAAFgZAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUAAIAoAACAGQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaUVFAACAKAAAqBkAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWpFRQAAgCgAANAZAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUAAIAoAAD4GQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJbUVFAACAKAAAIBoAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXhFRQAAgCgAAEgaAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l5RUUAAIAoAABwGgAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAACAKAAAmBoAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQAAgCgAAMAaAAD+gitlRxVnQAAAAAAAADhDAAD6/kIudr86O568mvcMvb39/////98/PFRVVVVVxT+RKxfPVVWlPxfQpGcREYE/AAAAAAAAyELvOfr+Qi7mPyTEgv+9v84/tfQM1whrrD/MUEbSq7KDP4Q6Tpvg11U/AEHmNgu7EPA/br+IGk87mzw1M/upPfbvP13c2JwTYHG8YYB3Pprs7z/RZocQel6QvIV/bugV4+8/E/ZnNVLSjDx0hRXTsNnvP/qO+SOAzou83vbdKWvQ7z9hyOZhTvdgPMibdRhFx+8/mdMzW+SjkDyD88bKPr7vP217g12mmpc8D4n5bFi17z/87/2SGrWOPPdHciuSrO8/0ZwvcD2+Pjyi0dMy7KPvPwtukIk0A2q8G9P+r2ab7z8OvS8qUlaVvFFbEtABk+8/VepOjO+AULzMMWzAvYrvPxb01bkjyZG84C2prpqC7z+vVVzp49OAPFGOpciYeu8/SJOl6hUbgLx7UX08uHLvPz0y3lXwH4+86o2MOPlq7z+/UxM/jImLPHXLb+tbY+8/JusRdpzZlrzUXASE4FvvP2AvOj737Jo8qrloMYdU7z+dOIbLguePvB3Z/CJQTe8/jcOmREFvijzWjGKIO0bvP30E5LAFeoA8ltx9kUk/7z+UqKjj/Y6WPDhidW56OO8/fUh08hhehzw/prJPzjHvP/LnH5grR4A83XziZUUr7z9eCHE/e7iWvIFj9eHfJO8/MasJbeH3gjzh3h/1nR7vP/q/bxqbIT28kNna0H8Y7z+0CgxygjeLPAsD5KaFEu8/j8vOiZIUbjxWLz6prwzvP7arsE11TYM8FbcxCv4G7z9MdKziAUKGPDHYTPxwAe8/SvjTXTndjzz/FmSyCPzuPwRbjjuAo4a88Z+SX8X27j9oUEvM7UqSvMupOjen8e4/ji1RG/gHmbxm2AVtruzuP9I2lD7o0XG895/lNNvn7j8VG86zGRmZvOWoE8Mt4+4/bUwqp0ifhTwiNBJMpt7uP4ppKHpgEpO8HICsBEXa7j9biRdIj6dYvCou9yEK1u4/G5pJZ5ssfLyXqFDZ9dHuPxGswmDtY0M8LYlhYAjO7j/vZAY7CWaWPFcAHe1Byu4/eQOh2uHMbjzQPMG1osbuPzASDz+O/5M83tPX8CrD7j+wr3q7zpB2PCcqNtXav+4/d+BU670dkzwN3f2ZsrzuP46jcQA0lI+8pyyddrK57j9Jo5PczN6HvEJmz6Latu4/XzgPvcbeeLyCT51WK7TuP/Zce+xGEoa8D5JdyqSx7j+O1/0YBTWTPNontTZHr+4/BZuKL7eYezz9x5fUEq3uPwlUHOLhY5A8KVRI3Qer7j/qxhlQhcc0PLdGWYomqe4/NcBkK+YylDxIIa0Vb6fuP592mWFK5Iy8Cdx2ueGl7j+oTe87xTOMvIVVOrB+pO4/rukriXhThLwgw8w0RqPuP1hYVnjdzpO8JSJVgjii7j9kGX6AqhBXPHOpTNRVoe4/KCJev++zk7zNO39mnqDuP4K5NIetEmq8v9oLdRKg7j/uqW2472djvC8aZTyyn+4/UYjgVD3cgLyElFH5fZ/uP88+Wn5kH3i8dF/s6HWf7j+wfYvASu6GvHSBpUian+4/iuZVHjIZhrzJZ0JW65/uP9PUCV7LnJA8P13eT2mg7j8dpU253DJ7vIcB63MUoe4/a8BnVP3slDwywTAB7aHuP1Vs1qvh62U8Yk7PNvOi7j9Cz7MvxaGIvBIaPlQnpO4/NDc78bZpk7wTzkyZiaXuPx7/GTqEXoC8rccjRhqn7j9uV3LYUNSUvO2SRJvZqO4/AIoOW2etkDyZZorZx6ruP7Tq8MEvt40826AqQuWs7j//58WcYLZlvIxEtRYyr+4/RF/zWYP2ezw2dxWZrrHuP4M9HqcfCZO8xv+RC1u07j8pHmyLuKldvOXFzbA3t+4/WbmQfPkjbLwPUsjLRLruP6r59CJDQ5K8UE7en4K97j9LjmbXbMqFvLoHynDxwO4/J86RK/yvcTyQ8KOCkcTuP7tzCuE10m08IyPjGWPI7j9jImIiBMWHvGXlXXtmzO4/1THi44YcizwzLUrsm9DuPxW7vNPRu5G8XSU+sgPV7j/SMe6cMcyQPFizMBOe2e4/s1pzboRphDy//XlVa97uP7SdjpfN34K8evPTv2vj7j+HM8uSdxqMPK3TWpmf6O4/+tnRSo97kLxmto0pB+7uP7qu3FbZw1W8+xVPuKLz7j9A9qY9DqSQvDpZ5Y1y+e4/NJOtOPTWaLxHXvvydv/uPzWKWGvi7pG8SgahMLAF7z/N3V8K1/90PNLBS5AeDO8/rJiS+vu9kbwJHtdbwhLvP7MMrzCubnM8nFKF3ZsZ7z+U/Z9cMuOOPHrQ/1+rIO8/rFkJ0Y/ghDxL0Vcu8SfvP2caTjivzWM8tecGlG0v7z9oGZJsLGtnPGmQ79wgN+8/0rXMgxiKgLz6w11VCz/vP2/6/z9drY+8fIkHSi1H7z9JqXU4rg2QvPKJDQiHT+8/pwc9poWjdDyHpPvcGFjvPw8iQCCekYK8mIPJFuNg7z+sksHVUFqOPIUy2wPmae8/S2sBrFk6hDxgtAHzIXPvPx8+tAch1YK8X5t7M5d87z/JDUc7uSqJvCmh9RRGhu8/04g6YAS2dDz2P4vnLpDvP3FynVHsxYM8g0zH+1Ga7z/wkdOPEvePvNqQpKKvpO8/fXQj4piujbzxZ44tSK/vPwggqkG8w448J1ph7hu67z8y66nDlCuEPJe6azcrxe8/7oXRMalkijxARW5bdtDvP+3jO+S6N468FL6crf3b7z+dzZFNO4l3PNiQnoHB5+8/icxgQcEFUzzxcY8rwvPvPwAAAAAAAAAAGQAKABkZGQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAAZABEKGRkZAwoHAAEACQsYAAAJBgsAAAsABhkAAAAZGRkAQbHHAAshDgAAAAAAAAAAGQAKDRkZGQANAAACAAkOAAAACQAOAAAOAEHrxwALAQwAQffHAAsVEwAAAAATAAAAAAkMAAAAAAAMAAAMAEGlyAALARAAQbHIAAsVDwAAAAQPAAAAAAkQAAAAAAAQAAAQAEHfyAALARIAQevIAAseEQAAAAARAAAAAAkSAAAAAAASAAASAAAaAAAAGhoaAEGiyQALDhoAAAAaGhoAAAAAAAAJAEHTyQALARQAQd/JAAsVFwAAAAAXAAAAAAkUAAAAAAAUAAAUAEGNygALARYAQZnKAAulCRUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgAAAAAKAAAAZAAAAOgDAAAQJwAAoIYBAEBCDwCAlpgAAOH1BQDKmjsAAAAAAAAAADAwMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5TjEwX19jeHhhYml2MTE2X19zaGltX3R5cGVfaW5mb0UAAAAAqCgAADgmAAC4KQAATjEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm9FAAAAqCgAAGgmAABcJgAATjEwX19jeHhhYml2MTE3X19wYmFzZV90eXBlX2luZm9FAAAAqCgAAJgmAABcJgAATjEwX19jeHhhYml2MTE5X19wb2ludGVyX3R5cGVfaW5mb0UAqCgAAMgmAAC8JgAATjEwX19jeHhhYml2MTIwX19mdW5jdGlvbl90eXBlX2luZm9FAAAAAKgoAAD4JgAAXCYAAE4xMF9fY3h4YWJpdjEyOV9fcG9pbnRlcl90b19tZW1iZXJfdHlwZV9pbmZvRQAAAKgoAAAsJwAAvCYAAAAAAACsJwAAIQAAACIAAAAjAAAAJAAAACUAAABOMTBfX2N4eGFiaXYxMjNfX2Z1bmRhbWVudGFsX3R5cGVfaW5mb0UAqCgAAIQnAABcJgAAdgAAAHAnAAC4JwAARG4AAHAnAADEJwAAYgAAAHAnAADQJwAAYwAAAHAnAADcJwAAaAAAAHAnAADoJwAAYQAAAHAnAAD0JwAAcwAAAHAnAAAAKAAAdAAAAHAnAAAMKAAAaQAAAHAnAAAYKAAAagAAAHAnAAAkKAAAbAAAAHAnAAAwKAAAbQAAAHAnAAA8KAAAeAAAAHAnAABIKAAAeQAAAHAnAABUKAAAZgAAAHAnAABgKAAAZAAAAHAnAABsKAAAAAAAAIwmAAAhAAAAJgAAACMAAAAkAAAAJwAAACgAAAApAAAAKgAAAAAAAADwKAAAIQAAACsAAAAjAAAAJAAAACcAAAAsAAAALQAAAC4AAABOMTBfX2N4eGFiaXYxMjBfX3NpX2NsYXNzX3R5cGVfaW5mb0UAAAAAqCgAAMgoAACMJgAAAAAAAOwmAAAhAAAALwAAACMAAAAkAAAAMAAAAAAAAAA8KQAAMQAAADIAAAAzAAAAU3Q5ZXhjZXB0aW9uAAAAAIAoAAAsKQAAAAAAAGgpAAAYAAAANAAAADUAAABTdDExbG9naWNfZXJyb3IAqCgAAFgpAAA8KQAAAAAAAJwpAAAYAAAANgAAADUAAABTdDEybGVuZ3RoX2Vycm9yAAAAAKgoAACIKQAAaCkAAFN0OXR5cGVfaW5mbwAAAACAKAAAqCkAQcDTAAsJCxUAAAAAAAAFAEHU0wALARsAQezTAAsOHAAAAB0AAABoKwAAAAQAQYTUAAsBAQBBlNQACwX/////CgBB2NQACwNgMQE=")||(qe=re,re=I.locateFile?I.locateFile(qe,f):f+qe);var Fi=$=>{for(;$.length>0;)$.shift()(I)};I.noExitRuntime;function To($){this.excPtr=$,this.ptr=$-24,this.set_type=function(K){TA[this.ptr+4>>2]=K},this.get_type=function(){return TA[this.ptr+4>>2]},this.set_destructor=function(K){TA[this.ptr+8>>2]=K},this.get_destructor=function(){return TA[this.ptr+8>>2]},this.set_caught=function(K){K=K?1:0,lA[this.ptr+12|0]=K},this.get_caught=function(){return lA[this.ptr+12|0]!=0},this.set_rethrown=function(K){K=K?1:0,lA[this.ptr+13|0]=K},this.get_rethrown=function(){return lA[this.ptr+13|0]!=0},this.init=function(K,vA){this.set_adjusted_ptr(0),this.set_type(K),this.set_destructor(vA)},this.set_adjusted_ptr=function(K){TA[this.ptr+16>>2]=K},this.get_adjusted_ptr=function(){return TA[this.ptr+16>>2]},this.get_exception_ptr=function(){if(ba(this.get_type()))return TA[this.excPtr>>2];var K=this.get_adjusted_ptr();return K!==0?K:this.excPtr}}var io,Eo,Vs,ki=$=>{for(var K="",vA=$;sA[vA];)K+=io[sA[vA++]];return K},ns={},jo={},Ao={},Zt=$=>{throw new Eo($)},oo=$=>{throw new Vs($)},bi=($,K,vA)=>{function qA(Fe){var rt=vA(Fe);rt.length!==$.length&&oo("Mismatched type converter count");for(var Ct=0;Ct<$.length;++Ct)vs($[Ct],rt[Ct])}$.forEach(function(Fe){Ao[Fe]=K});var Ae=new Array(K.length),me=[],Pe=0;K.forEach((Fe,rt)=>{jo.hasOwnProperty(Fe)?Ae[rt]=jo[Fe]:(me.push(Fe),ns.hasOwnProperty(Fe)||(ns[Fe]=[]),ns[Fe].push(()=>{Ae[rt]=jo[Fe],++Pe===me.length&&qA(Ae)}))}),me.length===0&&qA(Ae)};function vs($,K,vA={}){if(!("argPackAdvance"in K))throw new TypeError("registerType registeredInstance requires argPackAdvance");return function(qA,Ae,me={}){var Pe=Ae.name;if(qA||Zt(`type "${Pe}" must have a positive integer typeid pointer`),jo.hasOwnProperty(qA)){if(me.ignoreDuplicateRegistrations)return;Zt(`Cannot register type '${Pe}' twice`)}if(jo[qA]=Ae,delete Ao[qA],ns.hasOwnProperty(qA)){var Fe=ns[qA];delete ns[qA],Fe.forEach(rt=>rt())}}($,K,vA)}var HA,ce=$=>{Zt($.$$.ptrType.registeredClass.name+" instance already deleted")},Ve=!1,Ot=$=>{},nt=$=>{$.count.value-=1,$.count.value===0&&(K=>{K.smartPtr?K.smartPtrType.rawDestructor(K.smartPtr):K.ptrType.registeredClass.rawDestructor(K.ptr)})($)},It=($,K,vA)=>{if(K===vA)return $;if(vA.baseClass===void 0)return null;var qA=It($,K,vA.baseClass);return qA===null?null:vA.downcast(qA)},ei={},ti=()=>Object.keys(Oi).length,be=()=>{var $=[];for(var K in Oi)Oi.hasOwnProperty(K)&&$.push(Oi[K]);return $},Ze=[],wt=()=>{for(;Ze.length;){var $=Ze.pop();$.$$.deleteScheduled=!1,$.delete()}},Nt=$=>{HA=$,Ze.length&&HA&&HA(wt)},Oi={},po=($,K)=>(K=((vA,qA)=>{for(qA===void 0&&Zt("ptr should not be undefined");vA.baseClass;)qA=vA.upcast(qA),vA=vA.baseClass;return qA})($,K),Oi[K]),No=($,K)=>(K.ptrType&&K.ptr||oo("makeClassHandle requires ptr and ptrType"),!!K.smartPtrType!=!!K.smartPtr&&oo("Both smartPtrType and smartPtr must be specified"),K.count={value:1},Go(Object.create($,{$$:{value:K}})));function so($){var K=this.getPointee($);if(!K)return this.destructor($),null;var vA=po(this.registeredClass,K);if(vA!==void 0){if(vA.$$.count.value===0)return vA.$$.ptr=K,vA.$$.smartPtr=$,vA.clone();var qA=vA.clone();return this.destructor($),qA}function Ae(){return this.isSmartPointer?No(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:K,smartPtrType:this,smartPtr:$}):No(this.registeredClass.instancePrototype,{ptrType:this,ptr:$})}var me,Pe=this.registeredClass.getActualType(K),Fe=ei[Pe];if(!Fe)return Ae.call(this);me=this.isConst?Fe.constPointerType:Fe.pointerType;var rt=It(K,this.registeredClass,me.registeredClass);return rt===null?Ae.call(this):this.isSmartPointer?No(me.registeredClass.instancePrototype,{ptrType:me,ptr:rt,smartPtrType:this,smartPtr:$}):No(me.registeredClass.instancePrototype,{ptrType:me,ptr:rt})}var Go=$=>typeof FinalizationRegistry>"u"?(Go=K=>K,$):(Ve=new FinalizationRegistry(K=>{nt(K.$$)}),Ot=K=>Ve.unregister(K),(Go=K=>{var vA=K.$$;if(vA.smartPtr){var qA={$$:vA};Ve.register(K,qA,K)}return K})($));function An(){}var rn=($,K)=>Object.defineProperty(K,"name",{value:$}),Es=($,K,vA)=>{if($[K].overloadTable===void 0){var qA=$[K];$[K]=function(){return $[K].overloadTable.hasOwnProperty(arguments.length)||Zt(`Function '${vA}' called with an invalid number of arguments (${arguments.length}) - expects one of (${$[K].overloadTable})!`),$[K].overloadTable[arguments.length].apply(this,arguments)},$[K].overloadTable=[],$[K].overloadTable[qA.argCount]=qA}};function an($,K,vA,qA,Ae,me,Pe,Fe){this.name=$,this.constructor=K,this.instancePrototype=vA,this.rawDestructor=qA,this.baseClass=Ae,this.getActualType=me,this.upcast=Pe,this.downcast=Fe,this.pureVirtualFunctions=[]}var Do=($,K,vA)=>{for(;K!==vA;)K.upcast||Zt(`Expected null or instance of ${vA.name}, got an instance of ${K.name}`),$=K.upcast($),K=K.baseClass;return $};function pA($,K){if(K===null)return this.isReference&&Zt(`null is not a valid ${this.name}`),0;K.$$||Zt(`Cannot pass "${as(K)}" as a ${this.name}`),K.$$.ptr||Zt(`Cannot pass deleted object as a pointer of type ${this.name}`);var vA=K.$$.ptrType.registeredClass;return Do(K.$$.ptr,vA,this.registeredClass)}function Jn($,K){var vA;if(K===null)return this.isReference&&Zt(`null is not a valid ${this.name}`),this.isSmartPointer?(vA=this.rawConstructor(),$!==null&&$.push(this.rawDestructor,vA),vA):0;K.$$||Zt(`Cannot pass "${as(K)}" as a ${this.name}`),K.$$.ptr||Zt(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&K.$$.ptrType.isConst&&Zt(`Cannot convert argument of type ${K.$$.smartPtrType?K.$$.smartPtrType.name:K.$$.ptrType.name} to parameter type ${this.name}`);var qA=K.$$.ptrType.registeredClass;if(vA=Do(K.$$.ptr,qA,this.registeredClass),this.isSmartPointer)switch(K.$$.smartPtr===void 0&&Zt("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:K.$$.smartPtrType===this?vA=K.$$.smartPtr:Zt(`Cannot convert argument of type ${K.$$.smartPtrType?K.$$.smartPtrType.name:K.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:vA=K.$$.smartPtr;break;case 2:if(K.$$.smartPtrType===this)vA=K.$$.smartPtr;else{var Ae=K.clone();vA=this.rawShare(vA,cn.toHandle(()=>Ae.delete())),$!==null&&$.push(this.rawDestructor,vA)}break;default:Zt("Unsupporting sharing policy")}return vA}function Qr($,K){if(K===null)return this.isReference&&Zt(`null is not a valid ${this.name}`),0;K.$$||Zt(`Cannot pass "${as(K)}" as a ${this.name}`),K.$$.ptr||Zt(`Cannot pass deleted object as a pointer of type ${this.name}`),K.$$.ptrType.isConst&&Zt(`Cannot convert argument of type ${K.$$.ptrType.name} to parameter type ${this.name}`);var vA=K.$$.ptrType.registeredClass;return Do(K.$$.ptr,vA,this.registeredClass)}function ds($){return this.fromWireType(TA[$>>2])}function zr($,K,vA,qA,Ae,me,Pe,Fe,rt,Ct,Rt){this.name=$,this.registeredClass=K,this.isReference=vA,this.isConst=qA,this.isSmartPointer=Ae,this.pointeeType=me,this.sharingPolicy=Pe,this.rawGetPointee=Fe,this.rawConstructor=rt,this.rawShare=Ct,this.rawDestructor=Rt,Ae||K.baseClass!==void 0?this.toWireType=Jn:qA?(this.toWireType=pA,this.destructorFunction=null):(this.toWireType=Qr,this.destructorFunction=null)}var Pi,Rs,or=[],en=$=>{var K=or[$];return K||($>=or.length&&(or.length=$+1),or[$]=K=Pi.get($)),K},wn=($,K,vA)=>$.includes("j")?((qA,Ae,me)=>{var Pe=I["dynCall_"+qA];return me&&me.length?Pe.apply(null,[Ae].concat(me)):Pe.call(null,Ae)})($,K,vA):en(K).apply(null,vA),qt=($,K)=>{var vA,qA,Ae,me=($=ki($)).includes("j")?(vA=$,qA=K,Ae=[],function(){return Ae.length=0,Object.assign(Ae,arguments),wn(vA,qA,Ae)}):en(K);return typeof me!="function"&&Zt(`unknown function pointer with signature ${$}: ${K}`),me},yg=$=>{var K=Ea($),vA=ki(K);return yn(K),vA},On=($,K)=>{var vA=[],qA={};throw K.forEach(function Ae(me){qA[me]||jo[me]||(Ao[me]?Ao[me].forEach(Ae):(vA.push(me),qA[me]=!0))}),new Rs(`${$}: `+vA.map(yg).join([", "]))},Gn=($,K)=>{for(var vA=[],qA=0;qA<$;qA++)vA.push(TA[K+4*qA>>2]);return vA},Js=$=>{for(;$.length;){var K=$.pop();$.pop()(K)}};function pr($,K,vA,qA,Ae,me){var Pe=K.length;Pe<2&&Zt("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var Fe=K[1]!==null&&vA!==null,rt=!1,Ct=1;Ct($ instanceof Object||Zt(`${vA} with invalid "this": ${$}`),$ instanceof K.registeredClass.constructor||Zt(`${vA} incompatible with "this" of type ${$.constructor.name}`),$.$$.ptr||Zt(`cannot call emscripten binding method ${vA} on deleted object`),Do($.$$.ptr,$.$$.ptrType.registeredClass,K.registeredClass));function mr(){this.allocated=[void 0],this.freelist=[]}var mo=new mr,gn=$=>{$>=mo.reserved&&--mo.get($).refcount===0&&mo.free($)},Sl=()=>{for(var $=0,K=mo.reserved;K($||Zt("Cannot use deleted val. handle = "+$),mo.get($).value),toHandle:$=>{switch($){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:return mo.allocate({refcount:1,value:$})}}};function fr($){return this.fromWireType(cA[$>>2])}var Ls,Jc,ms,as=$=>{if($===null)return"null";var K=typeof $;return K==="object"||K==="array"||K==="function"?$.toString():""+$},Ru=($,K)=>{switch(K){case 4:return function(vA){return this.fromWireType(WA[vA>>2])};case 8:return function(vA){return this.fromWireType(ue[vA>>3])};default:throw new TypeError(`invalid float width (${K}): ${$}`)}},Wa=($,K,vA)=>{switch(K){case 1:return vA?qA=>lA[qA|0]:qA=>sA[qA|0];case 2:return vA?qA=>mA[qA>>1]:qA=>IA[qA>>1];case 4:return vA?qA=>cA[qA>>2]:qA=>TA[qA>>2];default:throw new TypeError(`invalid integer width (${K}): ${$}`)}},Cs=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0,sg=($,K,vA)=>{for(var qA=K+vA,Ae=K;$[Ae]&&!(Ae>=qA);)++Ae;if(Ae-K>16&&$.buffer&&Cs)return Cs.decode($.subarray(K,Ae));for(var me="";K>10,56320|1023&Ct)}}else me+=String.fromCharCode((31&Pe)<<6|Fe)}else me+=String.fromCharCode(Pe)}return me},HI=($,K)=>$?sg(sA,$,K):"",As=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0,$i=($,K)=>{for(var vA=$,qA=vA>>1,Ae=qA+K/2;!(qA>=Ae)&&IA[qA];)++qA;if((vA=qA<<1)-$>32&&As)return As.decode(sA.subarray($,vA));for(var me="",Pe=0;!(Pe>=K/2);++Pe){var Fe=mA[$+2*Pe>>1];if(Fe==0)break;me+=String.fromCharCode(Fe)}return me},pc=($,K,vA)=>{if(vA===void 0&&(vA=2147483647),vA<2)return 0;for(var qA=K,Ae=(vA-=2)<2*$.length?vA/2:$.length,me=0;me>1]=Pe,K+=2}return mA[K>>1]=0,K-qA},ng=$=>2*$.length,Dg=($,K)=>{for(var vA=0,qA="";!(vA>=K/4);){var Ae=cA[$+4*vA>>2];if(Ae==0)break;if(++vA,Ae>=65536){var me=Ae-65536;qA+=String.fromCharCode(55296|me>>10,56320|1023&me)}else qA+=String.fromCharCode(Ae)}return qA},ua=($,K,vA)=>{if(vA===void 0&&(vA=2147483647),vA<4)return 0;for(var qA=K,Ae=qA+vA-4,me=0;me<$.length;++me){var Pe=$.charCodeAt(me);if(Pe>=55296&&Pe<=57343&&(Pe=65536+((1023&Pe)<<10)|1023&$.charCodeAt(++me)),cA[K>>2]=Pe,(K+=4)+4>Ae)break}return cA[K>>2]=0,K-qA},bo=$=>{for(var K=0,vA=0;vA<$.length;++vA){var qA=$.charCodeAt(vA);qA>=55296&&qA<=57343&&++vA,K+=4}return K},Zr=($,K)=>{var vA=jo[$];return vA===void 0&&Zt(K+" has unknown type "+yg($)),vA},_o=($,K,vA)=>{var qA=[],Ae=$.toWireType(qA,vA);return qA.length&&(TA[K>>2]=cn.toHandle(qA)),Ae},Hc={},Hn=[],Hs=Reflect.construct,Sg=[null,[],[]],mc=($,K)=>{var vA=Sg[$];K===0||K===10?(($===1?G:U)(sg(vA,0)),vA.length=0):vA.push(K)};(()=>{for(var $=new Array(256),K=0;K<256;++K)$[K]=String.fromCharCode(K);io=$})(),Eo=I.BindingError=class extends Error{constructor($){super($),this.name="BindingError"}},Vs=I.InternalError=class extends Error{constructor($){super($),this.name="InternalError"}},Object.assign(An.prototype,{isAliasOf($){if(!(this instanceof An)||!($ instanceof An))return!1;var K=this.$$.ptrType.registeredClass,vA=this.$$.ptr;$.$$=$.$$;for(var qA=$.$$.ptrType.registeredClass,Ae=$.$$.ptr;K.baseClass;)vA=K.upcast(vA),K=K.baseClass;for(;qA.baseClass;)Ae=qA.upcast(Ae),qA=qA.baseClass;return K===qA&&vA===Ae},clone(){if(this.$$.ptr||ce(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var $,K=Go(Object.create(Object.getPrototypeOf(this),{$$:{value:($=this.$$,{count:$.count,deleteScheduled:$.deleteScheduled,preservePointerOnDelete:$.preservePointerOnDelete,ptr:$.ptr,ptrType:$.ptrType,smartPtr:$.smartPtr,smartPtrType:$.smartPtrType})}}));return K.$$.count.value+=1,K.$$.deleteScheduled=!1,K},delete(){this.$$.ptr||ce(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&Zt("Object already scheduled for deletion"),Ot(this),nt(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||ce(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&Zt("Object already scheduled for deletion"),Ze.push(this),Ze.length===1&&HA&&HA(wt),this.$$.deleteScheduled=!0,this}}),I.getInheritedInstanceCount=ti,I.getLiveInheritedInstances=be,I.flushPendingDeletes=wt,I.setDelayFunction=Nt,Object.assign(zr.prototype,{getPointee($){return this.rawGetPointee&&($=this.rawGetPointee($)),$},destructor($){this.rawDestructor&&this.rawDestructor($)},argPackAdvance:8,readValueFromPointer:ds,deleteObject($){$!==null&&$.delete()},fromWireType:so}),Rs=I.UnboundTypeError=(Ls=Error,(ms=rn(Jc="UnboundTypeError",function($){this.name=Jc,this.message=$;var K=new Error($).stack;K!==void 0&&(this.stack=this.toString()+` -`+K.replace(/^Error(:[^\n]*)?\n/,""))})).prototype=Object.create(Ls.prototype),ms.prototype.constructor=ms,ms.prototype.toString=function(){return this.message===void 0?this.name:`${this.name}: ${this.message}`},ms),Object.assign(mr.prototype,{get($){return this.allocated[$]},has($){return this.allocated[$]!==void 0},allocate($){var K=this.freelist.pop()||this.allocated.length;return this.allocated[K]=$,K},free($){this.allocated[$]=void 0,this.freelist.push($)}}),mo.allocated.push({value:void 0},{value:null},{value:!0},{value:!1}),mo.reserved=mo.allocated.length,I.count_emval_handles=Sl;var fn,Ga={w:($,K,vA)=>{throw new To($).init(K,vA),$},q:($,K,vA,qA,Ae)=>{},u:($,K,vA,qA)=>{vs($,{name:K=ki(K),fromWireType:function(Ae){return!!Ae},toWireType:function(Ae,me){return me?vA:qA},argPackAdvance:8,readValueFromPointer:function(Ae){return this.fromWireType(sA[Ae])},destructorFunction:null})},y:($,K,vA,qA,Ae,me,Pe,Fe,rt,Ct,Rt,Yt,Ii)=>{Rt=ki(Rt),me=qt(Ae,me),Fe&&(Fe=qt(Pe,Fe)),Ct&&(Ct=qt(rt,Ct)),Ii=qt(Yt,Ii);var ct=(xt=>{if(xt===void 0)return"_unknown";var Ji=(xt=xt.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return Ji>=48&&Ji<=57?`_${xt}`:xt})(Rt);((xt,Ji,Ki)=>{I.hasOwnProperty(xt)?(Zt(`Cannot register public name '${xt}' twice`),Es(I,xt,xt),I.hasOwnProperty(Ki)&&Zt(`Cannot register multiple overloads of a function with the same number of arguments (${Ki})!`),I[xt].overloadTable[Ki]=Ji):I[xt]=Ji})(ct,function(){On(`Cannot construct ${Rt} due to unbound types`,[qA])}),bi([$,K,vA],qA?[qA]:[],function(xt){var Ji,Ki;xt=xt[0],Ki=qA?(Ji=xt.registeredClass).instancePrototype:An.prototype;var qs=rn(Rt,function(){if(Object.getPrototypeOf(this)!==Mi)throw new Eo("Use 'new' to construct "+Rt);if(zo.constructor_body===void 0)throw new Eo(Rt+" has no accessible constructor");var xn=zo.constructor_body[arguments.length];if(xn===void 0)throw new Eo(`Tried to invoke ctor of ${Rt} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(zo.constructor_body).toString()}) parameters instead!`);return xn.apply(this,arguments)}),Mi=Object.create(Ki,{constructor:{value:qs}});qs.prototype=Mi;var zo=new an(Rt,qs,Mi,Ii,Ji,me,Fe,Ct);zo.baseClass&&(zo.baseClass.__derivedClasses===void 0&&(zo.baseClass.__derivedClasses=[]),zo.baseClass.__derivedClasses.push(zo));var Mg=new zr(Rt,zo,!0,!1,!1),sr=new zr(Rt+"*",zo,!1,!1,!1),yr=new zr(Rt+" const*",zo,!1,!0,!1);return ei[$]={pointerType:sr,constPointerType:yr},((xn,Ml,Ks)=>{I.hasOwnProperty(xn)||oo("Replacing nonexistant public symbol"),I[xn].overloadTable!==void 0&&Ks!==void 0?I[xn].overloadTable[Ks]=Ml:(I[xn]=Ml,I[xn].argCount=Ks)})(ct,qs),[Mg,sr,yr]})},x:($,K,vA,qA,Ae,me)=>{var Pe=Gn(K,vA);Ae=qt(qA,Ae),bi([],[$],function(Fe){var rt=`constructor ${(Fe=Fe[0]).name}`;if(Fe.registeredClass.constructor_body===void 0&&(Fe.registeredClass.constructor_body=[]),Fe.registeredClass.constructor_body[K-1]!==void 0)throw new Eo(`Cannot register multiple constructors with identical number of parameters (${K-1}) for class '${Fe.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return Fe.registeredClass.constructor_body[K-1]=()=>{On(`Cannot construct ${Fe.name} due to unbound types`,Pe)},bi([],Pe,Ct=>(Ct.splice(1,0,null),Fe.registeredClass.constructor_body[K-1]=pr(rt,Ct,null,Ae,me),[])),[]})},i:($,K,vA,qA,Ae,me,Pe,Fe,rt)=>{var Ct=Gn(vA,qA);K=(Rt=>{const Yt=(Rt=Rt.trim()).indexOf("(");return Yt!==-1?Rt.substr(0,Yt):Rt})(K=ki(K)),me=qt(Ae,me),bi([],[$],function(Rt){var Yt=`${(Rt=Rt[0]).name}.${K}`;function Ii(){On(`Cannot call ${Yt} due to unbound types`,Ct)}K.startsWith("@@")&&(K=Symbol[K.substring(2)]),Fe&&Rt.registeredClass.pureVirtualFunctions.push(K);var ct=Rt.registeredClass.instancePrototype,xt=ct[K];return xt===void 0||xt.overloadTable===void 0&&xt.className!==Rt.name&&xt.argCount===vA-2?(Ii.argCount=vA-2,Ii.className=Rt.name,ct[K]=Ii):(Es(ct,K,Yt),ct[K].overloadTable[vA-2]=Ii),bi([],Ct,function(Ji){var Ki=pr(Yt,Ji,Rt,me,Pe);return ct[K].overloadTable===void 0?(Ki.argCount=vA-2,ct[K]=Ki):ct[K].overloadTable[vA-2]=Ki,[]}),[]})},k:($,K,vA,qA,Ae,me,Pe,Fe,rt,Ct)=>{K=ki(K),Ae=qt(qA,Ae),bi([],[$],function(Rt){var Yt=`${(Rt=Rt[0]).name}.${K}`,Ii={get(){On(`Cannot access ${Yt} due to unbound types`,[vA,Pe])},enumerable:!0,configurable:!0};return Ii.set=rt?()=>On(`Cannot access ${Yt} due to unbound types`,[vA,Pe]):ct=>Zt(Yt+" is a read-only property"),Object.defineProperty(Rt.registeredClass.instancePrototype,K,Ii),bi([],rt?[vA,Pe]:[vA],function(ct){var xt=ct[0],Ji={get(){var qs=Pn(this,Rt,Yt+" getter");return xt.fromWireType(Ae(me,qs))},enumerable:!0};if(rt){rt=qt(Fe,rt);var Ki=ct[1];Ji.set=function(qs){var Mi=Pn(this,Rt,Yt+" setter"),zo=[];rt(Ct,Mi,Ki.toWireType(zo,qs)),Js(zo)}}return Object.defineProperty(Rt.registeredClass.instancePrototype,K,Ji),[]}),[]})},t:($,K)=>{vs($,{name:K=ki(K),fromWireType:vA=>{var qA=cn.toValue(vA);return gn(vA),qA},toWireType:(vA,qA)=>cn.toHandle(qA),argPackAdvance:8,readValueFromPointer:fr,destructorFunction:null})},p:($,K,vA)=>{vs($,{name:K=ki(K),fromWireType:qA=>qA,toWireType:(qA,Ae)=>Ae,argPackAdvance:8,readValueFromPointer:Ru(K,vA),destructorFunction:null})},g:($,K,vA,qA,Ae)=>{K=ki(K);var me=rt=>rt;if(qA===0){var Pe=32-8*vA;me=rt=>rt<>>Pe}var Fe=K.includes("unsigned");vs($,{name:K,fromWireType:me,toWireType:Fe?function(rt,Ct){return this.name,Ct>>>0}:function(rt,Ct){return this.name,Ct},argPackAdvance:8,readValueFromPointer:Wa(K,vA,qA!==0),destructorFunction:null})},a:($,K,vA)=>{var qA=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][K];function Ae(me){var Pe=TA[me>>2],Fe=TA[me+4>>2];return new qA(lA.buffer,Fe,Pe)}vs($,{name:vA=ki(vA),fromWireType:Ae,argPackAdvance:8,readValueFromPointer:Ae},{ignoreDuplicateRegistrations:!0})},o:($,K)=>{var vA=(K=ki(K))==="std::string";vs($,{name:K,fromWireType(qA){var Ae,me=TA[qA>>2],Pe=qA+4;if(vA)for(var Fe=Pe,rt=0;rt<=me;++rt){var Ct=Pe+rt;if(rt==me||sA[Ct]==0){var Rt=HI(Fe,Ct-Fe);Ae===void 0?Ae=Rt:(Ae+="\0",Ae+=Rt),Fe=Ct+1}}else{var Yt=new Array(me);for(rt=0;rt{for(var Ii=0,ct=0;ct=55296&&xt<=57343?(Ii+=4,++ct):Ii+=3}return Ii})(Ae):Ae.length;var Fe=fs(4+me+1),rt=Fe+4;if(TA[Fe>>2]=me,vA&&Pe)((Yt,Ii,ct,xt)=>{if(!(xt>0))return 0;for(var Ji=ct,Ki=ct+xt-1,qs=0;qs=55296&&Mi<=57343&&(Mi=65536+((1023&Mi)<<10)|1023&Yt.charCodeAt(++qs)),Mi<=127){if(ct>=Ki)break;Ii[ct++]=Mi}else if(Mi<=2047){if(ct+1>=Ki)break;Ii[ct++]=192|Mi>>6,Ii[ct++]=128|63&Mi}else if(Mi<=65535){if(ct+2>=Ki)break;Ii[ct++]=224|Mi>>12,Ii[ct++]=128|Mi>>6&63,Ii[ct++]=128|63&Mi}else{if(ct+3>=Ki)break;Ii[ct++]=240|Mi>>18,Ii[ct++]=128|Mi>>12&63,Ii[ct++]=128|Mi>>6&63,Ii[ct++]=128|63&Mi}}Ii[ct]=0})(Ae,sA,rt,me+1);else if(Pe)for(var Ct=0;Ct255&&(yn(rt),Zt("String has UTF-16 code units that do not fit in 8 bits")),sA[rt+Ct]=Rt}else for(Ct=0;Ct{var qA,Ae,me,Pe,Fe;vA=ki(vA),K===2?(qA=$i,Ae=pc,Pe=ng,me=()=>IA,Fe=1):K===4&&(qA=Dg,Ae=ua,Pe=bo,me=()=>TA,Fe=2),vs($,{name:vA,fromWireType:rt=>{for(var Ct,Rt=TA[rt>>2],Yt=me(),Ii=rt+4,ct=0;ct<=Rt;++ct){var xt=rt+4+ct*K;if(ct==Rt||Yt[xt>>Fe]==0){var Ji=qA(Ii,xt-Ii);Ct===void 0?Ct=Ji:(Ct+="\0",Ct+=Ji),Ii=xt+K}}return yn(rt),Ct},toWireType:(rt,Ct)=>{typeof Ct!="string"&&Zt(`Cannot pass non-string to C++ string type ${vA}`);var Rt=Pe(Ct),Yt=fs(4+Rt+K);return TA[Yt>>2]=Rt>>Fe,Ae(Ct,Yt+4,Rt+K),rt!==null&&rt.push(yn,Yt),Yt},argPackAdvance:8,readValueFromPointer:fr,destructorFunction(rt){yn(rt)}})},v:($,K)=>{vs($,{isVoid:!0,name:K=ki(K),argPackAdvance:0,fromWireType:()=>{},toWireType:(vA,qA)=>{}})},j:($,K,vA)=>($=cn.toValue($),K=Zr(K,"emval::as"),_o(K,vA,$)),e:($,K,vA,qA,Ae)=>{var me,Pe;return($=Hn[$])(K=cn.toValue(K),K[vA=(Pe=Hc[me=vA])===void 0?ki(me):Pe],qA,Ae)},d:gn,f:($,K,vA)=>{var qA=((Ct,Rt)=>{for(var Yt=new Array(Ct),Ii=0;Ii>2],"parameter "+Ii);return Yt})($,K),Ae=qA.shift();$--;var me,Pe,Fe=new Array($),rt=`methodCaller<(${qA.map(Ct=>Ct.name).join(", ")}) => ${Ae.name}>`;return me=rn(rt,(Ct,Rt,Yt,Ii)=>{for(var ct=0,xt=0;xt<$;++xt)Fe[xt]=qA[xt].readValueFromPointer(Ii+ct),ct+=qA[xt].argPackAdvance;var Ji=vA===1?Hs(Rt,Fe):Rt.apply(Ct,Fe);for(xt=0;xt<$;++xt)qA[xt].deleteObject&&qA[xt].deleteObject(Fe[xt]);return _o(Ae,Yt,Ji)}),Pe=Hn.length,Hn.push(me),Pe},c:$=>{$>4&&(mo.get($).refcount+=1)},b:$=>{var K=cn.toValue($);Js(K),gn($)},h:($,K)=>{var vA=($=Zr($,"_emval_take_value")).readValueFromPointer(K);return cn.toHandle(vA)},m:()=>{Et("")},s:($,K,vA)=>sA.copyWithin($,K,K+vA),r:$=>{sA.length,Et("OOM")},n:($,K,vA,qA)=>{for(var Ae=0,me=0;me>2],Fe=TA[K+4>>2];K+=8;for(var rt=0;rt>2]=Ae,0}},In=function(){var $={a:Ga};function K(vA,qA){var Ae,me;return In=vA.exports,_=In.z,Ae=_.buffer,I.HEAP8=lA=new Int8Array(Ae),I.HEAP16=mA=new Int16Array(Ae),I.HEAPU8=sA=new Uint8Array(Ae),I.HEAPU16=IA=new Uint16Array(Ae),I.HEAP32=cA=new Int32Array(Ae),I.HEAPU32=TA=new Uint32Array(Ae),I.HEAPF32=WA=new Float32Array(Ae),I.HEAPF64=ue=new Float64Array(Ae),Pi=In.C,me=In.A,Qe.unshift(me),function(){if(Mt--,I.monitorRunDependencies&&I.monitorRunDependencies(Mt),Mt==0&&jt){var Pe=jt;jt=null,Pe()}}(),In}if(Mt++,I.monitorRunDependencies&&I.monitorRunDependencies(Mt),I.instantiateWasm)try{return I.instantiateWasm($,K)}catch(vA){U(`Module.instantiateWasm callback failed with error: ${vA}`),l(vA)}return gt(0,re,$,function(vA){K(vA.instance)}).catch(l),{}}(),fs=$=>(fs=In.B)($),Ea=$=>(Ea=In.D)($),yn=$=>(yn=In.E)($),ba=$=>(ba=In.F)($);I.dynCall_jiji=($,K,vA,qA,Ae)=>(I.dynCall_jiji=In.G)($,K,vA,qA,Ae),I._vertexShaderSource=10688;function Sa(){function $(){fn||(fn=!0,I.calledRun=!0,Ce||(Fi(Qe),r(I),I.onRuntimeInitialized&&I.onRuntimeInitialized(),function(){if(I.postRun)for(typeof I.postRun=="function"&&(I.postRun=[I.postRun]);I.postRun.length;)je(I.postRun.shift());Fi(ut)}()))}Mt>0||(function(){if(I.preRun)for(typeof I.preRun=="function"&&(I.preRun=[I.preRun]);I.preRun.length;)ft(I.preRun.shift());Fi(xe)}(),Mt>0||(I.setStatus?(I.setStatus("Running..."),setTimeout(function(){setTimeout(function(){I.setStatus("")},1),$()},1)):$()))}if(jt=function $(){fn||Sa(),fn||(jt=$)},I.preInit)for(typeof I.preInit=="function"&&(I.preInit=[I.preInit]);I.preInit.length>0;)I.preInit.pop()();return Sa(),i.ready}})(),icA=tcA,Vj=0,SX=class MX{constructor(i){this.core=i,UL(this,"seq"),UL(this,"_core"),UL(this,"log"),UL(this,"beautyParams"),Vj+=1,this.seq=Vj,this._core=i,this.log=i.log.createChild({id:`${this.getAlias()}${Vj}`}),this.log.info("created")}getName(){return MX.Name}getAlias(){return"bb"}getValidateRule(i){switch(i){case"start":case"update":return AcA(this._core);case"stop":return ecA(this._core)}}getGroup(){return"bb"}async start(i){this._core.room.videoManager.Wasm||(this._core.room.videoManager.Wasm=await icA()),this._core.room.videoManager.renderMode="webgl";const r=this._core.utils.isUndefined(i.beauty)?.5:i.beauty,l=this._core.utils.isUndefined(i.brightness)?.5:i.brightness,I=this._core.utils.isUndefined(i.ruddy)?.5:i.ruddy;return this._core.room.videoManager.setBeautyParams({beauty:r,brightness:l,ruddy:I})}async update(i){const r=this._core.utils.isUndefined(i.beauty)?.5:i.beauty,l=this._core.utils.isUndefined(i.brightness)?.5:i.brightness,I=this._core.utils.isUndefined(i.ruddy)?.5:i.ruddy;return this._core.room.videoManager.setBeautyParams({beauty:r,brightness:l,ruddy:I})}async stop(){return this._core.room.videoManager.renderMode="auto",this._core.room.videoManager.stopBeauty()}destroy(){this._core.room.videoManager.renderMode="auto"}};UL(SX,"Name","BasicBeauty");var vX=SX,ocA=vX;const scA=Object.freeze(Object.defineProperty({__proto__:null,BasicBeauty:vX,default:ocA},Symbol.toStringTag,{value:"Module"})),ncA=kU(scA);var rcA=Object.defineProperty,acA=(t,i,r)=>i in t?rcA(t,i,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[i]=r,nY=(t,i,r)=>acA(t,typeof i!="symbol"?i+"":i,r),gcA={name:"option",required:!0,properties:{sourceLanguage:{type:"string",required:!0},translationLanguages:{type:["string","array"],required:!1},userIdsToTranscribe:{type:["string","array"],required:!1},transcriberRobotId:{type:"string",required:!1}}},ccA={name:"option",required:!0,properties:{transcriberRobotId:{type:"string",required:!0}}},lcA=new Set([2002,4003]),RX=class wX{constructor(i){this.core=i,nY(this,"disableRandomCall",!0),nY(this,"activeTranscriberMap",new Map),nY(this,"_log"),this._log=this.core.log.createChild({id:`${this.getAlias()}`})}getName(){return wX.Name}getAlias(){return"rt-trans"}getGroup(){return"*"}getValidateRule(i){switch(i){case"start":return gcA;case"update":return{};case"stop":return ccA}}async start(i){var r;const{RtcError:l,ErrorCode:I}=this.core.errorModule;if(!this.core.room.sendSignalMessage)throw new l({code:I.ENV_NOT_SUPPORTED});const{sourceLanguage:h,translationLanguages:f,userIdsToTranscribe:w="all",transcriberRobotId:_}=i,G=_||`transcriber_${this.core.room.roomId}_robot_${this.core.room.userId}`,U={sdkappid:this.core.room.sdkAppId,roomid:String(this.core.room.roomId),roomType:this.core.room.useStringRoomId?1:0,agentParam:{cdnRobotUserid:G,lifecycleUserid:this.core.room.userId,maxIdletime:30},subscribeParams:{subUsers:[]},asrParams:{lang:h,vadSilenceTime:1e3},translationParams:{mode:1,targetLangs:[""]}};f&&f.length>0&&(U.translationParams.mode=1,U.translationParams.targetLangs=Array.isArray(f)?f:[f]),w==="all"?U.subscribeParams.subUsers=[]:Array.isArray(w)?U.subscribeParams.subUsers=w.map(j=>({userId:j,roomType:this.core.room.useStringRoomId?1:0,roomid:String(this.core.room.roomId)})):w&&(U.subscribeParams.subUsers=[{userId:w,roomType:this.core.room.useStringRoomId?1:0,roomid:String(this.core.room.roomId)}]);try{this._log.info(`start_cloud_transcription ${JSON.stringify(U)}`);const j=await this.core.room.sendSignalMessage({command:"start_cloud_transcription",responseCommand:String(8268),data:U,retries:0}),{code:lA,data:sA}=j.data;if(lA!==0){const IA=((r=j.data)==null?void 0:r.message)||"";throw this._log.error("start_cloud_transcription failed",{extraCode:lA,reason:IA,data:sA}),new l({code:I.SERVER_ERROR,extraCode:lA,message:IA})}const{taskId:mA}=sA;if(!mA)throw this._log.error("taskId is required",{data:j.data}),new l({code:I.SERVER_ERROR,message:"taskId is required"});return this.activeTranscriberMap.set(mA,i),this._log.info(`start_cloud_transcription success ${mA}, activeSize: ${this.activeTranscriberMap.size}`),mA}catch(j){throw this._log.error("start_cloud_transcription failed",{error:j}),j}}async update(){}async stop({transcriberRobotId:i}){var r;const{RtcError:l,ErrorCode:I}=this.core.errorModule;if(!this.core.room.sendSignalMessage)throw new l({code:I.ENV_NOT_SUPPORTED});try{const h=await this.core.room.sendSignalMessage({command:"stop_cloud_transcription",responseCommand:String(8270),data:{taskId:i},retries:3});if(h.data.code!==0){const f=h.data.code,w=((r=h.data)==null?void 0:r.message)||"";if(!lcA.has(f))throw this._log.error("stop_cloud_transcription failed",{extraCode:f,reason:w,data:h.data.data}),new l({code:I.SERVER_ERROR,extraCode:f,message:w});this._log.warn("stop_cloud_transcription ignored error",{extraCode:f,reason:w,data:h.data.data})}this.activeTranscriberMap.delete(i)}catch(h){throw this._log.error("stop_cloud_transcription failed",{error:h}),h}}destroy(){this.activeTranscriberMap.clear()}};nY(RX,"Name","RealtimeTranscriber");var _X=RX,IcA=_X;const ucA=Object.freeze(Object.defineProperty({__proto__:null,RealtimeTranscriber:_X,default:IcA},Symbol.toStringTag,{value:"Module"})),EcA=kU(ucA);var dcA=Object.create,FU=Object.defineProperty,CcA=Object.defineProperties,TX=Object.getOwnPropertyDescriptor,hcA=Object.getOwnPropertyDescriptors,NX=Object.getOwnPropertyNames,DY=Object.getOwnPropertySymbols,BcA=Object.getPrototypeOf,HW=Object.prototype.hasOwnProperty,GX=Object.prototype.propertyIsEnumerable,P3=(t,i,r)=>i in t?FU(t,i,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[i]=r,Rn=(t,i)=>{for(var r in i||(i={}))HW.call(i,r)&&P3(t,r,i[r]);if(DY)for(var r of DY(i))GX.call(i,r)&&P3(t,r,i[r]);return t},nB=(t,i)=>CcA(t,hcA(i)),QcA=(t,i)=>{var r={};for(var l in t)HW.call(t,l)&&i.indexOf(l)<0&&(r[l]=t[l]);if(t!=null&&DY)for(var l of DY(t))i.indexOf(l)<0&&GX.call(t,l)&&(r[l]=t[l]);return r},OU=(t,i)=>function(){return i||(0,t[NX(t)[0]])((i={exports:{}}).exports,i),i.exports},qW=(t,i)=>{for(var r in i)FU(t,r,{get:i[r],enumerable:!0})},pcA=(t,i,r,l)=>{if(i&&typeof i=="object"||typeof i=="function")for(let I of NX(i))HW.call(t,I)||I===r||FU(t,I,{get:()=>i[I],enumerable:!(l=TX(i,I))||l.enumerable});return t},dT=(t,i,r)=>(r=t!=null?dcA(BcA(t)):{},pcA(FU(r,"default",{value:t,enumerable:!0}),t)),Cc=(t,i,r,l)=>{for(var I,h=TX(i,r),f=t.length-1;f>=0;f--)(I=t[f])&&(h=I(i,r,h)||h);return h&&FU(i,r,h),h},de=(t,i,r)=>P3(t,typeof i!="symbol"?i+"":i,r),PU=OU({"../node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.js"(t,i){var r=Object.prototype.hasOwnProperty,l="~";function I(){}function h(G,U,j){this.fn=G,this.context=U,this.once=j||!1}function f(G,U,j,lA,sA){if(typeof j!="function")throw new TypeError("The listener must be a function");var mA=new h(j,lA||G,sA),IA=l?l+U:U;return G._events[IA]?G._events[IA].fn?G._events[IA]=[G._events[IA],mA]:G._events[IA].push(mA):(G._events[IA]=mA,G._eventsCount++),G}function w(G,U){--G._eventsCount===0?G._events=new I:delete G._events[U]}function _(){this._events=new I,this._eventsCount=0}Object.create&&(I.prototype=Object.create(null),new I().__proto__||(l=!1)),_.prototype.eventNames=function(){var G,U,j=[];if(this._eventsCount===0)return j;for(U in G=this._events)r.call(G,U)&&j.push(l?U.slice(1):U);return Object.getOwnPropertySymbols?j.concat(Object.getOwnPropertySymbols(G)):j},_.prototype.listeners=function(G){var U=l?l+G:G,j=this._events[U];if(!j)return[];if(j.fn)return[j.fn];for(var lA=0,sA=j.length,mA=new Array(sA);lA1&&(f[_[0]]=void 0),f};t.parseParams=function(f){return f.split(/;\s?/).reduce(h,{})},t.parseFmtpConfig=t.parseParams,t.parsePayloads=function(f){return f.toString().split(" ").map(Number)},t.parseRemoteCandidates=function(f){for(var w=[],_=f.split(" ").map(i),G=0;G<_.length;G+=3)w.push({component:_[G],ip:_[G+1],port:_[G+2]});return w},t.parseImageAttributes=function(f){return f.split(" ").map(function(w){return w.substring(1,w.length-1).split(",").reduce(h,{})})},t.parseSimulcastStreamList=function(f){return f.split(";").map(function(w){return w.split(",").map(function(_){var G,U=!1;return _[0]!=="~"?G=i(_):(G=i(_.substring(1,_.length)),U=!0),{scid:G,paused:U}})})}}}),fcA=OU({"../node_modules/.pnpm/sdp-transform@2.15.0/node_modules/sdp-transform/lib/writer.js"(t,i){var r=KW(),l=/%[sdv%]/g,I=function(_){var G=1,U=arguments,j=U.length;return _.replace(l,function(lA){if(G>=j)return lA;var sA=U[G];switch(G+=1,lA){case"%%":return"%";case"%s":return String(sA);case"%d":return Number(sA);case"%v":return""}})},h=function(_,G,U){var j=[_+"="+(G.format instanceof Function?G.format(G.push?U:U[G.name]):G.format)];if(G.names)for(var lA=0;lA{i.enableVertexAttribArray(c),i.bindBuffer(i.ARRAY_BUFFER,n),i.vertexAttribPointer(c,2,i.FLOAT,!1,0,0)})}createShader(t,i){const{gl:n}=this,c=n.createShader(t);return n.shaderSource(c,i),n.compileShader(c),c}createProgram(t,i,n){const{gl:c}=this,I=this.createShader(c.FRAGMENT_SHADER,i),C=this.createShader(c.VERTEX_SHADER,t),f=c.createProgram();if(c.attachShader(f,C),c.attachShader(f,I),c.linkProgram(f),!c.getProgramParameter(f,c.LINK_STATUS))throw new Error(`${c.getProgramInfoLog(f)}`);return c.useProgram(f),this.setAttributes(this.positionBuffer,this.texCoordBuffer),n.forEach((w,_)=>{c.uniform1i(c.getUniformLocation(f,w),1+_)}),f}createFramebuffer(t){const{gl:i}=this,n=i.createFramebuffer();return i.bindFramebuffer(i.FRAMEBUFFER,n),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,t,0),n}getTempTexture(t,i,n=!0,c){const{gl:I}=this;let C,f;I.useProgram(t),this.ratio===16/9?(C=640,f=360):(C=640,f=480);const w=I.createTexture();I.activeTexture(I.TEXTURE0),I.bindTexture(I.TEXTURE_2D,w),I.texParameteri(I.TEXTURE_2D,I.TEXTURE_MIN_FILTER,I.LINEAR),I.texParameteri(I.TEXTURE_2D,I.TEXTURE_MAG_FILTER,I.LINEAR),I.texParameteri(I.TEXTURE_2D,I.TEXTURE_WRAP_S,I.CLAMP_TO_EDGE),I.texParameteri(I.TEXTURE_2D,I.TEXTURE_WRAP_T,I.CLAMP_TO_EDGE),I.pixelStorei(I.PACK_ALIGNMENT,1),I.pixelStorei(I.UNPACK_ALIGNMENT,1),I.texImage2D(I.TEXTURE_2D,0,I.RGBA,C,f,0,I.RGBA,I.UNSIGNED_BYTE,null);const _=this.createFramebuffer(w);return i.forEach((N,L)=>{N&&(I.activeTexture(I.TEXTURE1+L),I.bindTexture(I.TEXTURE_2D,N||null))}),this.setAttributes(this.positionBuffer,this.texCoordBuffer),I.viewport(0,0,C,f),I.drawArrays(I.TRIANGLE_STRIP,0,4),n&&i.forEach((N,L)=>{N&&c!==L&&I.deleteTexture(N)}),I.deleteFramebuffer(_),w}postProcessing(t){this._lastMaskTexture=this.getTempTexture(this._tdProgram,[t,this._lastMaskTexture]);let i=this.getTempTexture(this._kcProgram,[this._lastMaskTexture],!1);for(let n=0;n<3;n++){i=this.getTempTexture(this._mdProgram,[i]);const c=this.getTempTexture(this._edgeProgram,[i],!1);i=this.getTempTexture(this._borderProgram,[i,c,this._lastMaskTexture],!0,2)}return i}close(){const{gl:t}=this;this._borderProgram&&t.deleteProgram(this._borderProgram),this._edgeProgram&&t.deleteProgram(this._edgeProgram),this._kcProgram&&t.deleteProgram(this._kcProgram),this._mdProgram&&t.deleteProgram(this._mdProgram),this._tdProgram&&t.deleteProgram(this._tdProgram)}},fcA=new mcA,ycA=(t=>(t[t.TRACE=0]="TRACE",t[t.DEBUG=1]="DEBUG",t[t.INFO=2]="INFO",t[t.WARN=3]="WARN",t[t.ERROR=4]="ERROR",t[t.NONE=5]="NONE",t))(ycA||{}),DcA={alpha:!0,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0,powerPreference:"low-power"},M_=570703,i3=0,HX=class qX{constructor(i){this.core=i,Hg(this,"seq"),Hg(this,"_core"),Hg(this,"log"),Hg(this,"preLoadPromise"),Hg(this,"startResolve"),Hg(this,"startReject"),Hg(this,"mediaPipeSolutions"),Hg(this,"assetsPath"),Hg(this,"currentType"),Hg(this,"onAbort"),Hg(this,"isAborted",!1),i3+=1,this.seq=i3,this._core=i,this.log=i.log.createChild({id:`${this.getAlias()}${i3}`}),this.log.info("created"),i.assetsPath&&(this.preLoadPromise=this.preload(i.assetsPath))}static isSupported(){if(mgA<90)return!1;const i=document.createElement("canvas").getContext("webgl2",DcA);return!!(i&&i instanceof WebGL2RenderingContext)}async preload(i){try{this._core.room.videoManager.Wasm||(this._core.room.videoManager.Wasm=await ZaA());const n=c=>{var I;this.core.kvStatManager.addEnum({key:M_,value:this.getKVTypeValue(!1,this.isAborted,"ABORT_IN_INFERENCE")}),this.isAborted=!0,this.log.error("mediaPipeSolutions abort",c),this.core.clearStarted(this,this.getGroup()),this.stop(),(I=this.onAbort)==null||I.call(this,c)};this._core.room.videoManager.initVirtualBackground(n,UX,fcA),await this._core.initVisionTaskRegistry(i,["ImageSegmenter"])}catch(n){const{RtcError:c,ErrorCode:I}=this._core.errorModule;throw new c({code:I.INVALID_OPERATION,message:`VirtualBackground preload error, please redeploy the assets of the npm package. detail: ${n}`})}}getName(){return qX.Name}getAlias(){return"vb"}getValidateRule(i){switch(i){case"start":return KaA(this._core);case"update":return jaA(this._core);case"stop":return WaA(this._core)}}getGroup(){return"vb"}getKVTypeValue(i=!1,n=!1,c="NONE"){let I=0;switch(this.currentType){case"blur":I|=0;break;case"image":I|=1;break;case"color":I|=2}switch(i&&(I|=256),n&&(I|=512),c){case"ABORT_IN_INFERENCE":I|=4096;break;case"ABORT_IN_VIDEO_MANAGER":I|=8192;break;case"OTHER":I|=61440}return I}hexToRgb(i){const n=i.replace("#","");return[parseInt(n.slice(0,2),16)/255,parseInt(n.slice(2,4),16)/255,parseInt(n.slice(4,6),16)/255]}async start(i){const{type:n="blur",src:c,blurLevel:I=3,onAbort:C}=i;this.currentType=n,this.onAbort=C,n==="color"&&typeof i.color=="string"&&(i.color=this.hexToRgb(i.color));const{auth:f}=await HaA({sdkAppId:i.sdkAppId,userId:i.userId,userSig:i.userSig,core:this._core}),{RtcError:w,ErrorCodeDictionary:_,ErrorCode:N}=this._core.errorModule;if(!f){const L=this._core.utils.isOverseaSdkAppId(i.sdkAppId)?"https://trtc.io/document/56025":"https://cloud.tencent.com/document/product/647/85386";throw new w({code:_.NEED_TO_BUY,messageParams:{value:"Virtual Background",url:L}})}if(!this.preLoadPromise){if(!this._core.assetsPath)throw new w({code:N.INVALID_PARAMETER,message:"you need to deploy the assets of the npm package and set assetsPath param in TRTC.create()"});this.preLoadPromise=this.preload(this._core.assetsPath)}return await this.preLoadPromise,this.core.room.videoManager.setVirtualBackground({type:n,imageUrl:c,blurLevel:I,enableFaceCentering:i.enableFaceCentering,enableEffectOptimization:i.enableEffectOptimization,color:i.color,onAbort:L=>{var q;this.core.kvStatManager.addEnum({key:M_,value:this.getKVTypeValue(!0,this.isAborted,"ABORT_IN_VIDEO_MANAGER")}),this.isAborted=!0,this.core.clearStarted(this,this.getGroup()),this.stop(),delete this.preLoadPromise,(q=this.onAbort)==null||q.call(this,L)}}).then(()=>{this.core.kvStatManager.addEnum({key:M_,value:this.getKVTypeValue(!1,this.isAborted,"NONE")})}).catch(L=>{throw this.core.kvStatManager.addEnum({key:M_,value:this.getKVTypeValue(!0,this.isAborted,"OTHER")}),L})}async update(i){const{type:n,src:c}=i;return n!==this.currentType&&(this.currentType=n),n==="color"&&typeof i.color=="string"&&(i.color=this.hexToRgb(i.color)),this.core.room.videoManager.setVirtualBackground({type:n,imageUrl:c,blurLevel:i.blurLevel,enableFaceCentering:i.enableFaceCentering,enableEffectOptimization:i.enableEffectOptimization,color:i.color}).then(()=>{this.core.kvStatManager.addEnum({key:M_,value:this.getKVTypeValue(!1,!1,"NONE")})}).catch(()=>{this.core.kvStatManager.addEnum({key:M_,value:this.getKVTypeValue(!0,!1,"OTHER")})})}async stop(){return this.core.room.videoManager.setVirtualBackground()}};Hg(HX,"Name","VirtualBackground");var KX=HX,ScA=KX;const McA=Object.freeze(Object.defineProperty({__proto__:null,VirtualBackground:KX,default:ScA},Symbol.toStringTag,{value:"Module"})),vcA=HU(McA);var RcA=Object.defineProperty,wcA=(t,i,n)=>i in t?RcA(t,i,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[i]=n,VL=(t,i,n)=>wcA(t,typeof i!="symbol"?i+"":i,n);function _cA(t){return{name:"BasicBeautyOptions",type:"object",required:!0,allowEmpty:!1,properties:{beauty:{required:!1,type:"number"},brightness:{required:!1,type:"number"},ruddy:{required:!1,type:"number"}},validate(i,n,c,I){const{RtcError:C,ErrorCode:f,ErrorCodeDictionary:w}=t.errorModule;if(t.utils.isOverseaSdkAppId(i.sdkAppId))throw new C({code:f.INVALID_OPERATION,extraCode:w.INVALID_OPERATION,message:"This feature is not yet available in your country or region. If you have any questions, you can go to the community for consultation: https://zhiliao.qq.com/s/cWSPGIIM62CC/c3TPGIIM62CQ"})}}}function TcA(t){return{name:"StopBasicBeautyOptions",required:!1}}var NcA=(()=>{var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(i={}){var n,c,I=i;I.ready=new Promise(($,j)=>{n=$,c=j});var C=Object.assign({},I),f="";typeof document<"u"&&document.currentScript&&(f=document.currentScript.src),t&&(f=t),f=f.indexOf("blob:")!==0?f.substr(0,f.replace(/[?#].*/,"").lastIndexOf("/")+1):"";var w,_,N=I.print||console.log.bind(console),L=I.printErr||console.error.bind(console);function q($){if(ti($))return function(j){for(var vA=atob(j),jA=new Uint8Array(vA.length),oe=0;oe$.startsWith(Dt);function Pt($){return Promise.resolve().then(()=>function(j){if(j==ce&&w)return new Uint8Array(w);var vA=q(j);if(vA)return vA;throw"both async and sync fetching of the wasm failed"}($))}function oi($,j,vA,jA){return function(oe,ye,He){return Pt(oe).then(Pe=>WebAssembly.instantiate(Pe,ye)).then(Pe=>Pe).then(He,Pe=>{L(`failed to asynchronously prepare wasm: ${Pe}`),ct(Pe)})}(j,vA,jA)}ti(ce="data:application/octet-stream;base64,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IAEoAgA2AgAgAiABKAIENgIEIAIgASgCCDYCCCACIAEoAgw2AgwgAiABKAIQNgIQIAIgASgCFDYCFCACIAEoAhg2AhggAiABKAIcNgIcIAIgASgCIDYCICACIAEoAiQ2AiQgAiABKAIoNgIoIAIgASgCLDYCLCACIAEoAjA2AjAgAiABKAI0NgI0IAIgASgCODYCOCACIAEoAjw2AjwgAUFAayEBIAJBQGsiAiAFTQ0ACwsgAiAETw0BA0AgAiABKAIANgIAIAFBBGohASACQQRqIgIgBEkNAAsMAQsgA0EESQRAIAAhAgwBCyAAIANBBGsiBEsEQCAAIQIMAQsgACECA0AgAiABLQAAOgAAIAIgAS0AAToAASACIAEtAAI6AAIgAiABLQADOgADIAFBBGohASACQQRqIgIgBE0NAAsLIAIgA0kEQANAIAIgAS0AADoAACABQQFqIQEgAkEBaiICIANHDQALCyAACwsAIAEgAiAAEEIaCxIAIAFBAXRB8MoAakECIAAQQgv5AQEEfwJ/IAEQKiECIwBBEGsiBSQAAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0AC0H/AHELIgRBAE8EQAJAIAIgAC0AC0EHdgR/IAAoAghB/////wdxQQFrBUEKCyIDIARrTQRAIAJFDQECfyAALQALQQd2BEAgACgCAAwBCyAACyIDIAQEfyACIANqIAMgBBBFIAEgAkEAIAMgBGogAUsbQQAgASADTxtqBSABCyACEEUgACACIARqIgEQMSAFQQA6AA8gASADaiAFLQAPOgAADAELIAAgAyACIARqIANrIARBACACIAEQRAsgBUEQaiQAIAAMAQsQJwALC/ICAgJ/AX4CQCACRQ0AIAAgAToAACAAIAJqIgNBAWsgAToAACACQQNJDQAgACABOgACIAAgAToAASADQQNrIAE6AAAgA0ECayABOgAAIAJBB0kNACAAIAE6AAMgA0EEayABOgAAIAJBCUkNACAAQQAgAGtBA3EiBGoiAyABQf8BcUGBgoQIbCIBNgIAIAMgAiAEa0F8cSIEaiICQQRrIAE2AgAgBEEJSQ0AIAMgATYCCCADIAE2AgQgAkEIayABNgIAIAJBDGsgATYCACAEQRlJDQAgAyABNgIYIAMgATYCFCADIAE2AhAgAyABNgIMIAJBEGsgATYCACACQRRr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ACACQQA6AA8DQCABBEAgACACLQAPOgAAIAFBAWshASAAQQFqIQAMAQsLIAJBEGokAAsaACAALQALQQd2BEAgACgCCBogACgCABAZCwvmAQEFfyMAQRBrIgUkACMAQSBrIgMkACMAQRBrIgQkACAEIAA2AgwgBCAAIAFqNgIIIAMgBCgCDDYCGCADIAQoAgg2AhwgBEEQaiQAIAMoAhghBCADKAIcIQYjAEEQayIBJAAgASAGNgIMIAIgBCAGIARrIgQQQyABIAIgBGo2AgggAyABKAIMNgIQIAMgASgCCDYCFCABQRBqJAAgAyAAIAMoAhAgAGtqNgIMIAMgAiADKAIUIAJrajYCCCAFIAMoAgw2AgggBSADKAIINgIMIANBIGokACAFKAIMIQcgBUEQaiQAIAcLDwAgAgRAIAAgASACEDILC/UCAQV/IwBBEGsiByQAIAIgAUF/c0Hv////B2pNBEACfyAALQALQQd2BEAgACgCAAwBCyAACyEIIAdBBGoiCSAAIAFB5////wNJBH8gByABQQF0NgIMIAcgASACajYCBCMAQRBrIgIkACAJKAIAIAdBDGoiCigCAEkhCyACQRBqJAAgCiAJIAsbKAIAIgJBC08EfyACQRBqQXBxIgIgAkEBayICIAJBC0YbBUEKC0EBagVB7////wcLEDAgBygCBCECIAcoAggaIAQEQCACIAggBBAjCyAFBEAgAiAEaiAGIAUQIwsgAyAEayEGIAMgBEcEQCACIARqIAVqIAQgCGogBhAjCyABQQpHBEAgCBAZCyAAIAI2AgAgACAAKAIIQYCAgIB4cSAHKAIIQf////8HcXI2AgggACAAKAIIQYCAgIB4cjYCCCAAIAQgBWogBmoiADYCBCAHQQA6AAwgACACaiAHLQAMOgAAIAdBEGokAA8LECcACwoAIAAgASACEEMLuQEBBH8jAEEQayIEJAAgBCACNgIMIwBBoAFrIgMkACADIAAgA0GeAWogARsiBjYClAFBfyEFIAMgAUEBayIAQQAgACABTRs2ApgBIANBAEGQARAmIgBBfzYCTCAAQSA2AiQgAEF/NgJQIAAgAEGfAWo2AiwgACAAQZQBajYCVAJAIAFBAEgEQEHo3gBBPTYCAAwBCyAGQQA6AAAgAEH9CiACQR8QTSEFCyAAQaABaiQAIARBEGokACAFCwQA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KAIARQ0AIAIgBCgCGDYCAAsgAEEBRiEFDAELQQAhBQsgBEFAayQAIAULMQAgACABKAIIQQAQHgRAIAEgAiADED0PCyAAKAIIIgAgASACIAMgACgCACgCHBEGAAsYACAAIAEoAghBABAeBEAgASACIAMQPQsLnQEBAn8jAEFAaiIDJAACf0EBIAAgAUEAEB4NABpBACABRQ0AGkEAIAFBjM0AECAiAUUNABogA0EMakEAQTQQJhogA0EBNgI4IANBfzYCFCADIAA2AhAgAyABNgIIIAEgA0EIaiACKAIAQQEgASgCACgCHBEGACADKAIgIgBBAUYEQCACIAMoAhg2AgALIABBAUYLIQQgA0FAayQAIAQLCgAgACABQQAQHgtOAgF/AXwjAEEQayICJAAgAkEANgIMIAEoAgRB1M8AIAJBDGoQCSEDIAIoAgwiAQRAIAEQAQsgACADRAAAAAAAAAAAYjoAOCACQRBqJAALNwEBfyMAQRBrIgIkACACIAEtADg2AgggAEHUzwAgAkEIahAHNgIEIABB1NUANgIAIAJBEGokAAuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECIaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECIaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACC5wBAQJ/IwBBEGsiAiQAQcgAEBwhASAAKAIEIgAQAiACIAA2AgggAUHMLSACQQhqEAc2AgQgAUHU1QA2AgAgAUEBNgIcIAFB1NUANgIYIAFBATYCFCABQdTVADYCECABQQE2AgwgAUHU1QA2AgggAUEAOgAgIAFBADYCRCABQoCAgIAwNwI8IAFBADsANyABQQA7ACsgAkEQaiQAIAELigUCBn4CfyABIAEoAgBBB2pBeHEiAUEQajYCACAAIQkgASkDACEDIAEpAwghBSMAQSBrIgAkAAJAIAVC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBUIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAhSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBUIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIBQZH3AEkNACADIQIgBUL///////8/g0KAgICAgIDAAIQiBCEGAkAgAUGB9wBrIghBwABxBEAgAyAIQUBqrYYhBkIAIQIMAQsgCEUNACAGIAitIgeGIAJBwAAgCGutiIQhBiACIAeGIQILIAAgAjcDECAAIAY3AxgCQEGB+AAgAWsiAUHAAHEEQCAEIAFBQGqtiCEDQgAhBAwBCyABRQ0AIARBwAAgAWuthiADIAGtIgKIhCEDIAQgAoghBAsgACADNwMAIAAgBDcDCCAAKQMIQgSGIAApAwAiA0I8iIQhAiAAKQMQIAApAxiEQgBSrSADQv//////////D4OEIgNCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyADQoCAgICAgICACFINACACQgGDIAJ8IQILIABBIGokACAJIAIgBUKAgICAgICAgIB/g4S/OQMAC0ABAn8jAEEQayICJAAgAiABNgIMIAJB1NUANgIIIAJBCGogABEBACEDIAIoAgwiAQRAIAEQAwsgAkEQaiQAIAMLBABCAAsEAEEAC/YCAQh/IwBBIGsiAyQAIAMgACgCHCIENgIQIAAoAhQhBSADIAI2AhwgAyABNgIYIAMgBSAEayIBNgIUIAEgAmohBUECIQcCfwJAAkACQCAAKAI8IANBEGoiAUECIANBDGoQDSIEBH9B6N4AIAQ2AgBBfwVBAAsEQCABIQQMAQsDQCAFIAMoAgwiBkYNAiAGQQBIBEAgASEEDAQLIAEgBiABKAIEIghLIglBA3RqIgQgBiAIQQAgCRtrIgggBCgCAGo2AgAgAUEMQQQgCRtqIgEgASgCACAIazYCACAFIAZrIQUgACgCPCAEIgEgByAJayIHIANBDGoQDSIGBH9B6N4AIAY2AgBBfwVBAAtFDQALCyAFQX9HDQELIAAgACgCLCIBNgIcIAAgATYCFCAAIAEgACgCMGo2AhAgAgwBCyAAQQA2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EGokAAsiAQF+IAEgAq0gA61CIIaEIAQgABEMACIFQiCIpyQBIAWnCzcBAX8jAEEQayICJAAgAiABKAI8NgIIIABBnNAAIAJBCGoQBzYCBCAAQdTVADYCACACQRBqJAALC/NKFQBBgAgLhCZzZXRCZWF1dHkALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweAB1bnNpZ25lZCBzaG9ydAB1bnNpZ25lZCBpbnQAaW5pdABmbG9hdAB1aW50NjRfdABibHVyUmFkaXVzAHZlY3RvcgBtaXJyb3IAYXR0YWNoU2hhZGVyAGRlbGV0ZVNoYWRlcgBjcmVhdGVTaGFkZXIAY29tcGlsZVNoYWRlcgB1bnNpZ25lZCBjaGFyAHN0ZDo6ZXhjZXB0aW9uAHJvdGF0aW9uAG5hbgBsaW5rUHJvZ3JhbQBkZWxldGVQcm9ncmFtAGNyZWF0ZVByb2dyYW0AYm9vbABlbXNjcmlwdGVuOjp2YWwAc2V0V2F0ZXJNYXJrAHN0b3BXYXRlck1hcmsAdW5zaWduZWQgbG9uZwBzdGQ6OndzdHJpbmcAYmFzaWNfc3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGluZgAlZgBjbG9zZQBkb3VibGUAdmJNb2RlAHNoYWRlclNvdXJjZQB2b2lkAHNhbXBsZUNvbG9yICs9IHRleHR1cmUoZnJhbWUsIGJsdXJDb29yZGluYXRlc1sATkFOAElORgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDhfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDY0X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDY0X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgbG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZG91YmxlPgB2ZWMyIGMgPSB2X3RleENvb3JkOwB2ZWMyIGMgPSB2ZWMyKDEuMCAtIHZfdGV4Q29vcmQueCwgdl90ZXhDb29yZC55KTsAYyA9IHZlYzIoMS4wIC0gYy54LCAxLjAgLSBjLnkpOwBjID0gdmVjMihjLnksIDEuMCAtIGMueCk7AGMgPSB2ZWMyKDEuMCAtIGMueSwgYy54KTsAQWxsSW4xAC4ALjAsAC4wKSpvKSoAKG51bGwpACkqby55KTsgICAgdmVjMiBjb29yZDIgPSB2ZWMyKGZsb2F0KAAgICAgYyA9IHZlYzIodl90ZXhDb29yZC54LCAxLjAgLSB2X3RleENvb3JkLnkpOyAgICB2ZWMyIGNvb3JkMSA9IHZlYzIoZmxvYXQoACksIChjLnkgLWNvb3JkMS55KSAvIG8ueSAvIGZsb2F0KAApKm8ueSk7ICAgIGlmIChjLnggPiBjb29yZDEueCAmJiBjLnggPCBjb29yZDIueCAmJiBjLnkgPiBjb29yZDEueSAmJiBjLnkgPCBjb29yZDIueSkgeyAgICAgIHZlYzQgd2F0ZXJDb2xvciA9IHRleHR1cmUod2F0ZXJNYXJrLCB2ZWMyKChjLnggLSBjb29yZDEueCkgIC8gby54IC8gZmxvYXQoACkgKiBvLngsIGZsb2F0KABvdXRDb2xvci5yZ2IgKz0gdmVjMygAKTsgICAgICAgdmVjMyBzbW9vdGhDb2xvciA9IG91dENvbG9yLnJnYiArIChvdXRDb2xvci5yZ2ItdmVjMyhoaWdoUGFzcykpKmFscGhhKjAuMTsgICAgICAgc21vb3RoQ29sb3IgPSBtYXgoc21vb3RoQ29sb3IsIHZlYzMoMC4wKSk7ICAgICAgIHNtb290aENvbG9yID0gY2xhbXAocG93KHNtb290aENvbG9yLCB2ZWMzKABnKz1HKGMsdmVjMigAICAgICAgdmVjMiBvZmZzZXQgPSB2ZWMyKABdID0gdl90ZXhDb29yZC54eSArIG9mZnNldCAqIHZlYzIoADsgACkpLCB2ZWMzKDAuMCksIHZlYzMoMS4wKSk7ICAgICAgdmVjMyBzY3JlZW4gPSB2ZWMzKDEuMCkgLSAodmVjMygxLjApLXNtb290aENvbG9yKSAqICh2ZWMzKDEuMCktb3V0Q29sb3IucmdiKTsgICAgICAgdmVjMyBsaWdodGVuID0gbWF4KHNtb290aENvbG9yLCBvdXRDb2xvci5yZ2IpOyAgICAgICB2ZWMzIGJlYXV0eUNvbG9yID0gbWl4KG1peChvdXRDb2xvci5yZ2IsIHNjcmVlbiwgYWxwaGEpLCBsaWdodGVuLCBhbHBoYSk7ICAgICAgb3V0Q29sb3IucmdiID0gbWl4KG91dENvbG9yLnJnYiwgYmVhdXR5Q29sb3IsIAAKICAgICAgY29uc3QgbWF0MyBzYXR1cmF0ZU1hdHJpeCA9IG1hdDMoMS4xMTAyLC0wLjA1OTgsLTAuMDYxLC0wLjA3NzQsMS4wODI2LC0wLjExODYsLTAuMDIyOCwtMC4wMjI4LDEuMTc3Mik7CiAgICAgIHZlYzMgd2FybUNvbG9yID0gb3V0Q29sb3IucmdiICogc2F0dXJhdGVNYXRyaXg7CiAgICAgIG91dENvbG9yLnJnYiA9IG1peChvdXRDb2xvci5yZ2IsIHdhcm1Db2xvciwgACAgICAgIHNhbXBsZUNvbG9yID0gc2FtcGxlQ29sb3IgLyA2Mi4wOyAgICAgICBmbG9hdCBoaWdoUGFzcyA9IG91dENvbG9yLmcgLSBzYW1wbGVDb2xvciArIDAuNTsgICAgICAgY29uc3QgaGlnaHAgdmVjMyBXID0gdmVjMygwLjI5OSwwLjU4NywwLjExNCk7ICAgICAgZmxvYXQgbHVtaW5hbmNlID0gZG90KG91dENvbG9yLnJnYiwgVyk7ICAgICAgIGZsb2F0IGFscGhhID0gcG93KGx1bWluYW5jZSwgAF0pLmcgKiAAKSkpOyAgICAgIG91dENvbG9yID0gbWl4KG91dENvbG9yLHdhdGVyQ29sb3IsICB3YXRlckNvbG9yLmEpOyAgICB9ICAgIAApOyAgICAAKTsgICAgICB2ZWMyIGJsdXJDb29yZGluYXRlc1syNF07ICAgICAgACAgICAgIGZsb2F0IHNhbXBsZUNvbG9yID0gb3V0Q29sb3IuZyAqIDIyLjA7ICAgICAgIAAjdmVyc2lvbiAzMDAgZXMKICAgIHByZWNpc2lvbiBoaWdocCBmbG9hdDsKICAgIHVuaWZvcm0gc2FtcGxlcjJEIGZyYW1lOwogICAgdW5pZm9ybSBzYW1wbGVyMkQgbWFzazsKICAgIHVuaWZvcm0gc2FtcGxlcjJEIGJnOwogICAgdW5pZm9ybSBzYW1wbGVyMkQgd2F0ZXJNYXJrOwogICAgdW5pZm9ybSBzYW1wbGVyMkQgbGFzdE1hc2s7CiAgICB1bmlmb3JtIG1hdDQgdV9vZmZzZXRNYXRyaXg7CiAgICB1bmlmb3JtIHZlYzMgdV9jb2xvcjsKICAgIGluIHZlYzIgdl90ZXhDb29yZDsKICAgIG91dCB2ZWM0IG91dENvbG9yOwogICAgdmVjNCBHKHZlYzIgYyx2ZWMyIHMpewogICAgICByZXR1cm4gdGV4dHVyZShmcmFtZSx0ZXh0dXJlKG1hc2ssYytzKS5yPjAuMz9jOmMrcyk7CiAgICB9CiAgICB2b2lkIG1haW4oKSB7CiAgICAgIAAKICAgICAgdmVjMiBvZmZzZXRNYXNrVVYgPSAodV9vZmZzZXRNYXRyaXggKiB2ZWM0KGMsIDAsIDEpKS54eTsKICAgICAgZmxvYXQgaXNJbnNpZGVYID0gKG9mZnNldE1hc2tVVi54ID49IDAuMCkgJiYgKG9mZnNldE1hc2tVVi54IDw9IDEuMCkgPyAxLjAgOiAwLjA7CiAgICAgIGZsb2F0IGlzSW5zaWRlWSA9IChvZmZzZXRNYXNrVVYueSA+PSAwLjApICYmIChvZmZzZXRNYXNrVVYueSA8PSAxLjApID8gMS4wIDogMC4wOwogICAgICBmbG9hdCBpc0luc2lkZSA9IGlzSW5zaWRlWCAqIGlzSW5zaWRlWTsKICAgICAgZmxvYXQgbWFza2VkQWxwaGEgPSB0ZXh0dXJlKG1hc2ssIG9mZnNldE1hc2tVVikuciAqIGlzSW5zaWRlOwogICAgICBtYXNrZWRBbHBoYSA9IG1hc2tlZEFscGhhPDAuNT8yLjAqbWFza2VkQWxwaGEqbWFza2VkQWxwaGE6MS4wLTIuMCooMS4wLW1hc2tlZEFscGhhKSooMS4wLW1hc2tlZEFscGhhKTsKICAgICAgc3JjX2NvbG9yID0gdGV4dHVyZShmcmFtZSwgb2Zmc2V0TWFza1VWICwgaXNJbnNpZGUpOwogICAgICBvdXRDb2xvciA9IG1peCh0ZXh0dXJlKGJnLCBjKSwgc3JjX2NvbG9yLCBtYXNrZWRBbHBoYSk7CiAgICAACiAgICB2ZWM0IGcgPSB2ZWM0KDAuMCk7CiAgICAACiAgICAgIGMueSA9IDEuMCAtIGMueTsKICAgICAgdmVjNCBzcmNfY29sb3IgPSB0ZXh0dXJlKGZyYW1lLCBjKTsKICAgICAgZmxvYXQgYSA9IHRleHR1cmUobWFzaywgYykucjsKICAgICAgYSA9IGE8MC41PzIuMCphKmE6MS4wLTIuMCooMS4wLWEpKigxLjAtYSk7CiAgICAgIC8vIGZsb2F0IGEyID0gdGV4dHVyZShsYXN0TWFzaywgYykuYTsKICAgICAgLy8gYTIgPSBhMjwwLjU/Mi4wKmEyKmEyOjEuMC0yLjAqKDEuMC1hMikqKDEuMC1hMik7CiAgICAgIC8vIGZsb2F0IGRlbHRhID0gYSAtIGEyOwogICAgICAvLyBpZiAoZGVsdGEgPCAwLjI1ICYmIGRlbHRhID4gLTAuMjUpCiAgICAgIC8vIHsKICAgICAgLy8gICAgIGEgPSBhICsgMC41KmRlbHRhOwogICAgICAvLyB9CiAgICAgIAogICAgICB2ZWMyIG8gPSAxLjAgLyB2ZWMyKHRleHR1cmVTaXplKGZyYW1lLCAwKSk7CiAgICAACiAgICAgIG91dENvbG9yID0gZzsKICAAI3ZlcnNpb24gMzAwIGVzCmluIHZlYzIgYV9wb3NpdGlvbjsKaW4gdmVjMiBhX3RleENvb3JkOwoKdW5pZm9ybSBtYXQ0IHVfdGV4dHVyZU1hdHJpeDsKCm91dCB2ZWMyIHZfdGV4Q29vcmQ7CnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQoYV9wb3NpdGlvbi54LCBhX3Bvc2l0aW9uLnksIDAsIDEpOwogIHZfdGV4Q29vcmQgPSh1X3RleHR1cmVNYXRyaXggKiB2ZWM0KGFfdGV4Q29vcmQsIDAsIDEpKS54eTsKfQoAc2V0QmVhdXR5ICVmICVmICVmICVmICVmCgBvdXRDb2xvciA9IHNyY19jb2xvcjsKAG91dENvbG9yID0gbWl4KHZlYzQodV9jb2xvciwxLjApLHNyY19jb2xvcixhKTsKADZBbGxJbjEAAIAoAABfFgAAUDZBbGxJbjEAAAAABCkAAHAWAAAAAAAAaBYAAFBLNkFsbEluMQAAAAQpAACMFgAAAQAAAGgWAABpaQB2AHZpAHwWAADMFgAATjEwZW1zY3JpcHRlbjN2YWxFAACAKAAAuBYAAGlpaQB2aWlpAAAAALwnAAB8FgAAcCgAAHAoAABwKAAAcCgAAHAoAAB2aWlkZGRkZABBkC4LyAi8JwAAfBYAAHAoAABwKAAAcCgAAHAoAAB2aWlkZGRkALwnAAB8FgAAdmlpALwnAADMFgAAzBYAAHwWAADMFgAAHCgAALwnAADMFgAAoBcAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAACAKAAAYBcAAMwWAAC8JwAAzBYAAMwWAABOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQAAgCgAALgXAABOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQAAgCgAAAAYAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRHNOU18xMWNoYXJfdHJhaXRzSURzRUVOU185YWxsb2NhdG9ySURzRUVFRQAAAIAoAABIGAAATlN0M19fMjEyYmFzaWNfc3RyaW5nSURpTlNfMTFj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")||(Ve=ce,ce=I.locateFile?I.locateFile(Ve,f):f+Ve);var Ni=$=>{for(;$.length>0;)$.shift()(I)};I.noExitRuntime;function Co($){this.excPtr=$,this.ptr=$-24,this.set_type=function(j){RA[this.ptr+4>>2]=j},this.get_type=function(){return RA[this.ptr+4>>2]},this.set_destructor=function(j){RA[this.ptr+8>>2]=j},this.get_destructor=function(){return RA[this.ptr+8>>2]},this.set_caught=function(j){j=j?1:0,lA[this.ptr+12|0]=j},this.get_caught=function(){return lA[this.ptr+12|0]!=0},this.set_rethrown=function(j){j=j?1:0,lA[this.ptr+13|0]=j},this.get_rethrown=function(){return lA[this.ptr+13|0]!=0},this.init=function(j,vA){this.set_adjusted_ptr(0),this.set_type(j),this.set_destructor(vA)},this.set_adjusted_ptr=function(j){RA[this.ptr+16>>2]=j},this.get_adjusted_ptr=function(){return RA[this.ptr+16>>2]},this.get_exception_ptr=function(){if(ba(this.get_type()))return RA[this.excPtr>>2];var j=this.get_adjusted_ptr();return j!==0?j:this.excPtr}}var to,so,ks,Gi=$=>{for(var j="",vA=$;tA[vA];)j+=to[tA[vA++]];return j},As={},Lo={},$i={},zt=$=>{throw new so($)},Ao=$=>{throw new ks($)},Ri=($,j,vA)=>{function jA(Pe){var rt=vA(Pe);rt.length!==$.length&&Ao("Mismatched type converter count");for(var ht=0;ht<$.length;++ht)Es($[ht],rt[ht])}$.forEach(function(Pe){$i[Pe]=j});var oe=new Array(j.length),ye=[],He=0;j.forEach((Pe,rt)=>{Lo.hasOwnProperty(Pe)?oe[rt]=Lo[Pe]:(ye.push(Pe),As.hasOwnProperty(Pe)||(As[Pe]=[]),As[Pe].push(()=>{oe[rt]=Lo[Pe],++He===ye.length&&jA(oe)}))}),ye.length===0&&jA(oe)};function Es($,j,vA={}){if(!("argPackAdvance"in j))throw new TypeError("registerType registeredInstance requires argPackAdvance");return function(jA,oe,ye={}){var He=oe.name;if(jA||zt(`type "${He}" must have a positive integer typeid pointer`),Lo.hasOwnProperty(jA)){if(ye.ignoreDuplicateRegistrations)return;zt(`Cannot register type '${He}' twice`)}if(Lo[jA]=oe,delete $i[jA],As.hasOwnProperty(jA)){var Pe=As[jA];delete As[jA],Pe.forEach(rt=>rt())}}($,j,vA)}var VA,Ee=$=>{zt($.$$.ptrType.registeredClass.name+" instance already deleted")},Je=!1,Ut=$=>{},ot=$=>{$.count.value-=1,$.count.value===0&&(j=>{j.smartPtr?j.smartPtrType.rawDestructor(j.smartPtr):j.ptrType.registeredClass.rawDestructor(j.ptr)})($)},ut=($,j,vA)=>{if(j===vA)return $;if(vA.baseClass===void 0)return null;var jA=ut($,j,vA.baseClass);return jA===null?null:vA.downcast(jA)},$t={},Zt=()=>Object.keys(pt).length,Ge=()=>{var $=[];for(var j in pt)pt.hasOwnProperty(j)&&$.push(pt[j]);return $},Xe=[],se=()=>{for(;Xe.length;){var $=Xe.pop();$.$$.deleteScheduled=!1,$.delete()}},ve=$=>{VA=$,Xe.length&&VA&&VA(se)},pt={},mo=($,j)=>(j=((vA,jA)=>{for(jA===void 0&&zt("ptr should not be undefined");vA.baseClass;)jA=vA.upcast(jA),vA=vA.baseClass;return jA})($,j),pt[j]),No=($,j)=>(j.ptrType&&j.ptr||Ao("makeClassHandle requires ptr and ptrType"),!!j.smartPtrType!=!!j.smartPtr&&Ao("Both smartPtrType and smartPtr must be specified"),j.count={value:1},Go(Object.create($,{$$:{value:j}})));function no($){var j=this.getPointee($);if(!j)return this.destructor($),null;var vA=mo(this.registeredClass,j);if(vA!==void 0){if(vA.$$.count.value===0)return vA.$$.ptr=j,vA.$$.smartPtr=$,vA.clone();var jA=vA.clone();return this.destructor($),jA}function oe(){return this.isSmartPointer?No(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:j,smartPtrType:this,smartPtr:$}):No(this.registeredClass.instancePrototype,{ptrType:this,ptr:$})}var ye,He=this.registeredClass.getActualType(j),Pe=$t[He];if(!Pe)return oe.call(this);ye=this.isConst?Pe.constPointerType:Pe.pointerType;var rt=ut(j,this.registeredClass,ye.registeredClass);return rt===null?oe.call(this):this.isSmartPointer?No(ye.registeredClass.instancePrototype,{ptrType:ye,ptr:rt,smartPtrType:this,smartPtr:$}):No(ye.registeredClass.instancePrototype,{ptrType:ye,ptr:rt})}var Go=$=>typeof FinalizationRegistry>"u"?(Go=j=>j,$):(Je=new FinalizationRegistry(j=>{ot(j.$$)}),Ut=j=>Je.unregister(j),(Go=j=>{var vA=j.$$;if(vA.smartPtr){var jA={$$:vA};Je.register(j,jA,j)}return j})($));function An(){}var rn=($,j)=>Object.defineProperty(j,"name",{value:$}),ds=($,j,vA)=>{if($[j].overloadTable===void 0){var jA=$[j];$[j]=function(){return $[j].overloadTable.hasOwnProperty(arguments.length)||zt(`Function '${vA}' called with an invalid number of arguments (${arguments.length}) - expects one of (${$[j].overloadTable})!`),$[j].overloadTable[arguments.length].apply(this,arguments)},$[j].overloadTable=[],$[j].overloadTable[jA.argCount]=jA}};function an($,j,vA,jA,oe,ye,He,Pe){this.name=$,this.constructor=j,this.instancePrototype=vA,this.rawDestructor=jA,this.baseClass=oe,this.getActualType=ye,this.upcast=He,this.downcast=Pe,this.pureVirtualFunctions=[]}var So=($,j,vA)=>{for(;j!==vA;)j.upcast||zt(`Expected null or instance of ${vA.name}, got an instance of ${j.name}`),$=j.upcast($),j=j.baseClass;return $};function mA($,j){if(j===null)return this.isReference&&zt(`null is not a valid ${this.name}`),0;j.$$||zt(`Cannot pass "${as(j)}" as a ${this.name}`),j.$$.ptr||zt(`Cannot pass deleted object as a pointer of type ${this.name}`);var vA=j.$$.ptrType.registeredClass;return So(j.$$.ptr,vA,this.registeredClass)}function qn($,j){var vA;if(j===null)return this.isReference&&zt(`null is not a valid ${this.name}`),this.isSmartPointer?(vA=this.rawConstructor(),$!==null&&$.push(this.rawDestructor,vA),vA):0;j.$$||zt(`Cannot pass "${as(j)}" as a ${this.name}`),j.$$.ptr||zt(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&j.$$.ptrType.isConst&&zt(`Cannot convert argument of type ${j.$$.smartPtrType?j.$$.smartPtrType.name:j.$$.ptrType.name} to parameter type ${this.name}`);var jA=j.$$.ptrType.registeredClass;if(vA=So(j.$$.ptr,jA,this.registeredClass),this.isSmartPointer)switch(j.$$.smartPtr===void 0&&zt("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:j.$$.smartPtrType===this?vA=j.$$.smartPtr:zt(`Cannot convert argument of type ${j.$$.smartPtrType?j.$$.smartPtrType.name:j.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:vA=j.$$.smartPtr;break;case 2:if(j.$$.smartPtrType===this)vA=j.$$.smartPtr;else{var oe=j.clone();vA=this.rawShare(vA,cn.toHandle(()=>oe.delete())),$!==null&&$.push(this.rawDestructor,vA)}break;default:zt("Unsupporting sharing policy")}return vA}function mr($,j){if(j===null)return this.isReference&&zt(`null is not a valid ${this.name}`),0;j.$$||zt(`Cannot pass "${as(j)}" as a ${this.name}`),j.$$.ptr||zt(`Cannot pass deleted object as a pointer of type ${this.name}`),j.$$.ptrType.isConst&&zt(`Cannot convert argument of type ${j.$$.ptrType.name} to parameter type ${this.name}`);var vA=j.$$.ptrType.registeredClass;return So(j.$$.ptr,vA,this.registeredClass)}function Cs($){return this.fromWireType(RA[$>>2])}function Zr($,j,vA,jA,oe,ye,He,Pe,rt,ht,_t){this.name=$,this.registeredClass=j,this.isReference=vA,this.isConst=jA,this.isSmartPointer=oe,this.pointeeType=ye,this.sharingPolicy=He,this.rawGetPointee=Pe,this.rawConstructor=rt,this.rawShare=ht,this.rawDestructor=_t,oe||j.baseClass!==void 0?this.toWireType=qn:jA?(this.toWireType=mA,this.destructorFunction=null):(this.toWireType=mr,this.destructorFunction=null)}var Yi,Rs,rr=[],en=$=>{var j=rr[$];return j||($>=rr.length&&(rr.length=$+1),rr[$]=j=Yi.get($)),j},wn=($,j,vA)=>$.includes("j")?((jA,oe,ye)=>{var He=I["dynCall_"+jA];return ye&&ye.length?He.apply(null,[oe].concat(ye)):He.call(null,oe)})($,j,vA):en(j).apply(null,vA),jt=($,j)=>{var vA,jA,oe,ye=($=Gi($)).includes("j")?(vA=$,jA=j,oe=[],function(){return oe.length=0,Object.assign(oe,arguments),wn(vA,jA,oe)}):en(j);return typeof ye!="function"&&zt(`unknown function pointer with signature ${$}: ${j}`),ye},yg=$=>{var j=Ea($),vA=Gi(j);return yn(j),vA},Pn=($,j)=>{var vA=[],jA={};throw j.forEach(function oe(ye){jA[ye]||Lo[ye]||($i[ye]?$i[ye].forEach(oe):(vA.push(ye),jA[ye]=!0))}),new Rs(`${$}: `+vA.map(yg).join([", "]))},bn=($,j)=>{for(var vA=[],jA=0;jA<$;jA++)vA.push(RA[j+4*jA>>2]);return vA},Js=$=>{for(;$.length;){var j=$.pop();$.pop()(j)}};function fr($,j,vA,jA,oe,ye){var He=j.length;He<2&&zt("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var Pe=j[1]!==null&&vA!==null,rt=!1,ht=1;ht($ instanceof Object||zt(`${vA} with invalid "this": ${$}`),$ instanceof j.registeredClass.constructor||zt(`${vA} incompatible with "this" of type ${$.constructor.name}`),$.$$.ptr||zt(`cannot call emscripten binding method ${vA} on deleted object`),So($.$$.ptr,$.$$.ptrType.registeredClass,j.registeredClass));function yr(){this.allocated=[void 0],this.freelist=[]}var fo=new yr,gn=$=>{$>=fo.reserved&&--fo.get($).refcount===0&&fo.free($)},Ml=()=>{for(var $=0,j=fo.reserved;j($||zt("Cannot use deleted val. handle = "+$),fo.get($).value),toHandle:$=>{switch($){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:return fo.allocate({refcount:1,value:$})}}};function Dr($){return this.fromWireType(gA[$>>2])}var Us,Jc,fs,as=$=>{if($===null)return"null";var j=typeof $;return j==="object"||j==="array"||j==="function"?$.toString():""+$},wu=($,j)=>{switch(j){case 4:return function(vA){return this.fromWireType(HA[vA>>2])};case 8:return function(vA){return this.fromWireType(ZA[vA>>3])};default:throw new TypeError(`invalid float width (${j}): ${$}`)}},Wa=($,j,vA)=>{switch(j){case 1:return vA?jA=>lA[jA|0]:jA=>tA[jA|0];case 2:return vA?jA=>BA[jA>>1]:jA=>IA[jA>>1];case 4:return vA?jA=>gA[jA>>2]:jA=>RA[jA>>2];default:throw new TypeError(`invalid integer width (${j}): ${$}`)}},hs=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0,sg=($,j,vA)=>{for(var jA=j+vA,oe=j;$[oe]&&!(oe>=jA);)++oe;if(oe-j>16&&$.buffer&&hs)return hs.decode($.subarray(j,oe));for(var ye="";j>10,56320|1023&ht)}}else ye+=String.fromCharCode((31&He)<<6|Pe)}else ye+=String.fromCharCode(He)}return ye},qI=($,j)=>$?sg(tA,$,j):"",es=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0,eo=($,j)=>{for(var vA=$,jA=vA>>1,oe=jA+j/2;!(jA>=oe)&&IA[jA];)++jA;if((vA=jA<<1)-$>32&&es)return es.decode(tA.subarray($,vA));for(var ye="",He=0;!(He>=j/2);++He){var Pe=BA[$+2*He>>1];if(Pe==0)break;ye+=String.fromCharCode(Pe)}return ye},pc=($,j,vA)=>{if(vA===void 0&&(vA=2147483647),vA<2)return 0;for(var jA=j,oe=(vA-=2)<2*$.length?vA/2:$.length,ye=0;ye>1]=He,j+=2}return BA[j>>1]=0,j-jA},ng=$=>2*$.length,Dg=($,j)=>{for(var vA=0,jA="";!(vA>=j/4);){var oe=gA[$+4*vA>>2];if(oe==0)break;if(++vA,oe>=65536){var ye=oe-65536;jA+=String.fromCharCode(55296|ye>>10,56320|1023&ye)}else jA+=String.fromCharCode(oe)}return jA},ua=($,j,vA)=>{if(vA===void 0&&(vA=2147483647),vA<4)return 0;for(var jA=j,oe=jA+vA-4,ye=0;ye<$.length;++ye){var He=$.charCodeAt(ye);if(He>=55296&&He<=57343&&(He=65536+((1023&He)<<10)|1023&$.charCodeAt(++ye)),gA[j>>2]=He,(j+=4)+4>oe)break}return gA[j>>2]=0,j-jA},bo=$=>{for(var j=0,vA=0;vA<$.length;++vA){var jA=$.charCodeAt(vA);jA>=55296&&jA<=57343&&++vA,j+=4}return j},Xr=($,j)=>{var vA=Lo[$];return vA===void 0&&zt(j+" has unknown type "+yg($)),vA},To=($,j,vA)=>{var jA=[],oe=$.toWireType(jA,vA);return jA.length&&(RA[j>>2]=cn.toHandle(jA)),oe},Hc={},Kn=[],Hs=Reflect.construct,Sg=[null,[],[]],mc=($,j)=>{var vA=Sg[$];j===0||j===10?(($===1?N:L)(sg(vA,0)),vA.length=0):vA.push(j)};(()=>{for(var $=new Array(256),j=0;j<256;++j)$[j]=String.fromCharCode(j);to=$})(),so=I.BindingError=class extends Error{constructor($){super($),this.name="BindingError"}},ks=I.InternalError=class extends Error{constructor($){super($),this.name="InternalError"}},Object.assign(An.prototype,{isAliasOf($){if(!(this instanceof An)||!($ instanceof An))return!1;var j=this.$$.ptrType.registeredClass,vA=this.$$.ptr;$.$$=$.$$;for(var jA=$.$$.ptrType.registeredClass,oe=$.$$.ptr;j.baseClass;)vA=j.upcast(vA),j=j.baseClass;for(;jA.baseClass;)oe=jA.upcast(oe),jA=jA.baseClass;return j===jA&&vA===oe},clone(){if(this.$$.ptr||Ee(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var $,j=Go(Object.create(Object.getPrototypeOf(this),{$$:{value:($=this.$$,{count:$.count,deleteScheduled:$.deleteScheduled,preservePointerOnDelete:$.preservePointerOnDelete,ptr:$.ptr,ptrType:$.ptrType,smartPtr:$.smartPtr,smartPtrType:$.smartPtrType})}}));return j.$$.count.value+=1,j.$$.deleteScheduled=!1,j},delete(){this.$$.ptr||Ee(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&zt("Object already scheduled for deletion"),Ut(this),ot(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||Ee(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&zt("Object already scheduled for deletion"),Xe.push(this),Xe.length===1&&VA&&VA(se),this.$$.deleteScheduled=!0,this}}),I.getInheritedInstanceCount=Zt,I.getLiveInheritedInstances=Ge,I.flushPendingDeletes=se,I.setDelayFunction=ve,Object.assign(Zr.prototype,{getPointee($){return this.rawGetPointee&&($=this.rawGetPointee($)),$},destructor($){this.rawDestructor&&this.rawDestructor($)},argPackAdvance:8,readValueFromPointer:Cs,deleteObject($){$!==null&&$.delete()},fromWireType:no}),Rs=I.UnboundTypeError=(Us=Error,(fs=rn(Jc="UnboundTypeError",function($){this.name=Jc,this.message=$;var j=new Error($).stack;j!==void 0&&(this.stack=this.toString()+` +`+j.replace(/^Error(:[^\n]*)?\n/,""))})).prototype=Object.create(Us.prototype),fs.prototype.constructor=fs,fs.prototype.toString=function(){return this.message===void 0?this.name:`${this.name}: ${this.message}`},fs),Object.assign(yr.prototype,{get($){return this.allocated[$]},has($){return this.allocated[$]!==void 0},allocate($){var j=this.freelist.pop()||this.allocated.length;return this.allocated[j]=$,j},free($){this.allocated[$]=void 0,this.freelist.push($)}}),fo.allocated.push({value:void 0},{value:null},{value:!0},{value:!1}),fo.reserved=fo.allocated.length,I.count_emval_handles=Ml;var fn,Ga={w:($,j,vA)=>{throw new Co($).init(j,vA),$},q:($,j,vA,jA,oe)=>{},u:($,j,vA,jA)=>{Es($,{name:j=Gi(j),fromWireType:function(oe){return!!oe},toWireType:function(oe,ye){return ye?vA:jA},argPackAdvance:8,readValueFromPointer:function(oe){return this.fromWireType(tA[oe])},destructorFunction:null})},y:($,j,vA,jA,oe,ye,He,Pe,rt,ht,_t,Vt,ui)=>{_t=Gi(_t),ye=jt(oe,ye),Pe&&(Pe=jt(He,Pe)),ht&&(ht=jt(rt,ht)),ui=jt(Vt,ui);var It=(Yt=>{if(Yt===void 0)return"_unknown";var qi=(Yt=Yt.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return qi>=48&&qi<=57?`_${Yt}`:Yt})(_t);((Yt,qi,Wi)=>{I.hasOwnProperty(Yt)?(zt(`Cannot register public name '${Yt}' twice`),ds(I,Yt,Yt),I.hasOwnProperty(Wi)&&zt(`Cannot register multiple overloads of a function with the same number of arguments (${Wi})!`),I[Yt].overloadTable[Wi]=qi):I[Yt]=qi})(It,function(){Pn(`Cannot construct ${_t} due to unbound types`,[jA])}),Ri([$,j,vA],jA?[jA]:[],function(Yt){var qi,Wi;Yt=Yt[0],Wi=jA?(qi=Yt.registeredClass).instancePrototype:An.prototype;var qs=rn(_t,function(){if(Object.getPrototypeOf(this)!==vi)throw new so("Use 'new' to construct "+_t);if(zo.constructor_body===void 0)throw new so(_t+" has no accessible constructor");var Yn=zo.constructor_body[arguments.length];if(Yn===void 0)throw new so(`Tried to invoke ctor of ${_t} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(zo.constructor_body).toString()}) parameters instead!`);return Yn.apply(this,arguments)}),vi=Object.create(Wi,{constructor:{value:qs}});qs.prototype=vi;var zo=new an(_t,qs,vi,ui,qi,ye,Pe,ht);zo.baseClass&&(zo.baseClass.__derivedClasses===void 0&&(zo.baseClass.__derivedClasses=[]),zo.baseClass.__derivedClasses.push(zo));var Mg=new Zr(_t,zo,!0,!1,!1),ar=new Zr(_t+"*",zo,!1,!1,!1),Sr=new Zr(_t+" const*",zo,!1,!0,!1);return $t[$]={pointerType:ar,constPointerType:Sr},((Yn,vl,Ks)=>{I.hasOwnProperty(Yn)||Ao("Replacing nonexistant public symbol"),I[Yn].overloadTable!==void 0&&Ks!==void 0?I[Yn].overloadTable[Ks]=vl:(I[Yn]=vl,I[Yn].argCount=Ks)})(It,qs),[Mg,ar,Sr]})},x:($,j,vA,jA,oe,ye)=>{var He=bn(j,vA);oe=jt(jA,oe),Ri([],[$],function(Pe){var rt=`constructor ${(Pe=Pe[0]).name}`;if(Pe.registeredClass.constructor_body===void 0&&(Pe.registeredClass.constructor_body=[]),Pe.registeredClass.constructor_body[j-1]!==void 0)throw new so(`Cannot register multiple constructors with identical number of parameters (${j-1}) for class '${Pe.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return Pe.registeredClass.constructor_body[j-1]=()=>{Pn(`Cannot construct ${Pe.name} due to unbound types`,He)},Ri([],He,ht=>(ht.splice(1,0,null),Pe.registeredClass.constructor_body[j-1]=fr(rt,ht,null,oe,ye),[])),[]})},i:($,j,vA,jA,oe,ye,He,Pe,rt)=>{var ht=bn(vA,jA);j=(_t=>{const Vt=(_t=_t.trim()).indexOf("(");return Vt!==-1?_t.substr(0,Vt):_t})(j=Gi(j)),ye=jt(oe,ye),Ri([],[$],function(_t){var Vt=`${(_t=_t[0]).name}.${j}`;function ui(){Pn(`Cannot call ${Vt} due to unbound types`,ht)}j.startsWith("@@")&&(j=Symbol[j.substring(2)]),Pe&&_t.registeredClass.pureVirtualFunctions.push(j);var It=_t.registeredClass.instancePrototype,Yt=It[j];return Yt===void 0||Yt.overloadTable===void 0&&Yt.className!==_t.name&&Yt.argCount===vA-2?(ui.argCount=vA-2,ui.className=_t.name,It[j]=ui):(ds(It,j,Vt),It[j].overloadTable[vA-2]=ui),Ri([],ht,function(qi){var Wi=fr(Vt,qi,_t,ye,He);return It[j].overloadTable===void 0?(Wi.argCount=vA-2,It[j]=Wi):It[j].overloadTable[vA-2]=Wi,[]}),[]})},k:($,j,vA,jA,oe,ye,He,Pe,rt,ht)=>{j=Gi(j),oe=jt(jA,oe),Ri([],[$],function(_t){var Vt=`${(_t=_t[0]).name}.${j}`,ui={get(){Pn(`Cannot access ${Vt} due to unbound types`,[vA,He])},enumerable:!0,configurable:!0};return ui.set=rt?()=>Pn(`Cannot access ${Vt} due to unbound types`,[vA,He]):It=>zt(Vt+" is a read-only property"),Object.defineProperty(_t.registeredClass.instancePrototype,j,ui),Ri([],rt?[vA,He]:[vA],function(It){var Yt=It[0],qi={get(){var qs=xn(this,_t,Vt+" getter");return Yt.fromWireType(oe(ye,qs))},enumerable:!0};if(rt){rt=jt(Pe,rt);var Wi=It[1];qi.set=function(qs){var vi=xn(this,_t,Vt+" setter"),zo=[];rt(ht,vi,Wi.toWireType(zo,qs)),Js(zo)}}return Object.defineProperty(_t.registeredClass.instancePrototype,j,qi),[]}),[]})},t:($,j)=>{Es($,{name:j=Gi(j),fromWireType:vA=>{var jA=cn.toValue(vA);return gn(vA),jA},toWireType:(vA,jA)=>cn.toHandle(jA),argPackAdvance:8,readValueFromPointer:Dr,destructorFunction:null})},p:($,j,vA)=>{Es($,{name:j=Gi(j),fromWireType:jA=>jA,toWireType:(jA,oe)=>oe,argPackAdvance:8,readValueFromPointer:wu(j,vA),destructorFunction:null})},g:($,j,vA,jA,oe)=>{j=Gi(j);var ye=rt=>rt;if(jA===0){var He=32-8*vA;ye=rt=>rt<>>He}var Pe=j.includes("unsigned");Es($,{name:j,fromWireType:ye,toWireType:Pe?function(rt,ht){return this.name,ht>>>0}:function(rt,ht){return this.name,ht},argPackAdvance:8,readValueFromPointer:Wa(j,vA,jA!==0),destructorFunction:null})},a:($,j,vA)=>{var jA=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][j];function oe(ye){var He=RA[ye>>2],Pe=RA[ye+4>>2];return new jA(lA.buffer,Pe,He)}Es($,{name:vA=Gi(vA),fromWireType:oe,argPackAdvance:8,readValueFromPointer:oe},{ignoreDuplicateRegistrations:!0})},o:($,j)=>{var vA=(j=Gi(j))==="std::string";Es($,{name:j,fromWireType(jA){var oe,ye=RA[jA>>2],He=jA+4;if(vA)for(var Pe=He,rt=0;rt<=ye;++rt){var ht=He+rt;if(rt==ye||tA[ht]==0){var _t=qI(Pe,ht-Pe);oe===void 0?oe=_t:(oe+="\0",oe+=_t),Pe=ht+1}}else{var Vt=new Array(ye);for(rt=0;rt{for(var ui=0,It=0;It=55296&&Yt<=57343?(ui+=4,++It):ui+=3}return ui})(oe):oe.length;var Pe=ys(4+ye+1),rt=Pe+4;if(RA[Pe>>2]=ye,vA&&He)((Vt,ui,It,Yt)=>{if(!(Yt>0))return 0;for(var qi=It,Wi=It+Yt-1,qs=0;qs=55296&&vi<=57343&&(vi=65536+((1023&vi)<<10)|1023&Vt.charCodeAt(++qs)),vi<=127){if(It>=Wi)break;ui[It++]=vi}else if(vi<=2047){if(It+1>=Wi)break;ui[It++]=192|vi>>6,ui[It++]=128|63&vi}else if(vi<=65535){if(It+2>=Wi)break;ui[It++]=224|vi>>12,ui[It++]=128|vi>>6&63,ui[It++]=128|63&vi}else{if(It+3>=Wi)break;ui[It++]=240|vi>>18,ui[It++]=128|vi>>12&63,ui[It++]=128|vi>>6&63,ui[It++]=128|63&vi}}ui[It]=0})(oe,tA,rt,ye+1);else if(He)for(var ht=0;ht255&&(yn(rt),zt("String has UTF-16 code units that do not fit in 8 bits")),tA[rt+ht]=_t}else for(ht=0;ht{var jA,oe,ye,He,Pe;vA=Gi(vA),j===2?(jA=eo,oe=pc,He=ng,ye=()=>IA,Pe=1):j===4&&(jA=Dg,oe=ua,He=bo,ye=()=>RA,Pe=2),Es($,{name:vA,fromWireType:rt=>{for(var ht,_t=RA[rt>>2],Vt=ye(),ui=rt+4,It=0;It<=_t;++It){var Yt=rt+4+It*j;if(It==_t||Vt[Yt>>Pe]==0){var qi=jA(ui,Yt-ui);ht===void 0?ht=qi:(ht+="\0",ht+=qi),ui=Yt+j}}return yn(rt),ht},toWireType:(rt,ht)=>{typeof ht!="string"&&zt(`Cannot pass non-string to C++ string type ${vA}`);var _t=He(ht),Vt=ys(4+_t+j);return RA[Vt>>2]=_t>>Pe,oe(ht,Vt+4,_t+j),rt!==null&&rt.push(yn,Vt),Vt},argPackAdvance:8,readValueFromPointer:Dr,destructorFunction(rt){yn(rt)}})},v:($,j)=>{Es($,{isVoid:!0,name:j=Gi(j),argPackAdvance:0,fromWireType:()=>{},toWireType:(vA,jA)=>{}})},j:($,j,vA)=>($=cn.toValue($),j=Xr(j,"emval::as"),To(j,vA,$)),e:($,j,vA,jA,oe)=>{var ye,He;return($=Kn[$])(j=cn.toValue(j),j[vA=(He=Hc[ye=vA])===void 0?Gi(ye):He],jA,oe)},d:gn,f:($,j,vA)=>{var jA=((ht,_t)=>{for(var Vt=new Array(ht),ui=0;ui>2],"parameter "+ui);return Vt})($,j),oe=jA.shift();$--;var ye,He,Pe=new Array($),rt=`methodCaller<(${jA.map(ht=>ht.name).join(", ")}) => ${oe.name}>`;return ye=rn(rt,(ht,_t,Vt,ui)=>{for(var It=0,Yt=0;Yt<$;++Yt)Pe[Yt]=jA[Yt].readValueFromPointer(ui+It),It+=jA[Yt].argPackAdvance;var qi=vA===1?Hs(_t,Pe):_t.apply(ht,Pe);for(Yt=0;Yt<$;++Yt)jA[Yt].deleteObject&&jA[Yt].deleteObject(Pe[Yt]);return To(oe,Vt,qi)}),He=Kn.length,Kn.push(ye),He},c:$=>{$>4&&(fo.get($).refcount+=1)},b:$=>{var j=cn.toValue($);Js(j),gn($)},h:($,j)=>{var vA=($=Xr($,"_emval_take_value")).readValueFromPointer(j);return cn.toHandle(vA)},m:()=>{ct("")},s:($,j,vA)=>tA.copyWithin($,j,j+vA),r:$=>{tA.length,ct("OOM")},n:($,j,vA,jA)=>{for(var oe=0,ye=0;ye>2],Pe=RA[j+4>>2];j+=8;for(var rt=0;rt>2]=oe,0}},In=function(){var $={a:Ga};function j(vA,jA){var oe,ye;return In=vA.exports,_=In.z,oe=_.buffer,I.HEAP8=lA=new Int8Array(oe),I.HEAP16=BA=new Int16Array(oe),I.HEAPU8=tA=new Uint8Array(oe),I.HEAPU16=IA=new Uint16Array(oe),I.HEAP32=gA=new Int32Array(oe),I.HEAPU32=RA=new Uint32Array(oe),I.HEAPF32=HA=new Float32Array(oe),I.HEAPF64=ZA=new Float64Array(oe),Yi=In.C,ye=In.A,ae.unshift(ye),function(){if(lt--,I.monitorRunDependencies&&I.monitorRunDependencies(lt),lt==0&&wt){var He=wt;wt=null,He()}}(),In}if(lt++,I.monitorRunDependencies&&I.monitorRunDependencies(lt),I.instantiateWasm)try{return I.instantiateWasm($,j)}catch(vA){L(`Module.instantiateWasm callback failed with error: ${vA}`),c(vA)}return oi(0,ce,$,function(vA){j(vA.instance)}).catch(c),{}}(),ys=$=>(ys=In.B)($),Ea=$=>(Ea=In.D)($),yn=$=>(yn=In.E)($),ba=$=>(ba=In.F)($);I.dynCall_jiji=($,j,vA,jA,oe)=>(I.dynCall_jiji=In.G)($,j,vA,jA,oe),I._vertexShaderSource=10688;function Sa(){function $(){fn||(fn=!0,I.calledRun=!0,KA||(Ni(ae),n(I),I.onRuntimeInitialized&&I.onRuntimeInitialized(),function(){if(I.postRun)for(typeof I.postRun=="function"&&(I.postRun=[I.postRun]);I.postRun.length;)We(I.postRun.shift());Ni(gt)}()))}lt>0||(function(){if(I.preRun)for(typeof I.preRun=="function"&&(I.preRun=[I.preRun]);I.preRun.length;)dt(I.preRun.shift());Ni(me)}(),lt>0||(I.setStatus?(I.setStatus("Running..."),setTimeout(function(){setTimeout(function(){I.setStatus("")},1),$()},1)):$()))}if(wt=function $(){fn||Sa(),fn||(wt=$)},I.preInit)for(typeof I.preInit=="function"&&(I.preInit=[I.preInit]);I.preInit.length>0;)I.preInit.pop()();return Sa(),i.ready}})(),GcA=NcA,o3=0,jX=class WX{constructor(i){this.core=i,VL(this,"seq"),VL(this,"_core"),VL(this,"log"),VL(this,"beautyParams"),o3+=1,this.seq=o3,this._core=i,this.log=i.log.createChild({id:`${this.getAlias()}${o3}`}),this.log.info("created")}getName(){return WX.Name}getAlias(){return"bb"}getValidateRule(i){switch(i){case"start":case"update":return _cA(this._core);case"stop":return TcA(this._core)}}getGroup(){return"bb"}async start(i){this._core.room.videoManager.Wasm||(this._core.room.videoManager.Wasm=await GcA()),this._core.room.videoManager.renderMode="webgl";const n=this._core.utils.isUndefined(i.beauty)?.5:i.beauty,c=this._core.utils.isUndefined(i.brightness)?.5:i.brightness,I=this._core.utils.isUndefined(i.ruddy)?.5:i.ruddy;return this._core.room.videoManager.setBeautyParams({beauty:n,brightness:c,ruddy:I})}async update(i){const n=this._core.utils.isUndefined(i.beauty)?.5:i.beauty,c=this._core.utils.isUndefined(i.brightness)?.5:i.brightness,I=this._core.utils.isUndefined(i.ruddy)?.5:i.ruddy;return this._core.room.videoManager.setBeautyParams({beauty:n,brightness:c,ruddy:I})}async stop(){return this._core.room.videoManager.renderMode="auto",this._core.room.videoManager.stopBeauty()}destroy(){this._core.room.videoManager.renderMode="auto"}};VL(jX,"Name","BasicBeauty");var zX=jX,bcA=zX;const kcA=Object.freeze(Object.defineProperty({__proto__:null,BasicBeauty:zX,default:bcA},Symbol.toStringTag,{value:"Module"})),LcA=HU(kcA);var UcA=Object.defineProperty,FcA=(t,i,n)=>i in t?UcA(t,i,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[i]=n,BY=(t,i,n)=>FcA(t,typeof i!="symbol"?i+"":i,n),OcA={name:"option",required:!0,properties:{sourceLanguage:{type:"string",required:!0},translationLanguages:{type:["string","array"],required:!1},userIdsToTranscribe:{type:["string","array"],required:!1},transcriberRobotId:{type:"string",required:!1}}},PcA={name:"option",required:!0,properties:{transcriberRobotId:{type:"string",required:!0}}},xcA=new Set([2002,4003]),ZX=class XX{constructor(i){this.core=i,BY(this,"disableRandomCall",!0),BY(this,"activeTranscriberMap",new Map),BY(this,"_log"),this._log=this.core.log.createChild({id:`${this.getAlias()}`})}getName(){return XX.Name}getAlias(){return"rt-trans"}getGroup(){return"*"}getValidateRule(i){switch(i){case"start":return OcA;case"update":return{};case"stop":return PcA}}async start(i){var n;const{RtcError:c,ErrorCode:I}=this.core.errorModule;if(!this.core.room.sendSignalMessage)throw new c({code:I.ENV_NOT_SUPPORTED});const{sourceLanguage:C,translationLanguages:f,userIdsToTranscribe:w="all",transcriberRobotId:_}=i,N=_||`transcriber_${this.core.room.roomId}_robot_${this.core.room.userId}`,L={sdkappid:this.core.room.sdkAppId,roomid:String(this.core.room.roomId),roomType:this.core.room.useStringRoomId?1:0,agentParam:{cdnRobotUserid:N,lifecycleUserid:this.core.room.userId,maxIdletime:30},subscribeParams:{subUsers:[]},asrParams:{lang:C,vadSilenceTime:1e3},translationParams:{mode:1,targetLangs:[""]}};f&&f.length>0&&(L.translationParams.mode=1,L.translationParams.targetLangs=Array.isArray(f)?f:[f]),w==="all"?L.subscribeParams.subUsers=[]:Array.isArray(w)?L.subscribeParams.subUsers=w.map(q=>({userId:q,roomType:this.core.room.useStringRoomId?1:0,roomid:String(this.core.room.roomId)})):w&&(L.subscribeParams.subUsers=[{userId:w,roomType:this.core.room.useStringRoomId?1:0,roomid:String(this.core.room.roomId)}]);try{this._log.info(`start_cloud_transcription ${JSON.stringify(L)}`);const q=await this.core.room.sendSignalMessage({command:"start_cloud_transcription",responseCommand:String(8268),data:L,retries:0}),{code:lA,data:tA}=q.data;if(lA!==0){const IA=((n=q.data)==null?void 0:n.message)||"";throw this._log.error("start_cloud_transcription failed",{extraCode:lA,reason:IA,data:tA}),new c({code:I.SERVER_ERROR,extraCode:lA,message:IA})}const{taskId:BA}=tA;if(!BA)throw this._log.error("taskId is required",{data:q.data}),new c({code:I.SERVER_ERROR,message:"taskId is required"});return this.activeTranscriberMap.set(BA,i),this._log.info(`start_cloud_transcription success ${BA}, activeSize: ${this.activeTranscriberMap.size}`),BA}catch(q){throw this._log.error("start_cloud_transcription failed",{error:q}),q}}async update(){}async stop({transcriberRobotId:i}){var n;const{RtcError:c,ErrorCode:I}=this.core.errorModule;if(!this.core.room.sendSignalMessage)throw new c({code:I.ENV_NOT_SUPPORTED});try{const C=await this.core.room.sendSignalMessage({command:"stop_cloud_transcription",responseCommand:String(8270),data:{taskId:i},retries:3});if(C.data.code!==0){const f=C.data.code,w=((n=C.data)==null?void 0:n.message)||"";if(!xcA.has(f))throw this._log.error("stop_cloud_transcription failed",{extraCode:f,reason:w,data:C.data.data}),new c({code:I.SERVER_ERROR,extraCode:f,message:w});this._log.warn("stop_cloud_transcription ignored error",{extraCode:f,reason:w,data:C.data.data})}this.activeTranscriberMap.delete(i)}catch(C){throw this._log.error("stop_cloud_transcription failed",{error:C}),C}}destroy(){this.activeTranscriberMap.clear()}};BY(ZX,"Name","RealtimeTranscriber");var $X=ZX,YcA=$X;const VcA=Object.freeze(Object.defineProperty({__proto__:null,RealtimeTranscriber:$X,default:YcA},Symbol.toStringTag,{value:"Module"})),JcA=HU(VcA);var HcA=Object.create,jU=Object.defineProperty,qcA=Object.defineProperties,A7=Object.getOwnPropertyDescriptor,KcA=Object.getOwnPropertyDescriptors,e7=Object.getOwnPropertyNames,LY=Object.getOwnPropertySymbols,jcA=Object.getPrototypeOf,I4=Object.prototype.hasOwnProperty,t7=Object.prototype.propertyIsEnumerable,tW=(t,i,n)=>i in t?jU(t,i,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[i]=n,Rn=(t,i)=>{for(var n in i||(i={}))I4.call(i,n)&&tW(t,n,i[n]);if(LY)for(var n of LY(i))t7.call(i,n)&&tW(t,n,i[n]);return t},gB=(t,i)=>qcA(t,KcA(i)),WcA=(t,i)=>{var n={};for(var c in t)I4.call(t,c)&&i.indexOf(c)<0&&(n[c]=t[c]);if(t!=null&&LY)for(var c of LY(t))i.indexOf(c)<0&&t7.call(t,c)&&(n[c]=t[c]);return n},WU=(t,i)=>function(){return i||(0,t[e7(t)[0]])((i={exports:{}}).exports,i),i.exports},u4=(t,i)=>{for(var n in i)jU(t,n,{get:i[n],enumerable:!0})},zcA=(t,i,n,c)=>{if(i&&typeof i=="object"||typeof i=="function")for(let I of e7(i))I4.call(t,I)||I===n||jU(t,I,{get:()=>i[I],enumerable:!(c=A7(i,I))||c.enumerable});return t},mT=(t,i,n)=>(n=t!=null?HcA(jcA(t)):{},zcA(jU(n,"default",{value:t,enumerable:!0}),t)),Cc=(t,i,n,c)=>{for(var I,C=A7(i,n),f=t.length-1;f>=0;f--)(I=t[f])&&(C=I(i,n,C)||C);return C&&jU(i,n,C),C},Be=(t,i,n)=>tW(t,typeof i!="symbol"?i+"":i,n),zU=WU({"../node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.js"(t,i){var n=Object.prototype.hasOwnProperty,c="~";function I(){}function C(N,L,q){this.fn=N,this.context=L,this.once=q||!1}function f(N,L,q,lA,tA){if(typeof q!="function")throw new TypeError("The listener must be a function");var BA=new C(q,lA||N,tA),IA=c?c+L:L;return N._events[IA]?N._events[IA].fn?N._events[IA]=[N._events[IA],BA]:N._events[IA].push(BA):(N._events[IA]=BA,N._eventsCount++),N}function w(N,L){--N._eventsCount===0?N._events=new I:delete N._events[L]}function _(){this._events=new I,this._eventsCount=0}Object.create&&(I.prototype=Object.create(null),new I().__proto__||(c=!1)),_.prototype.eventNames=function(){var N,L,q=[];if(this._eventsCount===0)return q;for(L in N=this._events)n.call(N,L)&&q.push(c?L.slice(1):L);return Object.getOwnPropertySymbols?q.concat(Object.getOwnPropertySymbols(N)):q},_.prototype.listeners=function(N){var L=c?c+N:N,q=this._events[L];if(!q)return[];if(q.fn)return[q.fn];for(var lA=0,tA=q.length,BA=new Array(tA);lA1&&(f[_[0]]=void 0),f};t.parseParams=function(f){return f.split(/;\s?/).reduce(C,{})},t.parseFmtpConfig=t.parseParams,t.parsePayloads=function(f){return f.toString().split(" ").map(Number)},t.parseRemoteCandidates=function(f){for(var w=[],_=f.split(" ").map(i),N=0;N<_.length;N+=3)w.push({component:_[N],ip:_[N+1],port:_[N+2]});return w},t.parseImageAttributes=function(f){return f.split(" ").map(function(w){return w.substring(1,w.length-1).split(",").reduce(C,{})})},t.parseSimulcastStreamList=function(f){return f.split(";").map(function(w){return w.split(",").map(function(_){var N,L=!1;return _[0]!=="~"?N=i(_):(N=i(_.substring(1,_.length)),L=!0),{scid:N,paused:L}})})}}}),XcA=WU({"../node_modules/.pnpm/sdp-transform@2.15.0/node_modules/sdp-transform/lib/writer.js"(t,i){var n=E4(),c=/%[sdv%]/g,I=function(_){var N=1,L=arguments,q=L.length;return _.replace(c,function(lA){if(N>=q)return lA;var tA=L[N];switch(N+=1,lA){case"%%":return"%";case"%s":return String(tA);case"%d":return Number(tA);case"%v":return""}})},C=function(_,N,L){var q=[_+"="+(N.format instanceof Function?N.format(N.push?L:L[N.name]):N.format)];if(N.names)for(var lA=0;lA({type:"object",required:i,properties:{canvasColor:{required:!1,type:["string",CanvasGradient,CanvasPattern]},width:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},height:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},frameRate:{required:!1,type:"number",notLessThanZero:!0,min:1,max:60}},validate(r,l,I){const{RtcError:h,ErrorCode:f,ErrorCodeDictionary:w}=t.errorModule;if(!r)return;const{width:_,height:G}=r;if(_&&G&&_*G>8294400)throw new h({code:f.INVALID_PARAMETER,message:"The mix resolution cannot be set higher than 3840 * 2160."})}}),kX=t=>({required:!1,type:["string",HTMLElement,null],validate(i,r,l){const{RtcError:I,ErrorCode:h,ErrorCodeDictionary:f}=t.errorModule;if(t.utils.isString(i)&&!document.getElementById(i))throw new I({code:h.INVALID_PARAMETER,extraCode:f.INVALID_ELEMENT_ID,fnName:l,messageParams:{key:r}})}}),xU=(t,i=!0)=>({type:"object",required:i,properties:Rn({},DcA),validate(r,l,I){const{RtcError:h,ErrorCode:f,ErrorCodeDictionary:w}=t.errorModule;if(r){if(r.fillMode&&!["contain","cover","fill"].includes(r.fillMode))throw new h({code:f.INVALID_PARAMETER,extraCode:w.INVALID_PARAMETER_TYPE,message:"The fillMode parameter must be 'contain', 'cover' or 'fill'",fnName:I});if(r.rotation&&![0,90,180,270].includes(r.rotation))throw new h({code:f.INVALID_PARAMETER,extraCode:w.INVALID_PARAMETER_TYPE,message:"The rotation parameter must be 0, 90, 180 or 270",fnName:I})}}}),LX=t=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},cameraId:{required:!1,type:"string"},videoTrack:{required:!1,instanceof:MediaStreamTrack},profile:{required:!1,type:["string","object"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},layout:Rn({},xU(t))}}}),UX=t=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},profile:{required:!1,type:["string","object"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},captureElement:{required:!1,type:HTMLElement},preferDisplaySurface:{required:!1,type:"string"},layout:Rn({},xU(t))},validate(i,r,l){const{RtcError:I,ErrorCode:h,ErrorCodeDictionary:f}=t.errorModule;if(!t.rtcDectection.isScreenCaptureApiAvailable())throw new I({code:h.ENV_NOT_SUPPORTED,fnName:l,extraCode:f.NOT_SUPPORTED_SCREEN_SHARE})}}}),FX=t=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},content:{required:!0,type:"string"},font:{required:!1,type:"string"},color:{required:!1,type:["string",CanvasGradient,CanvasPattern]},layout:Rn({},xU(t))}}}),OX=t=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},url:{required:!0,type:"string"},layout:Rn({},xU(t))}}}),PX=t=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},url:{required:!0,type:"string"},layout:Rn({},xU(t))}}});function ScA(t){return{name:"VideoMixerOptions",type:"object",required:!0,allowEmpty:!1,properties:{view:Rn({},kX(t)),canvasInfo:Rn({},bX(t,!0)),camera:Rn({},LX(t)),screen:Rn({},UX(t)),text:Rn({},FX(t)),image:Rn({},OX(t)),video:Rn({},PX(t))},validate(i,r,l,I){const{RtcError:h,ErrorCode:f,ErrorCodeDictionary:w}=t.errorModule;if(t.environment.isMobile())throw new h({code:f.ENV_NOT_SUPPORTED,message:"VideoMixer is not supported on mobile devices currently"});const{onScreenShareStop:_}=i;if(_&&!t.utils.isFunction(_))throw new h({code:f.INVALID_PARAMETER,extraCode:w.INVALID_PARAMETER_TYPE,fnName:l,messageParams:{key:"onScreenShareStop",value:typeof _,rule:{type:"Function"}}})}}}function McA(t){return{name:"VideoMixerOptions",type:"object",required:!1,allowEmpty:!1,properties:{view:Rn({},kX(t)),canvasInfo:Rn({},bX(t)),camera:Rn({},LX(t)),screen:Rn({},UX(t)),text:Rn({},FX(t)),image:Rn({},OX(t)),video:Rn({},PX(t))}}}function vcA(t){return{name:"StopVideoMixerOptions",required:!1}}var xX=(t=>(t[t.INVALID_PARAMETER=4096]="INVALID_PARAMETER",t[t.INVALID_OPERATION=4097]="INVALID_OPERATION",t[t.NOT_SUPPORTED=4098]="NOT_SUPPORTED",t[t.DEVICE_NOT_FOUND=4099]="DEVICE_NOT_FOUND",t[t.INITIALIZE_FAILED=4100]="INITIALIZE_FAILED",t[t.SIGNAL_CHANNEL_SETUP_FAILED=16385]="SIGNAL_CHANNEL_SETUP_FAILED",t[t.SIGNAL_CHANNEL_ERROR=16386]="SIGNAL_CHANNEL_ERROR",t[t.ICE_TRANSPORT_ERROR=16387]="ICE_TRANSPORT_ERROR",t[t.JOIN_ROOM_FAILED=16388]="JOIN_ROOM_FAILED",t[t.CREATE_OFFER_FAILED=16389]="CREATE_OFFER_FAILED",t[t.SIGNAL_CHANNEL_RECONNECTION_FAILED=16390]="SIGNAL_CHANNEL_RECONNECTION_FAILED",t[t.UPLINK_RECONNECTION_FAILED=16391]="UPLINK_RECONNECTION_FAILED",t[t.DOWNLINK_RECONNECTION_FAILED=16392]="DOWNLINK_RECONNECTION_FAILED",t[t.REMOTE_STREAM_NOT_EXIST=16400]="REMOTE_STREAM_NOT_EXIST",t[t.CLIENT_BANNED=16448]="CLIENT_BANNED",t[t.SERVER_TIMEOUT=16449]="SERVER_TIMEOUT",t[t.SUBSCRIPTION_TIMEOUT=16450]="SUBSCRIPTION_TIMEOUT",t[t.PLAY_NOT_ALLOWED=16451]="PLAY_NOT_ALLOWED",t[t.DEVICE_AUTO_RECOVER_FAILED=16452]="DEVICE_AUTO_RECOVER_FAILED",t[t.START_PUBLISH_CDN_FAILED=16453]="START_PUBLISH_CDN_FAILED",t[t.STOP_PUBLISH_CDN_FAILED=16454]="STOP_PUBLISH_CDN_FAILED",t[t.START_MIX_TRANSCODE_FAILED=16455]="START_MIX_TRANSCODE_FAILED",t[t.STOP_MIX_TRANSCODE_FAILED=16456]="STOP_MIX_TRANSCODE_FAILED",t[t.NOT_SUPPORTED_H264=16457]="NOT_SUPPORTED_H264",t[t.SWITCH_ROLE_FAILED=16458]="SWITCH_ROLE_FAILED",t[t.API_CALL_TIMEOUT=16459]="API_CALL_TIMEOUT",t[t.SCHEDULE_FAILED=16460]="SCHEDULE_FAILED",t[t.API_CALL_ABORTED=16461]="API_CALL_ABORTED",t[t.SPC_INITIALIZED_FAILED=16462]="SPC_INITIALIZED_FAILED",t[t.VIDEO_MANAGER_ERROR=16463]="VIDEO_MANAGER_ERROR",t[t.SWITCH_ROOM_FAILED=16464]="SWITCH_ROOM_FAILED",t[t.VIDEO_ENCODE_FAILED=16465]="VIDEO_ENCODE_FAILED",t[t.AUDIO_ENCODE_FAILED=16466]="AUDIO_ENCODE_FAILED",t[t.UNKNOWN=65535]="UNKNOWN",t))(xX||{}),qg=xX,RcA=function(t){for(const i in qg)if(qg[i]===t)return i;return"UNKNOWN"},wcA=class extends Error{constructor({name:t="RtcError",message:i,code:r=qg.UNKNOWN,extraCode:l=0,constraint:I}){const h=`<${RcA(r)} 0x${r.toString(16)}>`,f=`${i}${I?` constraint: ${I}`:""}${i?.includes(h)?"":` ${h}`}`;super(f),de(this,"code"),de(this,"extraCode"),de(this,"message"),de(this,"originMessage"),de(this,"name"),de(this,"constraint"),this.code=r,this.extraCode=l,this.name=t,this.message=f,this.constraint=I,this.originMessage=i}getCode(){return this.code}getExtraCode(){return this.extraCode}toString(){return this.originMessage}},ml=wcA,_cA=0,jW=function(){return Date.now()+_cA},YX=function(){const t=new Date;return t.setTime(jW()),t.toLocaleString()},TcA=function(t){let i=String(t.getMilliseconds());return"padStart"in String.prototype&&(i=i.toString().padStart(3,"0")),`${t.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/,"$1")}:${i}`},NcA={};qW(NcA,{REPORT_TYPE:()=>g7,buildSSOPackage:()=>XW,bytes2ms:()=>nlA,calculateScaleResolutionDownNumber:()=>r7,concatArrayBuffers:()=>TlA,convertObjectNumberToInt:()=>s7,copyProperties:()=>slA,deepClone:()=>vY,deepCloneBasic:()=>W3,deepMerge:()=>t7,delay:()=>rT,fibonacci:()=>ZW,formatedTime:()=>DlA,getConstructorName:()=>IlA,getContainerFromElement:()=>flA,getEnv:()=>XcA,getFirst16Bits:()=>GlA,getInternalVersion:()=>ClA,getLast16Bits:()=>NlA,getLoggerUrl:()=>WW,getMediaStreamTrackInfo:()=>RlA,getMuteStateFromFlag:()=>e7,getNetworkType:()=>zW,getNumNetworkType:()=>olA,getReconnectionTimeout:()=>glA,getStringByteLength:()=>SlA,getTestSignalDomain:()=>AlA,getTurnServer:()=>QlA,getUint32Version:()=>o7,getValueType:()=>Nv,getViewListFromView:()=>mlA,glog:()=>alA,ipv4ToUint32:()=>plA,isArray:()=>Ah,isAudioWorkletSupported:()=>ulA,isBoolean:()=>fv,isConstructor:()=>A7,isEmpty:()=>BlA,isFunction:()=>mv,isLangChinese:()=>zy,isMediaStreamTrack:()=>clA,isNumber:()=>Gv,isObject:()=>Cv,isOverseaSdkAppId:()=>MY,isPlainObject:()=>nT,isPortrait:()=>i7,isPromise:()=>$X,isRemoteTrack:()=>llA,isRotate90Or270:()=>a7,isSetSinkIdSupported:()=>ElA,isString:()=>ih,isUndefined:()=>$n,isVideoMixerOutputTrack:()=>$W,loadImage:()=>MlA,loadVideo:()=>wlA,ms2bytes:()=>rlA,ms2samples:()=>XX,normalizeUrl:()=>vlA,performanceNow:()=>Yc,promiseAny:()=>dlA,samples2ms:()=>ZX,setNetworkTypeFromWebRTC:()=>ilA,stringify:()=>Zy,stringifyIncludeValue:()=>j3,throttlePromise:()=>n7});var SY="5.0.0",VX=typeof importScripts<"u",JX=typeof registerProcessor<"u",GcA="web.sdk.qcloud.com",x3=`https://${GcA}/trtc/webrtc/doc`,sZ="https://cloud.tencent.com/document/product/647/85386",nZ="https://trtc.io/document/56025",bcA="https://yun.tim.qq.com",kcA="https://apisgp.my-imcloud.com",LcA="trtc_error_assistance",HX={LOG:"jssdk_log"},Jj={QCLOUD:"qcloud"},G_=(t=>(t[t.TRACE=0]="TRACE",t[t.DEBUG=1]="DEBUG",t[t.INFO=2]="INFO",t[t.WARN=3]="WARN",t[t.ERROR=4]="ERROR",t[t.NONE=5]="NONE",t))(G_||{}),qX={unknown:0,wifi:1,"4g":2,"3g":3,"2g":4,wired:5,"5g":6},UcA=6048e5,FcA={"480p_2":{width:640,height:480,frameRate:15,bitrate:500}},OcA=FcA["480p_2"],$t={CANVAS:"canvas",AUDIO:"audio",VIDEO:"video",SCREEN:"screen",SMALL:"small",BIG:"big",AUXILIARY:"auxiliary",SMALL_VIDEO:"smallVideo",FACING_MODE_USER:"user",FACING_MODE_ENVIRONMENT:"environment",MUTE:"mute",UNMUTE:"unmute",ENDED:"ended",PLAYING:"playing",PAUSE:"pause",ERROR:"error",LOADSTART:"loadstart",LOADEDDATA:"loadeddata",LOADEDMETADATA:"loadedmetadata",AUDIO_INPUT:"audioinput",VIDEO_INPUT:"videoinput",DETAIL:"detail",TEXT:"text",MAIN:"main",BACKUP:"backup",BANNED:"banned",KICK:"kick",USER_TIME_OUT:"user_time_out",ROOM_DISBAND:"room_disband",SEI_MESSAGE:"sei-message",ADD:"add",REMOVE:"remove",REPLACE:"replace",TRACK:"track",SUBSCRIBE:"subscribe",UNSUBSCRIBE:"unsubscribe",TRANSCEIVER_DIRECTION_SENDONLY:"sendonly",TRANSCEIVER_DIRECTION_RECVONLY:"recvonly",ENTER_PICTURE_IN_PICTURE:"enterpictureinpicture",LEAVE_PICTURE_IN_PICTURE:"leavepictureinpicture",FULLSCREEN_CHANGE:"fullscreenchange",RESIZE:"resize",TIME_UPDATE:"timeupdate"},rZ=1,PcA=2,xcA=4,aZ=8,gZ=64,cZ=16,YcA=256,tU={PLAYER_ERROR:"player-error",LOAD_WORKLET:"load-worklet",GET_USER_MEDIA_RETRY:"getUserMedia-retry"},VcA="unified-plan",b_=5,KX="default",O1=2e3,jX=["width","height","frameRate","facingMode","sampleRate","sampleSize","channelCount","deviceId","min","max"],JcA={alpha:!0,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0,powerPreference:"low-power"},HcA=function(t,i,r,l){return new(r||(r=Promise))(function(I,h){function f(G){try{_(l.next(G))}catch(U){h(U)}}function w(G){try{_(l.throw(G))}catch(U){h(U)}}function _(G){var U;G.done?I(G.value):(U=G.value,U instanceof r?U:new r(function(j){j(U)})).then(f,w)}_((l=l.apply(t,[])).next())})},Y3=Symbol(32),V3=Symbol(16),J3=Symbol(8),Z_=class{constructor(t){this.g=t,this.consumed=0,t&&(this.need=t.next().value)}setG(t){this.g=t,this.demand(t.next().value,!0)}consume(){this.buffer&&this.consumed&&(this.buffer.copyWithin(0,this.consumed),this.buffer=this.buffer.subarray(0,this.buffer.length-this.consumed),this.consumed=0)}demand(t,i){return i&&this.consume(),this.need=t,this.flush()}read(t){return HcA(this,void 0,void 0,function*(){return this.lastReadPromise&&(yield this.lastReadPromise),this.lastReadPromise=new Promise((i,r)=>{var l;this.reject=r,this.resolve=I=>{delete this.lastReadPromise,delete this.resolve,delete this.need,i(I)},this.demand(t,!0)||(l=this.pull)===null||l===void 0||l.call(this,t)})})}readU32(){return this.read(Y3)}readU16(){return this.read(V3)}readU8(){return this.read(J3)}close(){var t;this.g&&this.g.return(),this.buffer&&this.buffer.subarray(0,0),(t=this.reject)===null||t===void 0||t.call(this,new Error("EOF")),delete this.lastReadPromise}flush(){if(!this.buffer||!this.need)return;let t=null;const i=this.buffer.subarray(this.consumed);let r=0;const l=I=>i.length<(r=I);if(typeof this.need=="number"){if(l(this.need))return;t=i.subarray(0,r)}else if(this.need===Y3){if(l(4))return;t=i[0]<<24|i[1]<<16|i[2]<<8|i[3]}else if(this.need===V3){if(l(2))return;t=i[0]<<8|i[1]}else if(this.need===J3){if(l(1))return;t=i[0]}else if("buffer"in this.need){if("byteOffset"in this.need){if(l(this.need.byteLength-this.need.byteOffset))return;new Uint8Array(this.need.buffer,this.need.byteOffset).set(i.subarray(0,r)),t=this.need}else if(this.g)return void this.g.throw(new Error("Unsupported type"))}else{if(l(this.need.byteLength))return;new Uint8Array(this.need).set(i.subarray(0,r)),t=this.need}return this.consumed+=r,this.g?this.demand(this.g.next(t).value,!0):this.resolve&&this.resolve(t),t}write(t){if(t instanceof Uint8Array?this.malloc(t.length).set(t):"buffer"in t?this.malloc(t.byteLength).set(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)):this.malloc(t.byteLength).set(new Uint8Array(t)),!this.g&&!this.resolve)return new Promise(i=>this.pull=i);this.flush()}writeU32(t){this.malloc(4).set([t>>24&255,t>>16&255,t>>8&255,255&t]),this.flush()}writeU16(t){this.malloc(2).set([t>>8&255,255&t]),this.flush()}writeU8(t){this.malloc(1)[0]=t,this.flush()}malloc(t){if(this.buffer){const i=this.buffer.length,r=i+t;if(r<=this.buffer.buffer.byteLength-this.buffer.byteOffset)this.buffer=new Uint8Array(this.buffer.buffer,this.buffer.byteOffset,r);else{const l=new Uint8Array(r);l.set(this.buffer),this.buffer=l}return this.buffer.subarray(i,r)}return this.buffer=new Uint8Array(t),this.buffer}};Z_.U32=Y3,Z_.U16=V3,Z_.U8=J3;var qcA=128;function Hj(t){const i=new Z_;for(;t>=128;)i.malloc(1)[0]=255&t|qcA,t>>>=7;return i.malloc(1)[0]=255&t,i.buffer||new Uint8Array(0)}function H3(t,i=0){const r=new Z_,l=i<<3;switch(typeof t){case"boolean":const I=r.malloc(2);I[0]=l,I[1]=t?1:0;break;case"number":r.malloc(1)[0]=l,r.write(Hj(t));break;case"string":r.malloc(1)[0]=2|l;const h=new TextEncoder().encode(t);r.write(Hj(h.length));const f=r.malloc(h.length);for(let _=0;_>>24&255),this.buffer.push(t>>>16&255),this.buffer.push(t>>>8&255),this.buffer.push(255&t)}writeInt16(t){this.buffer.push(t>>>8&255),this.buffer.push(255&t)}writeByte(t){this.buffer.push(255&t)}writeBytes(t){for(let i=0;i>>24&255,t[r+1]=i>>>16&255,t[r+2]=i>>>8&255,t[r+3]=255&i}function gd(t,i){return t[i]<<24|t[i+1]<<16|t[i+2]<<8|t[i+3]}function uZ(t,i){return t[i]}function yL(t,i,r){return new TextDecoder().decode(KcA(t,i,r))}function KcA(t,i,r){return t.slice(i,i+r)}var qj=0,q3=2654435769,K3=16,EZ=4,iU=2,oU=7;function jcA(t,i,r,l="AVQualityReportSvc.C2S",I=2e3,h=2,f=30){return{version:I,encryption:h,d2:"",d2Len:0,uinType:f,uin:"",uinLen:0,reqHead:{seqNumber:r,appId:t,appidAtThird:new Uint8Array(0),a2:"",a2Len:0,serviceCmd:l,serviceCmdLen:0,cookie:"",cookieLen:0,imei:"",imeiLen:0,ksid:"",ksidLen:0,clientVersionInfo:"",clientVersionInfoLen:0},busiBuff:i}}function WcA(t,i){const r=new lZ,l=jcA(i,t,qj);qj=qj+1&2147483647,r.writeInt32(0),r.writeInt32(l.version),r.writeByte(l.encryption);const I=new TextEncoder().encode(l.d2);r.writeInt32(I.length+4),I&&r.writeBytes(I),r.writeByte(l.uinType);const h=new TextEncoder().encode(l.uin);r.writeInt32(h.length+4),h.length&&r.writeBytes(h);const f=new lZ;f.writeInt32(0),f.writeInt32(l.reqHead.seqNumber),f.writeInt32(l.reqHead.appId),f.writeByte(l.reqHead.appId>>>24&255),f.writeByte(l.reqHead.appId>>>16&255),f.writeByte(l.reqHead.appId>>>8&255),f.writeByte(255&l.reqHead.appId);for(let WA=4;WA<16;WA++)f.writeByte(0);const w=new TextEncoder().encode(l.reqHead.a2);f.writeInt32(w.length+4),w.length&&f.writeBytes(w);const _=new TextEncoder().encode(l.reqHead.serviceCmd);f.writeInt32(_.length+4),_.length&&f.writeBytes(_);const G=new TextEncoder().encode(l.reqHead.cookie);f.writeInt32(G.length+4),G.length&&f.writeBytes(G);const U=new TextEncoder().encode(l.reqHead.imei);f.writeInt32(U.length+4),U.length&&f.writeBytes(U);const j=new TextEncoder().encode(l.reqHead.ksid);f.writeInt32(j.length+4),j.length&&f.writeBytes(j);const lA=new TextEncoder().encode(l.reqHead.clientVersionInfo);f.writeInt16(lA.length+2),lA.length&&f.writeBytes(lA);const sA=f.length;f.data[0]=sA>>>24&255,f.data[1]=sA>>>16&255,f.data[2]=sA>>>8&255,f.data[3]=255&sA,ih(t)&&(t=new TextEncoder().encode(t)),f.writeInt32(t.length+4),t.length&&f.writeBytes(t);let mA=new Uint8Array(f.data),IA=null;l.encryption===1?IA=new TextEncoder().encode(l.uin):l.encryption===2&&(IA=new Uint8Array(16)),IA&&(mA=zcA(mA,IA)),r.writeBytes(mA);const cA=new Uint8Array(r.data),TA=cA.length;return cA[0]=TA>>>24&255,cA[1]=TA>>>16&255,cA[2]=TA>>>8&255,cA[3]=255&TA,cA}function zcA(t,i){const r=t.length;let l=(r+1+iU+oU)%8;l&&(l=8-l);const I=new Uint8Array(r+1+iU+oU+l);let h=0;const f=new Uint8Array(8),w=new Uint8Array(8),_=new Uint8Array(8);let G=0;f[0]=248&Math.floor(256*Math.random())|l,G=1;for(let j=0;j>>=0,I+=(h<<4)+f[0]^h+w^(h>>>5)+f[1],I>>>=0,h+=(I<<4)+f[2]^I+w^(I>>>5)+f[3],h>>>=0;IZ(r,I,l),IZ(r,h,l+4)}var XcA=function(){return new URLSearchParams(location.search).get("trtc_env")||""},$cA=".rtc.qq.com",AlA=function(t){return t.includes(".")?t:`${t}${$cA}`},MY=t=>Number(t)<14e8,WW=function(t,i){let r;return r=MY(t)?kcA:bcA,`${r}/v5/AVQualityReportSvc/C2S?random=${Math.floor(Math.random()*2**31)}&sdkappid=${t}&cmdtype=${i}`},WX="unknown";function zW(){tlA();const{userAgent:t,connection:i}=navigator;let r=(t.match(/NetType\/\S+/)||[])[0]||"";r=r.toLowerCase().replace("nettype/",""),r==="3gnet"&&(r="3g");const l=i&&i.type&&i.type.toLowerCase();let I=i&&i.effectiveType&&i.effectiveType.toLowerCase();return I==="slow-2"&&(I="2g"),l?zX(l,I):WX}function elA(){Wo.warn("netType changed",zW())}var dZ=!1;function tlA(){var t;dZ||(dZ=!0,(t=navigator.connection)==null||t.addEventListener("typechange",elA))}function zX(t,i){if(qX[t])return t;switch(t){case"cellular":case"wimax":return i||"unknown";case"ethernet":return"wired";default:return"unknown"}}function ilA(t){WX=zX(t)}function olA(){return qX[zW()]}function slA(t,i){for(const r of Reflect.ownKeys(i))if(r!=="constructor"&&r!=="prototype"&&r!=="name"){const l=Object.getOwnPropertyDescriptor(i,r)||"";Object.defineProperty(t,r,l)}return t}function nlA(t,i=48e3){return ZX(t/4,i)}function ZX(t,i=48e3){return 1e3*t/i}function rlA(t,i=48e3){return 4*XX(t,i)}function XX(t,i=48e3){return t*i/1e3}var alA=typeof window<"u"&&typeof window.glog=="function"?window.glog:()=>{},zy=()=>{let t=navigator.language;return t=t.substring(0,2),t==="zh"},nT=function(t){if(!t||typeof t!="object"||Object.prototype.toString.call(t)!="[object Object]")return!1;const i=Object.getPrototypeOf(t);if(i===null)return!0;const r=Object.prototype.hasOwnProperty.call(i,"constructor")&&i.constructor;return typeof r=="function"&&r instanceof r&&Function.prototype.toString.call(r)===Function.prototype.toString.call(Object)};function ZW(t,i=1,r=1){return t<=1?r:ZW(t-1,r,i+r)}function glA(t){return t>8?3e4:1e3*ZW(t)}function Nv(t){return Reflect.apply(Object.prototype.toString,t,[]).replace(/^\[object\s(\w+)\]$/,"$1").toLowerCase()}var mv=t=>typeof t=="function",$n=t=>t===void 0,ih=t=>typeof t=="string",Gv=t=>typeof t=="number",fv=t=>typeof t=="boolean",Cv=t=>Nv(t)==="object",Ah=t=>Nv(t)==="array",clA=t=>Nv(t)==="MediaStreamTrack".toLowerCase(),llA=t=>t.isRemote,$X=t=>Nv(t)==="promise",A7=t=>mv(t)&&t.prototype.constructor===t,IlA=t=>A7(t)?t.prototype.constructor.name:"",ulA=typeof AudioWorkletNode<"u",ElA=typeof HTMLMediaElement<"u"&&"setSinkId"in HTMLMediaElement.prototype;function dlA(t){return new Promise((i,r)=>{const l=[];t.forEach(I=>{I.then(i).catch(h=>{l.push(h),l.length===t.length&&r(l)})})})}function Yc(){return performance&&performance.now?Math.floor(performance.now()):Date.now()}var CZ=t=>+t<10?`0${t}`:t,ClA=t=>{const i=t.match(/^\d+\.\d+\.\d+/)[0];if(!i)return t;const r=i.split("."),l=CZ(r[1])+CZ(r[2]);return r[1]-15>0&&(r[1]="15"),r[2]-15>0&&(r[2]="15"),`${r.join(".")}.${l}`},hlA=Object.prototype.hasOwnProperty;function BlA(t){if(t==null)return!0;if(typeof t=="boolean")return!1;if(typeof t=="number")return t===0;if(typeof t=="string"||typeof t=="function"||Array.isArray(t))return t.length===0;if(t instanceof Error)return t.message==="";if(nT(t))switch(Object.prototype.toString.call(t)){case"[object File]":case"[object Map]":case"[object Set]":return t.size===0;case"[object Object]":for(const i in t)if(hlA.call(t,i))return!1;return!0}return!1}function e7(t,i){return{userId:i,hasAudio:!!(t&aZ),hasVideo:!!(t&rZ),hasAuxiliary:!!(t&xcA),hasSmall:!!(t&PcA),audioMuted:!!(t&gZ),videoMuted:!!(t&cZ),audioAvailable:!(!(t&aZ)||t&gZ),videoAvailable:!(!(t&rZ)||t&cZ),hasDatachannel:!!(t&YcA)}}function QlA(t){const i={urls:t.url.startsWith("turn:")||t.url.startsWith("turns:")?t.url:`turn:${t.url}`};return $n(t.username)||$n(t.credential)||(i.username=t.username,i.credential=t.credential,i.credentialType="password",$n(t.credentialType)||(i.credentialType=t.credentialType)),i}function plA(t,i=!0){if(!ih(t))return 0;const r=t.split(".");return i?(Number(r[0])<<24|Number(r[1])<<16|Number(r[2])<<8|Number(r[3]))>>>0:(Number(r[3])<<24|Number(r[2])<<16|Number(r[1])<<8|Number(r[0]))>>>0}var t7=function(t,i,r,l){if(!Cv(t)||!Cv(i))return 0;let I=0;const h=Object.keys(i);let f;for(let w=0,_=h.length;w<_;w++)if(f=h[w],!($n(i[f])||r&&r.includes(f)))if(Cv(t[f])&&Cv(i[f]))I+=t7(t[f],i[f],r,l);else{if(l&&l.includes(i[f]))continue;t[f]!==i[f]&&(t[f]=vY(i[f]),I+=1)}return I};function vY(t){if(Ah(t)){const i=[];return t.forEach((r,l)=>{i[l]=vY(r)}),i}if(Cv(t)){const i={};return Object.keys(t).forEach(r=>{i[r]=vY(t[r])}),i}return t}var mlA=t=>{let i=[];if(Ah(t))i=[...t];else if(ih(t)){const r=document.getElementById(t);r&&i.push(r)}else t&&i.push(t);return i},flA=t=>ih(t)?document.getElementById(t):t,ylA=t=>{const i=r=>r<10?`0${r}`:`${r}`;return`${t.getFullYear()}/${t.getMonth()+1}/${t.getDate()} ${i(t.getHours())}:${i(t.getMinutes())}:${i(t.getSeconds())}`},DlA=()=>ylA(new Date);function Zy(t,{keysToInclude:i,keysToExclude:r}){try{if(Ah(t))return`[${t.map(f=>Zy(f,{keysToInclude:i,keysToExclude:r})).join(",")}]`;if(!nT(t)||!Ah(i)&&!Ah(r))return JSON.stringify(t);const l={},I=new Set(i),h=new Set(r);return Object.keys(t).forEach(f=>{(h.size===0&&I.has(f)||I.size===0&&!h.has(f))&&(l[f]=nT(t[f])||Ah(t[f])?JSON.parse(Zy(t[f],{keysToExclude:r,keysToInclude:i})):t[f])}),JSON.stringify(l)}catch{return"{}"}}function j3(t,i=!1){const r=[];return Object.keys(t).forEach(l=>{i===t[l]&&r.push(l)}),Zy(t,{keysToInclude:r})}function SlA(t){return t.replace(/[\u4e00-\u9fa5]/g,"aa").length}var i7=()=>{var t,i,r,l;return(t=window.screen)!=null&&t.orientation?!!((l=(r=(i=window.screen)==null?void 0:i.orientation)==null?void 0:r.type)!=null&&l.includes("portrait")):window.orientation===0||window.orientation===180},MlA=async t=>new Promise((i,r)=>{let l;if(ih(t))l=new Image,l.crossOrigin="anonymous",l.src=t;else if(l=t,l.complete)return void i(l);l.onload=()=>i(l),l.onerror=()=>{r(new ml({code:qg.INVALID_PARAMETER,message:`load image failed, url: ${t}`}))}}),o7=t=>{const i=t.split(".");return+i[0]<<24|+i[1]<<16|+i[2]<<8|+i[3]},s7=t=>(Object.keys(t).forEach(i=>{Gv(t[i])&&(i.startsWith("uint")||i.startsWith("int"))?t[i]=Math.floor(t[i]):(nT(t[i])||Ah(t[i]))&&s7(t[i])}),t);function rT(t,i){return new Promise(r=>{const l=setTimeout(r,t);i&&i(l)})}function n7(t,i){let r=null;return function(...l){return r||(r=t.apply(i||this,l),r.finally(()=>r=null),r)}}function vlA(t){return t.replace(/(^|[^:])\/{2,}/g,"$1/")}function RlA(t){var i;try{const{width:r,height:l,frameRate:I,sampleRate:h,sampleSize:f,channelCount:w}=(i=t.getSettings)==null?void 0:i.call(t),_=t.kind===$t.AUDIO?`${h}x${f}@${w}`:`${r}x${l}@${I}`,G=t.stats?` stats: ${JSON.stringify(t.stats).replaceAll('"',"")}`:"";return`${t.id} ${t.readyState} muted:${t.muted} ${t.kind} ${t.label} ${_}${G}`}catch{return""}}function r7(t,i){return t.width*t.height===i.width*i.height?1:i7()&&i.width>i.height&&t.height>i.width?Math.max(t.width/i.height,t.height/i.width,1):Math.max(t.width/i.width,t.height/i.height,1)}function a7(t){return t===90||t===270}async function wlA(t){return new Promise((i,r)=>{const l=document.createElement("video");l.crossOrigin="anonymous",l.src=t,l.muted=!0,l.loop=!0,l.playsInline=!0,l.play().then(()=>i(l)),l.onerror=()=>{r(l.error)}})}function W3(t,i=new WeakMap){if(typeof t!="object"||t===null)return t;if(i.has(t))return i.get(t);if(Array.isArray(t)){const r=[];return i.set(t,r),t.forEach((l,I)=>{r[I]=W3(l,i)}),r}if(Object.prototype.toString.call(t)==="[object Object]"){const r={};return i.set(t,r),Reflect.ownKeys(t).forEach(l=>{r[l]=W3(t[l],i)}),r}return t}var g7=(t=>(t[t.END_REPORT=2001]="END_REPORT",t[t.LOG=2002]="LOG",t[t.KEY_METRIC_REPORT=2003]="KEY_METRIC_REPORT",t))(g7||{});function _lA(t,i,r,l){let I={data:t,random:Math.floor(Math.random()*2147483648),sdkAppId:r};return $n(l)||(I=nB(Rn({},I),{gzip:+l})),{uint32_sdkappid:0,uint64_from_uin:0,uint32_timestamp:0,uint32_seq:0,msg_common_info:{msg_device_info:{enum_device_type:0,str_device_brand:"",str_device_model:"",str_device_board:"",str_device_cpu_abi:""},msg_system_info:{enum_os_type:0,str_os_version:"",msg_network_info:0},msg_network_info:{enum_network_type:0}},msg_report_content:{uint32_type:i,bytes_report_data:JSON.stringify(I)}}}function XW(t,i,r,l){try{const I=_lA(t,i,r,l);return WcA(H3(I),r)}catch{return JSON.stringify(t)}}function TlA(t,i){const r=new Uint8Array(t.byteLength+i.byteLength);return r.set(new Uint8Array(t),0),r.set(new Uint8Array(i),t.byteLength),r.buffer}function NlA(t){return(65535&t)>>>0}function GlA(t){return(4294901760&t)>>>0}function $W(t){return!!(t&&t instanceof CanvasCaptureMediaStreamTrack&&t.canvas.id.includes("trtc_mix"))}function blA(t){const i=klA(t);return i?.busiBuff}function klA(t){try{const i={};let r=0;i.totalLength=gd(t,r),r+=4,i.version=gd(t,r),r+=4,i.encryption=uZ(t,r),r+=1,i.uinType=uZ(t,r),r+=1,i.uinLength=gd(t,r),r+=4,i.uin=i.uinLength>4?yL(t,r,i.uinLength-4):"",r+=i.uinLength-4;const l=t.slice(r);if(i.encryption===2){const I=new Uint8Array(16).fill(0);t=LlA(l,I),i.decrypted=!0,r=0}else t=l,r=0;return i.rspHeadLength=gd(t,r),r+=4,i.seqNo=gd(t,r),r+=4,i.retCode=gd(t,r),r+=4,i.retStrLength=gd(t,r),r+=4,i.retStr=i.retStrLength?yL(t,r,i.retStrLength-4):"",r+=i.retStrLength-4,i.serviceCmdLength=gd(t,r),r+=4,i.serviceCmd=i.serviceCmdLength?yL(t,r,i.serviceCmdLength-4):"",r+=i.serviceCmdLength-4,i.cookieLength=gd(t,r),r+=4,i.cookie=i.cookieLength?yL(t,r,i.cookieLength-4):"",r+=i.cookieLength-4,i.flag=gd(t,r),r+=4,i.busiBuffLength=gd(t,r),r+=4,i.busiBuff=i.busiBuffLength?yL(t,r,i.busiBuffLength-4):"",r+=i.busiBuffLength-4,i}catch{}}function c7(t,i){let r=t[0]<<24|t[1]<<16|t[2]<<8|t[3],l=t[4]<<24|t[5]<<16|t[6]<<8|t[7];r>>>=0,l>>>=0;let I=q3*K3>>>0;for(let h=0;h>>5)+i[3],l>>>=0,r-=(l<>>5)+i[1],r>>>=0,I-=q3,I>>>=0;return new Uint8Array([r>>>24&255,r>>>16&255,r>>>8&255,255&r,l>>>24&255,l>>>16&255,l>>>8&255,255&l])}function LlA(t,i){let r=0;const l=new Uint8Array(8).fill(0);let I=c7(new Uint8Array(t.slice(0,8)),i);const h=7&I[0],f=t.length-1-h-iU-oU,w=new Uint8Array(f);let _=0,G=l,U=t.slice(0,8);r=8;let j=1;j+=h;for(let sA=1;sA<=iU;)if(j<8)j++,sA++;else if(j===8){const mA=jj(t,r,G,U,I,i);G=mA.ivPreCrypt,U=mA.ivCurCrypt,I=mA.debiBuf,r=mA.bufPos,j=0}let lA=f;for(;lA>0;)if(j<8)w[_++]=I[j]^G[j],j++,lA--;else if(j===8){const sA=jj(t,r,G,U,I,i);G=sA.ivPreCrypt,U=sA.ivCurCrypt,I=sA.debiBuf,r=sA.bufPos,j=0}for(let sA=1;sA<=oU;)if(j<8)I[j],G[j],j++,sA++;else if(j===8){if(r>=t.length)break;const mA=jj(t,r,G,U,I,i);if(!mA.success)break;G=mA.ivPreCrypt,U=mA.ivCurCrypt,I=mA.debiBuf,r=mA.bufPos,j=0}return w}function jj(t,i,r,l,I,h){if(i+8>t.length)return{success:!1};const f=new Uint8Array(l),w=t.slice(i,i+8),_=new Uint8Array(8);for(let G=0;G<8;G++)_[G]=I[G]^w[G];return{success:!0,ivPreCrypt:f,ivCurCrypt:w,debiBuf:c7(_,h),bufPos:i+8}}var hZ=typeof TextDecoder<"u"?new TextDecoder:void 0;function l7({url:t,body:i,method:r="POST",timeout:l,priority:I}){return new Promise((h,f)=>{if("fetch"in window)return fetch(t,{method:r,body:i,priority:I}).then(_=>_.clone().json().then(G=>({data:G}),()=>_.arrayBuffer().then(G=>({data:blA(new Uint8Array(G))||(hZ?hZ.decode(G):G)})))).then(h,f);const w=new XMLHttpRequest;w.onreadystatechange=()=>{if(w.readyState===4)if(w.status>=200&&w.status<300)try{const _=JSON.parse(w.response);h({data:_})}catch{h({data:w.response})}else f({status:w.status,statusText:w.statusText||"request failed!"})},w.timeout=l||5e3,w.open(r,t,!0),w.send(i)})}var UlA=Object.prototype.hasOwnProperty,k_=t=>typeof t=="function",D_=t=>t===void 0,FlA=t=>typeof t=="boolean",Wj=t=>t.isRemote,OlA=function(t){if(!t||typeof t!="object"||Object.prototype.toString.call(t)!="[object Object]")return!1;const i=Object.getPrototypeOf(t);if(i===null)return!0;const r=Object.prototype.hasOwnProperty.call(i,"constructor")&&i.constructor;return typeof r=="function"&&r instanceof r&&Function.prototype.toString.call(r)===Function.prototype.toString.call(Object)};function PlA(t){if(t==null)return!0;if(typeof t=="boolean")return!1;if(typeof t=="number")return t===0;if(typeof t=="string"||typeof t=="function"||Array.isArray(t))return t.length===0;if(t instanceof Error)return t.message==="";if(OlA(t))switch(Object.prototype.toString.call(t)){case"[object File]":case"[object Map]":case"[object Set]":return t.size===0;case"[object Object]":for(const i in t)if(UlA.call(t,i))return!1;return!0}return!1}var xlA=0,YlA=1,BZ=2;function VlA({retryFunction:t,settings:i,onError:r,onRetrying:l,onRetryFailed:I,onRetrySuccess:h,context:f}){return function(...w){const{retries:_=5,timeout:G=1e3}=i;let U=0,j=-1,lA=xlA;const sA=async(mA,IA)=>{const cA=f||this;try{const TA=await t.apply(cA,w);U>0&&h&&h.call(this,U),U=0,mA(TA)}catch(TA){const WA=()=>{clearTimeout(j),U=0,lA=BZ,IA(TA)},ue=()=>{lA!==BZ&&U<(k_(_)?_():_)?(U++,lA=YlA,k_(l)&&l.call(this,U,WA),j=window.setTimeout(()=>{j=-1,sA(mA,IA)},k_(G)?G(U):G)):(WA(),k_(I)&&I.call(this,TA))};k_(r)?r.call(this,{error:TA,retry:ue,reject:IA,retryFuncArgs:w,retriedCount:U}):ue()}};return new Promise(sA)}}var A4=VlA,zj=class I7{constructor(i){de(this,"_parentPath"),de(this,"userId"),de(this,"remoteUserId"),de(this,"id"),de(this,"sdkAppId"),de(this,"type"),de(this,"isLocal"),this.id=i.id,this.userId=i.userId,this.sdkAppId=i.sdkAppId,this.remoteUserId=i.remoteUserId,this.isLocal=!FlA(i.isLocal)||i.isLocal,this.type=this.isLocal?"":i.type}getFullId(){return this._parentPath&&this.id?`${this._parentPath}-${this.id}`:this._parentPath?this._parentPath:this.id}createChild(i){const r=new I7({id:i.id,userId:D_(i.userId)?this.userId:i.userId,sdkAppId:D_(i.sdkAppId)?this.sdkAppId:i.sdkAppId,type:D_(i.type)?this.type:i.type,isLocal:D_(i.isLocal)?this.isLocal:i.isLocal,remoteUserId:D_(i.remoteUserId)?this.remoteUserId:i.remoteUserId});return r.bindParent(this),r}bindParent(i){const r=i.getFullId();this._parentPath!==r&&(this.debug(`bind logger parent: ${i.id}`),this._parentPath=r,this.userId=i.userId||this.userId,this.sdkAppId=i.sdkAppId||this.sdkAppId)}setUserId(i){this.userId=i}setSdkAppId(i){this.sdkAppId=i}log(i,r){const l=this.isLocal?this.userId:this.remoteUserId,I=this.getFullId();r.unshift(`[${this.isLocal?"↑":"↓"}${this.type&&this.type!=="main"?"*":""}${I}${l?`|${l}`:""}]`),Wo.log(i,r,D_(this.userId)||PlA(this.userId),this.userId,this.sdkAppId)}info(...i){this.log(2,i)}debug(...i){this.log(1,i)}warn(...i){this.log(3,i)}error(...i){this.log(4,i)}},wQ=typeof navigator>"u"?"":navigator.userAgent,Ys=t=>new RegExp(t,"i").test(wQ),Qc=t=>{if(Ys(t)){const i=new RegExp(`${t}\\/([\\d.]+)`),r=wQ.match(i);if(r&&r[1])return r[1]}return""},EV=t=>{if(Ys(t)){const i=new RegExp(`${t}\\/(\\d+)`),r=wQ.match(i);if(r&&r[1])return parseFloat(r[1])}return NaN},QZ=/AppleWebKit\/([\d.]+)/i.exec(wQ);QZ&&parseFloat(QZ[1]);var e4=Ys("iPad"),u7=typeof navigator<"u"&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2&&Ys("Macintosh"),dV=Ys("iPhone")&&!e4,JlA=Ys("iPod"),Mu=dV||e4||JlA||u7,RY=()=>{try{return Mu&&navigator.maxTouchPoints>1&&navigator.vendor.includes("Apple")}catch{return Mu}},aC=Ys("Android"),E7=function(){if(aC){const t=wQ.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);if(t){const i=t[1]&&parseFloat(t[1]),r=t[2]&&parseFloat(t[2]);if(i&&r)return parseFloat(`${t[1]}.${t[2]}`);if(i)return i}}return NaN}();aC&&Ys("webkit")&&E7<2.3;var sC=Ys("Firefox"),d7=Qc("Firefox"),C7=EV("Firefox"),YU=Ys("Edge"),h7=Qc("Edge"),CV=Ys("Edg"),B7=Qc("Edg"),HlA=EV("Edg"),t4=Ys("SogouMobileBrowser"),Q7=Qc("SogouMobileBrowser"),i4=Ys("MetaSr\\s"),p7=Qc("MetaSr\\s"),Bm=Ys("TBS"),m7=Qc("TBS"),CT=Ys("XWEB"),f7=Qc("XWEB");Ys("MSIE\\s8\\.0");var qlA=Ys("MSIE\\/\\d+");(function(){if(qlA){const t=/MSIE\s(\d+)\.\d/.exec(wQ);let i=t&&parseFloat(t[1]);return!i&&/Trident\/7.0/i.test(wQ)&&/rv:11.0/.test(wQ)&&(i=11),i}return NaN})();var VU=Ys("(micromessenger|webbrowser)"),y7=Qc("MicroMessenger"),hV=!Bm&&Ys("MQQBrowser")&&Ys("COVC"),BV=!Bm&&Ys("MQQBrowser")&&!Ys("COVC"),wY=BV||hV?Qc("MQQBrowser"):"",o4=!Bm&&Ys(" QQBrowser"),D7=Qc(" QQBrowser"),s4=!Bm&&Ys("QQBrowserLite"),S7=Qc("QQBrowserLite"),n4=!Bm&&Ys("MQBHD"),M7=Qc("MQBHD"),v7=Ys("Windows"),QV=!Mu&&Ys("MAC OS X"),R7=!aC&&Ys("Linux"),w7=Ys("CrOS");Ys("MicroMessenger");var KlA=Ys("UCBrowser");Ys("Electron");var r4=Ys("MiuiBrowser"),_7=Qc("MiuiBrowser"),a4=Ys("HuaweiBrowser"),T7=Ys("Huawei")||Ys("HUAWEI"),jlA=Ys("Honor")||Ys("HONOR"),N7=Qc("HuaweiBrowser"),g4=Ys("SamsungBrowser"),G7=Qc("SamsungBrowser"),pV=Ys("HeyTapBrowser"),b7=Qc("HeyTapBrowser"),c4=Ys("VivoBrowser"),k7=Qc("VivoBrowser"),l4=Ys("OpenHarmony");Qc("OpenHarmony");var L7=()=>EV("Chrome"),_Y=Ys("CriOS"),tD=Ys("Chrome"),I4=!YU&&!i4&&!t4&&!Bm&&!CT&&!CV&&!o4&&!r4&&!a4&&!g4&&!pV&&!c4&&tD,WlA=Ys("HeadlessChrome"),iD=L7(),Zj=tD&&iD>=128&&iD<=143,U7=Qc("Chrome");EV("Electron");var ld=!tD&&!BV&&!hV&&!s4&&!n4&&Ys("Safari"),F7=ld||Mu,JU=Qc("Version"),MQ=(()=>{if(u7)return JU;if(Mu){const t=wQ.match(/OS (\d+)_(\d+)/i);if(t&&t[1]){let i=t[1];return t[2]&&(i+=`.${t[2]}`),i}}return""})();function zlA(t,i){const r=t.split(".").map(I=>Number(I)),l=i.split(".").map(I=>Number(I));for(let I=0;If)return!1}return!1}function O7(t,i,r=!1){const l=t.split(".").map(h=>Number(h)),I=i.split(".").map(h=>Number(h));for(let h=0;hw)return!0;if(f{const t=Number(MQ.split(".")[0]);return t===14||t===13})(),$lA=_Y&&JU==="11.1.1",TY=typeof location<"u"&&(location.protocol==="file:"||location.hostname==="localhost"||location.hostname==="127.0.0.1"),S_=(()=>{let t;return()=>{if(t===void 0)try{t=!!window.localStorage}catch{t=!1}return t}})(),yv=AIA();function AIA(){const t=new Map([[sC,["Firefox",d7]],[CV,["Edg",B7]],[I4,["Chrome",U7]],[_Y,["ChiOS",Qc("CriOS")]],[ld&&!_Y,["Safari",JU]],[Bm,["TBS",m7]],[CT,["XWEB",f7]],[VU&&dV,["WeChat",y7]],[o4,["QQ(Win)",D7]],[BV,["QQ(Mobile)",wY]],[hV,["QQ(Mobile X5)",wY]],[s4,["QQ(Mac)",S7]],[n4,["QQ(iPad)",M7]],[r4,["MI",_7]],[a4,["HW",N7]],[g4,["Samsung",G7]],[pV,["OPPO",b7]],[c4,["VIVO",k7]],[YU,["EDGE",h7]],[t4,["SogouMobile",Q7]],[i4,["Sogou",p7]]]);let i="unknown",r="unknown";return t.has(!0)&&([i,r]=t.get(!0)),{name:i,version:r}}function eIA(){return aC||Mu||dV||e4||l4}var tIA="";function P7(){return iIA()||""}function iIA(){const t=wQ.match(/;\s*([^;)]+)\s+Build\//);return t?.[1]?t[1].trim():null}var pZ=new Map([[aC,"Android"],[Mu,"iOS"],[v7,"Windows"],[QV,"MacOS"],[R7,"Linux"],[w7,"ChromeOS"]]),x7=function(){return pZ.get(!0)?pZ.get(!0):"unknown"};function u4(){return v7?1:aC?2:QV?3:Mu?4:R7?5:w7?6:l4?7:0}function oIA(){return VU||CT?4:tD?1:ld?2:sC?3:0}var Y7=()=>{let t=x7();return Mu?t+=`/${MQ}`:aC&&(t+=`/${E7}`),t+=`/${yv.name}/${ld&&!_Y?yv.version:yv.version.split(".")[0]}`,t},sIA=dT(PU()),nIA=new sIA.default,ps=nIA,V7=(t=>(t.ROOM_DESTROY="1",t.JOIN_START="21",t.JOIN_SCHEDULE_SUCCESS="22",t.JOIN_SIGNAL_CONNECTION_START="23",t.JOIN_SIGNAL_CONNECTION_END="24",t.JOIN_SEND_CMD="25",t.JOIN_RECEIVED_CMD_RES="26",t.JOIN_SUCCESS="27",t.JOIN_FAILED="28",t.LEAVE_START="51",t.LEAVE_SEND_CMD="52",t.LEAVE_SUCCESS="53",t.PUBLISH_START="61",t.SEND_FIRST_VIDEO_FRAME="62",t.PUBLISH_FAILED="63",t.SUBSCRIBE_START="81",t.SUBSCRIBE_SUCCESS="82",t.SUBSCRIBE_FAILED="84",t.UNSUBSCRIBE_SUCCESS="83",t.LOCAL_TRACK_CAPTURE_START="101",t.LOCAL_TRACK_CAPTURE_SUCCESS="102",t.LOCAL_TRACK_CAPTURE_FAILED="103",t.LOCAL_TRACK_PUBLISHED="104",t.LOCAL_TRACK_UNPUBLISHED="105",t.LOCAL_TRACK_REPLACED="106",t.SWITCH_DEVICE_SUCCESS="107",t.TRACK_MUTED="108",t.TRACK_UNMUTED="109",t.REMOTE_TRACK_SUBSCRIBED="110",t.REMOTE_TRACK_UNSUBSCRIBED="111",t.LOCAL_TRACK_RECAPTURE="112",t.LOCAL_AUDIO_STARTED="113",t.LOCAL_AUDIO_STOPPED="114",t.REMOTE_AUDIO_STARTED="115",t.REMOTE_AUDIO_STOPPED="116",t.LOCAL_TRACK_STOPPED="117",t.LOCAL_VIDEO_TRACK_PREPROCESSED="118",t.PLAY_TRACK_START="151",t.PLAYER_STATE_CHANGED="152",t.VIDEO_LOADED_DATA="153",t.AUTOPLAY_DIALOG_CLICK_CONFIRM="154",t.AUDIO_CONTEXT_LONG_SUSPENDED="155",t.REMOTE_VIDEO_PLAY_START="156",t.REMOTE_VIDEO_PLAY_FINISH="157",t.SIGNAL_CONNECTION_STATE_CHANGED="201",t.PEER_CONNECTION_STATE_CHANGED="202",t.SINGLE_CONNECTION_STAT="203",t.SPC_RECONNECTED="204",t.HEARTBEAT_REPORT="251",t.RECEIVED_PUBLISHED_USER_LIST="252",t.REMOTE_PUBLISH_STATE_CHANGED="253",t.AUDIO_LEVEL_INTERVAL="260",t.NETWORK_QUALITY="261",t.VIDEO_CODEC_IMPLEMENTATION_CHANGED="262",t.QUALITY_LIMITATION_CHANGED="263",t.LOG="264",t.AUDIO_PROCESSOR_DEBUG="265",t.SSO_SWITCH="266",t.SEI_MESSAGE="267",t.USER_PAUSE_IN_PIP="268",t.USER_RESUME_IN_PIP="269",t.ENTER_PICTURE_IN_PICTURE="270",t.LEAVE_PICTURE_IN_PICTURE="271",t.SWITCH_ROOM_START="401",t.SWITCH_ROOM_SUCCESS="407",t.SWITCH_ROOM_FAILED="408",t))(V7||{}),mn=V7,rIA=class{constructor(){de(this,"enable",!1),de(this,"ssoFailCount",0),ps.on("22",({schedule:t})=>{var i;(i=t?.config)!=null&&i.sso&&ps.emit("266",{enable:!0})}),ps.on("266",({enable:t})=>{this.enable=t})}handleUploadFailed(){this.ssoFailCount++,this.ssoFailCount>3&&ps.emit("266",{enable:!1})}},z3=new rIA,aIA="%cTRTC%c%s",gIA="padding: 1px 4px;border-radius: 3px;color: #fff;background: #1E88E5;",cIA="display: inline",J7=class H7{constructor(){de(this,"_isEnableUploadLog",!0),de(this,"_localJoinedUser",new Map),de(this,"_queue",[]),de(this,"_timeoutId",-1),de(this,"_logLevel",1),de(this,"_logLevelToUpload",2),VX||JX||(this.checkURLParam(),this.installEvents())}get isAbleToUpload(){return this._isEnableUploadLog&&this._timeoutId!==-1}installEvents(){ps.on(mn.JOIN_SCHEDULE_SUCCESS,({schedule:i})=>{var r;(r=i?.config)!=null&&r.logLevelToUpload&&G_[i.config.logLevelToUpload]&&(this._logLevelToUpload=i.config.logLevelToUpload)}),ps.on(mn.JOIN_START,({params:i})=>{this.addJoinedUser({userId:i.userId,sdkAppId:i.sdkAppId}),this.startUpload()}),ps.on(mn.LEAVE_SUCCESS,({room:i})=>{this.deleteJoinedUser(i.userId)})}startUpload(){this._timeoutId===-1&&this.uploadInterval()}addJoinedUser(i){this._localJoinedUser.set(i.userId,i),this.startUpload()}deleteJoinedUser(i){this._localJoinedUser.delete(i)}uploadInterval(){this.upload().catch(()=>{}),this._timeoutId=window.setTimeout(()=>this.uploadInterval(),5e3)}getLogsToUpload(){const i={map:new Map,splicedQueue:[]};if(this._queue[0].forAllJoinedClients&&this._localJoinedUser.size===0)return i;let r=0;for(;r{i.map.has(I)?i.map.get(I).logs.push(l):i.map.set(I,{userId:I,sdkAppId:h,logs:[l]})});else if(ih(l.userId)&&Gv(l.sdkAppId)){const{userId:I,sdkAppId:h}=l;i.map.has(I)?i.map.get(I).logs.push(l):i.map.set(I,{userId:I,sdkAppId:h,logs:[l]})}}return i.map.size>0&&(i.splicedQueue=this._queue.splice(0,r)),i}async upload(){if(this._queue.length===0||!this._isEnableUploadLog)return;const{map:i,splicedQueue:r}=this.getLogsToUpload();if(i.size===0)return;try{const I=[...i.values()];for(let h=0;hlA.log).join(` -`)},U=JSON.stringify(G),j=z3.enable?XW(G,2002,w):U;await this.uploadLogWithRetry(j,w,j instanceof Uint8Array,U),_.forEach(lA=>lA.uploaded=!0)}}catch{}const l=r.filter(I=>!I.uploaded);l.length>0&&(this._queue=l.concat(this._queue))}uploadLogWithRetry(i,r,l,I){return A4({retryFunction:()=>l7({url:WW(r,HX.LOG),body:i,timeout:5e3,priority:"low"}).then(h=>{l&&h.data!=="ok"&&(z3.handleUploadFailed(),this.uploadLogWithRetry(I,r,!1,I))}),settings:{retries:3,timeout:2e3},onError:({retry:h})=>{h()}})()}getPrefix(i){const r=new Date;return r.setTime(jW()),`[${TcA(r)}] <${G_[i]}>`}getLogLevel(){return this._logLevel}setLogLevel(i){$n(G_[i])||(this._logLevel!==i&&this.info("setLogLevel",i),this._logLevel=i)}enableUploadLog(){this._isEnableUploadLog=!0}disableUploadLog(){this.warn("disableUploadLog"),this._isEnableUploadLog=!1}logChunkToString(i){if(ih(i))return i;try{return i instanceof Error?i.toString():JSON.stringify(i)}catch{return""}}addLogToQueue(i,r,l=!0,I,h){const f={log:r.reduce((w,_)=>`${w} ${this.logChunkToString(_)}`.trim(),""),level:i,userId:I,sdkAppId:h,forAllJoinedClients:l};ps.emit(mn.LOG,{log:f}),this._isEnableUploadLog&&i>=this._logLevelToUpload&&this._queue.push(f)}log(i,r,l=!0,I,h){var f;if(r.unshift(this.getPrefix(i)),this.addLogToQueue(i,r,l,I,h),i{const i=16*Math.random()|0;return(t=="x"?i:3&i|8).toString(16)})},q7=IIA,uIA=class{constructor(){de(this,"_prefix","TRTC"),de(this,"_queue",new Map)}getRealKey(t){return`${this._prefix}_${t}`}checkStorage(){S_()&&(setInterval(this.doFlush.bind(this),2e4),Object.keys(localStorage).filter(t=>{if(t.startsWith(this._prefix))try{const i=localStorage.getItem(t);if(!i)return!1;const r=JSON.parse(i);if(r&&r.expiresInlocalStorage.removeItem(t)))}doFlush(){if(S_())try{for(const[t,i]of this._queue)localStorage.setItem(t,JSON.stringify(i))}catch(t){Wo.warn(t)}}getItem(t){if(!S_())return null;try{const i=localStorage.getItem(this.getRealKey(t));if(!i)return null;const r=JSON.parse(i);return r&&r.expiresIn>=Date.now()?r.value:null}catch(i){Wo.warn(i)}}setItem(t,i){if(S_())try{const r={expiresIn:Date.now()+UcA,value:i};this._queue.set(this.getRealKey(t),r)}catch(r){Wo.warn(r)}}deleteItem(t){if(!S_())return!1;try{return t=this.getRealKey(t),this._queue.delete(t),localStorage.removeItem(t),!0}catch(i){return Wo.warn(i),!1}}clear(){if(S_())try{localStorage.clear()}catch(t){Wo.warn(t)}}},K7=new uIA,EIA={};qW(EIA,{HTTPS_API:()=>vIA,IS_GET_CAPABILITIES_FROM_INPUTDEVICE_SUPPORTED:()=>a$,IS_GET_CAPABILITIES_SUPPORTED:()=>r$,IS_GET_SETTINGS_SUPPORTED:()=>bY,IS_GET_SYNCHRONIZATION_SOURCES_SUPPORTED:()=>LIA,IS_INSERTABLE_STREAM_SUPPORTED:()=>g$,IS_JITTER_BUFFER_TARGET_SUPPORTED:()=>YIA,IS_RTC_RTP_SENDER_SUPPORTED:()=>HU,IS_SCRIPT_TRANSFORM_SUPPORTED:()=>c$,IS_SEI_SUPPORTED:()=>UIA,IS_SPC_SUPPORTED:()=>NIA,basis:()=>OIA,capabilityCheck:()=>PIA,checkSystemRequirementsInternal:()=>Z7,decodeSupportStatus:()=>z7,detectH264SupportedByFakeStreaming:()=>X7,detectVideoCodecCapabilities:()=>VIA,detectVideoDecoderCapabilities:()=>C$,detectVideoEncoderCapabilities:()=>d$,encodeSupportStatus:()=>h4,getBrowserInfo:()=>pIA,getDisplayResolution:()=>$7,getH264ProfileLevelIds:()=>h$,isAddTransceiverSupported:()=>fV,isBrowserSupported:()=>E4,isCanvasCaptureStreamAPISupported:()=>t$,isCanvasSmallStreamSupported:()=>i$,isGetReceiversSupported:()=>_IA,isGetSendersSupported:()=>n$,isGetTransceiversSupported:()=>TIA,isGetUserMediaSupported:()=>A$,isMediaDevicesSupported:()=>C4,isMediaSessionSupported:()=>I$,isMediaStreamTrackGeneratorSupported:()=>fIA,isMediaStreamTrackProcessorSupported:()=>mIA,isReplaceTrackSupported:()=>bIA,isRequestVideoFrameCallbackSupported:()=>p4,isSIMDSupported:()=>FIA,isScaleResolutionDownBySupported:()=>o$,isScreenCaptureApiAvailable:()=>B4,isSelectedCandidatePair:()=>RIA,isSetParametersSupported:()=>kIA,isSetSinkIdSupported:()=>SIA,isSmallStreamSupported:()=>s$,isStopTransceiverSupported:()=>GIA,isTRTCSupported:()=>DIA,isUnifiedPlanDefault:()=>wIA,isUsedInHttpProtocol:()=>mV,isWebAudioSupported:()=>e$,isWebCodecSupported:()=>l$,isWebCodecsSupported:()=>d4,isWebRTCSupported:()=>Q4,isWebTransportSupported:()=>u$});var NY={PLAY_FAILED:"PLAY_FAILED",NOT_SUPPORTED_HTTP:"NOT_SUPPORTED_HTTP",MICROPHONE_NOT_FOUND:"MICROPHONE_NOT_FOUND",CAMERA_NOT_FOUND:"CAMERA_NOT_FOUND"},x_={AVOID_REPEATED_CALL:t=>`previous ${t.name}() is ongoing, please avoid repeated calls.`,INVALID_PARAMETER_REQUIRED:({key:t,rule:i,fnName:r,value:l})=>`'${t||i.name}' is a required param when calling ${r}(), received: ${l}.`,INVALID_PARAMETER_TYPE({key:t,rule:i,fnName:r,value:l}){const I=`${t||i.name}`;let h="";return h=Array.isArray(i.type)?i.type.join("|"):i.type,`'${I}' must be type of ${h} when calling ${r}(), received type: ${Nv(l)}.`},INVALID_PARAMETER_EMPTY:({key:t,rule:i,fnName:r,value:l})=>`'${t||i.name}' cannot be '${l}' when calling ${r}().`,INVALID_PARAMETER_INSTANCE:({key:t,rule:i,fnName:r,value:l})=>`'${`${t||i.name}`}' must be instanceof ${`${i.instanceOf.name||i.instanceOf}`} when calling ${r}(), received type: ${Nv(l)}.`,INVALID_PARAMETER_RANGE:({key:t,rule:i,fnName:r,value:l})=>`'${t||i.name}' must be one of ${i.values.join("|")} when calling ${r}(), received: ${l}.`,INVALID_PARAMETER_MIN:({key:t,rule:i,fnName:r,value:l})=>`the min value of ${t||i.name} is ${i.min}, received: ${l}.`,INVALID_PARAMETER_MAX:({key:t,rule:i,fnName:r,value:l})=>`the max value of ${t||i.name} is ${i.max}, received: ${l}.`,API_CALL_TIMEOUT:t=>`${t.commandDesc||t.command} timeout observed.`,SIGNAL_CHANNEL_RECONNECTION_FAILED:"signal channel reconnection failed, please check your network.",SIGNAL_CHANNEL_SETUP_FAILED:t=>`SignalChannel setup failure: (errorCode: ${t.errorCode}, errorMsg: ${t.errorMsg} }).`,ERROR_MESSAGE(t){let i=`${t.type} failed`;return t.message&&(i=`${i}: ${t.message}.`),i},EXCHANGE_SDP_TIMEOUT:"exchange sdp timeout.",DOWNLINK_RECONNECTION_FAILED:"downlink reconnection failed, please check your network and re-join room.",EXCHANGE_SDP_FAILED:t=>`exchange sdp failed ${t.errMsg}.`,UPDATE_OFFER_TIMEOUT:"update offer timeout observed.",UPLINK_RECONNECTION_FAILED:"uplink reconnection failed, please check your network and publish again.",INVALID_RECORDID:"recordId must be an integer number.",INVALID_PURE_AUDIO:"pureAudioPushMode must be 1 or 2.",INVALID_STREAMID:"streamId must be a sting literal within 64 bytes, and not be empty.",INVALID_USER_DEFINE_RECORDID:"userDefineRecordId must be a sting literal contains (a-zA-Z),(0-9), underline and hyphen, within 64 bytes, and not be empty.",INVALID_USER_DEFINE_PUSH_ARGS:"userDefinePushArgs must be a sting literal within 256 bytes, and not be empty.",INVALID_PROXY:'proxy server url must start with "wss://".',INVALID_JOIN:"duplicate join() called.",INVALID_ROOMID_STRING:t=>`'${t}' must be validate string when useStringRoomId is true.`,INVALID_ROOMID_INTEGER:t=>`'${t}' must be an integer between [1, 4294967294] when useStringRoomId is false.`,INVALID_SIGNAL_CHANNEL:"SignalChannel is not ready yet.",JOIN_ROOM_TIMEOUT:"join room timeout.",JOIN_ROOM_FAILED:({error:t,code:i})=>`Failed to join room - ${t} code: ${i}`,REJOIN_ROOM_FAILED:t=>`reJoin room: ${t.roomId} failed, please check your network.`,INVALID_DESTROY:"please call leave() before destroy().",INVALID_PUBLISH:"please call join() before publish().",INVALID_UNPUBLISH:"stream has not been published yet.",INVALID_AUDIENCE:'no permission to publish() under live/audience, please call switchRole("anchor") firstly before publish().',INVALID_INITIALIZE:"cannot publish stream because stream is not initialized, is switching device, or has been closed.",INVALID_DUPLICATE_PUBLISHING:t=>`duplicate ${t} stream publishing, please unpublish your prev ${t} stream and then re-publish.`,INVALID_SUBSCRIBE_UNDEFINED:"stream is undefined or null.",INVALID_SUBSCRIBE_LOCAL:"stream cannot be LocalStream.",INVALID_REMOTE_STREAM:"remoteStream does not exist because it has been unpublished by remote peer.",SUBSCRIBE_FAILED:({message:t,userId:i,streamType:r})=>`failed to subscribe ${i} ${r} stream, reason: ${t}.`,INVALID_ROLE:"switchRole can only be called in live mode.",INVALID_PARAMETER_SWITCH_ROLE:"role could only be set to a value as anchor or audience.",INVALID_OPERATION_SWITCH_ROLE:"please call join() before switchRole().",SWITCH_ROLE_TIMEOUT:"switchRole timeout.",SWITCH_ROLE_FAILED:t=>`switchRole failed, errCode: ${t.code} errMsg: ${t.message}.`,CLIENT_BANNED:t=>`client was banned because of ${t.message}.`,INVALID_OPERATION_START_PUBLISH_CDN:"please call startPublishCDNStream() after join room and publish the local stream.",INVALID_OPERATION_STOP_PUBLISH_CDN:"please call startPublishCDNStream() before stopPublishCDNStream().",START_PUBLISH_CDN_FAILED:t=>`startPublishCDNStream failed, errMsg: ${t.message}.`,STOP_PUBLISH_CDN_FAILED:t=>`stopPublishCDNStream failed, errMsg: ${t.message}.`,INVALID_STREAM_ID:t=>`'${t}' can only consist of uppercase and lowercase english letters (a-zA-Z), numbers (0-9), hyphens and underscores.`,START_MIX_TRANSCODE:"please call startMixTranscode() after join().",STOP_MIX_TRANSCODE:"please call stopMixTranscode() after startMixTranscode().",INVALID_AUDIO_VOLUME:"interval must be a number.",ENABLE_SMALL_STREAM_PUBLISHED:"Cannot enable small stream after localStream published.",DISABLE_SMALL_STREAM_PUBLISHED:"Cannot disable small stream after localStream published.",NOT_SUPPORTED_SMALL_STREAM:"your browser does not support opening small stream.",INVALID_SMALL_STREAM_PROFILE:"small stream profile is invalid.",INVALID_PARAMETER_REMOTE_STREAM:"remoteStream is invalid.",INVALID_OPERATION_CHANGE_SMALL:"cannot switch to the small stream without subscribing to the video of remoteStream.",REMOTE_NOT_PUBLISH_SMALL_STREAM:"remote peer does not publish small stream.",INVALID_SWITCH_DEVICE:"cannot switch device on current stream.",INVALID_SWITCH_DEVICE_PUBLISHING:"cannot switch device when publishing localStream.",INVALID_REPLACE_TRACK:"cannot replace track when publishing localStream.",INVALID_INITIALIZE_LOCAL_STREAM:"local stream has not initialized yet.",INVALID_ADD_TRACK_REPETITIVE:"previous addTrack is ongoing, please avoid repetitive execution.",INVALID_ADD_TRACK_REMOVING:"cannot add track when a track is removing.",INVALID_ADD_TRACK_PUBLISHING:"cannot add track when publishing localStream.",INVALID_STREAM_INITIALIZED:"your local stream haven't been initialized yet.",INVALID_ADD_TRACK_NUMBER:"a Stream has at most one audio track and one video track.",INVALID_REMOVE_AUDIO_TRACK:"remove audio track is not supported on your browser.",INVALID_REMOVE_AUDIO_ADDING:"cannot remove track when a track is adding.",INVALID_REMOVE_AUDIO_ON:"previous removeTrack is ongoing, please avoid repetitive execution.",INVALID_REMOVE_TRACK_PUBLISHING:"cannot remove track when publishing localStream.",INVALID_REMOVE_TRACK_NOT_TRACK:"localStream has not this track.",INVALID_REMOVE_TRACK_NUMBER:"remove the only video track is not supported, please use replaceTrack or muteVideo.",INVALID_REPLACE_TRACK_NO_TRACK:t=>`cannot replace ${t.kind} track because stream has not ${t.kind} track`,NOT_BUG_PACKAGE:"You need to buy packages, refer to tencent console.",START_MIX_TRANSCODE_FAILED:t=>`startMixTranscode failed, errMsg: ${t.message}.`,STOP_MIX_TRANSCODE_FAILED:t=>`stopMixTranscode failed, errMsg: ${t.message}.`,MIX_TRANSCODE_NOT_STARTED:"mixTranscode has not been started.",CANNOT_LESS_THAN_ZERO:({key:t,rule:i,fnName:r,value:l})=>`'${t||i.name}' cannot be less than 0 when calling ${r}().`,MIX_PARAMS_VIDEO_FRAMERATE:"'config.videoFramerate' should be an integer between 0 and 30, excluding 0.",MIX_PARAMS_VIDEO_GOP:"'config.videoGOP' should be an integer between 1 and 8.",MIX_PARAMS_AUDIO_BITRATE:"'config.audioBitrate' should be an integer between 32 and 192.",MIX_PARAMS_USER_Z_ORDER:t=>`'${t}' is required and must be between 1 and 15.`,MIX_PARAMS_NOT_SELF:"'config.mixUsers' must contain self.",MIX_PARAMS_USER_STREAM:"'config.videoWidth' and 'config.videoHeight' of output stream should be contain all mix stream.",INVALID_PLAY:"duplicate play() call observed, please stop() firstly.",INVALID_ELEMENT_ID:({key:t,fnName:i})=>`'${t}' is not found in the document object when calling ${i}().`,INVALID_ELEMENT_ID_TYPE:({key:t,fnName:i,type:r})=>`the element corresponding to '${t}' must be instanceof HTMLElement when calling ${i}(), received: ${r}.`,PLAY_FAILED:t=>`${t.media} play failed, browser exception: ${t.error.toString()}`,INVALID_USERID:"userId cannot be all spaces.",INVALID_CREATE_STREAM_SOURCE:"LocalStream must be created by createStream() with either audio/video or audioSource/videoSource, but can not be mixed with audio/video and audioSource/videoSource.",INVALID_CREATE_STREAM_SCREEN:"screen/video cannot be both true.",INVALID_CREATE_STREAM_AUDIO:"audio/screenAudio cannot be both true.",INVALID_CREATE_STREAM_SCREEN_AUDIO:"when screen is true, screenAudio can be configured.",NOT_SUPPORTED_HTTP:"http protocol does not support the ability to capture microphone, camera and screen. please use https to deploy your page.",NOT_SUPPORTED_WEBRTC:"your browser or environment does not support full WebRTC capabilities.",NOT_SUPPORTED_PROFILE:"your browser does not support setVideoProfile.",NOT_SUPPORTED_MEDIA:"your browser or environment does not support navigator.mediaDevices.",NOT_SUPPORTED_H264ENCODE:"your device does not support H.264 encoding.",NOT_SUPPORTED_H264DECODE:"your device does not support H.264 decoding.",NOT_SUPPORTED_TRACK:t=>`${t}Track is not supported on your browser.`,NOT_SUPPORTED_SWITCH_DEVICE:"switchDevice is not supported on your browser.",NOT_SUPPORTED_CAPTURE:"Your browser or environment does not support screen sharing, please check whether the browser version.",MICROPHONE_NOT_FOUND:"no microphone detected, please check your microphone.",CAMERA_NOT_FOUND:"no camera detected, please check your camera.",SIGNAL_RESPONSE_FAILED:t=>`${t.signalResponse} failed, response code is ${t.code} , errMsg: ${t.message}.`,CATCH_HANDLER_ERROR:({name:t,event:i})=>`an error was caught in ${t}.on('${i}', handler), please check your code in 'handler'.`,API_NOT_EXIST:({name:t})=>`experimental api ${t} does not exist.`,REPEAT_JOIN:t=>"please avoid repeated join.",CONNECTION_CLOSED:"remoteStream has been unsubscribed or unpublished by remote user.",SUBSCRIBE_ALL_FALSE:"cannot subscribe when both audio & video are false, use client.unsubscribe() instead",CLIENT_DESTROYED:({funName:t})=>`failed to call ${t}() because client was destroyed.`,SEI_NOT_SUPPORT:t=>"not support to sendSEIMessage"+(t===!1?" without using h264 codec":""),SEI_DISABLED:"SEI is disabled",SEI_BEFORE_PUBLISH:"please call sendSEIMessage() after publish() success",SEI_NOT_VIDEO:"cannot send sei when localStream has not video.",CALL_FREQUENCY_LIMIT:({isSize:t,name:i,timesInSecond:r,maxSizeInSecond:l})=>`api ${i} call ${t?"size":"times"} is over ${t?`${l} bytes`:r} in a second.`,CONNECTION_ABORTED:t=>`connection aborted due to: ${t}`,API_CALL_ABORTED(t){let i;return i=t.message.includes("REMOTE_STREAM_NOT_EXIST")?`Subscribe ${t.userId} ${t.streamType} stream aborted, reason: remote user ${t.userId} unpublished stream.`:`API aborted, reason: ${t.message}`,i},DUPLICATE_AUX:"only one auxiliary stream can be published in a room.",NOT_SUPPORTED_AUX:"publish auxiliary stream is not supported on your browser.",INVALID_PARAMETER_STREAMTYPE:t=>`'streamType' is required when 'userId' is not '*', calling ${t}()`,SWITCH_PLAYBACK_QUALITY_TIMEOUT:t=>`switchPlaybackQuality timeout: waiting for first frame of user ${t.userId}.`},mZ=(t,i)=>i?`${x3}/${t}/${i}`:`${x3}/${t}/index.html`,dIA=()=>{if(window.TRTC_ERROR_INFO&&window.TRTC_ERROR_LINK)return{TRTC_ERROR_INFO:window.TRTC_ERROR_INFO,TRTC_ERROR_LINK:window.TRTC_ERROR_LINK};let t=localStorage==null?void 0:localStorage.getItem(LcA);if(t){t=JSON.parse(t);const i=document.createElement("script");i.type="text/javascript",i.text=t.message,document.body.appendChild(i);const r=window.TRTC_ERROR_INFO,l=window.TRTC_ERROR_LINK;return document.body.removeChild(i),{TRTC_ERROR_INFO:r,TRTC_ERROR_LINK:l}}return{}};function GY(t){const{key:i,data:r,link:l,addDocLink:I=!0}=t;let h="",f="",w="";mv(x_[i])?h=x_[i](r):ih(x_[i])&&(h=x_[i]);const{TRTC_ERROR_INFO:_,TRTC_ERROR_LINK:G}=dIA();l?w=`${l.className}.html#${l.fnName}`:G&&G[i]&&(mv(G[i])?w=G[i](r):ih(G[i])&&(w=G[i]));let U=h;return zy()&&(_&&_[i]&&(mv(_[i])?f=_[i](r):ih(_[i])&&(f=_[i])),f&&(U=I?`${f} -请查看文档: ${mZ("zh-cn",w)} +`}}}),$cA=WU({"../node_modules/.pnpm/sdp-transform@2.15.0/node_modules/sdp-transform/lib/index.js"(t){var i=ZcA(),n=XcA(),c=E4();t.grammar=c,t.write=n,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}}),AlA={x:{required:!0,type:"number"},y:{required:!0,type:"number"},width:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},height:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},zIndex:{required:!0,type:"number"},fillMode:{required:!1,type:"string"},mirror:{required:!1,type:"boolean"},rotation:{required:!1,type:"number"},hidden:{required:!1,type:"boolean"}},i7=(t,i=!1)=>({type:"object",required:i,properties:{canvasColor:{required:!1,type:["string",CanvasGradient,CanvasPattern]},width:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},height:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},frameRate:{required:!1,type:"number",notLessThanZero:!0,min:1,max:60}},validate(n,c,I){const{RtcError:C,ErrorCode:f,ErrorCodeDictionary:w}=t.errorModule;if(!n)return;const{width:_,height:N}=n;if(_&&N&&_*N>8294400)throw new C({code:f.INVALID_PARAMETER,message:"The mix resolution cannot be set higher than 3840 * 2160."})}}),o7=t=>({required:!1,type:["string",HTMLElement,null],validate(i,n,c){const{RtcError:I,ErrorCode:C,ErrorCodeDictionary:f}=t.errorModule;if(t.utils.isString(i)&&!document.getElementById(i))throw new I({code:C.INVALID_PARAMETER,extraCode:f.INVALID_ELEMENT_ID,fnName:c,messageParams:{key:n}})}}),ZU=(t,i=!0)=>({type:"object",required:i,properties:Rn({},AlA),validate(n,c,I){const{RtcError:C,ErrorCode:f,ErrorCodeDictionary:w}=t.errorModule;if(n){if(n.fillMode&&!["contain","cover","fill"].includes(n.fillMode))throw new C({code:f.INVALID_PARAMETER,extraCode:w.INVALID_PARAMETER_TYPE,message:"The fillMode parameter must be 'contain', 'cover' or 'fill'",fnName:I});if(n.rotation&&![0,90,180,270].includes(n.rotation))throw new C({code:f.INVALID_PARAMETER,extraCode:w.INVALID_PARAMETER_TYPE,message:"The rotation parameter must be 0, 90, 180 or 270",fnName:I})}}}),s7=t=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},cameraId:{required:!1,type:"string"},videoTrack:{required:!1,instanceof:MediaStreamTrack},profile:{required:!1,type:["string","object"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},layout:Rn({},ZU(t))}}}),n7=t=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},profile:{required:!1,type:["string","object"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},captureElement:{required:!1,type:HTMLElement},preferDisplaySurface:{required:!1,type:"string"},layout:Rn({},ZU(t))},validate(i,n,c){const{RtcError:I,ErrorCode:C,ErrorCodeDictionary:f}=t.errorModule;if(!t.rtcDectection.isScreenCaptureApiAvailable())throw new I({code:C.ENV_NOT_SUPPORTED,fnName:c,extraCode:f.NOT_SUPPORTED_SCREEN_SHARE})}}}),r7=t=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},content:{required:!0,type:"string"},font:{required:!1,type:"string"},color:{required:!1,type:["string",CanvasGradient,CanvasPattern]},layout:Rn({},ZU(t))}}}),a7=t=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},url:{required:!0,type:"string"},layout:Rn({},ZU(t))}}}),g7=t=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},url:{required:!0,type:"string"},layout:Rn({},ZU(t))}}});function elA(t){return{name:"VideoMixerOptions",type:"object",required:!0,allowEmpty:!1,properties:{view:Rn({},o7(t)),canvasInfo:Rn({},i7(t,!0)),camera:Rn({},s7(t)),screen:Rn({},n7(t)),text:Rn({},r7(t)),image:Rn({},a7(t)),video:Rn({},g7(t))},validate(i,n,c,I){const{RtcError:C,ErrorCode:f,ErrorCodeDictionary:w}=t.errorModule;if(t.environment.isMobile())throw new C({code:f.ENV_NOT_SUPPORTED,message:"VideoMixer is not supported on mobile devices currently"});const{onScreenShareStop:_}=i;if(_&&!t.utils.isFunction(_))throw new C({code:f.INVALID_PARAMETER,extraCode:w.INVALID_PARAMETER_TYPE,fnName:c,messageParams:{key:"onScreenShareStop",value:typeof _,rule:{type:"Function"}}})}}}function tlA(t){return{name:"VideoMixerOptions",type:"object",required:!1,allowEmpty:!1,properties:{view:Rn({},o7(t)),canvasInfo:Rn({},i7(t)),camera:Rn({},s7(t)),screen:Rn({},n7(t)),text:Rn({},r7(t)),image:Rn({},a7(t)),video:Rn({},g7(t))}}}function ilA(t){return{name:"StopVideoMixerOptions",required:!1}}var c7=(t=>(t[t.INVALID_PARAMETER=4096]="INVALID_PARAMETER",t[t.INVALID_OPERATION=4097]="INVALID_OPERATION",t[t.NOT_SUPPORTED=4098]="NOT_SUPPORTED",t[t.DEVICE_NOT_FOUND=4099]="DEVICE_NOT_FOUND",t[t.INITIALIZE_FAILED=4100]="INITIALIZE_FAILED",t[t.SIGNAL_CHANNEL_SETUP_FAILED=16385]="SIGNAL_CHANNEL_SETUP_FAILED",t[t.SIGNAL_CHANNEL_ERROR=16386]="SIGNAL_CHANNEL_ERROR",t[t.ICE_TRANSPORT_ERROR=16387]="ICE_TRANSPORT_ERROR",t[t.JOIN_ROOM_FAILED=16388]="JOIN_ROOM_FAILED",t[t.CREATE_OFFER_FAILED=16389]="CREATE_OFFER_FAILED",t[t.SIGNAL_CHANNEL_RECONNECTION_FAILED=16390]="SIGNAL_CHANNEL_RECONNECTION_FAILED",t[t.UPLINK_RECONNECTION_FAILED=16391]="UPLINK_RECONNECTION_FAILED",t[t.DOWNLINK_RECONNECTION_FAILED=16392]="DOWNLINK_RECONNECTION_FAILED",t[t.REMOTE_STREAM_NOT_EXIST=16400]="REMOTE_STREAM_NOT_EXIST",t[t.CLIENT_BANNED=16448]="CLIENT_BANNED",t[t.SERVER_TIMEOUT=16449]="SERVER_TIMEOUT",t[t.SUBSCRIPTION_TIMEOUT=16450]="SUBSCRIPTION_TIMEOUT",t[t.PLAY_NOT_ALLOWED=16451]="PLAY_NOT_ALLOWED",t[t.DEVICE_AUTO_RECOVER_FAILED=16452]="DEVICE_AUTO_RECOVER_FAILED",t[t.START_PUBLISH_CDN_FAILED=16453]="START_PUBLISH_CDN_FAILED",t[t.STOP_PUBLISH_CDN_FAILED=16454]="STOP_PUBLISH_CDN_FAILED",t[t.START_MIX_TRANSCODE_FAILED=16455]="START_MIX_TRANSCODE_FAILED",t[t.STOP_MIX_TRANSCODE_FAILED=16456]="STOP_MIX_TRANSCODE_FAILED",t[t.NOT_SUPPORTED_H264=16457]="NOT_SUPPORTED_H264",t[t.SWITCH_ROLE_FAILED=16458]="SWITCH_ROLE_FAILED",t[t.API_CALL_TIMEOUT=16459]="API_CALL_TIMEOUT",t[t.SCHEDULE_FAILED=16460]="SCHEDULE_FAILED",t[t.API_CALL_ABORTED=16461]="API_CALL_ABORTED",t[t.SPC_INITIALIZED_FAILED=16462]="SPC_INITIALIZED_FAILED",t[t.VIDEO_MANAGER_ERROR=16463]="VIDEO_MANAGER_ERROR",t[t.SWITCH_ROOM_FAILED=16464]="SWITCH_ROOM_FAILED",t[t.VIDEO_ENCODE_FAILED=16465]="VIDEO_ENCODE_FAILED",t[t.AUDIO_ENCODE_FAILED=16466]="AUDIO_ENCODE_FAILED",t[t.UNKNOWN=65535]="UNKNOWN",t))(c7||{}),qg=c7,olA=function(t){for(const i in qg)if(qg[i]===t)return i;return"UNKNOWN"},slA=class extends Error{constructor({name:t="RtcError",message:i,code:n=qg.UNKNOWN,extraCode:c=0,constraint:I}){const C=`<${olA(n)} 0x${n.toString(16)}>`,f=`${i}${I?` constraint: ${I}`:""}${i?.includes(C)?"":` ${C}`}`;super(f),Be(this,"code"),Be(this,"extraCode"),Be(this,"message"),Be(this,"originMessage"),Be(this,"name"),Be(this,"constraint"),this.code=n,this.extraCode=c,this.name=t,this.message=f,this.constraint=I,this.originMessage=i}getCode(){return this.code}getExtraCode(){return this.extraCode}toString(){return this.originMessage}},fl=slA,nlA=0,d4=function(){return Date.now()+nlA},l7=function(){const t=new Date;return t.setTime(d4()),t.toLocaleString()},rlA=function(t){let i=String(t.getMilliseconds());return"padStart"in String.prototype&&(i=i.toString().padStart(3,"0")),`${t.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/,"$1")}:${i}`},alA={};u4(alA,{REPORT_TYPE:()=>N7,buildSSOPackage:()=>Q4,bytes2ms:()=>LlA,calculateScaleResolutionDownNumber:()=>_7,concatArrayBuffers:()=>rIA,convertObjectNumberToInt:()=>R7,copyProperties:()=>klA,deepClone:()=>OY,deepCloneBasic:()=>lW,deepMerge:()=>S7,delay:()=>IT,fibonacci:()=>B4,formatedTime:()=>AIA,getConstructorName:()=>YlA,getContainerFromElement:()=>XlA,getEnv:()=>RlA,getFirst16Bits:()=>gIA,getInternalVersion:()=>qlA,getLast16Bits:()=>aIA,getLoggerUrl:()=>C4,getMediaStreamTrackInfo:()=>oIA,getMuteStateFromFlag:()=>D7,getNetworkType:()=>h4,getNumNetworkType:()=>blA,getReconnectionTimeout:()=>OlA,getStringByteLength:()=>eIA,getTestSignalDomain:()=>_lA,getTurnServer:()=>WlA,getUint32Version:()=>v7,getValueType:()=>kv,getViewListFromView:()=>ZlA,glog:()=>FlA,ipv4ToUint32:()=>zlA,isArray:()=>oh,isAudioWorkletSupported:()=>VlA,isBoolean:()=>Sv,isConstructor:()=>y7,isEmpty:()=>jlA,isFunction:()=>Dv,isLangChinese:()=>Zy,isMediaStreamTrack:()=>PlA,isNumber:()=>Lv,isObject:()=>Qv,isOverseaSdkAppId:()=>FY,isPlainObject:()=>lT,isPortrait:()=>M7,isPromise:()=>f7,isRemoteTrack:()=>xlA,isRotate90Or270:()=>T7,isSetSinkIdSupported:()=>JlA,isString:()=>rh,isUndefined:()=>er,isVideoMixerOutputTrack:()=>p4,loadImage:()=>tIA,loadVideo:()=>sIA,ms2bytes:()=>UlA,ms2samples:()=>m7,normalizeUrl:()=>iIA,performanceNow:()=>Yc,promiseAny:()=>HlA,samples2ms:()=>p7,setNetworkTypeFromWebRTC:()=>GlA,stringify:()=>Xy,stringifyIncludeValue:()=>cW,throttlePromise:()=>w7});var UY="5.0.0",I7=typeof importScripts<"u",u7=typeof registerProcessor<"u",glA="web.sdk.qcloud.com",iW=`https://${glA}/trtc/webrtc/doc`,RZ="https://cloud.tencent.com/document/product/647/85386",wZ="https://trtc.io/document/56025",clA="https://yun.tim.qq.com",llA="https://apisgp.my-imcloud.com",IlA="trtc_error_assistance",E7={LOG:"jssdk_log"},s3={QCLOUD:"qcloud"},L_=(t=>(t[t.TRACE=0]="TRACE",t[t.DEBUG=1]="DEBUG",t[t.INFO=2]="INFO",t[t.WARN=3]="WARN",t[t.ERROR=4]="ERROR",t[t.NONE=5]="NONE",t))(L_||{}),d7={unknown:0,wifi:1,"4g":2,"3g":3,"2g":4,wired:5,"5g":6},ulA=6048e5,ElA={"480p_2":{width:640,height:480,frameRate:15,bitrate:500}},dlA=ElA["480p_2"],ei={CANVAS:"canvas",AUDIO:"audio",VIDEO:"video",SCREEN:"screen",SMALL:"small",BIG:"big",AUXILIARY:"auxiliary",SMALL_VIDEO:"smallVideo",FACING_MODE_USER:"user",FACING_MODE_ENVIRONMENT:"environment",MUTE:"mute",UNMUTE:"unmute",ENDED:"ended",PLAYING:"playing",PAUSE:"pause",ERROR:"error",LOADSTART:"loadstart",LOADEDDATA:"loadeddata",LOADEDMETADATA:"loadedmetadata",AUDIO_INPUT:"audioinput",VIDEO_INPUT:"videoinput",DETAIL:"detail",TEXT:"text",MAIN:"main",BACKUP:"backup",BANNED:"banned",KICK:"kick",USER_TIME_OUT:"user_time_out",ROOM_DISBAND:"room_disband",SEI_MESSAGE:"sei-message",ADD:"add",REMOVE:"remove",REPLACE:"replace",TRACK:"track",SUBSCRIBE:"subscribe",UNSUBSCRIBE:"unsubscribe",TRANSCEIVER_DIRECTION_SENDONLY:"sendonly",TRANSCEIVER_DIRECTION_RECVONLY:"recvonly",ENTER_PICTURE_IN_PICTURE:"enterpictureinpicture",LEAVE_PICTURE_IN_PICTURE:"leavepictureinpicture",FULLSCREEN_CHANGE:"fullscreenchange",RESIZE:"resize",TIME_UPDATE:"timeupdate"},_Z=1,ClA=2,hlA=4,TZ=8,NZ=64,GZ=16,BlA=256,lU={PLAYER_ERROR:"player-error",LOAD_WORKLET:"load-worklet",GET_USER_MEDIA_RETRY:"getUserMedia-retry"},QlA="unified-plan",U_=5,C7="default",W1=2e3,h7=["width","height","frameRate","facingMode","sampleRate","sampleSize","channelCount","deviceId","min","max"],plA={alpha:!0,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0,powerPreference:"low-power"},mlA=function(t,i,n,c){return new(n||(n=Promise))(function(I,C){function f(N){try{_(c.next(N))}catch(L){C(L)}}function w(N){try{_(c.throw(N))}catch(L){C(L)}}function _(N){var L;N.done?I(N.value):(L=N.value,L instanceof n?L:new n(function(q){q(L)})).then(f,w)}_((c=c.apply(t,[])).next())})},oW=Symbol(32),sW=Symbol(16),nW=Symbol(8),AT=class{constructor(t){this.g=t,this.consumed=0,t&&(this.need=t.next().value)}setG(t){this.g=t,this.demand(t.next().value,!0)}consume(){this.buffer&&this.consumed&&(this.buffer.copyWithin(0,this.consumed),this.buffer=this.buffer.subarray(0,this.buffer.length-this.consumed),this.consumed=0)}demand(t,i){return i&&this.consume(),this.need=t,this.flush()}read(t){return mlA(this,void 0,void 0,function*(){return this.lastReadPromise&&(yield this.lastReadPromise),this.lastReadPromise=new Promise((i,n)=>{var c;this.reject=n,this.resolve=I=>{delete this.lastReadPromise,delete this.resolve,delete this.need,i(I)},this.demand(t,!0)||(c=this.pull)===null||c===void 0||c.call(this,t)})})}readU32(){return this.read(oW)}readU16(){return this.read(sW)}readU8(){return this.read(nW)}close(){var t;this.g&&this.g.return(),this.buffer&&this.buffer.subarray(0,0),(t=this.reject)===null||t===void 0||t.call(this,new Error("EOF")),delete this.lastReadPromise}flush(){if(!this.buffer||!this.need)return;let t=null;const i=this.buffer.subarray(this.consumed);let n=0;const c=I=>i.length<(n=I);if(typeof this.need=="number"){if(c(this.need))return;t=i.subarray(0,n)}else if(this.need===oW){if(c(4))return;t=i[0]<<24|i[1]<<16|i[2]<<8|i[3]}else if(this.need===sW){if(c(2))return;t=i[0]<<8|i[1]}else if(this.need===nW){if(c(1))return;t=i[0]}else if("buffer"in this.need){if("byteOffset"in this.need){if(c(this.need.byteLength-this.need.byteOffset))return;new Uint8Array(this.need.buffer,this.need.byteOffset).set(i.subarray(0,n)),t=this.need}else if(this.g)return void this.g.throw(new Error("Unsupported type"))}else{if(c(this.need.byteLength))return;new Uint8Array(this.need).set(i.subarray(0,n)),t=this.need}return this.consumed+=n,this.g?this.demand(this.g.next(t).value,!0):this.resolve&&this.resolve(t),t}write(t){if(t instanceof Uint8Array?this.malloc(t.length).set(t):"buffer"in t?this.malloc(t.byteLength).set(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)):this.malloc(t.byteLength).set(new Uint8Array(t)),!this.g&&!this.resolve)return new Promise(i=>this.pull=i);this.flush()}writeU32(t){this.malloc(4).set([t>>24&255,t>>16&255,t>>8&255,255&t]),this.flush()}writeU16(t){this.malloc(2).set([t>>8&255,255&t]),this.flush()}writeU8(t){this.malloc(1)[0]=t,this.flush()}malloc(t){if(this.buffer){const i=this.buffer.length,n=i+t;if(n<=this.buffer.buffer.byteLength-this.buffer.byteOffset)this.buffer=new Uint8Array(this.buffer.buffer,this.buffer.byteOffset,n);else{const c=new Uint8Array(n);c.set(this.buffer),this.buffer=c}return this.buffer.subarray(i,n)}return this.buffer=new Uint8Array(t),this.buffer}};AT.U32=oW,AT.U16=sW,AT.U8=nW;var flA=128;function n3(t){const i=new AT;for(;t>=128;)i.malloc(1)[0]=255&t|flA,t>>>=7;return i.malloc(1)[0]=255&t,i.buffer||new Uint8Array(0)}function rW(t,i=0){const n=new AT,c=i<<3;switch(typeof t){case"boolean":const I=n.malloc(2);I[0]=c,I[1]=t?1:0;break;case"number":n.malloc(1)[0]=c,n.write(n3(t));break;case"string":n.malloc(1)[0]=2|c;const C=new TextEncoder().encode(t);n.write(n3(C.length));const f=n.malloc(C.length);for(let _=0;_>>24&255),this.buffer.push(t>>>16&255),this.buffer.push(t>>>8&255),this.buffer.push(255&t)}writeInt16(t){this.buffer.push(t>>>8&255),this.buffer.push(255&t)}writeByte(t){this.buffer.push(255&t)}writeBytes(t){for(let i=0;i>>24&255,t[n+1]=i>>>16&255,t[n+2]=i>>>8&255,t[n+3]=255&i}function ad(t,i){return t[i]<<24|t[i+1]<<16|t[i+2]<<8|t[i+3]}function LZ(t,i){return t[i]}function wL(t,i,n){return new TextDecoder().decode(ylA(t,i,n))}function ylA(t,i,n){return t.slice(i,i+n)}var r3=0,aW=2654435769,gW=16,UZ=4,IU=2,uU=7;function DlA(t,i,n,c="AVQualityReportSvc.C2S",I=2e3,C=2,f=30){return{version:I,encryption:C,d2:"",d2Len:0,uinType:f,uin:"",uinLen:0,reqHead:{seqNumber:n,appId:t,appidAtThird:new Uint8Array(0),a2:"",a2Len:0,serviceCmd:c,serviceCmdLen:0,cookie:"",cookieLen:0,imei:"",imeiLen:0,ksid:"",ksidLen:0,clientVersionInfo:"",clientVersionInfoLen:0},busiBuff:i}}function SlA(t,i){const n=new bZ,c=DlA(i,t,r3);r3=r3+1&2147483647,n.writeInt32(0),n.writeInt32(c.version),n.writeByte(c.encryption);const I=new TextEncoder().encode(c.d2);n.writeInt32(I.length+4),I&&n.writeBytes(I),n.writeByte(c.uinType);const C=new TextEncoder().encode(c.uin);n.writeInt32(C.length+4),C.length&&n.writeBytes(C);const f=new bZ;f.writeInt32(0),f.writeInt32(c.reqHead.seqNumber),f.writeInt32(c.reqHead.appId),f.writeByte(c.reqHead.appId>>>24&255),f.writeByte(c.reqHead.appId>>>16&255),f.writeByte(c.reqHead.appId>>>8&255),f.writeByte(255&c.reqHead.appId);for(let HA=4;HA<16;HA++)f.writeByte(0);const w=new TextEncoder().encode(c.reqHead.a2);f.writeInt32(w.length+4),w.length&&f.writeBytes(w);const _=new TextEncoder().encode(c.reqHead.serviceCmd);f.writeInt32(_.length+4),_.length&&f.writeBytes(_);const N=new TextEncoder().encode(c.reqHead.cookie);f.writeInt32(N.length+4),N.length&&f.writeBytes(N);const L=new TextEncoder().encode(c.reqHead.imei);f.writeInt32(L.length+4),L.length&&f.writeBytes(L);const q=new TextEncoder().encode(c.reqHead.ksid);f.writeInt32(q.length+4),q.length&&f.writeBytes(q);const lA=new TextEncoder().encode(c.reqHead.clientVersionInfo);f.writeInt16(lA.length+2),lA.length&&f.writeBytes(lA);const tA=f.length;f.data[0]=tA>>>24&255,f.data[1]=tA>>>16&255,f.data[2]=tA>>>8&255,f.data[3]=255&tA,rh(t)&&(t=new TextEncoder().encode(t)),f.writeInt32(t.length+4),t.length&&f.writeBytes(t);let BA=new Uint8Array(f.data),IA=null;c.encryption===1?IA=new TextEncoder().encode(c.uin):c.encryption===2&&(IA=new Uint8Array(16)),IA&&(BA=MlA(BA,IA)),n.writeBytes(BA);const gA=new Uint8Array(n.data),RA=gA.length;return gA[0]=RA>>>24&255,gA[1]=RA>>>16&255,gA[2]=RA>>>8&255,gA[3]=255&RA,gA}function MlA(t,i){const n=t.length;let c=(n+1+IU+uU)%8;c&&(c=8-c);const I=new Uint8Array(n+1+IU+uU+c);let C=0;const f=new Uint8Array(8),w=new Uint8Array(8),_=new Uint8Array(8);let N=0;f[0]=248&Math.floor(256*Math.random())|c,N=1;for(let q=0;q>>=0,I+=(C<<4)+f[0]^C+w^(C>>>5)+f[1],I>>>=0,C+=(I<<4)+f[2]^I+w^(I>>>5)+f[3],C>>>=0;kZ(n,I,c),kZ(n,C,c+4)}var RlA=function(){return new URLSearchParams(location.search).get("trtc_env")||""},wlA=".rtc.qq.com",_lA=function(t){return t.includes(".")?t:`${t}${wlA}`},FY=t=>Number(t)<14e8,C4=function(t,i){let n;return n=FY(t)?llA:clA,`${n}/v5/AVQualityReportSvc/C2S?random=${Math.floor(Math.random()*2**31)}&sdkappid=${t}&cmdtype=${i}`},B7="unknown";function h4(){NlA();const{userAgent:t,connection:i}=navigator;let n=(t.match(/NetType\/\S+/)||[])[0]||"";n=n.toLowerCase().replace("nettype/",""),n==="3gnet"&&(n="3g");const c=i&&i.type&&i.type.toLowerCase();let I=i&&i.effectiveType&&i.effectiveType.toLowerCase();return I==="slow-2"&&(I="2g"),c?Q7(c,I):B7}function TlA(){Wo.warn("netType changed",h4())}var FZ=!1;function NlA(){var t;FZ||(FZ=!0,(t=navigator.connection)==null||t.addEventListener("typechange",TlA))}function Q7(t,i){if(d7[t])return t;switch(t){case"cellular":case"wimax":return i||"unknown";case"ethernet":return"wired";default:return"unknown"}}function GlA(t){B7=Q7(t)}function blA(){return d7[h4()]}function klA(t,i){for(const n of Reflect.ownKeys(i))if(n!=="constructor"&&n!=="prototype"&&n!=="name"){const c=Object.getOwnPropertyDescriptor(i,n)||"";Object.defineProperty(t,n,c)}return t}function LlA(t,i=48e3){return p7(t/4,i)}function p7(t,i=48e3){return 1e3*t/i}function UlA(t,i=48e3){return 4*m7(t,i)}function m7(t,i=48e3){return t*i/1e3}var FlA=typeof window<"u"&&typeof window.glog=="function"?window.glog:()=>{},Zy=()=>{let t=navigator.language;return t=t.substring(0,2),t==="zh"},lT=function(t){if(!t||typeof t!="object"||Object.prototype.toString.call(t)!="[object Object]")return!1;const i=Object.getPrototypeOf(t);if(i===null)return!0;const n=Object.prototype.hasOwnProperty.call(i,"constructor")&&i.constructor;return typeof n=="function"&&n instanceof n&&Function.prototype.toString.call(n)===Function.prototype.toString.call(Object)};function B4(t,i=1,n=1){return t<=1?n:B4(t-1,n,i+n)}function OlA(t){return t>8?3e4:1e3*B4(t)}function kv(t){return Reflect.apply(Object.prototype.toString,t,[]).replace(/^\[object\s(\w+)\]$/,"$1").toLowerCase()}var Dv=t=>typeof t=="function",er=t=>t===void 0,rh=t=>typeof t=="string",Lv=t=>typeof t=="number",Sv=t=>typeof t=="boolean",Qv=t=>kv(t)==="object",oh=t=>kv(t)==="array",PlA=t=>kv(t)==="MediaStreamTrack".toLowerCase(),xlA=t=>t.isRemote,f7=t=>kv(t)==="promise",y7=t=>Dv(t)&&t.prototype.constructor===t,YlA=t=>y7(t)?t.prototype.constructor.name:"",VlA=typeof AudioWorkletNode<"u",JlA=typeof HTMLMediaElement<"u"&&"setSinkId"in HTMLMediaElement.prototype;function HlA(t){return new Promise((i,n)=>{const c=[];t.forEach(I=>{I.then(i).catch(C=>{c.push(C),c.length===t.length&&n(c)})})})}function Yc(){return performance&&performance.now?Math.floor(performance.now()):Date.now()}var OZ=t=>+t<10?`0${t}`:t,qlA=t=>{const i=t.match(/^\d+\.\d+\.\d+/)[0];if(!i)return t;const n=i.split("."),c=OZ(n[1])+OZ(n[2]);return n[1]-15>0&&(n[1]="15"),n[2]-15>0&&(n[2]="15"),`${n.join(".")}.${c}`},KlA=Object.prototype.hasOwnProperty;function jlA(t){if(t==null)return!0;if(typeof t=="boolean")return!1;if(typeof t=="number")return t===0;if(typeof t=="string"||typeof t=="function"||Array.isArray(t))return t.length===0;if(t instanceof Error)return t.message==="";if(lT(t))switch(Object.prototype.toString.call(t)){case"[object File]":case"[object Map]":case"[object Set]":return t.size===0;case"[object Object]":for(const i in t)if(KlA.call(t,i))return!1;return!0}return!1}function D7(t,i){return{userId:i,hasAudio:!!(t&TZ),hasVideo:!!(t&_Z),hasAuxiliary:!!(t&hlA),hasSmall:!!(t&ClA),audioMuted:!!(t&NZ),videoMuted:!!(t&GZ),audioAvailable:!(!(t&TZ)||t&NZ),videoAvailable:!(!(t&_Z)||t&GZ),hasDatachannel:!!(t&BlA)}}function WlA(t){const i={urls:t.url.startsWith("turn:")||t.url.startsWith("turns:")?t.url:`turn:${t.url}`};return er(t.username)||er(t.credential)||(i.username=t.username,i.credential=t.credential,i.credentialType="password",er(t.credentialType)||(i.credentialType=t.credentialType)),i}function zlA(t,i=!0){if(!rh(t))return 0;const n=t.split(".");return i?(Number(n[0])<<24|Number(n[1])<<16|Number(n[2])<<8|Number(n[3]))>>>0:(Number(n[3])<<24|Number(n[2])<<16|Number(n[1])<<8|Number(n[0]))>>>0}var S7=function(t,i,n,c){if(!Qv(t)||!Qv(i))return 0;let I=0;const C=Object.keys(i);let f;for(let w=0,_=C.length;w<_;w++)if(f=C[w],!(er(i[f])||n&&n.includes(f)))if(Qv(t[f])&&Qv(i[f]))I+=S7(t[f],i[f],n,c);else{if(c&&c.includes(i[f]))continue;t[f]!==i[f]&&(t[f]=OY(i[f]),I+=1)}return I};function OY(t){if(oh(t)){const i=[];return t.forEach((n,c)=>{i[c]=OY(n)}),i}if(Qv(t)){const i={};return Object.keys(t).forEach(n=>{i[n]=OY(t[n])}),i}return t}var ZlA=t=>{let i=[];if(oh(t))i=[...t];else if(rh(t)){const n=document.getElementById(t);n&&i.push(n)}else t&&i.push(t);return i},XlA=t=>rh(t)?document.getElementById(t):t,$lA=t=>{const i=n=>n<10?`0${n}`:`${n}`;return`${t.getFullYear()}/${t.getMonth()+1}/${t.getDate()} ${i(t.getHours())}:${i(t.getMinutes())}:${i(t.getSeconds())}`},AIA=()=>$lA(new Date);function Xy(t,{keysToInclude:i,keysToExclude:n}){try{if(oh(t))return`[${t.map(f=>Xy(f,{keysToInclude:i,keysToExclude:n})).join(",")}]`;if(!lT(t)||!oh(i)&&!oh(n))return JSON.stringify(t);const c={},I=new Set(i),C=new Set(n);return Object.keys(t).forEach(f=>{(C.size===0&&I.has(f)||I.size===0&&!C.has(f))&&(c[f]=lT(t[f])||oh(t[f])?JSON.parse(Xy(t[f],{keysToExclude:n,keysToInclude:i})):t[f])}),JSON.stringify(c)}catch{return"{}"}}function cW(t,i=!1){const n=[];return Object.keys(t).forEach(c=>{i===t[c]&&n.push(c)}),Xy(t,{keysToInclude:n})}function eIA(t){return t.replace(/[\u4e00-\u9fa5]/g,"aa").length}var M7=()=>{var t,i,n,c;return(t=window.screen)!=null&&t.orientation?!!((c=(n=(i=window.screen)==null?void 0:i.orientation)==null?void 0:n.type)!=null&&c.includes("portrait")):window.orientation===0||window.orientation===180},tIA=async t=>new Promise((i,n)=>{let c;if(rh(t))c=new Image,c.crossOrigin="anonymous",c.src=t;else if(c=t,c.complete)return void i(c);c.onload=()=>i(c),c.onerror=()=>{n(new fl({code:qg.INVALID_PARAMETER,message:`load image failed, url: ${t}`}))}}),v7=t=>{const i=t.split(".");return+i[0]<<24|+i[1]<<16|+i[2]<<8|+i[3]},R7=t=>(Object.keys(t).forEach(i=>{Lv(t[i])&&(i.startsWith("uint")||i.startsWith("int"))?t[i]=Math.floor(t[i]):(lT(t[i])||oh(t[i]))&&R7(t[i])}),t);function IT(t,i){return new Promise(n=>{const c=setTimeout(n,t);i&&i(c)})}function w7(t,i){let n=null;return function(...c){return n||(n=t.apply(i||this,c),n.finally(()=>n=null),n)}}function iIA(t){return t.replace(/(^|[^:])\/{2,}/g,"$1/")}function oIA(t){var i;try{const{width:n,height:c,frameRate:I,sampleRate:C,sampleSize:f,channelCount:w}=(i=t.getSettings)==null?void 0:i.call(t),_=t.kind===ei.AUDIO?`${C}x${f}@${w}`:`${n}x${c}@${I}`,N=t.stats?` stats: ${JSON.stringify(t.stats).replaceAll('"',"")}`:"";return`${t.id} ${t.readyState} muted:${t.muted} ${t.kind} ${t.label} ${_}${N}`}catch{return""}}function _7(t,i){return t.width*t.height===i.width*i.height?1:M7()&&i.width>i.height&&t.height>i.width?Math.max(t.width/i.height,t.height/i.width,1):Math.max(t.width/i.width,t.height/i.height,1)}function T7(t){return t===90||t===270}async function sIA(t){return new Promise((i,n)=>{const c=document.createElement("video");c.crossOrigin="anonymous",c.src=t,c.muted=!0,c.loop=!0,c.playsInline=!0,c.play().then(()=>i(c)),c.onerror=()=>{n(c.error)}})}function lW(t,i=new WeakMap){if(typeof t!="object"||t===null)return t;if(i.has(t))return i.get(t);if(Array.isArray(t)){const n=[];return i.set(t,n),t.forEach((c,I)=>{n[I]=lW(c,i)}),n}if(Object.prototype.toString.call(t)==="[object Object]"){const n={};return i.set(t,n),Reflect.ownKeys(t).forEach(c=>{n[c]=lW(t[c],i)}),n}return t}var N7=(t=>(t[t.END_REPORT=2001]="END_REPORT",t[t.LOG=2002]="LOG",t[t.KEY_METRIC_REPORT=2003]="KEY_METRIC_REPORT",t))(N7||{});function nIA(t,i,n,c){let I={data:t,random:Math.floor(Math.random()*2147483648),sdkAppId:n};return er(c)||(I=gB(Rn({},I),{gzip:+c})),{uint32_sdkappid:0,uint64_from_uin:0,uint32_timestamp:0,uint32_seq:0,msg_common_info:{msg_device_info:{enum_device_type:0,str_device_brand:"",str_device_model:"",str_device_board:"",str_device_cpu_abi:""},msg_system_info:{enum_os_type:0,str_os_version:"",msg_network_info:0},msg_network_info:{enum_network_type:0}},msg_report_content:{uint32_type:i,bytes_report_data:JSON.stringify(I)}}}function Q4(t,i,n,c){try{const I=nIA(t,i,n,c);return SlA(rW(I),n)}catch{return JSON.stringify(t)}}function rIA(t,i){const n=new Uint8Array(t.byteLength+i.byteLength);return n.set(new Uint8Array(t),0),n.set(new Uint8Array(i),t.byteLength),n.buffer}function aIA(t){return(65535&t)>>>0}function gIA(t){return(4294901760&t)>>>0}function p4(t){return!!(t&&t instanceof CanvasCaptureMediaStreamTrack&&t.canvas.id.includes("trtc_mix"))}function cIA(t){const i=lIA(t);return i?.busiBuff}function lIA(t){try{const i={};let n=0;i.totalLength=ad(t,n),n+=4,i.version=ad(t,n),n+=4,i.encryption=LZ(t,n),n+=1,i.uinType=LZ(t,n),n+=1,i.uinLength=ad(t,n),n+=4,i.uin=i.uinLength>4?wL(t,n,i.uinLength-4):"",n+=i.uinLength-4;const c=t.slice(n);if(i.encryption===2){const I=new Uint8Array(16).fill(0);t=IIA(c,I),i.decrypted=!0,n=0}else t=c,n=0;return i.rspHeadLength=ad(t,n),n+=4,i.seqNo=ad(t,n),n+=4,i.retCode=ad(t,n),n+=4,i.retStrLength=ad(t,n),n+=4,i.retStr=i.retStrLength?wL(t,n,i.retStrLength-4):"",n+=i.retStrLength-4,i.serviceCmdLength=ad(t,n),n+=4,i.serviceCmd=i.serviceCmdLength?wL(t,n,i.serviceCmdLength-4):"",n+=i.serviceCmdLength-4,i.cookieLength=ad(t,n),n+=4,i.cookie=i.cookieLength?wL(t,n,i.cookieLength-4):"",n+=i.cookieLength-4,i.flag=ad(t,n),n+=4,i.busiBuffLength=ad(t,n),n+=4,i.busiBuff=i.busiBuffLength?wL(t,n,i.busiBuffLength-4):"",n+=i.busiBuffLength-4,i}catch{}}function G7(t,i){let n=t[0]<<24|t[1]<<16|t[2]<<8|t[3],c=t[4]<<24|t[5]<<16|t[6]<<8|t[7];n>>>=0,c>>>=0;let I=aW*gW>>>0;for(let C=0;C>>5)+i[3],c>>>=0,n-=(c<>>5)+i[1],n>>>=0,I-=aW,I>>>=0;return new Uint8Array([n>>>24&255,n>>>16&255,n>>>8&255,255&n,c>>>24&255,c>>>16&255,c>>>8&255,255&c])}function IIA(t,i){let n=0;const c=new Uint8Array(8).fill(0);let I=G7(new Uint8Array(t.slice(0,8)),i);const C=7&I[0],f=t.length-1-C-IU-uU,w=new Uint8Array(f);let _=0,N=c,L=t.slice(0,8);n=8;let q=1;q+=C;for(let tA=1;tA<=IU;)if(q<8)q++,tA++;else if(q===8){const BA=g3(t,n,N,L,I,i);N=BA.ivPreCrypt,L=BA.ivCurCrypt,I=BA.debiBuf,n=BA.bufPos,q=0}let lA=f;for(;lA>0;)if(q<8)w[_++]=I[q]^N[q],q++,lA--;else if(q===8){const tA=g3(t,n,N,L,I,i);N=tA.ivPreCrypt,L=tA.ivCurCrypt,I=tA.debiBuf,n=tA.bufPos,q=0}for(let tA=1;tA<=uU;)if(q<8)I[q],N[q],q++,tA++;else if(q===8){if(n>=t.length)break;const BA=g3(t,n,N,L,I,i);if(!BA.success)break;N=BA.ivPreCrypt,L=BA.ivCurCrypt,I=BA.debiBuf,n=BA.bufPos,q=0}return w}function g3(t,i,n,c,I,C){if(i+8>t.length)return{success:!1};const f=new Uint8Array(c),w=t.slice(i,i+8),_=new Uint8Array(8);for(let N=0;N<8;N++)_[N]=I[N]^w[N];return{success:!0,ivPreCrypt:f,ivCurCrypt:w,debiBuf:G7(_,C),bufPos:i+8}}var PZ=typeof TextDecoder<"u"?new TextDecoder:void 0;function b7({url:t,body:i,method:n="POST",timeout:c,priority:I}){return new Promise((C,f)=>{if("fetch"in window)return fetch(t,{method:n,body:i,priority:I}).then(_=>_.clone().json().then(N=>({data:N}),()=>_.arrayBuffer().then(N=>({data:cIA(new Uint8Array(N))||(PZ?PZ.decode(N):N)})))).then(C,f);const w=new XMLHttpRequest;w.onreadystatechange=()=>{if(w.readyState===4)if(w.status>=200&&w.status<300)try{const _=JSON.parse(w.response);C({data:_})}catch{C({data:w.response})}else f({status:w.status,statusText:w.statusText||"request failed!"})},w.timeout=c||5e3,w.open(n,t,!0),w.send(i)})}var uIA=Object.prototype.hasOwnProperty,F_=t=>typeof t=="function",v_=t=>t===void 0,EIA=t=>typeof t=="boolean",c3=t=>t.isRemote,dIA=function(t){if(!t||typeof t!="object"||Object.prototype.toString.call(t)!="[object Object]")return!1;const i=Object.getPrototypeOf(t);if(i===null)return!0;const n=Object.prototype.hasOwnProperty.call(i,"constructor")&&i.constructor;return typeof n=="function"&&n instanceof n&&Function.prototype.toString.call(n)===Function.prototype.toString.call(Object)};function CIA(t){if(t==null)return!0;if(typeof t=="boolean")return!1;if(typeof t=="number")return t===0;if(typeof t=="string"||typeof t=="function"||Array.isArray(t))return t.length===0;if(t instanceof Error)return t.message==="";if(dIA(t))switch(Object.prototype.toString.call(t)){case"[object File]":case"[object Map]":case"[object Set]":return t.size===0;case"[object Object]":for(const i in t)if(uIA.call(t,i))return!1;return!0}return!1}var hIA=0,BIA=1,xZ=2;function QIA({retryFunction:t,settings:i,onError:n,onRetrying:c,onRetryFailed:I,onRetrySuccess:C,context:f}){return function(...w){const{retries:_=5,timeout:N=1e3}=i;let L=0,q=-1,lA=hIA;const tA=async(BA,IA)=>{const gA=f||this;try{const RA=await t.apply(gA,w);L>0&&C&&C.call(this,L),L=0,BA(RA)}catch(RA){const HA=()=>{clearTimeout(q),L=0,lA=xZ,IA(RA)},ZA=()=>{lA!==xZ&&L<(F_(_)?_():_)?(L++,lA=BIA,F_(c)&&c.call(this,L,HA),q=window.setTimeout(()=>{q=-1,tA(BA,IA)},F_(N)?N(L):N)):(HA(),F_(I)&&I.call(this,RA))};F_(n)?n.call(this,{error:RA,retry:ZA,reject:IA,retryFuncArgs:w,retriedCount:L}):ZA()}};return new Promise(tA)}}var m4=QIA,l3=class k7{constructor(i){Be(this,"_parentPath"),Be(this,"userId"),Be(this,"remoteUserId"),Be(this,"id"),Be(this,"sdkAppId"),Be(this,"type"),Be(this,"isLocal"),this.id=i.id,this.userId=i.userId,this.sdkAppId=i.sdkAppId,this.remoteUserId=i.remoteUserId,this.isLocal=!EIA(i.isLocal)||i.isLocal,this.type=this.isLocal?"":i.type}getFullId(){return this._parentPath&&this.id?`${this._parentPath}-${this.id}`:this._parentPath?this._parentPath:this.id}createChild(i){const n=new k7({id:i.id,userId:v_(i.userId)?this.userId:i.userId,sdkAppId:v_(i.sdkAppId)?this.sdkAppId:i.sdkAppId,type:v_(i.type)?this.type:i.type,isLocal:v_(i.isLocal)?this.isLocal:i.isLocal,remoteUserId:v_(i.remoteUserId)?this.remoteUserId:i.remoteUserId});return n.bindParent(this),n}bindParent(i){const n=i.getFullId();this._parentPath!==n&&(this.debug(`bind logger parent: ${i.id}`),this._parentPath=n,this.userId=i.userId||this.userId,this.sdkAppId=i.sdkAppId||this.sdkAppId)}setUserId(i){this.userId=i}setSdkAppId(i){this.sdkAppId=i}log(i,n){const c=this.isLocal?this.userId:this.remoteUserId,I=this.getFullId();n.unshift(`[${this.isLocal?"↑":"↓"}${this.type&&this.type!=="main"?"*":""}${I}${c?`|${c}`:""}]`),Wo.log(i,n,v_(this.userId)||CIA(this.userId),this.userId,this.sdkAppId)}info(...i){this.log(2,i)}debug(...i){this.log(1,i)}warn(...i){this.log(3,i)}error(...i){this.log(4,i)}},NQ=typeof navigator>"u"?"":navigator.userAgent,Vs=t=>new RegExp(t,"i").test(NQ),Qc=t=>{if(Vs(t)){const i=new RegExp(`${t}\\/([\\d.]+)`),n=NQ.match(i);if(n&&n[1])return n[1]}return""},RV=t=>{if(Vs(t)){const i=new RegExp(`${t}\\/(\\d+)`),n=NQ.match(i);if(n&&n[1])return parseFloat(n[1])}return NaN},YZ=/AppleWebKit\/([\d.]+)/i.exec(NQ);YZ&&parseFloat(YZ[1]);var f4=Vs("iPad"),L7=typeof navigator<"u"&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2&&Vs("Macintosh"),wV=Vs("iPhone")&&!f4,pIA=Vs("iPod"),vu=wV||f4||pIA||L7,PY=()=>{try{return vu&&navigator.maxTouchPoints>1&&navigator.vendor.includes("Apple")}catch{return vu}},cC=Vs("Android"),U7=function(){if(cC){const t=NQ.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);if(t){const i=t[1]&&parseFloat(t[1]),n=t[2]&&parseFloat(t[2]);if(i&&n)return parseFloat(`${t[1]}.${t[2]}`);if(i)return i}}return NaN}();cC&&Vs("webkit")&&U7<2.3;var rC=Vs("Firefox"),F7=Qc("Firefox"),O7=RV("Firefox"),XU=Vs("Edge"),P7=Qc("Edge"),_V=Vs("Edg"),x7=Qc("Edg"),mIA=RV("Edg"),y4=Vs("SogouMobileBrowser"),Y7=Qc("SogouMobileBrowser"),D4=Vs("MetaSr\\s"),V7=Qc("MetaSr\\s"),mm=Vs("TBS"),J7=Qc("TBS"),fT=Vs("XWEB"),H7=Qc("XWEB");Vs("MSIE\\s8\\.0");var fIA=Vs("MSIE\\/\\d+");(function(){if(fIA){const t=/MSIE\s(\d+)\.\d/.exec(NQ);let i=t&&parseFloat(t[1]);return!i&&/Trident\/7.0/i.test(NQ)&&/rv:11.0/.test(NQ)&&(i=11),i}return NaN})();var $U=Vs("(micromessenger|webbrowser)"),q7=Qc("MicroMessenger"),TV=!mm&&Vs("MQQBrowser")&&Vs("COVC"),NV=!mm&&Vs("MQQBrowser")&&!Vs("COVC"),xY=NV||TV?Qc("MQQBrowser"):"",S4=!mm&&Vs(" QQBrowser"),K7=Qc(" QQBrowser"),M4=!mm&&Vs("QQBrowserLite"),j7=Qc("QQBrowserLite"),v4=!mm&&Vs("MQBHD"),W7=Qc("MQBHD"),z7=Vs("Windows"),GV=!vu&&Vs("MAC OS X"),Z7=!cC&&Vs("Linux"),X7=Vs("CrOS");Vs("MicroMessenger");var yIA=Vs("UCBrowser");Vs("Electron");var R4=Vs("MiuiBrowser"),$7=Qc("MiuiBrowser"),w4=Vs("HuaweiBrowser"),A$=Vs("Huawei")||Vs("HUAWEI"),DIA=Vs("Honor")||Vs("HONOR"),e$=Qc("HuaweiBrowser"),_4=Vs("SamsungBrowser"),t$=Qc("SamsungBrowser"),bV=Vs("HeyTapBrowser"),i$=Qc("HeyTapBrowser"),T4=Vs("VivoBrowser"),o$=Qc("VivoBrowser"),N4=Vs("OpenHarmony");Qc("OpenHarmony");var s$=()=>RV("Chrome"),YY=Vs("CriOS"),sD=Vs("Chrome"),G4=!XU&&!D4&&!y4&&!mm&&!fT&&!_V&&!S4&&!R4&&!w4&&!_4&&!bV&&!T4&&sD,SIA=Vs("HeadlessChrome"),nD=s$(),I3=sD&&nD>=128&&nD<=143,n$=Qc("Chrome");RV("Electron");var ld=!sD&&!NV&&!TV&&!M4&&!v4&&Vs("Safari"),r$=ld||vu,AF=Qc("Version"),wQ=(()=>{if(L7)return AF;if(vu){const t=NQ.match(/OS (\d+)_(\d+)/i);if(t&&t[1]){let i=t[1];return t[2]&&(i+=`.${t[2]}`),i}}return""})();function MIA(t,i){const n=t.split(".").map(I=>Number(I)),c=i.split(".").map(I=>Number(I));for(let I=0;If)return!1}return!1}function a$(t,i,n=!1){const c=t.split(".").map(C=>Number(C)),I=i.split(".").map(C=>Number(C));for(let C=0;Cw)return!0;if(f{const t=Number(wQ.split(".")[0]);return t===14||t===13})(),wIA=YY&&AF==="11.1.1",VY=typeof location<"u"&&(location.protocol==="file:"||location.hostname==="localhost"||location.hostname==="127.0.0.1"),R_=(()=>{let t;return()=>{if(t===void 0)try{t=!!window.localStorage}catch{t=!1}return t}})(),Mv=_IA();function _IA(){const t=new Map([[rC,["Firefox",F7]],[_V,["Edg",x7]],[G4,["Chrome",n$]],[YY,["ChiOS",Qc("CriOS")]],[ld&&!YY,["Safari",AF]],[mm,["TBS",J7]],[fT,["XWEB",H7]],[$U&&wV,["WeChat",q7]],[S4,["QQ(Win)",K7]],[NV,["QQ(Mobile)",xY]],[TV,["QQ(Mobile X5)",xY]],[M4,["QQ(Mac)",j7]],[v4,["QQ(iPad)",W7]],[R4,["MI",$7]],[w4,["HW",e$]],[_4,["Samsung",t$]],[bV,["OPPO",i$]],[T4,["VIVO",o$]],[XU,["EDGE",P7]],[y4,["SogouMobile",Y7]],[D4,["Sogou",V7]]]);let i="unknown",n="unknown";return t.has(!0)&&([i,n]=t.get(!0)),{name:i,version:n}}function TIA(){return cC||vu||wV||f4||N4}var NIA="";function g$(){return GIA()||""}function GIA(){const t=NQ.match(/;\s*([^;)]+)\s+Build\//);return t?.[1]?t[1].trim():null}var VZ=new Map([[cC,"Android"],[vu,"iOS"],[z7,"Windows"],[GV,"MacOS"],[Z7,"Linux"],[X7,"ChromeOS"]]),c$=function(){return VZ.get(!0)?VZ.get(!0):"unknown"};function b4(){return z7?1:cC?2:GV?3:vu?4:Z7?5:X7?6:N4?7:0}function bIA(){return $U||fT?4:sD?1:ld?2:rC?3:0}var l$=()=>{let t=c$();return vu?t+=`/${wQ}`:cC&&(t+=`/${U7}`),t+=`/${Mv.name}/${ld&&!YY?Mv.version:Mv.version.split(".")[0]}`,t},kIA=mT(zU()),LIA=new kIA.default,ms=LIA,I$=(t=>(t.ROOM_DESTROY="1",t.JOIN_START="21",t.JOIN_SCHEDULE_SUCCESS="22",t.JOIN_SIGNAL_CONNECTION_START="23",t.JOIN_SIGNAL_CONNECTION_END="24",t.JOIN_SEND_CMD="25",t.JOIN_RECEIVED_CMD_RES="26",t.JOIN_SUCCESS="27",t.JOIN_FAILED="28",t.LEAVE_START="51",t.LEAVE_SEND_CMD="52",t.LEAVE_SUCCESS="53",t.PUBLISH_START="61",t.SEND_FIRST_VIDEO_FRAME="62",t.PUBLISH_FAILED="63",t.SUBSCRIBE_START="81",t.SUBSCRIBE_SUCCESS="82",t.SUBSCRIBE_FAILED="84",t.UNSUBSCRIBE_SUCCESS="83",t.LOCAL_TRACK_CAPTURE_START="101",t.LOCAL_TRACK_CAPTURE_SUCCESS="102",t.LOCAL_TRACK_CAPTURE_FAILED="103",t.LOCAL_TRACK_PUBLISHED="104",t.LOCAL_TRACK_UNPUBLISHED="105",t.LOCAL_TRACK_REPLACED="106",t.SWITCH_DEVICE_SUCCESS="107",t.TRACK_MUTED="108",t.TRACK_UNMUTED="109",t.REMOTE_TRACK_SUBSCRIBED="110",t.REMOTE_TRACK_UNSUBSCRIBED="111",t.LOCAL_TRACK_RECAPTURE="112",t.LOCAL_AUDIO_STARTED="113",t.LOCAL_AUDIO_STOPPED="114",t.REMOTE_AUDIO_STARTED="115",t.REMOTE_AUDIO_STOPPED="116",t.LOCAL_TRACK_STOPPED="117",t.LOCAL_VIDEO_TRACK_PREPROCESSED="118",t.PLAY_TRACK_START="151",t.PLAYER_STATE_CHANGED="152",t.VIDEO_LOADED_DATA="153",t.AUTOPLAY_DIALOG_CLICK_CONFIRM="154",t.AUDIO_CONTEXT_LONG_SUSPENDED="155",t.REMOTE_VIDEO_PLAY_START="156",t.REMOTE_VIDEO_PLAY_FINISH="157",t.SIGNAL_CONNECTION_STATE_CHANGED="201",t.PEER_CONNECTION_STATE_CHANGED="202",t.SINGLE_CONNECTION_STAT="203",t.SPC_RECONNECTED="204",t.HEARTBEAT_REPORT="251",t.RECEIVED_PUBLISHED_USER_LIST="252",t.REMOTE_PUBLISH_STATE_CHANGED="253",t.AUDIO_LEVEL_INTERVAL="260",t.NETWORK_QUALITY="261",t.VIDEO_CODEC_IMPLEMENTATION_CHANGED="262",t.QUALITY_LIMITATION_CHANGED="263",t.LOG="264",t.AUDIO_PROCESSOR_DEBUG="265",t.SSO_SWITCH="266",t.SEI_MESSAGE="267",t.USER_PAUSE_IN_PIP="268",t.USER_RESUME_IN_PIP="269",t.ENTER_PICTURE_IN_PICTURE="270",t.LEAVE_PICTURE_IN_PICTURE="271",t.SWITCH_ROOM_START="401",t.SWITCH_ROOM_SUCCESS="407",t.SWITCH_ROOM_FAILED="408",t))(I$||{}),mn=I$,UIA=class{constructor(){Be(this,"enable",!1),Be(this,"ssoFailCount",0),ms.on("22",({schedule:t})=>{var i;(i=t?.config)!=null&&i.sso&&ms.emit("266",{enable:!0})}),ms.on("266",({enable:t})=>{this.enable=t})}handleUploadFailed(){this.ssoFailCount++,this.ssoFailCount>3&&ms.emit("266",{enable:!1})}},IW=new UIA,FIA="%cTRTC%c%s",OIA="padding: 1px 4px;border-radius: 3px;color: #fff;background: #1E88E5;",PIA="display: inline",u$=class E${constructor(){Be(this,"_isEnableUploadLog",!0),Be(this,"_localJoinedUser",new Map),Be(this,"_queue",[]),Be(this,"_timeoutId",-1),Be(this,"_logLevel",1),Be(this,"_logLevelToUpload",2),I7||u7||(this.checkURLParam(),this.installEvents())}get isAbleToUpload(){return this._isEnableUploadLog&&this._timeoutId!==-1}installEvents(){ms.on(mn.JOIN_SCHEDULE_SUCCESS,({schedule:i})=>{var n;(n=i?.config)!=null&&n.logLevelToUpload&&L_[i.config.logLevelToUpload]&&(this._logLevelToUpload=i.config.logLevelToUpload)}),ms.on(mn.JOIN_START,({params:i})=>{this.addJoinedUser({userId:i.userId,sdkAppId:i.sdkAppId}),this.startUpload()}),ms.on(mn.LEAVE_SUCCESS,({room:i})=>{this.deleteJoinedUser(i.userId)})}startUpload(){this._timeoutId===-1&&this.uploadInterval()}addJoinedUser(i){this._localJoinedUser.set(i.userId,i),this.startUpload()}deleteJoinedUser(i){this._localJoinedUser.delete(i)}uploadInterval(){this.upload().catch(()=>{}),this._timeoutId=window.setTimeout(()=>this.uploadInterval(),5e3)}getLogsToUpload(){const i={map:new Map,splicedQueue:[]};if(this._queue[0].forAllJoinedClients&&this._localJoinedUser.size===0)return i;let n=0;for(;n{i.map.has(I)?i.map.get(I).logs.push(c):i.map.set(I,{userId:I,sdkAppId:C,logs:[c]})});else if(rh(c.userId)&&Lv(c.sdkAppId)){const{userId:I,sdkAppId:C}=c;i.map.has(I)?i.map.get(I).logs.push(c):i.map.set(I,{userId:I,sdkAppId:C,logs:[c]})}}return i.map.size>0&&(i.splicedQueue=this._queue.splice(0,n)),i}async upload(){if(this._queue.length===0||!this._isEnableUploadLog)return;const{map:i,splicedQueue:n}=this.getLogsToUpload();if(i.size===0)return;try{const I=[...i.values()];for(let C=0;ClA.log).join(` +`)},L=JSON.stringify(N),q=IW.enable?Q4(N,2002,w):L;await this.uploadLogWithRetry(q,w,q instanceof Uint8Array,L),_.forEach(lA=>lA.uploaded=!0)}}catch{}const c=n.filter(I=>!I.uploaded);c.length>0&&(this._queue=c.concat(this._queue))}uploadLogWithRetry(i,n,c,I){return m4({retryFunction:()=>b7({url:C4(n,E7.LOG),body:i,timeout:5e3,priority:"low"}).then(C=>{c&&C.data!=="ok"&&(IW.handleUploadFailed(),this.uploadLogWithRetry(I,n,!1,I))}),settings:{retries:3,timeout:2e3},onError:({retry:C})=>{C()}})()}getPrefix(i){const n=new Date;return n.setTime(d4()),`[${rlA(n)}] <${L_[i]}>`}getLogLevel(){return this._logLevel}setLogLevel(i){er(L_[i])||(this._logLevel!==i&&this.info("setLogLevel",i),this._logLevel=i)}enableUploadLog(){this._isEnableUploadLog=!0}disableUploadLog(){this.warn("disableUploadLog"),this._isEnableUploadLog=!1}logChunkToString(i){if(rh(i))return i;try{return i instanceof Error?i.toString():JSON.stringify(i)}catch{return""}}addLogToQueue(i,n,c=!0,I,C){const f={log:n.reduce((w,_)=>`${w} ${this.logChunkToString(_)}`.trim(),""),level:i,userId:I,sdkAppId:C,forAllJoinedClients:c};ms.emit(mn.LOG,{log:f}),this._isEnableUploadLog&&i>=this._logLevelToUpload&&this._queue.push(f)}log(i,n,c=!0,I,C){var f;if(n.unshift(this.getPrefix(i)),this.addLogToQueue(i,n,c,I,C),i{const i=16*Math.random()|0;return(t=="x"?i:3&i|8).toString(16)})},d$=YIA,VIA=class{constructor(){Be(this,"_prefix","TRTC"),Be(this,"_queue",new Map)}getRealKey(t){return`${this._prefix}_${t}`}checkStorage(){R_()&&(setInterval(this.doFlush.bind(this),2e4),Object.keys(localStorage).filter(t=>{if(t.startsWith(this._prefix))try{const i=localStorage.getItem(t);if(!i)return!1;const n=JSON.parse(i);if(n&&n.expiresInlocalStorage.removeItem(t)))}doFlush(){if(R_())try{for(const[t,i]of this._queue)localStorage.setItem(t,JSON.stringify(i))}catch(t){Wo.warn(t)}}getItem(t){if(!R_())return null;try{const i=localStorage.getItem(this.getRealKey(t));if(!i)return null;const n=JSON.parse(i);return n&&n.expiresIn>=Date.now()?n.value:null}catch(i){Wo.warn(i)}}setItem(t,i){if(R_())try{const n={expiresIn:Date.now()+ulA,value:i};this._queue.set(this.getRealKey(t),n)}catch(n){Wo.warn(n)}}deleteItem(t){if(!R_())return!1;try{return t=this.getRealKey(t),this._queue.delete(t),localStorage.removeItem(t),!0}catch(i){return Wo.warn(i),!1}}clear(){if(R_())try{localStorage.clear()}catch(t){Wo.warn(t)}}},C$=new VIA,JIA={};u4(JIA,{HTTPS_API:()=>iuA,IS_GET_CAPABILITIES_FROM_INPUTDEVICE_SUPPORTED:()=>T$,IS_GET_CAPABILITIES_SUPPORTED:()=>_$,IS_GET_SETTINGS_SUPPORTED:()=>qY,IS_GET_SYNCHRONIZATION_SOURCES_SUPPORTED:()=>IuA,IS_INSERTABLE_STREAM_SUPPORTED:()=>N$,IS_JITTER_BUFFER_TARGET_SUPPORTED:()=>BuA,IS_RTC_RTP_SENDER_SUPPORTED:()=>eF,IS_SCRIPT_TRANSFORM_SUPPORTED:()=>G$,IS_SEI_SUPPORTED:()=>uuA,IS_SPC_SUPPORTED:()=>auA,basis:()=>duA,capabilityCheck:()=>CuA,checkSystemRequirementsInternal:()=>p$,decodeSupportStatus:()=>Q$,detectH264SupportedByFakeStreaming:()=>m$,detectVideoCodecCapabilities:()=>QuA,detectVideoDecoderCapabilities:()=>O$,detectVideoEncoderCapabilities:()=>F$,encodeSupportStatus:()=>F4,getBrowserInfo:()=>zIA,getDisplayResolution:()=>f$,getH264ProfileLevelIds:()=>P$,isAddTransceiverSupported:()=>LV,isBrowserSupported:()=>k4,isCanvasCaptureStreamAPISupported:()=>S$,isCanvasSmallStreamSupported:()=>M$,isGetReceiversSupported:()=>nuA,isGetSendersSupported:()=>w$,isGetTransceiversSupported:()=>ruA,isGetUserMediaSupported:()=>y$,isMediaDevicesSupported:()=>U4,isMediaSessionSupported:()=>k$,isMediaStreamTrackGeneratorSupported:()=>XIA,isMediaStreamTrackProcessorSupported:()=>ZIA,isReplaceTrackSupported:()=>cuA,isRequestVideoFrameCallbackSupported:()=>x4,isSIMDSupported:()=>EuA,isScaleResolutionDownBySupported:()=>v$,isScreenCaptureApiAvailable:()=>O4,isSelectedCandidatePair:()=>ouA,isSetParametersSupported:()=>luA,isSetSinkIdSupported:()=>euA,isSmallStreamSupported:()=>R$,isStopTransceiverSupported:()=>guA,isTRTCSupported:()=>AuA,isUnifiedPlanDefault:()=>suA,isUsedInHttpProtocol:()=>kV,isWebAudioSupported:()=>D$,isWebCodecSupported:()=>b$,isWebCodecsSupported:()=>L4,isWebRTCSupported:()=>P4,isWebTransportSupported:()=>L$});var JY={PLAY_FAILED:"PLAY_FAILED",NOT_SUPPORTED_HTTP:"NOT_SUPPORTED_HTTP",MICROPHONE_NOT_FOUND:"MICROPHONE_NOT_FOUND",CAMERA_NOT_FOUND:"CAMERA_NOT_FOUND"},J_={AVOID_REPEATED_CALL:t=>`previous ${t.name}() is ongoing, please avoid repeated calls.`,INVALID_PARAMETER_REQUIRED:({key:t,rule:i,fnName:n,value:c})=>`'${t||i.name}' is a required param when calling ${n}(), received: ${c}.`,INVALID_PARAMETER_TYPE({key:t,rule:i,fnName:n,value:c}){const I=`${t||i.name}`;let C="";return C=Array.isArray(i.type)?i.type.join("|"):i.type,`'${I}' must be type of ${C} when calling ${n}(), received type: ${kv(c)}.`},INVALID_PARAMETER_EMPTY:({key:t,rule:i,fnName:n,value:c})=>`'${t||i.name}' cannot be '${c}' when calling ${n}().`,INVALID_PARAMETER_INSTANCE:({key:t,rule:i,fnName:n,value:c})=>`'${`${t||i.name}`}' must be instanceof ${`${i.instanceOf.name||i.instanceOf}`} when calling ${n}(), received type: ${kv(c)}.`,INVALID_PARAMETER_RANGE:({key:t,rule:i,fnName:n,value:c})=>`'${t||i.name}' must be one of ${i.values.join("|")} when calling ${n}(), received: ${c}.`,INVALID_PARAMETER_MIN:({key:t,rule:i,fnName:n,value:c})=>`the min value of ${t||i.name} is ${i.min}, received: ${c}.`,INVALID_PARAMETER_MAX:({key:t,rule:i,fnName:n,value:c})=>`the max value of ${t||i.name} is ${i.max}, received: ${c}.`,API_CALL_TIMEOUT:t=>`${t.commandDesc||t.command} timeout observed.`,SIGNAL_CHANNEL_RECONNECTION_FAILED:"signal channel reconnection failed, please check your network.",SIGNAL_CHANNEL_SETUP_FAILED:t=>`SignalChannel setup failure: (errorCode: ${t.errorCode}, errorMsg: ${t.errorMsg} }).`,ERROR_MESSAGE(t){let i=`${t.type} failed`;return t.message&&(i=`${i}: ${t.message}.`),i},EXCHANGE_SDP_TIMEOUT:"exchange sdp timeout.",DOWNLINK_RECONNECTION_FAILED:"downlink reconnection failed, please check your network and re-join room.",EXCHANGE_SDP_FAILED:t=>`exchange sdp failed ${t.errMsg}.`,UPDATE_OFFER_TIMEOUT:"update offer timeout observed.",UPLINK_RECONNECTION_FAILED:"uplink reconnection failed, please check your network and publish again.",INVALID_RECORDID:"recordId must be an integer number.",INVALID_PURE_AUDIO:"pureAudioPushMode must be 1 or 2.",INVALID_STREAMID:"streamId must be a sting literal within 64 bytes, and not be empty.",INVALID_USER_DEFINE_RECORDID:"userDefineRecordId must be a sting literal contains (a-zA-Z),(0-9), underline and hyphen, within 64 bytes, and not be empty.",INVALID_USER_DEFINE_PUSH_ARGS:"userDefinePushArgs must be a sting literal within 256 bytes, and not be empty.",INVALID_PROXY:'proxy server url must start with "wss://".',INVALID_JOIN:"duplicate join() called.",INVALID_ROOMID_STRING:t=>`'${t}' must be validate string when useStringRoomId is true.`,INVALID_ROOMID_INTEGER:t=>`'${t}' must be an integer between [1, 4294967294] when useStringRoomId is false.`,INVALID_SIGNAL_CHANNEL:"SignalChannel is not ready yet.",JOIN_ROOM_TIMEOUT:"join room timeout.",JOIN_ROOM_FAILED:({error:t,code:i})=>`Failed to join room - ${t} code: ${i}`,REJOIN_ROOM_FAILED:t=>`reJoin room: ${t.roomId} failed, please check your network.`,INVALID_DESTROY:"please call leave() before destroy().",INVALID_PUBLISH:"please call join() before publish().",INVALID_UNPUBLISH:"stream has not been published yet.",INVALID_AUDIENCE:'no permission to publish() under live/audience, please call switchRole("anchor") firstly before publish().',INVALID_INITIALIZE:"cannot publish stream because stream is not initialized, is switching device, or has been closed.",INVALID_DUPLICATE_PUBLISHING:t=>`duplicate ${t} stream publishing, please unpublish your prev ${t} stream and then re-publish.`,INVALID_SUBSCRIBE_UNDEFINED:"stream is undefined or null.",INVALID_SUBSCRIBE_LOCAL:"stream cannot be LocalStream.",INVALID_REMOTE_STREAM:"remoteStream does not exist because it has been unpublished by remote peer.",SUBSCRIBE_FAILED:({message:t,userId:i,streamType:n})=>`failed to subscribe ${i} ${n} stream, reason: ${t}.`,INVALID_ROLE:"switchRole can only be called in live mode.",INVALID_PARAMETER_SWITCH_ROLE:"role could only be set to a value as anchor or audience.",INVALID_OPERATION_SWITCH_ROLE:"please call join() before switchRole().",SWITCH_ROLE_TIMEOUT:"switchRole timeout.",SWITCH_ROLE_FAILED:t=>`switchRole failed, errCode: ${t.code} errMsg: ${t.message}.`,CLIENT_BANNED:t=>`client was banned because of ${t.message}.`,INVALID_OPERATION_START_PUBLISH_CDN:"please call startPublishCDNStream() after join room and publish the local stream.",INVALID_OPERATION_STOP_PUBLISH_CDN:"please call startPublishCDNStream() before stopPublishCDNStream().",START_PUBLISH_CDN_FAILED:t=>`startPublishCDNStream failed, errMsg: ${t.message}.`,STOP_PUBLISH_CDN_FAILED:t=>`stopPublishCDNStream failed, errMsg: ${t.message}.`,INVALID_STREAM_ID:t=>`'${t}' can only consist of uppercase and lowercase english letters (a-zA-Z), numbers (0-9), hyphens and underscores.`,START_MIX_TRANSCODE:"please call startMixTranscode() after join().",STOP_MIX_TRANSCODE:"please call stopMixTranscode() after startMixTranscode().",INVALID_AUDIO_VOLUME:"interval must be a number.",ENABLE_SMALL_STREAM_PUBLISHED:"Cannot enable small stream after localStream published.",DISABLE_SMALL_STREAM_PUBLISHED:"Cannot disable small stream after localStream published.",NOT_SUPPORTED_SMALL_STREAM:"your browser does not support opening small stream.",INVALID_SMALL_STREAM_PROFILE:"small stream profile is invalid.",INVALID_PARAMETER_REMOTE_STREAM:"remoteStream is invalid.",INVALID_OPERATION_CHANGE_SMALL:"cannot switch to the small stream without subscribing to the video of remoteStream.",REMOTE_NOT_PUBLISH_SMALL_STREAM:"remote peer does not publish small stream.",INVALID_SWITCH_DEVICE:"cannot switch device on current stream.",INVALID_SWITCH_DEVICE_PUBLISHING:"cannot switch device when publishing localStream.",INVALID_REPLACE_TRACK:"cannot replace track when publishing localStream.",INVALID_INITIALIZE_LOCAL_STREAM:"local stream has not initialized yet.",INVALID_ADD_TRACK_REPETITIVE:"previous addTrack is ongoing, please avoid repetitive execution.",INVALID_ADD_TRACK_REMOVING:"cannot add track when a track is removing.",INVALID_ADD_TRACK_PUBLISHING:"cannot add track when publishing localStream.",INVALID_STREAM_INITIALIZED:"your local stream haven't been initialized yet.",INVALID_ADD_TRACK_NUMBER:"a Stream has at most one audio track and one video track.",INVALID_REMOVE_AUDIO_TRACK:"remove audio track is not supported on your browser.",INVALID_REMOVE_AUDIO_ADDING:"cannot remove track when a track is adding.",INVALID_REMOVE_AUDIO_ON:"previous removeTrack is ongoing, please avoid repetitive execution.",INVALID_REMOVE_TRACK_PUBLISHING:"cannot remove track when publishing localStream.",INVALID_REMOVE_TRACK_NOT_TRACK:"localStream has not this track.",INVALID_REMOVE_TRACK_NUMBER:"remove the only video track is not supported, please use replaceTrack or muteVideo.",INVALID_REPLACE_TRACK_NO_TRACK:t=>`cannot replace ${t.kind} track because stream has not ${t.kind} track`,NOT_BUG_PACKAGE:"You need to buy packages, refer to tencent console.",START_MIX_TRANSCODE_FAILED:t=>`startMixTranscode failed, errMsg: ${t.message}.`,STOP_MIX_TRANSCODE_FAILED:t=>`stopMixTranscode failed, errMsg: ${t.message}.`,MIX_TRANSCODE_NOT_STARTED:"mixTranscode has not been started.",CANNOT_LESS_THAN_ZERO:({key:t,rule:i,fnName:n,value:c})=>`'${t||i.name}' cannot be less than 0 when calling ${n}().`,MIX_PARAMS_VIDEO_FRAMERATE:"'config.videoFramerate' should be an integer between 0 and 30, excluding 0.",MIX_PARAMS_VIDEO_GOP:"'config.videoGOP' should be an integer between 1 and 8.",MIX_PARAMS_AUDIO_BITRATE:"'config.audioBitrate' should be an integer between 32 and 192.",MIX_PARAMS_USER_Z_ORDER:t=>`'${t}' is required and must be between 1 and 15.`,MIX_PARAMS_NOT_SELF:"'config.mixUsers' must contain self.",MIX_PARAMS_USER_STREAM:"'config.videoWidth' and 'config.videoHeight' of output stream should be contain all mix stream.",INVALID_PLAY:"duplicate play() call observed, please stop() firstly.",INVALID_ELEMENT_ID:({key:t,fnName:i})=>`'${t}' is not found in the document object when calling ${i}().`,INVALID_ELEMENT_ID_TYPE:({key:t,fnName:i,type:n})=>`the element corresponding to '${t}' must be instanceof HTMLElement when calling ${i}(), received: ${n}.`,PLAY_FAILED:t=>`${t.media} play failed, browser exception: ${t.error.toString()}`,INVALID_USERID:"userId cannot be all spaces.",INVALID_CREATE_STREAM_SOURCE:"LocalStream must be created by createStream() with either audio/video or audioSource/videoSource, but can not be mixed with audio/video and audioSource/videoSource.",INVALID_CREATE_STREAM_SCREEN:"screen/video cannot be both true.",INVALID_CREATE_STREAM_AUDIO:"audio/screenAudio cannot be both true.",INVALID_CREATE_STREAM_SCREEN_AUDIO:"when screen is true, screenAudio can be configured.",NOT_SUPPORTED_HTTP:"http protocol does not support the ability to capture microphone, camera and screen. please use https to deploy your page.",NOT_SUPPORTED_WEBRTC:"your browser or environment does not support full WebRTC capabilities.",NOT_SUPPORTED_PROFILE:"your browser does not support setVideoProfile.",NOT_SUPPORTED_MEDIA:"your browser or environment does not support navigator.mediaDevices.",NOT_SUPPORTED_H264ENCODE:"your device does not support H.264 encoding.",NOT_SUPPORTED_H264DECODE:"your device does not support H.264 decoding.",NOT_SUPPORTED_TRACK:t=>`${t}Track is not supported on your browser.`,NOT_SUPPORTED_SWITCH_DEVICE:"switchDevice is not supported on your browser.",NOT_SUPPORTED_CAPTURE:"Your browser or environment does not support screen sharing, please check whether the browser version.",MICROPHONE_NOT_FOUND:"no microphone detected, please check your microphone.",CAMERA_NOT_FOUND:"no camera detected, please check your camera.",SIGNAL_RESPONSE_FAILED:t=>`${t.signalResponse} failed, response code is ${t.code} , errMsg: ${t.message}.`,CATCH_HANDLER_ERROR:({name:t,event:i})=>`an error was caught in ${t}.on('${i}', handler), please check your code in 'handler'.`,API_NOT_EXIST:({name:t})=>`experimental api ${t} does not exist.`,REPEAT_JOIN:t=>"please avoid repeated join.",CONNECTION_CLOSED:"remoteStream has been unsubscribed or unpublished by remote user.",SUBSCRIBE_ALL_FALSE:"cannot subscribe when both audio & video are false, use client.unsubscribe() instead",CLIENT_DESTROYED:({funName:t})=>`failed to call ${t}() because client was destroyed.`,SEI_NOT_SUPPORT:t=>"not support to sendSEIMessage"+(t===!1?" without using h264 codec":""),SEI_DISABLED:"SEI is disabled",SEI_BEFORE_PUBLISH:"please call sendSEIMessage() after publish() success",SEI_NOT_VIDEO:"cannot send sei when localStream has not video.",CALL_FREQUENCY_LIMIT:({isSize:t,name:i,timesInSecond:n,maxSizeInSecond:c})=>`api ${i} call ${t?"size":"times"} is over ${t?`${c} bytes`:n} in a second.`,CONNECTION_ABORTED:t=>`connection aborted due to: ${t}`,API_CALL_ABORTED(t){let i;return i=t.message.includes("REMOTE_STREAM_NOT_EXIST")?`Subscribe ${t.userId} ${t.streamType} stream aborted, reason: remote user ${t.userId} unpublished stream.`:`API aborted, reason: ${t.message}`,i},DUPLICATE_AUX:"only one auxiliary stream can be published in a room.",NOT_SUPPORTED_AUX:"publish auxiliary stream is not supported on your browser.",INVALID_PARAMETER_STREAMTYPE:t=>`'streamType' is required when 'userId' is not '*', calling ${t}()`,SWITCH_PLAYBACK_QUALITY_TIMEOUT:t=>`switchPlaybackQuality timeout: waiting for first frame of user ${t.userId}.`},JZ=(t,i)=>i?`${iW}/${t}/${i}`:`${iW}/${t}/index.html`,HIA=()=>{if(window.TRTC_ERROR_INFO&&window.TRTC_ERROR_LINK)return{TRTC_ERROR_INFO:window.TRTC_ERROR_INFO,TRTC_ERROR_LINK:window.TRTC_ERROR_LINK};let t=localStorage==null?void 0:localStorage.getItem(IlA);if(t){t=JSON.parse(t);const i=document.createElement("script");i.type="text/javascript",i.text=t.message,document.body.appendChild(i);const n=window.TRTC_ERROR_INFO,c=window.TRTC_ERROR_LINK;return document.body.removeChild(i),{TRTC_ERROR_INFO:n,TRTC_ERROR_LINK:c}}return{}};function HY(t){const{key:i,data:n,link:c,addDocLink:I=!0}=t;let C="",f="",w="";Dv(J_[i])?C=J_[i](n):rh(J_[i])&&(C=J_[i]);const{TRTC_ERROR_INFO:_,TRTC_ERROR_LINK:N}=HIA();c?w=`${c.className}.html#${c.fnName}`:N&&N[i]&&(Dv(N[i])?w=N[i](n):rh(N[i])&&(w=N[i]));let L=C;return Zy()&&(_&&_[i]&&(Dv(_[i])?f=_[i](n):rh(_[i])&&(f=_[i])),f&&(L=I?`${f} +请查看文档: ${JZ("zh-cn",w)} `:`${f} -`,U+=h)),I&&(U+=` -Refer to: ${mZ("en",w)} -`),U}var fZ=dT(ycA()),CIA=1,hIA=0,j7=class{constructor(t=!0){de(this,"countMap",new Map),de(this,"distributionMap",new Map),de(this,"version"),de(this,"log",Wo.createLogger({id:"kv"})),t&&(ps.on("102",({track:i,cost:r})=>{this.addSuccessEvent({key:i.kind===$t.AUDIO?501700:511700,cost:r})}),ps.on("103",({track:i,error:r})=>{this.addFailedEvent({key:i.kind===$t.AUDIO?501700:511700,error:r})}),ps.on("266",({enable:i})=>{this.log.info((i?"enable":"disable")+" sso"),i?this.addSuccessEvent({key:525701}):this.addFailedEvent({key:525701})}))}getReportData(t,i){const r={msg_sdk_basic_info:{uint32_sdk_version:o7(this.version||SY),uint32_terminal_type:15,bytes_device_name:"",bytes_os_version:"",uint32_framework:30,uint32_network_type:0},stats_count:[...this.countMap.entries()].map(([l,I])=>({uint32_key:l,uint32_count:I})),stats_distribution:[...this.distributionMap.entries()].map(([l,I])=>({uint32_key:l,distribution_items:[...I.entries()].map(([h,f])=>({uint32_item_key:h,uint32_item_value:f}))})),str_user_sig:t,bytes_report_token:i};return this.countMap.clear(),this.distributionMap.clear(),r}clear(){this.countMap.clear(),this.distributionMap.clear()}isEnumKey(t){const i=+String(t).slice(-3);return i>=700&&i<799}isErrorCodeKey(t){const i=+String(t).slice(-3);return i>=600&&i<699}isCountKey(t){const i=+String(t).slice(-3);return i>=0&&i<599}isNumberKey(t){const i=+String(t).slice(-3);return i>=800&&i<899}addCount({key:t,useUV:i=!1}){this.isCountKey(t)?i&&this.countMap.has(t)||this.countMap.set(t,(this.countMap.get(t)||0)+1):this.log.debug(`${t} is not count key, last 3 number should be 0~599`)}addEnum({key:t,value:i,useUV:r=!0}){var l;if(!this.isEnumKey(t))return this.log.debug(`${t} is not enum key, last 3 number should be 700~799`);if(r&&this.countMap.has(t))return;this.countMap.set(t,(this.countMap.get(t)||0)+1);const I=((l=this.distributionMap)==null?void 0:l.get(t))||new Map;I.set(i,(I.get(i)||0)+1),this.distributionMap.set(t,I)}addNumber({key:t,value:i,split:r=100,useUV:l=!1,max:I=5e3}){var h;if(!this.isNumberKey(t))return this.log.debug(`${t} is not number key, last 3 number should be 800~899`);if(l&&this.countMap.has(t))return;i>I&&(i=I),this.countMap.set(t,(this.countMap.get(t)||0)+1);const f=((h=this.distributionMap)==null?void 0:h.get(t))||new Map;let w=0;if(Gv(r))w=Math.floor(i/r);else for(let _=r.length-1;_>0;_--)if(i>r[_]){w=_;break}f.set(w,(f.get(w)||0)+1),this.distributionMap.set(t,f)}addSuccessEvent({key:t,cost:i,timeKey:r,split:l}){if(t&&(this.addEnum({key:t,value:CIA,useUV:!1}),i)){const I=+String(t).slice(-3);I<800&&I>=700?this.addNumber({key:r||t+100,value:i,split:l}):r||this.log.debug(`time stat ignored, ${t}`)}}addFailedEvent({key:t,error:i}){if(!t)return;let r=qg.UNKNOWN;i&&(Gv(i)?r=i:$n(i.extraCode)&&$n(i.code)||(r=i.extraCode||i.code)),this.addEnum({key:t,value:hIA,useUV:!1}),this.addEnum({key:t,value:Math.abs(r),useUV:!1})}},W7=(t=>(t[t.DECODER_TYPE=514700]="DECODER_TYPE",t[t.DECODER_HW_SW=514701]="DECODER_HW_SW",t[t.DECODE_RESULT=514702]="DECODE_RESULT",t[t.DECODE_FAILED_OS=514703]="DECODE_FAILED_OS",t[t.DOWNGRADE_RESULT=514704]="DOWNGRADE_RESULT",t[t.DOWNGRADE_WEBCODECS_VIDEO=514705]="DOWNGRADE_WEBCODECS_VIDEO",t[t.DOWNGRADE_WEBCODECS_2D=514706]="DOWNGRADE_WEBCODECS_2D",t[t.DOWNGRADE_WASM_WEGBL=514707]="DOWNGRADE_WASM_WEGBL",t[t.DOWNGRADE_WASM_VIDEO=514708]="DOWNGRADE_WASM_VIDEO",t[t.DOWNGRADE_WASM_2D=514709]="DOWNGRADE_WASM_2D",t[t.DECODE_H264_RESULT=514710]="DECODE_H264_RESULT",t[t.DECODE_H265_RESULT=514711]="DECODE_H265_RESULT",t[t.DECODE_VP8_RESULT=514712]="DECODE_VP8_RESULT",t[t.DECODE_CAPABILITIES=514713]="DECODE_CAPABILITIES",t[t.H264_PROFILE_LEVEL_ID_HIGH=514714]="H264_PROFILE_LEVEL_ID_HIGH",t[t.H264_PROFILE_LEVEL_ID_MAIN=514715]="H264_PROFILE_LEVEL_ID_MAIN",t[t.RENDER_FREEZE_RATE=514850]="RENDER_FREEZE_RATE",t[t.DATA_FREEZE_RATE=514851]="DATA_FREEZE_RATE",t[t.VIDEO_CONSUME_RENDER_RATE=514852]="VIDEO_CONSUME_RENDER_RATE",t))(W7||{}),BIA=new j7(!0);new j7(!1);var Ir=BIA,Xs={result:!1,detail:{isBrowserSupported:!1,isWebRTCSupported:!1,isWebCodecsSupported:!1,isMediaDevicesSupported:!1,isScreenShareSupported:!1,isSmallStreamSupported:!1,isH264EncodeSupported:!1,isVp8EncodeSupported:!1,isH265EncodeSupported:!1,isH264DecodeSupported:!1,isVp8DecodeSupported:!1,isH265DecodeSupported:!1}},QIA=new Map([[sC,["Firefox",d7]],[CV,["Edg",B7]],[I4,["Chrome",U7]],[ld,["Safari",JU]],[Bm,["TBS",m7]],[CT,["XWEB",f7]],[VU&&dV,["WeChat",y7]],[o4,["QQ(Win)",D7]],[BV,["QQ(Mobile)",wY]],[hV,["QQ(Mobile X5)",wY]],[s4,["QQ(Mac)",S7]],[n4,["QQ(iPad)",M7]],[r4,["MI",_7]],[a4,["HW",N7]],[g4,["Samsung",G7]],[pV,["OPPO",b7]],[c4,["VIVO",k7]],[YU,["EDGE",h7]],[t4,["SogouMobile",Q7]],[i4,["Sogou",p7]]]);function pIA(){const t=QIA.get(!0);return{browserName:t?t[0]:"unknown",browserVersion:t?t[1]:"unknown"}}var E4=function(){return!KlA&&!YU&&!(CV&&HlA<80)&&!(sC&&C7<56)},d4=function(){return["VideoDecoder","VideoEncoder","AudioEncoder","AudioDecoder"].every(t=>t in window)},C4=function(){if(!navigator.mediaDevices)return mV()||Wo.error(x_.NOT_SUPPORTED_MEDIA),!1;const t=["getUserMedia","enumerateDevices"];return t.filter(i=>i in navigator.mediaDevices).length===t.length},yZ=!1;function mV(){return location.protocol==="http:"&&!TY&&(yZ||Wo.error(GY({key:NY.NOT_SUPPORTED_HTTP})),yZ=!0,!0)}var mIA=function(){return window?.OffscreenCanvas&&window?.MediaStreamTrackProcessor&&window?.MediaStreamTrackGenerator},fIA=function(){return!!window?.MediaStreamTrackGenerator},h4=async function(){var t,i,r;if(Xs.detail.isH264EncodeSupported&&Xs.detail.isVp8EncodeSupported)return{isH264EncodeSupported:Xs.detail.isH264EncodeSupported,isVp8EncodeSupported:Xs.detail.isVp8EncodeSupported,isH265EncodeSupported:Xs.detail.isH265EncodeSupported};let l,I=!1,h=!1,f=!1;try{const w=new RTCPeerConnection,_=document.createElement($t.CANVAS);_.getContext("2d");const G=_.captureStream(0);return w.addTrack(G.getVideoTracks()[0],G),l=await w.createOffer(),I=((t=l.sdp)==null?void 0:t.toLowerCase().indexOf("h264"))!==-1,h=((i=l.sdp)==null?void 0:i.toLowerCase().indexOf("vp8"))!==-1,f=((r=l.sdp)==null?void 0:r.toLowerCase().indexOf("h265"))!==-1,w.close(),{isH264EncodeSupported:I,isVp8EncodeSupported:h,isH265EncodeSupported:f}}catch{return{isH264EncodeSupported:!1,isVp8EncodeSupported:!1,isH265EncodeSupported:!1}}},z7=async function(){var t;if(Xs.detail.isH264DecodeSupported&&Xs.detail.isVp8DecodeSupported)return{isH264DecodeSupported:Xs.detail.isH264DecodeSupported,isVp8DecodeSupported:Xs.detail.isVp8DecodeSupported,isH265DecodeSupported:Xs.detail.isH265DecodeSupported};let i,r=!1,l=!1;try{const I=new RTCPeerConnection;fV()?(I.addTransceiver($t.VIDEO,{direction:"recvonly"}),i=await I.createOffer()):i=await I.createOffer({offerToReceiveVideo:!0}),i.sdp.toLowerCase().indexOf("h264")!==-1&&(r=!0),i.sdp.toLowerCase().indexOf("vp8")!==-1&&(l=!0);const h=((t=i.sdp)==null?void 0:t.toLowerCase().indexOf("h265"))!==-1;return I.close(),{isH264DecodeSupported:r,isVp8DecodeSupported:l,isH265DecodeSupported:h}}catch{return{isH264DecodeSupported:!1,isVp8DecodeSupported:!1,isH265DecodeSupported:!1}}};async function yIA(){const[t,i]=await Promise.all([h4(),z7()]);return{encode:{h264:t.isH264EncodeSupported,vp8:t.isVp8EncodeSupported,h265:t.isH265EncodeSupported},decode:{h264:i.isH264DecodeSupported,vp8:i.isVp8DecodeSupported,h265:i.isH265DecodeSupported}}}var Z7=n7(async t=>{const i=Date.now(),r=Q4(),l=C4(),I=d4();if(Xs.detail.isWebRTCSupported=r,Xs.detail.isMediaDevicesSupported=l,Xs.detail.isWebCodecsSupported=I,Xs.detail.isScreenShareSupported=B4(),Xs.detail.isSmallStreamSupported=s$(),t===37)return Object.assign(Xs.detail,await MIA()),Xs.detail.isBrowserSupported=I,Xs.result=l&&I,Xs.result||Wo.error(`${navigator.userAgent} ${j3(Xs.detail,!1)}`),MZ(t),Ir.addNumber({key:523800,value:Date.now()-i}),Xs;if(Xs.result&&Xs.detail.isH264EncodeSupported&&Xs.detail.isVp8EncodeSupported&&Xs.detail.isH265EncodeSupported&&Xs.detail.isH264DecodeSupported&&Xs.detail.isVp8DecodeSupported&&Xs.detail.isH265DecodeSupported)return Xs;const h=E4(),{encode:f,decode:w}=await yIA();let{h264:_,vp8:G}=f,{h264:U}=w;const{h265:j}=f,{vp8:lA,h265:sA}=w;if(!_||!G){const mA=await h4();Wo.warn(`detect encode again h264:${_} vp8:${G} result: ${JSON.stringify(mA)}`),_=mA.isH264EncodeSupported,G=mA.isVp8EncodeSupported}if(_&&U&&aC&&tD&&!CT&&!Bm&&(!pV||iD!==115)){const{encode:mA,decode:IA}=await X7();_=mA,U=IA}return Xs.result=h&&r&&l&&(_||G)&&(U||lA),Xs.detail.isBrowserSupported=h,Xs.detail.isWebRTCSupported=r,Xs.detail.isH264EncodeSupported=_,Xs.detail.isVp8EncodeSupported=G,Xs.detail.isH265EncodeSupported=j,Xs.detail.isH264DecodeSupported=U,Xs.detail.isVp8DecodeSupported=lA,Xs.detail.isH265DecodeSupported=sA,Xs.result||Wo.error(`${navigator.userAgent} ${j3(Xs.detail,!1)}`),MZ(),Ir.addNumber({key:523800,value:Date.now()-i}),Xs}),DIA=function(){return Xs.result},B4=function(){return!(!navigator.mediaDevices||!navigator.mediaDevices.getDisplayMedia)},SIA=typeof HTMLMediaElement<"u"&&"setSinkId"in HTMLMediaElement.prototype,DZ=null;async function X7(t=2e3){return DZ||(DZ=new Promise(async i=>{const r={encode:!1,decode:!1};let l=()=>{};try{const I=document.createElement("canvas"),h=I.getContext("2d");I.width=640,I.height=480;const f=setInterval(()=>{h.fillText("test",Math.floor(640*Math.random()),Math.floor(480*Math.random()))},66);let w=-1,_=-1;l=()=>{clearInterval(w),clearInterval(f),clearTimeout(_),U.close(),j.close(),G.getTracks().forEach(cA=>cA.stop())},_=setTimeout(()=>{l(),i(r)},t);const G=I.captureStream(),U=new RTCPeerConnection({}),j=new RTCPeerConnection({offerToReceiveAudio:!0,offerToReceiveVideo:!0});U.addEventListener("icecandidate",cA=>j.addIceCandidate(cA.candidate)),j.addEventListener("icecandidate",cA=>U.addIceCandidate(cA.candidate)),U.addTrack(G.getVideoTracks()[0],G);const lA=await U.createOffer();await U.setLocalDescription(lA),await j.setRemoteDescription(lA);const sA=await j.createAnswer(),mA=fZ.default.parse(sA.sdp),IA=mA.media[0].rtp.findIndex(cA=>cA.codec==="H264");mA.media[0].rtp=[mA.media[0].rtp[IA]],mA.media[0].fmtp=mA.media[0].fmtp.filter(cA=>cA.payload===mA.media[0].rtp[0].payload),mA.media[0].rtcpFb&&(mA.media[0].rtcpFb=mA.media[0].rtcpFb.filter(cA=>cA.payload===mA.media[0].rtp[0].payload)),sA.sdp=fZ.default.write(mA),await j.setLocalDescription(sA),await U.setRemoteDescription(sA),w=setInterval(async()=>{r.encode&&r.decode&&(l(),i(r));const[cA,TA]=await Promise.all([U.getSenders()[0].getStats(),j.getReceivers()[0].getStats()]);r.encode||cA.forEach(WA=>{WA.type==="outbound-rtp"&&(WA.mediaType===$t.VIDEO||WA.kind===$t.VIDEO)&&WA.bytesSent>0&&(r.encode=!0)}),r.decode||TA.forEach(WA=>{WA.type==="inbound-rtp"&&(WA.mediaType===$t.VIDEO||WA.kind===$t.VIDEO)&&WA.bytesReceived>0&&(r.decode=!0)})},100)}catch(I){l(),Wo.warn("detectH264Supported failed",I),i({encode:!0,decode:!0})}}).then(i=>(i.encode||(i.decode=!0),i.encode&&i.decode||Wo.warn(`detectH264Supported encode: ${i.encode} decode: ${i.decode} ${tIA}`),i)))}var SZ=null;async function MIA(){return SZ||(SZ=new Promise(async t=>{const i={isH264EncodeSupported:!1,isH264DecodeSupported:!1,isVp8EncodeSupported:!1,isVp8DecodeSupported:!1};if(!d4())return void t(i);let r=null,l=null,I=null;const h=()=>{I&&clearTimeout(I),r=null,l=null};try{r=document.createElement("canvas"),l=r.getContext("2d"),r.width=320,r.height=240;let f=0;const w=()=>{l&&r&&(l.fillStyle=`hsl(${f%360}, 50%, 50%)`,l.fillRect(0,0,r.width,r.height),l.fillStyle="white",l.font="20px Arial",l.fillText(`Frame ${f}`,10,30),f++)};I=setTimeout(()=>{h(),t(i)},5e3);const _=[{type:"h264",encodeConfig:{codec:"avc1.42E01E",avc:{format:"annexb"},width:320,height:240,bitrate:1e6},decodeConfig:{codec:"avc1.42E01E",avc:{format:"annexb"}}},{type:"vp8",encodeConfig:{codec:"vp8",width:320,height:240,bitrate:1e6},decodeConfig:{codec:"vp8"}}];(await Promise.all(_.map(async G=>{const U={type:G.type,encodeSupported:!1,decodeSupported:!1};let j;try{j=await new Promise(async(lA,sA)=>{try{const mA=new VideoEncoder({output:cA=>{lA(cA),U.encodeSupported=!0},error:sA});mA.configure(G.encodeConfig),w();const IA=new VideoFrame(r,{timestamp:0});mA.encode(IA,{keyFrame:!0}),IA.close(),await mA.flush(),mA.close()}catch(mA){sA(mA)}})}catch(lA){return Wo.warn(`${G.type} encoder error:`,lA),U}try{await new Promise(async(lA,sA)=>{try{const mA=new VideoDecoder({output:IA=>{U.decodeSupported=!0,lA(0),IA.close()},error:sA});mA.configure(G.decodeConfig),mA.decode(j),await mA.flush(),mA.close()}catch(mA){sA(mA)}})}catch(lA){Wo.warn(`${G.type} decoder error:`,lA)}return U}))).forEach(G=>{G.type==="h264"?(i.isH264EncodeSupported=G.encodeSupported,i.isH264DecodeSupported=G.decodeSupported):G.type==="vp8"&&(i.isVp8EncodeSupported=G.encodeSupported,i.isVp8DecodeSupported=G.decodeSupported)}),h(),t(i)}catch(f){h(),Wo.warn("detectWebCodecsSupported failed:",f),t(i)}}))}var vIA=(t,i,r)=>{location.protocol!=="http:"||TY||(t[i]=()=>{throw new ml({code:qg.INVALID_OPERATION,message:x_.NOT_SUPPORTED_HTTP})})},RIA=function(t){return!(t.type!=="candidate-pair"||!t.nominated||t.state!=="in-progress"&&t.state!=="succeeded")&&!(fv(t.selected)&&!t.selected)};function $7(){let t="";return screen.width&&(t+=`${screen.width?screen.width*window.devicePixelRatio:""} * ${screen.height?screen.height*window.devicePixelRatio:""}`),t}function A$(){return navigator.getUserMedia||navigator.mediaDevices&&navigator.mediaDevices.getUserMedia}function e$(){const t={isSupported:!1},i=["AudioContext","webkitAudioContext","mozAudioContext","msAudioContext"];for(let r=0;r=86,c$="RTCRtpScriptTransform"in window,UIA=HU&&(g$||c$),Q4=function(){return["RTCPeerConnection","webkitRTCPeerConnection","RTCIceGatherer"].filter(t=>t in window).length>0};function l$(){const t={AudioDecoder:!1,AudioEncoder:!1,VideoDecoder:!1,VideoEncoder:!1,ImageDecoder:!1};return $n(window.AudioDecoder)||(t.AudioDecoder=!0),$n(window.AudioEncoder)||(t.AudioEncoder=!0),$n(window.VideoDecoder)||(t.VideoDecoder=!0),$n(window.VideoEncoder)||(t.VideoEncoder=!0),$n(window.ImageDecoder)||(t.ImageDecoder=!0),t}function I$(){return"mediaSession"in navigator&&!$n(navigator.mediaSession.setActionHandler)}function u$(){return!$n(window.WebTransport)}function FIA(){return typeof WebAssembly<"u"&&WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]))}function OIA(){const t={browser:`${yv.name}/${yv.version}`,os:x7(),displayResolution:$7(),isScreenShareSupported:B4(),isWebRTCSupported:Q4(),isGetUserMediaSupported:A$(),isWebAudioSupported:e$(),isWebSocketsSupported:"WebSocket"in window&&window.WebSocket.CLOSING===2,isWebCodecSupported:l$(),isMediaSessionSupported:I$(),isWebTransportSupported:u$()};return navigator.userAgent.includes("miniProgram")&&(t.browser=`mini/${t.browser}`),t}var E$="checkResult";function MZ(t=30){K7.setItem(E$+t,{ua:navigator.userAgent,checkResult:Xs})}function PIA(t){mV();const i=K7.getItem(E$+t);i&&i.ua===navigator.userAgent&&i.checkResult&&xIA(i.checkResult.detail,Xs.detail)&&(Xs=i.checkResult),Z7(t)}function xIA(t,i){return!!Cv(t)&&Object.keys(i).every(r=>r in t)}function p4(){return"requestVideoFrameCallback"in HTMLVideoElement.prototype}var YIA="RTCRtpReceiver"in window&&"jitterBufferTarget"in window.RTCRtpReceiver.prototype;function vZ(t){return{h264:1,h265:2,vp8:3,vp9:4,av1:5}[t]}var RZ=!1;async function VIA(){var t;try{if(RZ||!((t=navigator?.mediaCapabilities)!=null&&t.encodingInfo))return;const i=u4(),r=oIA();if(i===0||r===0)return;RZ=!0;const l=["H264","VP8","VP9","AV1","H265"],[I,h]=await Promise.all([d$(l),C$(l)]);I&&Object.keys(I).forEach(_=>{const G=vZ(_.toLowerCase());Ir.addEnum({key:513707,value:+`${G}${+I[_].supported}${+I[_].powerEfficient}${i}${r}`,useUV:!1})}),h&&Object.keys(h).forEach(_=>{const G=vZ(_.toLowerCase());Ir.addEnum({key:514713,value:+`${G}${+h[_].supported}${+h[_].powerEfficient}${i}${r}`,useUV:!1})});const{sender:f,receiver:w}=h$();Ir.addEnum({key:513708,value:+`${i}${r}${+f.high}`,useUV:!1}),Ir.addEnum({key:513709,value:+`${i}${r}${+f.main}`,useUV:!1}),Ir.addEnum({key:514714,value:+`${i}${r}${+w.high}`,useUV:!1}),Ir.addEnum({key:514715,value:+`${i}${r}${+w.main}`,useUV:!1})}catch(i){Wo.info("detectVideoCodecCapabilities failed",i)}}async function d$(t,i=1920,r=1080,l=30,I=3e3){const h={};try{for(const f of t){const w=await navigator.mediaCapabilities.encodingInfo({type:"webrtc",video:{contentType:`video/${f}`,width:i,height:r,bitrate:I,framerate:l}});h[f]=w}}catch{}return h}async function C$(t,i=1920,r=1080,l=30,I=3e3){const h={};try{for(const f of t){const w=await navigator.mediaCapabilities.decodingInfo({type:"webrtc",video:{contentType:`video/${f}`,width:i,height:r,bitrate:I,framerate:l}});h[f]=w}}catch{}return h}function h$(){const t={sender:{base:!1,main:!1,high:!1},receiver:{base:!1,main:!1,high:!1}};try{if(RTCRtpSender&&typeof RTCRtpSender.getCapabilities=="function"){const i=RTCRtpSender.getCapabilities("video");i&&i.codecs&&i.codecs.filter(r=>r.mimeType.toLowerCase()==="video/h264").forEach(r=>{if(r.sdpFmtpLine){const l=r.sdpFmtpLine.match(/profile-level-id=([0-9a-fA-F]+)/);if(l&&l[1])switch(l[1].slice(0,2)){case"42":t.sender.base=!0;break;case"4d":t.sender.main=!0;break;case"64":t.sender.high=!0}}})}if(RTCRtpReceiver&&typeof RTCRtpReceiver.getCapabilities=="function"){const i=RTCRtpReceiver.getCapabilities("video");i&&i.codecs&&i.codecs.filter(r=>r.mimeType.toLowerCase()==="video/h264").forEach(r=>{if(r.sdpFmtpLine){const l=r.sdpFmtpLine.match(/profile-level-id=([0-9a-fA-F]+)/);if(l&&l[1])switch(l[1].slice(0,2)){case"42":t.receiver.base=!0;break;case"4d":t.receiver.main=!0;break;case"64":t.receiver.high=!0}}})}}catch(i){Wo.warn("get H264 profile levelId failed",i)}return t}var JIA=dT(PU()),wZ=Symbol("instance"),P1=Symbol("cacheResult"),Xj=class{constructor(t,i,r){this.oldState=t,this.newState=i,this.action=r,this.aborted=!1}abort(t){this.aborted=!0,nU.call(t,this.oldState,new Error(`action '${this.action}' aborted`))}toString(){return`${this.action}ing`}},$j=class extends Error{constructor(t,i,r){super(i),this.state=t,this.message=i,this.cause=r}};function HIA(t){return typeof t=="object"&&t&&"then"in t}var sU=new Map;function Du(t,i,r={}){return(l,I,h)=>{const f=r.action||I;if(!r.context){const _=sU.get(l)||[];sU.has(l)||sU.set(l,_),_.push({from:t,to:i,action:f})}const w=h.value;h.value=function(..._){let G=this;if(r.context&&(G=Xn.get(typeof r.context=="function"?r.context.call(this,..._):r.context)),G.state===i)return r.sync?G[P1]:Promise.resolve(G[P1]);G.state instanceof Xj&&G.state.action==r.abortAction&&G.state.abort(G);let U=null;Array.isArray(t)?t.length==0?G.state instanceof Xj&&G.state.abort(G):typeof G.state=="string"&&t.includes(G.state)||(U=new $j(G._state,`${G.name} ${f} to ${i} failed: current state ${G._state} not from ${t.join("|")}`)):t!==G.state&&(U=new $j(G._state,`${G.name} ${f} to ${i} failed: current state ${G._state} not from ${t}`));const j=cA=>{if(r.fail&&r.fail.call(this,cA),r.sync){if(r.ignoreError)return cA;throw cA}return r.ignoreError?Promise.resolve(cA):Promise.reject(cA)};if(U)return j(U);const lA=G.state,sA=new Xj(lA,i,f);nU.call(G,sA);const mA=cA=>{var TA;return G[P1]=cA,sA.aborted||(nU.call(G,i),(TA=r.success)===null||TA===void 0||TA.call(this,G[P1])),cA},IA=cA=>(nU.call(G,lA,cA),j(cA));try{const cA=w.apply(this,_);return HIA(cA)?cA.then(mA).catch(IA):r.sync?mA(cA):Promise.resolve(mA(cA))}catch(cA){return IA(new $j(G._state,`${G.name} ${f} from ${t} to ${i} failed: ${cA}`,cA instanceof Error?cA:new Error(String(cA))))}}}}var qIA=typeof window<"u"&&window.__AFSM__?(r,l)=>{window.dispatchEvent(new CustomEvent(r,{detail:l}))}:typeof importScripts<"u"?(r,l)=>{postMessage({type:r,payload:l})}:()=>{};function nU(t,i){const r=this._state;this._state=t;const l=t.toString();t&&this.emit(l,r),this.emit(Xn.STATECHANGED,t,r,i),this.updateDevTools({value:t,old:r,err:i instanceof Error?i.message:String(i)})}var Xn=class WC extends JIA.default{constructor(i,r,l){super(),this.name=i,this.groupName=r,this._state=WC.INIT,i||(i=Date.now().toString(36)),l?Object.setPrototypeOf(this,l):l=Object.getPrototypeOf(this),r||(this.groupName=this.constructor.name);const I=l[wZ];I?this.name=I.name+"-"+I.count++:l[wZ]={name:this.name,count:0},this.updateDevTools({diagram:this.stateDiagram})}get stateDiagram(){const i=Object.getPrototypeOf(this),r=sU.get(i)||[];let l=new Set,I=[],h=[];const f=new Set,w=Object.getPrototypeOf(i);sU.has(w)&&(w.stateDiagram.forEach(G=>l.add(G)),w.allStates.forEach(G=>f.add(G))),r.forEach(({from:G,to:U,action:j})=>{typeof G=="string"?I.push({from:G,to:U,action:j}):G.length?G.forEach(lA=>{I.push({from:lA,to:U,action:j})}):h.push({to:U,action:j})}),I.forEach(({from:G,to:U,action:j})=>{f.add(G),f.add(U),f.add(j+"ing"),l.add(`${G} --> ${j}ing : ${j}`),l.add(`${j}ing --> ${U} : ${j} 🟢`),l.add(`${j}ing --> ${G} : ${j} 🔴`)}),h.forEach(({to:G,action:U})=>{l.add(`${U}ing --> ${G} : ${U} 🟢`),f.forEach(j=>{j!==G&&l.add(`${j} --> ${U}ing : ${U}`)})});const _=[...l];return Object.defineProperties(i,{stateDiagram:{value:_},allStates:{value:f}}),_}static get(i){let r;return typeof i=="string"?(r=WC.instances.get(i),r||WC.instances.set(i,r=new WC(i,void 0,Object.create(WC.prototype)))):(r=WC.instances2.get(i),r||WC.instances2.set(i,r=new WC(i.constructor.name,void 0,Object.create(WC.prototype)))),r}static getState(i){var r;return(r=WC.get(i))===null||r===void 0?void 0:r.state}updateDevTools(i={}){qIA(WC.UPDATEAFSM,Object.assign({name:this.name,group:this.groupName},i))}get state(){return this._state}set state(i){nU.call(this,i)}};Xn.STATECHANGED="stateChanged",Xn.UPDATEAFSM="updateAFSM",Xn.INIT="[*]",Xn.ON="on",Xn.OFF="off",Xn.instances=new Map,Xn.instances2=new WeakMap;var m4=typeof window<"u",_Z=m4&&window.requestIdleCallback||function(t){const i=Date.now();return setTimeout(()=>{t({didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-i))})},1e3)},KIA=m4&&window.cancelIdleCallback||function(t){clearTimeout(t)},TZ=m4&&(window.cancelAnimationFrame||window.mozCancelAnimationFrame),FL=class hE{static generateTaskID(){return this.currentTaskID++}static run(i,r,l){l?.fps&&(l.delay=l.delay||Number((1e3/l.fps).toFixed(2))),l=Rn(Rn({},i==="interval"?{delay:2e3,count:0,backgroundTask:!0}:i==="ric"?{delay:1e4,count:0}:i==="raf"?{fps:60,delay:16.6,count:0,backgroundTask:!0}:{delay:2e3,count:0,backgroundTask:!0}),l);const I=nB(Rn({taskID:this.generateTaskID(),loopCount:0,intervalID:null,timeoutID:null,rafID:null,ricID:null,taskName:i,callback:r},l),{delay:l.delay});return this.taskMap.set(I.taskID,I),this[i](I),I.taskID}static interval(i){return i.intervalID=setInterval(()=>{i.callback(),i.loopCount+=1,hE.isBreakLoop(i)},i.delay)}static intervalInWorker(i){hE.sharedWorker||(hE.sharedWorker=new Worker(URL.createObjectURL(new Blob([` +`,L+=C)),I&&(L+=` +Refer to: ${JZ("en",w)} +`),L}var HZ=mT($cA()),qIA=1,KIA=0,h$=class{constructor(t=!0){Be(this,"countMap",new Map),Be(this,"distributionMap",new Map),Be(this,"version"),Be(this,"log",Wo.createLogger({id:"kv"})),t&&(ms.on("102",({track:i,cost:n})=>{this.addSuccessEvent({key:i.kind===ei.AUDIO?501700:511700,cost:n})}),ms.on("103",({track:i,error:n})=>{this.addFailedEvent({key:i.kind===ei.AUDIO?501700:511700,error:n})}),ms.on("266",({enable:i})=>{this.log.info((i?"enable":"disable")+" sso"),i?this.addSuccessEvent({key:525701}):this.addFailedEvent({key:525701})}))}getReportData(t,i){const n={msg_sdk_basic_info:{uint32_sdk_version:v7(this.version||UY),uint32_terminal_type:15,bytes_device_name:"",bytes_os_version:"",uint32_framework:30,uint32_network_type:0},stats_count:[...this.countMap.entries()].map(([c,I])=>({uint32_key:c,uint32_count:I})),stats_distribution:[...this.distributionMap.entries()].map(([c,I])=>({uint32_key:c,distribution_items:[...I.entries()].map(([C,f])=>({uint32_item_key:C,uint32_item_value:f}))})),str_user_sig:t,bytes_report_token:i};return this.countMap.clear(),this.distributionMap.clear(),n}clear(){this.countMap.clear(),this.distributionMap.clear()}isEnumKey(t){const i=+String(t).slice(-3);return i>=700&&i<799}isErrorCodeKey(t){const i=+String(t).slice(-3);return i>=600&&i<699}isCountKey(t){const i=+String(t).slice(-3);return i>=0&&i<599}isNumberKey(t){const i=+String(t).slice(-3);return i>=800&&i<899}addCount({key:t,useUV:i=!1}){this.isCountKey(t)?i&&this.countMap.has(t)||this.countMap.set(t,(this.countMap.get(t)||0)+1):this.log.debug(`${t} is not count key, last 3 number should be 0~599`)}addEnum({key:t,value:i,useUV:n=!0}){var c;if(!this.isEnumKey(t))return this.log.debug(`${t} is not enum key, last 3 number should be 700~799`);if(n&&this.countMap.has(t))return;this.countMap.set(t,(this.countMap.get(t)||0)+1);const I=((c=this.distributionMap)==null?void 0:c.get(t))||new Map;I.set(i,(I.get(i)||0)+1),this.distributionMap.set(t,I)}addNumber({key:t,value:i,split:n=100,useUV:c=!1,max:I=5e3}){var C;if(!this.isNumberKey(t))return this.log.debug(`${t} is not number key, last 3 number should be 800~899`);if(c&&this.countMap.has(t))return;i>I&&(i=I),this.countMap.set(t,(this.countMap.get(t)||0)+1);const f=((C=this.distributionMap)==null?void 0:C.get(t))||new Map;let w=0;if(Lv(n))w=Math.floor(i/n);else for(let _=n.length-1;_>0;_--)if(i>n[_]){w=_;break}f.set(w,(f.get(w)||0)+1),this.distributionMap.set(t,f)}addSuccessEvent({key:t,cost:i,timeKey:n,split:c}){if(t&&(this.addEnum({key:t,value:qIA,useUV:!1}),i)){const I=+String(t).slice(-3);I<800&&I>=700?this.addNumber({key:n||t+100,value:i,split:c}):n||this.log.debug(`time stat ignored, ${t}`)}}addFailedEvent({key:t,error:i}){if(!t)return;let n=qg.UNKNOWN;i&&(Lv(i)?n=i:er(i.extraCode)&&er(i.code)||(n=i.extraCode||i.code)),this.addEnum({key:t,value:KIA,useUV:!1}),this.addEnum({key:t,value:Math.abs(n),useUV:!1})}},B$=(t=>(t[t.DECODER_TYPE=514700]="DECODER_TYPE",t[t.DECODER_HW_SW=514701]="DECODER_HW_SW",t[t.DECODE_RESULT=514702]="DECODE_RESULT",t[t.DECODE_FAILED_OS=514703]="DECODE_FAILED_OS",t[t.DOWNGRADE_RESULT=514704]="DOWNGRADE_RESULT",t[t.DOWNGRADE_WEBCODECS_VIDEO=514705]="DOWNGRADE_WEBCODECS_VIDEO",t[t.DOWNGRADE_WEBCODECS_2D=514706]="DOWNGRADE_WEBCODECS_2D",t[t.DOWNGRADE_WASM_WEGBL=514707]="DOWNGRADE_WASM_WEGBL",t[t.DOWNGRADE_WASM_VIDEO=514708]="DOWNGRADE_WASM_VIDEO",t[t.DOWNGRADE_WASM_2D=514709]="DOWNGRADE_WASM_2D",t[t.DECODE_H264_RESULT=514710]="DECODE_H264_RESULT",t[t.DECODE_H265_RESULT=514711]="DECODE_H265_RESULT",t[t.DECODE_VP8_RESULT=514712]="DECODE_VP8_RESULT",t[t.DECODE_CAPABILITIES=514713]="DECODE_CAPABILITIES",t[t.H264_PROFILE_LEVEL_ID_HIGH=514714]="H264_PROFILE_LEVEL_ID_HIGH",t[t.H264_PROFILE_LEVEL_ID_MAIN=514715]="H264_PROFILE_LEVEL_ID_MAIN",t[t.RENDER_FREEZE_RATE=514850]="RENDER_FREEZE_RATE",t[t.DATA_FREEZE_RATE=514851]="DATA_FREEZE_RATE",t[t.VIDEO_CONSUME_RENDER_RATE=514852]="VIDEO_CONSUME_RENDER_RATE",t))(B$||{}),jIA=new h$(!0);new h$(!1);var dr=jIA,Xs={result:!1,detail:{isBrowserSupported:!1,isWebRTCSupported:!1,isWebCodecsSupported:!1,isMediaDevicesSupported:!1,isScreenShareSupported:!1,isSmallStreamSupported:!1,isH264EncodeSupported:!1,isVp8EncodeSupported:!1,isH265EncodeSupported:!1,isH264DecodeSupported:!1,isVp8DecodeSupported:!1,isH265DecodeSupported:!1}},WIA=new Map([[rC,["Firefox",F7]],[_V,["Edg",x7]],[G4,["Chrome",n$]],[ld,["Safari",AF]],[mm,["TBS",J7]],[fT,["XWEB",H7]],[$U&&wV,["WeChat",q7]],[S4,["QQ(Win)",K7]],[NV,["QQ(Mobile)",xY]],[TV,["QQ(Mobile X5)",xY]],[M4,["QQ(Mac)",j7]],[v4,["QQ(iPad)",W7]],[R4,["MI",$7]],[w4,["HW",e$]],[_4,["Samsung",t$]],[bV,["OPPO",i$]],[T4,["VIVO",o$]],[XU,["EDGE",P7]],[y4,["SogouMobile",Y7]],[D4,["Sogou",V7]]]);function zIA(){const t=WIA.get(!0);return{browserName:t?t[0]:"unknown",browserVersion:t?t[1]:"unknown"}}var k4=function(){return!yIA&&!XU&&!(_V&&mIA<80)&&!(rC&&O7<56)},L4=function(){return["VideoDecoder","VideoEncoder","AudioEncoder","AudioDecoder"].every(t=>t in window)},U4=function(){if(!navigator.mediaDevices)return kV()||Wo.error(J_.NOT_SUPPORTED_MEDIA),!1;const t=["getUserMedia","enumerateDevices"];return t.filter(i=>i in navigator.mediaDevices).length===t.length},qZ=!1;function kV(){return location.protocol==="http:"&&!VY&&(qZ||Wo.error(HY({key:JY.NOT_SUPPORTED_HTTP})),qZ=!0,!0)}var ZIA=function(){return window?.OffscreenCanvas&&window?.MediaStreamTrackProcessor&&window?.MediaStreamTrackGenerator},XIA=function(){return!!window?.MediaStreamTrackGenerator},F4=async function(){var t,i,n;if(Xs.detail.isH264EncodeSupported&&Xs.detail.isVp8EncodeSupported)return{isH264EncodeSupported:Xs.detail.isH264EncodeSupported,isVp8EncodeSupported:Xs.detail.isVp8EncodeSupported,isH265EncodeSupported:Xs.detail.isH265EncodeSupported};let c,I=!1,C=!1,f=!1;try{const w=new RTCPeerConnection,_=document.createElement(ei.CANVAS);_.getContext("2d");const N=_.captureStream(0);return w.addTrack(N.getVideoTracks()[0],N),c=await w.createOffer(),I=((t=c.sdp)==null?void 0:t.toLowerCase().indexOf("h264"))!==-1,C=((i=c.sdp)==null?void 0:i.toLowerCase().indexOf("vp8"))!==-1,f=((n=c.sdp)==null?void 0:n.toLowerCase().indexOf("h265"))!==-1,w.close(),{isH264EncodeSupported:I,isVp8EncodeSupported:C,isH265EncodeSupported:f}}catch{return{isH264EncodeSupported:!1,isVp8EncodeSupported:!1,isH265EncodeSupported:!1}}},Q$=async function(){var t;if(Xs.detail.isH264DecodeSupported&&Xs.detail.isVp8DecodeSupported)return{isH264DecodeSupported:Xs.detail.isH264DecodeSupported,isVp8DecodeSupported:Xs.detail.isVp8DecodeSupported,isH265DecodeSupported:Xs.detail.isH265DecodeSupported};let i,n=!1,c=!1;try{const I=new RTCPeerConnection;LV()?(I.addTransceiver(ei.VIDEO,{direction:"recvonly"}),i=await I.createOffer()):i=await I.createOffer({offerToReceiveVideo:!0}),i.sdp.toLowerCase().indexOf("h264")!==-1&&(n=!0),i.sdp.toLowerCase().indexOf("vp8")!==-1&&(c=!0);const C=((t=i.sdp)==null?void 0:t.toLowerCase().indexOf("h265"))!==-1;return I.close(),{isH264DecodeSupported:n,isVp8DecodeSupported:c,isH265DecodeSupported:C}}catch{return{isH264DecodeSupported:!1,isVp8DecodeSupported:!1,isH265DecodeSupported:!1}}};async function $IA(){const[t,i]=await Promise.all([F4(),Q$()]);return{encode:{h264:t.isH264EncodeSupported,vp8:t.isVp8EncodeSupported,h265:t.isH265EncodeSupported},decode:{h264:i.isH264DecodeSupported,vp8:i.isVp8DecodeSupported,h265:i.isH265DecodeSupported}}}var p$=w7(async t=>{const i=Date.now(),n=P4(),c=U4(),I=L4();if(Xs.detail.isWebRTCSupported=n,Xs.detail.isMediaDevicesSupported=c,Xs.detail.isWebCodecsSupported=I,Xs.detail.isScreenShareSupported=O4(),Xs.detail.isSmallStreamSupported=R$(),t===37)return Object.assign(Xs.detail,await tuA()),Xs.detail.isBrowserSupported=I,Xs.result=c&&I,Xs.result||Wo.error(`${navigator.userAgent} ${cW(Xs.detail,!1)}`),WZ(t),dr.addNumber({key:523800,value:Date.now()-i}),Xs;if(Xs.result&&Xs.detail.isH264EncodeSupported&&Xs.detail.isVp8EncodeSupported&&Xs.detail.isH265EncodeSupported&&Xs.detail.isH264DecodeSupported&&Xs.detail.isVp8DecodeSupported&&Xs.detail.isH265DecodeSupported)return Xs;const C=k4(),{encode:f,decode:w}=await $IA();let{h264:_,vp8:N}=f,{h264:L}=w;const{h265:q}=f,{vp8:lA,h265:tA}=w;if(!_||!N){const BA=await F4();Wo.warn(`detect encode again h264:${_} vp8:${N} result: ${JSON.stringify(BA)}`),_=BA.isH264EncodeSupported,N=BA.isVp8EncodeSupported}if(_&&L&&cC&&sD&&!fT&&!mm&&(!bV||nD!==115)){const{encode:BA,decode:IA}=await m$();_=BA,L=IA}return Xs.result=C&&n&&c&&(_||N)&&(L||lA),Xs.detail.isBrowserSupported=C,Xs.detail.isWebRTCSupported=n,Xs.detail.isH264EncodeSupported=_,Xs.detail.isVp8EncodeSupported=N,Xs.detail.isH265EncodeSupported=q,Xs.detail.isH264DecodeSupported=L,Xs.detail.isVp8DecodeSupported=lA,Xs.detail.isH265DecodeSupported=tA,Xs.result||Wo.error(`${navigator.userAgent} ${cW(Xs.detail,!1)}`),WZ(),dr.addNumber({key:523800,value:Date.now()-i}),Xs}),AuA=function(){return Xs.result},O4=function(){return!(!navigator.mediaDevices||!navigator.mediaDevices.getDisplayMedia)},euA=typeof HTMLMediaElement<"u"&&"setSinkId"in HTMLMediaElement.prototype,KZ=null;async function m$(t=2e3){return KZ||(KZ=new Promise(async i=>{const n={encode:!1,decode:!1};let c=()=>{};try{const I=document.createElement("canvas"),C=I.getContext("2d");I.width=640,I.height=480;const f=setInterval(()=>{C.fillText("test",Math.floor(640*Math.random()),Math.floor(480*Math.random()))},66);let w=-1,_=-1;c=()=>{clearInterval(w),clearInterval(f),clearTimeout(_),L.close(),q.close(),N.getTracks().forEach(gA=>gA.stop())},_=setTimeout(()=>{c(),i(n)},t);const N=I.captureStream(),L=new RTCPeerConnection({}),q=new RTCPeerConnection({offerToReceiveAudio:!0,offerToReceiveVideo:!0});L.addEventListener("icecandidate",gA=>q.addIceCandidate(gA.candidate)),q.addEventListener("icecandidate",gA=>L.addIceCandidate(gA.candidate)),L.addTrack(N.getVideoTracks()[0],N);const lA=await L.createOffer();await L.setLocalDescription(lA),await q.setRemoteDescription(lA);const tA=await q.createAnswer(),BA=HZ.default.parse(tA.sdp),IA=BA.media[0].rtp.findIndex(gA=>gA.codec==="H264");BA.media[0].rtp=[BA.media[0].rtp[IA]],BA.media[0].fmtp=BA.media[0].fmtp.filter(gA=>gA.payload===BA.media[0].rtp[0].payload),BA.media[0].rtcpFb&&(BA.media[0].rtcpFb=BA.media[0].rtcpFb.filter(gA=>gA.payload===BA.media[0].rtp[0].payload)),tA.sdp=HZ.default.write(BA),await q.setLocalDescription(tA),await L.setRemoteDescription(tA),w=setInterval(async()=>{n.encode&&n.decode&&(c(),i(n));const[gA,RA]=await Promise.all([L.getSenders()[0].getStats(),q.getReceivers()[0].getStats()]);n.encode||gA.forEach(HA=>{HA.type==="outbound-rtp"&&(HA.mediaType===ei.VIDEO||HA.kind===ei.VIDEO)&&HA.bytesSent>0&&(n.encode=!0)}),n.decode||RA.forEach(HA=>{HA.type==="inbound-rtp"&&(HA.mediaType===ei.VIDEO||HA.kind===ei.VIDEO)&&HA.bytesReceived>0&&(n.decode=!0)})},100)}catch(I){c(),Wo.warn("detectH264Supported failed",I),i({encode:!0,decode:!0})}}).then(i=>(i.encode||(i.decode=!0),i.encode&&i.decode||Wo.warn(`detectH264Supported encode: ${i.encode} decode: ${i.decode} ${NIA}`),i)))}var jZ=null;async function tuA(){return jZ||(jZ=new Promise(async t=>{const i={isH264EncodeSupported:!1,isH264DecodeSupported:!1,isVp8EncodeSupported:!1,isVp8DecodeSupported:!1};if(!L4())return void t(i);let n=null,c=null,I=null;const C=()=>{I&&clearTimeout(I),n=null,c=null};try{n=document.createElement("canvas"),c=n.getContext("2d"),n.width=320,n.height=240;let f=0;const w=()=>{c&&n&&(c.fillStyle=`hsl(${f%360}, 50%, 50%)`,c.fillRect(0,0,n.width,n.height),c.fillStyle="white",c.font="20px Arial",c.fillText(`Frame ${f}`,10,30),f++)};I=setTimeout(()=>{C(),t(i)},5e3);const _=[{type:"h264",encodeConfig:{codec:"avc1.42E01E",avc:{format:"annexb"},width:320,height:240,bitrate:1e6},decodeConfig:{codec:"avc1.42E01E",avc:{format:"annexb"}}},{type:"vp8",encodeConfig:{codec:"vp8",width:320,height:240,bitrate:1e6},decodeConfig:{codec:"vp8"}}];(await Promise.all(_.map(async N=>{const L={type:N.type,encodeSupported:!1,decodeSupported:!1};let q;try{q=await new Promise(async(lA,tA)=>{try{const BA=new VideoEncoder({output:gA=>{lA(gA),L.encodeSupported=!0},error:tA});BA.configure(N.encodeConfig),w();const IA=new VideoFrame(n,{timestamp:0});BA.encode(IA,{keyFrame:!0}),IA.close(),await BA.flush(),BA.close()}catch(BA){tA(BA)}})}catch(lA){return Wo.warn(`${N.type} encoder error:`,lA),L}try{await new Promise(async(lA,tA)=>{try{const BA=new VideoDecoder({output:IA=>{L.decodeSupported=!0,lA(0),IA.close()},error:tA});BA.configure(N.decodeConfig),BA.decode(q),await BA.flush(),BA.close()}catch(BA){tA(BA)}})}catch(lA){Wo.warn(`${N.type} decoder error:`,lA)}return L}))).forEach(N=>{N.type==="h264"?(i.isH264EncodeSupported=N.encodeSupported,i.isH264DecodeSupported=N.decodeSupported):N.type==="vp8"&&(i.isVp8EncodeSupported=N.encodeSupported,i.isVp8DecodeSupported=N.decodeSupported)}),C(),t(i)}catch(f){C(),Wo.warn("detectWebCodecsSupported failed:",f),t(i)}}))}var iuA=(t,i,n)=>{location.protocol!=="http:"||VY||(t[i]=()=>{throw new fl({code:qg.INVALID_OPERATION,message:J_.NOT_SUPPORTED_HTTP})})},ouA=function(t){return!(t.type!=="candidate-pair"||!t.nominated||t.state!=="in-progress"&&t.state!=="succeeded")&&!(Sv(t.selected)&&!t.selected)};function f$(){let t="";return screen.width&&(t+=`${screen.width?screen.width*window.devicePixelRatio:""} * ${screen.height?screen.height*window.devicePixelRatio:""}`),t}function y$(){return navigator.getUserMedia||navigator.mediaDevices&&navigator.mediaDevices.getUserMedia}function D$(){const t={isSupported:!1},i=["AudioContext","webkitAudioContext","mozAudioContext","msAudioContext"];for(let n=0;n=86,G$="RTCRtpScriptTransform"in window,uuA=eF&&(N$||G$),P4=function(){return["RTCPeerConnection","webkitRTCPeerConnection","RTCIceGatherer"].filter(t=>t in window).length>0};function b$(){const t={AudioDecoder:!1,AudioEncoder:!1,VideoDecoder:!1,VideoEncoder:!1,ImageDecoder:!1};return er(window.AudioDecoder)||(t.AudioDecoder=!0),er(window.AudioEncoder)||(t.AudioEncoder=!0),er(window.VideoDecoder)||(t.VideoDecoder=!0),er(window.VideoEncoder)||(t.VideoEncoder=!0),er(window.ImageDecoder)||(t.ImageDecoder=!0),t}function k$(){return"mediaSession"in navigator&&!er(navigator.mediaSession.setActionHandler)}function L$(){return!er(window.WebTransport)}function EuA(){return typeof WebAssembly<"u"&&WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]))}function duA(){const t={browser:`${Mv.name}/${Mv.version}`,os:c$(),displayResolution:f$(),isScreenShareSupported:O4(),isWebRTCSupported:P4(),isGetUserMediaSupported:y$(),isWebAudioSupported:D$(),isWebSocketsSupported:"WebSocket"in window&&window.WebSocket.CLOSING===2,isWebCodecSupported:b$(),isMediaSessionSupported:k$(),isWebTransportSupported:L$()};return navigator.userAgent.includes("miniProgram")&&(t.browser=`mini/${t.browser}`),t}var U$="checkResult";function WZ(t=30){C$.setItem(U$+t,{ua:navigator.userAgent,checkResult:Xs})}function CuA(t){kV();const i=C$.getItem(U$+t);i&&i.ua===navigator.userAgent&&i.checkResult&&huA(i.checkResult.detail,Xs.detail)&&(Xs=i.checkResult),p$(t)}function huA(t,i){return!!Qv(t)&&Object.keys(i).every(n=>n in t)}function x4(){return"requestVideoFrameCallback"in HTMLVideoElement.prototype}var BuA="RTCRtpReceiver"in window&&"jitterBufferTarget"in window.RTCRtpReceiver.prototype;function zZ(t){return{h264:1,h265:2,vp8:3,vp9:4,av1:5}[t]}var ZZ=!1;async function QuA(){var t;try{if(ZZ||!((t=navigator?.mediaCapabilities)!=null&&t.encodingInfo))return;const i=b4(),n=bIA();if(i===0||n===0)return;ZZ=!0;const c=["H264","VP8","VP9","AV1","H265"],[I,C]=await Promise.all([F$(c),O$(c)]);I&&Object.keys(I).forEach(_=>{const N=zZ(_.toLowerCase());dr.addEnum({key:513707,value:+`${N}${+I[_].supported}${+I[_].powerEfficient}${i}${n}`,useUV:!1})}),C&&Object.keys(C).forEach(_=>{const N=zZ(_.toLowerCase());dr.addEnum({key:514713,value:+`${N}${+C[_].supported}${+C[_].powerEfficient}${i}${n}`,useUV:!1})});const{sender:f,receiver:w}=P$();dr.addEnum({key:513708,value:+`${i}${n}${+f.high}`,useUV:!1}),dr.addEnum({key:513709,value:+`${i}${n}${+f.main}`,useUV:!1}),dr.addEnum({key:514714,value:+`${i}${n}${+w.high}`,useUV:!1}),dr.addEnum({key:514715,value:+`${i}${n}${+w.main}`,useUV:!1})}catch(i){Wo.info("detectVideoCodecCapabilities failed",i)}}async function F$(t,i=1920,n=1080,c=30,I=3e3){const C={};try{for(const f of t){const w=await navigator.mediaCapabilities.encodingInfo({type:"webrtc",video:{contentType:`video/${f}`,width:i,height:n,bitrate:I,framerate:c}});C[f]=w}}catch{}return C}async function O$(t,i=1920,n=1080,c=30,I=3e3){const C={};try{for(const f of t){const w=await navigator.mediaCapabilities.decodingInfo({type:"webrtc",video:{contentType:`video/${f}`,width:i,height:n,bitrate:I,framerate:c}});C[f]=w}}catch{}return C}function P$(){const t={sender:{base:!1,main:!1,high:!1},receiver:{base:!1,main:!1,high:!1}};try{if(RTCRtpSender&&typeof RTCRtpSender.getCapabilities=="function"){const i=RTCRtpSender.getCapabilities("video");i&&i.codecs&&i.codecs.filter(n=>n.mimeType.toLowerCase()==="video/h264").forEach(n=>{if(n.sdpFmtpLine){const c=n.sdpFmtpLine.match(/profile-level-id=([0-9a-fA-F]+)/);if(c&&c[1])switch(c[1].slice(0,2)){case"42":t.sender.base=!0;break;case"4d":t.sender.main=!0;break;case"64":t.sender.high=!0}}})}if(RTCRtpReceiver&&typeof RTCRtpReceiver.getCapabilities=="function"){const i=RTCRtpReceiver.getCapabilities("video");i&&i.codecs&&i.codecs.filter(n=>n.mimeType.toLowerCase()==="video/h264").forEach(n=>{if(n.sdpFmtpLine){const c=n.sdpFmtpLine.match(/profile-level-id=([0-9a-fA-F]+)/);if(c&&c[1])switch(c[1].slice(0,2)){case"42":t.receiver.base=!0;break;case"4d":t.receiver.main=!0;break;case"64":t.receiver.high=!0}}})}}catch(i){Wo.warn("get H264 profile levelId failed",i)}return t}var puA=mT(zU()),XZ=Symbol("instance"),z1=Symbol("cacheResult"),u3=class{constructor(t,i,n){this.oldState=t,this.newState=i,this.action=n,this.aborted=!1}abort(t){this.aborted=!0,dU.call(t,this.oldState,new Error(`action '${this.action}' aborted`))}toString(){return`${this.action}ing`}},E3=class extends Error{constructor(t,i,n){super(i),this.state=t,this.message=i,this.cause=n}};function muA(t){return typeof t=="object"&&t&&"then"in t}var EU=new Map;function Su(t,i,n={}){return(c,I,C)=>{const f=n.action||I;if(!n.context){const _=EU.get(c)||[];EU.has(c)||EU.set(c,_),_.push({from:t,to:i,action:f})}const w=C.value;C.value=function(..._){let N=this;if(n.context&&(N=Ar.get(typeof n.context=="function"?n.context.call(this,..._):n.context)),N.state===i)return n.sync?N[z1]:Promise.resolve(N[z1]);N.state instanceof u3&&N.state.action==n.abortAction&&N.state.abort(N);let L=null;Array.isArray(t)?t.length==0?N.state instanceof u3&&N.state.abort(N):typeof N.state=="string"&&t.includes(N.state)||(L=new E3(N._state,`${N.name} ${f} to ${i} failed: current state ${N._state} not from ${t.join("|")}`)):t!==N.state&&(L=new E3(N._state,`${N.name} ${f} to ${i} failed: current state ${N._state} not from ${t}`));const q=gA=>{if(n.fail&&n.fail.call(this,gA),n.sync){if(n.ignoreError)return gA;throw gA}return n.ignoreError?Promise.resolve(gA):Promise.reject(gA)};if(L)return q(L);const lA=N.state,tA=new u3(lA,i,f);dU.call(N,tA);const BA=gA=>{var RA;return N[z1]=gA,tA.aborted||(dU.call(N,i),(RA=n.success)===null||RA===void 0||RA.call(this,N[z1])),gA},IA=gA=>(dU.call(N,lA,gA),q(gA));try{const gA=w.apply(this,_);return muA(gA)?gA.then(BA).catch(IA):n.sync?BA(gA):Promise.resolve(BA(gA))}catch(gA){return IA(new E3(N._state,`${N.name} ${f} from ${t} to ${i} failed: ${gA}`,gA instanceof Error?gA:new Error(String(gA))))}}}}var fuA=typeof window<"u"&&window.__AFSM__?(n,c)=>{window.dispatchEvent(new CustomEvent(n,{detail:c}))}:typeof importScripts<"u"?(n,c)=>{postMessage({type:n,payload:c})}:()=>{};function dU(t,i){const n=this._state;this._state=t;const c=t.toString();t&&this.emit(c,n),this.emit(Ar.STATECHANGED,t,n,i),this.updateDevTools({value:t,old:n,err:i instanceof Error?i.message:String(i)})}var Ar=class XC extends puA.default{constructor(i,n,c){super(),this.name=i,this.groupName=n,this._state=XC.INIT,i||(i=Date.now().toString(36)),c?Object.setPrototypeOf(this,c):c=Object.getPrototypeOf(this),n||(this.groupName=this.constructor.name);const I=c[XZ];I?this.name=I.name+"-"+I.count++:c[XZ]={name:this.name,count:0},this.updateDevTools({diagram:this.stateDiagram})}get stateDiagram(){const i=Object.getPrototypeOf(this),n=EU.get(i)||[];let c=new Set,I=[],C=[];const f=new Set,w=Object.getPrototypeOf(i);EU.has(w)&&(w.stateDiagram.forEach(N=>c.add(N)),w.allStates.forEach(N=>f.add(N))),n.forEach(({from:N,to:L,action:q})=>{typeof N=="string"?I.push({from:N,to:L,action:q}):N.length?N.forEach(lA=>{I.push({from:lA,to:L,action:q})}):C.push({to:L,action:q})}),I.forEach(({from:N,to:L,action:q})=>{f.add(N),f.add(L),f.add(q+"ing"),c.add(`${N} --> ${q}ing : ${q}`),c.add(`${q}ing --> ${L} : ${q} 🟢`),c.add(`${q}ing --> ${N} : ${q} 🔴`)}),C.forEach(({to:N,action:L})=>{c.add(`${L}ing --> ${N} : ${L} 🟢`),f.forEach(q=>{q!==N&&c.add(`${q} --> ${L}ing : ${L}`)})});const _=[...c];return Object.defineProperties(i,{stateDiagram:{value:_},allStates:{value:f}}),_}static get(i){let n;return typeof i=="string"?(n=XC.instances.get(i),n||XC.instances.set(i,n=new XC(i,void 0,Object.create(XC.prototype)))):(n=XC.instances2.get(i),n||XC.instances2.set(i,n=new XC(i.constructor.name,void 0,Object.create(XC.prototype)))),n}static getState(i){var n;return(n=XC.get(i))===null||n===void 0?void 0:n.state}updateDevTools(i={}){fuA(XC.UPDATEAFSM,Object.assign({name:this.name,group:this.groupName},i))}get state(){return this._state}set state(i){dU.call(this,i)}};Ar.STATECHANGED="stateChanged",Ar.UPDATEAFSM="updateAFSM",Ar.INIT="[*]",Ar.ON="on",Ar.OFF="off",Ar.instances=new Map,Ar.instances2=new WeakMap;var Y4=typeof window<"u",$Z=Y4&&window.requestIdleCallback||function(t){const i=Date.now();return setTimeout(()=>{t({didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-i))})},1e3)},yuA=Y4&&window.cancelIdleCallback||function(t){clearTimeout(t)},A6=Y4&&(window.cancelAnimationFrame||window.mozCancelAnimationFrame),JL=class BE{static generateTaskID(){return this.currentTaskID++}static run(i,n,c){c?.fps&&(c.delay=c.delay||Number((1e3/c.fps).toFixed(2))),c=Rn(Rn({},i==="interval"?{delay:2e3,count:0,backgroundTask:!0}:i==="ric"?{delay:1e4,count:0}:i==="raf"?{fps:60,delay:16.6,count:0,backgroundTask:!0}:{delay:2e3,count:0,backgroundTask:!0}),c);const I=gB(Rn({taskID:this.generateTaskID(),loopCount:0,intervalID:null,timeoutID:null,rafID:null,ricID:null,taskName:i,callback:n},c),{delay:c.delay});return this.taskMap.set(I.taskID,I),this[i](I),I.taskID}static interval(i){return i.intervalID=setInterval(()=>{i.callback(),i.loopCount+=1,BE.isBreakLoop(i)},i.delay)}static intervalInWorker(i){BE.sharedWorker||(BE.sharedWorker=new Worker(URL.createObjectURL(new Blob([` const timers = new Map(); self.onmessage = function(e) { const { taskId, delay, type } = e.data; @@ -548,15 +548,15 @@ Refer to: ${mZ("en",w)} timers.delete(taskId); } }; - `],{type:"application/javascript"}))),hE.sharedWorker.onmessage=r=>{var l;if(r.data.type==="tick"){const I=hE.workerTasks.get(r.data.taskId);I&&(hE.isBreakLoop(I)?((l=hE.sharedWorker)==null||l.postMessage({type:"stop",taskId:I.taskID}),hE.workerTasks.delete(I.taskID)):(I.callback(),I.loopCount+=1))}}),hE.workerTasks.set(i.taskID,i),hE.sharedWorker.postMessage({taskId:i.taskID,delay:i.delay,type:"start"})}static timeout(i){const r=()=>{if(i.callback(),i.loopCount+=1,!hE.isBreakLoop(i))return i.timeoutID=setTimeout(r,i.delay)};return i.timeoutID=setTimeout(r,i.delay)}static ric(i){let r,l=Yc();const I=()=>{if(r=Yc()-l,r>=i.delay&&(l=Yc()-Math.floor(r%i.delay),i.callback(),i.loopCount+=1),!hE.isBreakLoop(i))return i.ricID=_Z(I,{timeout:i.delay})};return i.ricID=_Z(I,{timeout:i.delay})}static raf(i){let r,l=Yc();const I=()=>{if(document.hidden&&i.backgroundTask)return r=Yc()-l,l=Yc(),i.callback(),i.loopCount+=1,hE.isBreakLoop(i)?void 0:i.timeoutID=setTimeout(I,i.delay-Math.floor(r%i.delay));if(r=Yc()-l,r>=i.delay&&(l=Yc()-Math.floor(r%i.delay),i.callback(),i.loopCount+=1),!hE.isBreakLoop(i))return i.rafID=requestAnimationFrame(I)};if(i.rafID=requestAnimationFrame(I),i.backgroundTask){const h=()=>{if(document.hidden){const f=Yc()-l;f>=i.delay?I():i.timeoutID=setTimeout(I,i.delay-f)}};document.addEventListener("visibilitychange",h),i.onVisibilitychange=h,document.hidden&&h()}return i.taskID}static hasTask(i){return this.taskMap.has(i)}static clearTask(i){if(!this.taskMap.has(i))return!0;const{intervalID:r,timeoutID:l,rafID:I,ricID:h,onVisibilitychange:f}=this.taskMap.get(i);return r&&clearInterval(r),l&&clearTimeout(l),I&&TZ&&TZ(I),h&&KIA(h),f&&document.removeEventListener("visibilitychange",f),this.taskMap.delete(i),!0}static isBreakLoop(i){return!this.hasTask(i.taskID)||i.count!==0&&i.loopCount>=i.count&&(this.clearTask(i.taskID),!0)}};de(FL,"taskMap",new Map),de(FL,"currentTaskID",1),de(FL,"sharedWorker",null),de(FL,"workerTasks",new Map);var jIA=FL,yQ=jIA,Vn={LOAD_START:$t.LOADSTART,LOADED_DATA:$t.LOADEDDATA,LOADED_META_DATA:$t.LOADEDMETADATA,MEDIA_TRACK_CHANGED:"media-track-changed",PLAYER_STATE_CHANGED:"player-state-changed",ERROR:"error",AUTOPLAY_FAILED:"autoplay-failed",RESIZE:$t.RESIZE,TIME_UPDATE:"time-update",LEAVE_PICTURE_IN_PICTURE:$t.LEAVE_PICTURE_IN_PICTURE,ENTER_PICTURE_IN_PICTURE:$t.ENTER_PICTURE_IN_PICTURE,USER_RESUME_IN_PIP_OR_FULL_SCREEN:"user-resume-in-pip-or-full-screen",USER_PAUSE_IN_PIP_OR_FULL_SCREEN:"user-pause-in-pip-or-full-screen",ENTER_FULL_SCREEN:"enter-full-screen",LEAVE_FULL_SCREEN:"leave-full-screen",VOLUME_CHANGE:"volume-change",FIRST_FRAME_RENDER:"first-frame-render"},Z3={};qW(Z3,{create:()=>f4,remove:()=>yU});var rU=new WeakMap;function f4(t,i){rU.has(t)||rU.set(t,[]);const r=rU.get(t),l={add:(I,h)=>("addEventListener"in i?(r.push(i.removeEventListener.bind(i,I,h)),i.addEventListener(I,h)):(r.push(i.off.bind(i,I,h)),i.on(I,h)),l)};return l}function yU(t){const i=rU.get(t);i&&(i.forEach(r=>r()),rU.delete(t))}var WIA=class{constructor(){de(this,"_roomIdMap",new Map),de(this,"_configs"),typeof registerProcessor>"u"&&(this._configs={sdkAppId:"",userId:"",version:SY,env:Jj.QCLOUD,browserVersion:yv.name+yv.version,ua:navigator.userAgent})}setConfig({sdkAppId:t,env:i,userId:r,roomId:l}){t!==this._configs.sdkAppId&&(this._configs.sdkAppId=String(t)),this._configs.env=i,this._configs.userId=r,this._roomIdMap.set(r,String(l))}logSuccessEvent(t){!TY&&Wo.isAbleToUpload&&this._configs.env===Jj.QCLOUD&&this.uploadEventToKibana(nB(Rn({},t),{result:"success"}))}logFailedEvent(t){if(TY||!Wo.isAbleToUpload)return;const{eventType:i,code:r,error:l,userId:I}=t,h={roomId:this._roomIdMap.get(I||this._configs.userId),userId:I,eventType:i,result:"failed",code:r||l?.extraCode||l?.code||qg.UNKNOWN};this._configs.env===Jj.QCLOUD&&this.uploadEventToKibana(nB(Rn({},h),{error:l}))}uploadEventToKibana(t){let i=`stat-${t.eventType}-${t.result}`;t.eventType!=="delta-join"&&t.eventType!=="delta-leave"&&t.eventType!=="delta-publish"||(i=`${t.eventType}:${t.delta}`),this.uploadEvent({log:i,userId:t.userId}),t.result==="failed"&&(i=`stat-${t.eventType}-${t.result}-${t.code}`,this.uploadEvent({log:i,userId:t.userId,error:t.error}))}uploadEvent({log:t,userId:i,error:r}){const l={timestamp:YX(),sdkAppId:this._configs.sdkAppId,userId:i||this._configs.userId,version:SY,log:t};r&&(l.errorInfo=r.message,r.stack&&(l.errorInfo+=` -${r.stack}`));const I=z3.enable?XW(l,2002,Number(this._configs.sdkAppId)):JSON.stringify(l);this.sendRequest(WW(this._configs.sdkAppId,HX.LOG),I)}sendRequest(t,i){setTimeout(()=>l7({url:t,body:i,priority:"low"}).catch(()=>{}),2e3)}},oh=new WIA,sv=new WeakMap;function zIA({settings:t={retries:5,timeout:2e3},onError:i,onRetrying:r,onRetryFailed:l}){return function(I,h,f){const w=A4({retryFunction:f.value,settings:t,onError({error:_,retry:G,reject:U,retryFuncArgs:j}){var lA;i?i.call(this,_,()=>{var sA;(sA=sv.get(I))!=null&&sA.has(h)?G():U(_)},U,j):(lA=sv.get(I))!=null&&lA.has(h)?G():U(_)},onRetrying(_,G){var U;k_(r)&&r.call(this,_,G),(U=sv.get(I))!=null&&U.has(h)&&(sv.get(I).get(h).stopRetry=G)},onRetryFailed:l});return f.value=function(..._){const G=sv.get(I);return G?G.set(h,{args:_}):sv.set(I,new Map([[h,{args:_}]])),w.apply(this,_).finally(()=>{var U;return(U=sv.get(I))==null?void 0:U.delete(h)})},f}}var lv=class extends Xn{constructor(t,i){super(t.id,`${i}-player`),this.options=t,this.kind=i,de(this,"id"),de(this,"element",null),de(this,"track"),de(this,"url"),de(this,"attr"),de(this,"mode"),de(this,"muted"),de(this,"_log"),de(this,"isPausedByUserCall",!1),de(this,"_pausedRetryCount"),de(this,"_isElementPlayingFired",!1),de(this,"_interval"),de(this,"_delayDestroyTimeoutId",0),de(this,"_playSuccessResolve"),de(this,"_isReplayByRecreateMediaStreamCalled",!1),de(this,"isPlayCalled",!1),de(this,"isInAutoPlayFailedState",!1),de(this,"isBindAutoPlayEvent",!1),this.id=t.id,this._log=t.log,this.track=t.track,this.muted=t.muted,this._pausedRetryCount=b_,this._state="STOPPED",this.bindTrackEvents(),this._log.info(`create ${i}-player ${this.id}`)}get isPlaying(){var t;return this._state==="PLAYING"&&((t=this.element)==null?void 0:t.paused)===!1}get isPaused(){var t;return this._state==="PAUSED"||((t=this.element)==null?void 0:t.paused)===!0}get isStopped(){return this._state==="STOPPED"}setAttr(t){this.attr=t}setUrl(t){this.track&&(this.unbindTrackEvents(),this.element&&(this.element.srcObject=null),this.track=null),t!==this.url&&(this.url=t,t!==null&&this.element&&(this.element.crossOrigin="anonymous",this.element.src=t))}async play(){if(!this.isPlaying)try{this.isPlayCalled=!0,this._delayDestroyTimeoutId&&(clearTimeout(this._delayDestroyTimeoutId),this._delayDestroyTimeoutId=0,this.bindTrackEvents(),this.bindElementEvents()),this.bindAutoPlayEvent(),await new Promise((t,i)=>{this._playSuccessResolve=t,this.element.play().then(t,i)})}catch(t){const i=GY({key:NY.PLAY_FAILED,data:{media:this.kind,error:t}});if(this._log.warn(t),i.includes("NotAllowedError"))throw this.isInAutoPlayFailedState=!0,new ml({code:qg.PLAY_NOT_ALLOWED,message:i})}}stop(t=0){var i;this.isPlayCalled=!1,this.isPausedByUserCall=!1,this._isElementPlayingFired=!1,this.unbindEvents(),t>0&&!F7?this._delayDestroyTimeoutId||((i=this.element)==null||i.remove(),this._log.info(`destroy element after 3 * ${t}`),this._delayDestroyTimeoutId=setTimeout(()=>this.destroyElement(),3*t)):this.destroyElement(),this.handleStopped($t.ENDED),this._interval>0&&yQ.clearTask(this._interval)}destroyElement(){this.element&&(this._log.debug("destroy element"),this.element.remove(),this.element.src="",this.element.srcObject=null,this.element=null),clearTimeout(this._delayDestroyTimeoutId),this._delayDestroyTimeoutId=0}pause(){this._log.info("pause"),this.isPausedByUserCall=!0,this.doPause()}doPause(){var t;(t=this.element)==null||t.pause()}resume(t=!1){return this.isPausedByUserCall=!1,this.doResume(t)}doResume(t=!1){return this._log.info("resume"),this.isPausedByUserCall||this.isPlaying?Promise.resolve():ZlA?this.replay():this.play().catch(()=>{})}setMuted(t){this.element&&(this.element.muted=t),this.muted=t}replay(){return this.stop(),this.play().catch(()=>{})}bindElementEvents(){if(this.element){const t=this.handleElementEvent.bind(this);return f4(this.element,this.element).add($t.PLAYING,t).add($t.ENDED,t).add($t.PAUSE,t).add($t.ERROR,t).add($t.LOADSTART,t).add($t.LOADEDDATA,t).add($t.LOADEDMETADATA,t)}}bindTrackEvents(t=this.track){if(t){const i=this.handleTrackEvent.bind(this);Z3?.create(t,t).add($t.ENDED,i).add($t.MUTE,i).add($t.UNMUTE,i),t.readyState===$t.ENDED&&this.handleTrackEvent({type:$t.ENDED}),t.muted&&this.handleTrackEvent({type:$t.MUTE})}}bindAutoPlayEvent(){this.isBindAutoPlayEvent||(this._log.warn("bindAutoPlayEvent"),ps.on(mn.AUTOPLAY_DIALOG_CLICK_CONFIRM,this.resume,this),this.isBindAutoPlayEvent=!0)}unbindTrackEvents(t=this.track){t&&yU(t)}unbindEvents(){this.element&&yU(this.element),this.unbindTrackEvents(),ps.off(mn.AUTOPLAY_DIALOG_CLICK_CONFIRM,this.resume,this),this.isBindAutoPlayEvent=!1}handleElementEvent(t){switch(t.type){case $t.PLAYING:DU()||(this.isInAutoPlayFailedState=!1),this._isElementPlayingFired=!0,this._log.info(`${this.kind} player is playing`),this.handlePlaying($t.PLAYING),this._interval&&(yQ.clearTask(this._interval),this._interval=-1);break;case $t.ENDED:this._log.info(`${this.kind} player is ended`),this.handleStopped($t.ENDED);break;case $t.PAUSE:this._log.info(`${this.kind} player is paused`),this.handlePaused($t.PAUSE);break;case $t.ERROR:if(this.element&&this.element.error){this.handlePaused($t.ERROR);const{code:i,message:r}=this.element.error;this._log.error(`${this.kind} ${this._log.isLocal?"local":"remote"} MediaError code: ${i} message: ${r} userAgent: ${navigator.userAgent}`),oh.uploadEvent({log:`stat-${this.kind}-${tU.PLAYER_ERROR}-${i}-${navigator.userAgent}`,error:this.element.error}),jlA||T7?this.emit(Vn.ERROR,this.element.error):this.replayByRecreateMediaStream(this.element.error)}break;case $t.LOADEDDATA:this.kind===$t.VIDEO&&this.emit(Vn.LOADED_DATA);break;case $t.LOADEDMETADATA:this.kind===$t.VIDEO&&this.emit(Vn.LOADED_META_DATA);break;case $t.LOADSTART:this.emit(Vn.LOAD_START)}}replayByRecreateMediaStream(t){if(!this._isReplayByRecreateMediaStreamCalled)return this._isReplayByRecreateMediaStreamCalled=!0,this.doReplayByRecreateMediaStream(1e3).then(()=>{this._log.warn("replayByRecreateMediaStream success"),oh.uploadEvent({log:"stat-replayByRecreateMediaStream-success"}),Ir.addSuccessEvent({key:this.kind===$t.AUDIO?506700:516700})}).catch(()=>{var i;this._log.error("replayByRecreateMediaStream failed"),oh.uploadEvent({log:"stat-replayByRecreateMediaStream-failed"}),Ir.addFailedEvent({key:this.kind===$t.AUDIO?506700:516700,error:(i=this.element)==null?void 0:i.error}),this.emit(Vn.ERROR,t)})}doReplayByRecreateMediaStream(t){return this._log.warn(`delay ${t}ms to recreate mediaStream`),new Promise((i,r)=>{rT(t).then(()=>{this.element&&(this.element.srcObject=null,this.element.srcObject=new MediaStream([this.track]),this._log.warn("recreated mediaStream"),this.element.onerror=()=>{var l,I,h;this._log.warn(`element onerror ${(I=(l=this.element)==null?void 0:l.error)==null?void 0:I.code} fired after recreated mediaStream`),r((h=this.element)==null?void 0:h.error)}),rT(5e3).then(()=>{var l,I;this.isPlaying&&!((l=this.element)!=null&&l.error)||r((I=this.element)==null?void 0:I.error),i()})})}).finally(()=>{this.element&&(this.element.onerror=null)})}async handleTrackEvent(t){const i=t.type;switch(this.options.enableLogTrackState&&this._log[i===$t.UNMUTE?"info":"warn"](`track ${i}`),i){case $t.ENDED:this.handleStopped($t.ENDED);break;case $t.MUTE:this.handlePaused($t.MUTE);break;case $t.UNMUTE:this.mode>0?this.handlePlaying(this.mode.toString()):this.element&&(this.element.paused&&!this.isPausedByUserCall&&(this._log.warn("track unmuted and element is paused, resume"),await this.doResume()),this.element&&!this.element.paused&&this._isElementPlayingFired&&this.handlePlaying($t.UNMUTE))}}handlePlaying(t){var i;return this._log.debug("handlePlaying",t),(i=this._playSuccessResolve)==null||i.call(this,t),t}handlePaused(t){return this._log.debug("handlePaused",t),t}handleStopped(t){return this._log.debug("handleStopped",t),t}getElement(){return this.element}};de(lv,"PlayerEvent",Vn),Cc([zIA({settings:{retries:2,timeout:0},onError(t,i,r,l){l[0]=(l[0]||1e3)+1e3,i()}})],lv.prototype,"doReplayByRecreateMediaStream"),Cc([Du([],"PLAYING",{sync:!0,success(t){this.emit(Vn.PLAYER_STATE_CHANGED,{type:this.kind,state:"PLAYING",reason:t})}})],lv.prototype,"handlePlaying"),Cc([Du("PLAYING","PAUSED",{ignoreError:!0,sync:!0,success(t){this.emit(Vn.PLAYER_STATE_CHANGED,{type:this.kind,state:"PAUSED",reason:t})}})],lv.prototype,"handlePaused"),Cc([Du([],"STOPPED",{sync:!0,success(t){this.emit(Vn.PLAYER_STATE_CHANGED,{type:this.kind,state:"STOPPED",reason:t})}})],lv.prototype,"handleStopped");var Qm="trtc_autoplay",A3=`${Qm}_mask`,DL=`${Qm}_wrapper`,NZ=`${Qm}_header`,e3=`${Qm}_content`,x1=`${Qm}_action_wrapper`,t3=`${Qm}_question`,i3=`${Qm}_collapse`,Y1=`${Qm}_action_confirm`,GZ=`${Qm}_detail`,bZ="#2473E8",y4="dialog",ZIA=`${y4}-show`,XIA=`${y4}-1`,$IA=`${y4}-2`,kZ=!1,X3=!1,DU=()=>X3,B$=`${x3}/${zy()?"zh-cn":"en"}/tutorial-21-advanced-auto-play-policy.html`,LZ=`
${zy()?"其他方案?":"Any other solution?"}`,AuA=zy()?`浏览器自动播放策略:在用户与页面产生交互(点击、触摸)之前,浏览器禁止播放有声媒体。该弹窗用于帮助用户恢复音视频播放。${LZ}`:`Autoplay Policy: Before user interacts with the web page (clicking, touching), page will not be allowed to play media with sound. This Dialog is used to help users resume playback. ${LZ}`,euA=class{constructor(){if(de(this,"content","音视频播放被浏览器拦截,请点击“恢复播放”。"),de(this,"_dialogNode",null),de(this,"_bodyPosition",""),de(this,"_showDetail",!1),de(this,"_isCollapseClicked",!1),de(this,"_isQuestionClicked",!1),zy()||(this.content='Media playback failed. Click the "Resume" to resume playback.'),!kZ){const t=document.createElement("style");t.innerHTML=`.${A3}{position:fixed;top:0;left:0;right:0;bottom:0;width:100vw;height:100vh;display:flex;justify-content:center;align-items:center;background:rgba(0,0,0,0.5);z-index:1500;}.${A3} div:not(.${x1}){display:block !important;}.${DL}{padding:14px;background:#fff;border-radius:3px;box-shadow:0px 3px 15px #434343;border:1px solid #d1cfcf;max-width:500px;}.${DL} a{color:${bZ};}.${NZ}{overflow:hidden;text-overflow:ellipsis;font-size:16px;font-weight:600;}.${e3}{margin:8px 0;}.${x1}{width:100%;display:flex !important;align-items:center;justify-content:right;float:right;}.${i3}{margin-right:auto;cursor:pointer}.${t3}{height:100%;line-height:16px;cursor:pointer;}.${Y1}{margin-left:8px;color:#fff;background:${bZ};padding:4px 12px;outline:none;border:1px solid;border-radius:3px;font-weight:bold;}.${Y1}:hover{opacity:0.9;}.${i3},.${Y1},.${e3},.${t3}{font-size:14px;}@media screen and (max-width:750px){.${DL}{width:80vw;}}`,document.head.appendChild(t),kZ=!0}this.addDiaLog()}createDiaLog(){const t=document.createElement("template");t.innerHTML=`
${location.host}
${this.content}
`.trim();const i=document.createElement("button");i.className=Y1,i.innerText=zy()?"恢复播放":"Resume",i.onclick=this.onConfirm.bind(this);const r=document.createElement("div");r.className=t3,r.innerHTML=` + `],{type:"application/javascript"}))),BE.sharedWorker.onmessage=n=>{var c;if(n.data.type==="tick"){const I=BE.workerTasks.get(n.data.taskId);I&&(BE.isBreakLoop(I)?((c=BE.sharedWorker)==null||c.postMessage({type:"stop",taskId:I.taskID}),BE.workerTasks.delete(I.taskID)):(I.callback(),I.loopCount+=1))}}),BE.workerTasks.set(i.taskID,i),BE.sharedWorker.postMessage({taskId:i.taskID,delay:i.delay,type:"start"})}static timeout(i){const n=()=>{if(i.callback(),i.loopCount+=1,!BE.isBreakLoop(i))return i.timeoutID=setTimeout(n,i.delay)};return i.timeoutID=setTimeout(n,i.delay)}static ric(i){let n,c=Yc();const I=()=>{if(n=Yc()-c,n>=i.delay&&(c=Yc()-Math.floor(n%i.delay),i.callback(),i.loopCount+=1),!BE.isBreakLoop(i))return i.ricID=$Z(I,{timeout:i.delay})};return i.ricID=$Z(I,{timeout:i.delay})}static raf(i){let n,c=Yc();const I=()=>{if(document.hidden&&i.backgroundTask)return n=Yc()-c,c=Yc(),i.callback(),i.loopCount+=1,BE.isBreakLoop(i)?void 0:i.timeoutID=setTimeout(I,i.delay-Math.floor(n%i.delay));if(n=Yc()-c,n>=i.delay&&(c=Yc()-Math.floor(n%i.delay),i.callback(),i.loopCount+=1),!BE.isBreakLoop(i))return i.rafID=requestAnimationFrame(I)};if(i.rafID=requestAnimationFrame(I),i.backgroundTask){const C=()=>{if(document.hidden){const f=Yc()-c;f>=i.delay?I():i.timeoutID=setTimeout(I,i.delay-f)}};document.addEventListener("visibilitychange",C),i.onVisibilitychange=C,document.hidden&&C()}return i.taskID}static hasTask(i){return this.taskMap.has(i)}static clearTask(i){if(!this.taskMap.has(i))return!0;const{intervalID:n,timeoutID:c,rafID:I,ricID:C,onVisibilitychange:f}=this.taskMap.get(i);return n&&clearInterval(n),c&&clearTimeout(c),I&&A6&&A6(I),C&&yuA(C),f&&document.removeEventListener("visibilitychange",f),this.taskMap.delete(i),!0}static isBreakLoop(i){return!this.hasTask(i.taskID)||i.count!==0&&i.loopCount>=i.count&&(this.clearTask(i.taskID),!0)}};Be(JL,"taskMap",new Map),Be(JL,"currentTaskID",1),Be(JL,"sharedWorker",null),Be(JL,"workerTasks",new Map);var DuA=JL,MQ=DuA,Jn={LOAD_START:ei.LOADSTART,LOADED_DATA:ei.LOADEDDATA,LOADED_META_DATA:ei.LOADEDMETADATA,MEDIA_TRACK_CHANGED:"media-track-changed",PLAYER_STATE_CHANGED:"player-state-changed",ERROR:"error",AUTOPLAY_FAILED:"autoplay-failed",RESIZE:ei.RESIZE,TIME_UPDATE:"time-update",LEAVE_PICTURE_IN_PICTURE:ei.LEAVE_PICTURE_IN_PICTURE,ENTER_PICTURE_IN_PICTURE:ei.ENTER_PICTURE_IN_PICTURE,USER_RESUME_IN_PIP_OR_FULL_SCREEN:"user-resume-in-pip-or-full-screen",USER_PAUSE_IN_PIP_OR_FULL_SCREEN:"user-pause-in-pip-or-full-screen",ENTER_FULL_SCREEN:"enter-full-screen",LEAVE_FULL_SCREEN:"leave-full-screen",VOLUME_CHANGE:"volume-change",FIRST_FRAME_RENDER:"first-frame-render"},uW={};u4(uW,{create:()=>V4,remove:()=>NU});var CU=new WeakMap;function V4(t,i){CU.has(t)||CU.set(t,[]);const n=CU.get(t),c={add:(I,C)=>("addEventListener"in i?(n.push(i.removeEventListener.bind(i,I,C)),i.addEventListener(I,C)):(n.push(i.off.bind(i,I,C)),i.on(I,C)),c)};return c}function NU(t){const i=CU.get(t);i&&(i.forEach(n=>n()),CU.delete(t))}var SuA=class{constructor(){Be(this,"_roomIdMap",new Map),Be(this,"_configs"),typeof registerProcessor>"u"&&(this._configs={sdkAppId:"",userId:"",version:UY,env:s3.QCLOUD,browserVersion:Mv.name+Mv.version,ua:navigator.userAgent})}setConfig({sdkAppId:t,env:i,userId:n,roomId:c}){t!==this._configs.sdkAppId&&(this._configs.sdkAppId=String(t)),this._configs.env=i,this._configs.userId=n,this._roomIdMap.set(n,String(c))}logSuccessEvent(t){!VY&&Wo.isAbleToUpload&&this._configs.env===s3.QCLOUD&&this.uploadEventToKibana(gB(Rn({},t),{result:"success"}))}logFailedEvent(t){if(VY||!Wo.isAbleToUpload)return;const{eventType:i,code:n,error:c,userId:I}=t,C={roomId:this._roomIdMap.get(I||this._configs.userId),userId:I,eventType:i,result:"failed",code:n||c?.extraCode||c?.code||qg.UNKNOWN};this._configs.env===s3.QCLOUD&&this.uploadEventToKibana(gB(Rn({},C),{error:c}))}uploadEventToKibana(t){let i=`stat-${t.eventType}-${t.result}`;t.eventType!=="delta-join"&&t.eventType!=="delta-leave"&&t.eventType!=="delta-publish"||(i=`${t.eventType}:${t.delta}`),this.uploadEvent({log:i,userId:t.userId}),t.result==="failed"&&(i=`stat-${t.eventType}-${t.result}-${t.code}`,this.uploadEvent({log:i,userId:t.userId,error:t.error}))}uploadEvent({log:t,userId:i,error:n}){const c={timestamp:l7(),sdkAppId:this._configs.sdkAppId,userId:i||this._configs.userId,version:UY,log:t};n&&(c.errorInfo=n.message,n.stack&&(c.errorInfo+=` +${n.stack}`));const I=IW.enable?Q4(c,2002,Number(this._configs.sdkAppId)):JSON.stringify(c);this.sendRequest(C4(this._configs.sdkAppId,E7.LOG),I)}sendRequest(t,i){setTimeout(()=>b7({url:t,body:i,priority:"low"}).catch(()=>{}),2e3)}},ah=new SuA,av=new WeakMap;function MuA({settings:t={retries:5,timeout:2e3},onError:i,onRetrying:n,onRetryFailed:c}){return function(I,C,f){const w=m4({retryFunction:f.value,settings:t,onError({error:_,retry:N,reject:L,retryFuncArgs:q}){var lA;i?i.call(this,_,()=>{var tA;(tA=av.get(I))!=null&&tA.has(C)?N():L(_)},L,q):(lA=av.get(I))!=null&&lA.has(C)?N():L(_)},onRetrying(_,N){var L;F_(n)&&n.call(this,_,N),(L=av.get(I))!=null&&L.has(C)&&(av.get(I).get(C).stopRetry=N)},onRetryFailed:c});return f.value=function(..._){const N=av.get(I);return N?N.set(C,{args:_}):av.set(I,new Map([[C,{args:_}]])),w.apply(this,_).finally(()=>{var L;return(L=av.get(I))==null?void 0:L.delete(C)})},f}}var Ev=class extends Ar{constructor(t,i){super(t.id,`${i}-player`),this.options=t,this.kind=i,Be(this,"id"),Be(this,"element",null),Be(this,"track"),Be(this,"url"),Be(this,"attr"),Be(this,"mode"),Be(this,"muted"),Be(this,"_log"),Be(this,"isPausedByUserCall",!1),Be(this,"_pausedRetryCount"),Be(this,"_isElementPlayingFired",!1),Be(this,"_interval"),Be(this,"_delayDestroyTimeoutId",0),Be(this,"_playSuccessResolve"),Be(this,"_isReplayByRecreateMediaStreamCalled",!1),Be(this,"isPlayCalled",!1),Be(this,"isInAutoPlayFailedState",!1),Be(this,"isBindAutoPlayEvent",!1),this.id=t.id,this._log=t.log,this.track=t.track,this.muted=t.muted,this._pausedRetryCount=U_,this._state="STOPPED",this.bindTrackEvents(),this._log.info(`create ${i}-player ${this.id}`)}get isPlaying(){var t;return this._state==="PLAYING"&&((t=this.element)==null?void 0:t.paused)===!1}get isPaused(){var t;return this._state==="PAUSED"||((t=this.element)==null?void 0:t.paused)===!0}get isStopped(){return this._state==="STOPPED"}setAttr(t){this.attr=t}setUrl(t){this.track&&(this.unbindTrackEvents(),this.element&&(this.element.srcObject=null),this.track=null),t!==this.url&&(this.url=t,t!==null&&this.element&&(this.element.crossOrigin="anonymous",this.element.src=t))}async play(){if(!this.isPlaying)try{this.isPlayCalled=!0,this._delayDestroyTimeoutId&&(clearTimeout(this._delayDestroyTimeoutId),this._delayDestroyTimeoutId=0,this.bindTrackEvents(),this.bindElementEvents()),this.bindAutoPlayEvent(),await new Promise((t,i)=>{this._playSuccessResolve=t,this.element.play().then(t,i)})}catch(t){const i=HY({key:JY.PLAY_FAILED,data:{media:this.kind,error:t}});if(this._log.warn(t),i.includes("NotAllowedError"))throw this.isInAutoPlayFailedState=!0,new fl({code:qg.PLAY_NOT_ALLOWED,message:i})}}stop(t=0){var i;this.isPlayCalled=!1,this.isPausedByUserCall=!1,this._isElementPlayingFired=!1,this.unbindEvents(),t>0&&!r$?this._delayDestroyTimeoutId||((i=this.element)==null||i.remove(),this._log.info(`destroy element after 3 * ${t}`),this._delayDestroyTimeoutId=setTimeout(()=>this.destroyElement(),3*t)):this.destroyElement(),this.handleStopped(ei.ENDED),this._interval>0&&MQ.clearTask(this._interval)}destroyElement(){this.element&&(this._log.debug("destroy element"),this.element.remove(),this.element.src="",this.element.srcObject=null,this.element=null),clearTimeout(this._delayDestroyTimeoutId),this._delayDestroyTimeoutId=0}pause(){this._log.info("pause"),this.isPausedByUserCall=!0,this.doPause()}doPause(){var t;(t=this.element)==null||t.pause()}resume(t=!1){return this.isPausedByUserCall=!1,this.doResume(t)}doResume(t=!1){return this._log.info("resume"),this.isPausedByUserCall||this.isPlaying?Promise.resolve():vIA?this.replay():this.play().catch(()=>{})}setMuted(t){this.element&&(this.element.muted=t),this.muted=t}replay(){return this.stop(),this.play().catch(()=>{})}bindElementEvents(){if(this.element){const t=this.handleElementEvent.bind(this);return V4(this.element,this.element).add(ei.PLAYING,t).add(ei.ENDED,t).add(ei.PAUSE,t).add(ei.ERROR,t).add(ei.LOADSTART,t).add(ei.LOADEDDATA,t).add(ei.LOADEDMETADATA,t)}}bindTrackEvents(t=this.track){if(t){const i=this.handleTrackEvent.bind(this);uW?.create(t,t).add(ei.ENDED,i).add(ei.MUTE,i).add(ei.UNMUTE,i),t.readyState===ei.ENDED&&this.handleTrackEvent({type:ei.ENDED}),t.muted&&this.handleTrackEvent({type:ei.MUTE})}}bindAutoPlayEvent(){this.isBindAutoPlayEvent||(this._log.warn("bindAutoPlayEvent"),ms.on(mn.AUTOPLAY_DIALOG_CLICK_CONFIRM,this.resume,this),this.isBindAutoPlayEvent=!0)}unbindTrackEvents(t=this.track){t&&NU(t)}unbindEvents(){this.element&&NU(this.element),this.unbindTrackEvents(),ms.off(mn.AUTOPLAY_DIALOG_CLICK_CONFIRM,this.resume,this),this.isBindAutoPlayEvent=!1}handleElementEvent(t){switch(t.type){case ei.PLAYING:GU()||(this.isInAutoPlayFailedState=!1),this._isElementPlayingFired=!0,this._log.info(`${this.kind} player is playing`),this.handlePlaying(ei.PLAYING),this._interval&&(MQ.clearTask(this._interval),this._interval=-1);break;case ei.ENDED:this._log.info(`${this.kind} player is ended`),this.handleStopped(ei.ENDED);break;case ei.PAUSE:this._log.info(`${this.kind} player is paused`),this.handlePaused(ei.PAUSE);break;case ei.ERROR:if(this.element&&this.element.error){this.handlePaused(ei.ERROR);const{code:i,message:n}=this.element.error;this._log.error(`${this.kind} ${this._log.isLocal?"local":"remote"} MediaError code: ${i} message: ${n} userAgent: ${navigator.userAgent}`),ah.uploadEvent({log:`stat-${this.kind}-${lU.PLAYER_ERROR}-${i}-${navigator.userAgent}`,error:this.element.error}),DIA||A$?this.emit(Jn.ERROR,this.element.error):this.replayByRecreateMediaStream(this.element.error)}break;case ei.LOADEDDATA:this.kind===ei.VIDEO&&this.emit(Jn.LOADED_DATA);break;case ei.LOADEDMETADATA:this.kind===ei.VIDEO&&this.emit(Jn.LOADED_META_DATA);break;case ei.LOADSTART:this.emit(Jn.LOAD_START)}}replayByRecreateMediaStream(t){if(!this._isReplayByRecreateMediaStreamCalled)return this._isReplayByRecreateMediaStreamCalled=!0,this.doReplayByRecreateMediaStream(1e3).then(()=>{this._log.warn("replayByRecreateMediaStream success"),ah.uploadEvent({log:"stat-replayByRecreateMediaStream-success"}),dr.addSuccessEvent({key:this.kind===ei.AUDIO?506700:516700})}).catch(()=>{var i;this._log.error("replayByRecreateMediaStream failed"),ah.uploadEvent({log:"stat-replayByRecreateMediaStream-failed"}),dr.addFailedEvent({key:this.kind===ei.AUDIO?506700:516700,error:(i=this.element)==null?void 0:i.error}),this.emit(Jn.ERROR,t)})}doReplayByRecreateMediaStream(t){return this._log.warn(`delay ${t}ms to recreate mediaStream`),new Promise((i,n)=>{IT(t).then(()=>{this.element&&(this.element.srcObject=null,this.element.srcObject=new MediaStream([this.track]),this._log.warn("recreated mediaStream"),this.element.onerror=()=>{var c,I,C;this._log.warn(`element onerror ${(I=(c=this.element)==null?void 0:c.error)==null?void 0:I.code} fired after recreated mediaStream`),n((C=this.element)==null?void 0:C.error)}),IT(5e3).then(()=>{var c,I;this.isPlaying&&!((c=this.element)!=null&&c.error)||n((I=this.element)==null?void 0:I.error),i()})})}).finally(()=>{this.element&&(this.element.onerror=null)})}async handleTrackEvent(t){const i=t.type;switch(this.options.enableLogTrackState&&this._log[i===ei.UNMUTE?"info":"warn"](`track ${i}`),i){case ei.ENDED:this.handleStopped(ei.ENDED);break;case ei.MUTE:this.handlePaused(ei.MUTE);break;case ei.UNMUTE:this.mode>0?this.handlePlaying(this.mode.toString()):this.element&&(this.element.paused&&!this.isPausedByUserCall&&(this._log.warn("track unmuted and element is paused, resume"),await this.doResume()),this.element&&!this.element.paused&&this._isElementPlayingFired&&this.handlePlaying(ei.UNMUTE))}}handlePlaying(t){var i;return this._log.debug("handlePlaying",t),(i=this._playSuccessResolve)==null||i.call(this,t),t}handlePaused(t){return this._log.debug("handlePaused",t),t}handleStopped(t){return this._log.debug("handleStopped",t),t}getElement(){return this.element}};Be(Ev,"PlayerEvent",Jn),Cc([MuA({settings:{retries:2,timeout:0},onError(t,i,n,c){c[0]=(c[0]||1e3)+1e3,i()}})],Ev.prototype,"doReplayByRecreateMediaStream"),Cc([Su([],"PLAYING",{sync:!0,success(t){this.emit(Jn.PLAYER_STATE_CHANGED,{type:this.kind,state:"PLAYING",reason:t})}})],Ev.prototype,"handlePlaying"),Cc([Su("PLAYING","PAUSED",{ignoreError:!0,sync:!0,success(t){this.emit(Jn.PLAYER_STATE_CHANGED,{type:this.kind,state:"PAUSED",reason:t})}})],Ev.prototype,"handlePaused"),Cc([Su([],"STOPPED",{sync:!0,success(t){this.emit(Jn.PLAYER_STATE_CHANGED,{type:this.kind,state:"STOPPED",reason:t})}})],Ev.prototype,"handleStopped");var fm="trtc_autoplay",d3=`${fm}_mask`,_L=`${fm}_wrapper`,e6=`${fm}_header`,C3=`${fm}_content`,Z1=`${fm}_action_wrapper`,h3=`${fm}_question`,B3=`${fm}_collapse`,X1=`${fm}_action_confirm`,t6=`${fm}_detail`,i6="#2473E8",J4="dialog",vuA=`${J4}-show`,RuA=`${J4}-1`,wuA=`${J4}-2`,o6=!1,EW=!1,GU=()=>EW,x$=`${iW}/${Zy()?"zh-cn":"en"}/tutorial-21-advanced-auto-play-policy.html`,s6=`
${Zy()?"其他方案?":"Any other solution?"}`,_uA=Zy()?`浏览器自动播放策略:在用户与页面产生交互(点击、触摸)之前,浏览器禁止播放有声媒体。该弹窗用于帮助用户恢复音视频播放。${s6}`:`Autoplay Policy: Before user interacts with the web page (clicking, touching), page will not be allowed to play media with sound. This Dialog is used to help users resume playback. ${s6}`,TuA=class{constructor(){if(Be(this,"content","音视频播放被浏览器拦截,请点击“恢复播放”。"),Be(this,"_dialogNode",null),Be(this,"_bodyPosition",""),Be(this,"_showDetail",!1),Be(this,"_isCollapseClicked",!1),Be(this,"_isQuestionClicked",!1),Zy()||(this.content='Media playback failed. Click the "Resume" to resume playback.'),!o6){const t=document.createElement("style");t.innerHTML=`.${d3}{position:fixed;top:0;left:0;right:0;bottom:0;width:100vw;height:100vh;display:flex;justify-content:center;align-items:center;background:rgba(0,0,0,0.5);z-index:1500;}.${d3} div:not(.${Z1}){display:block !important;}.${_L}{padding:14px;background:#fff;border-radius:3px;box-shadow:0px 3px 15px #434343;border:1px solid #d1cfcf;max-width:500px;}.${_L} a{color:${i6};}.${e6}{overflow:hidden;text-overflow:ellipsis;font-size:16px;font-weight:600;}.${C3}{margin:8px 0;}.${Z1}{width:100%;display:flex !important;align-items:center;justify-content:right;float:right;}.${B3}{margin-right:auto;cursor:pointer}.${h3}{height:100%;line-height:16px;cursor:pointer;}.${X1}{margin-left:8px;color:#fff;background:${i6};padding:4px 12px;outline:none;border:1px solid;border-radius:3px;font-weight:bold;}.${X1}:hover{opacity:0.9;}.${B3},.${X1},.${C3},.${h3}{font-size:14px;}@media screen and (max-width:750px){.${_L}{width:80vw;}}`,document.head.appendChild(t),o6=!0}this.addDiaLog()}createDiaLog(){const t=document.createElement("template");t.innerHTML=`
${location.host}
${this.content}
`.trim();const i=document.createElement("button");i.className=X1,i.innerText=Zy()?"恢复播放":"Resume",i.onclick=this.onConfirm.bind(this);const n=document.createElement("div");n.className=h3,n.innerHTML=` - `,r.onclick=this.onQuestionClick.bind(this);const l=document.createElement("div");l.className=i3,l.innerText=zy()?"详情 >":"Detail >",l.onclick=this.onCollapseClick.bind(this);const I=t.content.firstChild,h=I.querySelector(`.${x1}`);return h.appendChild(l),h.appendChild(r),h.appendChild(i),I}addDiaLog(){DU()||(X3=!0,this._dialogNode=this.createDiaLog(),document.body.appendChild(this._dialogNode),this._dialogNode.onclick=this.onConfirm.bind(this),this._dialogNode.querySelector(`.${DL}`).onclick=t=>t.stopPropagation(),this._bodyPosition=document.body.style.position,document.body.style.position="fixed",Wo.info("show autoplay dialog"),oh.uploadEvent({log:ZIA}))}deleteDialog(){this._dialogNode&&(document.body.removeChild(this._dialogNode),document.body.style.position=this._bodyPosition,this._dialogNode=null,X3=!1),SU=null}onConfirm(){Wo.warn("confirm clicked, try resume stream"),ps.emit(mn.AUTOPLAY_DIALOG_CLICK_CONFIRM),this.deleteDialog()}onCollapseClick(){const t=this._dialogNode.querySelector(`.${GZ}`);t.style.visibility=this._showDetail?"hidden":"visible",t.style.height=`${this._showDetail?0:"fit-content"}`,this._showDetail=!this._showDetail,this._isCollapseClicked||oh.uploadEvent({log:XIA}),this._isCollapseClicked=!0}onQuestionClick(){window.open(B$,"_blank"),this._isQuestionClicked||oh.uploadEvent({log:$IA}),this._isQuestionClicked=!0}},SU=null;function tuA(){SU||(SU=new euA)}function iuA(){SU&&SU.deleteDialog()}var aU,Oy=class extends lv{constructor(t){super(t,$t.VIDEO),de(this,"stat",{}),de(this,"_calculateTimeout",-1),de(this,"viewMirror",!1),de(this,"objectFit","cover"),de(this,"container"),de(this,"canvas"),de(this,"shouldRenderAlpha",!1),de(this,"_preSize",{width:0,height:0}),de(this,"posterImg"),de(this,"pipWindow"),de(this,"enterPIPPromise"),de(this,"_originContainerPosition"),de(this,"_isResettingSrcObject",!1),de(this,"_wrapper",null),de(this,"_useWrapper",!1),de(this,"_isFirstFrameRenderEmitted",!1),this.mode=t.canvas?1:0,this.container=t.container,this.canvas=t.canvas,$n(t.viewMirror)||(this.viewMirror=t.viewMirror),$n(t.objectFit)||(this.objectFit=t.objectFit),this.initializeElement()}get isPlaying(){var t;return this._state==="PLAYING"&&(!this.element||!this.element.paused)&&((t=this.track)==null?void 0:t.readyState)==="live"&&!this.track.muted}initializeElement(){const t=document.createElement($t.VIDEO);this.track&&this.mode!==2&&(t.srcObject=new MediaStream([this.track])),t.muted=!0,t.setAttribute("id",`video_${this.id}`),t.setAttribute("style",this.styleAttribute),this.canvas&&this.canvas.setAttribute("style",this.styleAttribute),t.setAttribute("autoplay","autoplay"),t.setAttribute("playsinline","playsinline"),this.element=t,aC&&(t.poster="data:,"),this._appendToWrapper(),this.bindElementEvents(),this.calculateStat(),this._bindFirstFrameRenderEvent(t)}_bindFirstFrameRenderEvent(t){const i=()=>{if(this._isFirstFrameRenderEmitted)return;this._isFirstFrameRenderEmitted=!0;const r=t.videoWidth||0,l=t.videoHeight||0;this._log.info(`first frame render: ${r}x${l}`),this.emit(Vn.FIRST_FRAME_RENDER,{width:r,height:l})};typeof t.requestVideoFrameCallback=="function"?t.requestVideoFrameCallback(i):t.addEventListener("loadeddata",i,{once:!0})}get styleAttribute(){let t=this._useWrapper?`grid-area:1/1;width:100%;height:100%;object-fit:${this.objectFit};${this.shouldRenderAlpha?"":"background-color:black"};`:`width:100%;height:100%;object-fit:${this.objectFit};${this.shouldRenderAlpha?"":"background-color:black"};`;return this.viewMirror&&(t+="transform:scaleX(-1);"),t}setLiveMode(t){if(this._useWrapper!==t&&(this._useWrapper=t,this.elementToRender&&this.elementToRender.setAttribute("style",this.styleAttribute),this.container&&this.elementToRender))if(t){const i=this._getOrCreateWrapper();i.insertBefore(this.elementToRender,i.firstChild)}else this.container.appendChild(this.elementToRender),this._cleanupWrapper()}setContainer(t){if(this.container===t)return;const i=this._wrapper,r=this.container;this.container=t,this._pausedRetryCount=b_,this.track&&this.elementToRender&&this._appendToWrapper(),i&&r&&r!==this.container&&i.isConnected&&i.children.length===0&&i.remove()}_getOrCreateWrapper(){if(!this.container)throw new Error("[VideoPlayer] container is required");let t=this.container.querySelector("[data-trtc-video-wrapper]");return t||(t=document.createElement("div"),t.setAttribute("data-trtc-video-wrapper","true"),t.style.cssText="display:grid;width:100%;height:100%;",this.container.appendChild(t)),this._wrapper=t,t}_appendToWrapper(t){const i=t??this.elementToRender;if(this.container&&i)if(this._useWrapper){const r=this._getOrCreateWrapper();r.insertBefore(i,r.firstChild)}else this.container.appendChild(i)}bindElementEvents(){const t=super.bindElementEvents();this.handleElementEvent=this.handleElementEvent.bind(this),this.handleFullscreenChange=this.handleFullscreenChange.bind(this),this.handleVolumeChange=this.handleVolumeChange.bind(this),t&&t.add($t.ENTER_PICTURE_IN_PICTURE,this.handleElementEvent).add($t.LEAVE_PICTURE_IN_PICTURE,this.handleElementEvent).add($t.RESIZE,this.handleElementEvent),this.element&&(this.element.addEventListener($t.FULLSCREEN_CHANGE,this.handleFullscreenChange),this.element.addEventListener("webkitbeginfullscreen",this.handleFullscreenChange),this.element.addEventListener("webkitendfullscreen",this.handleFullscreenChange),this.element.addEventListener("volumechange",this.handleVolumeChange))}handleTrackEvent(t){var i;return t.type===$t.MUTE&&((i=this.stat)!=null&&i.fps&&(this.stat.fps=0),this.isFullscreen()&&this.resetSrcObjectToReplay()),super.handleTrackEvent(t)}handleFullscreenChange(){this.isFullscreen()?(this._log.info("enter fullscreen"),this.emit(Vn.ENTER_FULL_SCREEN)):(this._log.info("leave fullscreen"),this.emit(Vn.LEAVE_FULL_SCREEN))}handleVolumeChange(){var t;(this.isPictureInPicture()||this.isFullscreen())&&this.emit(Vn.VOLUME_CHANGE,{muted:(t=this.element)==null?void 0:t.muted})}handleElementEvent(t){var i,r,l,I,h,f;if(this.mode===2)return;super.handleElementEvent(t);const w=t.type,_=this.isPictureInPicture(),G=this.isFullscreen(),U=t.isTrusted&&(_&&ld||G);if(w===$t.PLAYING&&U&&!this._isResettingSrcObject&&(this._log.warn("user resume in "+(G?"fullscreen":"pip")),this.emit(Vn.USER_RESUME_IN_PIP_OR_FULL_SCREEN)),w===$t.PAUSE&&(U&&(this._log.warn("user pause in "+(G?"fullscreen":"pip")),this.emit(Vn.USER_PAUSE_IN_PIP_OR_FULL_SCREEN)),this.container&&!this.container.isConnected&&(this._log.warn(`${this.kind} player has been remove, element ID: ${this.container.id}`),rT(500).then(()=>{var j;(j=this.container)!=null&&j.isConnected&&(this._pausedRetryCount=b_,this._log.info(`view container ${this.container.id} is in dom, reset pausedRetryCount`))})),this._pausedRetryCount>0&&!DU()&&!this.isPausedByUserCall&&!U&&(this._log.info(`[${b_-this._pausedRetryCount+1}/${b_}] ${this.kind} player auto resume when paused`),this.doResume(),this._pausedRetryCount--),Mu&&!U&&(this._interval=yQ.run("timeout",()=>{this.element&&this._state==="PAUSED"&&!this.isPausedByUserCall&&this.doResume()},{delay:3e3})),this.stat.fps&&(this.stat.fps=0)),this.viewMirror&&this.element){const j=this.element.style.transform;w===$t.ENTER_PICTURE_IN_PICTURE?this.element.style.transform=j.replace("scaleX(-1)",""):w!==$t.LEAVE_PICTURE_IN_PICTURE||j.includes("scaleX")||(this.element.style.transform=`${j} scaleX(-1)`)}w===$t.RESIZE&&(this._preSize.height===((i=this.element)==null?void 0:i.videoHeight)&&this._preSize.width===((r=this.element)==null?void 0:r.videoWidth)||(this._log.info(`video size changed to ${(l=this.element)==null?void 0:l.videoWidth}x${(I=this.element)==null?void 0:I.videoHeight}`),this._preSize.height=((h=this.element)==null?void 0:h.videoHeight)||0,this._preSize.width=((f=this.element)==null?void 0:f.videoWidth)||0,this.emit(Vn.RESIZE,{newWidth:this._preSize.width,newHeight:this._preSize.height}))),w===$t.LEAVE_PICTURE_IN_PICTURE&&(this._log.warn("exit pip"),this.isPaused&&!this.isPausedByUserCall&&(this._log.warn("resume after exit pip"),this.doResume()),this.resetSrcObjectToReplay(),this.emit(Vn.LEAVE_PICTURE_IN_PICTURE)),w===$t.ENTER_PICTURE_IN_PICTURE&&this.emit(Vn.ENTER_PICTURE_IN_PICTURE)}resetSrcObjectToReplay(){aC&&Zj&&this.isPlayCalled&&this.element&&this.track&&!this.isPausedByUserCall&&(this._log.warn("reset srcObject to replay for android chromium"),this._isResettingSrcObject=!0,this.element.srcObject=new MediaStream([this.track]),this.element.play().catch(t=>{this._log.warn("play failed after reset srcObject",t)}).finally(()=>{this._isResettingSrcObject=!1}))}setCanvas(t,i=1){var r,l;this.canvas!==t&&((r=this.canvas)==null||r.remove(),t?.setAttribute("style",this.styleAttribute),this.canvas=t,this.mode=t?i:0,this.mode===2&&this.setTrack(t.captureStream().getVideoTracks()[0]),t?((l=this.element)==null||l.remove(),this._appendToWrapper(t)):this.element&&this._appendToWrapper(this.element))}setAttr(t){const i=Object.assign({autoplay:"autoplay",playsinline:"playsinline",muted:!0},t);i.style=Object.assign({width:"100%",height:"100%"},i.style),super.setAttr(i)}get mirror(){return this.viewMirror}setRect(t,i){this.elementToRender&&(this.elementToRender.style.width=`${t}px`,this.elementToRender.style.height=`${i}px`)}setViewMirror(t){this.elementToRender&&(this.elementToRender.style.transform=t?"scaleX(-1)":""),this.viewMirror=t}setObjectFit(t){this.elementToRender&&(this.elementToRender.style.objectFit=`${t}`),this.objectFit=t}setPoster(t,i=!1){return new Promise(r=>{if(!this.element||(this._log.info("setPoster",t.slice(0,10)),t===""?this.element.removeAttribute("poster"):this.element.poster=t,!(i&&(ld||sC))))return r();if(t==="")return this.removePosterImg(),r();if(this.posterImg)return r();const l=document.createElement("img");l.src=t;const I=window.getComputedStyle(this.element),h=I.objectFit||this.objectFit;let f=1;if(this._useWrapper){const w=parseInt(I.zIndex,10);isNaN(w)||(f=w+1)}l.style.cssText=this._useWrapper?`grid-area:1/1;z-index:${f};width:100%;height:100%;object-fit:${h};`:`position:absolute;top:0;left:0;width:100%;height:100%;object-fit:${h};`,l.onload=async()=>{try{l.decode&&await l.decode(),this.container&&!this._useWrapper&&window.getComputedStyle(this.container).position==="static"&&(this._originContainerPosition=this.container.style.position,this.container.style.position="relative"),this.posterImg=l;const w=this._useWrapper?this._wrapper:this.container;w?.appendChild(l),RY()&&bv<=17&&this.elementToRender&&(this.elementToRender.style.visibility="hidden")}catch(w){this._log.warn("decode poster image error",w)}return r()},l.onerror=()=>(this._log.warn("load poster image error"),r())})}removePosterImg(){this.posterImg&&(RY()&&bv<=17&&this.elementToRender&&(this.elementToRender.style.visibility=""),this.posterImg.remove(),URL.revokeObjectURL(this.posterImg.src),this._useWrapper||!this.container||$n(this._originContainerPosition)||this.container.style.position!=="relative"||(this.container.style.position=this._originContainerPosition),delete this.posterImg)}get hasPoster(){var t;return!!this.posterImg||!!((t=this.element)!=null&&t.getAttribute("poster"))}async pause(t=!0){super.pause(),this.isPictureInPicture()||this.hasPoster||!(Zj||t&&(sC||ld))||await this.setPoster(this.getVideoFrame(),!0)}resume(t=!1){return super.resume(t).then(()=>{var i;(this.posterImg||(i=this.element)!=null&&i.poster)&&this.setPoster("",!0)})}doResume(t=!1){return this.isPaused&&t&&this.element&&this.track&&Zj&&this.track.kind==="video"&&(this.element.srcObject=new MediaStream([this.track])),super.doResume()}stop(t=0){var i;this.isPictureInPicture()&&this.exitPictureInPicture().catch(r=>{}),this.isFullscreen()&&this.exitFullscreen().catch(r=>{}),this.element&&(this.element.removeEventListener($t.FULLSCREEN_CHANGE,this.handleFullscreenChange),this.element.removeEventListener("webkitbeginfullscreen",this.handleFullscreenChange),this.element.removeEventListener("webkitendfullscreen",this.handleFullscreenChange),this.element.removeEventListener("volumechange",this.handleVolumeChange)),this._isFirstFrameRenderEmitted=!1,super.stop(t),(i=this.canvas)==null||i.remove(),this.removePosterImg(),this._useWrapper&&this._cleanupWrapper()}_cleanupWrapper(){this._wrapper&&this._wrapper.children.length===0&&this._wrapper.remove(),this._wrapper=null}play(t){if($n(t?.isLiveStream)||this.setLiveMode(t.isLiveStream),this.element){if(this.elementToRender&&this.container)if(this._useWrapper){const i=this._getOrCreateWrapper();this.elementToRender.parentElement!==i&&i.insertBefore(this.elementToRender,i.firstChild)}else this.elementToRender.parentElement!==this.container&&this.container.append(this.elementToRender)}else this.initializeElement();return this.mode===2?Promise.resolve():super.play()}get elementToRender(){return this.canvas||this.element}setTrack(t){t!==this.track&&(this.unbindTrackEvents(),this.track=t,this.emit(Vn.MEDIA_TRACK_CHANGED,t),t!==null&&(this.bindTrackEvents(),this.element&&this.mode!==2&&(this.element.srcObject=new MediaStream([t]),this.element.remove()),this._appendToWrapper()))}getVideoFrame(){if(this.canvas)return this.canvas.toDataURL("image/png");if(!this.element)return"";const t=document.createElement("canvas");return t.width=this.element.videoWidth,t.height=this.element.videoHeight,t.getContext("2d").drawImage(this.element,0,0),t.toDataURL("image/png")}getElement(){return this.element}calculateStat(){try{if(p4()&&this.element&&this._calculateTimeout<0){let t=0,i=null;const r=(l,I)=>{this.stat.width=I.width,this.stat.height=I.height,i&&(this.stat.fps=Math.round((I.presentedFrames-i.presentedFrames)/(l-t)*1e3)),t=l,i=I,this._calculateTimeout=-1,this.element&&(this._calculateTimeout=setTimeout(()=>{var h;return(h=this.element)==null?void 0:h.requestVideoFrameCallback(r)},2e3))};this.element.requestVideoFrameCallback(r)}}catch(t){this._log.warn("init stat failed",t)}}async enterFullscreen(){const t=this.elementToRender;if(!t)throw this._log.warn("no element to render, cannot enter fullscreen"),new Error("No element available for fullscreen");if(Mu&&this.isPictureInPicture()){this._log.info("exit pip before entering fullscreen");try{await this.exitPictureInPicture()}catch(i){this._log.warn("exit pip failed before fullscreen:",i)}}try{if(t.requestFullscreen)await t.requestFullscreen();else if(t.webkitRequestFullscreen)await t.webkitRequestFullscreen();else if(t.webkitEnterFullscreen)await t.webkitEnterFullscreen();else if(t.mozRequestFullScreen)await t.mozRequestFullScreen();else{if(!t.msRequestFullscreen)throw new Error("Fullscreen API not supported");await t.msRequestFullscreen()}this._log.info("entered fullscreen mode")}catch(i){throw this._log.error("failed to enter fullscreen:",i),i}}async exitFullscreen(){try{if(!this.isFullscreen())return;if(document.exitFullscreen)await document.exitFullscreen();else if(document.webkitExitFullscreen)await document.webkitExitFullscreen();else if(document.mozCancelFullScreen)await document.mozCancelFullScreen();else{if(!document.msExitFullscreen)throw new Error("Exit fullscreen API not supported");await document.msExitFullscreen()}this._log.info("exited fullscreen mode")}catch(t){throw this._log.error("failed to exit fullscreen:",t),t}}isFullscreen(){const t=this.elementToRender;return t?this.element&&this.element.webkitDisplayingFullscreen?!this.isPictureInPicture():(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)===t:!1}async toggleFullscreen(){this.isFullscreen()?await this.exitFullscreen():await this.enterFullscreen()}async enterPictureInPicture(){this.enterPIPPromise=this._enterPictureInPicture();try{return await this.enterPIPPromise}finally{delete this.enterPIPPromise}}async _enterPictureInPicture(){try{if(!this.element)throw new Error("No video element available for pip");if(this.canvas&&this.mode!==1)throw new Error("pip is not supported for canvas-only mode");const{element:t}=this;if(t.requestPictureInPicture){this._log.info("requestPictureInPicture");const i=await t.requestPictureInPicture();return this.pipWindow=i,this._log.info("entered pip mode"),this.elementToRender===this.canvas&&(this.canvas.remove(),this._appendToWrapper(this.element)),i}if(t.webkitSetPresentationMode)return this._log.info("webkitSetPresentationMode"),await t.webkitSetPresentationMode("picture-in-picture"),this._log.info("entered pip mode (webkit)"),{};throw new Error("pip API not supported")}catch(t){throw this._log.error("failed to enter pip:",t.name,t.message),t}}async exitPictureInPicture(){var t;try{if(!this.isPictureInPicture())return;if(delete this.pipWindow,document.pictureInPictureElement&&document.exitPictureInPicture)await document.exitPictureInPicture(),this.elementToRender===this.canvas&&((t=this.element)==null||t.remove(),this._pausedRetryCount=b_,this._appendToWrapper(this.canvas)),this._log.info("exited pip mode");else{if(!this.element||!this.element.webkitSetPresentationMode)throw new Error("Exit pip API not supported or not in PiP mode");await this.element.webkitSetPresentationMode("inline"),this._log.info("exited pip mode (webkit)")}}catch(i){throw this._log.error("failed to exit pip:",i),i}}isPictureInPicture(){if(!this.element)return!1;const{element:t}=this;return document.pictureInPictureElement?document.pictureInPictureElement===t:!!t.webkitPresentationMode&&t.webkitPresentationMode==="picture-in-picture"}async togglePictureInPicture(){this.isPictureInPicture()?await this.exitPictureInPicture():await this.enterPictureInPicture()}};async function ouA(t,i){if(!t.audioWorklet)return Promise.reject("audioWorklet is not supported");try{await t.audioWorklet.addModule(i),Wo.info("worklet addModule success")}catch(r){throw Wo.info(`worklet addModule catch error. ${r.message}`),r}}typeof AudioContext<"u"?aU=AudioContext:typeof webkitAudioContext<"u"?aU=webkitAudioContext:typeof mozAudioContext<"u"&&(aU=mozAudioContext);var yu,suA=1500,UZ=-1,V1=0,gU=-1,$3=!1,FZ=0,OZ=-1,PZ=-1;function Q$(){try{if(yu)return;(yu=new aU({sampleRate:48e3})).onstatechange=()=>{Wo.info(`context state: ${yu.state}${yu.state!=="running"?` visibilityState: ${document.visibilityState}`:""}`),X_()},clearTimeout(UZ)}catch(t){Wo.error(`initAudioContext failed: ${t} typeof AudioContextClass: ${typeof aU}`),UZ=setTimeout(Q$,1e3)}}Q$();var X_=()=>{yu.state==="suspended"?(V1=Yc(),nuA(),kY(),document.addEventListener("click",X_)):yu.state==="interrupted"?kY():(V1&&(Ir.addNumber({key:507800,value:Yc()-V1,split:[0,500,1e3,1500,2e3,3e3,4e3,5e3,1e4,3e4],max:6e4}),V1=0),ruA(),document.removeEventListener("visibilitychange",X_),document.removeEventListener("click",X_))},o3=0,s3=-1;function kY(){return new Promise((t,i)=>{if(yu.state==="running")return t();Date.now()-o3<1e3?(clearTimeout(s3),s3=setTimeout(()=>{o3=Date.now(),yu.resume().then(t,i)},1e3)):(clearTimeout(s3),o3=Date.now(),yu.resume().then(t,i))}).catch(t=>{Wo.warn(`context resume failed: ${t}`),document.addEventListener("visibilitychange",X_)})}function nuA(){gU===-1&&(gU=setTimeout(()=>{yu.state==="suspended"&&($3=!0,ps.emit("155",{isSuspended:!0}))},suA))}function ruA(){gU!==-1&&(clearTimeout(gU),gU=-1,$3&&($3=!1,ps.emit("155",{isSuspended:!1})))}function auA(){if(!Mu||PZ!==-1)return;const t=()=>{Yc()-FZ<500||(yu&&yu.state==="running"&&yu.currentTime===OZ&&(Wo.warn("context is fake running, auto resume"),yu.suspend().catch(i=>{Wo.warn(`context suspend failed: ${i}`)})),OZ=yu.currentTime,FZ=Yc())};PZ=setInterval(()=>{t()},2e3),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&t()})}document.addEventListener("click",X_);var oD=t=>yu,Dv=class{constructor(t){this.name=t,de(this,"node"),de(this,"node2"),de(this,"pre",new Set),de(this,"next",new Set),de(this,"context"),de(this,"connectedNodes",new Set),de(this,"nextInputChannelMap",new Map),de(this,"_channelCount",1)}get channelCount(){return this._channelCount}set channelCount(t){this._channelCount=t,this.setChannelCount(this.node,t),this.setChannelCount(this.node2,t),this.next.forEach(i=>i.channelCount=t)}setChannelCount(t,i){!t||t instanceof ScriptProcessorNode||(t.channelCountMode="explicit",t.channelCount=i||this.channelCount||1)}setContext(t){this.context=t,this.node&&t.addMixWeight()}removeContext(){var t;this.node&&((t=this.context)==null||t.reduceMixWeight()),delete this.context}replaceNode(t){var i;if(t!==this.node)try{this.node?this._disconnect():(i=this.context)==null||i.addMixWeight(),this.node=t,this.setChannelCount(this.node),this.preNodeReconnect(),this.reconnect()}catch(r){Wo.error(r)}}setNode(t,i){var r;if(!this.node)try{(r=this.context)==null||r.addMixWeight(),this.node=t,this.setChannelCount(this.node),i&&(this.node2=i,this.setChannelCount(this.node2)),this.preNodeReconnect(),this.reconnect(),Ir.addSuccessEvent({key:502701})}catch(l){Wo.error(l),Ir.addFailedEvent({key:502701,error:l})}}deleteNode(){var t;if(this.node)try{this._disconnect(),delete this.node,delete this.node2,(t=this.context)==null||t.reduceMixWeight(),this.preNodeReconnect(),Ir.addSuccessEvent({key:502702})}catch(i){Wo.error(i),Ir.addFailedEvent({key:502702,error:i})}}preNodeReconnect(){this.pre.forEach(t=>{t.node?t.reconnect():t.preNodeReconnect()})}connectNext(t){this.next.forEach(i=>{const r=this.nextInputChannelMap.get(i);t._connect(i.node,r)||i.connectNext(t)})}_connect(t,i=0){return!(!this.node||!t)&&((this.node2||this.node).connect(t,0,i),this.connectedNodes.add(t),!0)}_disconnect(){this.connectedNodes.forEach(t=>{var i;return(i=this.node2||this.node)==null?void 0:i.disconnect(t)}),this.connectedNodes.clear()}reconnect(){this._disconnect(),this.connectNext(this)}pipeTo(t,i=0){return this.next.add(t),t.pre.add(this),this.nextInputChannelMap.set(t,i),t}},guA=class extends Dv{constructor(t=256){super(),this.fftSize=t,de(this,"dataArray",new Uint8Array(0))}setNode(t){t.fftSize=this.fftSize,this.dataArray=new Uint8Array(t.frequencyBinCount),super.setNode(t)}getByteTimeDomainData(){var t;return(t=this.node)==null||t.getByteTimeDomainData(this.dataArray),this.dataArray}get level(){var t;return(t=this.node)==null||t.getByteTimeDomainData(this.dataArray),Math.max(...this.dataArray)/128-1}get timeDomainPathData(){const t=this.getByteTimeDomainData();let i=0,r=0,l=`M${i},${r}`;for(let I=0;Ithis.initAudioWorklet()).catch(i=>(this._log.error(`volumeMeter preload error: ${i}`),this.initScriptProcessor()))}initAudioWorklet(){if(!this._audioWorkletNode)try{this._audioWorkletNode=new AudioWorkletNode(rm.audioContext,"volume-meter");let i=!1;this._audioWorkletNode.port.onmessage=r=>{rm.lastMessageTime=Date.now(),this._volume=r.data.volume||0,this._volumeDb=r.data.volumeDb||0,!i&&r.data.cacheLen&&r.data.outputLen&&(this._log.warn("worklet play success"),i=!0)},this.handleAudioLevelInterval({interval:this._interval})}catch(i){this._log.error(`volumeMeter init audio worklet error: ${i}`),oh.logFailedEvent({userId:this._log.userId,eventType:tU.LOAD_WORKLET,error:i}),this.initScriptProcessor()}}initScriptProcessor(){if(!this._scriptProcessorNode)try{this._scriptProcessorNode=oD("volume-meter").createScriptProcessor(2048,1,1),this._scriptProcessorNode.onaudioprocess=i=>{rm.lastMessageTime=Date.now();const r=i.inputBuffer.getChannelData(0);let l=0;for(let I=0;I>2);t.copyTo(r,{planeIndex:0}),this.node.port.postMessage({name:"chunk",data:r},[r.buffer]),t.close()}}},uuA=dT(PU()),VZ=t=>i=>i.deviceId===t,n3=class{constructor(t,i){de(this,"kind"),de(this,"type"),de(this,"devices",[]),this.kind=t,this.type=i}update(t,i){const r=t.filter(l=>l.kind===`${this.kind}${this.type.toLocaleLowerCase()}`);this.devices.length===1&&p$(this.devices[0])||i&&(r.forEach(l=>{if(l.deviceId&&!this.devices.find(VZ(l.deviceId))){const I=`${this.kind}${this.type}Added`;Wo.warn(`${I}: ${JSON.stringify(l)}`),i.emit(I,l)}}),this.devices.forEach(l=>{if(l.deviceId&&!r.find(VZ(l.deviceId))){const I=`${this.kind}${this.type}Removed`;Wo.warn(`${I}: ${JSON.stringify(l)}`),i.emit(I,l)}})),this.devices=r}hasDevice(t){return!!this.devices.find(i=>i.deviceId===t)}},EuA=class extends uuA.EventEmitter{constructor(){super(),de(this,"audioInputs",new n3($t.AUDIO,"Input")),de(this,"videoInputs",new n3($t.VIDEO,"Input")),de(this,"audioOutputs",new n3($t.AUDIO,"Output")),this.init(),navigator.mediaDevices&&(navigator.mediaDevices.addEventListener&&navigator.mediaDevices.addEventListener("devicechange",()=>this.update()),"ondevicechange"in navigator.mediaDevices||yQ.run("interval",()=>{this.update()},{delay:1e4}))}init(){AW().then(t=>{this.audioInputs.update(t),this.videoInputs.update(t),this.audioOutputs.update(t)})}async update(t=0){const i=await AW(t);return this.audioInputs.update(i,this),this.videoInputs.update(i,this),this.audioOutputs.update(i,this),this}hasBlueTooth(){var t;if(1e3*((t=oD())==null?void 0:t.outputLatency)>150)return!0;const i=["bluetooth","air","wireless","bt","tws","buds","headset","headphone"];return this.audioOutputs.devices.some(r=>i.some(l=>r.label.toLowerCase().includes(l)))||this.audioInputs.devices.some(r=>i.some(l=>r.label.toLowerCase().includes(l)))}},mQ=JX||VX?null:new EuA;function p$(t){return t.deviceId===t.groupId&&t.groupId===""}async function AW(t=0){if(mV()||!C4())return[];let i=await navigator.mediaDevices.enumerateDevices();if(t!==0){const r={audio:!1,video:!1};if(i.forEach(l=>{p$(l)&&(l.kind===$t.AUDIO_INPUT?r.audio=!0:l.kind===$t.VIDEO_INPUT&&(r.video=!0))}),t===2&&(r.audio=!1),t===1&&(r.video=!1),r.audio||r.video){let l;try{l=await navigator.mediaDevices.getUserMedia(r),r.audio&&kY()}catch(I){Wo.debug("capture before getDevices failed: ",I)}i=await navigator.mediaDevices.enumerateDevices(),l?.getTracks().forEach(I=>I.stop())}}return i.map((r,l)=>{const I={kind:r.kind,deviceId:r.deviceId,groupId:r.groupId,label:r.label||`${r.kind}_${l}`};return r.deviceId.length>0&&D4.add(`${r.deviceId}_${r.kind}`),r.getCapabilities&&(I.getCapabilities=()=>r.getCapabilities()),I})}function MU(t=!1){return mQ.update(t?1:0).then(i=>i.audioInputs.devices)}function Sv(t=!1){return mQ.update(t?2:0).then(i=>i.videoInputs.devices)}var JZ=!1;async function duA(){try{JZ||(JZ=!0,Wo.info(`speakers:${(await CuA()).map(t=>` ${t.deviceId.slice(0,8)}: ${t.label}`)}`))}catch{}}async function CuA(t=!1){return(Mu||ld)&&(t=!1),mQ.update(t?1:0).then(i=>i.audioOutputs.devices)}var aY,D4=new Set;function huA(t){if(t instanceof CanvasCaptureMediaStreamTrack||!(t instanceof MediaStreamTrack))return!1;const i=t.label.toLocaleLowerCase();if(i.includes("camera")||i.includes("webcam"))return!0;const r=`${(t?.getSettings()||{}).deviceId}_${$t.VIDEO_INPUT}`;return!!D4.has(r)}function BuA(t){if(t instanceof CanvasCaptureMediaStreamTrack||!(t instanceof MediaStreamTrack))return!1;const i=t.label.toLocaleLowerCase();if(i.includes("mic")||i.includes("麦克风"))return!0;const r=`${(t?.getSettings()||{}).deviceId}_${$t.AUDIO_INPUT}`;return!!D4.has(r)}async function QuA(t,i){const r=(await MU()).find(l=>l.deviceId===KX);return!i&&r?.groupId===t||r?.groupId===t&&r.label===i}async function puA({newDeviceId:t,oldDeviceId:i,oldGroupId:r,oldLabel:l,kind:I}){return t===i&&(I!==$t.AUDIO||t!==KX||await QuA(r,l))}var muA=class extends cuA{constructor(t){super(),this.log=t,de(this,"volumeMeter"),de(this,"volumeMeterAfter3A"),de(this,"volumeDestination"),de(this,"analyser",new guA),this.volumeMeter=new YZ({log:this.log}),this.volumeMeterAfter3A=new YZ({log:this.log}),this.volumeDestination=new Dv,this.volumeMeter.pipeTo(this.volumeDestination)}destroy(){this.gain.deleteNode(),this.volumeMeter.deleteNode(),this.analyser.deleteNode(),this.source.deleteNode(),this.destination.deleteNode(),this.volumeDestination.deleteNode()}},fuA=class extends lv{constructor(t){super(t,$t.AUDIO),de(this,"_outputDeviceId"),de(this,"_floatVolume",1),de(this,"_destination"),de(this,"pipeline"),de(this,"volumeMeterMode","worklet"),de(this,"enableVolumeControlInIOS"),this.enableVolumeControlInIOS=t.enableVolumeControlInIOS,this.mode=0,t.url&&(this.url=t.url),this.pipeline=new muA(this._log)}setTrack(t){}get duration(){var t;return Math.floor(1e3*(((t=this.element)==null?void 0:t.duration)||0))}get currentTime(){var t;return Math.floor(1e3*(((t=this.element)==null?void 0:t.currentTime)||0))}set currentTime(t){this.element&&(this.element.currentTime=t/1e3)}getMediaStream(){return this.pipeline.stream||(this.track?new MediaStream([this.track]):null)}initializeElement(t){if((MQ==="15.2"||MQ==="15.3"||MQ==="15.4")&&this.muted)return void this._log.info("audioElement is muted.");this._log.info("audio player initializeElement");const i=aY||new Audio;i.setAttribute("autoplay","autoplay"),i.srcObject=this.getMediaStream(),i.muted=this.muted,this.url&&(i.crossOrigin="anonymous",i.src=this.url),this.element=i,this.setVolume(Gv(t)?t/100:this._floatVolume),i===aY&&(aY=void 0),this.options.enableTimeupdateEvent&&(this.element.ontimeupdate=()=>this.emit(Vn.TIME_UPDATE,this.currentTime)),this.bindElementEvents()}async play(t){if(this.track||this.url){try{!this.pipeline.source.node&&this.track&&this.pipeline.replaceSource(this.track),this.element||this.initializeElement(t?.volume),this._outputDeviceId&&await this.setSinkId(this._outputDeviceId),this.volumeMeterMode==="worklet"?(this.pipeline.volumeMeter.init(),this.pipeline.volumeMeterAfter3A.init()):this.volumeMeterMode==="analyser"&&this.pipeline.analyser.setNode(oD("player").createAnalyser()),duA()}catch(i){throw this._log.warn(`audio play error: ${i}`),O7(MQ,"18.7",!0)&&this.bindAutoPlayEvent(),i}return super.play()}}stop(t=0){this.pipeline.destroy(),super.stop(t)}setVolume(t){this._floatVolume=t,this.element&&(this.element.volume=t)}async setSinkId(t){var i,r;this._outputDeviceId!==t&&(this._outputDeviceId=t),this.element&&this.element.sinkId!==t&&await((r=(i=this.element).setSinkId)==null?void 0:r.call(i,t))}get useDestination(){return!!this.pipeline.stream}setLoop(t){this.element&&(this.element.loop=t)}getAudioLevel(){return this.pipeline.volumeMeter.getCalculatedVolume()}getInternalAudioLevel(){return this.pipeline.volumeMeter.getInternalAudioLevel()}getInternalAudioLevelAfter3A(){return this.pipeline.volumeMeterAfter3A.getInternalAudioLevel()}},yuA=class extends fuA{constructor(t){super(t),de(this,"_sourceElement"),de(this,"_output",new Dv),this.pipeline.source.pipeTo(this.pipeline.gain),this.pipeline.gain.pipeTo(this.pipeline.volumeMeter).pipeTo(this._output),this.pipeline.gain.pipeTo(this.pipeline.destination)}setOutput(){this.mode=1,this._output.setNode(oD().destination)}write(t){this.pipeline.volumeMeter.write(t)}setTrack(t){var i,r,l;((r=(i=this.element)==null?void 0:i.error)==null?void 0:r.code)!==MediaError.MEDIA_ERR_DECODE&&this.track!==t&&(this.unbindTrackEvents(),this.track=t,this.emit(Vn.MEDIA_TRACK_CHANGED,t),t?(this.bindTrackEvents(),this._sourceElement?this._sourceElement.srcObject=new MediaStream([t]):!this.useDestination&&this.element&&(this.element.srcObject=new MediaStream([t])),this.pipeline.source.channelCount=((l=t.getSettings())==null?void 0:l.channelCount)||1,this.pipeline.replaceSource(t)):this.pipeline.source.deleteNode())}setVolume(t){var i;const r=t<=1&&!RY();if(!(this._floatVolume===t&&(r&&((i=this.element)==null?void 0:i.volume)===t||!r&&this.pipeline.volume===t)))if(this._floatVolume=t,this.useDestination)this.pipeline.setVolume(t),this._log.info(`set pipeline volume: ${t}`);else if(r)this.element?(this._log.info(`set element volume: ${t}`),this.element.volume=t):this._log.info("set element volume: no element");else{if(RY()){if(!this.enableVolumeControlInIOS)return;auA()}if(sC&&!this.pipeline.source.node)return void this._log.warn("set pipeline volume failed: no source node");this._log.info(`start set pipeline volume: ${t}`),this.pipeline.setVolume(t),this.element&&!this._sourceElement&&(this._destination||(this._destination=oD().createMediaStreamDestination()),this.pipeline.destination.setNode(this._destination),yU(this.element),this._sourceElement=this.element,this._sourceElement.muted=!0,this.element=null,this.play().catch(l=>{this.emit(Vn.AUTOPLAY_FAILED,l)}))}}stop(t=0){this.pipeline.destroy();const i=this._sourceElement||this.element;i&&F7&&(aY=i),this._sourceElement&&(this._sourceElement.srcObject=null,delete this._sourceElement),super.stop(t)}},S4=class extends Xn{constructor({userId:t,sdkAppId:i,mediaType:r,room:l,PlayerClass:I=r===1?yuA:Oy}){var h;super(),de(this,"id",q7()),de(this,"userId",""),de(this,"isRemote"),de(this,"mediaType"),de(this,"room"),de(this,"user"),de(this,"_log"),de(this,"_inputTrack"),de(this,"_outputTrack"),de(this,"isPlayCalled"),de(this,"container",null),de(this,"player"),de(this,"subVideoPlayerMap"),de(this,"muted",!1),de(this,"abortCtrl"),de(this,"objectFit","cover"),de(this,"mirror"),de(this,"rotation"),de(this,"isScreen",!1),de(this,"manager"),de(this,"trackSettings"),de(this,"isFirstVideoFrameEmitted",!1),this.userId=t||"",this.mediaType=r,this._log=Wo.createLogger({parent:l?.getLogger(),id:`${this.kind[0]}t`,userId:(h=l||this.room)==null?void 0:h.userId,remoteUserId:this instanceof hv?void 0:this.userId,sdkAppId:i,type:this.mediaType===2?"auxiliary":"main",isLocal:this instanceof hv}),this.player=new I({id:this.userId||this.id,track:null,muted:!1,container:null,log:this._log,enableVolumeControlInIOS:l?.enableVolumeControlInIOS}),this.player.on(Vn.PLAYER_STATE_CHANGED,f=>{if(ps.emit(mn.PLAYER_STATE_CHANGED,Rn({track:this},f)),this.emit("player-state-changed",f),f.state==="PLAYING"&&this.room){let w=!0;for(const{remoteAudioTrack:_,remoteVideoTrack:G,remoteAuxiliaryTrack:U}of[...this.room.remotePublishedUserMap.values()])if(_.isAvailable&&!_.player.isPlaying||G.isAvailable&&!G.player.isPlaying||U.isAvailable&&!U.player.isPlaying){w=!1;break}w&&DU()&&iuA()}}),this.kind===$t.VIDEO&&(this.player.on(Vn.LOADED_DATA,()=>{this.emitFirstVideoFrameEvent(Vn.LOADED_DATA),ps.emit(mn.VIDEO_LOADED_DATA,{track:this})}),this.player.on(Vn.LOADED_META_DATA,()=>{this.emitFirstVideoFrameEvent(Vn.LOADED_META_DATA)}),this.player.on(Vn.MEDIA_TRACK_CHANGED,f=>{var w;(w=this.subVideoPlayerMap)==null||w.forEach(_=>_.setTrack(f))}),this.player.on(Vn.RESIZE,f=>{this.emitFirstVideoFrameEvent(Vn.RESIZE),this.emit("video-size-changed",Rn({userId:this.userId,streamType:this.mediaType===2?"auxiliary":"main"},f))}),this.player.on(Vn.FIRST_FRAME_RENDER,f=>{this.emit("first-frame-render",nB(Rn({},f),{streamType:this.streamType,userId:this.isRemote?this.userId:""}))})),this.onTrackMuted=this.onTrackMuted.bind(this),this.onTrackUnmuted=this.onTrackUnmuted.bind(this),this.onTrackEnded=this.onTrackEnded.bind(this),this.onPlayerError&&this.player.on(Vn.ERROR,this.onPlayerError.bind(this)),this.player.on(Vn.AUTOPLAY_FAILED,this.handleAutoPlayFailed,this)}get log(){return this._log||Wo}get kind(){return this.mediaType===1?$t.AUDIO:$t.VIDEO}get isAudio(){return this.kind===$t.AUDIO}get strMediaType(){return this.mediaType===4?$t.VIDEO:this.mediaType===2?$t.SCREEN:$t.AUDIO}get streamType(){return 2&this.mediaType?"auxiliary":"main"}get isMediaTrackActive(){return!!this.mediaTrack&&!this.mediaTrack.muted&&this.mediaTrack.readyState==="live"&&this.mediaTrack.enabled}async play(t,i){const r=Ah(t)?t[0]:t;if(this.isPlayCalled)return this.log.info(`play update options: ${JSON.stringify(i)}`),i&&!$n(i.muted)&&this.setPlayerMute(i.muted),i&&!$n(i.objectFit)&&(this.objectFit=i.objectFit),void(this.player instanceof Oy&&(this.player.setObjectFit(this.objectFit),this.container!==r&&r&&(Ah(t)&&t.length>=1&&this.container&&t.includes(this.container)&&this.container.contains(this.player.elementToRender)?(t.splice(t.indexOf(this.container),1),t.unshift(this.container)):(this.container=r,this.player.setContainer(r))),Ah(t)&&t.length>=1&&await this.playSubContainer(t.slice(1),i)));if(i&&!$n(i.muted)?this.setPlayerMute(i.muted):this.isRemote&&this.kind!==$t.VIDEO||this.setPlayerMute(!0),i&&!$n(i.objectFit)&&(this.objectFit=i.objectFit),this.player instanceof Oy&&($n(i?.isLiveStream)||this.player.setLiveMode(i.isLiveStream),this.player.setObjectFit(this.objectFit),i&&!$n(i.poster)&&this.player.setPoster(i.poster)),this.isPlayCalled=!0,r&&(this.container=r,this.player instanceof Oy&&this.player.setContainer(r)),ps.emit(mn.PLAY_TRACK_START,{track:this}),this._outputTrack){this._log.info(`play with options: ${JSON.stringify(i)}`);try{this.player.setTrack(this.playerMediaTrack),await this.player.play(i),Ah(t)&&t.length>1&&await this.playSubContainer(t.slice(1),i)}catch(l){throw this.handleAutoPlayFailed(l),l}}else this.log.info("play has not mediaTrack, abort")}setMirror(t,i){if(this.isScreen||this.kind!==$t.VIDEO||$n(t)||t===this.mirror)return;this.mirror=t;let r=this.player;i&&(r=i);const l=this.manager;if(fv(this.mirror))return r.setViewMirror(this.mirror),void(!this.isRemote&&l&&(l.mirror=!1));switch(this.mirror){case"view":l&&(l.mirror=!1),r.setViewMirror(!0);break;case"publish":l&&(l.mirror=!0),r.setViewMirror(!0);break;case"both":l&&(l.mirror=!0),r.setViewMirror(!1)}}async playSubContainer(t,i){if(!this._outputTrack||this.kind===$t.AUDIO)return;this.subVideoPlayerMap||(this.subVideoPlayerMap=new Map),this.subVideoPlayerMap.forEach((l,I)=>{var h;t.find(f=>I===f)||(l.stop(),(h=this.subVideoPlayerMap)==null||h.delete(I))});for(const[l,I]of t.entries()){const h=this.subVideoPlayerMap.get(I);h?i&&($n(i.objectFit)||h.setObjectFit(i.objectFit)):this.subVideoPlayerMap.set(I,new Oy({id:this.userId||this.id,track:this.playerMediaTrack,container:I,muted:this.player.muted,objectFit:this.objectFit,log:this.log.createChild({id:`vp-sub${l+1}`})}))}const r=[...this.subVideoPlayerMap.values()];for(const l of r)l.setViewMirror(this.player.mirror),await l.play()}setAudioOutput(t){return this.player.setSinkId(t)}setAudioVolume(t){this.player.setVolume(t)}getAudioLevel(){return this.player.getAudioLevel()||0}getInternalAudioLevel(){var t;return((t=this.player)==null?void 0:t.getInternalAudioLevel())||0}stop(t=!1){this.isPlayCalled&&(this.isPlayCalled=!1,this.isFirstVideoFrameEmitted=!1,this.player&&(this.log.info(`stop ${this.kind} player`),this.player.stop(Wj(this)&&!t?this.jitterBufferDelay:0)),this.subVideoPlayerMap&&this.subVideoPlayerMap.size>0&&this.subVideoPlayerMap.forEach(i=>{i.stop()}),this.container=null)}async resume(){var t;this.isPlayCalled&&await((t=this.player)==null?void 0:t.resume())}close(){this._toInitState(),this.log.info("close"),this.isPlayCalled&&this.stop(!0)}_toInitState(){}setMute(t){this.muted=t,this._inputTrack&&(this._inputTrack.enabled=!t),this._outputTrack&&(this._outputTrack.enabled=!t),this.emit(t?"mute":"unmute",this),ps.emit(t?mn.TRACK_MUTED:mn.TRACK_UNMUTED,{track:this})}setPlayerMute(t){this.player.setMuted(t)}get mediaTrack(){return this._inputTrack||null}get outMediaTrack(){return this._outputTrack||null}get playerMediaTrack(){return this.outMediaTrack}installTrackEvent(t){f4(t,t).add($t.MUTE,this.onTrackMuted).add($t.UNMUTE,this.onTrackUnmuted).add($t.ENDED,this.onTrackEnded),t.muted&&this.onTrackMuted(),t.readyState===$t.ENDED&&this.onTrackEnded()}uninstallTrackEvent(t){yU(t)}setInputMediaStreamTrack(t){var i;const r=this._inputTrack;if(t!==r)return this._inputTrack=t,this.trackSettings=(i=t.getSettings)==null?void 0:i.call(t),t.enabled=!this.muted,r&&this.uninstallTrackEvent(r),this.installTrackEvent(t),this.emit("input-media-track-changed",t||null,r||null),this.manager?this.manager.changeInput(this):this.setOutputMediaStreamTrack(t)}setOutputMediaStreamTrack(t){var i;const r=this._outputTrack;this instanceof DV&&$W(r)||t!==r&&(this.isRemote?this.log.debug("setOutputMediaStreamTrack",t.label):this.log.info("setOutputMediaStreamTrack",(i=t.getSettings)==null?void 0:i.call(t).deviceId,t.label),this._outputTrack=t,this._inputTrack&&(this._outputTrack.contentHint=this._inputTrack.contentHint,this._outputTrack.enabled=this._inputTrack.enabled),this.updatePlayingState(!!t),this.emit("output-media-track-changed",t))}setMediaType(t){this.mediaType=t}updatePlayingState(t){var i,r;if(this.isPlayCalled){if(t){if(this.player.setTrack(this.playerMediaTrack),this.player.isStopped)return this.player.play().catch(l=>this.handleAutoPlayFailed(l)),void this.log.info(`playing state updated, play ${this.kind}`)}else if(!this.player.isStopped)return Wj(this)&&this.isAudio&&((i=this.user)!=null&&i.muteState.hasAudio)&&((r=this.user)!=null&&r.muteState.audioMuted)?void 0:(this.player.stop(Wj(this)?this.jitterBufferDelay:0),void this.log.info(`playing state updated, stop ${this.kind}`))}this.log.debug(`updatePlayingState abort ${this.isPlayCalled} ${t} ${this.player.isStopped}`)}async handleAutoPlayFailed(t){var i;this.log.warn("handleAutoPlayFailed",t);const r=()=>{this.resume().then(()=>{document.removeEventListener("click",r,!0)})};if(this.room&&this.room.enableAutoPlayDialog){if((CT||VU)&&(await rT(100),(i=this.player)==null?void 0:i.isPlaying))return;tuA()}else document.addEventListener("click",r,!0);ps.once(mn.LOCAL_TRACK_CAPTURE_SUCCESS,({track:l})=>{l.kind==="audio"&&DU()&&!this.player.isPlaying&&this.isRemote&&this.isAvailable&&r()}),this.emit("error",t)}getVideoFrame(){return this.player instanceof Oy?this.player.getVideoFrame():""}emitFirstVideoFrameEvent(t){var i,r,l;if(this.isFirstVideoFrameEmitted)return;const I=(i=this.mediaTrack)==null?void 0:i.getSettings();let h=I?.width||((r=this.player.element)==null?void 0:r.videoWidth)||0,f=I?.height||((l=this.player.element)==null?void 0:l.videoHeight)||0;(t!==Vn.RESIZE||h||f)&&(t!==Vn.LOADED_META_DATA||h||f)&&(t!==Vn.LOADED_DATA||h||f||this._log.warn("the dimension of video is 0x0 in first-video-frame event"),this.isFirstVideoFrameEmitted=!0,a7(this.rotation)&&([h,f]=[f,h]),this.emit("first-video-frame",{width:h,height:f,streamType:this.streamType,userId:this.isRemote?this.userId:""}))}onTrackMuted(){this._log.warn(`${this.kind} track is unable to provide media output`)}onTrackUnmuted(){this._log.info(`${this.kind} track is able to provide media output`)}onTrackEnded(){this._log.warn(`${this.kind} track ended`)}};Cc([Du([],Xn.INIT,{sync:!0})],S4.prototype,"_toInitState");var DuA=Object.prototype.hasOwnProperty;function SuA(t){if(t==null)return!0;if(typeof t=="boolean")return!1;if(typeof t=="number")return t===0;if(typeof t=="string"||typeof t=="function"||Array.isArray(t))return t.length===0;if(t instanceof Error)return t.message==="";if(nT(t))switch(Object.prototype.toString.call(t)){case"[object File]":case"[object Map]":case"[object Set]":return t.size===0;case"[object Object]":for(const i in t)if(DuA.call(t,i))return!1;return!0}return!1}var LY=SuA,MuA=async function(t){const i=RuA(t);Wo.info(`getUserMedia with constraints: ${JSON.stringify(i)}`);let r=[],l=[];const I=["label","deviceId","groupId"];if(i.audio&&(r=await MU(),Wo.info(`microphones: ${Zy(r.map(h=>nB(Rn({},h),{groupId:h.groupId.substring(0,8)})),{keysToInclude:I})}`)),i.video&&(l=await Sv(),Wo.info(`cameras: ${Zy(l,{keysToInclude:I})}`),!fv(i.video)&&i.video.facingMode==="user"&&!i.video.deviceId)){const h=l.filter(f=>!f.label.includes("infrared")).find(f=>f.label.includes("facing front"));h&&(i.video.deviceId=h.deviceId,Wo.info(`exclude infrared camera: ${JSON.stringify(i)}`))}try{const h=await navigator.mediaDevices.getUserMedia(i);return r$&&h.getTracks().forEach(f=>{var w;const _=f.getCapabilities();Wo.info(`${f.kind} capabilities: ${Zy(_,{keysToInclude:jX})}`),$n(t.echoCancellation)||((w=_.echoCancellation)==null?void 0:w.indexOf(t.echoCancellation))!==-1||Wo.warn(`Invalid argument for 'echoCancellation'. Expected one of [${JSON.stringify(_.echoCancellation)}], but received '${t.echoCancellation}'`)}),i.audio&&kY(),h}catch(h){let{message:f}=h;throw h.name==="NotFoundError"&&(t.video&&l&&l.length===0&&(f=GY({key:NY.CAMERA_NOT_FOUND})),t.audio&&r&&r.length===0&&(f=GY({key:NY.MICROPHONE_NOT_FOUND}))),new ml({code:qg.INITIALIZE_FAILED,name:h.name,message:f,constraint:h.constraint})}},vuA=A4({retryFunction:MuA,settings:{retries:3,timeout:500},onError:({error:t,retry:i,reject:r,retryFuncArgs:l,retriedCount:I})=>{const h=I+1;t.name==="NotReadableError"||t.name==="OverconstrainedError"||t.name==="AbortError"?(h===1?(l[0].video&&(l[0].maxResolution=!1,(!ld||l[0].width*l[0].height<=2073600)&&l[0].frameRate&&(l[0].frameRate=l[0].frameRate>10?10:5)),l[0].retryWhenExactFailed&&l[0].useExactDeviceId&&(l[0].useExactDeviceId=!1)):h===2?l[0].useDeviceIdOnly=!0:h!==3||l[0].useExactDeviceId||(l[0].useTrueAsConstraint=!0),i()):r(t),l[0].microphoneId&&HZ(l[0].microphoneId,!1),l[0].cameraId&&HZ(l[0].cameraId,!0)},onRetrying:t=>{Wo.warn(`getUserMedia NotReadableError observed, retrying [${t}/3]`)},onRetryFailed:t=>{oh.logFailedEvent({eventType:tU.GET_USER_MEDIA_RETRY,error:t})},onRetrySuccess:t=>{oh.logSuccessEvent({eventType:tU.GET_USER_MEDIA_RETRY}),oh.uploadEvent({log:`stat-${tU.GET_USER_MEDIA_RETRY}-success-${t}`})}});async function HZ(t,i){const r=(i?await Sv():await MU()).find(l=>l.deviceId===t);r&&mv(r.getCapabilities)&&Wo.warn(Zy(r.getCapabilities(),{keysToInclude:jX}))}function RuA(t){return{audio:wuA(t),video:_uA(t)}}function wuA(t){if(!t.audio)return!1;if(t.useTrueAsConstraint)return!0;const i={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,sampleRate:t.sampleRate};return!LY(t.microphoneId)&&(i.deviceId=t.useExactDeviceId?{exact:t.microphoneId}:t.microphoneId,t.useDeviceIdOnly)?i:(Gv(t.channelCount)&&(i.channelCount=t.channelCount),(fv(t.echoCancellation)||t.echoCancellation==="remote-only"||t.echoCancellation==="all")&&(i.echoCancellation=t.echoCancellation),fv(t.noiseSuppression)&&!t.noiseSuppression&&(i.noiseSuppression=!1),fv(t.autoGainControl)&&!t.autoGainControl&&(i.autoGainControl=!1),!!LY(i)||i)}function _uA(t){if(!t.video)return!1;if(t.useTrueAsConstraint)return!0;const{maxResolution:i=!0}=t,r={};return t.cameraId?r.deviceId=t.useExactDeviceId?{exact:t.cameraId}:t.cameraId:t.facingMode&&(r.facingMode=t.facingMode),t.useDeviceIdOnly&&!LY(r)?r:(t.width&&(r.width={ideal:t.width},i&&!sC&&(r.width.max=t.width)),t.height&&(r.height={ideal:t.height},i&&!sC&&(r.height.max=t.height)),sC&&QV&&t.width&&t.height&&t.width*t.height<101376&&(r.width=t.width,r.height=t.height),t.frameRate&&(r.frameRate=t.frameRate),!!LY(r)||r)}var TuA=vuA;function m$(t){return yV((i,r)=>async function(...l){const I=await i.apply(this,l);return await t.call(this,...l),I})}function yV(t){return function(i,r,l){return l.value=t(l.value,r),l}}var NuA=(()=>{let t=!1,i=document.visibilityState;return()=>{document.visibilityState!==i&&Wo.info(`visibility change: ${document.visibilityState}`),t||(document.addEventListener("visibilitychange",()=>{Wo.info(`visibility change: ${document.visibilityState}`),i=document.visibilityState}),t=!0)}})(),GuA=0,buA=class{constructor(t){de(this,"log"),de(this,"isRunning",!1),de(this,"queue",[]);let i="fq"+ ++GuA;t&&(i+=`|${t}`),this.log=Wo.createLogger({id:i})}get length(){return this.queue.length}get lastQueueItem(){return this.length===0?null:this.queue[this.length-1]}push(t,i=!1){var r,l;const I=Rn({},t),h=new Promise((f,w)=>{I.resolve=f,I.reject=w});return I.promise=h,i?this.length<=1?this.queue.push(I):(l=(r=this.lastQueueItem)==null?void 0:r.promise)==null||l.then(I.resolve,I.reject):this.queue.push(I),this.log.debug(`push ${this.length}`,t.funcName,t.args),this.isRunning||this.callNext(),h}shift(){const t=this.queue.shift();return this.log.debug(`shift ${this.length}`,t?.funcName,t?.args),t}callNext(){if(this.isRunning||this.length===0)return;const{fn:t,args:i,context:r,resolve:l,reject:I,funcName:h}=this.queue[0];this.log.debug("callNext",this.length,h,i),this.isRunning=!0,t.apply(r,i).then(l,I).finally(()=>{this.isRunning=!1,this.shift(),this.callNext()})}},qZ=new WeakMap;function kuA(t=!1){return function(i,r,l){const I=l.value;return l.value=function(...h){const f=qZ.get(this)||new buA;return qZ.set(this,f),f.push({fn:I,args:h,context:this,funcName:r},t)},l}}function f$(t,i){return yV((r,l)=>function(...I){const h=t;try{const f=r.apply(this,I),w=Yc();return $X(f)?f.then(_=>(i?Ir.addSuccessEvent({key:h,cost:Yc()-w}):Ir.addSuccessEvent({key:h}),_)).catch(_=>{throw Ir.addFailedEvent({key:h,error:_}),_}):(Ir.addSuccessEvent({key:h}),f)}catch(f){throw Ir.addFailedEvent({key:h,error:f}),f}})}function $l(...t){}var LuA=t=>t();function UuA(){this.dispose()}var FuA=()=>typeof __FASTRX_DEVTOOLS__<"u",OuA=1,aT=class extends Function{toString(){return`${this.name}(${this.args.length?[...this.args].join(", "):""})`}subscribe(t){const i=new xuA(t,this,this.streamId++);return Ql.subscribe({id:this.id,end:!1},{nodeId:i.sourceId,streamId:i.id}),this(i),i}},M4=class{constructor(){this.defers=new Set,this.disposed=!1}next(t){}complete(){this.dispose()}error(t){this.dispose()}get bindDispose(){return()=>this.dispose()}dispose(){this.disposed=!0,this.complete=$l,this.error=$l,this.next=$l,this.dispose=$l,this.subscribe=$l,this.doDefer()}subscribe(t){return t instanceof aT?t.subscribe(this):t(this),this}get bindSubscribe(){return t=>this.subscribe(t)}doDefer(){this.defers.forEach(LuA),this.defers.clear()}defer(t){this.defers.add(t)}removeDefer(t){this.defers.delete(t)}reset(){this.disposed=!1,delete this.complete,delete this.next,delete this.dispose,delete this.next,delete this.subscribe}resetNext(){delete this.next}resetComplete(){delete this.complete}resetError(){delete this.error}},aB=class extends M4{constructor(t){super(),this.sink=t,t.defer(this.bindDispose)}next(t){this.sink.next(t)}complete(){this.sink.complete()}error(t){this.sink.error(t)}},PuA=class extends M4{constructor(t,i=$l,r=$l,l=$l){if(super(),this._next=i,this._error=r,this._complete=l,this.then=$l,t instanceof aT){const I={toString:()=>"subscribe",id:0,source:t};this.defer(()=>{Ql.defer(I,0)}),Ql.create(I),Ql.pipe(I),this.sourceId=I.id,this.subscribe(t),Ql.subscribe({id:I.id,end:!0}),i==$l?this._next=h=>Ql.next(I,0,h):this.next=h=>{Ql.next(I,0,h),i(h)},l==$l?this._complete=()=>Ql.complete(I,0):this.complete=()=>{this.dispose(),Ql.complete(I,0),l()},r==$l?this._error=h=>Ql.complete(I,0,h):this.error=h=>{this.dispose(),Ql.complete(I,0,h),r(h)}}else this.subscribe(t)}next(t){this._next(t)}complete(){this.dispose(),this._complete()}error(t){this.dispose(),this._error(t)}};function $C(t,...i){return i.reduce((r,l)=>l(r),t)}function nC(t,i,r){if(FuA()){const l=Object.defineProperties(Object.setPrototypeOf(t,aT.prototype),{streamId:{value:0,writable:!0,configurable:!0},name:{value:i,writable:!0,configurable:!0},args:{value:r,writable:!0,configurable:!0},id:{value:0,writable:!0,configurable:!0}});Ql.create(l);for(let I=0;I{if(l instanceof aT){const I=nC(h=>{const f=new t(h,...r);f.sourceId=I.id,f.subscribe(l)},i,arguments);return I.source=l,Ql.pipe(I),I}return I=>l(new t(I,...r))}}}function Ty(t,i){window.postMessage({source:"fastrx-devtools-backend",payload:{event:t,payload:i}})}var xuA=class extends aB{constructor(t,i,r){super(t),this.source=i,this.id=r,this.sourceId=t.sourceId,this.defer(()=>{Ql.defer(this.source,this.id)})}next(t){Ql.next(this.source,this.id,t),this.sink.next(t)}complete(){Ql.complete(this.source,this.id),this.sink.complete()}error(t){Ql.complete(this.source,this.id,t),this.sink.error(t)}},Ql={addSource(t,i){Ty("addSource",{id:t.id,name:t.toString(),source:{id:i.id,name:i.toString()}})},next(t,i,r){Ty("next",{id:t.id,streamId:i,data:r&&r.toString()})},subscribe({id:t,end:i},r){Ty("subscribe",{id:t,end:i,sink:{nodeId:r&&r.nodeId,streamId:r&&r.streamId}})},complete(t,i,r){Ty("complete",{id:t.id,streamId:i,err:r?r.toString():null})},defer(t,i){Ty("defer",{id:t.id,streamId:i})},pipe(t){Ty("pipe",{name:t.toString(),id:t.id,source:{id:t.source.id,name:t.source.toString()}})},update(t){Ty("update",{id:t.id,name:t.toString()})},create(t){t.id||(t.id=OuA++),Ty("create",{name:t.toString(),id:t.id})}},YuA=class extends M4{constructor(t){super(),this.source=t,this.sinks=new Set}add(t){t.defer(()=>this.remove(t)),this.sinks.add(t).size===1&&(this.reset(),this.subscribe(this.source))}remove(t){this.sinks.delete(t),this.sinks.size===0&&this.dispose()}next(t){this.sinks.forEach(i=>i.next(t))}complete(){this.sinks.forEach(t=>t.complete()),this.sinks.clear()}error(t){this.sinks.forEach(i=>i.error(t)),this.sinks.clear()}};function y$(){return t=>{const i=new YuA(t);if(t instanceof aT){const r=nC(l=>{i.add(l)},"share",arguments);return i.sourceId=r.id,r.source=t,Ql.pipe(r),r}return nC(i.add.bind(i),"share",arguments)}}function D$(...t){return nC(i=>{const r=new aB(i);let l=t.length;r.complete=()=>{--l===0&&i.complete()},t.forEach(r.bindSubscribe)},"merge",arguments)}function VuA(...t){return nC(i=>{const r=new Map;t.forEach(l=>{const I=new aB(i);r.set(l,I),I.complete=()=>{r.delete(l),r.size===0?i.complete():I.dispose()},I.next=h=>{r.delete(l),r.forEach(f=>f.dispose()),I.resetNext(),I.resetComplete(),I.next(h)}}),t.forEach(l=>r.get(l).subscribe(l))},"race",arguments)}function JuA(...t){return i=>nC((r,l=0,I=t.length)=>{for(;l{r.next=I=>l.next(I),r.complete=()=>l.complete(),r.error=I=>l.error(I),t&&l.subscribe(t)},"subject",i));return r.next=$l,r.complete=$l,r.error=$l,r}function HuA(t){return nC(i=>{let r=0;const l=setInterval(()=>i.next(r++),t);return i.defer(()=>{clearInterval(l)}),"interval"},"interval",arguments)}function quA(t,i){return nC(r=>{let l=0;const I=setTimeout(()=>{r.removeDefer(h),r.next(l++),i||r.complete()},t),h=()=>clearTimeout(I);r.defer(h)},"timer",arguments)}function r3(t,i){return r=>{const l=I=>r.next(I);r.defer(()=>i(l)),t(l)}}function fE(t,i){if("on"in t&&"off"in t)return nC(r3(r=>t.on(i,r),r=>t.off(i,r)),"fromEvent",arguments);if("addListener"in t&&"removeListener"in t)return nC(r3(r=>t.addListener(i,r),r=>t.removeListener(i,r)),"fromEvent",arguments);if("addEventListener"in t)return nC(r3(r=>t.addEventListener(i,r),r=>t.removeEventListener(i,r)),"fromEvent",arguments);throw"target is not a EventDispachter"}function KuA(){return nC(t=>t.complete(),"empty",arguments)}var juA=class extends aB{constructor(t,i,r){super(t),this.filter=i,this.thisArg=r}next(t){this.filter.call(this.thisArg,t)&&this.sink.next(t)}},$_=Uv(juA,"filter"),WuA=class extends aB{constructor(t,i){super(t),this.count=i}next(t){this.sink.next(t),--this.count===0&&(this.doDefer(),this.complete())}},zuA=Uv(WuA,"take"),ZuA=class extends aB{constructor(t,i){super(t);const r=new aB(t);r.next=()=>{r.doDefer(),t.complete()},r.complete=UuA,r.subscribe(i)}},gT=Uv(ZuA,"takeUntil"),XuA=class extends aB{constructor(t,i){super(t),this.f=i}next(t){this.f(t)||(this.next=super.next,this.next(t))}},$uA=Uv(XuA,"skipWhile"),AEA=class extends aB{constructor(t,i,r){super(t),this.mapper=i,this.thisArg=r}next(t){super.next(this.mapper.call(this.thisArg,t))}},M$=Uv(AEA,"map"),eEA=class extends aB{constructor(t,i,r){super(t),this.data=i,this.context=r}next(t){const i=this.context.combineResults;i?this.sink.next(i(this.data,t)):this.sink.next(t)}tryComplete(){this.context.resetComplete(),this.dispose()}},tEA=class v$ extends aB{constructor(i,r,l){super(i),this.makeSource=r,this.combineResults=l,this.index=0}subInner(i,r){const l=this.currentSink=new r(this.sink,i,this);this.complete===v$.prototype.complete&&(this.complete=this.tryComplete),l.complete=l.tryComplete,l.subscribe(this.makeSource(i,this.index++))}complete(){this.sink.complete()}tryComplete(){this.currentSink.resetComplete(),this.dispose()}},KZ=class extends eEA{},R$=class extends tEA{next(t){this.subInner(t,KZ),this.next=i=>{this.currentSink.dispose(),this.subInner(i,KZ)}}},iEA=Uv(R$,"switchMap");function oEA(t){return(i,r)=>t(()=>i,r)}var w$=oEA(Uv(R$,"switchMapTo")),kv=(t=$l,i=$l,r=$l)=>l=>new PuA(l,t,i,r),_$=(t=>(t[t.AUTO_SWITCH_NEW_DEVICE=0]="AUTO_SWITCH_NEW_DEVICE",t[t.WAIT_CURRENT_DEVICE=1]="WAIT_CURRENT_DEVICE",t))(_$||{}),hv=class extends S4{constructor(t,i){super({mediaType:t,PlayerClass:i}),de(this,"isRemote",!1),de(this,"deviceId"),de(this,"groupId",""),de(this,"label",""),de(this,"sourceTrack"),de(this,"enableAutoSwitchWhenRecapturing",!0),de(this,"_isRecapturing",!1),de(this,"_lastRecaptureTime",0),de(this,"_onMuteTimeoutId",-1),de(this,"_encodeCheckTimeoutId",-1),de(this,"recaptureMode",0),de(this,"profile"),de(this,"retryEncodeFailed")}get enableEncodeFrame(){return!1}get isPublishing(){return this.state.toString()==="publishing"}get isPublished(){return this.state==="publish"}get isUseCustomSource(){return!(!this.mediaTrack||this.sourceTrack===this.mediaTrack)}encodeFrame(t,i){throw new Error("Method not implemented.")}installTrackEvent(t){t.addEventListener($t.MUTE,this.onTrackMuted),t.addEventListener($t.UNMUTE,this.onTrackUnmuted),t.addEventListener($t.ENDED,this.onTrackEnded),t.muted&&this.onTrackMuted(),t.readyState===$t.ENDED&&this.onTrackEnded()}uninstallTrackEvent(t){t.removeEventListener($t.MUTE,this.onTrackMuted),t.removeEventListener($t.UNMUTE,this.onTrackUnmuted),t.removeEventListener($t.ENDED,this.onTrackEnded)}setStateToReady(){}async capture(t,i=!1){var r,l;const I=this.sourceTrack;try{const h=Yc();let f;ps.emit(mn.LOCAL_TRACK_CAPTURE_START,{track:this}),t.customSource?(f=new MediaStream,f.addTrack(t.customSource)):(i||(r=this.sourceTrack)==null||r.stop(),f=await TuA(t));const w=f.getTracks()[0];return await this.setInputMediaStreamTrack(w),t.customSource||(this.sourceTrack=w,this.updateDeviceIdInUse(),this.listenDeviceChange()),ps.emit(mn.LOCAL_TRACK_CAPTURE_SUCCESS,{track:this,cost:Yc()-h,profile:this.profile,room:(l=this.manager)==null?void 0:l.room}),f}catch(h){throw ps.emit(mn.LOCAL_TRACK_CAPTURE_FAILED,{track:this,error:h}),this.log.error(`getUserMedia error observed ${h}`),h}finally{i&&I?.stop()}}setOutputMediaStreamTrack(t){var i;if(super.setOutputMediaStreamTrack(t),this.setStateToReady(),this.isPublishing||this.isPublished)return(i=this.room)==null?void 0:i.replaceTrack(this)}get hasFlag(){var t,i;const r=e7(((t=this.room)==null?void 0:t.localPublishFlag)||0,((i=this.room)==null?void 0:i.userId)||"");return this.mediaType===4&&r.hasVideo||this.mediaType===1&&r.hasAudio||this.mediaType===2&&r.hasAuxiliary}async publish(t,i){return this.room=t,this.room.localTracks.add(this),this.emit("4",{mediaType:this.strMediaType,state:"starting",prevState:"stopped"}),this.userId=t.userId,this._log.bindParent(t.getLogger()),await i,this._checkPublishFlag(t)}_checkPublishFlag(t){return new Promise(async(i,r)=>{var l,I,h,f,w;const _=()=>r(new ml({code:qg.API_CALL_ABORTED,message:"publish aborted"}));if(this.hasFlag||this.muted?i():(this.state!==Xn.INIT&&this.state!=="ready"||_(),$C(fE(t,"local-publish-flag-changed"),$_(()=>this.hasFlag),gT(D$(fE(this,Xn.INIT),fE(this,"ready"))),kv(i,r,_))),(h=(I=(l=this.room)==null?void 0:l.networkQuality)==null?void 0:I.hadRecentBadUplink)==null?void 0:h.call(I,2))return i();const G=t.heartbeatCount,U=((w=(f=this.mediaTrack)==null?void 0:f.stats)==null?void 0:w.totalFrames)||0;this._encodeCheckTimeoutId=setTimeout(async()=>{var j,lA,sA,mA,IA,cA,TA,WA;if((sA=(lA=(j=this.room)==null?void 0:j.networkQuality)==null?void 0:lA.hadRecentBadUplink)!=null&&sA.call(lA,2)||t.heartbeatCount-G<3)return i();if((this.isPublished||this.isPublishing)&&this.isMediaTrackActive){if((mA=this.mediaTrack)!=null&&mA.stats){const xe=this.mediaTrack.stats.totalFrames||0;xe-U===0&&this.log.warn("capture totalFrames is 0 during encode check, totalFrames",xe)}const ue=this.kind===$t.AUDIO,Ce=this.stat.bytesSent>0;if(Ir[Ce?"addSuccessEvent":"addFailedEvent"]({key:ue?503700:513702}),!ue){const xe={H264:513704,H265:513705,VP8:513706}[((cA=(IA=this.room)==null?void 0:IA.videoCodec)==null?void 0:cA.toUpperCase())||"H264"];xe&&Ir[Ce?"addSuccessEvent":"addFailedEvent"]({key:xe})}if(!Ce){if(Ir.addEnum({key:ue?503701:513703,value:u4()}),oh.uploadEvent({log:`stat-encode-failed-${this.kind}-${P7()||Y7()}`,userId:this.userId}),this.log.warn(ue?"encode failed":`${(WA=(TA=this.room)==null?void 0:TA.videoCodec)==null?void 0:WA.toUpperCase()} encode failed`),this.retryEncodeFailed&&(this.log.warn("retry encode"),await this.retryEncodeFailed(this),this.stat.bytesSent>0||this.hasFlag||(await rT(5e3),this.stat.bytesSent>0||this.hasFlag)))return i();this.emit("6",this),r(new ml({message:`${this.strMediaType} encode failed`,code:ue?qg.AUDIO_ENCODE_FAILED:qg.VIDEO_ENCODE_FAILED}))}}},1e4)})}unpublish(){this.room&&this.room.localTracks.delete(this),this.log.info("unpublish"),ps.emit(mn.LOCAL_TRACK_UNPUBLISHED,{track:this})}async updateDeviceIdInUse(){if(this.sourceTrack&&bY){const{deviceId:t,groupId:i}=this.sourceTrack.getSettings(),{label:r}=this.sourceTrack;await puA({newDeviceId:t,oldDeviceId:this.deviceId,oldGroupId:this.groupId,oldLabel:this.label,kind:this.kind})||(this.deviceId=t,this.label=r,i&&(this.groupId=i),AW().then(l=>{const I=l.find(h=>{let f=h.deviceId===t;return i&&(f=f&&h.groupId===i),f});I&&this.emit("2",I)}))}}setProfile(t){this.log.info("setProfile",t),Object.assign(this.profile,t)}isNeedToRecapture(t=!1){return!(!this.deviceId||!this.sourceTrack||this.kind===$t.AUDIO&&!BuA(this.sourceTrack)||this.kind===$t.VIDEO&&!huA(this.sourceTrack)||this._isRecapturing||t&&QV&&ld)}onTrackMuted(){super.onTrackMuted(),NuA(),this.isNeedToRecapture(!0)&&(Date.now()-this._lastRecaptureTimethis.onTrackMuted(),O1):this._onMuteTimeoutId=setTimeout(async()=>{var t;if((t=this.sourceTrack)!=null&&t.muted){if((Mu||aC)&&document.visibilityState!=="visible")return;this.recapture(await this.getRecoverCaptureDeviceId())}},5e3))}onTrackUnmuted(){super.onTrackUnmuted(),this._onMuteTimeoutId>0&&clearTimeout(this._onMuteTimeoutId)}async onTrackEnded(){if(super.onTrackEnded(),this.isNeedToRecapture()&&this.recaptureMode===0){if(Date.now()-this._lastRecaptureTimethis.onTrackEnded(),O1);this.emit("7"),this.recapture(await this.getRecoverCaptureDeviceId())}}async recapture(t,i=!1){var r;if(this._isRecapturing||!this.sourceTrack)return;this.log.warn("recapture trying");const l=this.sourceTrack;i||(r=this.sourceTrack)==null||r.stop(),this._isRecapturing=!0,this._lastRecaptureTime=Date.now();const I={useExactDeviceId:!0};if(t==="user"||t==="environment")I.facingMode=t;else{let h;(this.kind==="audio"?await MU():await Sv()).find(f=>f.deviceId===t)&&(h=t),I.deviceId=h}return this.capture(I,i).then(()=>{this._isRecapturing=!1,this.log.warn("recapture success"),this.emit("1",{deviceId:this.deviceId}),ps.emit(mn.LOCAL_TRACK_RECAPTURE,{track:this})}).catch(h=>{this._isRecapturing=!1,this.log.warn(`recapture failed ${h.message}`),this.emit("5",h),ps.emit(mn.LOCAL_TRACK_RECAPTURE,{track:this,error:h})}).finally(()=>{i&&l?.stop()})}async getRecoverCaptureDeviceId(){const t=this instanceof DV;if(t&&this.facingMode)return this.facingMode;let{deviceId:i}=this;if(i){const r=(OL.get(i)||0)+1;if(OL.set(i,r),r>=3&&this.enableAutoSwitchWhenRecapturing){const l=t?(await Sv()).find(I=>!OL.has(I.deviceId)):(await MU()).find(I=>!OL.has(I.deviceId));l&&(this.log.warn(`${i} capture fail ${r} times, change new ${l.deviceId}`),i=l.deviceId)}}return i}stopCapture(){var t;this.sourceTrack&&(this.sourceTrack.stop(),ps.emit(mn.LOCAL_TRACK_STOPPED,{track:this}),this.uninstallTrackEvent(this.sourceTrack)),this._inputTrack&&this.uninstallTrackEvent(this._inputTrack),(t=this.manager)==null||t.removeInput(this),this._onMuteTimeoutId&&clearTimeout(this._onMuteTimeoutId)}close(){super.close(),this.stopCapture()}};Cc([Du(Xn.INIT,"ready",{ignoreError:!0,sync:!0})],hv.prototype,"setStateToReady"),Cc([kuA()],hv.prototype,"capture"),Cc([Du("ready","publish",{ignoreError:!0,success(){ps.emit(mn.LOCAL_TRACK_PUBLISHED,{track:this,room:this.room}),this.emit("4",{mediaType:this.strMediaType,state:"started",prevState:"starting"}),this.log.info("published")},fail(t){var i;(i=this.room)==null||i.localTracks.delete(this);let r="error";const l=t instanceof ml?t:t.cause instanceof ml?t.cause:t;let I=!1;l instanceof ml&&(l.message.includes("timeout")?r="timeout":l.code===qg.API_CALL_ABORTED&&(I=!0,r="api-call")),this.emit("4",{mediaType:this.strMediaType,state:"stopped",prevState:"starting",reason:r,error:l}),this.log[I?"info":"error"]("publish failed",l)}}),f$(521714,!1)],hv.prototype,"publish"),Cc([yV(t=>async function(){const i=this.state==="publish"?"started":"starting";t.call(this),this.emit("4",{mediaType:this.strMediaType,state:"stopped",prevState:i,reason:"api-call"}),clearTimeout(this._encodeCheckTimeoutId)}),Du([],"ready",{sync:!0})],hv.prototype,"unpublish");var OL=new Map;ps.on(mn.SWITCH_DEVICE_SUCCESS,t=>{t.track.deviceId&&OL.delete(t.track.deviceId)});var sEA=class{constructor(t,i=!1){this.dataView=t,this.isSEI&&(i?this.addPreventionByte():this.removePreventionByte())}addPreventionByte(){const{seiPayloadStartIndex:t}=this,i=this.dataView.byteLength-2,r=[];let l=0;for(let h=t;h<=i;h++){const f=this.dataView.getInt8(h);switch(f){case 0:case 1:case 2:case 3:l===2&&(r.push(3),l=0),f===0?l+=1:l=0,r.push(f);break;default:l=0,r.push(f)}}r.push(this.dataView.getInt8(this.dataView.byteLength-1));const I=new DataView(new Uint8Array([...new Uint8Array(this.dataView.buffer).slice(0,t),...r]).buffer);this.dataView=I}removePreventionByte(){const{seiPayloadStartIndex:t}=this,i=this.dataView.byteLength-1,r=[];let l=0;for(let h=t;h<=i;h++)switch(this.dataView.getInt8(h)){case 0:l++,r.push(this.dataView.getInt8(h));break;case 3:l!==2&&r.push(this.dataView.getInt8(h)),l=0;break;default:r.push(this.dataView.getInt8(h)),l=0}const I=new DataView(new Uint8Array([...new Uint8Array(this.dataView.buffer).slice(0,t),...r]).buffer);this.dataView=I}get seiPayloadStartIndex(){let t=6;for(let i=6;i=this.dataView.byteLength?0:31&this.dataView.getUint8(t)}getStartCodeLength(){return this.dataView.byteLength>=4&&this.dataView.getUint8(0)===0&&this.dataView.getUint8(1)===0&&this.dataView.getUint8(2)===0&&this.dataView.getUint8(3)===1?4:this.dataView.byteLength>=3&&this.dataView.getUint8(0)===0&&this.dataView.getUint8(1)===0&&this.dataView.getUint8(2)===1?3:0}get isIDR(){return this.naluType===5}get isSPS(){return this.naluType===7}get isPPS(){return this.naluType===8}get isSEI(){return this.naluType===6}},nEA=class{constructor(){de(this,"_seiMessageList",[]),de(this,"_smallSeiMessageList",[]),de(this,"_seiPayloadType",243)}encodeSEINalu(t){const i=t.byteLength,r=parseInt(String(i/255),10),l=i%255,I=[];I.push(0,0,0,1,6,this._seiPayloadType);for(let f=0;f0&&t.data.byteLength>0){const l=9-this.getNaluCount(t.data);if(l<=0)return 0;const I=r.splice(0,l).reverse().map(this.encodeSEINalu.bind(this)),h=I.reduce((U,j)=>U+j.dataView.byteLength,0),f=new ArrayBuffer(h+t.data.byteLength),w=new DataView(f),_=new DataView(t.data);let G=0;for(let U=0;U{var l;if(this.isAllowed2k4k(this.profile))this.room&&this.settings.height>=1440&&this.state==="publish"&&this.room.sendAbilityStatus({"2k4k":1});else{const I=MY(((l=this.room)==null?void 0:l.sdkAppId)||0)?nZ:sZ;this.log.warn(`Resolution is reset to 1080p, need to upgrade ability here ${I}`),this.setProfile(nB(Rn({},this.profile),{width:1920,height:1080})),this.applyProfile()}};this.on("input-media-track-changed",r),this.on("publish",r),this.handleCameraAdded=this.handleCameraAdded.bind(this),this.handleCameraRemoved=this.handleCameraRemoved.bind(this)}get facingMode(){if(bY&&this.mediaTrack)return this.mediaTrack.getSettings().facingMode}get contentHint(){var t;return((t=this._inputTrack)==null?void 0:t.contentHint)||""}get isQosClearFirst(){var t;return((t=this._inputTrack)==null?void 0:t.contentHint)==="detail"}get hasSmall(){var t;return!!((t=this.manager)!=null&&t.hasSmall)}async setMute(t){var i,r,l;if(ih(t)){if(this.muteImage===t)return;await((i=this.manager)==null?void 0:i.deleteWatermark("mute")),await((r=this.manager)==null?void 0:r.setWatermark({x:0,y:0,width:this.settings.width,height:this.settings.height,type:"mute",zIndex:999,imageUrl:t,fillVideo:!0})),this.muteImage=t,super.setMute(!1)}else this.muteImage&&(await((l=this.manager)==null?void 0:l.deleteWatermark("mute")),this.muteImage=void 0),super.setMute(t)}async capture({deviceId:t,facingMode:i,useExactDeviceId:r=!0,customSource:l,retryWhenExactFailed:I=!0}){const h={audio:!1,video:!0,facingMode:i||this.facingMode,cameraId:t,width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate,useExactDeviceId:r,retryWhenExactFailed:I,customSource:l};if(h.facingMode==="environment"){const f=await this.getDeviceIdWhenUsingBackCamera();f&&(h.cameraId=f)}return super.capture(h)}setProfile(t){var i;const r=this.fallbackProfile(t);if(r.bitrate&&(this.isNeedToSetBandwidth=r.bitrate!==this.profile.bitrate),this.isAllowed2k4k(this.profile))super.setProfile(r);else{const l=MY(((i=this.room)==null?void 0:i.sdkAppId)||0)?nZ:sZ;this.log.warn(`Resolution is reset to 1080p, need to upgrade ability here ${l}`),super.setProfile(nB(Rn({},this.profile),{width:1920,height:1080}))}}async applyProfile(){var t,i;if(!this.mediaTrack)return;const{width:r=0,height:l=0}=(this.sourceTrack||this.mediaTrack).getSettings(),I=r*l,h=this.settings,f=h.height!==this.profile.height||h.width!==this.profile.width||h.frameRate!==this.profile.frameRate;if(f&&(bv===16&&this.deviceId?await this.recapture(this.deviceId):($W(this.outMediaTrack)?await((t=this.outMediaTrack)==null?void 0:t.applyConstraints({width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate})):await((i=this.sourceTrack||this.mediaTrack)==null?void 0:i.applyConstraints({width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate})),this.manager&&this.manager.changeInput(this)),this.room&&this.settings.height>=1440&&this.state==="publish"&&this.room.sendAbilityStatus({"2k4k":1})),this.isNeedToSetBandwidth&&this.room&&this.room.setBandWidth){this.isNeedToSetBandwidth=!1;const{width:w=0,height:_=0}=(this.sourceTrack||this.mediaTrack).getSettings(),G=w*_;return f&&G&&I&&G===I?void this.log.warn("set bandwidth failed: resolution is not changed"):this.room.setBandWidth({bandwidth:this.profile.bitrate,type:$t.VIDEO,videoType:$t.BIG})}}get settings(){const t={width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate},i=this.sourceTrack||this.mediaTrack;return bY&&i&&Object.assign(t,i.getSettings()),t}get scaleResolutionDownBy(){return this._scaleResolutionDownBy?this._scaleResolutionDownBy:r7(this.settings,this.profile)}isAllowed2k4k(t){var i;return!this.room||!this.room.scheduleResult||!!this.isScreen||t.height*t.width<3686400||((i=this.room.scheduleResult.trtcAutoConf)==null?void 0:i["2k4k"])===1}isNeedToSwitchDevice(t){return!(!this.mediaTrack||this.deviceId===t||this.facingMode===t)}async switchDevice(t){try{if(!this.isNeedToSwitchDevice(t)&&!this.isUseCustomSource)return;const i={useExactDeviceId:!0,retryWhenExactFailed:!1};t==="user"||t==="environment"?i.facingMode=t:i.deviceId=t,this.sourceTrack&&this.sourceTrack.stop(),await this.capture(i),ps.emit(mn.SWITCH_DEVICE_SUCCESS,{track:this}),this.log.info("switch camera success")}catch(i){throw this.log.error(`switch camera failed ${i}`),this.deviceId&&this.recapture(this.deviceId),i}}async getDeviceIdWhenUsingBackCamera(){let t;try{if(T7&&!l4&&a$){const i=(await Sv(!0)).map(l=>{var I;return nB(Rn({},l),{capabilities:(I=l.getCapabilities)==null?void 0:I.call(l)})}).filter(l=>{var I,h;return(h=(I=l.capabilities)==null?void 0:I.facingMode)==null?void 0:h.includes("environment")});let r=i[0];i.forEach(l=>{var I,h,f,w;const{capabilities:_}=l;((I=_.width)!=null&&I.max&&((h=_.height)!=null&&h.max)?_.width.max*_.height.max:0)>((f=r.capabilities.width)!=null&&f.max&&((w=r.capabilities.height)!=null&&w.max)?r.capabilities.width.max*r.capabilities.height.max:0)&&(r=l)}),r?.capabilities&&(this._log.info("use max resolution back camera",r),t=r.deviceId)}}catch(i){this._log.warn("get max res camera failed",i)}return t}async updateSmallConfig(t){var i,r;this._log.info(`update small stream config: ${JSON.stringify(t)}`);const l=!this.small;this.small=this.fallbackProfile(t,!0),await((i=this.manager)==null?void 0:i.update()),l&&await((r=this.room)==null?void 0:r.enableSmall(!0)),this.log.info("update small stream config success")}fallbackProfile(t,i=!1){const r=t.width>t.height,l=Rn({},t);return t.width*t.height<=19200&&aC&&tD&&(this.log.warn(`${i?"small ":""}resolution is ${t.width}*${t.height}, fallback to 240*180 for android chrome`),l.width=r?240:180,l.height=r?180:240,l.bitrate=Math.max(t.bitrate,150)),t.width*t.height>921600&&XlA&&(l.width=r?1280:720,l.height=r?720:1280,this.log.warn("reset to 1280 * 720 on iOS 13~14")),zlA(MQ,"14.3")&&O7(MQ,"14.0",!0)&&this.on("7",()=>{const I=this.profile.width>this.profile.height;this.profile.width*this.profile.height>307200?(this.profile.width=I?640:480,this.profile.height=I?480:640,this.log.warn("reduce the resolution to 480p on iOS 14.0 ~ 14.2")):this.profile.width*this.profile.height>230400&&(this.profile.width=I?640:360,this.profile.height=I?360:640,this.log.warn("reduce the resolution to 360p on iOS 14.0 ~ 14.2"))}),!i&&this.avoidCropping&&(tD||sC)&&!eIA()&&t.width*t.height<=230400&&t.width/t.height===16/9&&(this._scaleResolutionDownBy=1280/t.width,l.width=1280,l.height=720,this.log.warn(`capture 720p, scale: ${this._scaleResolutionDownBy}`)),l}stopSmall(){var t,i;this.small&&(delete this.small,(t=this.manager)==null||t.update(),(i=this.room)==null||i.enableSmall(!1))}listenDeviceChange(){mQ&&!mQ.listeners("videoInputRemoved").includes(this.handleCameraRemoved)&&mQ.on("videoInputRemoved",this.handleCameraRemoved,this)}async handleCameraRemoved(t){if(t.deviceId===this.deviceId){let i=this.recaptureMode===1;if(this.log.warn(`RecaptureMode: ${_$[this.recaptureMode]}. Current camera is lost: ${JSON.stringify(t)}`),this.recaptureMode===0){Ec(this.userId,{eventId:2003,param1:7,streamType:2});const r=await Sv();r[0]?this.recapture(r[0].deviceId):i=!0}i&&mQ.on("videoInputAdded",this.handleCameraAdded,this)}}async handleCameraAdded(t){this.recaptureMode===1&&t.deviceId!==this.deviceId||(mQ.off("videoInputAdded",this.handleCameraAdded,this),this.log.warn(`camera added: ${JSON.stringify(t)}`),this.recapture(t.deviceId))}encodeFrame(t,i){if(!this.manager)return t;const r=i?8:this.mediaType;return this.manager.encodePipeline.reduceRight((l,I)=>I?I({frame:l,mediaType:r}):l,t)}get enableEncodeFrame(){return!!this.manager&&this.manager.encodePipeline.some(t=>t)}play(t,i){return $n(this.mirror)&&!this.isScreen&&this.setMirror("view"),super.play(t,i)}close(){mQ.off("videoInputAdded",this.handleCameraAdded,this),mQ.off("videoInputRemoved",this.handleCameraRemoved,this),super.close()}async recapture(t){try{await super.recapture(t)}catch(i){const r=(await Sv()).find(l=>l.deviceId!==t);if(!r)throw i;await super.recapture(r.deviceId)}}setContentHint(t){this.mediaTrack&&"contentHint"in this.mediaTrack&&(this.mediaTrack.contentHint!==t&&(this.log.info(`setContentHint ${t}`),this.mediaTrack.contentHint=t),this.outMediaTrack&&this.outMediaTrack.contentHint!==t&&(this.outMediaTrack.contentHint=t))}setRotation(t){this.manager&&(this.isScreen||$n(t)||t!==this.rotation&&(this.rotation=t,this.manager.rotation=t))}};Cc([m$(function(t){this.setContentHint(t.contentHint||"motion")})],DV.prototype,"capture");var rEA=[-1,-1,1,-1,-1,1,1,1],aEA=[0,0,1,0,0,1,1,1],PL=class eW extends Xn{constructor(i,r){if(super(),this.context=i,de(this,"name"),de(this,"input"),de(this,"output"),de(this,"texture"),de(this,"ctx2d",null),de(this,"fbo"),de(this,"width",0),de(this,"height",0),de(this,"x",0),de(this,"y",0),de(this,"program"),de(this,"vertexShader"),de(this,"fragmentShader"),de(this,"totalFrames",0),de(this,"dropFrames",0),de(this,"matchInputSize",!0),de(this,"texCoordBuffer"),de(this,"positionBuffer"),de(this,"lastInfo",{name:"",timestamp:0,totalFrames:0,x:0,y:0,width:0,height:0,fps:0}),de(this,"cost",0),de(this,"_canvas",null),de(this,"_image"),de(this,"log"),this.context.on("disconnect",this.close,this),this.name=r.name,this.log=r.logger,this.matchInputSize=r.matchInputSize!==!1,this.width=r.width||i.width,this.height=r.height||i.height,this._image=r.image,i instanceof RU)i.ctx&&r.create2d&&(typeof OffscreenCanvas=="function"&&bv!==16?this._canvas=new OffscreenCanvas(this.width,this.height):(this._canvas=document.createElement("canvas"),this._canvas.width=this.width,this._canvas.height=this.height),this.ctx2d=this._canvas.getContext("2d"),this._image=this._canvas);else try{const l=i.ctx;this.texCoordBuffer=this.createBuffer(aEA),this.positionBuffer=this.createBuffer(rEA),r.createTexture!==!1&&(this.texture=l.createTexture(),this.useTexture(),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.LINEAR),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.LINEAR),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.pixelStorei(l.UNPACK_ALIGNMENT,1)),r.useFbo&&(this.fbo=l.createFramebuffer(),this.useBufferFrame(),this.useTexture(),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,this.width,this.height,0,l.RGBA,l.UNSIGNED_BYTE,null),l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,l.TEXTURE_2D,this.texture,0)),r.useDefaultProgram?this.program=i.defaultProgam:(r.vertexShaderSource||r.fragmentShaderSource)&&(this.vertexShader=r.vertexShaderSource?i.createShader(l.VERTEX_SHADER,r.vertexShaderSource):i.defaultVShader,this.fragmentShader=r.fragmentShaderSource?i.createShader(l.FRAGMENT_SHADER,r.fragmentShaderSource):i.defaultFShader,this.program=i.createProgram(this.vertexShader,this.fragmentShader))}catch(l){this.context.destroy(new ml({code:qg.VIDEO_MANAGER_ERROR,extraCode:3,message:`create video node ${this.name} error ${l.message||l}`}))}}get image(){return this._image}set image(i){this._image=i}createFramebuffer(i){const r=this.context.ctx,l=r.createFramebuffer();return r.bindFramebuffer(r.FRAMEBUFFER,l),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,i,0),l}connect(i,...r){return i.addInput(this,...r),this.output=i,i}addInput(i,...r){this.input=i,this.matchInputSize&&i.width&&i.height&&this.resize(i.width,i.height)}requestFrame(i){const r=Date.now();return!!(this.context instanceof tW&&this.render(i)||this.context instanceof RU&&this.render2d(i))&&(this.totalFrames++,this.cost=Date.now()-r,!0)}render2d(i){var r;return!!((r=this.input)!=null&&r.requestFrame(i))&&this.draw2d(this.input.image,0,0,this.width,this.height)}update(i=0){var r;(r=this.output)==null||r.update(i)}disconnect(...i){var r;(r=this.output)==null||r.removeInput(this,...i),delete this.output}removeInput(i,...r){delete this.input}close(){var i,r;if(this.context.off("disconnect",this.close,this),(i=this.output)==null||i.removeInput(this),delete this.output,(r=this.input)==null||r.disconnect(),this.context instanceof tW){const l=this.context.ctx;l.deleteBuffer(this.texCoordBuffer),l.deleteBuffer(this.positionBuffer),this.fbo&&l.deleteFramebuffer(this.fbo),this.texture&&l.deleteTexture(this.texture),this.vertexShader&&this.vertexShader!==this.context.defaultVShader&&l.deleteShader(this.vertexShader),this.fragmentShader&&this.fragmentShader!==this.context.defaultFShader&&l.deleteShader(this.fragmentShader),this.program&&this.program!==this.context.defaultProgam&&l.deleteProgram(this.program)}this._canvas&&(this._canvas.width=0,this._canvas.height=0,this.ctx2d=null),this.removeAllListeners()}useTexture(){this.useTextures(this.texture)}useInputTexture(){var i;this.useTextures((i=this.input)==null?void 0:i.texture)}useTextures(...i){const r=this.context.ctx;i.forEach((l,I)=>{l&&(r.activeTexture(r.TEXTURE0+I),r.bindTexture(r.TEXTURE_2D,l))})}useProgram(){this.context.ctx.useProgram(this.program)}useBufferFrame(){const i=this.context.ctx;i.bindFramebuffer(i.FRAMEBUFFER,this.fbo||null)}createBuffer(i){const r=this.context.ctx,l=r.createBuffer();return r.bindBuffer(r.ARRAY_BUFFER,l),r.bufferData(r.ARRAY_BUFFER,new Float32Array(i),r.STATIC_DRAW),l}setTexBuffer(i){const r=this.context.ctx;r.bindBuffer(r.ARRAY_BUFFER,this.texCoordBuffer),r.bufferData(r.ARRAY_BUFFER,new Float32Array(i),r.STATIC_DRAW)}setPosBuffer(i){const r=this.context.ctx;r.bindBuffer(r.ARRAY_BUFFER,this.positionBuffer),r.bufferData(r.ARRAY_BUFFER,new Float32Array(i),r.STATIC_DRAW)}changeBufferData(i,r){const l=this.context.ctx;l.bindBuffer(l.ARRAY_BUFFER,i),l.bufferData(l.ARRAY_BUFFER,new Float32Array(r),l.STATIC_DRAW)}setAttributes(...i){const r=this.context.ctx;i.forEach((l,I)=>{r.enableVertexAttribArray(I),r.bindBuffer(r.ARRAY_BUFFER,l),r.vertexAttribPointer(I,2,r.FLOAT,!1,0,0)})}getVertexPoint(i,r){return[i/this.width*2-1,r/this.height*2-1]}layout2texCoords(i){return[...this.getVertexPoint(i.x,i.y),...this.getVertexPoint(i.x+i.width,i.y),...this.getVertexPoint(i.x,i.y+i.height),...this.getVertexPoint(i.x+i.width,i.y+i.height)]}resize(i,r){if(this.width!==i||this.height!==r){if(this.width=i,this.height=r,this._canvas&&(this._canvas.width=i,this._canvas.height=r),this.texture&&this.fbo){this.useTexture();const l=this.context.ctx;l.texImage2D(l.TEXTURE_2D,0,l.RGBA,i,r,0,l.RGBA,l.UNSIGNED_BYTE,null)}this.output&&this.output.matchInputSize&&this.output.resize(i,r)}}draw(i,r){this.setAttributes(i||this.positionBuffer,r||this.texCoordBuffer);const l=this.context.ctx;l.drawArrays(l.TRIANGLE_STRIP,0,4)}draw2d(i,r,l,I,h,f,w,_,G){const U=!($n(f)||$n(w)||$n(_)||$n(G));return!(!this.ctx2d||!i)&&(i instanceof ImageData?(U?this.ctx2d.putImageData(i,r,l,f,w,_,G):this.ctx2d.putImageData(i,r,l),this.emit(eW.RENDER,this.ctx2d.canvas)):(U?this.ctx2d.drawImage(i,f,w,_,G,r,l,I,h):this.ctx2d.drawImage(i,r,l,I,h),this.emit(eW.RENDER,i)),typeof VideoFrame<"u"&&i instanceof VideoFrame&&i.close(),!0)}drawBackGround2d(i){this.ctx2d&&(this.ctx2d.save(),this.ctx2d.fillStyle=i,this.ctx2d.fillRect(0,0,this.width,this.height),this.ctx2d.restore())}getInfo(){var i;const{totalFrames:r,x:l,y:I,width:h,height:f,name:w,cost:_}=this,G=Date.now(),U=(r-this.lastInfo.totalFrames)/((G-this.lastInfo.timestamp)/1e3)|0;return this.lastInfo={totalFrames:r,x:l,y:I,width:h,height:f,timestamp:G,fps:U,name:w,cost:_},Rn({parent:(i=this.input)==null?void 0:i.getInfo()},this.lastInfo)}createTexture(i){const r=this.context.ctx,l=r.createTexture();return this.useTextures(l),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.pixelStorei(r.UNPACK_ALIGNMENT,1),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,i),l}};de(PL,"RENDER","render"),Cc([Du(Xn.INIT,"connected",{sync:!0})],PL.prototype,"connect"),Cc([Du("connected",Xn.INIT,{ignoreError:!0,sync:!0})],PL.prototype,"disconnect"),Cc([Du([],"closed",{sync:!0})],PL.prototype,"close");var UY=PL,gEA=$C(HuA(250),M$(()=>performance.now()),y$()),cEA=t=>i=>{const r=performance.now();$C(gEA,$uA(l=>l-r{if(t!==this.context.frameRate&&(yQ.clearTask(this._intervalId),this.start(this.context.frameRate)),this.requestFrame(this._sequence++),this.checkGLError&&this.context instanceof tW){const i=this.context.ctx.getError();i&&this.context.destroy(new ml({code:qg.VIDEO_MANAGER_ERROR,extraCode:5,message:`${this.name} req ${this._sequence} render ${this.totalFrames} faild ${i}`}))}},{fps:this.context.frameRate})}render(t){var i;return!!((i=this.input)!=null&&i.requestFrame(t))&&(this.useProgram(),this.useBufferFrame(),this.useInputTexture(),this.draw(),this.emit(UY.RENDER,this.context._canvas),!0)}addInput(t,...i){super.addInput(t,...i),this.start(this.context.frameRate)}update(t=0){this.state!=="closed"&&(this._intervalId&&(yQ.clearTask(this._intervalId),this._intervalId=0,t===1&&(this.log.info(`${this.name} use requestVideoFrameCallback`),this.checkVisibilityChange=()=>{document.hidden&&(this.start(this.context.frameRate),this.log.info(`${this.name} use timer`),document.removeEventListener("visibilitychange",this.checkVisibilityChange))},document.addEventListener("visibilitychange",this.checkVisibilityChange))),this.requestFrame(this._sequence++))}removeInput(t){super.removeInput(t),yQ.clearTask(this._intervalId)}resize(t,i){super.resize(t,i),this.context.setSize(t,i)}close(){super.close(),yQ.clearTask(this._intervalId),document.removeEventListener("visibilitychange",this.checkVisibilityChange)}},uEA=class extends IEA{constructor(t,i){super(t,i),de(this,"_videoTrack"),de(this,"_muteOb"),de(this,"_closedOb",fE(this,"closed")),de(this,"_subscription"),de(this,"_canvasContainer"),Number(JU)<17&&(this._canvasContainer=document.createElement("div"),this._canvasContainer.style.display="none"),[this._videoTrack]=t.canvas.captureStream().getVideoTracks(),this._muteOb=fE(this._videoTrack,"mute"),$C(fE(this._videoTrack,"ended"),gT(this._closedOb),kv(()=>{this.context.destroy(new ml({code:qg.VIDEO_MANAGER_ERROR,extraCode:8,message:"video track ended"}))}))}enableCheckMute(){this._subscription=$C(this._muteOb,gT(this._closedOb),w$(cEA(5e3)),$_(()=>{var t;return!!((t=this._videoTrack)!=null&&t.muted)&&!document.hidden}),kv(()=>{this.context.destroy(new ml({code:qg.VIDEO_MANAGER_ERROR,extraCode:7,message:"video track muted"}))}))}disableCheckMute(){var t;(t=this._subscription)==null||t.dispose()}get videoTrack(){return this._videoTrack}putCanvasIntoDom(){this.context._canvas&&this._canvasContainer&&(document.getElementById(this.context._canvas.id)||(this.log.info(`${this.name} put canvas to body`),document.body.appendChild(this._canvasContainer),this._canvasContainer.appendChild(this.context._canvas)))}render(t){return this.putCanvasIntoDom(),super.render(t)}render2d(t){return this.putCanvasIntoDom(),super.render2d(t)}close(){var t,i;super.close(),(t=this._videoTrack)==null||t.stop(),delete this._videoTrack,(i=this._canvasContainer)==null||i.remove()}},T$=class extends UY{constructor(t,i){super(t,Rn({name:"imageSource"},i)),de(this,"_lastImage"),de(this,"_totalFrames",0),de(this,"_autoResize",!1),de(this,"_canvasRendered"),de(this,"videoCallbackId",0),de(this,"waitingFirstFrame",!0),de(this,"shouldUpdate",!0),this._autoResize=i?.autoResize!==!1,bv===16&&(this._canvasRendered=S$(),$C(this._canvasRendered,JuA(this._image),iEA(r=>r instanceof HTMLCanvasElement?fE(r,"rendered"):KuA()),gT(fE(this,"closed")),kv(()=>{this.update()})))}onFirstFrame(){this.waitingFirstFrame=!1}tryVideoFrameCallback(){if(!this.shouldUpdate)return;const t=this.image;this.videoCallbackId&&t.cancelVideoFrameCallback(this.videoCallbackId),p4()&&!document.hidden&&(this.videoCallbackId=t.requestVideoFrameCallback((i,r)=>{this.waitingFirstFrame&&this.onFirstFrame(),document.hidden||(this._totalFrames=r.presentedFrames,this.update(1))}))}_render(t,i){var r;let{width:l,height:I}=this;const{image:h}=this;if(h instanceof HTMLVideoElement){if(this.tryVideoFrameCallback(),{videoWidth:l,videoHeight:I}=h,!l||!I)return!1;h.width=l,h.height=I}else if(h instanceof HTMLImageElement||h instanceof ImageData||h instanceof ImageBitmap){if({width:l,height:I}=h,h!==this._lastImage)this._lastImage=h;else if(l===this.width&&I===this.height)return!0}else h instanceof HTMLCanvasElement||h instanceof OffscreenCanvas?({width:l,height:I}=h,this._lastImage=h):typeof VideoFrame<"u"&&h instanceof VideoFrame&&({displayWidth:l,displayHeight:I}=h,(r=this._lastImage)==null||r.close(),this._lastImage=h);if(!this._autoResize)return!0;if(this.width===l&&this.height===I&&this.totalFrames){if(i){this.useTexture();const f=this.context.ctx;f.texSubImage2D(f.TEXTURE_2D,0,0,0,f.RGBA,f.UNSIGNED_BYTE,h)}}else{if(i){this.useTexture();const f=this.context.ctx;f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,h)}this.resize(l,I)}return!0}get image(){return this._image}set image(t){var i;(i=this._canvasRendered)==null||i.next(t),this._image=t}render(t){return this._render(t,!0)}render2d(t){return this._render(t,!1)}},N$=class extends T${constructor(t,i,r){super(t,r),this._player=i,this.name="videoPlayerSource",$C(fE(this._player,Vn.PLAYER_STATE_CHANGED),gT(fE(this,"closed")),$_(({state:l})=>l==="PLAYING"),kv(()=>{this.tryVideoFrameCallback()}))}get image(){return this._player.element}},EEA=class extends N${get available(){return this._player.isPlaying&&!this.waitingFirstFrame}constructor(t,i,r){super(t,new Oy({id:r.name,track:i,muted:!0,container:null,objectFit:"contain",log:r.logger}),r),this.name="videoTrackSource",this._player.play()}replaceTrack(t){this.waitingFirstFrame=!0,this._player.setTrack(t),this._player.play()}close(){super.close(),this._player.stop()}},dEA=class extends UY{constructor(t,i,r){super(t,nB(Rn({name:"textSource"},r),{create2d:!0})),de(this,"hasChange",!0),de(this,"content",""),this.ctx2d.textBaseline="top",this.content=i.content||"",i.font&&(this.font=i.font),i.color&&(this.color=i.color)}set font(t){this.ctx2d&&(this.ctx2d.font=t,this.hasChange=!0)}get font(){var t;return((t=this.ctx2d)==null?void 0:t.font)||""}set color(t){this.ctx2d&&(this.ctx2d.fillStyle=t,this.hasChange=!0)}get color(){var t;return((t=this.ctx2d)==null?void 0:t.fillStyle)||""}render2d(t){return!(!this.ctx2d||!this.hasChange)&&(this.ctx2d.clearRect(0,0,this.width,this.height),this.drawMultilineText(0,0),this.hasChange=!1,!0)}render(t){return!1}resize(t,i){if(!this.ctx2d)return;const{color:r,font:l}=this;super.resize(t,i),this.color=r,this.font=l}drawMultilineText(t=0,i=0,r=1.2){if(!this.ctx2d)return;const l=this.ctx2d.measureText(this.content);i+=l.fontBoundingBoxAscent||l.actualBoundingBoxAscent||0;const I=this.font.match(/(\d+)px/),h=(I?parseInt(I[1],10):16)*r,f=this.content.split(` -`);for(let w=0;w":"Detail >",c.onclick=this.onCollapseClick.bind(this);const I=t.content.firstChild,C=I.querySelector(`.${Z1}`);return C.appendChild(c),C.appendChild(n),C.appendChild(i),I}addDiaLog(){GU()||(EW=!0,this._dialogNode=this.createDiaLog(),document.body.appendChild(this._dialogNode),this._dialogNode.onclick=this.onConfirm.bind(this),this._dialogNode.querySelector(`.${_L}`).onclick=t=>t.stopPropagation(),this._bodyPosition=document.body.style.position,document.body.style.position="fixed",Wo.info("show autoplay dialog"),ah.uploadEvent({log:vuA}))}deleteDialog(){this._dialogNode&&(document.body.removeChild(this._dialogNode),document.body.style.position=this._bodyPosition,this._dialogNode=null,EW=!1),bU=null}onConfirm(){Wo.warn("confirm clicked, try resume stream"),ms.emit(mn.AUTOPLAY_DIALOG_CLICK_CONFIRM),this.deleteDialog()}onCollapseClick(){const t=this._dialogNode.querySelector(`.${t6}`);t.style.visibility=this._showDetail?"hidden":"visible",t.style.height=`${this._showDetail?0:"fit-content"}`,this._showDetail=!this._showDetail,this._isCollapseClicked||ah.uploadEvent({log:RuA}),this._isCollapseClicked=!0}onQuestionClick(){window.open(x$,"_blank"),this._isQuestionClicked||ah.uploadEvent({log:wuA}),this._isQuestionClicked=!0}},bU=null;function NuA(){bU||(bU=new TuA)}function GuA(){bU&&bU.deleteDialog()}var hU,Yy=class extends Ev{constructor(t){super(t,ei.VIDEO),Be(this,"stat",{}),Be(this,"_calculateTimeout",-1),Be(this,"viewMirror",!1),Be(this,"objectFit","cover"),Be(this,"container"),Be(this,"canvas"),Be(this,"shouldRenderAlpha",!1),Be(this,"_preSize",{width:0,height:0}),Be(this,"posterImg"),Be(this,"pipWindow"),Be(this,"enterPIPPromise"),Be(this,"_originContainerPosition"),Be(this,"_isResettingSrcObject",!1),Be(this,"_wrapper",null),Be(this,"_useWrapper",!1),Be(this,"_isFirstFrameRenderEmitted",!1),this.mode=t.canvas?1:0,this.container=t.container,this.canvas=t.canvas,er(t.viewMirror)||(this.viewMirror=t.viewMirror),er(t.objectFit)||(this.objectFit=t.objectFit),this.initializeElement()}get isPlaying(){var t;return this._state==="PLAYING"&&(!this.element||!this.element.paused)&&((t=this.track)==null?void 0:t.readyState)==="live"&&!this.track.muted}initializeElement(){const t=document.createElement(ei.VIDEO);this.track&&this.mode!==2&&(t.srcObject=new MediaStream([this.track])),t.muted=!0,t.setAttribute("id",`video_${this.id}`),t.setAttribute("style",this.styleAttribute),this.canvas&&this.canvas.setAttribute("style",this.styleAttribute),t.setAttribute("autoplay","autoplay"),t.setAttribute("playsinline","playsinline"),this.element=t,cC&&(t.poster="data:,"),this._appendToWrapper(),this.bindElementEvents(),this.calculateStat(),this._bindFirstFrameRenderEvent(t)}_bindFirstFrameRenderEvent(t){const i=()=>{if(this._isFirstFrameRenderEmitted)return;this._isFirstFrameRenderEmitted=!0;const n=t.videoWidth||0,c=t.videoHeight||0;this._log.info(`first frame render: ${n}x${c}`),this.emit(Jn.FIRST_FRAME_RENDER,{width:n,height:c})};typeof t.requestVideoFrameCallback=="function"?t.requestVideoFrameCallback(i):t.addEventListener("loadeddata",i,{once:!0})}get styleAttribute(){let t=this._useWrapper?`grid-area:1/1;width:100%;height:100%;object-fit:${this.objectFit};${this.shouldRenderAlpha?"":"background-color:black"};`:`width:100%;height:100%;object-fit:${this.objectFit};${this.shouldRenderAlpha?"":"background-color:black"};`;return this.viewMirror&&(t+="transform:scaleX(-1);"),t}setLiveMode(t){if(this._useWrapper!==t&&(this._useWrapper=t,this.elementToRender&&this.elementToRender.setAttribute("style",this.styleAttribute),this.container&&this.elementToRender))if(t){const i=this._getOrCreateWrapper();i.insertBefore(this.elementToRender,i.firstChild)}else this.container.appendChild(this.elementToRender),this._cleanupWrapper()}setContainer(t){if(this.container===t)return;const i=this._wrapper,n=this.container;this.container=t,this._pausedRetryCount=U_,this.track&&this.elementToRender&&this._appendToWrapper(),i&&n&&n!==this.container&&i.isConnected&&i.children.length===0&&i.remove()}_getOrCreateWrapper(){if(!this.container)throw new Error("[VideoPlayer] container is required");let t=this.container.querySelector("[data-trtc-video-wrapper]");return t||(t=document.createElement("div"),t.setAttribute("data-trtc-video-wrapper","true"),t.style.cssText="display:grid;width:100%;height:100%;",this.container.appendChild(t)),this._wrapper=t,t}_appendToWrapper(t){const i=t??this.elementToRender;if(this.container&&i)if(this._useWrapper){const n=this._getOrCreateWrapper();n.insertBefore(i,n.firstChild)}else this.container.appendChild(i)}bindElementEvents(){const t=super.bindElementEvents();this.handleElementEvent=this.handleElementEvent.bind(this),this.handleFullscreenChange=this.handleFullscreenChange.bind(this),this.handleVolumeChange=this.handleVolumeChange.bind(this),t&&t.add(ei.ENTER_PICTURE_IN_PICTURE,this.handleElementEvent).add(ei.LEAVE_PICTURE_IN_PICTURE,this.handleElementEvent).add(ei.RESIZE,this.handleElementEvent),this.element&&(this.element.addEventListener(ei.FULLSCREEN_CHANGE,this.handleFullscreenChange),this.element.addEventListener("webkitbeginfullscreen",this.handleFullscreenChange),this.element.addEventListener("webkitendfullscreen",this.handleFullscreenChange),this.element.addEventListener("volumechange",this.handleVolumeChange))}handleTrackEvent(t){var i;return t.type===ei.MUTE&&((i=this.stat)!=null&&i.fps&&(this.stat.fps=0),this.isFullscreen()&&this.resetSrcObjectToReplay()),super.handleTrackEvent(t)}handleFullscreenChange(){this.isFullscreen()?(this._log.info("enter fullscreen"),this.emit(Jn.ENTER_FULL_SCREEN)):(this._log.info("leave fullscreen"),this.emit(Jn.LEAVE_FULL_SCREEN))}handleVolumeChange(){var t;(this.isPictureInPicture()||this.isFullscreen())&&this.emit(Jn.VOLUME_CHANGE,{muted:(t=this.element)==null?void 0:t.muted})}handleElementEvent(t){var i,n,c,I,C,f;if(this.mode===2)return;super.handleElementEvent(t);const w=t.type,_=this.isPictureInPicture(),N=this.isFullscreen(),L=t.isTrusted&&(_&&ld||N);if(w===ei.PLAYING&&L&&!this._isResettingSrcObject&&(this._log.warn("user resume in "+(N?"fullscreen":"pip")),this.emit(Jn.USER_RESUME_IN_PIP_OR_FULL_SCREEN)),w===ei.PAUSE&&(L&&(this._log.warn("user pause in "+(N?"fullscreen":"pip")),this.emit(Jn.USER_PAUSE_IN_PIP_OR_FULL_SCREEN)),this.container&&!this.container.isConnected&&(this._log.warn(`${this.kind} player has been remove, element ID: ${this.container.id}`),IT(500).then(()=>{var q;(q=this.container)!=null&&q.isConnected&&(this._pausedRetryCount=U_,this._log.info(`view container ${this.container.id} is in dom, reset pausedRetryCount`))})),this._pausedRetryCount>0&&!GU()&&!this.isPausedByUserCall&&!L&&(this._log.info(`[${U_-this._pausedRetryCount+1}/${U_}] ${this.kind} player auto resume when paused`),this.doResume(),this._pausedRetryCount--),vu&&!L&&(this._interval=MQ.run("timeout",()=>{this.element&&this._state==="PAUSED"&&!this.isPausedByUserCall&&this.doResume()},{delay:3e3})),this.stat.fps&&(this.stat.fps=0)),this.viewMirror&&this.element){const q=this.element.style.transform;w===ei.ENTER_PICTURE_IN_PICTURE?this.element.style.transform=q.replace("scaleX(-1)",""):w!==ei.LEAVE_PICTURE_IN_PICTURE||q.includes("scaleX")||(this.element.style.transform=`${q} scaleX(-1)`)}w===ei.RESIZE&&(this._preSize.height===((i=this.element)==null?void 0:i.videoHeight)&&this._preSize.width===((n=this.element)==null?void 0:n.videoWidth)||(this._log.info(`video size changed to ${(c=this.element)==null?void 0:c.videoWidth}x${(I=this.element)==null?void 0:I.videoHeight}`),this._preSize.height=((C=this.element)==null?void 0:C.videoHeight)||0,this._preSize.width=((f=this.element)==null?void 0:f.videoWidth)||0,this.emit(Jn.RESIZE,{newWidth:this._preSize.width,newHeight:this._preSize.height}))),w===ei.LEAVE_PICTURE_IN_PICTURE&&(this._log.warn("exit pip"),this.isPaused&&!this.isPausedByUserCall&&(this._log.warn("resume after exit pip"),this.doResume()),this.resetSrcObjectToReplay(),this.emit(Jn.LEAVE_PICTURE_IN_PICTURE)),w===ei.ENTER_PICTURE_IN_PICTURE&&this.emit(Jn.ENTER_PICTURE_IN_PICTURE)}resetSrcObjectToReplay(){cC&&I3&&this.isPlayCalled&&this.element&&this.track&&!this.isPausedByUserCall&&(this._log.warn("reset srcObject to replay for android chromium"),this._isResettingSrcObject=!0,this.element.srcObject=new MediaStream([this.track]),this.element.play().catch(t=>{this._log.warn("play failed after reset srcObject",t)}).finally(()=>{this._isResettingSrcObject=!1}))}setCanvas(t,i=1){var n,c;this.canvas!==t&&((n=this.canvas)==null||n.remove(),t?.setAttribute("style",this.styleAttribute),this.canvas=t,this.mode=t?i:0,this.mode===2&&this.setTrack(t.captureStream().getVideoTracks()[0]),t?((c=this.element)==null||c.remove(),this._appendToWrapper(t)):this.element&&this._appendToWrapper(this.element))}setAttr(t){const i=Object.assign({autoplay:"autoplay",playsinline:"playsinline",muted:!0},t);i.style=Object.assign({width:"100%",height:"100%"},i.style),super.setAttr(i)}get mirror(){return this.viewMirror}setRect(t,i){this.elementToRender&&(this.elementToRender.style.width=`${t}px`,this.elementToRender.style.height=`${i}px`)}setViewMirror(t){this.elementToRender&&(this.elementToRender.style.transform=t?"scaleX(-1)":""),this.viewMirror=t}setObjectFit(t){this.elementToRender&&(this.elementToRender.style.objectFit=`${t}`),this.objectFit=t}setPoster(t,i=!1){return new Promise(n=>{if(!this.element||(this._log.info("setPoster",t.slice(0,10)),t===""?this.element.removeAttribute("poster"):this.element.poster=t,!(i&&(ld||rC))))return n();if(t==="")return this.removePosterImg(),n();if(this.posterImg)return n();const c=document.createElement("img");c.src=t;const I=window.getComputedStyle(this.element),C=I.objectFit||this.objectFit;let f=1;if(this._useWrapper){const w=parseInt(I.zIndex,10);isNaN(w)||(f=w+1)}c.style.cssText=this._useWrapper?`grid-area:1/1;z-index:${f};width:100%;height:100%;object-fit:${C};`:`position:absolute;top:0;left:0;width:100%;height:100%;object-fit:${C};`,c.onload=async()=>{try{c.decode&&await c.decode(),this.container&&!this._useWrapper&&window.getComputedStyle(this.container).position==="static"&&(this._originContainerPosition=this.container.style.position,this.container.style.position="relative"),this.posterImg=c;const w=this._useWrapper?this._wrapper:this.container;w?.appendChild(c),PY()&&Uv<=17&&this.elementToRender&&(this.elementToRender.style.visibility="hidden")}catch(w){this._log.warn("decode poster image error",w)}return n()},c.onerror=()=>(this._log.warn("load poster image error"),n())})}removePosterImg(){this.posterImg&&(PY()&&Uv<=17&&this.elementToRender&&(this.elementToRender.style.visibility=""),this.posterImg.remove(),URL.revokeObjectURL(this.posterImg.src),this._useWrapper||!this.container||er(this._originContainerPosition)||this.container.style.position!=="relative"||(this.container.style.position=this._originContainerPosition),delete this.posterImg)}get hasPoster(){var t;return!!this.posterImg||!!((t=this.element)!=null&&t.getAttribute("poster"))}async pause(t=!0){super.pause(),this.isPictureInPicture()||this.hasPoster||!(I3||t&&(rC||ld))||await this.setPoster(this.getVideoFrame(),!0)}resume(t=!1){return super.resume(t).then(()=>{var i;(this.posterImg||(i=this.element)!=null&&i.poster)&&this.setPoster("",!0)})}doResume(t=!1){return this.isPaused&&t&&this.element&&this.track&&I3&&this.track.kind==="video"&&(this.element.srcObject=new MediaStream([this.track])),super.doResume()}stop(t=0){var i;this.isPictureInPicture()&&this.exitPictureInPicture().catch(n=>{}),this.isFullscreen()&&this.exitFullscreen().catch(n=>{}),this.element&&(this.element.removeEventListener(ei.FULLSCREEN_CHANGE,this.handleFullscreenChange),this.element.removeEventListener("webkitbeginfullscreen",this.handleFullscreenChange),this.element.removeEventListener("webkitendfullscreen",this.handleFullscreenChange),this.element.removeEventListener("volumechange",this.handleVolumeChange)),this._isFirstFrameRenderEmitted=!1,super.stop(t),(i=this.canvas)==null||i.remove(),this.removePosterImg(),this._useWrapper&&this._cleanupWrapper()}_cleanupWrapper(){this._wrapper&&this._wrapper.children.length===0&&this._wrapper.remove(),this._wrapper=null}play(t){if(er(t?.isLiveStream)||this.setLiveMode(t.isLiveStream),this.element){if(this.elementToRender&&this.container)if(this._useWrapper){const i=this._getOrCreateWrapper();this.elementToRender.parentElement!==i&&i.insertBefore(this.elementToRender,i.firstChild)}else this.elementToRender.parentElement!==this.container&&this.container.append(this.elementToRender)}else this.initializeElement();return this.mode===2?Promise.resolve():super.play()}get elementToRender(){return this.canvas||this.element}setTrack(t){t!==this.track&&(this.unbindTrackEvents(),this.track=t,this.emit(Jn.MEDIA_TRACK_CHANGED,t),t!==null&&(this.bindTrackEvents(),this.element&&this.mode!==2&&(this.element.srcObject=new MediaStream([t]),this.element.remove()),this._appendToWrapper()))}getVideoFrame(){if(this.canvas)return this.canvas.toDataURL("image/png");if(!this.element)return"";const t=document.createElement("canvas");return t.width=this.element.videoWidth,t.height=this.element.videoHeight,t.getContext("2d").drawImage(this.element,0,0),t.toDataURL("image/png")}getElement(){return this.element}calculateStat(){try{if(x4()&&this.element&&this._calculateTimeout<0){let t=0,i=null;const n=(c,I)=>{this.stat.width=I.width,this.stat.height=I.height,i&&(this.stat.fps=Math.round((I.presentedFrames-i.presentedFrames)/(c-t)*1e3)),t=c,i=I,this._calculateTimeout=-1,this.element&&(this._calculateTimeout=setTimeout(()=>{var C;return(C=this.element)==null?void 0:C.requestVideoFrameCallback(n)},2e3))};this.element.requestVideoFrameCallback(n)}}catch(t){this._log.warn("init stat failed",t)}}async enterFullscreen(){const t=this.elementToRender;if(!t)throw this._log.warn("no element to render, cannot enter fullscreen"),new Error("No element available for fullscreen");if(vu&&this.isPictureInPicture()){this._log.info("exit pip before entering fullscreen");try{await this.exitPictureInPicture()}catch(i){this._log.warn("exit pip failed before fullscreen:",i)}}try{if(t.requestFullscreen)await t.requestFullscreen();else if(t.webkitRequestFullscreen)await t.webkitRequestFullscreen();else if(t.webkitEnterFullscreen)await t.webkitEnterFullscreen();else if(t.mozRequestFullScreen)await t.mozRequestFullScreen();else{if(!t.msRequestFullscreen)throw new Error("Fullscreen API not supported");await t.msRequestFullscreen()}this._log.info("entered fullscreen mode")}catch(i){throw this._log.error("failed to enter fullscreen:",i),i}}async exitFullscreen(){try{if(!this.isFullscreen())return;if(document.exitFullscreen)await document.exitFullscreen();else if(document.webkitExitFullscreen)await document.webkitExitFullscreen();else if(document.mozCancelFullScreen)await document.mozCancelFullScreen();else{if(!document.msExitFullscreen)throw new Error("Exit fullscreen API not supported");await document.msExitFullscreen()}this._log.info("exited fullscreen mode")}catch(t){throw this._log.error("failed to exit fullscreen:",t),t}}isFullscreen(){const t=this.elementToRender;return t?this.element&&this.element.webkitDisplayingFullscreen?!this.isPictureInPicture():(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)===t:!1}async toggleFullscreen(){this.isFullscreen()?await this.exitFullscreen():await this.enterFullscreen()}async enterPictureInPicture(){this.enterPIPPromise=this._enterPictureInPicture();try{return await this.enterPIPPromise}finally{delete this.enterPIPPromise}}async _enterPictureInPicture(){try{if(!this.element)throw new Error("No video element available for pip");if(this.canvas&&this.mode!==1)throw new Error("pip is not supported for canvas-only mode");const{element:t}=this;if(t.requestPictureInPicture){this._log.info("requestPictureInPicture");const i=await t.requestPictureInPicture();return this.pipWindow=i,this._log.info("entered pip mode"),this.elementToRender===this.canvas&&(this.canvas.remove(),this._appendToWrapper(this.element)),i}if(t.webkitSetPresentationMode)return this._log.info("webkitSetPresentationMode"),await t.webkitSetPresentationMode("picture-in-picture"),this._log.info("entered pip mode (webkit)"),{};throw new Error("pip API not supported")}catch(t){throw this._log.error("failed to enter pip:",t.name,t.message),t}}async exitPictureInPicture(){var t;try{if(!this.isPictureInPicture())return;if(delete this.pipWindow,document.pictureInPictureElement&&document.exitPictureInPicture)await document.exitPictureInPicture(),this.elementToRender===this.canvas&&((t=this.element)==null||t.remove(),this._pausedRetryCount=U_,this._appendToWrapper(this.canvas)),this._log.info("exited pip mode");else{if(!this.element||!this.element.webkitSetPresentationMode)throw new Error("Exit pip API not supported or not in PiP mode");await this.element.webkitSetPresentationMode("inline"),this._log.info("exited pip mode (webkit)")}}catch(i){throw this._log.error("failed to exit pip:",i),i}}isPictureInPicture(){if(!this.element)return!1;const{element:t}=this;return document.pictureInPictureElement?document.pictureInPictureElement===t:!!t.webkitPresentationMode&&t.webkitPresentationMode==="picture-in-picture"}async togglePictureInPicture(){this.isPictureInPicture()?await this.exitPictureInPicture():await this.enterPictureInPicture()}};async function buA(t,i){if(!t.audioWorklet)return Promise.reject("audioWorklet is not supported");try{await t.audioWorklet.addModule(i),Wo.info("worklet addModule success")}catch(n){throw Wo.info(`worklet addModule catch error. ${n.message}`),n}}typeof AudioContext<"u"?hU=AudioContext:typeof webkitAudioContext<"u"?hU=webkitAudioContext:typeof mozAudioContext<"u"&&(hU=mozAudioContext);var Du,kuA=1500,n6=-1,$1=0,BU=-1,dW=!1,r6=0,a6=-1,g6=-1;function Y$(){try{if(Du)return;(Du=new hU({sampleRate:48e3})).onstatechange=()=>{Wo.info(`context state: ${Du.state}${Du.state!=="running"?` visibilityState: ${document.visibilityState}`:""}`),eT()},clearTimeout(n6)}catch(t){Wo.error(`initAudioContext failed: ${t} typeof AudioContextClass: ${typeof hU}`),n6=setTimeout(Y$,1e3)}}Y$();var eT=()=>{Du.state==="suspended"?($1=Yc(),LuA(),KY(),document.addEventListener("click",eT)):Du.state==="interrupted"?KY():($1&&(dr.addNumber({key:507800,value:Yc()-$1,split:[0,500,1e3,1500,2e3,3e3,4e3,5e3,1e4,3e4],max:6e4}),$1=0),UuA(),document.removeEventListener("visibilitychange",eT),document.removeEventListener("click",eT))},Q3=0,p3=-1;function KY(){return new Promise((t,i)=>{if(Du.state==="running")return t();Date.now()-Q3<1e3?(clearTimeout(p3),p3=setTimeout(()=>{Q3=Date.now(),Du.resume().then(t,i)},1e3)):(clearTimeout(p3),Q3=Date.now(),Du.resume().then(t,i))}).catch(t=>{Wo.warn(`context resume failed: ${t}`),document.addEventListener("visibilitychange",eT)})}function LuA(){BU===-1&&(BU=setTimeout(()=>{Du.state==="suspended"&&(dW=!0,ms.emit("155",{isSuspended:!0}))},kuA))}function UuA(){BU!==-1&&(clearTimeout(BU),BU=-1,dW&&(dW=!1,ms.emit("155",{isSuspended:!1})))}function FuA(){if(!vu||g6!==-1)return;const t=()=>{Yc()-r6<500||(Du&&Du.state==="running"&&Du.currentTime===a6&&(Wo.warn("context is fake running, auto resume"),Du.suspend().catch(i=>{Wo.warn(`context suspend failed: ${i}`)})),a6=Du.currentTime,r6=Yc())};g6=setInterval(()=>{t()},2e3),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&t()})}document.addEventListener("click",eT);var rD=t=>Du,vv=class{constructor(t){this.name=t,Be(this,"node"),Be(this,"node2"),Be(this,"pre",new Set),Be(this,"next",new Set),Be(this,"context"),Be(this,"connectedNodes",new Set),Be(this,"nextInputChannelMap",new Map),Be(this,"_channelCount",1)}get channelCount(){return this._channelCount}set channelCount(t){this._channelCount=t,this.setChannelCount(this.node,t),this.setChannelCount(this.node2,t),this.next.forEach(i=>i.channelCount=t)}setChannelCount(t,i){!t||t instanceof ScriptProcessorNode||(t.channelCountMode="explicit",t.channelCount=i||this.channelCount||1)}setContext(t){this.context=t,this.node&&t.addMixWeight()}removeContext(){var t;this.node&&((t=this.context)==null||t.reduceMixWeight()),delete this.context}replaceNode(t){var i;if(t!==this.node)try{this.node?this._disconnect():(i=this.context)==null||i.addMixWeight(),this.node=t,this.setChannelCount(this.node),this.preNodeReconnect(),this.reconnect()}catch(n){Wo.error(n)}}setNode(t,i){var n;if(!this.node)try{(n=this.context)==null||n.addMixWeight(),this.node=t,this.setChannelCount(this.node),i&&(this.node2=i,this.setChannelCount(this.node2)),this.preNodeReconnect(),this.reconnect(),dr.addSuccessEvent({key:502701})}catch(c){Wo.error(c),dr.addFailedEvent({key:502701,error:c})}}deleteNode(){var t;if(this.node)try{this._disconnect(),delete this.node,delete this.node2,(t=this.context)==null||t.reduceMixWeight(),this.preNodeReconnect(),dr.addSuccessEvent({key:502702})}catch(i){Wo.error(i),dr.addFailedEvent({key:502702,error:i})}}preNodeReconnect(){this.pre.forEach(t=>{t.node?t.reconnect():t.preNodeReconnect()})}connectNext(t){this.next.forEach(i=>{const n=this.nextInputChannelMap.get(i);t._connect(i.node,n)||i.connectNext(t)})}_connect(t,i=0){return!(!this.node||!t)&&((this.node2||this.node).connect(t,0,i),this.connectedNodes.add(t),!0)}_disconnect(){this.connectedNodes.forEach(t=>{var i;return(i=this.node2||this.node)==null?void 0:i.disconnect(t)}),this.connectedNodes.clear()}reconnect(){this._disconnect(),this.connectNext(this)}pipeTo(t,i=0){return this.next.add(t),t.pre.add(this),this.nextInputChannelMap.set(t,i),t}},OuA=class extends vv{constructor(t=256){super(),this.fftSize=t,Be(this,"dataArray",new Uint8Array(0))}setNode(t){t.fftSize=this.fftSize,this.dataArray=new Uint8Array(t.frequencyBinCount),super.setNode(t)}getByteTimeDomainData(){var t;return(t=this.node)==null||t.getByteTimeDomainData(this.dataArray),this.dataArray}get level(){var t;return(t=this.node)==null||t.getByteTimeDomainData(this.dataArray),Math.max(...this.dataArray)/128-1}get timeDomainPathData(){const t=this.getByteTimeDomainData();let i=0,n=0,c=`M${i},${n}`;for(let I=0;Ithis.initAudioWorklet()).catch(i=>(this._log.error(`volumeMeter preload error: ${i}`),this.initScriptProcessor()))}initAudioWorklet(){if(!this._audioWorkletNode)try{this._audioWorkletNode=new AudioWorkletNode(cm.audioContext,"volume-meter");let i=!1;this._audioWorkletNode.port.onmessage=n=>{cm.lastMessageTime=Date.now(),this._volume=n.data.volume||0,this._volumeDb=n.data.volumeDb||0,!i&&n.data.cacheLen&&n.data.outputLen&&(this._log.warn("worklet play success"),i=!0)},this.handleAudioLevelInterval({interval:this._interval})}catch(i){this._log.error(`volumeMeter init audio worklet error: ${i}`),ah.logFailedEvent({userId:this._log.userId,eventType:lU.LOAD_WORKLET,error:i}),this.initScriptProcessor()}}initScriptProcessor(){if(!this._scriptProcessorNode)try{this._scriptProcessorNode=rD("volume-meter").createScriptProcessor(2048,1,1),this._scriptProcessorNode.onaudioprocess=i=>{cm.lastMessageTime=Date.now();const n=i.inputBuffer.getChannelData(0);let c=0;for(let I=0;I>2);t.copyTo(n,{planeIndex:0}),this.node.port.postMessage({name:"chunk",data:n},[n.buffer]),t.close()}}},VuA=mT(zU()),I6=t=>i=>i.deviceId===t,m3=class{constructor(t,i){Be(this,"kind"),Be(this,"type"),Be(this,"devices",[]),this.kind=t,this.type=i}update(t,i){const n=t.filter(c=>c.kind===`${this.kind}${this.type.toLocaleLowerCase()}`);this.devices.length===1&&V$(this.devices[0])||i&&(n.forEach(c=>{if(c.deviceId&&!this.devices.find(I6(c.deviceId))){const I=`${this.kind}${this.type}Added`;Wo.warn(`${I}: ${JSON.stringify(c)}`),i.emit(I,c)}}),this.devices.forEach(c=>{if(c.deviceId&&!n.find(I6(c.deviceId))){const I=`${this.kind}${this.type}Removed`;Wo.warn(`${I}: ${JSON.stringify(c)}`),i.emit(I,c)}})),this.devices=n}hasDevice(t){return!!this.devices.find(i=>i.deviceId===t)}},JuA=class extends VuA.EventEmitter{constructor(){super(),Be(this,"audioInputs",new m3(ei.AUDIO,"Input")),Be(this,"videoInputs",new m3(ei.VIDEO,"Input")),Be(this,"audioOutputs",new m3(ei.AUDIO,"Output")),this.init(),navigator.mediaDevices&&(navigator.mediaDevices.addEventListener&&navigator.mediaDevices.addEventListener("devicechange",()=>this.update()),"ondevicechange"in navigator.mediaDevices||MQ.run("interval",()=>{this.update()},{delay:1e4}))}init(){CW().then(t=>{this.audioInputs.update(t),this.videoInputs.update(t),this.audioOutputs.update(t)})}async update(t=0){const i=await CW(t);return this.audioInputs.update(i,this),this.videoInputs.update(i,this),this.audioOutputs.update(i,this),this}hasBlueTooth(){var t;if(1e3*((t=rD())==null?void 0:t.outputLatency)>150)return!0;const i=["bluetooth","air","wireless","bt","tws","buds","headset","headphone"];return this.audioOutputs.devices.some(n=>i.some(c=>n.label.toLowerCase().includes(c)))||this.audioInputs.devices.some(n=>i.some(c=>n.label.toLowerCase().includes(c)))}},DQ=u7||I7?null:new JuA;function V$(t){return t.deviceId===t.groupId&&t.groupId===""}async function CW(t=0){if(kV()||!U4())return[];let i=await navigator.mediaDevices.enumerateDevices();if(t!==0){const n={audio:!1,video:!1};if(i.forEach(c=>{V$(c)&&(c.kind===ei.AUDIO_INPUT?n.audio=!0:c.kind===ei.VIDEO_INPUT&&(n.video=!0))}),t===2&&(n.audio=!1),t===1&&(n.video=!1),n.audio||n.video){let c;try{c=await navigator.mediaDevices.getUserMedia(n),n.audio&&KY()}catch(I){Wo.debug("capture before getDevices failed: ",I)}i=await navigator.mediaDevices.enumerateDevices(),c?.getTracks().forEach(I=>I.stop())}}return i.map((n,c)=>{const I={kind:n.kind,deviceId:n.deviceId,groupId:n.groupId,label:n.label||`${n.kind}_${c}`};return n.deviceId.length>0&&H4.add(`${n.deviceId}_${n.kind}`),n.getCapabilities&&(I.getCapabilities=()=>n.getCapabilities()),I})}function kU(t=!1){return DQ.update(t?1:0).then(i=>i.audioInputs.devices)}function Rv(t=!1){return DQ.update(t?2:0).then(i=>i.videoInputs.devices)}var u6=!1;async function HuA(){try{u6||(u6=!0,Wo.info(`speakers:${(await quA()).map(t=>` ${t.deviceId.slice(0,8)}: ${t.label}`)}`))}catch{}}async function quA(t=!1){return(vu||ld)&&(t=!1),DQ.update(t?1:0).then(i=>i.audioOutputs.devices)}var pY,H4=new Set;function KuA(t){if(t instanceof CanvasCaptureMediaStreamTrack||!(t instanceof MediaStreamTrack))return!1;const i=t.label.toLocaleLowerCase();if(i.includes("camera")||i.includes("webcam"))return!0;const n=`${(t?.getSettings()||{}).deviceId}_${ei.VIDEO_INPUT}`;return!!H4.has(n)}function juA(t){if(t instanceof CanvasCaptureMediaStreamTrack||!(t instanceof MediaStreamTrack))return!1;const i=t.label.toLocaleLowerCase();if(i.includes("mic")||i.includes("麦克风"))return!0;const n=`${(t?.getSettings()||{}).deviceId}_${ei.AUDIO_INPUT}`;return!!H4.has(n)}async function WuA(t,i){const n=(await kU()).find(c=>c.deviceId===C7);return!i&&n?.groupId===t||n?.groupId===t&&n.label===i}async function zuA({newDeviceId:t,oldDeviceId:i,oldGroupId:n,oldLabel:c,kind:I}){return t===i&&(I!==ei.AUDIO||t!==C7||await WuA(n,c))}var ZuA=class extends PuA{constructor(t){super(),this.log=t,Be(this,"volumeMeter"),Be(this,"volumeMeterAfter3A"),Be(this,"volumeDestination"),Be(this,"analyser",new OuA),this.volumeMeter=new l6({log:this.log}),this.volumeMeterAfter3A=new l6({log:this.log}),this.volumeDestination=new vv,this.volumeMeter.pipeTo(this.volumeDestination)}destroy(){this.gain.deleteNode(),this.volumeMeter.deleteNode(),this.analyser.deleteNode(),this.source.deleteNode(),this.destination.deleteNode(),this.volumeDestination.deleteNode()}},XuA=class extends Ev{constructor(t){super(t,ei.AUDIO),Be(this,"_outputDeviceId"),Be(this,"_floatVolume",1),Be(this,"_destination"),Be(this,"pipeline"),Be(this,"volumeMeterMode","worklet"),Be(this,"enableVolumeControlInIOS"),this.enableVolumeControlInIOS=t.enableVolumeControlInIOS,this.mode=0,t.url&&(this.url=t.url),this.pipeline=new ZuA(this._log)}setTrack(t){}get duration(){var t;return Math.floor(1e3*(((t=this.element)==null?void 0:t.duration)||0))}get currentTime(){var t;return Math.floor(1e3*(((t=this.element)==null?void 0:t.currentTime)||0))}set currentTime(t){this.element&&(this.element.currentTime=t/1e3)}getMediaStream(){return this.pipeline.stream||(this.track?new MediaStream([this.track]):null)}initializeElement(t){if((wQ==="15.2"||wQ==="15.3"||wQ==="15.4")&&this.muted)return void this._log.info("audioElement is muted.");this._log.info("audio player initializeElement");const i=pY||new Audio;i.setAttribute("autoplay","autoplay"),i.srcObject=this.getMediaStream(),i.muted=this.muted,this.url&&(i.crossOrigin="anonymous",i.src=this.url),this.element=i,this.setVolume(Lv(t)?t/100:this._floatVolume),i===pY&&(pY=void 0),this.options.enableTimeupdateEvent&&(this.element.ontimeupdate=()=>this.emit(Jn.TIME_UPDATE,this.currentTime)),this.bindElementEvents()}async play(t){if(this.track||this.url){try{!this.pipeline.source.node&&this.track&&this.pipeline.replaceSource(this.track),this.element||this.initializeElement(t?.volume),this._outputDeviceId&&await this.setSinkId(this._outputDeviceId),this.volumeMeterMode==="worklet"?(this.pipeline.volumeMeter.init(),this.pipeline.volumeMeterAfter3A.init()):this.volumeMeterMode==="analyser"&&this.pipeline.analyser.setNode(rD("player").createAnalyser()),HuA()}catch(i){throw this._log.warn(`audio play error: ${i}`),a$(wQ,"18.7",!0)&&this.bindAutoPlayEvent(),i}return super.play()}}stop(t=0){this.pipeline.destroy(),super.stop(t)}setVolume(t){this._floatVolume=t,this.element&&(this.element.volume=t)}async setSinkId(t){var i,n;this._outputDeviceId!==t&&(this._outputDeviceId=t),this.element&&this.element.sinkId!==t&&await((n=(i=this.element).setSinkId)==null?void 0:n.call(i,t))}get useDestination(){return!!this.pipeline.stream}setLoop(t){this.element&&(this.element.loop=t)}getAudioLevel(){return this.pipeline.volumeMeter.getCalculatedVolume()}getInternalAudioLevel(){return this.pipeline.volumeMeter.getInternalAudioLevel()}getInternalAudioLevelAfter3A(){return this.pipeline.volumeMeterAfter3A.getInternalAudioLevel()}},$uA=class extends XuA{constructor(t){super(t),Be(this,"_sourceElement"),Be(this,"_output",new vv),this.pipeline.source.pipeTo(this.pipeline.gain),this.pipeline.gain.pipeTo(this.pipeline.volumeMeter).pipeTo(this._output),this.pipeline.gain.pipeTo(this.pipeline.destination)}setOutput(){this.mode=1,this._output.setNode(rD().destination)}write(t){this.pipeline.volumeMeter.write(t)}setTrack(t){var i,n,c;((n=(i=this.element)==null?void 0:i.error)==null?void 0:n.code)!==MediaError.MEDIA_ERR_DECODE&&this.track!==t&&(this.unbindTrackEvents(),this.track=t,this.emit(Jn.MEDIA_TRACK_CHANGED,t),t?(this.bindTrackEvents(),this._sourceElement?this._sourceElement.srcObject=new MediaStream([t]):!this.useDestination&&this.element&&(this.element.srcObject=new MediaStream([t])),this.pipeline.source.channelCount=((c=t.getSettings())==null?void 0:c.channelCount)||1,this.pipeline.replaceSource(t)):this.pipeline.source.deleteNode())}setVolume(t){var i;const n=t<=1&&!PY();if(!(this._floatVolume===t&&(n&&((i=this.element)==null?void 0:i.volume)===t||!n&&this.pipeline.volume===t)))if(this._floatVolume=t,this.useDestination)this.pipeline.setVolume(t),this._log.info(`set pipeline volume: ${t}`);else if(n)this.element?(this._log.info(`set element volume: ${t}`),this.element.volume=t):this._log.info("set element volume: no element");else{if(PY()){if(!this.enableVolumeControlInIOS)return;FuA()}if(rC&&!this.pipeline.source.node)return void this._log.warn("set pipeline volume failed: no source node");this._log.info(`start set pipeline volume: ${t}`),this.pipeline.setVolume(t),this.element&&!this._sourceElement&&(this._destination||(this._destination=rD().createMediaStreamDestination()),this.pipeline.destination.setNode(this._destination),NU(this.element),this._sourceElement=this.element,this._sourceElement.muted=!0,this.element=null,this.play().catch(c=>{this.emit(Jn.AUTOPLAY_FAILED,c)}))}}stop(t=0){this.pipeline.destroy();const i=this._sourceElement||this.element;i&&r$&&(pY=i),this._sourceElement&&(this._sourceElement.srcObject=null,delete this._sourceElement),super.stop(t)}},q4=class extends Ar{constructor({userId:t,sdkAppId:i,mediaType:n,room:c,PlayerClass:I=n===1?$uA:Yy}){var C;super(),Be(this,"id",d$()),Be(this,"userId",""),Be(this,"isRemote"),Be(this,"mediaType"),Be(this,"room"),Be(this,"user"),Be(this,"_log"),Be(this,"_inputTrack"),Be(this,"_outputTrack"),Be(this,"isPlayCalled"),Be(this,"container",null),Be(this,"player"),Be(this,"subVideoPlayerMap"),Be(this,"muted",!1),Be(this,"abortCtrl"),Be(this,"objectFit","cover"),Be(this,"mirror"),Be(this,"rotation"),Be(this,"isScreen",!1),Be(this,"manager"),Be(this,"trackSettings"),Be(this,"isFirstVideoFrameEmitted",!1),this.userId=t||"",this.mediaType=n,this._log=Wo.createLogger({parent:c?.getLogger(),id:`${this.kind[0]}t`,userId:(C=c||this.room)==null?void 0:C.userId,remoteUserId:this instanceof pv?void 0:this.userId,sdkAppId:i,type:this.mediaType===2?"auxiliary":"main",isLocal:this instanceof pv}),this.player=new I({id:this.userId||this.id,track:null,muted:!1,container:null,log:this._log,enableVolumeControlInIOS:c?.enableVolumeControlInIOS}),this.player.on(Jn.PLAYER_STATE_CHANGED,f=>{if(ms.emit(mn.PLAYER_STATE_CHANGED,Rn({track:this},f)),this.emit("player-state-changed",f),f.state==="PLAYING"&&this.room){let w=!0;for(const{remoteAudioTrack:_,remoteVideoTrack:N,remoteAuxiliaryTrack:L}of[...this.room.remotePublishedUserMap.values()])if(_.isAvailable&&!_.player.isPlaying||N.isAvailable&&!N.player.isPlaying||L.isAvailable&&!L.player.isPlaying){w=!1;break}w&&GU()&&GuA()}}),this.kind===ei.VIDEO&&(this.player.on(Jn.LOADED_DATA,()=>{this.emitFirstVideoFrameEvent(Jn.LOADED_DATA),ms.emit(mn.VIDEO_LOADED_DATA,{track:this})}),this.player.on(Jn.LOADED_META_DATA,()=>{this.emitFirstVideoFrameEvent(Jn.LOADED_META_DATA)}),this.player.on(Jn.MEDIA_TRACK_CHANGED,f=>{var w;(w=this.subVideoPlayerMap)==null||w.forEach(_=>_.setTrack(f))}),this.player.on(Jn.RESIZE,f=>{this.emitFirstVideoFrameEvent(Jn.RESIZE),this.emit("video-size-changed",Rn({userId:this.userId,streamType:this.mediaType===2?"auxiliary":"main"},f))}),this.player.on(Jn.FIRST_FRAME_RENDER,f=>{this.emit("first-frame-render",gB(Rn({},f),{streamType:this.streamType,userId:this.isRemote?this.userId:""}))})),this.onTrackMuted=this.onTrackMuted.bind(this),this.onTrackUnmuted=this.onTrackUnmuted.bind(this),this.onTrackEnded=this.onTrackEnded.bind(this),this.onPlayerError&&this.player.on(Jn.ERROR,this.onPlayerError.bind(this)),this.player.on(Jn.AUTOPLAY_FAILED,this.handleAutoPlayFailed,this)}get log(){return this._log||Wo}get kind(){return this.mediaType===1?ei.AUDIO:ei.VIDEO}get isAudio(){return this.kind===ei.AUDIO}get strMediaType(){return this.mediaType===4?ei.VIDEO:this.mediaType===2?ei.SCREEN:ei.AUDIO}get streamType(){return 2&this.mediaType?"auxiliary":"main"}get isMediaTrackActive(){return!!this.mediaTrack&&!this.mediaTrack.muted&&this.mediaTrack.readyState==="live"&&this.mediaTrack.enabled}async play(t,i){const n=oh(t)?t[0]:t;if(this.isPlayCalled)return this.log.info(`play update options: ${JSON.stringify(i)}`),i&&!er(i.muted)&&this.setPlayerMute(i.muted),i&&!er(i.objectFit)&&(this.objectFit=i.objectFit),void(this.player instanceof Yy&&(this.player.setObjectFit(this.objectFit),this.container!==n&&n&&(oh(t)&&t.length>=1&&this.container&&t.includes(this.container)&&this.container.contains(this.player.elementToRender)?(t.splice(t.indexOf(this.container),1),t.unshift(this.container)):(this.container=n,this.player.setContainer(n))),oh(t)&&t.length>=1&&await this.playSubContainer(t.slice(1),i)));if(i&&!er(i.muted)?this.setPlayerMute(i.muted):this.isRemote&&this.kind!==ei.VIDEO||this.setPlayerMute(!0),i&&!er(i.objectFit)&&(this.objectFit=i.objectFit),this.player instanceof Yy&&(er(i?.isLiveStream)||this.player.setLiveMode(i.isLiveStream),this.player.setObjectFit(this.objectFit),i&&!er(i.poster)&&this.player.setPoster(i.poster)),this.isPlayCalled=!0,n&&(this.container=n,this.player instanceof Yy&&this.player.setContainer(n)),ms.emit(mn.PLAY_TRACK_START,{track:this}),this._outputTrack){this._log.info(`play with options: ${JSON.stringify(i)}`);try{this.player.setTrack(this.playerMediaTrack),await this.player.play(i),oh(t)&&t.length>1&&await this.playSubContainer(t.slice(1),i)}catch(c){throw this.handleAutoPlayFailed(c),c}}else this.log.info("play has not mediaTrack, abort")}setMirror(t,i){if(this.isScreen||this.kind!==ei.VIDEO||er(t)||t===this.mirror)return;this.mirror=t;let n=this.player;i&&(n=i);const c=this.manager;if(Sv(this.mirror))return n.setViewMirror(this.mirror),void(!this.isRemote&&c&&(c.mirror=!1));switch(this.mirror){case"view":c&&(c.mirror=!1),n.setViewMirror(!0);break;case"publish":c&&(c.mirror=!0),n.setViewMirror(!0);break;case"both":c&&(c.mirror=!0),n.setViewMirror(!1)}}async playSubContainer(t,i){if(!this._outputTrack||this.kind===ei.AUDIO)return;this.subVideoPlayerMap||(this.subVideoPlayerMap=new Map),this.subVideoPlayerMap.forEach((c,I)=>{var C;t.find(f=>I===f)||(c.stop(),(C=this.subVideoPlayerMap)==null||C.delete(I))});for(const[c,I]of t.entries()){const C=this.subVideoPlayerMap.get(I);C?i&&(er(i.objectFit)||C.setObjectFit(i.objectFit)):this.subVideoPlayerMap.set(I,new Yy({id:this.userId||this.id,track:this.playerMediaTrack,container:I,muted:this.player.muted,objectFit:this.objectFit,log:this.log.createChild({id:`vp-sub${c+1}`})}))}const n=[...this.subVideoPlayerMap.values()];for(const c of n)c.setViewMirror(this.player.mirror),await c.play()}setAudioOutput(t){return this.player.setSinkId(t)}setAudioVolume(t){this.player.setVolume(t)}getAudioLevel(){return this.player.getAudioLevel()||0}getInternalAudioLevel(){var t;return((t=this.player)==null?void 0:t.getInternalAudioLevel())||0}stop(t=!1){this.isPlayCalled&&(this.isPlayCalled=!1,this.isFirstVideoFrameEmitted=!1,this.player&&(this.log.info(`stop ${this.kind} player`),this.player.stop(c3(this)&&!t?this.jitterBufferDelay:0)),this.subVideoPlayerMap&&this.subVideoPlayerMap.size>0&&this.subVideoPlayerMap.forEach(i=>{i.stop()}),this.container=null)}async resume(){var t;this.isPlayCalled&&await((t=this.player)==null?void 0:t.resume())}close(){this._toInitState(),this.log.info("close"),this.isPlayCalled&&this.stop(!0)}_toInitState(){}setMute(t){this.muted=t,this._inputTrack&&(this._inputTrack.enabled=!t),this._outputTrack&&(this._outputTrack.enabled=!t),this.emit(t?"mute":"unmute",this),ms.emit(t?mn.TRACK_MUTED:mn.TRACK_UNMUTED,{track:this})}setPlayerMute(t){this.player.setMuted(t)}get mediaTrack(){return this._inputTrack||null}get outMediaTrack(){return this._outputTrack||null}get playerMediaTrack(){return this.outMediaTrack}installTrackEvent(t){V4(t,t).add(ei.MUTE,this.onTrackMuted).add(ei.UNMUTE,this.onTrackUnmuted).add(ei.ENDED,this.onTrackEnded),t.muted&&this.onTrackMuted(),t.readyState===ei.ENDED&&this.onTrackEnded()}uninstallTrackEvent(t){NU(t)}setInputMediaStreamTrack(t){var i;const n=this._inputTrack;if(t!==n)return this._inputTrack=t,this.trackSettings=(i=t.getSettings)==null?void 0:i.call(t),t.enabled=!this.muted,n&&this.uninstallTrackEvent(n),this.installTrackEvent(t),this.emit("input-media-track-changed",t||null,n||null),this.manager?this.manager.changeInput(this):this.setOutputMediaStreamTrack(t)}setOutputMediaStreamTrack(t){var i;const n=this._outputTrack;this instanceof FV&&p4(n)||t!==n&&(this.isRemote?this.log.debug("setOutputMediaStreamTrack",t.label):this.log.info("setOutputMediaStreamTrack",(i=t.getSettings)==null?void 0:i.call(t).deviceId,t.label),this._outputTrack=t,this._inputTrack&&(this._outputTrack.contentHint=this._inputTrack.contentHint,this._outputTrack.enabled=this._inputTrack.enabled),this.updatePlayingState(!!t),this.emit("output-media-track-changed",t))}setMediaType(t){this.mediaType=t}updatePlayingState(t){var i,n;if(this.isPlayCalled){if(t){if(this.player.setTrack(this.playerMediaTrack),this.player.isStopped)return this.player.play().catch(c=>this.handleAutoPlayFailed(c)),void this.log.info(`playing state updated, play ${this.kind}`)}else if(!this.player.isStopped)return c3(this)&&this.isAudio&&((i=this.user)!=null&&i.muteState.hasAudio)&&((n=this.user)!=null&&n.muteState.audioMuted)?void 0:(this.player.stop(c3(this)?this.jitterBufferDelay:0),void this.log.info(`playing state updated, stop ${this.kind}`))}this.log.debug(`updatePlayingState abort ${this.isPlayCalled} ${t} ${this.player.isStopped}`)}async handleAutoPlayFailed(t){var i;this.log.warn("handleAutoPlayFailed",t);const n=()=>{this.resume().then(()=>{document.removeEventListener("click",n,!0)})};if(this.room&&this.room.enableAutoPlayDialog){if((fT||$U)&&(await IT(100),(i=this.player)==null?void 0:i.isPlaying))return;NuA()}else document.addEventListener("click",n,!0);ms.once(mn.LOCAL_TRACK_CAPTURE_SUCCESS,({track:c})=>{c.kind==="audio"&&GU()&&!this.player.isPlaying&&this.isRemote&&this.isAvailable&&n()}),this.emit("error",t)}getVideoFrame(){return this.player instanceof Yy?this.player.getVideoFrame():""}emitFirstVideoFrameEvent(t){var i,n,c;if(this.isFirstVideoFrameEmitted)return;const I=(i=this.mediaTrack)==null?void 0:i.getSettings();let C=I?.width||((n=this.player.element)==null?void 0:n.videoWidth)||0,f=I?.height||((c=this.player.element)==null?void 0:c.videoHeight)||0;(t!==Jn.RESIZE||C||f)&&(t!==Jn.LOADED_META_DATA||C||f)&&(t!==Jn.LOADED_DATA||C||f||this._log.warn("the dimension of video is 0x0 in first-video-frame event"),this.isFirstVideoFrameEmitted=!0,T7(this.rotation)&&([C,f]=[f,C]),this.emit("first-video-frame",{width:C,height:f,streamType:this.streamType,userId:this.isRemote?this.userId:""}))}onTrackMuted(){this._log.warn(`${this.kind} track is unable to provide media output`)}onTrackUnmuted(){this._log.info(`${this.kind} track is able to provide media output`)}onTrackEnded(){this._log.warn(`${this.kind} track ended`)}};Cc([Su([],Ar.INIT,{sync:!0})],q4.prototype,"_toInitState");var AEA=Object.prototype.hasOwnProperty;function eEA(t){if(t==null)return!0;if(typeof t=="boolean")return!1;if(typeof t=="number")return t===0;if(typeof t=="string"||typeof t=="function"||Array.isArray(t))return t.length===0;if(t instanceof Error)return t.message==="";if(lT(t))switch(Object.prototype.toString.call(t)){case"[object File]":case"[object Map]":case"[object Set]":return t.size===0;case"[object Object]":for(const i in t)if(AEA.call(t,i))return!1;return!0}return!1}var jY=eEA,tEA=async function(t){const i=oEA(t);Wo.info(`getUserMedia with constraints: ${JSON.stringify(i)}`);let n=[],c=[];const I=["label","deviceId","groupId"];if(i.audio&&(n=await kU(),Wo.info(`microphones: ${Xy(n.map(C=>gB(Rn({},C),{groupId:C.groupId.substring(0,8)})),{keysToInclude:I})}`)),i.video&&(c=await Rv(),Wo.info(`cameras: ${Xy(c,{keysToInclude:I})}`),!Sv(i.video)&&i.video.facingMode==="user"&&!i.video.deviceId)){const C=c.filter(f=>!f.label.includes("infrared")).find(f=>f.label.includes("facing front"));C&&(i.video.deviceId=C.deviceId,Wo.info(`exclude infrared camera: ${JSON.stringify(i)}`))}try{const C=await navigator.mediaDevices.getUserMedia(i);return _$&&C.getTracks().forEach(f=>{var w;const _=f.getCapabilities();Wo.info(`${f.kind} capabilities: ${Xy(_,{keysToInclude:h7})}`),er(t.echoCancellation)||((w=_.echoCancellation)==null?void 0:w.indexOf(t.echoCancellation))!==-1||Wo.warn(`Invalid argument for 'echoCancellation'. Expected one of [${JSON.stringify(_.echoCancellation)}], but received '${t.echoCancellation}'`)}),i.audio&&KY(),C}catch(C){let{message:f}=C;throw C.name==="NotFoundError"&&(t.video&&c&&c.length===0&&(f=HY({key:JY.CAMERA_NOT_FOUND})),t.audio&&n&&n.length===0&&(f=HY({key:JY.MICROPHONE_NOT_FOUND}))),new fl({code:qg.INITIALIZE_FAILED,name:C.name,message:f,constraint:C.constraint})}},iEA=m4({retryFunction:tEA,settings:{retries:3,timeout:500},onError:({error:t,retry:i,reject:n,retryFuncArgs:c,retriedCount:I})=>{const C=I+1;t.name==="NotReadableError"||t.name==="OverconstrainedError"||t.name==="AbortError"?(C===1?(c[0].video&&(c[0].maxResolution=!1,(!ld||c[0].width*c[0].height<=2073600)&&c[0].frameRate&&(c[0].frameRate=c[0].frameRate>10?10:5)),c[0].retryWhenExactFailed&&c[0].useExactDeviceId&&(c[0].useExactDeviceId=!1)):C===2?c[0].useDeviceIdOnly=!0:C!==3||c[0].useExactDeviceId||(c[0].useTrueAsConstraint=!0),i()):n(t),c[0].microphoneId&&E6(c[0].microphoneId,!1),c[0].cameraId&&E6(c[0].cameraId,!0)},onRetrying:t=>{Wo.warn(`getUserMedia NotReadableError observed, retrying [${t}/3]`)},onRetryFailed:t=>{ah.logFailedEvent({eventType:lU.GET_USER_MEDIA_RETRY,error:t})},onRetrySuccess:t=>{ah.logSuccessEvent({eventType:lU.GET_USER_MEDIA_RETRY}),ah.uploadEvent({log:`stat-${lU.GET_USER_MEDIA_RETRY}-success-${t}`})}});async function E6(t,i){const n=(i?await Rv():await kU()).find(c=>c.deviceId===t);n&&Dv(n.getCapabilities)&&Wo.warn(Xy(n.getCapabilities(),{keysToInclude:h7}))}function oEA(t){return{audio:sEA(t),video:nEA(t)}}function sEA(t){if(!t.audio)return!1;if(t.useTrueAsConstraint)return!0;const i={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,sampleRate:t.sampleRate};return!jY(t.microphoneId)&&(i.deviceId=t.useExactDeviceId?{exact:t.microphoneId}:t.microphoneId,t.useDeviceIdOnly)?i:(Lv(t.channelCount)&&(i.channelCount=t.channelCount),(Sv(t.echoCancellation)||t.echoCancellation==="remote-only"||t.echoCancellation==="all")&&(i.echoCancellation=t.echoCancellation),Sv(t.noiseSuppression)&&!t.noiseSuppression&&(i.noiseSuppression=!1),Sv(t.autoGainControl)&&!t.autoGainControl&&(i.autoGainControl=!1),!!jY(i)||i)}function nEA(t){if(!t.video)return!1;if(t.useTrueAsConstraint)return!0;const{maxResolution:i=!0}=t,n={};return t.cameraId?n.deviceId=t.useExactDeviceId?{exact:t.cameraId}:t.cameraId:t.facingMode&&(n.facingMode=t.facingMode),t.useDeviceIdOnly&&!jY(n)?n:(t.width&&(n.width={ideal:t.width},i&&!rC&&(n.width.max=t.width)),t.height&&(n.height={ideal:t.height},i&&!rC&&(n.height.max=t.height)),rC&&GV&&t.width&&t.height&&t.width*t.height<101376&&(n.width=t.width,n.height=t.height),t.frameRate&&(n.frameRate=t.frameRate),!!jY(n)||n)}var rEA=iEA;function J$(t){return UV((i,n)=>async function(...c){const I=await i.apply(this,c);return await t.call(this,...c),I})}function UV(t){return function(i,n,c){return c.value=t(c.value,n),c}}var aEA=(()=>{let t=!1,i=document.visibilityState;return()=>{document.visibilityState!==i&&Wo.info(`visibility change: ${document.visibilityState}`),t||(document.addEventListener("visibilitychange",()=>{Wo.info(`visibility change: ${document.visibilityState}`),i=document.visibilityState}),t=!0)}})(),gEA=0,cEA=class{constructor(t){Be(this,"log"),Be(this,"isRunning",!1),Be(this,"queue",[]);let i="fq"+ ++gEA;t&&(i+=`|${t}`),this.log=Wo.createLogger({id:i})}get length(){return this.queue.length}get lastQueueItem(){return this.length===0?null:this.queue[this.length-1]}push(t,i=!1){var n,c;const I=Rn({},t),C=new Promise((f,w)=>{I.resolve=f,I.reject=w});return I.promise=C,i?this.length<=1?this.queue.push(I):(c=(n=this.lastQueueItem)==null?void 0:n.promise)==null||c.then(I.resolve,I.reject):this.queue.push(I),this.log.debug(`push ${this.length}`,t.funcName,t.args),this.isRunning||this.callNext(),C}shift(){const t=this.queue.shift();return this.log.debug(`shift ${this.length}`,t?.funcName,t?.args),t}callNext(){if(this.isRunning||this.length===0)return;const{fn:t,args:i,context:n,resolve:c,reject:I,funcName:C}=this.queue[0];this.log.debug("callNext",this.length,C,i),this.isRunning=!0,t.apply(n,i).then(c,I).finally(()=>{this.isRunning=!1,this.shift(),this.callNext()})}},d6=new WeakMap;function lEA(t=!1){return function(i,n,c){const I=c.value;return c.value=function(...C){const f=d6.get(this)||new cEA;return d6.set(this,f),f.push({fn:I,args:C,context:this,funcName:n},t)},c}}function H$(t,i){return UV((n,c)=>function(...I){const C=t;try{const f=n.apply(this,I),w=Yc();return f7(f)?f.then(_=>(i?dr.addSuccessEvent({key:C,cost:Yc()-w}):dr.addSuccessEvent({key:C}),_)).catch(_=>{throw dr.addFailedEvent({key:C,error:_}),_}):(dr.addSuccessEvent({key:C}),f)}catch(f){throw dr.addFailedEvent({key:C,error:f}),f}})}function AI(...t){}var IEA=t=>t();function uEA(){this.dispose()}var EEA=()=>typeof __FASTRX_DEVTOOLS__<"u",dEA=1,uT=class extends Function{toString(){return`${this.name}(${this.args.length?[...this.args].join(", "):""})`}subscribe(t){const i=new hEA(t,this,this.streamId++);return pl.subscribe({id:this.id,end:!1},{nodeId:i.sourceId,streamId:i.id}),this(i),i}},K4=class{constructor(){this.defers=new Set,this.disposed=!1}next(t){}complete(){this.dispose()}error(t){this.dispose()}get bindDispose(){return()=>this.dispose()}dispose(){this.disposed=!0,this.complete=AI,this.error=AI,this.next=AI,this.dispose=AI,this.subscribe=AI,this.doDefer()}subscribe(t){return t instanceof uT?t.subscribe(this):t(this),this}get bindSubscribe(){return t=>this.subscribe(t)}doDefer(){this.defers.forEach(IEA),this.defers.clear()}defer(t){this.defers.add(t)}removeDefer(t){this.defers.delete(t)}reset(){this.disposed=!1,delete this.complete,delete this.next,delete this.dispose,delete this.next,delete this.subscribe}resetNext(){delete this.next}resetComplete(){delete this.complete}resetError(){delete this.error}},lB=class extends K4{constructor(t){super(),this.sink=t,t.defer(this.bindDispose)}next(t){this.sink.next(t)}complete(){this.sink.complete()}error(t){this.sink.error(t)}},CEA=class extends K4{constructor(t,i=AI,n=AI,c=AI){if(super(),this._next=i,this._error=n,this._complete=c,this.then=AI,t instanceof uT){const I={toString:()=>"subscribe",id:0,source:t};this.defer(()=>{pl.defer(I,0)}),pl.create(I),pl.pipe(I),this.sourceId=I.id,this.subscribe(t),pl.subscribe({id:I.id,end:!0}),i==AI?this._next=C=>pl.next(I,0,C):this.next=C=>{pl.next(I,0,C),i(C)},c==AI?this._complete=()=>pl.complete(I,0):this.complete=()=>{this.dispose(),pl.complete(I,0),c()},n==AI?this._error=C=>pl.complete(I,0,C):this.error=C=>{this.dispose(),pl.complete(I,0,C),n(C)}}else this.subscribe(t)}next(t){this._next(t)}complete(){this.dispose(),this._complete()}error(t){this.dispose(),this._error(t)}};function ih(t,...i){return i.reduce((n,c)=>c(n),t)}function aC(t,i,n){if(EEA()){const c=Object.defineProperties(Object.setPrototypeOf(t,uT.prototype),{streamId:{value:0,writable:!0,configurable:!0},name:{value:i,writable:!0,configurable:!0},args:{value:n,writable:!0,configurable:!0},id:{value:0,writable:!0,configurable:!0}});pl.create(c);for(let I=0;I{if(c instanceof uT){const I=aC(C=>{const f=new t(C,...n);f.sourceId=I.id,f.subscribe(c)},i,arguments);return I.source=c,pl.pipe(I),I}return I=>c(new t(I,...n))}}}function by(t,i){window.postMessage({source:"fastrx-devtools-backend",payload:{event:t,payload:i}})}var hEA=class extends lB{constructor(t,i,n){super(t),this.source=i,this.id=n,this.sourceId=t.sourceId,this.defer(()=>{pl.defer(this.source,this.id)})}next(t){pl.next(this.source,this.id,t),this.sink.next(t)}complete(){pl.complete(this.source,this.id),this.sink.complete()}error(t){pl.complete(this.source,this.id,t),this.sink.error(t)}},pl={addSource(t,i){by("addSource",{id:t.id,name:t.toString(),source:{id:i.id,name:i.toString()}})},next(t,i,n){by("next",{id:t.id,streamId:i,data:n&&n.toString()})},subscribe({id:t,end:i},n){by("subscribe",{id:t,end:i,sink:{nodeId:n&&n.nodeId,streamId:n&&n.streamId}})},complete(t,i,n){by("complete",{id:t.id,streamId:i,err:n?n.toString():null})},defer(t,i){by("defer",{id:t.id,streamId:i})},pipe(t){by("pipe",{name:t.toString(),id:t.id,source:{id:t.source.id,name:t.source.toString()}})},update(t){by("update",{id:t.id,name:t.toString()})},create(t){t.id||(t.id=dEA++),by("create",{name:t.toString(),id:t.id})}},BEA=class extends K4{constructor(t){super(),this.source=t,this.sinks=new Set}add(t){t.defer(()=>this.remove(t)),this.sinks.add(t).size===1&&(this.reset(),this.subscribe(this.source))}remove(t){this.sinks.delete(t),this.sinks.size===0&&this.dispose()}next(t){this.sinks.forEach(i=>i.next(t))}complete(){this.sinks.forEach(t=>t.complete()),this.sinks.clear()}error(t){this.sinks.forEach(i=>i.error(t)),this.sinks.clear()}};function q$(){return t=>{const i=new BEA(t);if(t instanceof uT){const n=aC(c=>{i.add(c)},"share",arguments);return i.sourceId=n.id,n.source=t,pl.pipe(n),n}return aC(i.add.bind(i),"share",arguments)}}function K$(...t){return aC(i=>{const n=new lB(i);let c=t.length;n.complete=()=>{--c===0&&i.complete()},t.forEach(n.bindSubscribe)},"merge",arguments)}function QEA(...t){return aC(i=>{const n=new Map;t.forEach(c=>{const I=new lB(i);n.set(c,I),I.complete=()=>{n.delete(c),n.size===0?i.complete():I.dispose()},I.next=C=>{n.delete(c),n.forEach(f=>f.dispose()),I.resetNext(),I.resetComplete(),I.next(C)}}),t.forEach(c=>n.get(c).subscribe(c))},"race",arguments)}function pEA(...t){return i=>aC((n,c=0,I=t.length)=>{for(;c{n.next=I=>c.next(I),n.complete=()=>c.complete(),n.error=I=>c.error(I),t&&c.subscribe(t)},"subject",i));return n.next=AI,n.complete=AI,n.error=AI,n}function mEA(t){return aC(i=>{let n=0;const c=setInterval(()=>i.next(n++),t);return i.defer(()=>{clearInterval(c)}),"interval"},"interval",arguments)}function fEA(t,i){return aC(n=>{let c=0;const I=setTimeout(()=>{n.removeDefer(C),n.next(c++),i||n.complete()},t),C=()=>clearTimeout(I);n.defer(C)},"timer",arguments)}function f3(t,i){return n=>{const c=I=>n.next(I);n.defer(()=>i(c)),t(c)}}function yE(t,i){if("on"in t&&"off"in t)return aC(f3(n=>t.on(i,n),n=>t.off(i,n)),"fromEvent",arguments);if("addListener"in t&&"removeListener"in t)return aC(f3(n=>t.addListener(i,n),n=>t.removeListener(i,n)),"fromEvent",arguments);if("addEventListener"in t)return aC(f3(n=>t.addEventListener(i,n),n=>t.removeEventListener(i,n)),"fromEvent",arguments);throw"target is not a EventDispachter"}function yEA(){return aC(t=>t.complete(),"empty",arguments)}var DEA=class extends lB{constructor(t,i,n){super(t),this.filter=i,this.thisArg=n}next(t){this.filter.call(this.thisArg,t)&&this.sink.next(t)}},tT=Pv(DEA,"filter"),SEA=class extends lB{constructor(t,i){super(t),this.count=i}next(t){this.sink.next(t),--this.count===0&&(this.doDefer(),this.complete())}},MEA=Pv(SEA,"take"),vEA=class extends lB{constructor(t,i){super(t);const n=new lB(t);n.next=()=>{n.doDefer(),t.complete()},n.complete=uEA,n.subscribe(i)}},ET=Pv(vEA,"takeUntil"),REA=class extends lB{constructor(t,i){super(t),this.f=i}next(t){this.f(t)||(this.next=super.next,this.next(t))}},wEA=Pv(REA,"skipWhile"),_EA=class extends lB{constructor(t,i,n){super(t),this.mapper=i,this.thisArg=n}next(t){super.next(this.mapper.call(this.thisArg,t))}},W$=Pv(_EA,"map"),TEA=class extends lB{constructor(t,i,n){super(t),this.data=i,this.context=n}next(t){const i=this.context.combineResults;i?this.sink.next(i(this.data,t)):this.sink.next(t)}tryComplete(){this.context.resetComplete(),this.dispose()}},NEA=class z$ extends lB{constructor(i,n,c){super(i),this.makeSource=n,this.combineResults=c,this.index=0}subInner(i,n){const c=this.currentSink=new n(this.sink,i,this);this.complete===z$.prototype.complete&&(this.complete=this.tryComplete),c.complete=c.tryComplete,c.subscribe(this.makeSource(i,this.index++))}complete(){this.sink.complete()}tryComplete(){this.currentSink.resetComplete(),this.dispose()}},C6=class extends TEA{},Z$=class extends NEA{next(t){this.subInner(t,C6),this.next=i=>{this.currentSink.dispose(),this.subInner(i,C6)}}},GEA=Pv(Z$,"switchMap");function bEA(t){return(i,n)=>t(()=>i,n)}var X$=bEA(Pv(Z$,"switchMapTo")),Fv=(t=AI,i=AI,n=AI)=>c=>new CEA(c,t,i,n),$$=(t=>(t[t.AUTO_SWITCH_NEW_DEVICE=0]="AUTO_SWITCH_NEW_DEVICE",t[t.WAIT_CURRENT_DEVICE=1]="WAIT_CURRENT_DEVICE",t))($$||{}),pv=class extends q4{constructor(t,i){super({mediaType:t,PlayerClass:i}),Be(this,"isRemote",!1),Be(this,"deviceId"),Be(this,"groupId",""),Be(this,"label",""),Be(this,"sourceTrack"),Be(this,"enableAutoSwitchWhenRecapturing",!0),Be(this,"_isRecapturing",!1),Be(this,"_lastRecaptureTime",0),Be(this,"_onMuteTimeoutId",-1),Be(this,"_encodeCheckTimeoutId",-1),Be(this,"recaptureMode",0),Be(this,"profile"),Be(this,"retryEncodeFailed")}get enableEncodeFrame(){return!1}get isPublishing(){return this.state.toString()==="publishing"}get isPublished(){return this.state==="publish"}get isUseCustomSource(){return!(!this.mediaTrack||this.sourceTrack===this.mediaTrack)}encodeFrame(t,i){throw new Error("Method not implemented.")}installTrackEvent(t){t.addEventListener(ei.MUTE,this.onTrackMuted),t.addEventListener(ei.UNMUTE,this.onTrackUnmuted),t.addEventListener(ei.ENDED,this.onTrackEnded),t.muted&&this.onTrackMuted(),t.readyState===ei.ENDED&&this.onTrackEnded()}uninstallTrackEvent(t){t.removeEventListener(ei.MUTE,this.onTrackMuted),t.removeEventListener(ei.UNMUTE,this.onTrackUnmuted),t.removeEventListener(ei.ENDED,this.onTrackEnded)}setStateToReady(){}async capture(t,i=!1){var n,c;const I=this.sourceTrack;try{const C=Yc();let f;ms.emit(mn.LOCAL_TRACK_CAPTURE_START,{track:this}),t.customSource?(f=new MediaStream,f.addTrack(t.customSource)):(i||(n=this.sourceTrack)==null||n.stop(),f=await rEA(t));const w=f.getTracks()[0];return await this.setInputMediaStreamTrack(w),t.customSource||(this.sourceTrack=w,this.updateDeviceIdInUse(),this.listenDeviceChange()),ms.emit(mn.LOCAL_TRACK_CAPTURE_SUCCESS,{track:this,cost:Yc()-C,profile:this.profile,room:(c=this.manager)==null?void 0:c.room}),f}catch(C){throw ms.emit(mn.LOCAL_TRACK_CAPTURE_FAILED,{track:this,error:C}),this.log.error(`getUserMedia error observed ${C}`),C}finally{i&&I?.stop()}}setOutputMediaStreamTrack(t){var i;if(super.setOutputMediaStreamTrack(t),this.setStateToReady(),this.isPublishing||this.isPublished)return(i=this.room)==null?void 0:i.replaceTrack(this)}get hasFlag(){var t,i;const n=D7(((t=this.room)==null?void 0:t.localPublishFlag)||0,((i=this.room)==null?void 0:i.userId)||"");return this.mediaType===4&&n.hasVideo||this.mediaType===1&&n.hasAudio||this.mediaType===2&&n.hasAuxiliary}async publish(t,i){return this.room=t,this.room.localTracks.add(this),this.emit("4",{mediaType:this.strMediaType,state:"starting",prevState:"stopped"}),this.userId=t.userId,this._log.bindParent(t.getLogger()),await i,this._checkPublishFlag(t)}_checkPublishFlag(t){return new Promise(async(i,n)=>{var c,I,C,f,w;const _=()=>n(new fl({code:qg.API_CALL_ABORTED,message:"publish aborted"}));if(this.hasFlag||this.muted?i():(this.state!==Ar.INIT&&this.state!=="ready"||_(),ih(yE(t,"local-publish-flag-changed"),tT(()=>this.hasFlag),ET(K$(yE(this,Ar.INIT),yE(this,"ready"))),Fv(i,n,_))),(C=(I=(c=this.room)==null?void 0:c.networkQuality)==null?void 0:I.hadRecentBadUplink)==null?void 0:C.call(I,2))return i();const N=t.heartbeatCount,L=((w=(f=this.mediaTrack)==null?void 0:f.stats)==null?void 0:w.totalFrames)||0;this._encodeCheckTimeoutId=setTimeout(async()=>{var q,lA,tA,BA,IA,gA,RA,HA;if((tA=(lA=(q=this.room)==null?void 0:q.networkQuality)==null?void 0:lA.hadRecentBadUplink)!=null&&tA.call(lA,2)||t.heartbeatCount-N<3)return i();if((this.isPublished||this.isPublishing)&&this.isMediaTrackActive){if((BA=this.mediaTrack)!=null&&BA.stats){const me=this.mediaTrack.stats.totalFrames||0;me-L===0&&this.log.warn("capture totalFrames is 0 during encode check, totalFrames",me)}const ZA=this.kind===ei.AUDIO,KA=this.stat.bytesSent>0;if(dr[KA?"addSuccessEvent":"addFailedEvent"]({key:ZA?503700:513702}),!ZA){const me={H264:513704,H265:513705,VP8:513706}[((gA=(IA=this.room)==null?void 0:IA.videoCodec)==null?void 0:gA.toUpperCase())||"H264"];me&&dr[KA?"addSuccessEvent":"addFailedEvent"]({key:me})}if(!KA){if(dr.addEnum({key:ZA?503701:513703,value:b4()}),ah.uploadEvent({log:`stat-encode-failed-${this.kind}-${g$()||l$()}`,userId:this.userId}),this.log.warn(ZA?"encode failed":`${(HA=(RA=this.room)==null?void 0:RA.videoCodec)==null?void 0:HA.toUpperCase()} encode failed`),this.retryEncodeFailed&&(this.log.warn("retry encode"),await this.retryEncodeFailed(this),this.stat.bytesSent>0||this.hasFlag||(await IT(5e3),this.stat.bytesSent>0||this.hasFlag)))return i();this.emit("6",this),n(new fl({message:`${this.strMediaType} encode failed`,code:ZA?qg.AUDIO_ENCODE_FAILED:qg.VIDEO_ENCODE_FAILED}))}}},1e4)})}unpublish(){this.room&&this.room.localTracks.delete(this),this.log.info("unpublish"),ms.emit(mn.LOCAL_TRACK_UNPUBLISHED,{track:this})}async updateDeviceIdInUse(){if(this.sourceTrack&&qY){const{deviceId:t,groupId:i}=this.sourceTrack.getSettings(),{label:n}=this.sourceTrack;await zuA({newDeviceId:t,oldDeviceId:this.deviceId,oldGroupId:this.groupId,oldLabel:this.label,kind:this.kind})||(this.deviceId=t,this.label=n,i&&(this.groupId=i),CW().then(c=>{const I=c.find(C=>{let f=C.deviceId===t;return i&&(f=f&&C.groupId===i),f});I&&this.emit("2",I)}))}}setProfile(t){this.log.info("setProfile",t),Object.assign(this.profile,t)}isNeedToRecapture(t=!1){return!(!this.deviceId||!this.sourceTrack||this.kind===ei.AUDIO&&!juA(this.sourceTrack)||this.kind===ei.VIDEO&&!KuA(this.sourceTrack)||this._isRecapturing||t&&GV&&ld)}onTrackMuted(){super.onTrackMuted(),aEA(),this.isNeedToRecapture(!0)&&(Date.now()-this._lastRecaptureTimethis.onTrackMuted(),W1):this._onMuteTimeoutId=setTimeout(async()=>{var t;if((t=this.sourceTrack)!=null&&t.muted){if((vu||cC)&&document.visibilityState!=="visible")return;this.recapture(await this.getRecoverCaptureDeviceId())}},5e3))}onTrackUnmuted(){super.onTrackUnmuted(),this._onMuteTimeoutId>0&&clearTimeout(this._onMuteTimeoutId)}async onTrackEnded(){if(super.onTrackEnded(),this.isNeedToRecapture()&&this.recaptureMode===0){if(Date.now()-this._lastRecaptureTimethis.onTrackEnded(),W1);this.emit("7"),this.recapture(await this.getRecoverCaptureDeviceId())}}async recapture(t,i=!1){var n;if(this._isRecapturing||!this.sourceTrack)return;this.log.warn("recapture trying");const c=this.sourceTrack;i||(n=this.sourceTrack)==null||n.stop(),this._isRecapturing=!0,this._lastRecaptureTime=Date.now();const I={useExactDeviceId:!0};if(t==="user"||t==="environment")I.facingMode=t;else{let C;(this.kind==="audio"?await kU():await Rv()).find(f=>f.deviceId===t)&&(C=t),I.deviceId=C}return this.capture(I,i).then(()=>{this._isRecapturing=!1,this.log.warn("recapture success"),this.emit("1",{deviceId:this.deviceId}),ms.emit(mn.LOCAL_TRACK_RECAPTURE,{track:this})}).catch(C=>{this._isRecapturing=!1,this.log.warn(`recapture failed ${C.message}`),this.emit("5",C),ms.emit(mn.LOCAL_TRACK_RECAPTURE,{track:this,error:C})}).finally(()=>{i&&c?.stop()})}async getRecoverCaptureDeviceId(){const t=this instanceof FV;if(t&&this.facingMode)return this.facingMode;let{deviceId:i}=this;if(i){const n=(HL.get(i)||0)+1;if(HL.set(i,n),n>=3&&this.enableAutoSwitchWhenRecapturing){const c=t?(await Rv()).find(I=>!HL.has(I.deviceId)):(await kU()).find(I=>!HL.has(I.deviceId));c&&(this.log.warn(`${i} capture fail ${n} times, change new ${c.deviceId}`),i=c.deviceId)}}return i}stopCapture(){var t;this.sourceTrack&&(this.sourceTrack.stop(),ms.emit(mn.LOCAL_TRACK_STOPPED,{track:this}),this.uninstallTrackEvent(this.sourceTrack)),this._inputTrack&&this.uninstallTrackEvent(this._inputTrack),(t=this.manager)==null||t.removeInput(this),this._onMuteTimeoutId&&clearTimeout(this._onMuteTimeoutId)}close(){super.close(),this.stopCapture()}};Cc([Su(Ar.INIT,"ready",{ignoreError:!0,sync:!0})],pv.prototype,"setStateToReady"),Cc([lEA()],pv.prototype,"capture"),Cc([Su("ready","publish",{ignoreError:!0,success(){ms.emit(mn.LOCAL_TRACK_PUBLISHED,{track:this,room:this.room}),this.emit("4",{mediaType:this.strMediaType,state:"started",prevState:"starting"}),this.log.info("published")},fail(t){var i;(i=this.room)==null||i.localTracks.delete(this);let n="error";const c=t instanceof fl?t:t.cause instanceof fl?t.cause:t;let I=!1;c instanceof fl&&(c.message.includes("timeout")?n="timeout":c.code===qg.API_CALL_ABORTED&&(I=!0,n="api-call")),this.emit("4",{mediaType:this.strMediaType,state:"stopped",prevState:"starting",reason:n,error:c}),this.log[I?"info":"error"]("publish failed",c)}}),H$(521714,!1)],pv.prototype,"publish"),Cc([UV(t=>async function(){const i=this.state==="publish"?"started":"starting";t.call(this),this.emit("4",{mediaType:this.strMediaType,state:"stopped",prevState:i,reason:"api-call"}),clearTimeout(this._encodeCheckTimeoutId)}),Su([],"ready",{sync:!0})],pv.prototype,"unpublish");var HL=new Map;ms.on(mn.SWITCH_DEVICE_SUCCESS,t=>{t.track.deviceId&&HL.delete(t.track.deviceId)});var kEA=class{constructor(t,i=!1){this.dataView=t,this.isSEI&&(i?this.addPreventionByte():this.removePreventionByte())}addPreventionByte(){const{seiPayloadStartIndex:t}=this,i=this.dataView.byteLength-2,n=[];let c=0;for(let C=t;C<=i;C++){const f=this.dataView.getInt8(C);switch(f){case 0:case 1:case 2:case 3:c===2&&(n.push(3),c=0),f===0?c+=1:c=0,n.push(f);break;default:c=0,n.push(f)}}n.push(this.dataView.getInt8(this.dataView.byteLength-1));const I=new DataView(new Uint8Array([...new Uint8Array(this.dataView.buffer).slice(0,t),...n]).buffer);this.dataView=I}removePreventionByte(){const{seiPayloadStartIndex:t}=this,i=this.dataView.byteLength-1,n=[];let c=0;for(let C=t;C<=i;C++)switch(this.dataView.getInt8(C)){case 0:c++,n.push(this.dataView.getInt8(C));break;case 3:c!==2&&n.push(this.dataView.getInt8(C)),c=0;break;default:n.push(this.dataView.getInt8(C)),c=0}const I=new DataView(new Uint8Array([...new Uint8Array(this.dataView.buffer).slice(0,t),...n]).buffer);this.dataView=I}get seiPayloadStartIndex(){let t=6;for(let i=6;i=this.dataView.byteLength?0:31&this.dataView.getUint8(t)}getStartCodeLength(){return this.dataView.byteLength>=4&&this.dataView.getUint8(0)===0&&this.dataView.getUint8(1)===0&&this.dataView.getUint8(2)===0&&this.dataView.getUint8(3)===1?4:this.dataView.byteLength>=3&&this.dataView.getUint8(0)===0&&this.dataView.getUint8(1)===0&&this.dataView.getUint8(2)===1?3:0}get isIDR(){return this.naluType===5}get isSPS(){return this.naluType===7}get isPPS(){return this.naluType===8}get isSEI(){return this.naluType===6}},LEA=class{constructor(){Be(this,"_seiMessageList",[]),Be(this,"_smallSeiMessageList",[]),Be(this,"_seiPayloadType",243)}encodeSEINalu(t){const i=t.byteLength,n=parseInt(String(i/255),10),c=i%255,I=[];I.push(0,0,0,1,6,this._seiPayloadType);for(let f=0;f0&&t.data.byteLength>0){const c=9-this.getNaluCount(t.data);if(c<=0)return 0;const I=n.splice(0,c).reverse().map(this.encodeSEINalu.bind(this)),C=I.reduce((L,q)=>L+q.dataView.byteLength,0),f=new ArrayBuffer(C+t.data.byteLength),w=new DataView(f),_=new DataView(t.data);let N=0;for(let L=0;L{var c;if(this.isAllowed2k4k(this.profile))this.room&&this.settings.height>=1440&&this.state==="publish"&&this.room.sendAbilityStatus({"2k4k":1});else{const I=FY(((c=this.room)==null?void 0:c.sdkAppId)||0)?wZ:RZ;this.log.warn(`Resolution is reset to 1080p, need to upgrade ability here ${I}`),this.setProfile(gB(Rn({},this.profile),{width:1920,height:1080})),this.applyProfile()}};this.on("input-media-track-changed",n),this.on("publish",n),this.handleCameraAdded=this.handleCameraAdded.bind(this),this.handleCameraRemoved=this.handleCameraRemoved.bind(this)}get facingMode(){if(qY&&this.mediaTrack)return this.mediaTrack.getSettings().facingMode}get contentHint(){var t;return((t=this._inputTrack)==null?void 0:t.contentHint)||""}get isQosClearFirst(){var t;return((t=this._inputTrack)==null?void 0:t.contentHint)==="detail"}get hasSmall(){var t;return!!((t=this.manager)!=null&&t.hasSmall)}async setMute(t){var i,n,c;if(rh(t)){if(this.muteImage===t)return;await((i=this.manager)==null?void 0:i.deleteWatermark("mute")),await((n=this.manager)==null?void 0:n.setWatermark({x:0,y:0,width:this.settings.width,height:this.settings.height,type:"mute",zIndex:999,imageUrl:t,fillVideo:!0})),this.muteImage=t,super.setMute(!1)}else this.muteImage&&(await((c=this.manager)==null?void 0:c.deleteWatermark("mute")),this.muteImage=void 0),super.setMute(t)}async capture({deviceId:t,facingMode:i,useExactDeviceId:n=!0,customSource:c,retryWhenExactFailed:I=!0}){const C={audio:!1,video:!0,facingMode:i||this.facingMode,cameraId:t,width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate,useExactDeviceId:n,retryWhenExactFailed:I,customSource:c};if(C.facingMode==="environment"){const f=await this.getDeviceIdWhenUsingBackCamera();f&&(C.cameraId=f)}return super.capture(C)}setProfile(t){var i;const n=this.fallbackProfile(t);if(n.bitrate&&(this.isNeedToSetBandwidth=n.bitrate!==this.profile.bitrate),this.isAllowed2k4k(this.profile))super.setProfile(n);else{const c=FY(((i=this.room)==null?void 0:i.sdkAppId)||0)?wZ:RZ;this.log.warn(`Resolution is reset to 1080p, need to upgrade ability here ${c}`),super.setProfile(gB(Rn({},this.profile),{width:1920,height:1080}))}}async applyProfile(){var t,i;if(!this.mediaTrack)return;const{width:n=0,height:c=0}=(this.sourceTrack||this.mediaTrack).getSettings(),I=n*c,C=this.settings,f=C.height!==this.profile.height||C.width!==this.profile.width||C.frameRate!==this.profile.frameRate;if(f&&(Uv===16&&this.deviceId?await this.recapture(this.deviceId):(p4(this.outMediaTrack)?await((t=this.outMediaTrack)==null?void 0:t.applyConstraints({width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate})):await((i=this.sourceTrack||this.mediaTrack)==null?void 0:i.applyConstraints({width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate})),this.manager&&this.manager.changeInput(this)),this.room&&this.settings.height>=1440&&this.state==="publish"&&this.room.sendAbilityStatus({"2k4k":1})),this.isNeedToSetBandwidth&&this.room&&this.room.setBandWidth){this.isNeedToSetBandwidth=!1;const{width:w=0,height:_=0}=(this.sourceTrack||this.mediaTrack).getSettings(),N=w*_;return f&&N&&I&&N===I?void this.log.warn("set bandwidth failed: resolution is not changed"):this.room.setBandWidth({bandwidth:this.profile.bitrate,type:ei.VIDEO,videoType:ei.BIG})}}get settings(){const t={width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate},i=this.sourceTrack||this.mediaTrack;return qY&&i&&Object.assign(t,i.getSettings()),t}get scaleResolutionDownBy(){return this._scaleResolutionDownBy?this._scaleResolutionDownBy:_7(this.settings,this.profile)}isAllowed2k4k(t){var i;return!this.room||!this.room.scheduleResult||!!this.isScreen||t.height*t.width<3686400||((i=this.room.scheduleResult.trtcAutoConf)==null?void 0:i["2k4k"])===1}isNeedToSwitchDevice(t){return!(!this.mediaTrack||this.deviceId===t||this.facingMode===t)}async switchDevice(t){try{if(!this.isNeedToSwitchDevice(t)&&!this.isUseCustomSource)return;const i={useExactDeviceId:!0,retryWhenExactFailed:!1};t==="user"||t==="environment"?i.facingMode=t:i.deviceId=t,this.sourceTrack&&this.sourceTrack.stop(),await this.capture(i),ms.emit(mn.SWITCH_DEVICE_SUCCESS,{track:this}),this.log.info("switch camera success")}catch(i){throw this.log.error(`switch camera failed ${i}`),this.deviceId&&this.recapture(this.deviceId),i}}async getDeviceIdWhenUsingBackCamera(){let t;try{if(A$&&!N4&&T$){const i=(await Rv(!0)).map(c=>{var I;return gB(Rn({},c),{capabilities:(I=c.getCapabilities)==null?void 0:I.call(c)})}).filter(c=>{var I,C;return(C=(I=c.capabilities)==null?void 0:I.facingMode)==null?void 0:C.includes("environment")});let n=i[0];i.forEach(c=>{var I,C,f,w;const{capabilities:_}=c;((I=_.width)!=null&&I.max&&((C=_.height)!=null&&C.max)?_.width.max*_.height.max:0)>((f=n.capabilities.width)!=null&&f.max&&((w=n.capabilities.height)!=null&&w.max)?n.capabilities.width.max*n.capabilities.height.max:0)&&(n=c)}),n?.capabilities&&(this._log.info("use max resolution back camera",n),t=n.deviceId)}}catch(i){this._log.warn("get max res camera failed",i)}return t}async updateSmallConfig(t){var i,n;this._log.info(`update small stream config: ${JSON.stringify(t)}`);const c=!this.small;this.small=this.fallbackProfile(t,!0),await((i=this.manager)==null?void 0:i.update()),c&&await((n=this.room)==null?void 0:n.enableSmall(!0)),this.log.info("update small stream config success")}fallbackProfile(t,i=!1){const n=t.width>t.height,c=Rn({},t);return t.width*t.height<=19200&&cC&&sD&&(this.log.warn(`${i?"small ":""}resolution is ${t.width}*${t.height}, fallback to 240*180 for android chrome`),c.width=n?240:180,c.height=n?180:240,c.bitrate=Math.max(t.bitrate,150)),t.width*t.height>921600&&RIA&&(c.width=n?1280:720,c.height=n?720:1280,this.log.warn("reset to 1280 * 720 on iOS 13~14")),MIA(wQ,"14.3")&&a$(wQ,"14.0",!0)&&this.on("7",()=>{const I=this.profile.width>this.profile.height;this.profile.width*this.profile.height>307200?(this.profile.width=I?640:480,this.profile.height=I?480:640,this.log.warn("reduce the resolution to 480p on iOS 14.0 ~ 14.2")):this.profile.width*this.profile.height>230400&&(this.profile.width=I?640:360,this.profile.height=I?360:640,this.log.warn("reduce the resolution to 360p on iOS 14.0 ~ 14.2"))}),!i&&this.avoidCropping&&(sD||rC)&&!TIA()&&t.width*t.height<=230400&&t.width/t.height===16/9&&(this._scaleResolutionDownBy=1280/t.width,c.width=1280,c.height=720,this.log.warn(`capture 720p, scale: ${this._scaleResolutionDownBy}`)),c}stopSmall(){var t,i;this.small&&(delete this.small,(t=this.manager)==null||t.update(),(i=this.room)==null||i.enableSmall(!1))}listenDeviceChange(){DQ&&!DQ.listeners("videoInputRemoved").includes(this.handleCameraRemoved)&&DQ.on("videoInputRemoved",this.handleCameraRemoved,this)}async handleCameraRemoved(t){if(t.deviceId===this.deviceId){let i=this.recaptureMode===1;if(this.log.warn(`RecaptureMode: ${$$[this.recaptureMode]}. Current camera is lost: ${JSON.stringify(t)}`),this.recaptureMode===0){Ec(this.userId,{eventId:2003,param1:7,streamType:2});const n=await Rv();n[0]?this.recapture(n[0].deviceId):i=!0}i&&DQ.on("videoInputAdded",this.handleCameraAdded,this)}}async handleCameraAdded(t){this.recaptureMode===1&&t.deviceId!==this.deviceId||(DQ.off("videoInputAdded",this.handleCameraAdded,this),this.log.warn(`camera added: ${JSON.stringify(t)}`),this.recapture(t.deviceId))}encodeFrame(t,i){if(!this.manager)return t;const n=i?8:this.mediaType;return this.manager.encodePipeline.reduceRight((c,I)=>I?I({frame:c,mediaType:n}):c,t)}get enableEncodeFrame(){return!!this.manager&&this.manager.encodePipeline.some(t=>t)}play(t,i){return er(this.mirror)&&!this.isScreen&&this.setMirror("view"),super.play(t,i)}close(){DQ.off("videoInputAdded",this.handleCameraAdded,this),DQ.off("videoInputRemoved",this.handleCameraRemoved,this),super.close()}async recapture(t){try{await super.recapture(t)}catch(i){const n=(await Rv()).find(c=>c.deviceId!==t);if(!n)throw i;await super.recapture(n.deviceId)}}setContentHint(t){this.mediaTrack&&"contentHint"in this.mediaTrack&&(this.mediaTrack.contentHint!==t&&(this.log.info(`setContentHint ${t}`),this.mediaTrack.contentHint=t),this.outMediaTrack&&this.outMediaTrack.contentHint!==t&&(this.outMediaTrack.contentHint=t))}setRotation(t){this.manager&&(this.isScreen||er(t)||t!==this.rotation&&(this.rotation=t,this.manager.rotation=t))}};Cc([J$(function(t){this.setContentHint(t.contentHint||"motion")})],FV.prototype,"capture");var UEA=[-1,-1,1,-1,-1,1,1,1],FEA=[0,0,1,0,0,1,1,1],qL=class hW extends Ar{constructor(i,n){if(super(),this.context=i,Be(this,"name"),Be(this,"input"),Be(this,"output"),Be(this,"texture"),Be(this,"ctx2d",null),Be(this,"fbo"),Be(this,"width",0),Be(this,"height",0),Be(this,"x",0),Be(this,"y",0),Be(this,"program"),Be(this,"vertexShader"),Be(this,"fragmentShader"),Be(this,"totalFrames",0),Be(this,"dropFrames",0),Be(this,"matchInputSize",!0),Be(this,"texCoordBuffer"),Be(this,"positionBuffer"),Be(this,"lastInfo",{name:"",timestamp:0,totalFrames:0,x:0,y:0,width:0,height:0,fps:0}),Be(this,"cost",0),Be(this,"_canvas",null),Be(this,"_image"),Be(this,"log"),this.context.on("disconnect",this.close,this),this.name=n.name,this.log=n.logger,this.matchInputSize=n.matchInputSize!==!1,this.width=n.width||i.width,this.height=n.height||i.height,this._image=n.image,i instanceof UU)i.ctx&&n.create2d&&(typeof OffscreenCanvas=="function"&&Uv!==16?this._canvas=new OffscreenCanvas(this.width,this.height):(this._canvas=document.createElement("canvas"),this._canvas.width=this.width,this._canvas.height=this.height),this.ctx2d=this._canvas.getContext("2d"),this._image=this._canvas);else try{const c=i.ctx;this.texCoordBuffer=this.createBuffer(FEA),this.positionBuffer=this.createBuffer(UEA),n.createTexture!==!1&&(this.texture=c.createTexture(),this.useTexture(),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.LINEAR),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.LINEAR),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),c.pixelStorei(c.UNPACK_ALIGNMENT,1)),n.useFbo&&(this.fbo=c.createFramebuffer(),this.useBufferFrame(),this.useTexture(),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,this.width,this.height,0,c.RGBA,c.UNSIGNED_BYTE,null),c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,this.texture,0)),n.useDefaultProgram?this.program=i.defaultProgam:(n.vertexShaderSource||n.fragmentShaderSource)&&(this.vertexShader=n.vertexShaderSource?i.createShader(c.VERTEX_SHADER,n.vertexShaderSource):i.defaultVShader,this.fragmentShader=n.fragmentShaderSource?i.createShader(c.FRAGMENT_SHADER,n.fragmentShaderSource):i.defaultFShader,this.program=i.createProgram(this.vertexShader,this.fragmentShader))}catch(c){this.context.destroy(new fl({code:qg.VIDEO_MANAGER_ERROR,extraCode:3,message:`create video node ${this.name} error ${c.message||c}`}))}}get image(){return this._image}set image(i){this._image=i}createFramebuffer(i){const n=this.context.ctx,c=n.createFramebuffer();return n.bindFramebuffer(n.FRAMEBUFFER,c),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,i,0),c}connect(i,...n){return i.addInput(this,...n),this.output=i,i}addInput(i,...n){this.input=i,this.matchInputSize&&i.width&&i.height&&this.resize(i.width,i.height)}requestFrame(i){const n=Date.now();return!!(this.context instanceof BW&&this.render(i)||this.context instanceof UU&&this.render2d(i))&&(this.totalFrames++,this.cost=Date.now()-n,!0)}render2d(i){var n;return!!((n=this.input)!=null&&n.requestFrame(i))&&this.draw2d(this.input.image,0,0,this.width,this.height)}update(i=0){var n;(n=this.output)==null||n.update(i)}disconnect(...i){var n;(n=this.output)==null||n.removeInput(this,...i),delete this.output}removeInput(i,...n){delete this.input}close(){var i,n;if(this.context.off("disconnect",this.close,this),(i=this.output)==null||i.removeInput(this),delete this.output,(n=this.input)==null||n.disconnect(),this.context instanceof BW){const c=this.context.ctx;c.deleteBuffer(this.texCoordBuffer),c.deleteBuffer(this.positionBuffer),this.fbo&&c.deleteFramebuffer(this.fbo),this.texture&&c.deleteTexture(this.texture),this.vertexShader&&this.vertexShader!==this.context.defaultVShader&&c.deleteShader(this.vertexShader),this.fragmentShader&&this.fragmentShader!==this.context.defaultFShader&&c.deleteShader(this.fragmentShader),this.program&&this.program!==this.context.defaultProgam&&c.deleteProgram(this.program)}this._canvas&&(this._canvas.width=0,this._canvas.height=0,this.ctx2d=null),this.removeAllListeners()}useTexture(){this.useTextures(this.texture)}useInputTexture(){var i;this.useTextures((i=this.input)==null?void 0:i.texture)}useTextures(...i){const n=this.context.ctx;i.forEach((c,I)=>{c&&(n.activeTexture(n.TEXTURE0+I),n.bindTexture(n.TEXTURE_2D,c))})}useProgram(){this.context.ctx.useProgram(this.program)}useBufferFrame(){const i=this.context.ctx;i.bindFramebuffer(i.FRAMEBUFFER,this.fbo||null)}createBuffer(i){const n=this.context.ctx,c=n.createBuffer();return n.bindBuffer(n.ARRAY_BUFFER,c),n.bufferData(n.ARRAY_BUFFER,new Float32Array(i),n.STATIC_DRAW),c}setTexBuffer(i){const n=this.context.ctx;n.bindBuffer(n.ARRAY_BUFFER,this.texCoordBuffer),n.bufferData(n.ARRAY_BUFFER,new Float32Array(i),n.STATIC_DRAW)}setPosBuffer(i){const n=this.context.ctx;n.bindBuffer(n.ARRAY_BUFFER,this.positionBuffer),n.bufferData(n.ARRAY_BUFFER,new Float32Array(i),n.STATIC_DRAW)}changeBufferData(i,n){const c=this.context.ctx;c.bindBuffer(c.ARRAY_BUFFER,i),c.bufferData(c.ARRAY_BUFFER,new Float32Array(n),c.STATIC_DRAW)}setAttributes(...i){const n=this.context.ctx;i.forEach((c,I)=>{n.enableVertexAttribArray(I),n.bindBuffer(n.ARRAY_BUFFER,c),n.vertexAttribPointer(I,2,n.FLOAT,!1,0,0)})}getVertexPoint(i,n){return[i/this.width*2-1,n/this.height*2-1]}layout2texCoords(i){return[...this.getVertexPoint(i.x,i.y),...this.getVertexPoint(i.x+i.width,i.y),...this.getVertexPoint(i.x,i.y+i.height),...this.getVertexPoint(i.x+i.width,i.y+i.height)]}resize(i,n){if(this.width!==i||this.height!==n){if(this.width=i,this.height=n,this._canvas&&(this._canvas.width=i,this._canvas.height=n),this.texture&&this.fbo){this.useTexture();const c=this.context.ctx;c.texImage2D(c.TEXTURE_2D,0,c.RGBA,i,n,0,c.RGBA,c.UNSIGNED_BYTE,null)}this.output&&this.output.matchInputSize&&this.output.resize(i,n)}}draw(i,n){this.setAttributes(i||this.positionBuffer,n||this.texCoordBuffer);const c=this.context.ctx;c.drawArrays(c.TRIANGLE_STRIP,0,4)}draw2d(i,n,c,I,C,f,w,_,N){const L=!(er(f)||er(w)||er(_)||er(N));return!(!this.ctx2d||!i)&&(i instanceof ImageData?(L?this.ctx2d.putImageData(i,n,c,f,w,_,N):this.ctx2d.putImageData(i,n,c),this.emit(hW.RENDER,this.ctx2d.canvas)):(L?this.ctx2d.drawImage(i,f,w,_,N,n,c,I,C):this.ctx2d.drawImage(i,n,c,I,C),this.emit(hW.RENDER,i)),typeof VideoFrame<"u"&&i instanceof VideoFrame&&i.close(),!0)}drawBackGround2d(i){this.ctx2d&&(this.ctx2d.save(),this.ctx2d.fillStyle=i,this.ctx2d.fillRect(0,0,this.width,this.height),this.ctx2d.restore())}getInfo(){var i;const{totalFrames:n,x:c,y:I,width:C,height:f,name:w,cost:_}=this,N=Date.now(),L=(n-this.lastInfo.totalFrames)/((N-this.lastInfo.timestamp)/1e3)|0;return this.lastInfo={totalFrames:n,x:c,y:I,width:C,height:f,timestamp:N,fps:L,name:w,cost:_},Rn({parent:(i=this.input)==null?void 0:i.getInfo()},this.lastInfo)}createTexture(i){const n=this.context.ctx,c=n.createTexture();return this.useTextures(c),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.pixelStorei(n.UNPACK_ALIGNMENT,1),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,i),c}};Be(qL,"RENDER","render"),Cc([Su(Ar.INIT,"connected",{sync:!0})],qL.prototype,"connect"),Cc([Su("connected",Ar.INIT,{ignoreError:!0,sync:!0})],qL.prototype,"disconnect"),Cc([Su([],"closed",{sync:!0})],qL.prototype,"close");var WY=qL,OEA=ih(mEA(250),W$(()=>performance.now()),q$()),PEA=t=>i=>{const n=performance.now();ih(OEA,wEA(c=>c-n{if(t!==this.context.frameRate&&(MQ.clearTask(this._intervalId),this.start(this.context.frameRate)),this.requestFrame(this._sequence++),this.checkGLError&&this.context instanceof BW){const i=this.context.ctx.getError();i&&this.context.destroy(new fl({code:qg.VIDEO_MANAGER_ERROR,extraCode:5,message:`${this.name} req ${this._sequence} render ${this.totalFrames} faild ${i}`}))}},{fps:this.context.frameRate})}render(t){var i;return!!((i=this.input)!=null&&i.requestFrame(t))&&(this.useProgram(),this.useBufferFrame(),this.useInputTexture(),this.draw(),this.emit(WY.RENDER,this.context._canvas),!0)}addInput(t,...i){super.addInput(t,...i),this.start(this.context.frameRate)}update(t=0){this.state!=="closed"&&(this._intervalId&&(MQ.clearTask(this._intervalId),this._intervalId=0,t===1&&(this.log.info(`${this.name} use requestVideoFrameCallback`),this.checkVisibilityChange=()=>{document.hidden&&(this.start(this.context.frameRate),this.log.info(`${this.name} use timer`),document.removeEventListener("visibilitychange",this.checkVisibilityChange))},document.addEventListener("visibilitychange",this.checkVisibilityChange))),this.requestFrame(this._sequence++))}removeInput(t){super.removeInput(t),MQ.clearTask(this._intervalId)}resize(t,i){super.resize(t,i),this.context.setSize(t,i)}close(){super.close(),MQ.clearTask(this._intervalId),document.removeEventListener("visibilitychange",this.checkVisibilityChange)}},VEA=class extends YEA{constructor(t,i){super(t,i),Be(this,"_videoTrack"),Be(this,"_muteOb"),Be(this,"_closedOb",yE(this,"closed")),Be(this,"_subscription"),Be(this,"_canvasContainer"),Number(AF)<17&&(this._canvasContainer=document.createElement("div"),this._canvasContainer.style.display="none"),[this._videoTrack]=t.canvas.captureStream().getVideoTracks(),this._muteOb=yE(this._videoTrack,"mute"),ih(yE(this._videoTrack,"ended"),ET(this._closedOb),Fv(()=>{this.context.destroy(new fl({code:qg.VIDEO_MANAGER_ERROR,extraCode:8,message:"video track ended"}))}))}enableCheckMute(){this._subscription=ih(this._muteOb,ET(this._closedOb),X$(PEA(5e3)),tT(()=>{var t;return!!((t=this._videoTrack)!=null&&t.muted)&&!document.hidden}),Fv(()=>{this.context.destroy(new fl({code:qg.VIDEO_MANAGER_ERROR,extraCode:7,message:"video track muted"}))}))}disableCheckMute(){var t;(t=this._subscription)==null||t.dispose()}get videoTrack(){return this._videoTrack}putCanvasIntoDom(){this.context._canvas&&this._canvasContainer&&(document.getElementById(this.context._canvas.id)||(this.log.info(`${this.name} put canvas to body`),document.body.appendChild(this._canvasContainer),this._canvasContainer.appendChild(this.context._canvas)))}render(t){return this.putCanvasIntoDom(),super.render(t)}render2d(t){return this.putCanvasIntoDom(),super.render2d(t)}close(){var t,i;super.close(),(t=this._videoTrack)==null||t.stop(),delete this._videoTrack,(i=this._canvasContainer)==null||i.remove()}},AAA=class extends WY{constructor(t,i){super(t,Rn({name:"imageSource"},i)),Be(this,"_lastImage"),Be(this,"_totalFrames",0),Be(this,"_autoResize",!1),Be(this,"_canvasRendered"),Be(this,"videoCallbackId",0),Be(this,"waitingFirstFrame",!0),Be(this,"shouldUpdate",!0),this._autoResize=i?.autoResize!==!1,Uv===16&&(this._canvasRendered=j$(),ih(this._canvasRendered,pEA(this._image),GEA(n=>n instanceof HTMLCanvasElement?yE(n,"rendered"):yEA()),ET(yE(this,"closed")),Fv(()=>{this.update()})))}onFirstFrame(){this.waitingFirstFrame=!1}tryVideoFrameCallback(){if(!this.shouldUpdate)return;const t=this.image;this.videoCallbackId&&t.cancelVideoFrameCallback(this.videoCallbackId),x4()&&!document.hidden&&(this.videoCallbackId=t.requestVideoFrameCallback((i,n)=>{this.waitingFirstFrame&&this.onFirstFrame(),document.hidden||(this._totalFrames=n.presentedFrames,this.update(1))}))}_render(t,i){var n;let{width:c,height:I}=this;const{image:C}=this;if(C instanceof HTMLVideoElement){if(this.tryVideoFrameCallback(),{videoWidth:c,videoHeight:I}=C,!c||!I)return!1;C.width=c,C.height=I}else if(C instanceof HTMLImageElement||C instanceof ImageData||C instanceof ImageBitmap){if({width:c,height:I}=C,C!==this._lastImage)this._lastImage=C;else if(c===this.width&&I===this.height)return!0}else C instanceof HTMLCanvasElement||C instanceof OffscreenCanvas?({width:c,height:I}=C,this._lastImage=C):typeof VideoFrame<"u"&&C instanceof VideoFrame&&({displayWidth:c,displayHeight:I}=C,(n=this._lastImage)==null||n.close(),this._lastImage=C);if(!this._autoResize)return!0;if(this.width===c&&this.height===I&&this.totalFrames){if(i){this.useTexture();const f=this.context.ctx;f.texSubImage2D(f.TEXTURE_2D,0,0,0,f.RGBA,f.UNSIGNED_BYTE,C)}}else{if(i){this.useTexture();const f=this.context.ctx;f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,C)}this.resize(c,I)}return!0}get image(){return this._image}set image(t){var i;(i=this._canvasRendered)==null||i.next(t),this._image=t}render(t){return this._render(t,!0)}render2d(t){return this._render(t,!1)}},eAA=class extends AAA{constructor(t,i,n){super(t,n),this._player=i,this.name="videoPlayerSource",ih(yE(this._player,Jn.PLAYER_STATE_CHANGED),ET(yE(this,"closed")),tT(({state:c})=>c==="PLAYING"),Fv(()=>{this.tryVideoFrameCallback()}))}get image(){return this._player.element}},JEA=class extends eAA{get available(){return this._player.isPlaying&&!this.waitingFirstFrame}constructor(t,i,n){super(t,new Yy({id:n.name,track:i,muted:!0,container:null,objectFit:"contain",log:n.logger}),n),this.name="videoTrackSource",this._player.play()}replaceTrack(t){this.waitingFirstFrame=!0,this._player.setTrack(t),this._player.play()}close(){super.close(),this._player.stop()}},HEA=class extends WY{constructor(t,i,n){super(t,gB(Rn({name:"textSource"},n),{create2d:!0})),Be(this,"hasChange",!0),Be(this,"content",""),this.ctx2d.textBaseline="top",this.content=i.content||"",i.font&&(this.font=i.font),i.color&&(this.color=i.color)}set font(t){this.ctx2d&&(this.ctx2d.font=t,this.hasChange=!0)}get font(){var t;return((t=this.ctx2d)==null?void 0:t.font)||""}set color(t){this.ctx2d&&(this.ctx2d.fillStyle=t,this.hasChange=!0)}get color(){var t;return((t=this.ctx2d)==null?void 0:t.fillStyle)||""}render2d(t){return!(!this.ctx2d||!this.hasChange)&&(this.ctx2d.clearRect(0,0,this.width,this.height),this.drawMultilineText(0,0),this.hasChange=!1,!0)}render(t){return!1}resize(t,i){if(!this.ctx2d)return;const{color:n,font:c}=this;super.resize(t,i),this.color=n,this.font=c}drawMultilineText(t=0,i=0,n=1.2){if(!this.ctx2d)return;const c=this.ctx2d.measureText(this.content);i+=c.fontBoundingBoxAscent||c.actualBoundingBoxAscent||0;const I=this.font.match(/(\d+)px/),C=(I?parseInt(I[1],10):16)*n,f=this.content.split(` +`);for(let w=0;w{this.destroy(new ml({code:qg.VIDEO_MANAGER_ERROR,extraCode:4,message:"webgl context lost"}))})}destroy(t){let i="";return t&&(i=t.message,this.error=t,Ir.addFailedEvent({key:512702,error:t})),this.disconnect(),this.log.info(`video context destroy${i}`?`: ${i}`:""),this.ctx&&(this.ctx.deleteShader(this.defaultVShader),this.ctx.deleteShader(this.defaultFShader),this.ctx.deleteProgram(this.defaultProgam),delete this.ctx),t}set width(t){var i;(i=this.ctx)==null||i.viewport(0,0,t,this.height),super.width=t,this._canvas2d&&(this._canvas2d.width=t)}set height(t){var i;(i=this.ctx)==null||i.viewport(0,0,this.width,t),super.height=t,this._canvas2d&&(this._canvas2d.height=t)}setSize(t,i){var r;(r=this.ctx)==null||r.viewport(0,0,t,i),super.setSize(t,i),this._canvas2d&&(this._canvas2d.width=t,this._canvas2d.height=i)}createShader(t,i){const r=this.ctx,l=r.createShader(t);return r.shaderSource(l,i),r.compileShader(l),l}createProgram(t,i){const r=this.ctx,l=r.createProgram();return r.attachShader(l,t),r.attachShader(l,i),r.linkProgram(l),r.getProgramParameter(l,r.LINK_STATUS)||this.log.error(r.getProgramInfoLog(l)),l}};de(xL,"UNAVAILABLE","unavailable"),Cc([Du(Xn.INIT,"created",{sync:!0,fail(t){this.log.error("video gl context create failed",t.cause),Ir.addFailedEvent({key:512700,error:t.cause||t})},success(){this.log.info("video context created use webgl"),Ir.addSuccessEvent({key:512700})}})],xL.prototype,"create"),Cc([Du("created",Xn.INIT,{ignoreError:!0,sync:!0,success(t){t&&this.emit(xL.UNAVAILABLE,t),this.removeAllListeners()}})],xL.prototype,"destroy");var tW=xL,RU=class extends vU{constructor(){super(...arguments),de(this,"ctx")}create(t){if(this.hasAlpha=t.alpha,this._canvas=document.createElement("canvas"),this._canvas.id=`trtc_${this.name}_${vU._ids++}`,this.ctx=this._canvas.getContext("2d",{alpha:t.alpha,willReadFrequently:t.willReadFrequently}),!this.ctx)throw new ml({code:qg.VIDEO_MANAGER_ERROR,extraCode:2,message:"2d context not supported"});this._canvas.addEventListener("contextlost",()=>{this.log.error("2d context lost")}),this._canvas.addEventListener("contextrestored",()=>{this.log.warn("2d context restored")})}destroy(t){let i="";t&&(i=t.message,this.error=t,Ir.addFailedEvent({key:512703,error:t})),this.disconnect(),this.log.info("video context destroy "+(i?`: ${i}`:"")),delete this.ctx,this._canvas&&(this._canvas.remove(),this._canvas.width=0,this._canvas.height=0,delete this._canvas),this.removeAllListeners(),Ir.addSuccessEvent({key:512703})}};Cc([Du(Xn.INIT,"created",{sync:!0,fail(t){this.log.error("video 2d context create failed",t.cause),Ir.addFailedEvent({key:512701,error:t.cause||t})},success(){this.log.info("video context created use 2d"),Ir.addSuccessEvent({key:512701})}})],RU.prototype,"create"),Cc([Du("created",Xn.INIT,{ignoreError:!0,sync:!0})],RU.prototype,"destroy");var v4=q7();if(typeof navigator<"u"&&navigator.mediaDevices&&"setCaptureHandleConfig"in navigator.mediaDevices)try{navigator.mediaDevices.setCaptureHandleConfig({handle:v4,exposeOrigin:!0,permittedOrigins:["*"]})}catch{}var BEA=async function(t){let i=null;const r=mEA(t);Wo.info(`getDisplayMedia with constraints: ${JSON.stringify(r)}`);const l=await navigator.mediaDevices.getDisplayMedia(r);t.systemAudio&&l.getAudioTracks().length===0&&(I4&&iD<74||ld||sC)&&Wo.warn("Your browser not support capture system audio");const I=l.getVideoTracks()[0];if(I){if(t.frameRate)try{await I.applyConstraints({frameRate:{min:t.frameRate,ideal:t.frameRate},width:t.width,height:t.height})}catch(h){Wo.warn(`screen applyConstraints failed: ${h}`)}t.captureElement&&await QEA(I,t.captureElement)}if(t.audio){const h=pEA(t);Wo.info(`getUserMedia with constraints: ${JSON.stringify(h)}`),i=await navigator.mediaDevices.getUserMedia(h),l.addTrack(i.getAudioTracks()[0])}return l};async function QEA(t,i){var r;if("CropTarget"in window&&"fromElement"in CropTarget&&mv(t.cropTo))try{if(((r=t.getCaptureHandle())==null?void 0:r.handle)!==v4)return;const l=await CropTarget.fromElement(i);await t.cropTo(l)}catch(l){Wo.warn(`cropTo target failed ${l}`)}}function pEA(t){const i={echoCancellation:t.echoCancellation,autoGainControl:t.autoGainControl,noiseSuppression:t.noiseSuppression,sampleRate:t.sampleRate,channelCount:t.channelCount};return $n(t.microphoneId)||(i.deviceId=t.microphoneId),{audio:i,video:!1}}function mEA(t){const i={preferCurrentTab:t.preferDisplaySurface==="current-tab"||!!t.captureElement,systemAudio:"include",selfBrowserSurface:"include",surfaceSwitching:"include"},r={width:ld?{max:t.width}:{ideal:t.width,max:t.width},height:ld?{max:t.height}:{ideal:t.height,max:t.height},frameRate:t.frameRate,displaySurface:t.preferDisplaySurface||"monitor"};if(i.video=r,t.systemAudio){const{echoCancellation:l=!0,noiseSuppression:I=!1,autoGainControl:h=!1}=t;i.audio={echoCancellation:l,noiseSuppression:I,autoGainControl:h,sampleRate:48e3}}return i}var fEA=BEA,yEA=class extends DV{constructor(t){super(t,2),de(this,"profile",{width:1920,height:1080,frameRate:5,bitrate:1600}),de(this,"objectFit","contain"),de(this,"isScreen",!0),this._log.id=`s-${this._log.id}`}get isShareCurrentTab(){var t,i;try{return v4===((i=(t=this.mediaTrack)==null?void 0:t.getCaptureHandle())==null?void 0:i.handle)}catch{return}}async capture({systemAudio:t=!1,autoGainControl:i,echoCancellation:r,noiseSuppression:l,audioTrack:I,videoTrack:h,captureElement:f,preferDisplaySurface:w}){var _;try{const G=Yc();let U;return h||I?(U=new MediaStream,h&&U.addTrack(h),I&&U.addTrack(I)):(U=await fEA({audio:!1,systemAudio:t,width:this.profile.width,height:this.profile.height,frameRate:this.profile.frameRate,autoGainControl:i,echoCancellation:r,noiseSuppression:l,captureElement:f,preferDisplaySurface:w}),this.sourceTrack=U.getVideoTracks()[0]),await this.setInputMediaStreamTrack(U.getVideoTracks()[0]),ps.emit(mn.LOCAL_TRACK_CAPTURE_SUCCESS,{track:this,cost:Yc()-G,profile:this.profile,room:(_=this.manager)==null?void 0:_.room}),U}catch(G){throw this.log.error(`getDisplayMedia error observed ${G}`),G instanceof ml?G:new ml({code:qg.INITIALIZE_FAILED,name:G.name,message:G.message})}}async switchDevice(t){throw new Error("Method not implemented.")}};function DEA(t=30,i=2){return yV((r,l)=>function(...I){return new Promise((h,f)=>{const w=setTimeout(()=>{const _=new ml({code:qg.API_CALL_TIMEOUT,message:`checkPendingPromise ${l}() timeout ${t}s`});(this.log||this._log||Wo).warn(_),i===2?f(_):i===1&&h()},1e3*t);this._checkPendingPromiseSet||(this._checkPendingPromiseSet=new Set),this._checkPendingPromiseSet.add(w),r.apply(this,I).then(h,f).finally(()=>{clearTimeout(w),this._checkPendingPromiseSet&&w&&this._checkPendingPromiseSet.delete(w)})})})}Cc([m$(function(t){this.setContentHint(t.contentHint||"detail")})],yEA.prototype,"capture");var M_=class iW extends S4{constructor(i,r,l){super({userId:r.userId,sdkAppId:i.sdkAppId,mediaType:l,room:i}),this.room=i,this.user=r,de(this,"tinyId"),de(this,"isRemote",!0),de(this,"jitterBufferDelay",0),de(this,"availableState"),de(this,"remotePublishState"),de(this,"_triggerCheckDecodeSubject",S$(fE(this,iW.STATE_SUBSCRIBE))),de(this,"ignoreUpdatePlayingState"),this.tinyId=r.tinyId,this.availableState=new Xn(`${r.userId}-${this.mediaType}-available`,"remote-track-available"),this.remotePublishState=new Xn(`${r.userId}-${this.mediaType}-remote-publish`,"remote-track-publish"),$C(D$(fE(this,Xn.STATECHANGED),fE(this.remotePublishState,Xn.STATECHANGED)),M$(()=>this.isRemotePublished&&(this.isSubscribed||this.isSubscribing)),kv(w=>{this.availableState.state!==(w?Xn.ON:Xn.OFF)&&(this.availableState.state=w?Xn.ON:Xn.OFF),this.isRemotePublished&&this.ignoreUpdatePlayingState||this.updatePlayingState(w)}));const I=$C(fE(this.player,Vn.ERROR),$_(w=>w.code===MediaError.MEDIA_ERR_DECODE)),h=$C(quA(5e3),$_(()=>this.ignoreDecodeError||!this.isSubscribed||!this.isPlayCalled||!this.stat.bytesReceived||!this.isRemotePublished?!1:!(this.player.isPlaying||(this.kind===$t.AUDIO?this.getAudioLevel()>0:this.stat.framesDecoded>0))||(this.reportDecodeResult(!0),!1))),f=$C(VuA(I,h),gT(fE(this,Xn.INIT)));$C(this._triggerCheckDecodeSubject,$_(()=>!this.ignoreDecodeError),w$(f),kv(w=>{this.reportDecodeResult(!1,w)}))}setMute(i){this.isRemotePublished&&super.setMute(i)}setInputMediaStreamTrack(i){super.setInputMediaStreamTrack(i),this.isRemotePublished&&this.isSubscribed&&this.player.setTrack(this.outMediaTrack)}checkDecodeResult(){this._triggerCheckDecodeSubject.next(!0)}waitHasMediaTrack(){return new Promise(i=>{this.mediaTrack?i():this.once("input-media-track-changed",i)})}get ignoreDecodeError(){var i,r,l,I;return(I=(l=(r=(i=this.room)==null?void 0:i.networkQuality)==null?void 0:r.hadRecentBadDownlink)==null?void 0:l.call(r,2))!=null&&I||this.player.isInAutoPlayFailedState}get isSubscribing(){return this.state.toString()==="subscribeing"}get isSubscribed(){return this.state===iW.STATE_SUBSCRIBE}get isAvailable(){return this.availableState.state===Xn.ON}get isNeedPlay(){return this.isAvailable&&this.isPlayCalled}subscribe(i){return i}unsubscribe(){this.streamType==="main"&&this.kind==="video"&&this.room.changeType(!1,this.user)}reportDecodeResult(i,r){var l,I;const h=this.kind===$t.AUDIO;if(Ir[i?"addSuccessEvent":"addFailedEvent"]({key:h?504700:514702}),!h){const f=((l=this.room)==null?void 0:l.downlinkVideoCodec.toUpperCase())||"H264";Ir[i?"addSuccessEvent":"addFailedEvent"]({key:W7[`DECODE_${f}_RESULT`]}),i||this.log.warn(`${(I=this.room)==null?void 0:I.downlinkVideoCodec} decode failed`)}i||(Ir.addEnum({key:h?504701:514703,value:u4()}),oh.uploadEvent({log:`stat-decode-failed-${this.kind}-${P7()||Y7()}`,userId:this.room.userId}),this._log.warn(`decode failed: isPlaying: ${this.player.isPlaying} ${this.kind===$t.AUDIO?`audioLevel: ${this.getAudioLevel()}`:`framesDecoded: ${this.stat.framesDecoded>0}`}`),this.emit("decode-failed",{error:r}))}updatePlayingState(i){if(this.player.isPlayCalled&&this.player.setTrack(this.playerMediaTrack),this.isPlayCalled&&this.player.isStopped===i){if(i&&(!this.isSubscribed||!this.isRemotePublished||!this.outMediaTrack))return void this.log.info(`abort play, isSubscribed: ${this.isSubscribed} isAvailable: ${this.isRemotePublished} hasTrack: ${!!this.outMediaTrack} `);super.updatePlayingState(i)}}close(){super.close(),this.outMediaTrack&&this.uninstallTrackEvent(this.outMediaTrack)}onFlagChanged(){this.remotePublishState.state=this.isRemotePublished?Xn.ON:Xn.OFF,this.emit("remote-publish-changed",this.isRemotePublished)}onTrackMuted(){this.isNeedPlay&&super.onTrackMuted()}onTrackUnmuted(){this.isNeedPlay&&super.onTrackUnmuted()}onTrackEnded(){this.isNeedPlay&&super.onTrackEnded()}};de(M_,"STATE_SUBSCRIBE","subscribe"),Cc([DEA(5,1)],M_.prototype,"waitHasMediaTrack"),Cc([Du(Xn.INIT,M_.STATE_SUBSCRIBE,{success(){this.log.info("subscribed"),ps.emit(mn.REMOTE_TRACK_SUBSCRIBED,{track:this})},ignoreError:!0}),f$(521716,!1)],M_.prototype,"subscribe"),Cc([Du(M_.STATE_SUBSCRIBE,Xn.INIT,{sync:!0,success(){this.log.info("unsubscribed"),ps.emit(mn.REMOTE_TRACK_UNSUBSCRIBED,{track:this})}})],M_.prototype,"unsubscribe");var a3=new Map;function Ec(t,i){const r=nB(Rn({},i),{timestamp:jW()});a3.has(t)?a3.get(t).push(r):a3.set(t,[r])}ps.on(mn.JOIN_SUCCESS,({room:t})=>{Ec(t.userId,{eventId:32788})}),ps.on(mn.LEAVE_START,({room:t})=>{Ec(t.userId,{eventId:32789})}),ps.on(mn.LOCAL_TRACK_PUBLISHED,({track:t})=>{if(t.room){let i=32769;t.mediaType===4?i=32768:t.mediaType===2&&(i=32805),Ec(t.room.userId,{eventId:i})}}),ps.on(mn.LOCAL_TRACK_UNPUBLISHED,({track:t})=>{if(t.room){let i=32771;t.mediaType===4?i=32770:t.mediaType===2&&(i=32806),Ec(t.room.userId,{eventId:i})}}),ps.on(mn.TRACK_MUTED,({track:t})=>{t.room&&(t.kind===$t.AUDIO?Ec(t.room.userId,{eventId:t.isRemote?32785:32772,remoteUserId:t.isRemote?t.userId:void 0}):Ec(t.room.userId,{eventId:t.isRemote?32784:32773,remoteUserId:t.isRemote?t.userId:void 0}))}),ps.on(mn.TRACK_UNMUTED,({track:t})=>{t.room&&(t.kind===$t.AUDIO?Ec(t.room.userId,{eventId:t.isRemote?32787:32774,remoteUserId:t.isRemote?t.userId:void 0}):Ec(t.room.userId,{eventId:t.isRemote?32786:32775,remoteUserId:t.isRemote?t.userId:void 0}))}),ps.on(mn.REMOTE_TRACK_SUBSCRIBED,({track:t})=>{t.room&&(t.mediaType===1&&Ec(t.room.userId,{eventId:32777,remoteUserId:t.userId}),t.mediaType===4&&Ec(t.room.userId,{eventId:32776,remoteUserId:t.userId}),t.mediaType===8&&Ec(t.room.userId,{eventId:32803,remoteUserId:t.userId}))}),ps.on(mn.REMOTE_TRACK_UNSUBSCRIBED,({track:t})=>{t.room&&(t.mediaType===1&&Ec(t.room.userId,{eventId:32779,remoteUserId:t.userId}),t.mediaType===4&&Ec(t.room.userId,{eventId:32778,remoteUserId:t.userId}),t.mediaType===8&&Ec(t.room.userId,{eventId:32804,remoteUserId:t.userId}))}),ps.on(mn.SWITCH_DEVICE_SUCCESS,({track:t})=>{t.room&&Ec(t.room.userId,{eventId:t.kind===$t.VIDEO?32780:32781})}),ps.on(mn.LOCAL_TRACK_REPLACED,({track:t})=>{t.room&&Ec(t.room.userId,{eventId:t.kind===$t.VIDEO?32782:32783})}),ps.on(mn.SIGNAL_CONNECTION_STATE_CHANGED,({room:t,prevState:i,state:r})=>{let l;switch(r){case"CONNECTED":l=i==="RECONNECTING"?32795:32791;break;case"DISCONNECTED":l=i==="RECONNECTING"?32796:32790;break;case"RECONNECTING":l=32794}l&&Ec(t.userId,{eventId:l})}),ps.on(mn.PEER_CONNECTION_STATE_CHANGED,({room:t,prevState:i,state:r,remoteUserId:l})=>{const I=!!l;let h;switch(r){case"CONNECTED":h=i==="RECONNECTING"?I?32801:32798:I?32793:32792;break;case"DISCONNECTED":i==="RECONNECTING"&&(h=I?32802:32799);break;case"RECONNECTING":h=I?32800:32797}h&&Ec(t.userId,{eventId:h,remoteUserId:l})}),ps.on(mn.VIDEO_CODEC_IMPLEMENTATION_CHANGED,({implementation:t,userId:i,remoteUserId:r,codec:l,isHWCodec:I,prevImplementation:h,streamType:f})=>{let w=I?1:0;h||(w=I?3:2);const _={H264:0,H265:1,VP8:2}[l.toUpperCase()],G={eventId:4004,param1:w,param2:_,streamType:f||2};r&&(G.remoteUserId=r,G.eventId=4005),Ec(i,G),Ir.addEnum({key:r?514701:513701,value:w}),Ir.addEnum({key:r?514700:513700,value:_})}),ps.on(mn.LOCAL_TRACK_RECAPTURE,({track:t,error:i})=>{if(t.userId){const r={eventId:2003,param1:0};t.kind===$t.AUDIO?(r.streamType=1,i&&(r.param1=2)):(r.streamType=t.streamType==="auxiliary"?7:2,i&&(r.param1=8)),Ec(t.userId,r)}});dT(PU());dT(PU());var g3=0,G$=class b${constructor(i){this.core=i,de(this,"seq"),de(this,"log"),de(this,"localMixVideoTrack",null),de(this,"systemAudioTrackList",{}),de(this,"_mixVideoConfig"),de(this,"onScreenShareStop"),de(this,"eventListeners",new Map),g3+=1,this.seq=g3,this.log=i.log.createChild({id:`${this.getAlias()}${g3}`}),this.log.info("created")}getName(){return b$.Name}getAlias(){return"vmix"}getValidateRule(i){switch(i){case"start":return ScA(this.core);case"update":return McA(this.core);case"stop":return vcA(this.core)}}getGroup(){return"vmix"}async start(i){this.localMixVideoTrack||(this.localMixVideoTrack=new this.core.LocalMixVideoTrack(this.core.room.videoManager)),this._mixVideoConfig={canvasInfo:{width:1920,height:1080}},i=this.core.utils.deepCloneBasic(i);const{view:r,onScreenShareStop:l}=i,I=await this.parseMixOptions(i);return l&&(this.onScreenShareStop=l,this._mixVideoConfig.onScreenShareStop=l),this._updatePreview({view:r,track:this.localMixVideoTrack}),this.core.utils.isUndefined(r)||(this._mixVideoConfig.view=r),await this.localMixVideoTrack.startMix(),{track:this.localMixVideoTrack.outMediaTrack,systemAudioTrackList:this.systemAudioTrackList,result:I}}async update(i){const{RtcError:r,ErrorCode:l}=this.core.errorModule;if(!this.localMixVideoTrack)throw new r({code:l.INVALID_OPERATION,message:"mixTrack doesn't initialize!"});i=this.core.utils.deepCloneBasic(i);const{view:I}=i,h=await this.parseMixOptions(i);return await this._updatePreview({view:I,track:this.localMixVideoTrack,prevConfig:this._mixVideoConfig}),this.core.utils.isUndefined(I)||(this._mixVideoConfig.view=I),{track:this.localMixVideoTrack.outMediaTrack,systemAudioTrackList:this.systemAudioTrackList,result:h}}stop(){var i;this.eventListeners.forEach((r,l)=>{this.removeEventListeners(l)}),this.eventListeners.clear(),(i=this.localMixVideoTrack)==null||i.close(),this.localMixVideoTrack=null,Object.values(this.systemAudioTrackList).forEach(r=>r.stop()),this.systemAudioTrackList={},delete this.onScreenShareStop,delete this._mixVideoConfig}async parseMixOptions(i){const{RtcError:r,ErrorCode:l}=this.core.errorModule;if(!this.localMixVideoTrack||!this._mixVideoConfig)return{successOptions:{},failedDetails:[]};const I=[],h=Rn({},i),{canvasInfo:f,camera:w,screen:_,text:G,image:U,video:j}=i;f&&this.parseCanvasOptions(f);let lA=0,sA=0;const mA=[{key:"camera",options:w,parser:this.parseCameraOptions.bind(this)},{key:"screen",options:_,parser:this.parseScreenOptions.bind(this)},{key:"text",options:G,parser:this.parseTextOptions.bind(this)},{key:"image",options:U,parser:this.parseImageOptions.bind(this)},{key:"video",options:j,parser:this.parseVideoOptions.bind(this)}];for(const{key:IA,options:cA,parser:TA}of mA)if(cA){lA++;const WA=await TA(this.localMixVideoTrack,cA,this._mixVideoConfig[IA]||[]);this._mixVideoConfig[IA]=WA.finalOptions,h[IA]=WA.finalOptions,WA.errors.length>0&&(I.push(...WA.errors),WA.errors.length===cA.length&&sA++)}if(sA>0&&sA===lA)throw new r({code:l.INVALID_PARAMETER,message:"all sources mix failed",data:{failedDetails:I}});return{successOptions:h,failedDetails:I}}parseCanvasOptions(i){if(!this.localMixVideoTrack||!this._mixVideoConfig)return;const{canvasColor:r,width:l,height:I,frameRate:h}=i;r&&this.localMixVideoTrack.setMixBackground(r),h&&this.localMixVideoTrack.setFps(h),this.localMixVideoTrack.resizeMixCanvas(l,I),this._mixVideoConfig.canvasInfo=i}prepareSourceOptions(i,r){const l=new Set(i.map(I=>I.id));return{removeIdList:r.filter(I=>!l.has(I.id)).map(I=>I.id),preOptionsMap:new Map(r.map(I=>[I.id,I]))}}recordSourceError(i,r,l,I,h){h.push({id:i,error:r}),l.has(i)&&I.push(l.get(i))}async parseCameraOptions(i,r,l=[]){const{removeIdList:I,preOptionsMap:h}=this.prepareSourceOptions(r,l);this.log.debug("videomixer removeIdList",r,I,h);for(const _ of I)i.removeCameraSource(_),this.removeEventListeners(_);const f=[],w=[];for(const _ of r)try{await this.processSingleCameraSource(i,_),f.push(_)}catch(G){this.recordSourceError(_.id,G,h,f,w)}return{finalOptions:f,errors:w}}async processSingleCameraSource(i,r){const{id:l}=r;this.resolveCameraInternalTrack(i,r),i.inputLocalVideoTracks.has(l)?await this.updateExistingCameraSource(i,r):await this.addNewCameraSource(i,r)}async updateExistingCameraSource(i,r){var l,I;const{id:h,layout:f,profile:w}=r,_=(l=i.inputLocalVideoTracks.get(h))==null?void 0:l.mediaTrack;await this.updateCameraProfile(r);const G=(I=i.inputLocalVideoTracks.get(h))==null?void 0:I.mediaTrack,U=this.resolveVideoProfile(w);G!==_?i.updateCameraSource(h,f,G,U):i.updateCameraSource(h,f,null,U)}resolveCameraInternalTrack(i,r){var l;const{id:I,layout:h,profile:f,useInternalTrack:w}=r;if(w){if(i.inputLocalVideoTracks.get(I))return r;this.log.debug("resolve camera internal track",r,r.id,r.videoTrack),(l=this.core.trtc.localVideoTrack)!=null&&l.sourceTrack?(this.log.debug("resolve camera internal track outMediaTrack:",this.core.trtc.localVideoTrack.outMediaTrack,"sourceTrack:",this.core.trtc.localVideoTrack.sourceTrack),r.videoTrack=this.core.trtc.localVideoTrack.outMediaTrack,r.profile=this.core.trtc.localVideoTrack.profile):r.videoTrack=this.createPlaceholderVideoTrack(),this.removeEventListeners(I);const _=U=>{var j,lA;const sA=i.inputLocalVideoTracks.get(I);this.log.debug(`camera internal track preprocessed event from ${(j=U.room)==null?void 0:j.userId} to ${this.core.room.userId}, is same instance:${U.room===this.core.room} ,new track:`,U.mediaTrack,sA?.mediaTrack,i.outMediaTrack),((lA=U.mediaTrack)==null?void 0:lA.kind)!==$t.AUDIO&&sA?.mediaTrack!==U.mediaTrack&&i.outMediaTrack!==U.mediaTrack&&U.room===this.core.room?sA&&U.mediaTrack&&i.updateCameraSource(I,h,U.mediaTrack):this.log.debug("camera internal track preprocessed event return")},G=U=>{var j,lA,sA,mA,IA,cA,TA,WA;const ue=i.inputLocalVideoTracks.get(I);this.log.debug(`camera internal track stopped ${((j=U.track)==null?void 0:j.mediaTrack)===ue?.mediaTrack||((lA=U.track)==null?void 0:lA.outMediaTrack)===ue?.mediaTrack||((sA=U.track)==null?void 0:sA.outMediaTrack)===i.outMediaTrack}`,(mA=U.track)==null?void 0:mA.mediaTrack,(IA=U.track)==null?void 0:IA.outMediaTrack,ue?.mediaTrack,i.outMediaTrack),!ue||((cA=U.track)==null?void 0:cA.mediaTrack)!==ue?.mediaTrack&&((TA=U.track)==null?void 0:TA.outMediaTrack)!==ue?.mediaTrack&&((WA=U.track)==null?void 0:WA.outMediaTrack)!==i.outMediaTrack||i.updateCameraSource(I,h,this.createPlaceholderVideoTrack())};this.core.innerEmitter.on("118",_),this.core.innerEmitter.on("117",G),this.eventListeners.has(I)||this.eventListeners.set(I,{}),this.eventListeners.get(I).captureSuccess=()=>{this.core.innerEmitter.off("118",_)},this.eventListeners.get(I).trackStop=()=>{this.core.innerEmitter.off("117",G)}}return r}async addNewCameraSource(i,r){const{id:l,layout:I,useInternalTrack:h}=r,f=await this.captureCamera(r);try{i.addCameraSource(l,f,I)}catch(w){throw f.close(),w}}resolveVideoProfile(i){if(!this.core.utils.isUndefined(i))return this.core.utils.isString(i)?this.core.constants.videoProfileMap[i]:i}async parseScreenOptions(i,r,l=[]){const{removeIdList:I,preOptionsMap:h}=this.prepareSourceOptions(r,l);for(const _ of I)i.removeScreenSource(_),this.removeSystemAudioTrack(_),this.removeEventListeners(_);const f=[],w=[];for(const _ of r)try{await this.processSingleScreenSource(i,_,h),f.push(_)}catch(G){this.recordSourceError(_.id,G,h,f,w)}return{finalOptions:f,errors:w}}async processSingleScreenSource(i,r,l){const{id:I,layout:h,useInternalTrack:f}=r;this.resolveScreenInternalTrack(i,r);const w=l.get(I),_=i.inputLocalScreenTracks.has(I),G=!w?.systemAudio&&r.systemAudio;_&&!G?this.updateExistingScreenSource(i,I,h,w,r):await this.addNewScreenSource(i,r,w)}updateExistingScreenSource(i,r,l,I,h){i.updateScreenSource(r,l),I?.systemAudio&&!h.systemAudio&&this.removeSystemAudioTrack(r)}resolveScreenInternalTrack(i,r){var l,I;const{id:h,layout:f,useInternalTrack:w}=r;if(w){if(i.inputLocalScreenTracks.get(h))return r;this.log.debug("resolve screen internal track",r,r.id,r.videoTrack),(l=this.core.trtc.localScreenTrack)!=null&&l.sourceTrack?(r.videoTrack=this.core.trtc.localScreenTrack.sourceTrack,r.profile=this.core.trtc.localScreenTrack.profile,(I=this.core.trtc.localScreenAudioTrack)!=null&&I.mediaTrack&&(r.audioTrack=this.core.trtc.localScreenAudioTrack.mediaTrack),delete r.captureElement,delete r.preferDisplaySurface,delete r.systemAudio):r.videoTrack=this.createPlaceholderVideoTrack(),this.removeEventListeners(h);const _=U=>{var j,lA,sA,mA,IA,cA,TA;const WA=i.inputLocalScreenTracks.get(h);this.log.debug(`screen internal track capture success event from ${(j=U.room)==null?void 0:j.userId} to ${this.core.room.userId}, is same instance:${U.room===this.core.room}, isScreen:${(lA=U.track)==null?void 0:lA.isScreen} kind:${(sA=U.track)==null?void 0:sA.kind}`,WA,U.track.sourceTrack),(mA=U.track)!=null&&mA.isScreen&&((IA=U.track)==null?void 0:IA.kind)!==$t.AUDIO&&WA&&(this.log.debug("screen internal track capture success event ",(cA=U.track)==null?void 0:cA.sourceTrack),(TA=U.track)!=null&&TA.sourceTrack&&i.updateScreenSource(h,f,U.track.sourceTrack))},G=U=>{var j,lA;const sA=i.inputLocalScreenTracks.get(h);this.log.debug(`screen internal track stopped, is same track:${((j=U.track)==null?void 0:j.sourceTrack)===sA?.mediaTrack}, isScreen:${U.track.isScreen}`),U.track.isScreen&&((lA=U.track)==null?void 0:lA.sourceTrack)===sA?.mediaTrack&&i.updateScreenSource(h,f,this.createPlaceholderVideoTrack())};this.core.innerEmitter.on("102",_),this.core.innerEmitter.on("117",G),this.eventListeners.has(h)||this.eventListeners.set(h,{}),this.eventListeners.get(h).captureSuccess=()=>{this.core.innerEmitter.off("102",_)},this.eventListeners.get(h).trackStop=()=>{this.core.innerEmitter.off("117",G)}}return r}async addNewScreenSource(i,r,l){const{id:I,layout:h}=r,f=await this.captureScreen(r);!l?.systemAudio&&r.systemAudio&&i.inputLocalScreenTracks.has(I)&&i.removeScreenSource(I);try{i.addScreenSource(I,f,h)}catch(w){throw f.close(),w}}async parseTextOptions(i,r,l=[]){const{removeIdList:I,preOptionsMap:h}=this.prepareSourceOptions(r,l);for(const _ of I)i.removeTextSource(_);const f=[],w=[];for(const _ of r)try{h.has(_.id)?i.updateTextSource(_):i.addTextSource(_),f.push(_)}catch(G){this.recordSourceError(_.id,G,h,f,w)}return{finalOptions:f,errors:w}}async parseImageOptions(i,r,l=[]){const{removeIdList:I,preOptionsMap:h}=this.prepareSourceOptions(r,l);for(const _ of I)i.removeImageSource(_);const f=[],w=[];for(const _ of r)try{await this.processSingleImageSource(i,_,h),f.push(_)}catch(G){this.recordSourceError(_.id,G,h,f,w)}return{finalOptions:f,errors:w}}async processSingleImageSource(i,r,l){const{id:I,url:h,layout:f}=r,w=l.get(I);if(w){let _;w.url!==h&&(_=await this.core.utils.loadImage(h)),i.updateImageSource(I,f,_)}else{const _=await this.core.utils.loadImage(h);i.addImageSource(I,_,f)}}async parseVideoOptions(i,r,l=[]){const{removeIdList:I,preOptionsMap:h}=this.prepareSourceOptions(r,l);for(const _ of I)i.removeVideoSource(_);const f=[],w=[];for(const _ of r)try{await this.processSingleVideoSource(i,_,h),f.push(_)}catch(G){this.recordSourceError(_.id,G,h,f,w)}return{finalOptions:f,errors:w}}async processSingleVideoSource(i,r,l){const{id:I,url:h,layout:f}=r,w=l.get(I);if(w){let _;w.url!==h&&(_=await this.core.utils.loadVideo(h)),i.updateVideoSource(I,f,_)}else{const _=await this.core.utils.loadVideo(h);i.addVideoSource(I,_,f)}}createPlaceholderVideoTrack(){const i=document.createElement("canvas");i.width=1,i.height=1;const r=i.getContext("2d");if(!r)return i.captureStream(30).getVideoTracks()[0];let l=null;const I=1e3/30,h=i.captureStream(30).getVideoTracks()[0],f=()=>{r.fillStyle="rgba(255, 255, 255, 0)",r.fillRect(0,0,i.width,i.height),h.readyState==="live"&&(l=setTimeout(f,I))};f();const w=h.stop.bind(h);return h.stop=()=>{l&&(clearTimeout(l),l=null),w()},h}removeEventListeners(i){const r=this.eventListeners.get(i);r&&(r.captureSuccess&&r.captureSuccess(),r.trackStop&&r.trackStop(),this.eventListeners.delete(i))}async captureCamera(i){const{id:r,cameraId:l,videoTrack:I,profile:h}=i,f=new this.core.LocalVideoTrack;f.log.id+=`-${r}`;const w={};if(l?w.deviceId=l:this.core.utils.isUndefined(I)||(w.customSource=I),!this.core.utils.isUndefined(h)){const _=this.resolveVideoProfile(h);_&&f.setProfile(_)}return await f.capture(w),f}async updateCameraProfile(i){var r;const{id:l,cameraId:I,videoTrack:h,profile:f}=i,w=(r=this.localMixVideoTrack)==null?void 0:r.inputLocalVideoTracks.get(l);if(w&&(I?await w.switchDevice(I):this.core.utils.isUndefined(h)||await w.setInputMediaStreamTrack(h),!this.core.utils.isUndefined(f))){const _=this.resolveVideoProfile(f);_&&w.setProfile(_),I&&w.isNeedToSwitchDevice(I)||await w.applyProfile()}}async captureScreen(i){const{id:r,profile:l,captureElement:I,preferDisplaySurface:h,systemAudio:f,videoTrack:w,audioTrack:_}=i,G=new this.core.LocalScreenTrack;G.log.id+=`-${r}`;const U={captureElement:I,preferDisplaySurface:h,systemAudio:f,videoTrack:w,audioTrack:_};if(!this.core.utils.isUndefined(l))if(this.core.utils.isString(l)){const lA=this.core.constants.screenProfileMap[l];lA&&G.setProfile(lA)}else G.setProfile(l);const j=await G.capture(U);return f&&j.getAudioTracks().length>0?(this.systemAudioTrackList[r]=j.getAudioTracks()[0],this.log.info(`${r} system audio track captured`)):this.removeSystemAudioTrack(r),G.mediaTrack.addEventListener(this.core.constants.NAME.ENDED,()=>{this.handleScreenShareEnded(r)}),G}handleScreenShareEnded(i){var r,l,I;(r=this.localMixVideoTrack)==null||r.removeScreenSource(i),(l=this._mixVideoConfig)!=null&&l.screen&&(this._mixVideoConfig.screen=this._mixVideoConfig.screen.filter(h=>h.id!==i)),(I=this.onScreenShareStop)==null||I.call(this,i)}async _updatePreview({view:i,track:r,prevConfig:l}){if(this.core.utils.isUndefined(i)&&l?.view){const I=this.core.utils.getViewListFromView(l.view);return void(I.length>0&&await r.play(I))}if(!this.core.utils.isUndefined(i)){const I=this.core.utils.getViewListFromView(i);I.length>0?await r.play(I):r.stop()}}removeSystemAudioTrack(i){const r=this.systemAudioTrackList[i];r&&(r.stop(),this.log.info(`${i} system audio track stop`),delete this.systemAudioTrackList[i])}};de(G$,"Name","VideoMixer");var k$=G$,SEA=k$;const MEA=Object.freeze(Object.defineProperty({__proto__:null,VideoMixer:k$,default:SEA},Symbol.toStringTag,{value:"Module"})),vEA=kU(MEA);var REA=TL.exports,jZ;function wEA(){return jZ||(jZ=1,function(t,i){(function(r,l){l(i,krA(),raA,ZgA,ncA,EcA,vEA)})(REA,function(r,l,I,h,f,w,_){function G(q){return q&&typeof q=="object"&&"default"in q?q:{default:q}}var U=G(l),j=G(_),lA=function(q,L){return lA=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(oA,b){oA.__proto__=b}||function(oA,b){for(var x in b)Object.prototype.hasOwnProperty.call(b,x)&&(oA[x]=b[x])},lA(q,L)},sA=function(){return sA=Object.assign||function(q){for(var L,oA=1,b=arguments.length;oA=0;wA--)(x=q[wA])&&(uA=(tA<3?x(uA):tA>3?x(L,oA,uA):x(L,oA))||uA);return tA>3&&uA&&Object.defineProperty(L,oA,uA),uA}function IA(q,L,oA,b){return new(oA||(oA=Promise))(function(x,tA){function uA(pe){try{XA(b.next(pe))}catch(p){tA(p)}}function wA(pe){try{XA(b.throw(pe))}catch(p){tA(p)}}function XA(pe){var p;pe.done?x(pe.value):(p=pe.value,p instanceof oA?p:new oA(function(B){B(p)})).then(uA,wA)}XA((b=b.apply(q,[])).next())})}function cA(q,L){var oA,b,x,tA,uA={label:0,sent:function(){if(1&x[0])throw x[1];return x[1]},trys:[],ops:[]};return tA={next:wA(0),throw:wA(1),return:wA(2)},typeof Symbol=="function"&&(tA[Symbol.iterator]=function(){return this}),tA;function wA(XA){return function(pe){return function(p){if(oA)throw new TypeError("Generator is already executing.");for(;tA&&(tA=0,p[0]&&(uA=0)),uA;)try{if(oA=1,b&&(x=2&p[0]?b.return:p[0]?b.throw||((x=b.return)&&x.call(b),0):b.next)&&!(x=x.call(b,p[1])).done)return x;switch(b=0,x&&(p=[2&p[0],x.value]),p[0]){case 0:case 1:x=p;break;case 4:return uA.label++,{value:p[1],done:!1};case 5:uA.label++,b=p[1],p=[0];continue;case 7:p=uA.ops.pop(),uA.trys.pop();continue;default:if(x=uA.trys,!((x=x.length>0&&x[x.length-1])||p[0]!==6&&p[0]!==2)){uA=0;continue}if(p[0]===3&&(!x||p[1]>x[0]&&p[1]=q.length&&(q=void 0),{value:q&&q[b++],done:!q}}};throw new TypeError(L?"Object is not iterable.":"Symbol.iterator is not defined.")}function WA(q,L,oA){if(oA||arguments.length===2)for(var b,x=0,tA=L.length;x0&&qt[0]<4?1:+(qt[0]+qt[1])),!yg&&mc&&(!(qt=mc.match(/Edge\/(\d+)/))||qt[1]>=74)&&(qt=mc.match(/Chrome\/(\d+)/))&&(yg=+qt[1]);var Ea=yg,yn=Gn.String,ba=!!Object.getOwnPropertySymbols&&!Js(function(){var q=Symbol("symbol detection");return!yn(q)||!(Object(q)instanceof Symbol)||!Symbol.sham&&Ea&&Ea<41}),Sa=ba&&!Symbol.sham&&typeof Symbol.iterator=="symbol",$=Object,K=Sa?function(q){return typeof q=="symbol"}:function(q){var L=Hs("Symbol");return _o(L)&&Sg(L.prototype,$(q))},vA=String,qA=TypeError,Ae=function(q){if(_o(q))return q;throw qA(function(L){try{return vA(L)}catch{return"Object"}}(q)+" is not a function")},me=function(q,L){var oA=q[L];return $i(oA)?void 0:Ae(oA)},Pe=TypeError,Fe=Object.defineProperty,rt=function(q,L){try{Fe(Gn,q,{value:L,configurable:!0,writable:!0})}catch{Gn[q]=L}return L},Ct="__core-js_shared__",Rt=Gn[Ct]||rt(Ct,{}),Yt=xe(function(q){(q.exports=function(L,oA){return Rt[L]||(Rt[L]=oA!==void 0?oA:{})})("versions",[]).push({version:"3.32.1",mode:"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.32.1/LICENSE",source:"https://github.com/zloirock/core-js"})}),Ii=Object,ct=function(q){return Ii(ng(q))},xt=as({}.hasOwnProperty),Ji=Object.hasOwn||function(q,L){return xt(ct(q),L)},Ki=0,qs=Math.random(),Mi=as(1 .toString),zo=function(q){return"Symbol("+(q===void 0?"":q)+")_"+Mi(++Ki+qs,36)},Mg=Gn.Symbol,sr=Yt("wks"),yr=Sa?Mg.for||Mg:Mg&&Mg.withoutSetter||zo,xn=function(q){return Ji(sr,q)||(sr[q]=ba&&Ji(Mg,q)?Mg[q]:yr("Symbol."+q)),sr[q]},Ml=TypeError,Ks=xn("toPrimitive"),aI=function(q,L){if(!Hn(q)||K(q))return q;var oA,b=me(q,Ks);if(b){if(oA=mo(b,q,L),!Hn(oA)||K(oA))return oA;throw Ml("Can't convert object to primitive value")}return function(x,tA){var uA,wA;if(_o(uA=x.toString)&&!Hn(wA=mo(uA,x))||_o(uA=x.valueOf)&&!Hn(wA=mo(uA,x)))return wA;throw Pe("Can't convert object to primitive value")}(q)},Wg=function(q){var L=aI(q,"string");return K(L)?L:L+""},fc=Gn.document,wu=Hn(fc)&&Hn(fc.createElement),Ma=function(q){return wu?fc.createElement(q):{}},vl=!pr&&!Js(function(){return Object.defineProperty(Ma("div"),"a",{get:function(){return 7}}).a!==7}),ye=Object.getOwnPropertyDescriptor,fe={f:pr?ye:function(q,L){if(q=Dg(q),L=Wg(L),vl)try{return ye(q,L)}catch{}if(Ji(q,L))return fr(!mo(cn.f,q,L),q[L])}},vg=pr&&Js(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),rg=String,Rg=TypeError,Dn=function(q){if(Hn(q))return q;throw Rg(rg(q)+" is not an object")},Dr=TypeError,ui=Object.defineProperty,no=Object.getOwnPropertyDescriptor,qc="enumerable",zg="configurable",wg="writable",Yr={f:pr?vg?function(q,L,oA){if(Dn(q),L=Wg(L),Dn(oA),typeof q=="function"&&L==="prototype"&&"value"in oA&&wg in oA&&!oA[wg]){var b=no(q,L);b&&b[wg]&&(q[L]=oA.value,oA={configurable:zg in oA?oA[zg]:b[zg],enumerable:qc in oA?oA[qc]:b[qc],writable:!1})}return ui(q,L,oA)}:ui:function(q,L,oA){if(Dn(q),L=Wg(L),Dn(oA),vl)try{return ui(q,L,oA)}catch{}if("get"in oA||"set"in oA)throw Dr("Accessors not supported");return"value"in oA&&(q[L]=oA.value),q}},yc=pr?function(q,L,oA){return Yr.f(q,L,fr(1,oA))}:function(q,L,oA){return q[L]=oA,q},Kc=Function.prototype,ag=pr&&Object.getOwnPropertyDescriptor,_u=Ji(Kc,"name"),SE={CONFIGURABLE:_u&&(!pr||pr&&ag(Kc,"name").configurable)},_g=as(Function.toString);_o(Rt.inspectSource)||(Rt.inspectSource=function(q){return _g(q)});var ka,Dc,ME,La=Rt.inspectSource,sa=Gn.WeakMap,Tg=_o(sa)&&/native code/.test(String(sa)),gI=Yt("keys"),hs=function(q){return gI[q]||(gI[q]=zo(q))},Lo={},da="Object already initialized",nr=Gn.TypeError,Vt=Gn.WeakMap;if(Tg||Rt.state){var Kt=Rt.state||(Rt.state=new Vt);Kt.get=Kt.get,Kt.has=Kt.has,Kt.set=Kt.set,ka=function(q,L){if(Kt.has(q))throw nr(da);return L.facade=q,Kt.set(q,L),L},Dc=function(q){return Kt.get(q)||{}},ME=function(q){return Kt.has(q)}}else{var Ng=hs("state");Lo[Ng]=!0,ka=function(q,L){if(Ji(q,Ng))throw nr(da);return L.facade=q,yc(q,Ng,L),L},Dc=function(q){return Ji(q,Ng)?q[Ng]:{}},ME=function(q){return Ji(q,Ng)}}var cI={get:Dc,enforce:function(q){return ME(q)?Dc(q):ka(q,{})}},rr=xe(function(q){var L=SE.CONFIGURABLE,oA=cI.enforce,b=cI.get,x=String,tA=Object.defineProperty,uA=as("".slice),wA=as("".replace),XA=as([].join),pe=pr&&!Js(function(){return tA(function(){},"length",{value:8}).length!==8}),p=String(String).split("String"),B=q.exports=function(v,N,O){uA(x(N),0,7)==="Symbol("&&(N="["+wA(x(N),/^Symbol\(([^)]*)\)/,"$1")+"]"),O&&O.getter&&(N="get "+N),O&&O.setter&&(N="set "+N),(!Ji(v,"name")||L&&v.name!==N)&&(pr?tA(v,"name",{value:N,configurable:!0}):v.name=N),pe&&O&&Ji(O,"arity")&&v.length!==O.arity&&tA(v,"length",{value:O.arity});try{O&&Ji(O,"constructor")&&O.constructor?pr&&tA(v,"prototype",{writable:!1}):v.prototype&&(v.prototype=void 0)}catch{}var z=oA(v);return Ji(z,"source")||(z.source=XA(p,typeof N=="string"?N:"")),v};Function.prototype.toString=B(function(){return _o(this)&&b(this).source||La(this)},"toString")}),qI=function(q,L,oA,b){b||(b={});var x=b.enumerable,tA=b.name!==void 0?b.name:L;if(_o(oA)&&rr(oA,tA,b),b.global)x?q[L]=oA:rt(L,oA);else{try{b.unsafe?q[L]&&(x=!0):delete q[L]}catch{}x?q[L]=oA:Yr.f(q,L,{value:oA,enumerable:!1,configurable:!b.nonConfigurable,writable:!b.nonWritable})}return q},za=Math.ceil,na=Math.floor,un=Math.trunc||function(q){var L=+q;return(L>0?na:za)(L)},Sn=function(q){var L=+q;return L!=L||L===0?0:un(L)},Tu=Math.max,Gg=Math.min,Ua=Math.min,jc=function(q){return q>0?Ua(Sn(q),9007199254740991):0},KI=function(q){return jc(q.length)},vE=function(q){return function(L,oA,b){var x,tA=Dg(L),uA=KI(tA),wA=function(XA,pe){var p=Sn(XA);return p<0?Tu(p+pe,0):Gg(p,pe)}(b,uA);if(q&&oA!=oA){for(;uA>wA;)if((x=tA[wA++])!=x)return!0}else for(;uA>wA;wA++)if((q||wA in tA)&&tA[wA]===oA)return q||wA||0;return!q&&-1}},lI={indexOf:vE(!1)}.indexOf,Nu=as([].push),Rl=function(q,L){var oA,b=Dg(q),x=0,tA=[];for(oA in b)!Ji(Lo,oA)&&Ji(b,oA)&&Nu(tA,oA);for(;L.length>x;)Ji(b,oA=L[x++])&&(~lI(tA,oA)||Nu(tA,oA));return tA},Sc=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Gu=Sc.concat("length","prototype"),bu={f:Object.getOwnPropertyNames||function(q){return Rl(q,Gu)}},wl={f:Object.getOwnPropertySymbols},rs=as([].concat),gs=Hs("Reflect","ownKeys")||function(q){var L=bu.f(Dn(q)),oA=wl.f;return oA?rs(L,oA(q)):L},ud=function(q,L,oA){for(var b=gs(L),x=Yr.f,tA=fe.f,uA=0;uAuA;)Yr.f(q,oA=x[uA++],b[oA]);return q},jI={f:ku},Zc=Hs("document","documentElement"),Xc="prototype",WI="script",EI=hs("IE_PROTO"),$c=function(){},Al=function(q){return"<"+WI+">"+q+""},va=function(q){q.write(Al("")),q.close();var L=q.parentWindow.Object;return q=null,L},bg=function(){try{Ca=new ActiveXObject("htmlfile")}catch{}var q,L,oA;bg=typeof document<"u"?document.domain&&Ca?va(Ca):(L=Ma("iframe"),oA="java"+WI+":",L.style.display="none",Zc.appendChild(L),L.src=String(oA),(q=L.contentWindow.document).open(),q.write(Al("document.F=Object")),q.close(),q.F):va(Ca);for(var b=Sc.length;b--;)delete bg[Xc][Sc[b]];return bg()};Lo[EI]=!0;var ys,Kn,vc=Object.create||function(q,L){var oA;return q!==null?($c[Xc]=Dn(q),oA=new $c,$c[Xc]=null,oA[EI]=q):oA=bg(),L===void 0?oA:jI.f(oA,L)},zI=Gn.RegExp,ZI=Js(function(){var q=zI(".","s");return!(q.dotAll&&q.exec(` -`)&&q.flags==="s")}),_E=Gn.RegExp,rh=Js(function(){var q=_E("(?b)","g");return q.exec("b").groups.a!=="b"||"b".replace(q,"$c")!=="bc"}),IC=cI.get,ah=Yt("native-string-replace",String.prototype.replace),el=RegExp.prototype.exec,kg=el,ro=as("".charAt),uC=as("".indexOf),TE=as("".replace),NE=as("".slice),hd=(Kn=/b*/g,mo(el,ys=/a/,"a"),mo(el,Kn,"a"),ys.lastIndex!==0||Kn.lastIndex!==0),GE=Cd.BROKEN_CARET,tl=/()??/.exec("")[1]!==void 0;(hd||tl||GE||ZI||rh)&&(kg=function(q){var L,oA,b,x,tA,uA,wA,XA=this,pe=IC(XA),p=Xg(q),B=pe.raw;if(B)return B.lastIndex=XA.lastIndex,L=mo(kg,B,p),XA.lastIndex=B.lastIndex,L;var v=pe.groups,N=GE&&XA.sticky,O=mo(qn,XA),z=XA.source,X=0,rA=p;if(N&&(O=TE(O,"y",""),uC(O,"g")===-1&&(O+="g"),rA=NE(p,XA.lastIndex),XA.lastIndex>0&&(!XA.multiline||XA.multiline&&ro(p,XA.lastIndex-1)!==` -`)&&(z="(?: "+z+")",rA=" "+rA,X++),oA=new RegExp("^(?:"+z+")",O)),tl&&(oA=new RegExp("^"+z+"$(?!\\s)",O)),hd&&(b=XA.lastIndex),x=mo(el,N?oA:XA,rA),N?x?(x.input=NE(x.input,X),x[0]=NE(x[0],X),x.index=XA.lastIndex,XA.lastIndex+=x[0].length):XA.lastIndex=0:hd&&x&&(XA.lastIndex=XA.global?x.index+x[0].length:b),tl&&x&&x.length>1&&mo(ah,x[0],oA,function(){for(tA=1;tA=wA?q?"":void 0:(b=hI(tA,uA))<55296||b>56319||uA+1===wA||(x=hI(tA,uA+1))<56320||x>57343?q?Qd(tA,uA):b:q?Oa(tA,uA,uA+2):x-56320+(b-55296<<10)+65536}},Pa={charAt:CC(!0)}.charAt,ur=function(q,L,oA){return L+(oA?Pa(q,L).length:1)},pd=TypeError,Ou=function(q,L){var oA=q.exec;if(_o(oA)){var b=mo(oA,q,L);return b!==null&&Dn(b),b}if(Cs(q)==="RegExp")return mo(dI,q,L);throw pd("RegExp#exec called on incompatible receiver")};(function(q,L,oA,b){var x=xn(q),tA=!Js(function(){var pe={};return pe[x]=function(){return 7},""[q](pe)!==7}),uA=tA&&!Js(function(){var pe=!1,p=/a/;return q==="split"&&((p={}).constructor={},p.constructor[dC]=function(){return p},p.flags="",p[x]=/./[x]),p.exec=function(){return pe=!0,null},p[x](""),!pe});if(!tA||!uA||oA){var wA=_n(/./[x]),XA=L(x,""[q],function(pe,p,B,v,N){var O=_n(pe),z=p.exec;return z===dI||z===il.exec?tA&&!N?{done:!0,value:wA(p,B,v)}:{done:!0,value:O(B,p,v)}:{done:!1}});qI(String.prototype,q,XA[0]),qI(il,x,XA[1])}})("match",function(q,L,oA){return[function(b){var x=ng(this),tA=$i(b)?void 0:me(b,q);return tA?mo(tA,b,x):new RegExp(b)[q](Xg(x))},function(b){var x=Dn(this),tA=Xg(b),uA=oA(L,x,tA);if(uA.done)return uA.value;if(!x.global)return Ou(x,tA);var wA=x.unicode;x.lastIndex=0;for(var XA,pe=[],p=0;(XA=Ou(x,tA))!==null;){var B=Xg(XA[0]);pe[p]=B,B===""&&(x.lastIndex=ur(tA,jc(x.lastIndex),wA)),p++}return p===0?null:pe}]});var Er=Array.isArray||function(q){return Cs(q)==="Array"},wc=TypeError,ol=function(q){if(q>9007199254740991)throw wc("Maximum allowed index exceeded");return q},Lg=function(q,L,oA){var b=Wg(L);b in q?Yr.f(q,b,fr(0,oA)):q[b]=oA},Oo=function(){},$g=[],Za=Hs("Reflect","construct"),Nl=/^\s*(?:class|function)\b/,Aa=as(Nl.exec),gh=!Nl.exec(Oo),js=function(q){if(!_o(q))return!1;try{return Za(Oo,$g,q),!0}catch{return!1}},XI=function(q){if(!_o(q))return!1;switch(gg(q)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return gh||!!Aa(Nl,La(q))}catch{return!0}};XI.sham=!0;var Us,_c=!Za||Js(function(){var q;return js(js.call)||!js(Object)||!js(function(){q=!0})||q})?XI:js,Ac=xn("species"),dr=Array,Vr=function(q,L){return new(function(oA){var b;return Er(oA)&&(b=oA.constructor,(_c(b)&&(b===dr||Er(b.prototype))||Hn(b)&&(b=b[Ac])===null)&&(b=void 0)),b===void 0?dr:b}(q))(0)},Xa=xn("species"),bE=xn("isConcatSpreadable"),hC=Ea>=51||!Js(function(){var q=[];return q[bE]=!1,q.concat()[0]!==q}),ch=function(q){if(!Hn(q))return!1;var L=q[bE];return L!==void 0?!!L:Er(q)};tn({target:"Array",proto:!0,arity:1,forced:!(hC&&(Us="concat",Ea>=51||!Js(function(){var q=[];return(q.constructor={})[Xa]=function(){return{foo:1}},q[Us](Boolean).foo!==1})))},{concat:function(q){var L,oA,b,x,tA,uA=ct(this),wA=Vr(uA),XA=0;for(L=-1,b=arguments.length;L=5||Math.abs(b)>=5?(document.removeEventListener("mousemove",this.onMouseMove5px,!1),document.removeEventListener("mouseup",this.onMouseUp5px,!1),document.addEventListener("mousemove",this.onMouseMove,!1),document.addEventListener("mouseup",this.onMouseUp,!1)):lg.debug("".concat(this.logPrefix,"on Movable mouse move less than 5px"))},q.prototype.onMouseUp5px=function(){document.removeEventListener("mousemove",this.onMouseMove5px,!1),document.removeEventListener("mouseup",this.onMouseUp5px,!1)},q.prototype.onMouseMove=function(L){if(this.movable&&this.container){var oA=L.screenX-this.moveStartOfLeft,b=L.screenY-this.moveStartOfTop,x=this.originLeft+oA,tA=this.originTop+b,uA=this.movable.offsetWidth,wA=this.movable.offsetHeight,XA=this.container.offsetWidth,pe=this.container.offsetHeight;this.options.canExceedContainer||(x<0?x=0:x>XA-uA&&(x=XA-uA),tA<0?tA=0:tA>pe-wA&&(tA=pe-wA)),!this.options.calcPositionOnly&&this.movable&&(this.movable.style.left="".concat(x,"px"),this.movable.style.top="".concat(tA,"px")),this.emit("move",x,tA)}else lg.debug("".concat(this.logPrefix,"onMouseMove error:No 'movable' and 'container'."))},q.prototype.onMouseUp=function(){document.removeEventListener("mousemove",this.onMouseMove,!1),document.removeEventListener("mouseup",this.onMouseUp,!1),this.originLeft=0,this.originTop=0,this.moveStartOfLeft=0,this.moveStartOfTop=0},q.prototype.on=function(L,oA){var b=this.callbacksMap.get(L);b?b.push(oA):this.callbacksMap.set(L,[oA])},q.prototype.off=function(L,oA){var b=this.callbacksMap.get(L);b&&(b=b.filter(function(x){return x!=oA}),this.callbacksMap.set(L,b))},q.prototype.emit=function(L){for(var oA=[],b=1;b ").concat(L)),this.enabled=L,this.movable&&(this.movable.style.cursor=L?"move":"default",lg.debug("".concat(this.logPrefix,"setEnabled: cursor updated to '").concat(L?"move":"default","'")))},q.prototype.isEnabled=function(){return this.enabled},q}();(function(q){q[q.Both=0]="Both",q[q.Corner=1]="Corner",q[q.Edge=2]="Edge"})(aa||(aa={}));var PE="trtc-resizable-top-left-anchor",Vu="trtc-resizable-top-anchor",Ju="trtc-resizable-top-right-anchor",yI="trtc-resizable-left-anchor",gl="trtc-resizable-right-anchor",Lr="trtc-resizable-bottom-left-anchor",Ur="trtc-resizable-bottom-anchor",Ig="trtc-resizable-bottom-right-anchor",ar={resizeAnchor:{position:"absolute",width:"".concat(8,"px"),height:"".concat(8,"px"),border:"1px solid #3D7EFD",backgroundColor:"#FFFFFF"},topLeftAnchor:{top:"-".concat(4,"px"),left:"-".concat(4,"px"),cursor:"nw-resize"},topAnchor:{top:"-".concat(4,"px"),left:"calc(50% - ".concat(4,"px)"),cursor:"n-resize"},topRightAnchor:{top:"-".concat(4,"px"),right:"-".concat(4,"px"),cursor:"ne-resize"},leftAnchor:{top:"calc(50% - ".concat(4,"px)"),left:"-".concat(4,"px"),cursor:"w-resize"},rightAnchor:{top:"calc(50% - ".concat(4,"px)"),right:"-".concat(4,"px"),cursor:"e-resize"},bottomLeftAnchor:{bottom:"-".concat(4,"px"),left:"-".concat(4,"px"),cursor:"sw-resize"},bottomAnchor:{bottom:"-".concat(4,"px"),left:"calc(50% - ".concat(4,"px)"),cursor:"s-resize"},bottomRightAnchor:{bottom:"-".concat(4,"px"),right:"-".concat(4,"px"),cursor:"se-resize"}};function _r(q,L){for(var oA in L)q.style[oA]=L[oA]}var ic=function(){function q(L,oA,b){b===void 0&&(b={keepRatio:!1,stopPropagation:!1,anchorMode:aa.Both,canExceedContainer:!1}),this.logPrefix="[Resizable]",this.container=null,this.options={keepRatio:!1,stopPropagation:!1,anchorMode:aa.Both,canExceedContainer:!1},this.callbacksMap=new Map,this.topLeftAnchor=null,this.topAnchor=null,this.topRightAnchor=null,this.leftAnchor=null,this.rightAnchor=null,this.bottomLeftAnchor=null,this.bottomAnchor=null,this.bottomRightAnchor=null,this.currentAnchor=null,this.resizeStartLeft=0,this.resizeStartTop=0,this.originLeft=0,this.originTop=0,this.originWidth=0,this.originHeight=0,this.resizeTarget=L,this.container=oA||document.body,this.options={keepRatio:!!b.keepRatio||!1,stopPropagation:!!b.stopPropagation||!1,anchorMode:b.anchorMode||aa.Both,canExceedContainer:!!b.canExceedContainer||!1},this.mousedown=this.mousedown.bind(this),this.mousemove=this.mousemove.bind(this),this.mouseup=this.mouseup.bind(this),this.currentAnchor=null,this.createResizeAnchor(),this.resizeTarget.classList.add("trtc-resizable"),this.resizeTarget.style.position="absolute",this.resizeTarget.style.border="1px solid #3D7EFD",this.resizeTarget.style.boxSizing="border-box",this.initResizeEvent()}return q.prototype.createResizeAnchor=function(){var L,oA,b,x,tA,uA,wA,XA,pe=document.createElement("div");pe.className="trtc-resizable-resize-anchor ".concat(PE),_r(pe,Object.assign({},ar.resizeAnchor,ar.topLeftAnchor)),this.topLeftAnchor=pe;var p=document.createElement("div");p.className="trtc-resizable-resize-anchor ".concat(Vu),_r(p,Object.assign({},ar.resizeAnchor,ar.topAnchor)),this.topAnchor=p;var B=document.createElement("div");B.className="trtc-resizable-resize-anchor ".concat(Ju),_r(B,Object.assign({},ar.resizeAnchor,ar.topRightAnchor)),this.topRightAnchor=B;var v=document.createElement("div");v.className="trtc-resizable-resize-anchor ".concat(yI),_r(v,Object.assign({},ar.resizeAnchor,ar.leftAnchor)),this.leftAnchor=v;var N=document.createElement("div");N.className="trtc-resizable-resize-anchor ".concat(gl),_r(N,Object.assign({},ar.resizeAnchor,ar.rightAnchor)),this.rightAnchor=N;var O=document.createElement("div");O.className="trtc-resizable-resize-anchor ".concat(Lr),_r(O,Object.assign({},ar.resizeAnchor,ar.bottomLeftAnchor)),this.bottomLeftAnchor=O;var z=document.createElement("div");z.className="trtc-resizable-resize-anchor ".concat(Ur),_r(z,Object.assign({},ar.resizeAnchor,ar.bottomAnchor)),this.bottomAnchor=z;var X=document.createElement("div");X.className="trtc-resizable-resize-anchor ".concat(Ig),_r(X,Object.assign({},ar.resizeAnchor,ar.bottomRightAnchor)),this.bottomRightAnchor=X,this.options.anchorMode!==aa.Both&&this.options.anchorMode!==aa.Edge||((L=this.resizeTarget)===null||L===void 0||L.appendChild(p),(oA=this.resizeTarget)===null||oA===void 0||oA.appendChild(v),(b=this.resizeTarget)===null||b===void 0||b.appendChild(N),(x=this.resizeTarget)===null||x===void 0||x.appendChild(z)),this.options.anchorMode!==aa.Both&&this.options.anchorMode!==aa.Corner||((tA=this.resizeTarget)===null||tA===void 0||tA.appendChild(pe),(uA=this.resizeTarget)===null||uA===void 0||uA.appendChild(B),(wA=this.resizeTarget)===null||wA===void 0||wA.appendChild(O),(XA=this.resizeTarget)===null||XA===void 0||XA.appendChild(X))},q.prototype.initResizeEvent=function(){var L,oA,b,x,tA,uA,wA,XA;(L=this.topLeftAnchor)===null||L===void 0||L.addEventListener("mousedown",this.mousedown,!1),(oA=this.topAnchor)===null||oA===void 0||oA.addEventListener("mousedown",this.mousedown,!1),(b=this.topRightAnchor)===null||b===void 0||b.addEventListener("mousedown",this.mousedown,!1),(x=this.leftAnchor)===null||x===void 0||x.addEventListener("mousedown",this.mousedown,!1),(tA=this.rightAnchor)===null||tA===void 0||tA.addEventListener("mousedown",this.mousedown,!1),(uA=this.bottomLeftAnchor)===null||uA===void 0||uA.addEventListener("mousedown",this.mousedown,!1),(wA=this.bottomAnchor)===null||wA===void 0||wA.addEventListener("mousedown",this.mousedown,!1),(XA=this.bottomRightAnchor)===null||XA===void 0||XA.addEventListener("mousedown",this.mousedown,!1)},q.prototype.mousedown=function(L){if(L.button===0){if(L.preventDefault(),this.options.stopPropagation&&L.stopPropagation(),this.currentAnchor=L.target,this.resizeStartLeft=L.screenX,this.resizeStartTop=L.screenY,document.defaultView&&this.resizeTarget){var oA=document.defaultView.getComputedStyle(this.resizeTarget);this.originTop=window.parseInt(oA.top),this.originLeft=window.parseInt(oA.left),this.originWidth=this.resizeTarget.offsetWidth,this.originHeight=this.resizeTarget.offsetHeight,lg.debug("resize origin:",this.originTop,this.originLeft,this.originWidth,this.originHeight)}else lg.debug("".concat(this.logPrefix,"mouseDown 'resizeTarget' is null"));document.addEventListener("mousemove",this.mousemove,!1),document.addEventListener("mouseup",this.mouseup,!1)}},q.prototype.mousemove=function(L){if(this.container&&this.resizeTarget&&this.currentAnchor){var oA,b=this.currentAnchor.classList[1],x=this.originLeft,tA=this.originTop,uA=this.originWidth,wA=this.originHeight;switch(b){case PE:tA=(oA=this._resizeTop(L)).top,wA=oA.height,x=(oA=this._resizeLeft(L)).left,uA=oA.width,this.options.keepRatio&&(uA/this.originWidththis.container.offsetWidth-this.originLeft&&(uA=this.container.offsetWidth-this.originLeft,wA=this.originHeight*uA/this.originWidth,tA=this.originTop+this.originHeight-wA));break;case Ju:tA=(oA=this._resizeTop(L)).top,wA=oA.height,uA=this._resizeRight(L),this.options.keepRatio&&(uA/this.originWidththis.container.offsetHeight-this.originTop&&(wA=this.container.offsetHeight-this.originTop,uA=this.originWidth*wA/this.originHeight,x=this.originLeft+this.originWidth-uA));break;case gl:uA=this._resizeRight(L),this.options.keepRatio&&((wA=uA*this.originHeight/this.originWidth)<20?uA=(wA=20)*this.originWidth/this.originHeight:!this.options.canExceedContainer&&wA>this.container.offsetHeight-this.originTop&&(uA=(wA=this.container.offsetHeight-this.originTop)*this.originWidth/this.originHeight));break;case Lr:wA=this._resizeBottom(L),x=(oA=this._resizeLeft(L)).left,uA=oA.width,this.options.keepRatio&&(uA/this.originWidththis.container.offsetWidth-this.originLeft&&(wA=(uA=this.container.offsetWidth-this.originLeft)*this.originHeight/this.originWidth));break;case Ig:wA=this._resizeBottom(L),uA=this._resizeRight(L),this.options.keepRatio&&(uA/this.originWidththis.originLeft+this.originWidth-20&&(b=this.originLeft+this.originWidth-20,x=20),{left:b,width:x}},q.prototype._resizeTop=function(L){var oA=L.screenY-this.resizeStartTop,b=this.originTop+oA,x=this.originHeight-oA;return!this.options.canExceedContainer&&b<0?(b=0,x=this.originHeight+this.originTop):b>this.originTop+this.originHeight-20&&(b=this.originTop+this.originHeight-20,x=20),{top:b,height:x}},q.prototype._resizeRight=function(L){if(!this.container)return lg.debug("".concat(this.logPrefix,"_resizeRight error. No container:"),this.container),0;var oA=L.screenX-this.resizeStartLeft,b=this.originWidth+oA;return b<20?b=20:!this.options.canExceedContainer&&b>this.container.offsetWidth-this.originLeft&&(b=this.container.offsetWidth-this.originLeft),b},q.prototype._resizeBottom=function(L){if(!this.container)return lg.debug("".concat(this.logPrefix,"_resizeBottom error. No container:"),this.container),0;var oA=L.screenY-this.resizeStartTop,b=this.originHeight+oA;return b<20?b=20:!this.options.canExceedContainer&&b>this.container.offsetHeight-this.originTop&&(b=this.container.offsetHeight-this.originTop),b},q.prototype.mouseup=function(){document.removeEventListener("mousemove",this.mousemove,!1),document.removeEventListener("mouseup",this.mouseup,!1),this.currentAnchor=null,this.resizeStartLeft=0,this.resizeStartTop=0,this.originLeft=0,this.originTop=0,this.originWidth=0,this.originHeight=0},q.prototype.on=function(L,oA){var b=this.callbacksMap.get(L);b?b.push(oA):this.callbacksMap.set(L,[oA])},q.prototype.off=function(L,oA){var b=this.callbacksMap.get(L);b&&(b=b.filter(function(x){return x!=oA}),this.callbacksMap.set(L,b))},q.prototype.emit=function(L){for(var oA=[],b=1;bx?b:x,this.previewWidth=this.mixingVideoWidth*this.previewScale,this.previewHeight=this.mixingVideoHeight*this.previewScale,this.previewLeft=(L-this.previewWidth)/2,this.previewTop=(oA-this.previewHeight)/2}else console.debug("".concat(this.logPrefix,"calcPreviewScale failed, no HTML element to display"))},q.prototype.updateOverlay=function(){if(this.moveAndResizeOverlay){var L=void 0,oA=void 0,b=void 0,x=void 0;if(this.selectedMediaIndex>=0){var tA=this.mediaList[this.selectedMediaIndex],uA={left:tA.rect.left*this.previewScale,top:tA.rect.top*this.previewScale,right:tA.rect.right*this.previewScale,bottom:tA.rect.bottom*this.previewScale};L="".concat(uA.left+this.previewLeft,"px"),oA="".concat(uA.top+this.previewTop,"px"),b="".concat(uA.right-uA.left,"px"),x="".concat(uA.bottom-uA.top,"px");var wA=tA.interaction||{},XA=wA.showBorder!==!1,pe=wA.showResizeAnchors!==!1,p=wA.draggable!==!1,B=wA.canExceedCanvas!==!1;this.logger.debug("".concat(this.logPrefix,"updateOverlay: interaction config -"),{showBorder:XA,showResizeAnchors:pe,draggable:p,canExceedCanvas:B}),this.updateCanExceedContainer(B),this.moveAndResizeOverlay.style.display="block",this.moveAndResizeOverlay.style.border=XA?"1px solid #3D7EFD":"none",this.resizableHandler&&this.resizableHandler.setVisible(pe),this.movableHandler&&(this.logger.debug("".concat(this.logPrefix,"updateOverlay: setting movableHandler.setEnabled(").concat(p,")")),this.movableHandler.setEnabled(p))}else L="".concat(this.previewLeft,"px"),oA="".concat(this.previewTop,"px"),b="0px",x="0px",this.moveAndResizeOverlay.style.display="none";this.moveAndResizeOverlay.style.left=L,this.moveAndResizeOverlay.style.top=oA,this.moveAndResizeOverlay.style.width=b,this.moveAndResizeOverlay.style.height=x}},q.prototype.onMove=function(L,oA){var b;console.debug("".concat(this.logPrefix,"onMove: ").concat(L," ").concat(oA));var x=this.mediaList[this.selectedMediaIndex];if(x&&this.moveAndResizeOverlay){var tA={left:L-this.previewLeft,top:oA-this.previewTop,right:L-this.previewLeft+this.moveAndResizeOverlay.offsetWidth,bottom:oA-this.previewTop+this.moveAndResizeOverlay.offsetHeight};this.doAdsorption(tA);var uA={left:Math.round(tA.left/this.previewScale),top:Math.round(tA.top/this.previewScale),right:Math.round(tA.right/this.previewScale),bottom:Math.round(tA.bottom/this.previewScale)};(b=this.eventEmitter)===null||b===void 0||b.emit("onSourceMoved",sA({},x),uA)}else console.debug("".concat(this.logPrefix,"onMove no selected media"))},q.prototype.doAdsorption=function(L){var oA=this.BOUNDARY_ADSORPTION_THRESHOLD;Math.abs(L.left)pe&&(pe=B,XA=L[p])}return XA},q.prototype.emitOnSelect=function(L){var oA;if(L){for(var b=this.mediaList.length,x=0;x=p.rect.left&&wA<=p.rect.right&&XA>=p.rect.top&&XA<=p.rect.bottom&&((oA=p.interaction)===null||oA===void 0?void 0:oA.selectable)!==!1&&(this.clickedMediaSources.push(p),this.mediaList[this.selectedMediaIndex]&&p.id===this.mediaList[this.selectedMediaIndex].id&&(this.oldSelectedIndex=this.clickedMediaSources.length-1))}this.mousedownLeft=L.screenX,this.mousedownTop=L.screenY}this.clickedMediaSources.length>0?this.eventButton===2&&this.oldSelectedIndex===-1?(this.newSelected=this.getMaxZOrderMedia(this.clickedMediaSources),console.debug("".concat(this.logPrefix,"onContainerMousedown find clicked media source:"),this.newSelected),this.emitOnSelect(this.newSelected),this.clickedMediaSources.splice(0,this.clickedMediaSources.length)):(document.addEventListener("mousemove",this.onContainerMousemove,!1),document.addEventListener("mouseup",this.onContainerMouseup,!1)):(this.newSelected=null,console.debug("".concat(this.logPrefix,"onContainerMousedown find clicked media source:"),this.newSelected),this.emitOnSelect(null),this.mousedownLeft=null,this.mousedownTop=null,this.eventButton=null)}},q.prototype.onContainerMousemove=function(L){var oA;if(L.target&&this.container&&this.mousedownLeft!==null&&this.mousedownTop!==null){var b=L.screenX-this.mousedownLeft,x=L.screenY-this.mousedownTop;(Math.abs(b)>=5||Math.abs(x)>=5)&&(this.oldSelectedIndex>=0?(console.debug("".concat(this.logPrefix,"onContainerMousemove move or resize old selected media source, clear data:"),this.clickedMediaSources,this.oldSelectedIndex),this.clickedMediaSources.splice(0,this.clickedMediaSources.length),this.oldSelectedIndex=-1):this.clickedMediaSources.length>0&&(this.newSelected=this.getMaxZOrderMedia(this.clickedMediaSources),console.debug("".concat(this.logPrefix,"onContainerMousemove find clicked media source:"),this.newSelected),this.emitOnSelect(this.newSelected),this.clickedMediaSources.splice(0,this.clickedMediaSources.length),(oA=this.moveAndResizeOverlay)===null||oA===void 0||oA.dispatchEvent(new MouseEvent("mousedown",{screenX:this.mousedownLeft,screenY:this.mousedownTop,button:this.eventButton}))))}},q.prototype.onContainerMouseup=function(L){if(document.removeEventListener("mousemove",this.onContainerMousemove,!1),document.removeEventListener("mouseup",this.onContainerMouseup,!1),console.debug("".concat(this.logPrefix,"onContainerMouseup data:"),this.clickedMediaSources,this.oldSelectedIndex),L.target&&this.container){if(this.clickedMediaSources.length>0)if(this.oldSelectedIndex>=0){if(this.eventButton===0){var oA=(this.oldSelectedIndex+1)%this.clickedMediaSources.length;this.newSelected=this.clickedMediaSources[oA],console.debug("".concat(this.logPrefix,"onContainerMouseup find clicked media source:"),this.newSelected),this.emitOnSelect(this.newSelected)}}else this.newSelected=this.getMaxZOrderMedia(this.clickedMediaSources),console.debug("".concat(this.logPrefix,"onContainerMouseup find clicked media source:"),this.newSelected),this.emitOnSelect(this.newSelected)}else console.debug("".concat(this.logPrefix,"onContainerMouseup click outside of mixing video image")),this.emitOnSelect(null);this.mousedownLeft=null,this.mousedownTop=null,this.clickedMediaSources.splice(0,this.clickedMediaSources.length),this.oldSelectedIndex=-1,this.newSelected=null,this.eventButton=null},q.prototype.onRightButtonClicked=function(L){var oA;console.debug("".concat(this.logPrefix,"onRightButtonClicked:"),L.target,L.currentTarget,L.buttons),L.preventDefault(),(oA=this.eventEmitter)===null||oA===void 0||oA.emit("onRightButtonClicked",sA({},this.mediaList[this.selectedMediaIndex]))},q}(),Fl=function(){function q(L){if(this.logPrefix="[TRTCMediaMixingManager]",this.eventEmitter=new qe,this.publishParams={videoEncoderParams:{videoResolution:r.TRTCVideoResolution.TRTCVideoResolution_1280_720,resMode:r.TRTCVideoResolutionMode.TRTCVideoResolutionModeLandscape,videoFps:15,videoBitrate:1800},canvasColor:0},this.mediaMixingDesigner=null,this.sourceList=[],this.trtcSourceMap=new Map,this.mixVideoTrack=null,this.selectedSource=null,this.view=null,this.screensWithSystemAudio=new Set,q.mediaMixingManager)return q.mediaMixingManager;q.mediaMixingManager=this,this.logger=L.logger,this.trtc=L.trtc,this.trtcCloud=L.trtcCloud,this.onSourceSelected=this.onSourceSelected.bind(this),this.onSourceMoved=this.onSourceMoved.bind(this),this.onSourceResized=this.onSourceResized.bind(this),this.onRightButtonClicked=this.onRightButtonClicked.bind(this)}return q.prototype.destroy=function(){return IA(this,void 0,Promise,function(){var L,oA,b,x,tA;return cA(this,function(uA){switch(uA.label){case 0:this.view=null,uA.label=1;case 1:return uA.trys.push([1,3,,4]),[4,this.trtc.stopPlugin("VideoMixer")];case 2:return uA.sent(),[3,4];case 3:return L=uA.sent(),this.logger.error("".concat(this.logPrefix," destroy and stopPlugin error:"),L),[3,4];case 4:if(!(this.screensWithSystemAudio.size>0))return[3,12];uA.label=5;case 5:uA.trys.push([5,10,,11]),oA=0,b=Array.from(this.screensWithSystemAudio),uA.label=6;case 6:return oA1){var pe=[];this.queue=this.queue.filter(function(p,B){return B===0||p.functionName!==x||(pe.push(p),!1)}),pe.forEach(function(p){p.reject(new Error("aborted by newer task"))})}this.queue.push(wA)}return this.isRunning||this.callNext(),XA},q.prototype.shift=function(){return this.queue.shift()},q.prototype.callNext=function(){var L=this;if(!this.isRunning&&this.length!==0){var oA=this.queue[0],b=oA.fn,x=oA.args,tA=oA.context,uA=oA.resolve,wA=oA.reject;this.isRunning=!0,b.apply(tA,x).then(uA,wA).finally(function(){L.isRunning=!1,L.shift(),L.callNext()})}},q}(),DI=new WeakMap,iu=new WeakMap,Ba=new WeakMap;function cl(q,L){return L===void 0&&(L={}),function(oA,b,x){var tA=x.value,uA=L.deduplicate,wA=uA!==void 0&&uA;return x.value=function(){for(var XA=[],pe=0;pe0;if(L&&!this.isMessageListenerRegistered)return this.trtc.on(U.default.EVENT.REALTIME_TRANSCRIBER_MESSAGE,this.handleMessageEvent),void(this.isMessageListenerRegistered=!0);!L&&this.isMessageListenerRegistered&&(this.trtc.off(U.default.EVENT.REALTIME_TRANSCRIBER_MESSAGE,this.handleMessageEvent),this.isMessageListenerRegistered=!1)},q.prototype.log=function(){for(var L,oA,b=[],x=0;x0&&clearTimeout(su),su=window.setTimeout(function(){YE.apply(q,L),su=-1},Jr)}));var qu=new Map,fC=function(q){function L(b){b===void 0&&(b={});var x=q.call(this)||this;x._version="",x._frameWorkType=30,x._component=0,x._language=0,x._networkProxy={},x._localView=null,x._autoRecvAudio=!0,x._autoRecvVideo=!1,x._localTestView=null,x._isVideoPublish=!0,x._localRenderParams={rotation:r.TRTCVideoRotation.TRTCVideoRotation0,fillMode:r.TRTCVideoFillMode.TRTCVideoFillMode_Fill,mirrorType:r.TRTCVideoMirrorType.TRTCVideoMirrorType_Auto},x._encoderMirror=void 0,x._videoProfile={},x._isAudioPublish=!0,x._audioMuteType=!1,x._audioProfile=U.default.TYPE.AUDIO_PROFILE_STANDARD,x._captureVolume=100,x._playoutVolume=100,x._isSharingScreen=!1,x._remoteStreamConfig=new Map,x._remoteStreamMap=new Map,x._cameraList=[],x._microphoneList=[],x._speakerList=[],x._currentCamera={},x._currentMicrophone={},x._currentSpeaker={},x._currentCameraId="",x._currentMicrophoneId="",x._currentSpeakerId="",x._screenShareParams={option:{}},x._isMobile=$I,x._isFrontCamera=!0,x._cameraVideoTrack=null,x._smallStreamVideoProfile=void 0,x._qosPreference=void 0,x._defaultVideoProfile={width:640,height:480,frameRate:15,bitrate:900},x._defaultScreenProfile={width:1920,height:1080,frameRate:15,bitrate:1500},x._defaultSmallVideoProfile={width:160,height:120,frameRate:15,bitrate:200},x._isVirtualBackground=!1,x._isTestVirtualBackground=!1,x._isBeautyEnabled=!1,x._isTestBeautyEnabled=!1,x._remoteStatisticsUserIdList=[],x._hasJoinedRoom=!1,x._isExitingRoom=!1,x._version=mC;var tA=b.frameWorkType,uA=tA===void 0?30:tA,wA=b.component,XA=wA===void 0?0:wA,pe=b.language,p=pe===void 0?0:pe;return x._frameWorkType=uA,x._component=XA,x._language=p,x._trtc=U.default.create({enableSEI:L.enableSEI,assetsPath:L.assetsPath,enableVolumeControlInIOS:!0,plugins:[j.default,I.LEBPlayer,w.RealtimeTranscriber]}),x._testTrtc=U.default.create(),x._log=U.default._loggerManager,x.logger=new tc(ou,{seq:Hu++}),x._echoCancellation=void 0,x._noiseSuppression=void 0,x._autoGainControl=void 0,x._addTRTCEvents(),x.handleDeviceChange=x.handleDeviceChange.bind(x),qu.set(x,{fn:x.handleDeviceChange,self:x}),x}var oA;return function(b,x){if(typeof x!="function"&&x!==null)throw new TypeError("Class extends value "+String(x)+" is not a constructor or null");function tA(){this.constructor=b}lA(b,x),b.prototype=x===null?Object.create(x):(tA.prototype=x.prototype,new tA)}(L,q),L.getPlugin=function(b){return b==="VirtualBackground"?h.VirtualBackground:b==="BasicBeauty"?f.BasicBeauty:b==="VideoMixer"?j.default:null},L.getTRTCShareInstance=function(b){return L.shareInstance||(L.shareInstance=new L(b)),L.shareInstance},L.setLogLevel=function(b,x){var tA,uA=((tA={})[r.TRTCLogLevel.TRTCLogLevelVerbose]=0,tA[r.TRTCLogLevel.TRTCLogLevelDebug]=1,tA[r.TRTCLogLevel.TRTCLogLevelInfo]=2,tA[r.TRTCLogLevel.TRTCLogLevelWarn]=3,tA[r.TRTCLogLevel.TRTCLogLevelError]=4,tA[r.TRTCLogLevel.TRTCLogLevelFatal]=4,tA[r.TRTCLogLevel.TRTCLogLevelNone]=5,tA),wA=uA[b];ds(wA)&&(wA=uA[r.TRTCLogLevel.TRTCLogLevelInfo]);var XA=!Pi(x)||x;U.default.setLogLevel(wA,XA)},L.destroyTRTCShareInstance=function(){L.shareInstance&&(L.shareInstance._destroy(),L.shareInstance=null),Array.from(L.subCloudMap.keys()).forEach(function(b){return b._destroy()})},L.callExperimentalAPI=function(b){console.log("static ".concat(Pt,".callExperimentalAPI"),b);var x=Rs(b);if(x!==b){var tA=x.api,uA=x.params;if(tA&&uA)try{switch(tA){case"enableSEI":L.enableSEI=uA.enable;break;case"setAssetsPath":L.assetsPath=uA.assetsPath}}catch(wA){throw wA}}},L.prototype.createSubCloud=function(){if(this!==L.shareInstance)return null;var b=new L;return this._inheritPropertiesToSubCloud(b),this._inheritEventsToSubCloud(b),L.subCloudMap.set(b,b),b},L.prototype.destroy=function(){this!==L.shareInstance?(L.subCloudMap.get(this)&&L.subCloudMap.delete(this),this._destroy()):L.destroyTRTCShareInstance()},L.prototype._destroy=function(){qu.delete(this),this.removeAllListeners(),this._trtc.off("*"),this._trtc.destroy(),this._trtc=null,this._testTrtc.off("*"),this._testTrtc.destroy(),this._testTrtc=null},L.prototype.getSDKVersion=function(){return this._version||""},L.prototype.enterRoom=function(b,x){return IA(this,void 0,Promise,function(){var tA,uA,wA,XA,pe,p,B,v,N,O,z,X,rA,DA,GA,VA,ee,Ee;return cA(this,function(We){switch(We.label){case 0:if(tA=b.sdkAppId,uA=b.userId,wA=b.userSig,XA=b.roomId,pe=b.strRoomId,p=b.role,B=b.privateMapKey,v=b.businessInfo,N=b.enableAutoPlayDialog,O=b.proxy,z=b.streamId,X=b.userDefineRecordId,this.logger.update({sdkAppId:tA,userId:uA}),this.logger.info("".concat(Pt,".enterRoom with params: "),b,x),O&&(this._networkProxy=O),!(tA&&uA&&wA))return[3,5];We.label=1;case 1:return We.trys.push([1,3,,4]),rA={sdkAppId:tA,userId:uA,userSig:wA,roomId:XA,strRoomId:pe,role:Do[p],scene:pA[x],autoReceiveAudio:this._autoRecvAudio,autoReceiveVideo:this._autoRecvVideo,frameWorkType:this._frameWorkType,component:this._component,language:this._language},rA=B?sA(sA({},rA),{privateMapKey:B}):rA,rA=v?sA(sA({},rA),{businessInfo:v}):rA,DA=N||this._enableAutoPlayDialog,rA=Pi(DA)?sA(sA({},rA),{enableAutoPlayDialog:DA}):rA,rA=this._networkProxy?sA(sA({},rA),{proxy:this._networkProxy}):rA,rA=z?sA(sA({},rA),{streamId:z}):rA,rA=X?sA(sA({},rA),{userDefineRecordId:X}):rA,rA=this._latencyLevel!==void 0?sA(sA({},rA),{latencyLevel:this._latencyLevel}):rA,GA=Qr(),[4,this._trtc.enterRoom(rA)];case 2:return We.sent(),this._hasJoinedRoom=!0,VA=Qr()-GA,this.emit("onEnterRoom",VA),[3,4];case 3:return ee=We.sent(),Ee=(Ee=this._transformTRTCErrorCode(ee,"enterRoom"))<0?Ee:-1,this.emit("onEnterRoom",Ee),this._callFunctionErrorManage(ee,"enterRoom"),[3,4];case 4:return[3,6];case 5:this._emitError(mI),We.label=6;case 6:return[2]}})})},L.prototype.exitRoom=function(){return IA(this,void 0,Promise,function(){var b;return cA(this,function(x){switch(x.label){case 0:return x.trys.push([0,2,,3]),this.logger.info("".concat(Pt,".exitRoom")),this._isExitingRoom=!0,this._isSharingScreen&&this.stopScreenShare(),this.resetTRTCCloud(),this.stopLocalPreview(),this.stopLocalAudio(),[4,this._trtc.exitRoom()];case 1:return x.sent(),this._hasJoinedRoom=!1,this._isExitingRoom=!1,this._isVideoPublish=!0,this._isAudioPublish=!0,this.emit("onExitRoom",nl.exitRoom),[3,3];case 2:return b=x.sent(),this._callFunctionErrorManage(b,"exitRoom"),[3,3];case 3:return[2]}})})},L.prototype.switchRole=function(b){return IA(this,void 0,void 0,function(){var x;return cA(this,function(tA){switch(tA.label){case 0:this.logger.info("".concat(Pt,".switchRole with param: "),b),tA.label=1;case 1:return tA.trys.push([1,3,,4]),[4,this._trtc.switchRole(Do[b])];case 2:return tA.sent(),this.emit("onSwitchRole",0,"switch role success, role = ".concat(b,", ").concat(Do[b])),[3,4];case 3:return x=tA.sent(),this.emit("onSwitchRole",x?.getCode(),x.message),[3,4];case 4:return[2]}})})},L.prototype.setDefaultStreamRecvMode=function(b,x){return IA(this,void 0,void 0,function(){return cA(this,function(tA){return this.logger.info("".concat(Pt,".setDefaultStreamRecvMode with param: "),{autoRecvAudio:b,autoRecvVideo:x}),Pi(b)&&(this._autoRecvAudio=b),Pi(x)&&(this._autoRecvVideo=x),[2]})})},L.prototype.resetTRTCCloud=function(){this._setIsAudioPublish(!0),this._setAudioMuteType(!1),this._echoCancellation=void 0,this._noiseSuppression=void 0,this._autoGainControl=void 0,this._isVirtualBackground=!1,this._isTestVirtualBackground=!1,this._remoteStatisticsUserIdList=[],this._resetBeautyStyle()},L.prototype._updateLocalVideo=function(){return IA(this,void 0,void 0,function(){var b;return cA(this,function(x){switch(x.label){case 0:return x.trys.push([0,2,,3]),[4,this._trtc.updateLocalVideo(this._generateLocalVideoData())];case 1:return x.sent(),[3,3];case 2:if((b=x.sent()).code!==U.default.ERROR_CODE.OPERATION_ABORT)throw b;return[3,3];case 3:return[2]}})})},L.prototype._updateLocalTestVideo=function(){return IA(this,void 0,void 0,function(){var b;return cA(this,function(x){switch(x.label){case 0:return x.trys.push([0,2,,3]),[4,this._testTrtc.updateLocalVideo(this._generateLocalTestVideoData())];case 1:return x.sent(),[3,3];case 2:if((b=x.sent()).code!==U.default.ERROR_CODE.OPERATION_ABORT)throw b;return[3,3];case 3:return[2]}})})},L.prototype._updateLocalScreen=function(){return IA(this,void 0,void 0,function(){var b;return cA(this,function(x){switch(x.label){case 0:return x.trys.push([0,2,,3]),[4,this._trtc.updateScreenShare(this._getScreenShareParams())];case 1:return x.sent(),[3,3];case 2:if((b=x.sent()).code!==U.default.ERROR_CODE.OPERATION_ABORT)throw b;return[3,3];case 3:return[2]}})})},L.prototype._updateRemoteVideo=function(b,x){return IA(this,void 0,void 0,function(){var tA;return cA(this,function(uA){switch(uA.label){case 0:if(!this._hasJoinedRoom||this._isExitingRoom)return[2];uA.label=1;case 1:return uA.trys.push([1,3,,4]),[4,this._trtc.updateRemoteVideo(this._generateRemoteVideoData(b,x))];case 2:return uA.sent(),[3,4];case 3:if((tA=uA.sent()).code!==U.default.ERROR_CODE.OPERATION_ABORT)throw tA;return[3,4];case 4:return[2]}})})},L.prototype.startLocalPreview=function(){for(var b=[],x=0;x9)throw new Error("beautyLevel must be between 0 and 9");if(wA<0||wA>9)throw new Error("whitenessLevel must be between 0 and 9");if(XA<0||XA>9)throw new Error("ruddinessLevel must be between 0 and 9");z.label=1;case 1:return z.trys.push([1,8,,9]),B=wA/9,v=XA/9,(p=uA/9)===0&&B===0&&v===0?[4,b.stopPlugin(rn)]:[3,3];case 2:return z.sent(),pe?this._isTestBeautyEnabled=!1:this._isBeautyEnabled=!1,[3,7];case 3:return N={beauty:p,brightness:B,ruddy:v},x?[3,5]:[4,b.startPlugin(rn,N)];case 4:return z.sent(),pe?this._isTestBeautyEnabled=!0:this._isBeautyEnabled=!0,[3,7];case 5:return[4,b.updatePlugin(rn,N)];case 6:z.sent(),z.label=7;case 7:return[3,9];case 8:throw O=z.sent(),pe?this.logger.error("".concat(Pt,".").concat("setTestBeautyStyle"," fail: "),O):this.logger.error("".concat(Pt,".").concat("setBeautyStyle"," fail: "),O),O;case 9:return[2]}})})},L.prototype._resetBeautyStyle=function(){return IA(this,void 0,void 0,function(){return cA(this,function(b){switch(b.label){case 0:return this._isBeautyEnabled?[4,this._trtc.stopPlugin(rn)]:[3,2];case 1:b.sent(),this._isBeautyEnabled=!1,b.label=2;case 2:return this._isTestBeautyEnabled?[4,this._testTrtc.stopPlugin(rn)]:[3,4];case 3:b.sent(),this._isTestBeautyEnabled=!1,b.label=4;case 4:return[2]}})})},L.prototype.getMicDevicesList=function(){return IA(this,void 0,Promise,function(){var b,x,tA;return cA(this,function(uA){switch(uA.label){case 0:this.logger.info("".concat(Pt,".getMicDevicesList")),uA.label=1;case 1:return uA.trys.push([1,5,,6]),[4,U.default.getMicrophoneList()];case 2:return b=uA.sent(),x=b.map(function(wA){return sA(sA({},wA),{deviceName:wA.label})}),this._microphoneList=b,JSON.stringify(this._currentMicrophone)!=="{}"?[3,4]:(this._currentMicrophone=this.getDefaultDeviceInfo(b),this._currentMicrophoneId=this._currentMicrophone.deviceId,[4,this.setCurrentMicDevice(this._currentMicrophoneId)]);case 3:uA.sent(),uA.label=4;case 4:return[2,Promise.resolve(x)];case 5:return tA=uA.sent(),this._callFunctionErrorManage(tA,"getMicDevicesList"),[2,Promise.resolve([])];case 6:return[2]}})})},L.prototype.setCurrentMicDevice=function(b){var x;return IA(this,void 0,Promise,function(){var tA;return cA(this,function(uA){switch(uA.label){case 0:this.logger.info("".concat(Pt,".setCurrentMicDevice with params: "),{micId:b}),uA.label=1;case 1:return uA.trys.push([1,4,,5]),b?(this._setCurrentMicrophoneId(b),[4,this._updateLocalAudio()]):[2,!1];case 2:return uA.sent(),[4,this._updateLocalTestAudio()];case 3:return uA.sent(),this._currentMicrophone=this._microphoneList.find(function(wA){return wA.deviceId===b})||{},[3,5];case 4:throw tA=uA.sent(),this._setCurrentMicrophoneId((x=this._currentMicrophone)===null||x===void 0?void 0:x.deviceId),this._callFunctionErrorManage(tA,"setCurrentMicDevice"),tA;case 5:return[2]}})})},L.prototype.getCurrentMicDevice=function(){this.logger.info("".concat(Pt,".getCurrentMicDevice"));var b=this._currentMicrophone,x=b.deviceId,tA=b.label,uA=b.kind,wA=b.groupId;return new Oe(x,tA,uA,tA,wA)},L.prototype.getSpeakerDevicesList=function(){return IA(this,void 0,Promise,function(){var b,x,tA;return cA(this,function(uA){switch(uA.label){case 0:this.logger.info("".concat(Pt,".getSpeakerDevicesList")),uA.label=1;case 1:return uA.trys.push([1,5,,6]),[4,U.default.getSpeakerList()];case 2:return b=uA.sent(),x=b.map(function(wA){return sA(sA({},wA),{deviceName:wA.label})}),this._speakerList=b,JSON.stringify(this._currentSpeaker)!=="{}"?[3,4]:(this._currentSpeaker=this.getDefaultDeviceInfo(b),this._currentSpeakerId=this._currentSpeaker.deviceId,[4,this.setCurrentSpeakerDevice(this._currentSpeakerId)]);case 3:uA.sent(),uA.label=4;case 4:return[2,Promise.resolve(x)];case 5:return tA=uA.sent(),this._callFunctionErrorManage(tA,"getSpeakerDevicesList"),[2,Promise.resolve([])];case 6:return[2]}})})},L.prototype.setCurrentSpeakerDevice=function(b){return IA(this,void 0,Promise,function(){var x;return cA(this,function(tA){switch(tA.label){case 0:this.logger.info("".concat(Pt,".setCurrentSpeakerDevice with params: "),{speakerId:b}),tA.label=1;case 1:return tA.trys.push([1,3,,4]),b?[4,U.default.setCurrentSpeaker(b)]:[2,!1];case 2:return tA.sent(),this._setCurrentSpeakerId(b),this._currentSpeaker=this._speakerList.find(function(uA){return uA.deviceId===b})||{},[3,4];case 3:throw x=tA.sent(),this._callFunctionErrorManage(x,"setCurrentSpeakerDevice"),x;case 4:return[2]}})})},L.prototype.getCurrentSpeakerDevice=function(){this.logger.info("".concat(Pt,".getCurrentSpeakerDevice"));var b=this._currentSpeaker,x=b.deviceId,tA=b.label,uA=b.kind,wA=b.groupId;return new Oe(x,tA,uA,tA,wA)},L.prototype.startCameraDeviceTest=function(b){return IA(this,void 0,void 0,function(){var x;return cA(this,function(tA){switch(tA.label){case 0:if(this.logger.info("".concat(Pt,".startCameraDeviceTest with params: "),b),!b)return[2];this._setLocalTestView(b),tA.label=1;case 1:return tA.trys.push([1,3,,7]),[4,this._testTrtc.startLocalVideo(this._generateLocalTestVideoData())];case 2:return tA.sent(),[3,7];case 3:return(x=tA.sent()).code!==U.default.ERROR_CODE.OPERATION_ABORT?[3,5]:[4,this._updateLocalTestVideo()];case 4:return tA.sent(),[3,6];case 5:throw this._callFunctionErrorManage(x,"startCameraDeviceTest"),x;case 6:return[3,7];case 7:return[2]}})})},L.prototype.stopCameraDeviceTest=function(){return IA(this,void 0,void 0,function(){return cA(this,function(b){switch(b.label){case 0:return this.logger.info("".concat(Pt,".stopCameraDeviceTest")),this._setLocalTestView(null),[4,this._testTrtc.stopLocalVideo()];case 1:return b.sent(),[2]}})})},L.prototype.startMicDeviceTest=function(b){return IA(this,void 0,void 0,function(){var x,tA=this;return cA(this,function(uA){switch(uA.label){case 0:this.logger.info("".concat(Pt,".startMicDeviceTest with params: "),b),uA.label=1;case 1:return uA.trys.push([1,3,,7]),[4,this._testTrtc.startLocalAudio(this._generateLocalTestAudioData())];case 2:return uA.sent(),[3,7];case 3:return(x=uA.sent()).code!==U.default.ERROR_CODE.OPERATION_ABORT?[3,5]:[4,this._updateLocalTestAudio()];case 4:return uA.sent(),[3,6];case 5:throw this._callFunctionErrorManage(x,"startMicDeviceTest"),x;case 6:return[3,7];case 7:return this._testTrtc.on(U.default.EVENT.AUDIO_VOLUME,function(wA){wA?.result.forEach(function(XA){var pe=XA.userId,p=XA.volume;pe===""&&tA.emit("onTestMicVolume",p)})}),[4,this._testTrtc.enableAudioVolumeEvaluation(b)];case 8:return uA.sent(),[2]}})})},L.prototype.stopMicDeviceTest=function(){return IA(this,void 0,void 0,function(){return cA(this,function(b){switch(b.label){case 0:return this.logger.info("".concat(Pt,".stopMicDeviceTest")),[4,this._testTrtc.stopLocalAudio()];case 1:return b.sent(),[2]}})})},L.prototype.callExperimentalAPI=function(b){return IA(this,void 0,void 0,function(){var x,tA,uA;return cA(this,function(wA){switch(wA.label){case 0:if(this.logger.info("".concat(Pt,".callExperimentalAPI"),b),(x=Rs(b))===b)return[2];if(tA=x.api,uA=x.params,!tA||!uA)return[2];wA.label=1;case 1:switch(wA.trys.push([1,25,,26]),tA){case"setFramework":return[3,2];case"enableAudioAEC":return[3,3];case"enableAudioANS":return[3,4];case"enableAudioAGC":return[3,5];case"KeyMetricsStats":return[3,6];case"setNetworkProxy":return[3,7];case"enableVirtualBackground":return[3,8];case"enableTestVirtualBackground":return[3,10];case"enableTestBeautyStyle":return[3,12];case"setVideoEncodeParamEx":return[3,14];case"enableAutoPlayDialog":return[3,15];case"setAudienceLatencyLevel":return[3,16];case"switchPlaybackQuality":return[3,17];case"requestPictureInPicture":return[3,19];case"exitPictureInPicture":return[3,21]}return[3,23];case 2:return this._handleSetFrameWork(uA),[3,24];case 3:return this._echoCancellation=!!uA.enable,[3,24];case 4:return this._noiseSuppression=!!uA.enable,[3,24];case 5:return this._autoGainControl=!!uA.enable,[3,24];case 6:return this._handleKeyMetricsStats(uA),[3,24];case 7:return this._networkProxy=uA,[3,24];case 8:return[4,this.setVirtualBackground(uA)];case 9:return wA.sent(),[3,24];case 10:return[4,this.setTestVirtualBackground(uA)];case 11:return wA.sent(),[3,24];case 12:return[4,this.setTestBeautyStyle(uA.style,uA.beautyLevel,uA.whitenessLevel,uA.ruddinessLevel)];case 13:return wA.sent(),[3,24];case 14:return this._setVideoEncodeParamEx(uA),[3,24];case 15:return this._enableAutoPlayDialog=!!uA.enable,[3,24];case 16:return this._latencyLevel=uA.latencyLevel,[3,24];case 17:return[4,this._switchPlaybackQuality(uA)];case 18:return wA.sent(),[3,24];case 19:return[4,this._requestPictureInPicture()];case 20:return wA.sent(),[3,24];case 21:return[4,this._exitPictureInPicture()];case 22:return wA.sent(),[3,24];case 23:return[3,24];case 24:return[3,26];case 25:throw wA.sent();case 26:return[2]}})})},L.prototype._handleSetFrameWork=function(b){var x=b.frameWork,tA=b.component,uA=b.language;zr(x)&&(this._frameWorkType=x),zr(tA)&&(this._component=tA),zr(uA)&&(this._language=uA)},L.prototype._handleKeyMetricsStats=function(b){var x=b.key,tA=b.opt,uA=b.value,wA=b.version,XA=tA===Jn;U.default._addKVStat({type:tA,key:x,value:uA,version:wA,useUV:XA,base:100})},L.prototype._setVideoEncodeParamEx=function(b){return IA(this,void 0,void 0,function(){return cA(this,function(x){switch(x.label){case 0:switch(b.streamType){case r.TRTCVideoStreamType.TRTCVideoStreamTypeBig:return[3,1];case r.TRTCVideoStreamType.TRTCVideoStreamTypeSub:return[3,3]}return[3,5];case 1:return[4,this.setVideoEncoderParam(b)];case 2:case 4:return x.sent(),[3,6];case 3:return[4,this.setSubStreamEncoderParam(b)];case 5:return[3,6];case 6:return[2]}})})},L.prototype._switchPlaybackQuality=function(b){return IA(this,void 0,void 0,function(){var x,tA,uA,wA,XA,pe,p,B;return cA(this,function(v){switch(v.label){case 0:if(tA=(x=b||{}).quality,uA=x.stream_list,wA=uA===void 0?[]:uA,!tA||wA.length===0)return[2];for(XA=null,pe=0,p=wA;pe1&&x[1]),height:+(x.length>2&&x[2])}},L.prototype._getTRTCVideoProfile=function(b,x){x===void 0&&(x={});var tA=x.videoWidth,uA=x.videoHeight,wA=x.videoResolution,XA=x.videoFps,pe=x.videoBitrate,p=x.resMode,B=x.resolutionMode,v={};switch(b){case r.TRTCVideoStreamType.TRTCVideoStreamTypeSub:v=this._defaultScreenProfile;break;case r.TRTCVideoStreamType.TRTCVideoStreamTypeSmall:v=this._defaultSmallVideoProfile;break;case r.TRTCVideoStreamType.TRTCVideoStreamTypeBig:default:v=this._defaultVideoProfile}if(ds(wA))ds(tA)||(v.width=tA),ds(uA)||(v.height=uA);else{var N=this._getTRTCResolution(wA);v.width=N.width,v.height=N.height}if(!ds(p)&&p===r.TRTCVideoResolutionMode.TRTCVideoResolutionModePortrait||!ds(B)&&B===r.TRTCVideoResolutionMode.TRTCVideoResolutionModePortrait){var O=v.height,z=v.width;v.width=O,v.height=z}return XA&&(v.frameRate=XA),pe&&(v.bitrate=pe),v},L.prototype._getTRTCStreamType=function(b){var x;return((x={})[r.TRTCVideoStreamType.TRTCVideoStreamTypeBig]=U.default.TYPE.STREAM_TYPE_MAIN,x[r.TRTCVideoStreamType.TRTCVideoStreamTypeSmall]=U.default.TYPE.STREAM_TYPE_MAIN,x[r.TRTCVideoStreamType.TRTCVideoStreamTypeSub]=U.default.TYPE.STREAM_TYPE_SUB,x)[b]},L.prototype._getTRTCFillMode=function(b){var x;return((x={})[r.TRTCVideoFillMode.TRTCVideoFillMode_Fill]=sl.COVER,x[r.TRTCVideoFillMode.TRTCVideoFillMode_Fit]=sl.CONTAIN,x)[b]},L.prototype._getTRTCCloudVideoFillMode=function(b){var x;return((x={})[sl.COVER]=r.TRTCVideoFillMode.TRTCVideoFillMode_Fill,x[sl.CONTAIN]=r.TRTCVideoFillMode.TRTCVideoFillMode_Fit,x)[b]},L.prototype._getTRTCCloudMirrorType=function(b){return b===!0?r.TRTCVideoMirrorType.TRTCVideoMirrorType_Enable:r.TRTCVideoMirrorType.TRTCVideoMirrorType_Disable},L.prototype._getLocalRenderMirror=function(b){var x;return b===r.TRTCVideoMirrorType.TRTCVideoMirrorType_Auto?!this._getIsMobile()||this._getIsFrontCamera():((x={})[r.TRTCVideoMirrorType.TRTCVideoMirrorType_Enable]=!0,x[r.TRTCVideoMirrorType.TRTCVideoMirrorType_Disable]=!1,x)[b]},L.prototype._getTRTCLocalMirror=function(b,x){var tA=this._getLocalRenderMirror(b);return ds(x)?!!tA&&"both":tA&&x?"both":tA&&!x?"view":!tA&&x?"publish":!(!tA&&!x)&&"view"},L.prototype._getTRTCRemoteMirror=function(b){var x;return((x={})[r.TRTCVideoMirrorType.TRTCVideoMirrorType_Auto]=!1,x[r.TRTCVideoMirrorType.TRTCVideoMirrorType_Enable]=!0,x[r.TRTCVideoMirrorType.TRTCVideoMirrorType_Disable]=!1,x)[b]},L.prototype._getTRTCQosPreference=function(b){var x;return((x={})[r.TRTCVideoQosPreference.TRTCVideoQosPreferenceSmooth]=U.default.TYPE.QOS_PREFERENCE_SMOOTH,x[r.TRTCVideoQosPreference.TRTCVideoQosPreferenceClear]=U.default.TYPE.QOS_PREFERENCE_CLEAR,x)[b]},L.prototype._getTRTCAudioQuality=function(b){var x;return((x={})[r.TRTCAudioQuality.TRTCAudioQualitySpeech]=U.default.TYPE.AUDIO_PROFILE_STANDARD,x[r.TRTCAudioQuality.TRTCAudioQualityDefault]=U.default.TYPE.AUDIO_PROFILE_STANDARD,x[r.TRTCAudioQuality.TRTCAudioQualityMusic]=U.default.TYPE.AUDIO_PROFILE_HIGH_STEREO,x)[b]},L.prototype._getTRTCCloudDeviceType=function(b){return{camera:r.TRTCDeviceType.TRTCDeviceTypeCamera,microphone:r.TRTCDeviceType.TRTCDeviceTypeMic,speaker:r.TRTCDeviceType.TRTCDeviceTypeSpeaker}[b]},L.prototype._getTRTCCloudDeviceState=function(b){return{add:r.TRTCDeviceState.TRTCDeviceStateAdd,remove:r.TRTCDeviceState.TRTCDeviceStateRemove,active:r.TRTCDeviceState.TRTCDeviceStateActive}[b]},L.prototype._getTRTCCloudQuality=function(b){return[r.TRTCQuality.TRTCQuality_Unknown,r.TRTCQuality.TRTCQuality_Excellent,r.TRTCQuality.TRTCQuality_Good,r.TRTCQuality.TRTCQuality_Poor,r.TRTCQuality.TRTCQuality_Bad,r.TRTCQuality.TRTCQuality_Vbad,r.TRTCQuality.TRTCQuality_Down][b]},L.prototype._generateLocalVideoData=function(){var b={view:this._getLocalView(),publish:this._getIsVideoPublish(),option:{profile:this._getVideoProfile(),small:this._getSmallStreamVideoProfile()||!1,mirror:this._getTRTCLocalMirror(this._localRenderParams.mirrorType,this._encoderMirror),fillMode:this._getTRTCFillMode(this._localRenderParams.fillMode)}};return this._cameraVideoTrack?b&&Object.assign(b.option,{videoTrack:this._cameraVideoTrack}):this._getIsMobile()?b&&Object.assign(b.option,{useFrontCamera:this._getIsFrontCamera()}):b&&Object.assign(b.option,{cameraId:this._getCurrentCameraId()}),this._getQosPreference()&&b&&Object.assign(b.option,{qosPreference:this._getQosPreference()}),b},L.prototype._generateLocalTestVideoData=function(){var b={view:this._getLocalTestView(),publish:!1,option:{profile:this._getVideoProfile(),mirror:this._getTRTCLocalMirror(this._localRenderParams.mirrorType,this._encoderMirror),fillMode:this._getTRTCFillMode(this._localRenderParams.fillMode)}};return this._getIsMobile()?b&&Object.assign(b.option,{useFrontCamera:this._getIsFrontCamera()}):b&&Object.assign(b.option,{cameraId:this._getCurrentCameraId()}),b},L.prototype._generateLocalAudioData=function(){var b={publish:this._getIsAudioPublish(),mute:this._getAudioMuteType(),muteKeepVolumeDetection:!0,option:{microphoneId:this._getCurrentMicrophoneId(),profile:this._getAudioProfile(),captureVolume:this._getCaptureVolume()}};return Pi(this._echoCancellation)&&(b.option.echoCancellation=this._echoCancellation),Pi(this._autoGainControl)&&(b.option.autoGainControl=this._autoGainControl),Pi(this._noiseSuppression)&&(b.option.noiseSuppression=this._noiseSuppression),b},L.prototype._generateLocalTestAudioData=function(){return{publish:!1,option:{microphoneId:this._getCurrentMicrophoneId(),profile:this._getAudioProfile()}}},L.prototype._generateRemoteVideoData=function(b,x){return wn(this._remoteStreamConfig.get("".concat(b,"_").concat(this._getTRTCStreamType(x))))},L.prototype._addTRTCEvents=function(){var b=this;this._trtc.on(U.default.EVENT.ERROR,function(x){x&&b.emit("onError",x.code,x.message)}),this._trtc.on(U.default.EVENT.REMOTE_USER_ENTER,function(x){x?.userId&&b.emit("onRemoteUserEnterRoom",x.userId)}),this._trtc.on(U.default.EVENT.REMOTE_USER_EXIT,function(x){x?.userId&&b.emit("onRemoteUserLeaveRoom",x.userId)}),this._trtc.on(U.default.EVENT.REMOTE_AUDIO_AVAILABLE,function(x){x?.userId&&b.emit("onUserAudioAvailable",x.userId,!0)}),this._trtc.on(U.default.EVENT.REMOTE_AUDIO_UNAVAILABLE,function(x){x?.userId&&b.emit("onUserAudioAvailable",x.userId,!1)}),this._trtc.on(U.default.EVENT.REMOTE_VIDEO_AVAILABLE,function(x){b._emitVideoAvailable(x,!0)}),this._trtc.on(U.default.EVENT.REMOTE_VIDEO_UNAVAILABLE,function(x){b._emitVideoAvailable(x,!1)}),this._trtc.on(U.default.EVENT.AUDIO_VOLUME,function(x){x?.result&&b.emit("onUserVoiceVolume",x?.result,(x?.result||[]).length)}),this._trtc.on(U.default.EVENT.KICKED_OUT,function(x){var tA={banned:nl.banned,room_disband:nl.roomDisband};zr(tA[x.reason])&&b.emit("onExitRoom",tA[x.reason])}),this._trtc.on(U.default.EVENT.NETWORK_QUALITY,function(x){var tA=x.uplinkNetworkQuality,uA=x.downlinkNetworkQuality,wA=new jo("",b._getTRTCCloudQuality(tA)),XA=[];b._remoteStatisticsUserIdList.length>0&&(XA=b._remoteStatisticsUserIdList.map(function(pe){return new jo(pe,b._getTRTCCloudQuality(uA))})),b.emit("onNetworkQuality",wA,XA)}),this._trtc.on(U.default.EVENT.AUTOPLAY_FAILED,function(x){b.emit("onAutoPlayFailed",x)}),this._trtc.on(U.default.EVENT.SEI_MESSAGE,function(x){if(x.data&&typeof x.data=="object"&&x.data instanceof ArrayBuffer){for(var tA=new Uint8Array(x.data),uA="",wA=0;wA0?B.video.map(function(DA){var GA=new oo;return GA.width=DA.width,GA.height=DA.height,GA.frameRate=DA.frameRate,GA.videoBitrate=DA.bitrate,GA.audioBitrate=B.audio.bitrate||0,GA.streamType=N[DA.videoType],GA}):[];if(O.length===0&&B.audio.bitrate>0){var z=new oo;z.audioBitrate=B.audio.bitrate||0,O.push(z)}var X=[];v.forEach(function(DA){var GA=[],VA=DA.userId,ee=DA.audio.bitrate;if(DA.video&&DA.video.forEach(function(We){var ot=new bi;ot.userId=VA,ot.width=We.width,ot.height=We.height,ot.frameRate=We.frameRate,ot.videoBitrate=We.bitrate,ot.audioBitrate=ee||0,ot.streamType=N[We.videoType],GA.push(ot)}),GA.length===0){var Ee=new bi;Ee.userId=VA,Ee.audioBitrate=ee||0,GA.push(Ee)}X.push.apply(X,GA)});var rA=new vs;rA.upLoss=wA,rA.downLoss=XA,rA.rtt=uA,rA.sentBytes=pe,rA.receivedBytes=p,rA.localStatisticsArray=O,rA.localStatisticsArraySize=O.length,rA.remoteStatisticsArray=X,rA.remoteStatisticsArraySize=X.length,b.emit("onStatistics",rA)}),this._trtc.on(U.default.EVENT.SCREEN_SHARE_STOPPED,function(){b.emit("onScreenCaptureStopped",0),b._clearScreenShareParams(),b._isSharingScreen=!1}),this._trtc.on(U.default.EVENT.PUBLISH_STATE_CHANGED,function(x){var tA=x.mediaType;x.state==="started"&&(tA==="audio"?b.emit("onSendFirstLocalAudioFrame"):tA==="video"?b.emit("onSendFirstLocalVideoFrame",r.TRTCVideoStreamType.TRTCVideoStreamTypeBig):tA==="screen"&&b.emit("onSendFirstLocalVideoFrame",r.TRTCVideoStreamType.TRTCVideoStreamTypeSub))}),this._trtc.on(U.default.EVENT.FIRST_VIDEO_FRAME,function(x){var tA=x.userId,uA=x.streamType,wA=x.width,XA=x.height;b.emit("onFirstVideoFrame",tA,uA,wA,XA)}),this._trtc.on(U.default.EVENT.AUDIO_PLAY_STATE_CHANGED,function(x){var tA=x.userId;x.state==="PLAYING"&&b.emit("onFirstAudioFrame",tA)}),this._trtc.on(U.default.EVENT.DEVICE_CHANGED,function(x){var tA=x.type,uA=x.device,wA=x.action,XA=uA.deviceId;if(wA==="active"){switch(tA){case"camera":b._currentCameraId=XA,b._currentCamera=uA;break;case"microphone":b._currentMicrophoneId=XA,b._currentMicrophone=uA;break;case"speaker":b._currentSpeakerId=XA,b._currentSpeaker=uA}b.emitOnDeviceChange(XA,b._getTRTCCloudDeviceType(tA),b._getTRTCCloudDeviceState(wA))}}),this._trtc.on(U.default.EVENT.CUSTOM_MESSAGE,function(x){x&&b.emit("onRecvCustomCmdMsg",x.userId,x.cmdId,x.seq,x?.data)}),this._trtc.on(U.default.EVENT.CONNECTION_STATE_CHANGED,function(x){b._hasJoinedRoom&&!b._isExitingRoom&&(x.prevState==="CONNECTED"&&x.state==="DISCONNECTED"?b.emit("onConnectionLost"):x.prevState==="DISCONNECTED"&&x.state==="CONNECTING"?b.emit("onTryToReconnect"):x.prevState==="CONNECTING"&&x.state==="CONNECTED"&&b.emit("onConnectionRecovery"))}),this._trtc.on(U.default.EVENT.PICTURE_IN_PICTURE_STATE_CHANGED,function(x){b.emit("onPictureInPictureStateChanged",x)})},L.prototype._removeTRTCEvents=function(){this._trtc.off("*")},L.prototype._emitVideoAvailable=function(b,x){var tA=b.userId,uA=b.streamType;x?this._remoteStreamMap.set("".concat(tA,"_").concat(uA),!0):this._remoteStreamMap.delete("".concat(tA,"_").concat(uA)),uA===U.default.TYPE.STREAM_TYPE_SUB?tA&&this.emit("onUserSubStreamAvailable",tA,x):tA&&this.emit("onUserVideoAvailable",tA,x)},L.prototype._setLocalView=function(b){this._localView=b},L.prototype._getLocalView=function(){return this._localView},L.prototype._setIsMobile=function(b){this._isMobile=b},L.prototype._getIsMobile=function(){return this._isMobile},L.prototype._setIsFrontCamera=function(b){this._isFrontCamera=b},L.prototype._getIsFrontCamera=function(){return this._isFrontCamera},L.prototype._getSmallStreamVideoProfile=function(){return this._smallStreamVideoProfile},L.prototype._setSmallStreamVideoProfile=function(b){this._smallStreamVideoProfile=b},L.prototype._setIsVideoPublish=function(b){this._isVideoPublish=b},L.prototype._getIsVideoPublish=function(){return this._isVideoPublish},L.prototype._setVideoProfile=function(b){this._videoProfile=b},L.prototype._getVideoProfile=function(){return this._videoProfile},L.prototype._setQosPreference=function(b){this._qosPreference=b},L.prototype._getQosPreference=function(){return this._qosPreference},L.prototype._setLocalTestView=function(b){this._localTestView=b},L.prototype._getLocalTestView=function(){return this._localTestView},L.prototype._setScreenShareParams=function(b){var x=b.view,tA=b.systemAudio,uA=b.fillMode,wA=b.profile,XA=b.videoTrack,pe=b.qosPreference;ds(x)||(this._screenShareParams.view=x),ds(tA)||(this._screenShareParams.option.systemAudio=tA),ds(uA)||(this._screenShareParams.option.fillMode=uA),ds(wA)||(this._screenShareParams.option.profile=wA),ds(XA)||(this._screenShareParams.option.videoTrack=XA),ds(pe)||(this._screenShareParams.option.qosPreference=pe),ds(b.streamType)||(this._screenShareParams.streamType=this._getTRTCStreamType(b.streamType))},L.prototype._clearScreenShareParams=function(){var b,x,tA,uA,wA;!((b=this._screenShareParams)===null||b===void 0)&&b.view&&delete this._screenShareParams.view,!((tA=(x=this._screenShareParams)===null||x===void 0?void 0:x.option)===null||tA===void 0)&&tA.systemAudio&&delete this._screenShareParams.option.systemAudio,!((wA=(uA=this._screenShareParams)===null||uA===void 0?void 0:uA.option)===null||wA===void 0)&&wA.videoTrack&&delete this._screenShareParams.option.videoTrack},L.prototype._getScreenShareParams=function(){return this._screenShareParams},L.prototype._setIsAudioPublish=function(b){this._isAudioPublish=b},L.prototype._getIsAudioPublish=function(){return this._isAudioPublish},L.prototype._setAudioMuteType=function(b){this._audioMuteType=b},L.prototype._getAudioMuteType=function(){return this._audioMuteType},L.prototype._setAudioProfile=function(b){this._audioProfile=b},L.prototype._getAudioProfile=function(){return this._audioProfile},L.prototype._getCaptureVolume=function(){return this._captureVolume},L.prototype._setCaptureVolume=function(b){this._captureVolume=b},L.prototype._setCurrentCameraId=function(b){this._currentCameraId=b},L.prototype._getCurrentCameraId=function(){return this._currentCameraId},L.prototype._setCurrentMicrophoneId=function(b){this._currentMicrophoneId=b},L.prototype._getCurrentMicrophoneId=function(){return this._currentMicrophoneId},L.prototype._setCurrentSpeakerId=function(b){this._currentSpeakerId=b},L.prototype._getCurrentSpeakerId=function(){return this._currentSpeakerId},L.prototype._setRemoteStreamConfig=function(b,x,tA){var uA=this._remoteStreamConfig.get("".concat(b,"_").concat(this._getTRTCStreamType(x)));uA||(uA={userId:b,streamType:this._getTRTCStreamType(x),option:{mirror:this._getTRTCRemoteMirror(r.TRTCVideoMirrorType.TRTCVideoMirrorType_Disable),fillMode:this._getTRTCFillMode(r.TRTCVideoFillMode.TRTCVideoFillMode_Fit)}});var wA=tA.view,XA=tA.mirrorType,pe=tA.fillMode,p=tA.small;ds(wA)||(uA.view=wA),ds(XA)||(uA.option.mirror=this._getTRTCRemoteMirror(XA)),ds(pe)||(uA.option.fillMode=this._getTRTCFillMode(pe)),ds(p)||(uA.option.small=p),this._remoteStreamConfig.set("".concat(b,"_").concat(this._getTRTCStreamType(x)),uA)},L.prototype._inheritPropertiesToSubCloud=function(b){b._frameWorkType=this._frameWorkType,b._component=this._component,b._language=this._language,b._networkProxy=sA({},this._networkProxy),b._latencyLevel=this._latencyLevel,b._enableAutoPlayDialog=this._enableAutoPlayDialog},L.prototype._inheritEventsToSubCloud=function(b){var x=this;b._trtc.on(U.default.EVENT.AUTOPLAY_FAILED,function(tA){x.emit("onAutoPlayFailed",tA)}),b._trtc.on(U.default.EVENT.PICTURE_IN_PICTURE_STATE_CHANGED,function(tA){x.emit("onPictureInPictureStateChanged",tA)})},L.prototype.handleDeviceChange=function(){return IA(this,void 0,void 0,function(){var b=this;return cA(this,function(x){return U.default.getCameraList().then(function(tA){return IA(b,void 0,void 0,function(){return cA(this,function(uA){switch(uA.label){case 0:return this._cameraList.length===tA.length?[2]:[4,this.deviceChangeManage(this._cameraList,tA,r.TRTCDeviceType.TRTCDeviceTypeCamera)];case 1:return uA.sent(),this._cameraList=tA,[2]}})})}),U.default.getMicrophoneList().then(function(tA){return IA(b,void 0,void 0,function(){return cA(this,function(uA){switch(uA.label){case 0:return[4,this.deviceChangeManage(this._microphoneList,tA,r.TRTCDeviceType.TRTCDeviceTypeMic)];case 1:return uA.sent(),this._microphoneList=tA,[2]}})})}),U.default.getSpeakerList().then(function(tA){return IA(b,void 0,void 0,function(){return cA(this,function(uA){switch(uA.label){case 0:return[4,this.deviceChangeManage(this._speakerList,tA,r.TRTCDeviceType.TRTCDeviceTypeSpeaker)];case 1:return uA.sent(),this._speakerList=tA,[2]}})})}),[2]})})},L.prototype.isSameDevice=function(b,x){var tA=b&&b.deviceId&&b.groupId&&b.label,uA=x&&x.deviceId&&x.groupId&&x.label;return!(!tA||!uA)&&b.deviceId===x.deviceId&&b.groupId===x.groupId&&b.label===x.label},L.prototype.deviceChangeManage=function(b,x,tA){return IA(this,void 0,void 0,function(){var uA,wA,XA,pe,p;return cA(this,function(B){switch(B.label){case 0:return uA=void 0,b.length!==x.length&&(wA=(x||[]).map(function(v){return v.deviceId}),XA=new Oe,b.length>x.length?(XA=b.filter(function(v){return!wA.includes(v.deviceId)})[0]||{},uA=r.TRTCDeviceState.TRTCDeviceStateRemove):(wA=(b||[]).map(function(v){return v.deviceId}),XA=x.filter(function(v){return!wA.includes(v.deviceId)})[0]||{},uA=r.TRTCDeviceState.TRTCDeviceStateAdd),pe=XA.deviceId,this.emitOnDeviceChange(pe,tA,uA)),p=this.getDefaultDeviceInfo(x),tA!==r.TRTCDeviceType.TRTCDeviceTypeCamera||uA!==r.TRTCDeviceState.TRTCDeviceStateRemove?[3,3]:this.isSameDevice(this._currentCamera,p)?[2]:p.deviceId?[4,this.autoChangeDevice(tA,p)]:[3,2];case 1:B.sent(),B.label=2;case 2:B.label=3;case 3:return tA!==r.TRTCDeviceType.TRTCDeviceTypeMic?[3,6]:this.isSameDevice(this._currentMicrophone,p)?[2]:p.deviceId?[4,this.autoChangeDevice(tA,p)]:[3,5];case 4:B.sent(),B.label=5;case 5:B.label=6;case 6:return tA!==r.TRTCDeviceType.TRTCDeviceTypeSpeaker?[3,9]:this.isSameDevice(this._currentSpeaker,p)?[2]:p.deviceId?[4,this.autoChangeDevice(tA,p)]:[3,8];case 7:B.sent(),B.label=8;case 8:B.label=9;case 9:return[2]}})})},L.prototype.getDefaultDeviceInfo=function(b){var x=new Oe;if(b.length===0)return x;var tA=b.filter(function(uA){return uA.deviceId==="default"});return x=tA.length>0?tA[0]:b[0]},L.prototype.autoChangeDevice=function(b,x){return IA(this,void 0,void 0,function(){var tA,uA,wA;return cA(this,function(XA){switch(XA.label){case 0:return tA=x.deviceId,b!==r.TRTCDeviceType.TRTCDeviceTypeCamera?[3,6]:(this._setCurrentCameraId(tA),[4,this._updateLocalVideo()]);case 1:XA.sent(),XA.label=2;case 2:return XA.trys.push([2,4,,5]),[4,this._testTrtc.updateLocalVideo({option:{cameraId:tA}})];case 3:return XA.sent(),[3,5];case 4:return uA=XA.sent(),console.log("testTRTC error",JSON.stringify(uA)),uA.code,U.default.ERROR_CODE.OPERATION_ABORT,[3,5];case 5:this._currentCameraId=tA,this._currentCamera=x,this.emitOnDeviceChange(tA,b,r.TRTCDeviceState.TRTCDeviceStateActive),XA.label=6;case 6:return b!==r.TRTCDeviceType.TRTCDeviceTypeMic?[3,12]:(this._setCurrentMicrophoneId(tA),[4,this._updateLocalAudio()]);case 7:XA.sent(),XA.label=8;case 8:return XA.trys.push([8,10,,11]),[4,this._testTrtc.updateLocalAudio({option:{microphoneId:tA}})];case 9:return XA.sent(),[3,11];case 10:return wA=XA.sent(),console.log("testTRTC error",JSON.stringify(wA)),wA.code,U.default.ERROR_CODE.OPERATION_ABORT,[3,11];case 11:this._currentMicrophoneId=tA,this._currentMicrophone=x,this.emitOnDeviceChange(tA,b,r.TRTCDeviceState.TRTCDeviceStateActive),XA.label=12;case 12:return b!==r.TRTCDeviceType.TRTCDeviceTypeSpeaker?[3,14]:[4,U.default.setCurrentSpeaker(tA)];case 13:XA.sent(),this._currentSpeakerId=tA,this._currentSpeaker=x,this.emitOnDeviceChange(tA,b,r.TRTCDeviceState.TRTCDeviceStateActive),XA.label=14;case 14:return[2]}})})},L.prototype.emitOnDeviceChange=function(b,x,tA){this.emit("onDeviceChange",b,x,tA)},L.prototype.getMediaMixingManager=function(){return new Fl({logger:this.logger,trtc:this._trtc,trtcCloud:this})},L.prototype.getAITranscriberManager=function(){return new xE({logger:this.logger,trtc:this._trtc})},L.shareInstance=null,L.subCloudMap=new Map,L.enableSEI=!1,L.assetsPath="",mA([(oA="exitRoom",function(b,x,tA){var uA=tA.value;return tA.value=function(){for(var wA,XA,pe,p,B=[],v=0;vH.length)&&(BA=H.length);for(var yA=0,NA=new Array(BA);yA=0;--on){var os=this.tryEntries[on],Eg=os.completion;if(os.tryLoc==="root")return yo("end");if(os.tryLoc<=this.prev){var Ol=zA.call(os,"catchLoc"),fd=zA.call(os,"finallyLoc");if(Ol&&fd){if(this.prev=0;--yo){var on=this.tryEntries[yo];if(on.tryLoc<=this.prev&&zA.call(on,"finallyLoc")&&this.prev=0;--ni){var yo=this.tryEntries[ni];if(yo.finallyLoc===Ri)return this.complete(yo.completion,yo.afterLoc),qr(yo),ci}},catch:function(Ri){for(var ni=this.tryEntries.length-1;ni>=0;--ni){var yo=this.tryEntries[ni];if(yo.tryLoc===Ri){var on=yo.completion;if(on.type==="throw"){var os=on.arg;qr(yo)}return os}}throw new Error("illegal catch attempt")},delegateYield:function(Ri,ni,yo){return this.delegate={iterator:Ku(Ri),resultName:ni,nextLoc:yo},this.method==="next"&&(this.arg=void 0),ci}},yA}(H.exports);try{regeneratorRuntime=BA}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=BA:Function("r","regeneratorRuntime = r")(BA)}});var sA,mA,IA=function(H){return H&&H.Math==Math&&H},cA=IA(typeof globalThis=="object"&&globalThis)||IA(typeof window=="object"&&window)||IA(typeof self=="object"&&self)||IA(typeof j=="object"&&j)||function(){return this}()||Function("return this")(),TA=function(H){try{return!!H()}catch{return!0}},WA=!TA(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),ue={}.propertyIsEnumerable,Ce=Object.getOwnPropertyDescriptor,xe={f:Ce&&!ue.call({1:2},1)?function(H){var BA=Ce(this,H);return!!BA&&BA.enumerable}:ue},Qe=function(H,BA){return{enumerable:!(1&H),configurable:!(2&H),writable:!(4&H),value:BA}},ut={}.toString,ft=function(H){return ut.call(H).slice(8,-1)},je="".split,Mt=TA(function(){return!Object("z").propertyIsEnumerable(0)})?function(H){return ft(H)=="String"?je.call(H,""):Object(H)}:Object,jt=function(H){if(H==null)throw TypeError("Can't call method on "+H);return H},Et=function(H){return Mt(jt(H))},re=function(H){return typeof H=="function"},qe=function(H){return typeof H=="object"?H!==null:re(H)},yt=function(H){return re(H)?H:void 0},Me=function(H,BA){return arguments.length<2?yt(cA[H]):cA[H]&&cA[H][BA]},Oe=Me("navigator","userAgent")||"",gt=cA.process,Fi=cA.Deno,To=gt&>.versions||Fi&&Fi.version,io=To&&To.v8;io?mA=(sA=io.split("."))[0]<4?1:sA[0]+sA[1]:Oe&&(!(sA=Oe.match(/Edge\/(\d+)/))||sA[1]>=74)&&(sA=Oe.match(/Chrome\/(\d+)/))&&(mA=sA[1]);var Eo=mA&&+mA,Vs=!!Object.getOwnPropertySymbols&&!TA(function(){var H=Symbol();return!String(H)||!(Object(H)instanceof Symbol)||!Symbol.sham&&Eo&&Eo<41}),ki=Vs&&!Symbol.sham&&typeof Symbol.iterator=="symbol",ns=ki?function(H){return typeof H=="symbol"}:function(H){var BA=Me("Symbol");return re(BA)&&Object(H)instanceof BA},jo=function(H){try{return String(H)}catch{return"Object"}},Ao=function(H){if(re(H))return H;throw TypeError(jo(H)+" is not a function")},Zt=function(H,BA){var yA=H[BA];return yA==null?void 0:Ao(yA)},oo=function(H,BA){try{Object.defineProperty(cA,H,{value:BA,configurable:!0,writable:!0})}catch{cA[H]=BA}return BA},bi=cA["__core-js_shared__"]||oo("__core-js_shared__",{}),vs=lA(function(H){(H.exports=function(BA,yA){return bi[BA]||(bi[BA]=yA!==void 0?yA:{})})("versions",[]).push({version:"3.18.2",mode:"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})}),HA=function(H){return Object(jt(H))},ce={}.hasOwnProperty,Ve=Object.hasOwn||function(H,BA){return ce.call(HA(H),BA)},Ot=0,nt=Math.random(),It=function(H){return"Symbol("+String(H===void 0?"":H)+")_"+(++Ot+nt).toString(36)},ei=vs("wks"),ti=cA.Symbol,be=ki?ti:ti&&ti.withoutSetter||It,Ze=function(H){return Ve(ei,H)&&(Vs||typeof ei[H]=="string")||(Vs&&Ve(ti,H)?ei[H]=ti[H]:ei[H]=be("Symbol."+H)),ei[H]},wt=Ze("toPrimitive"),Nt=function(H,BA){if(!qe(H)||ns(H))return H;var yA,NA=Zt(H,wt);if(NA){if(yA=NA.call(H,BA),!qe(yA)||ns(yA))return yA;throw TypeError("Can't convert object to primitive value")}return function(zA,we){var le,Ne;if(re(le=zA.toString)&&!qe(Ne=le.call(zA))||re(le=zA.valueOf)&&!qe(Ne=le.call(zA)))return Ne;throw TypeError("Can't convert object to primitive value")}(H)},Oi=function(H){var BA=Nt(H,"string");return ns(BA)?BA:String(BA)},po=cA.document,No=qe(po)&&qe(po.createElement),so=function(H){return No?po.createElement(H):{}},Go=!WA&&!TA(function(){return Object.defineProperty(so("div"),"a",{get:function(){return 7}}).a!=7}),An=Object.getOwnPropertyDescriptor,rn={f:WA?An:function(H,BA){if(H=Et(H),BA=Oi(BA),Go)try{return An(H,BA)}catch{}if(Ve(H,BA))return Qe(!xe.f.call(H,BA),H[BA])}},Es=function(H){if(qe(H))return H;throw TypeError(String(H)+" is not an object")},an=Object.defineProperty,Do={f:WA?an:function(H,BA,yA){if(Es(H),BA=Oi(BA),Es(yA),Go)try{return an(H,BA,yA)}catch{}if("get"in yA||"set"in yA)throw TypeError("Accessors not supported");return"value"in yA&&(H[BA]=yA.value),H}},pA=WA?function(H,BA,yA){return Do.f(H,BA,Qe(1,yA))}:function(H,BA,yA){return H[BA]=yA,H},Jn=Function.toString;re(bi.inspectSource)||(bi.inspectSource=function(H){return Jn.call(H)});var Qr,ds,zr,Pi=bi.inspectSource,Rs=cA.WeakMap,or=re(Rs)&&/native code/.test(Pi(Rs)),en=vs("keys"),wn=function(H){return en[H]||(en[H]=It(H))},qt={},yg=cA.WeakMap;if(or||bi.state){var On=bi.state||(bi.state=new yg),Gn=On.get,Js=On.has,pr=On.set;Qr=function(H,BA){if(Js.call(On,H))throw new TypeError("Object already initialized");return BA.facade=H,pr.call(On,H,BA),BA},ds=function(H){return Gn.call(On,H)||{}},zr=function(H){return Js.call(On,H)}}else{var Pn=wn("state");qt[Pn]=!0,Qr=function(H,BA){if(Ve(H,Pn))throw new TypeError("Object already initialized");return BA.facade=H,pA(H,Pn,BA),BA},ds=function(H){return Ve(H,Pn)?H[Pn]:{}},zr=function(H){return Ve(H,Pn)}}var mr={set:Qr,get:ds,has:zr,enforce:function(H){return zr(H)?ds(H):Qr(H,{})},getterFor:function(H){return function(BA){var yA;if(!qe(BA)||(yA=ds(BA)).type!==H)throw TypeError("Incompatible receiver, "+H+" required");return yA}}},mo=Function.prototype,gn=WA&&Object.getOwnPropertyDescriptor,Sl=Ve(mo,"name"),cn={PROPER:Sl&&function(){}.name==="something",CONFIGURABLE:Sl&&(!WA||WA&&gn(mo,"name").configurable)},fr=lA(function(H){var BA=cn.CONFIGURABLE,yA=mr.get,NA=mr.enforce,zA=String(String).split("String");(H.exports=function(we,le,Ne,ge){var Ue,vt=!!ge&&!!ge.unsafe,Wt=!!ge&&!!ge.enumerable,ci=!!ge&&!!ge.noTargetGet,Dt=ge&&ge.name!==void 0?ge.name:le;re(Ne)&&(String(Dt).slice(0,7)==="Symbol("&&(Dt="["+String(Dt).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!Ve(Ne,"name")||BA&&Ne.name!==Dt)&&pA(Ne,"name",Dt),(Ue=NA(Ne)).source||(Ue.source=zA.join(typeof Dt=="string"?Dt:""))),we!==cA?(vt?!ci&&we[le]&&(Wt=!0):delete we[le],Wt?we[le]=Ne:pA(we,le,Ne)):Wt?we[le]=Ne:oo(le,Ne)})(Function.prototype,"toString",function(){return re(this)&&yA(this).source||Pi(this)})}),Ls=Math.ceil,Jc=Math.floor,ms=function(H){var BA=+H;return BA!=BA||BA===0?0:(BA>0?Jc:Ls)(BA)},as=Math.max,Ru=Math.min,Wa=Math.min,Cs=function(H){return H>0?Wa(ms(H),9007199254740991):0},sg=function(H){return Cs(H.length)},HI=function(H){return function(BA,yA,NA){var zA,we=Et(BA),le=sg(we),Ne=function(ge,Ue){var vt=ms(ge);return vt<0?as(vt+Ue,0):Ru(vt,Ue)}(NA,le);if(H&&yA!=yA){for(;le>Ne;)if((zA=we[Ne++])!=zA)return!0}else for(;le>Ne;Ne++)if((H||Ne in we)&&we[Ne]===yA)return H||Ne||0;return!H&&-1}},As={indexOf:HI(!1)},$i=As.indexOf,pc=function(H,BA){var yA,NA=Et(H),zA=0,we=[];for(yA in NA)!Ve(qt,yA)&&Ve(NA,yA)&&we.push(yA);for(;BA.length>zA;)Ve(NA,yA=BA[zA++])&&(~$i(we,yA)||we.push(yA));return we},ng=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Dg=ng.concat("length","prototype"),ua={f:Object.getOwnPropertyNames||function(H){return pc(H,Dg)}},bo={f:Object.getOwnPropertySymbols},Zr=Me("Reflect","ownKeys")||function(H){var BA=ua.f(Es(H)),yA=bo.f;return yA?BA.concat(yA(H)):BA},_o=function(H,BA){for(var yA=Zr(BA),NA=Do.f,zA=rn.f,we=0;we=51||!TA(function(){var BA=[];return(BA.constructor={})[Ii]=function(){return{foo:1}},BA[H](Boolean).foo!==1})},xt=Ze("isConcatSpreadable"),Ji=Eo>=51||!TA(function(){var H=[];return H[xt]=!1,H.concat()[0]!==H}),Ki=ct("concat"),qs=function(H){if(!qe(H))return!1;var BA=H[xt];return BA!==void 0?!!BA:Ea(H)};fs({target:"Array",proto:!0,forced:!Ji||!Ki},{concat:function(H){var BA,yA,NA,zA,we,le=HA(this),Ne=Yt(le,0),ge=0;for(BA=-1,NA=arguments.length;BA9007199254740991)throw TypeError("Maximum allowed index exceeded");for(yA=0;yA=9007199254740991)throw TypeError("Maximum allowed index exceeded");yn(Ne,ge++,we)}return Ne.length=ge,Ne}});var Mi,zo=Object.keys||function(H){return pc(H,ng)},Mg=WA?Object.defineProperties:function(H,BA){Es(H);for(var yA,NA=zo(BA),zA=NA.length,we=0;zA>we;)Do.f(H,yA=NA[we++],BA[yA]);return H},sr=Me("document","documentElement"),yr=wn("IE_PROTO"),xn=function(){},Ml=function(H){return" - + +
diff --git a/app/video_companion/src/App.vue b/app/video_companion/src/App.vue index 736b9c7c6..e70d6785f 100644 --- a/app/video_companion/src/App.vue +++ b/app/video_companion/src/App.vue @@ -3,6 +3,10 @@ import { TUICallKit } from '@trtc/calls-uikit-vue' import { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue' import type { Ref } from 'vue' import { captureVideoStage } from './video-screenshot' +import ImAiPanel from './ImAiPanel.vue' +import { appendAiDraft, shouldClearSubmittedDraft } from './im-ai' +import type { ImAiAction, ImAiState } from './im-ai' +import { aiPanelBounds, clampAiPanelWidth, resizeAiPanelByKey } from './im-ai-layout' interface ChatMessage { id: string @@ -68,6 +72,11 @@ const props = defineProps<{ localRecordingState: Readonly> liveCaptions: Readonly> patientCase: Readonly> + contextKey: Readonly> + imAiState: Readonly> + onRequestImAi: (action: ImAiAction) => void + onRegenerateImAi: (action: ImAiAction) => void + onCancelImAi: () => void onSendText: (text: string) => Promise onSendAttachment: (file: File) => Promise onLoadMore: () => Promise @@ -79,6 +88,94 @@ const props = defineProps<{ }>() const draft = ref('') +let draftRevision = 0 +const composerInput = ref(null) +const aiToggle = ref(null) +const aiOpen = ref(false) +const aiMedia = window.matchMedia('(max-width: 980px)') +const aiDrawer = ref(aiMedia.matches) +const updateAiDrawer = (event: MediaQueryListEvent) => { aiDrawer.value = event.matches } +aiMedia.addEventListener('change', updateAiDrawer) +onBeforeUnmount(() => aiMedia.removeEventListener('change', updateAiDrawer)) +const aiViewportWidth = ref(window.innerWidth) +const aiWideWidth = ref(330) +const aiDrawerWidth = ref(360) +const aiResizeHandle = ref(null) +const aiResizing = ref(false) +const aiBounds = computed(() => aiPanelBounds(aiViewportWidth.value, aiDrawer.value)) +const aiPanelWidth = computed(() => clampAiPanelWidth( + aiDrawer.value ? aiDrawerWidth.value : aiWideWidth.value, aiViewportWidth.value, aiDrawer.value, +)) +let aiResizeDrag: { pointerId: number; startX: number; startWidth: number; drawer: boolean } | null = null + +function setAiPanelWidth(width: number): void { + const next = clampAiPanelWidth(width, aiViewportWidth.value, aiDrawer.value) + if (aiDrawer.value) aiDrawerWidth.value = next + else aiWideWidth.value = next +} + +function endAiResize(restore = false): void { + const drag = aiResizeDrag + aiResizeDrag = null + aiResizing.value = false + if (!drag) return + if (restore) { + if (drag.drawer) aiDrawerWidth.value = drag.startWidth + else aiWideWidth.value = drag.startWidth + } + if (aiResizeHandle.value?.hasPointerCapture(drag.pointerId)) { + aiResizeHandle.value.releasePointerCapture(drag.pointerId) + } +} + +function startAiResize(event: PointerEvent): void { + if (event.button !== 0 || !event.isPrimary || aiResizeDrag) return + event.preventDefault() + aiResizeHandle.value?.focus() + try { + aiResizeHandle.value?.setPointerCapture(event.pointerId) + } catch { return } + aiResizeDrag = { pointerId: event.pointerId, startX: event.clientX, startWidth: aiPanelWidth.value, drawer: aiDrawer.value } + aiResizing.value = true +} + +function moveAiResize(event: PointerEvent): void { + if (!aiResizeDrag || event.pointerId !== aiResizeDrag.pointerId) return + setAiPanelWidth(aiResizeDrag.startWidth + aiResizeDrag.startX - event.clientX) +} + +function onAiResizeKeydown(event: KeyboardEvent): void { + if (event.key === 'Escape' && aiResizeDrag) { + event.preventDefault() + event.stopPropagation() + endAiResize(true) + return + } + const width = resizeAiPanelByKey(event.key, aiPanelWidth.value, aiViewportWidth.value, aiDrawer.value, event.shiftKey) + if (width === null) return + event.preventDefault() + endAiResize() + setAiPanelWidth(width) +} + +const updateAiViewport = () => { + endAiResize() + aiViewportWidth.value = window.innerWidth +} +const releaseAiResize = () => endAiResize() +window.addEventListener('resize', updateAiViewport) +window.addEventListener('blur', releaseAiResize) +watch([aiDrawer, aiOpen], () => endAiResize()) +onBeforeUnmount(() => { + endAiResize() + window.removeEventListener('resize', updateAiViewport) + window.removeEventListener('blur', releaseAiResize) +}) +const aiDraftNotice = ref('') +watch(draft, () => { + draftRevision += 1 + if (!draft.value) aiDraftNotice.value = '' +}, { flush: 'sync' }) const actionBusy = ref(false) const localError = ref('') const messageList = ref(null) @@ -221,14 +318,57 @@ async function runAction(action: () => Promise): Promise { } async function sendText(): Promise { + if (!props.chatReady.value || actionBusy.value) return const content = draft.value.trim() if (!content) return + const submitted = { text: draft.value, contextKey: props.contextKey.value, revision: draftRevision } await runAction(async () => { await props.onSendText(content) - draft.value = '' + if (shouldClearSubmittedDraft( + { text: draft.value, contextKey: props.contextKey.value, revision: draftRevision }, submitted, + )) draft.value = '' }) } +function onComposerKeydown(event: KeyboardEvent): void { + if (event.key !== 'Enter' || event.shiftKey || event.ctrlKey || event.altKey || event.metaKey) return + if (event.isComposing || event.keyCode === 229) return + event.preventDefault() + void sendText() +} + +async function closeAi(): Promise { + aiOpen.value = false + await nextTick() + aiToggle.value?.focus() +} + +async function applyAiDraft(): Promise { + aiDraftNotice.value = '' + try { + draft.value = appendAiDraft(draft.value, props.imAiState.value, props.contextKey.value) + localError.value = '' + aiDraftNotice.value = '已填入草稿,请复核编辑后手动发送。' + aiOpen.value = false + await nextTick() + composerInput.value?.focus() + composerInput.value?.setSelectionRange(draft.value.length, draft.value.length) + } catch (error) { + localError.value = error instanceof Error ? error.message : '无法填入草稿,请重试。' + // Keep the draft intact and expose the composer feedback in compact windows. + aiOpen.value = false + await nextTick() + composerInput.value?.focus() + } +} + +watch(() => props.contextKey.value, () => { + draft.value = '' + localError.value = '' + aiDraftNotice.value = '' + aiOpen.value = false +}, { flush: 'sync' }) + async function selectAttachment(event: Event): Promise { const input = event.target as HTMLInputElement const file = input.files?.[0] @@ -284,8 +424,8 @@ watch(

rGPk_hUHjVPv%`n~GvS2AB6cKms~Jr+uBB$9 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πAVBYg}m5PQM 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%0A1_H|sb-lN6NV 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 JzTWmi%3lI-5r6;y literal 192769 zcma(2by(ER_c#tC2q+B#O2bMcASGS0fGj1kOM`TGcL^-rAR$P{(%m5~-Q6kO9lzE4 z?f3Ki`ONj=f??{+%$d_C__LfOCK@ps0s;c2)F+@K0s=}20s_*v7l`oxFyX{c!+*WB z`J`r#fPmHc=jT~G6BY>q0wsbJP*m9^b$`)WQ)&AV_4tTLjd~vwkST)-bw5($KR7qu zJ1A>hGIu^mtL>N*wA!|`Y}T48oGb)~qH{w-cs}FeM>ki*+7BH?ej!eJCiUXjwe@iC za$_Tm4i}3z-6MTlm(dLQ4-|ikPf5hV4$8k8f)76>+Vg+49YUP{>*#ze-$6AX9|@6Dk8N$^f>=2KQu(}U;L|#F#rF#OiMFXCwnJ523sc%n~X*T zWxWTg^Kq|4b&i^)7gdbGyjBd$UGwK(Z<4}P1K;S)U5X+9Z;25pDLg6aU_7;V231w^ zTb;@iXo=OrxIOF^?)a|(Xbx1|626I~KtTCLFy(LzsPFjQPvQR!_2Gjku)m>!xu~Jm z7tu%Q6O}x;y?Kk~kOBDs^VA7A^QDyD$k8(({V4KpfQ0IEDeI`YRMZ-_K7FWxX3&<; zN>hZFJyD=49q67X!DHf`-T&*H+so4}IatFRXWs9HAtn%6K2JP4nv}9#;Ye-0B`MJz zTdPv3@xPf75O6!9YF{&%k7H04M<5ab($0K3Q3^EZCX_AVV5 zEiTB(qmlfW>NyQ9zoAqBi3$F1X~-976Sz3-SFPi`{kvP_4ntk&t|QW=;%d+zJpEIC zOuh+hQZAMTtK%ZG0}puQp>G{79jS)h?aBOw(`W`>{X?9Q59|@E8nM&WdKyFae70`d zP2%Kp^w@?^3W^MZTmLuTD>HDzSO|UDyKx$yZPf_lcsn_&ZDxogRV%Y^?v`tq-ivz@Un!nnp>1iKmim zn2iOEZO#t1>-sWryBZ3e8+%s^Mh4-zy0evpe&g4a3h*^lwGPkBB0*e)&N4#4Bu&b8 z!BG9ht2>$(G4#QHlu|Jpd&OmvOGcHSi@9#|H-(Z*$nTNhdl8Y0qGs3VHJ}ouQ~)SY z1N7ANh}L)%dq1&cmAH?;w0WrzQ|Krcz&9k}%N}7ndL$34q>GeU6sS-jCqu@It}X1R z^`#+@NZX!Z?4($M&}{NigjXPud?`mm$)chDd{9?W(cR0YXya3urT+JgXhni4zxxgl znzhhjbVO-Nm=T=3X+UYjh{Bx*3IOeJxk8+FM z7oGUNw;Ze^eGrfNWNfmnkLW=7ZF$9Rb&Bv$H-sOJeZow53Jw!An_Q;z#Y|6SSR|c; z%?eYZ2X;aJLGn1GaVH%MHY~7_gd4x_x}4F8F)l+isHl;SHDz^GMT%LF+3Bx=&u?!{ zp!p3F8k&k$I;E3De*X7a05Sd_@hnpXnIhR%E2**?S96a%yl)Lfn%o})|L#X5vD`AT zjT4Hf@~B%}nD8i5*}#d0FJ6#cm#cS{ZSfx9eCw0OWA%7v0EDA)HoSvV? z*P?g7jE{VHXj=9;3Rs`q4|M<|5tWWIW~Q zK2i5uI7~P+^uScZRp4r%3U*|_@USPZlg#O*TH3;KN7q%NbrQX<1c7~dPkiB)rEQ&G zG714tLm*T5iE*z95?`mW^13#Bxs4kQC2y`guzrq9Wq817X6DeyVV5gQ${3=jVB2*P zi!A8=HBG?Ns(WKq_5dI?R}$w+ z(?$o1iIm{7{{`(g{rkin01&2wIXawC=1Rk+4y}ta(S>x=sjsRk;hlybG^Q+<>RtP_ zV`o1C(dsQuzv`;U5HZKruTQl=U{Akm!->=+#TBSCCDUA;kK3{}jN~Wtn>8IIr0fpv z$&JvZ@Twi?o@;?@KKrCcZszXg&iz5iIl`?ap7COAYvH{B0jae}U$s3(QKcEWroF^kTXP$)3N9*=ed25_SuoI0EjK&k zh#a=|T8~=s;Xn=`d19>7oBO6M*l}^&`gY^KQk*t6396dVC*bmqV{fOaG5z6p3U~8F zVQJ#y|5yocp;Kn@nh_L1jsIA(2~-NVq8F_3b8sX0M>5(?*onyPiMyK7Z(6U42_maqIAVto;L|RNmRcW%69%T|YT*g7dptk%G8+i2A#!Y7*z!gm4M_kLmf3p6=Ys zVa-XB&0N}2C!@gZaUuf&-Dk-Q{ z(!JfbOa3b>e3#y$63vT+?zHLZn(QuX$!sstr*MT|UD!(17;q*nKOQ&!%p9|QtF(R# z#8o&fsNCZ|;Pcqn&_}mYV%#XCC zTz8YKU(2q^FCj{)A#A!!mzh5mJVVjss2q-o93seV6ooWn?% z^v#Nf7R>!TgBSg<*%w;Ua1)HZr2gg=ne9!f;Y{ZZ1&f!*@{Yh&*?q?&t)Z(WmY)ig6*^>Wy@DI_#9-0C{6 zG_re2X{K8`$Kt9|8jpZ59vB$J^XT%SVJwG_5=|h1sd({|p`jmraE-&K%uwDRg6I~E zsMG*JEcktrRH8KlPtO)=I%gI`%lBZTl9oNTphF5!_Ac;tj=VfqXt5%Jhj>KhzmYVa@6Cy5|Pz=d; z&W@V)IRc6c`H=5i`bEQXvhbJZ?PKlJI!r-Qv;7*M*~8{=z*PU|NB?_|<^rmTYpufU zB6jND)+~)xyLo2{MwSB3Bxa^5i_qUhhkGzwnm)4{oY9qy=asWDHS0c>{V?OOnj=FP zT9aG%jsy(xj^+{+25SU9Ret^uLceGTsVFB$gA*n9&btp9v297sLu)qK zg>rN(7L`!4B5UWoHqOL1J=ZfayKhBFa0ybGGf!XG2= zP2hVB4&zIMp6QDRR`1;NP%u5q&E*$o2{~J-0En^7ysb#L{kmjzl<;FxP3dT%2%W~H z!gJAqUcNN<+|M!8fx0D0LZB?u`~LaD-MPVej?z}UCeLts(DHrV;m}i~ACw&{jh?AA z`Gc)VsA2XW#;Y|`^WD$0oehl|AgrU}DRX;!2d2p(kY{cZ48pQG};LDaJIV$lZ;v zTHZe0Z4O7RAk3o-H(%yhX4GZhKXAVuO69XVfnhUyU1ShO-v3rI?$PeFE`wW}fAaDbwbXh4uke)G1NXy|8$rNFbv}_h8)y7FR%!KGg^4|J_xT6l>xa=%!yip{v#=nq`93_&u01Cjtzj%ZhxSFW7~3%1cE%5;Qkf$ z>IHTU^E}@R*kmDDBQ^s#L_zHKL_iXlQfsJ5UqGEnp<-dg>vTFJDiM1VIp_{l(0jw@ zm>UI+S<6Jlf(kkTgqiLpq9(p}hLY_De~QTtD|#gnI-4fV*Oydh*16I`2s`dCtP0jw zv?TkQvfL62LAIJpph`U9*5=Y?NlaoU)JU#3HSf;PcxY-$eW=)*NIJ_qLoaRC`%hEd z843x>+0SxRSXm{_$X7+fcD%{Usto8tt+d}>c)ys2GzXLn(DI(lrtn&{sVSRrJR`Y3 zpO+BDvE*Gz@;mdkT$TsMc4Hk(a@-%fPPbflZwr^q@I2L+&pkBxtxOm_wtxaNDnRQ+ zyiCFQ*r+#XiN5Z3jZ$G49y6s@k8aog!l z{!qxn@z%;jXE8t4{q|nGu*ZX<5~{an-`Gi((swsZ%%VsAo+Q7_$V34%_ZgV+b#nS^ zR-GiLMezEv%gLh~iEz`-1BC3pg}=1!{4u8=7{KLCDf?^-Lv`M#p^=&=yyo1}C_9~J>*vZD?DDCQ<%Zr*c_lQ-`F~98&ND#51CZ!g96l?ER2DP_e_T zEfK4YI)(~~i`SENAWvG%%Wv5Ye&+iEm6bJFrtV&hd<{H8z(u~kbGa7reGOuQ6`EN$ z8Tm0ki_;+mXJl4Ln6>l-_>WZ-E)wyo$WplW+3@_K%!`4Opd{1)%f_$!S$+>3anz%k ziQ!1M@YihTAHzHC`T18bU*YFoNi3p~;{sf<+tTZY(y*c|mJmct2_=cCQMhz6YuCoT ztW$WYh&S3YkV^N&RjM)!9eu0#!FtiW&Q_vv7y#hAQsX-NY-r8xq|1F_c9$=DcCAA0<1MK+U1Ch$F6-gWEh(H{y^bnVkpo!U zsSQV~U77T>7%e#s5_`ob6`nKXLfJ=S!)bJx1g+MK-YYY{VsuM)=X3zP=O=Sd?!Qi6 z1UY$4@4Vmp5Gs7V92$C9wfKzrW+&)O+;CXP>ke~Tj+BGla6b$cnqSleVp;d}-~?7} zZFjW@?dD=l;&i-^Wd3$Gz?9DQ3K^n2wLhyP97>tFDs~G$X&!GD`B-+!mc?2J@{S1_ zA2?Nis|Tglz%pUQbHKh@98F@ba(Y|sj%A{u05;UFP7B}bu$7Z}ZZ$$OZ3#*|xt~$+ z$B=l{@!s1)=IQDTU0E)!n?4>*gLi3kJ#SBt0GBW|Q73BE`Rv@r@eSiCcSAjiUxJwBvCLuEuR1_-@S#d6kMaCur93#*%c(>T_V2d z&G2k)o&<8bsV??}F5X4r6R7lVI;y;cll#h9Vshg5dY@W-k=9VKpl<3UKwm;)AlfIo=PC~wAL6Ws7&BQ_gO%C zNhpG7+J@avuiGt6@?ZpsaX~@IlY7%mG=kDFj-oqrc~I+2)R(7ljmsMs7;geu>R2y@ zfK=QEi&<_{nZk!(e@sy$o*U@|wFh`k2QU(fGIFU*G0CrDlFzG?iFo5kxMN`4#Ws!K z1iW^B!~w9g(ni*_o{Dj7-Yj0|ad$;tXJ{;6BTe1+mbdP25&rm!3_a(hdMo+agdZi$}h>I1j;`ORsb_Vq^PRXPSb=1j}uD}dX> z_Z+rS+*(cHu9oS^S^?XgUWT6aZ!$&^>lU+qvhW8B^Y#dZc1IAaszV&_4MhFKyx&RI zG#y0>JM)$_>CN@ZeMiEJJ`+x7K|^E7^&Qx_p}}&cwGI zQ}9*ftZ$OgZi~6+vnujdw##XPKOs-&zM@5fm^>h`y*f%t@kCY(v7&1Q;fuA5uT?r@hK)J^bs-Rtnn%^TY3&&nV|>>jx#QE) z9Gnk<$uHa2tz!ICh^7(*_(hTr3xBgO)cH67Z)GYpyCmcJQ085{wJCbS2jO)d}(sxIp{D|VBpE>hGgQ0I9q=%V%B2FvW@fnJ`-HM z1th2K|FL)eK({{?T6C;ETOzJ@9@qJGxsN+Fp;WRa#hvyx@T>Kbm(xgFRHokIf&FdL z;Lrt=)xbos*lVGS$A>fHBVn8U&OSdwVe66K;pW`?9=ieZP?Pp%ZUG1R#cyFc-uG3O z?Tjx72)IN=TOxXHOuM!c(~_)*pJ|v|caOFsy{ZpQU*(N>n10}%P1s(%`<3JeU}ZH_ zP)O2bx!dygRt8TFePdti5_g_u7m}P_z8om#mbX?N`viQ~j{%bE<*_L$ppSwY$&pE6 znXV9wOAJ{QrQlZuKd9s*q3GBt;hV6J!R;U^+b>Po;F>0kGL45OX>bDAJhTkCZ%KlV zIU8Rz@ra`07OOraawz>BE&Uq`f&jJhWSYB2tq7UgCWg+=?Zo^IkZt=qHS zD|HX%Ie}o`8q7lT>c^HPb|Rh9v;EmK8rK`~8pGnHAD?>%2>0Oim!58aEGNgk3;;V) zruWs}7K$HBlZmz96gJj100I*Mss+iTU4;X{r zI4w3Q_z~~nz}7$b)54KYBq$_8FDq+C!>FGf`{lgz%OLybJ))2|fiZWsa5Ex;+1c{ro#Pw-Yumcgcn^J8Mr

v`K;x6QtNj^bMo6+H(0g;iu5bdXhjhMBSt)5KQR4(m3wvYNY zs)OH-MJJDOERIblpYVD5rI=U~%iu)iAt_X&i7#4H>yukX?`S6_6b`~v(FK=~KM;)I z303&>iU;{V2?sMYzyKbb4?xY6dHD2vTr(fERsT!vUX|CoS&ip47=@g zy`$p5JCU~GAh^XI$hOcY5`&~yU%x4-t3#jq-k05zlVf{G$`^X5Lc#f6w>A!l;YBXZ zZuW?q-)0%b)3MX}&rg+neIK{QGzO#2Z8q(sLxCtl`eRh$`DrG1q#!Xezv{Hka{pvK zSF2uV@T8n}aC6dKbl1rf=4(5633^;g&M7DB&0&B5X4|%ik=f(gpXHUO(yCf-ND4g~ z-J{Pm3yx4WPLBpxcOEfaSiw9=0tOZq--Y$lUuA~+h;(k@!D6G<+9Nui$eVV{) zhwSVd4lswgWXBfQ?GphlxnqWOFztT{3*N1@#lDF=+RQZQoHp`GO}b}Xrn3KRsYdrt zMiM*RDg#eqmY=W&A5lCv>asE(TN>WN+`K$k7d)S)))ycHNk0^Zg>n67VJZlgtojBH zMuP<%)_Ff%e~PocS4oRHH7*=NUBa;^s*#vJZ~?H@=Q0cZj>}w?NgkZOO>V(|u{927 zk3EZ?8Ak%^2zs>PVGjzP!8CTSl&x!y^yJItU>^27hZcs^`Vt#e_hq(Ms-ZA|{Q7 zJ#o(o6cobNT~)KJxp-gYCV{KnqE6W2r54;xe=#&^WlI=Dzq2rTb=y_5zPHx~amnv- zz=sgV$8HLK-k^CVI%XERf-`40){TC)N-GMma`;g;HeFaeRI;~Y`QNw@$n`P*s^Ihb zZU63_#3ye3Ukk}Y%eY5%xC{^F6SH=#zDY&kJ5>mb=o_ZHB%65=y45CuD7)~qfp%@! z^CQ(r@m9yqNDVITLaSEO&%}FzaPbTAJL$I4q`R^33c}DfdsI;_ILOK_(yOsm_YRH_ zsK^WT4_LyR5ju{618=Tl6u{}gB?~7jE!g#F*nNP6#;nopI!`~gILafyg zF7>}6JtTjW}u7S$Mj*DniRBPnDIXCW4{j?14y+EMO z%k`GTEJfxx?(Ehqy4veh3dy~$$)_irhJ$(!wCX|t-75X+-2|DsB6U3u9nw+#sp~(v=gC>%jQBhG{b?L^@WeXNlsAQw1 z#t?M_`b=(FZzQaZ8MR-WbFc-paYh&Dv{b0H?$_CchX}o!S(}qwJh;DvY~k{=zKTFV zK>(A6%GOVUw-pw2QO82JWvBk_w}iCa@n{I2-U6Fn6;%Z;$E+5^RsPJ8?HtA{WDP{O zN{Wg=JpN;h?S0QG#$b!3JC+MMvc$r=Bl-^M6nAcTn*Bd29>N)%t;)*?E0MiSm5a`2 z!b7JUhjdGL7*1;^!Sru&Ue-u{adD@I4K{Pqw4elfT$)a5Dnr!3x$ zN!ph3*u6j0z24e5DXh8@9d-!;x>w9=`6i_#>7L`UFs}`6nxz`oivo>zdse@*Rr#N_ zdQB|{fTdaIELC%~{-(7AIlGmB&WZEY48-r%DeZnrTp1eP-w(MB$L;LP3ADyE}?`Dx%qZ(g04|hHVAX z;TnBfD2E)7g?LREYGC%hw0Xy2Wx2a*z8H2%cMS};LZro==A-(w+b2Z9-gLrmcO{%Z zKFC`R7KH{*rR^Wyz+2(A+(+8Z4BmT(3iz}_&!IPQ-SHdDS1Ryorb2wJ;g+bK)Cu6N zOb22;t9t$;8jn{uS=EQ`(?5LZOP89-VYr}|AzPI2Rx({_c7K;qtm%6Uzbg@{*nlM6 zo>0>3Lgt34wobkgFw-2$kb6 z{RT4pb&V$YU__Qmj%z||lCbHUr`LbW-e-AuDcQVyCLxTU4x~9>PD3-kT`)(+kx-w6 zaodaI(+UO;^~3}1jbBMgDJYpEv`$DM#{CH-Hvnb6Mg~Tcv<50=!${5Zw6=T^MpRw$ zMsk0&+|=v^wrYiiCjN#-Viqr2X1CT%`~DcwJ^7D#V+Ygg_I`R#vEw*hNLhDY<-%n3 z9=!G;6AV$8C$|Q92H^pFA})?Tz4tX|QA9RrckQ?ymE{L00+n7Q=AD39=_sFn1{$h9 zfrr?yG??2PXr(j!H?lQrIa*&Nrn=2zgY8+7JM!8?#-4Qfx4&ptIj+y2bX8Y`Zp+vq zZnE9I9IW)X?qP=e>`yFCw5?qN9jFeE>Rq0>m6t3`<#;Fz>Pf!I%fsU@GA`sZGEpHD z*I#+|uen&+gR7JmOIXDLK_NW(o5M}i=9CHuo%JGB+l?G~^B7@gayUR!^eXew6t;BE zKkzRgL^ax@@0+q;zNs8y;W3p)LqIF?XV2AoS4ATK6=h-RbI&FlF?zfwS$N4+6z>-- zte>i74ihYZG(mgfpIYk2$dPwf^T>NJYC^@nJhQ3KeP&Q3eJYkH3!l7y-yNUoi(xT_ zL3hL-hQWv1lQiG981s}!%_mCuwH_Ys8&~)MnR-rK$UZC7ZW~;<3rDmp&%)Vv$^R%0>E%oOwaHv=AC17~e`rPTx3F)b#Y2 zE9-HJ!^1t^m-Nx-PCG!|KN9_Sebo9Ud|t?PrS)fHZ9!QX<1H>KAMbN?HVV9P@2wc9 zac(<1PN`>01z*?X5m0Nsc-(4ZQ;;cpcp$Tk6(9+*(?lho@q-J+$#$hXk`6jPDpWY1 zSJdC1GX~K}&SI2ybyyRixvU>d)ZdjWA=GhO{lZID;4GQ693Y<(FRN%EZS9{rvDkm) zeP2y~dQgGea3>=PsVx>TSK4b%{UStaw9MqXHMw8o&w|3FAd1m=8S;Mgt)=Z7hzBm( z>FSw-R3Zgf)kIV>b&K}5CN2HMUobj{SS-wYC!Oe-n?GJ(iToLT=T3;!)dnITWX9Q0 zt|m_)+&3NQdyC2t_`DgfIwcJWk%BpWOn<}5jP$}Ht!Vd}D!=OjJs5T{3{etLAbLEJ z^JRydwj1hmIcF}(PA|bJJSe!Zx)+m#0f}c&+-sIV#*-$a`wnC6Vy! z%@Ybx#h$Rh^aUxwdutZN@CySz;Dw3^LXH^kyr$m~cV&3AWlCcV0{bED!?Kv63*bKh z;b~_z>9NE5F!NL1iyK8cEqsCV-?iuU+xeWq%E_cq7(y}5+8xj)ebbG_^FR+1x$$a_a%1q@o9MFLU= zQ!P!VJTX}>U7D(t1r<7g0xo%@KOtn;&kiOlelwB!wO3{AqrglSh)MW`$3to2Vs=Ky z{OOyO-8M~d+KKH>sP9~QUmUZ_A0>8Ww^@Ay4uJ(0wdOZ{ew~l|=u=aMcUI9do>RRm zE#($GY@u$r7?(*Z{OKXXSxdUVqS!Pt^63!+qe6+zqYp&w zw2Q~W=|AwR70kIT#`Y;Ev~T~sa9=mMZL#c_Z0_wy6_TXA&Wwot9!3QW4bwToYl1EyOJ1+#`P zpQLnLeJj3gt#i4%y{Eh*hVXr%?idZEd@obgo@!`n-hEZWcGdY?*-_>Cxgdt0X@*aE zI2uKeI6gK1)BW~&kQ=;hMpqh(3MLoMLh)>P^G^?(rQren5tJ-mWVDRiO*_%p{akB! zWOQe%PXvI(Hji)d<;Yv=gPlNN@O&dnKYz;mM7HDjQ4ManN0XLA1@fw3Yg@G$&|oGs z9gwex-}-x2?81iiz`#v@qn4`MQZuiZH`H>r>!f@DkF;;!&!3G#XaNC1dRtj-sK8d) z--38qsi#`yVDW5mvWeeqW?Z5^>P?!oIYpVx+MMfm2Kx6OK7{Pw00vl3y#)h!50N~x zqa4h6f7muLUgr?tADa9TuvIgq9I{m^V5HOc7A!WmhZ%+ds=ie)u3hf06+%3x zJSV7q)KfG-8NT~Vgnt?B<`2^DfwrVAN#b%^#tk%{#2khZ&dQmUwU3?L(s7wR=fiM; z$DwmtYNThE{Y{bQgxw(o|q?bg<_mknF5 zg)U}^y~wrRkS~?dzd3jnX<+kg+&$1vUt5L6KS$;@F{%HswS!mg#t)y97epPp(mk)} z9^(A!uTQ#x_#%g~KpP}#nyCYv(hNg|!KtToVg10E)2MfihHd<8r_LGa@$+!q?aqlX zicth?jQ_^Y_U4(Lw$>Ji$g(@$nd6!&esHW|{G)=Li1}mma{#b;p3C$U)=db0ysaQE zE*tkWPk)MSHuF=P{N|zD!m3`$MIGI2M(1t5TfeCg-r>+?g?IS@#E;!7v&asGI+bSdt5VFzTkdi?0JevKX$|#fAGs7R= z$xj5h>~4m8Z`~N-+WOkkU>isFX0+J-#lX12Y1z#I zeM*EVD8$G)b6J-se#Lbp2rqW6z0Gks>rud->*@lo2$NiAM3)eZ2gT;DFL%NGa1Zfv zc8peq&;DV$6w$GyGUFabli;EfMt{>4?5Do-7YagqZo7UsF;%u+ZJGqLJ1mm^YB=N? z_ot-C-C!#4yO(Z*PARXR_OoRG%h81-?P`O_Z_x#=3?y%e6E=SEhwANu4#7B2yiLPZm2;^m7Cg}BQ@1M~<&>bw*;bOq9lA^sN{3C~~i04&Gv zdT_nNYw|~xVet~b4K6$fGr8fDIy!&=LMOyfi`Qh%07y6A3tms$pFE)9bD%mbOhU2Q zlzfL+pFvy>6duY}k2Xz_goAk}zZQS*#U;%Ds`<1oZ-zF>c@eu(L_t=9^cqtd!ltRn9KaEl#H+LQm zH{?2*-i_>t0;ceiLhJkI=M$Y{f%u1uzmI|n55{IwX9oLY{PVP5Na$MU=&Wqm1ll#* zkE+!SINQGLO)a~jd@;!3CVe-r-Zo7dPr^!gps31Oz%3v9&ss7?3$HVsecT+foKC*1 zp61~K)B@XenlDUFWGbxh_hX%lz5pK<&Q8{m2)pUqC8 zKS`>^caZb65>Pf377>@d(Bs1)&O}I}`W~8pSX@h=`zFNy*+ z#oGkab4w=O?7Qi%Fg75A_jnL%j?BhEu?41i{tV+k@Pr{3e|u4>L#u!&7--cw9ts1v zkpf}|0JsPjh2b%)wf~xM$USCX(yV9!z0kDe)64&Wi7aXtI8)qbw3-4Xmp?xqGqR;w z>{_0LaIcq#gO7DQ?MOOfuUwzDT+M4MLB=Y!?;`SR+L0?mH=noR=Y8FU`KspiV{Kda z?z8NL4SQe^lxvnmYdax~8ir{eUV^^#xNn}2o2U)G*2)pva?PdFFf>r` z=Ix#sV#|Je&v18y-B6kD69q$3p61B#RIpx0VoK zOQQ?V)(t<@Q3vp3it20?kn7ul{PGJp##MXduZL>dHXUi5ZJqRvzh|Ev4>2IlE<7JC z3O6kelu}!&^BB#K=9Mfz{5Ze+{Lu|MdBMLuuLL+te-%7kvsepOcMNq-&NC-vls-Hz zU(^i+ygS>Wp{0caMs5QCe2Sl?QEs_`s)v1H{;|XhJHSgZ4p*<|SZrvFh-fswJreuB z(YfnaE(l%<*HasBWV@1EeTGH+o~j>qxr)~=LrKn^q7&1=-kX`2_ z9S|NKrj&TnpDL~HR`=<-R>1GS&1xc4LuA3$4-oR-X2VI^O5GXYH+{<@PhdZD;1JLB z+_UKxwfpNKH6E+6$3yseOA~pTDTe?>Y1G;Ixk?YB2vcyN$tE5DPc1-90J|H0bFc5K zG($fZwfkh^`4Xy1a~QKH#nQw(E&>c@NA4oV6Y`c+Ti+)+vQSQko;l)<5w*Olvkl$! zJ`;}w@fl`$ffgExJYdm4L{k6xd-R=6Bf zAV{@?=kq}XgaEhOg}GR1gSN0wP}`w8ae?||dl@$;2RKhVSFxk>%;N%g@Ar6~XZPPS zI%=#Gak5$M_N-Zu&2af720+|vd(v+OcAxI7t9eQ+hcyGp;+m4L2?VcyqzW19r*}2( z)<2z{g40gW8JW_)SM*GH^4`l~zqtS?zUr#3 z+jKw>7q`p;i$-%mqY!YY$#|S7lI){6Jbz&Z>gTEy$5sX^qqFIq;gX4ON`$XD?7=A>{Kvp#-%B%K(4G$}>RK#~8I`w{gO%g>x`wzr8r9gj;uVGkeO{~Q* z|8UV&Q9Z@GIufE4uNzk%_pJo6EGI;b^^`nx&0Z9Y#S=Y~h~+e#h6)amHIR{X*LndP zic4T|ejYTrKK}om@12om=|rpZQ|rJYwu==9Rz6S+jlq9!re)o|WR)id@U#N6HZB?= zFW(pWnFfX5N%~8%KdIf;R?`RQEEGboYKaB4ke7vip;t$UXT&{)u(gq}q^>epjfyIP z{yNA0H#qg+hlA!dQ4z77ieUrX$*BBETpgMmKHJWlklsp+m8 zb)nlieiUm$yHGL%(0qE%I30bL^P~X1xpl1e=IGbC%EYJKWxdH^0_(NTQIIz&c6}pF#{4sgNkj3ef}XPWG6*zmX&a`Y*N&4Muiqle59)|l*B?O~o)ePUs_QGE0rmj?xs zm&pjpWZvx+x=(=Ox4*~J_bJasOI|gwj4ZT5X*btZb8n5A`Qn68Bb4n%t@FfdsB0P zwYzFr2-xVYSzl^Z%iAK*j`#Q2%B+I|JCnFML4&j8kRjeO>zxD`%hCGK01%K!037S1 zl(A;fzI>U(aqv3CH)3-y7rH0oJBCGnW**~Jv*uiXC2Y+|d4T)8hvsl^%}G}F3(I!B zD{cq}hpsW-Y?;5@@jZ8ZTxr?rcBzmFrQO*gop-!WUlhOf=nLC!AG;*ljw73;cLjh) zQDo2-lePZ-Q-u4}zWO1Gg=rogU$os5ztLzv<&8xUYVcz^$tT-5VbOvW0g4r4n&SHX zp>wXU%KaX>#iSlTA!IL4==olG^oXvamOXOA{{U#A(|gOm z*UFTVdgIXfaR6&9F4(B2sQ|E_aqNtDbiTyoHBy2Djg!y3WLXNu9MJhazUvqe^r0w5 zpcUZ1-U3YE+`_o8FQRqh3ANMuNe7$TQ?k&N>`GwC20%K3=@qVzF1kCojL8V>+ZaQ$ zH7JQMo@%6s!*p#r)b75R2iE`QgYVu1POL0*@TW-;f7G!Ts=c&Sz(pqEe&z7o;f**s z>W58#3TEOUS9iC?$`FYQ0Vu(K{$zYmgF9qDmjT(kVg=vbt(CB-OPiQ9nA>$wkALKK zegURirghOSry7|u*)#7)FTO-FYsCOu6X#9?WVIrowIQmUEZzdw$$19&ZD>WgGyy!IZyS?rTy2 z8{rCy9mk?om;~(PTdOr?fFhZWmXZ3MI%Tx;&byq9hm!9`E0ik{+w;s=C8}}44*Wp$ zKooenxf4al(ftbG1z^)YPpWApwm#=4Y z^ri*P$9R~VUoqSrm9PCsJ%H29wKH`l^l;RtiL(FL@VR+&r;{lpYiNmR?<}!XMH$V- zc^&_(j_(X=|2W|2jfe-uCzVgbG+|0gYTL)j`;F^ptbR+q`gcJE_6U3>zgTjjD02>N zDVHx}*h5t`ct3R6H@WwKVBK*RY5Az}OHjN(XdBJr<#BT|9Ww`HuPdP-uWKP3J_x)E z<;2uG-P?}uQx<&AJKGre-6#FeTJGWi#R{2^c2-_H{gN@cboHj ztbx(b#Rm}Xf)ewrx2WwZ40=gsFm}HumNG*d?>)|d?!*&ijaauJI^&@iQnIZfOPFGR z?z`yW&hy&gg%X!%#6)%;Zax487v2rW`M^-N|qta!Tzx zT4~+0tN!oQaChA6lNap&g%HmE{27?IVBzC8b_+9BIGt{2%Oq9C0KWK#y{Nu&9A#2p zsdEM7i@STVw27xdIwwE=cxV=7xlZ{W?*h_4WKyD{%G7J-2y~N$KNW80JP2^t*Iyn_ zMo|)^h&ybSLKOh#l*|ZP9x3#~0@9|}R?m}wo=^WLUO4-ot7APA^%rPd)>HlkTatj( zbe21sZ)v6?|E$bdJkVz&8!248X;1PE1=T^II>0igs%L2JW`lk>^vAPQz7c_ZGsP=$ zWrsv8pj^W>jnUjqooZdUe(y=28G2o#TKin^X z7z>~w)!xFN*M^$AT+!YT7MeQPtY%XPs$an`OO_=RP3QjHN5PcTPa}BzAyDx}x>Bp_ zl$Q|k^q7NyX39n|hTpZEimKBeh3h|-afp~>dJ?jf10qliY!5Wl*-1#NC7JdbGxCpu zGDBYib*|*<-tlD?AX9sIFfk!+7Mh`m)oEm=iD{33lrMIRw6X~s^(z!J`~NAc`zY-h zV&4rNF2%18A&!p0Ko-ow^f~|x)f-j@Li?m%mwv}KH-E2>YJ$TXKM@lKbz#oHm;Tkl z(!%f1^rxg0%+1X$D3kyE@`q4sCZSH;>MLuu7_U7HMYH>T%=dYC28Y|JR{vg<7&NRy z2lY589%T-F8CbEgm7hs-h-j&keIGlE5lj0Rdu~GH6B=Q= zTw*FV1?9Ir1&q1W?qm4DZ9vV(K)qD{jln9K4wtWZ&L>{vOn5=|-%R%~5%^ zt%P5-`S#4q4@9i#6$;~}FF%WZsi-EdRQVzb+kNH*CgHf)O;MkUJMp>WB2g?X*L>d$ z9}3GR$H(#;FW@?dC+>FfPZiP&sD+Pr{j(-w0S1w`piie1m{-cu#3+xUZjQsHW@*R! z_+M)gHegJEfSzDySHxW+(|gNtlC@C588N5lV*YDgC5MFF5u%y>`j$-A$fxakmWCh$ zk=-!**Bd-3IzB@~)IR7k)F91Hj+J^#Lyq?EzpNMb#z)lRr*pKCkitymECXzxe=dtY zQQG$!;SiC7~n-dcs|9P0XW{pQM zOu0n>l~}eAdp~?m06z4I9jEjL2C6ggb;ug5G8^1G95;W*CHwEAO+%6U=B+LnkFnNo)A85Q`5wb%y6lG1#OODx?MXE9 zC#Q#|NDGYG_IhmmAuvZ~kCH`7fesb}t_q4!=%&sb)cR}KRDSUD(@fYGPHWOiHEUL> zuNOR|qPI@cNdE2g=>p7g+4Lu+040WnT^y?#AQy4F=~Tw!Ll?m9-KJKyJ{nqDN{sIA zoZ;B9d0mrsdXJwJx@3N>;h9A3$2zjp>EpDkcFoS8rR`$yguFgv&Rc2c#tOlsW!Cnb=BpyJm8L+%mPi`mOdv`_L*E?F z<%9{~<-~mQ<5sfYnfD-8ywmR|jf*(9Y|(p|^e}k$A-aSN$4K|5iCBH4#U=skHM0jcz{>BdjJW zWfc{6Mo#H0FtCKOBESO$-7N07u~;ArDND#xe)PX>qbx;UaRX_=O0VPv3i*#>9(1-H}QF)wE))O;=b_+Hy!rV#d zYXv>K-@-70ZOg$JCenwu_=y@jt$9I(gM!MtjpYGjgLX>3)u_I~0&Iab-V;Ur$vy^43AxR`$OHfglF%~V3b+M zvr-6LT0Iw>NmK%d5v^KuPqMh5xe1v|bMDL+WXhF}b7g-d|AygrCJ$I3W6-x^Du1(Wl0?Yd*x@7L5~4;e+?hQd7m>UKvZMa;vX=U)yf6#NBF5$`{sOnj`it|aU)@8Zr1Xt$}(!N!MO2jb^cTbT?jMwLo@Ng9*G`$h@$KOlmXB|0HGdi zBeoW`PnU+vningC=$<@;fYc6lKc*`A7#)LTI}W+7LfDJz4-t!@8x4akAKALvfBDvq zDd`#+xs<$*txDwxMCL6FUpo)*O4Jq&kiC|zRBSoq<>tVHJEWX5fMB$4xPPCecf|od zQZHD?z1&MBhAwt}{HZyaPzmqgpi&SOZ=$JvGAeD?#SM3-5lO+l#0OW>IaXFos`AcKsHoG$b$CJyzH2STgNO#cIT-p>1aS@VJ4Ye7d%X@K4hKYSun6+qzh_izzFE(rQI`aYYxxSD zy0jWkx?iQx?V8y>VuCf0IdUbW_Of{QA~V%sUR*=O`)0R*^F}ocl5m-Ik~AShaIciJ zGx6H4>BRAzV6X+PR4zFM(wuvTIMz9H#vQH2c7xac<8(xHNcQMYMOwKQH4S#@@G;F_2RKimhKC5`cs z+VG|?_OjvJ2)31>%C%8r0SVjD{KuxJo(vB8L$V>}S#~Nam*-c{0>t%y#>4RWUb9jJ zSFUm*kO6yZws|916*L5p^dm6&?aP2!8yxN;7v&RtSCN+9)~eUclOf{N-!O(-;HRse zeT$1F0eD;_542_BNHrNLscX|{go&fXxC3EEP=$cN^MG;orc?9I4W$_5P-AvR2W0 zE5~Dg-JB`}ITJ}RQq=rHk6igY22ox)5-+izFp>!SQ6jZZ$H=H9DesXkt>%Fp|xUR)mY-m zIrkavbpF}&zDPA~8f8gfADmNZvy+N&2r-D%5#F?{P?TS(a7t;$HpYXlhAevB-qtbIV?_S_*W|{wPhwYg><)Z$3hP>DGY#4j`i`ih?l_02th-J* z`aQ;F(1#uH^Fl!7BM8-CO4|F7K^-eAl10}W9Yd@>V577%cXDKpNf)N{wZkCt_sE6F zk42L}0p<@3tvzxX2G>H8YJj^scXi;EJFbb ziw`I}h&!X>6Gn<>bgZK@cF6*MuP(LOBYt~L9Ah+n9M>aWxifrx6?!A-=Ke}7@gi?G zSB7}_dF;j=oHqCkG?X8TZ_~deWAmUtMGAF;Uvvzcp>Vw{)iV_pK2MC$$2tAmt;jOe z$wT3xu**4-PB^29kM9H=heW#bs>1V4^fzzb_0^Rwf1I;Q^g<=_8s8AH#GL@%T;3){&_4 z+YS@o-|l>3wSK@Ts~#}cRSl$-XhU-zxg53IvrB$QKT25d{@l9M$$Aqdfeh#Hx_FIJ zh_!xYeIrROKY{5}vT(F4{pPI%+xFtcS+C(;30bYrs;L6+ziqCP>g+5`$)ta8oE$uw z|D$7V{_tS9KTvI8I(F!u8SgU1;xTrVxj|9l9c8DGO?6UZ)lUK@Tmm&7eppxvcfNXv zUp0qe2sQZru-kEwiutJ<&XBOT9fO5d$1DzR z)YtyVwfK~#zr7;jXxR}Wbd_ABosjVN@;;S--3J(<$bNWO$jIP1T59znHMN$m!|gS% z!eNVSER<|L&%dp%QX)hbCmHlgvo)5lyzr7Gt1 zFp;QE9Uz-HZ1Pe>%0HV>)8@2N{Qla}2lCB0iy><(m9M+&%N(}1>4?PASgs=^jZX2C zK3im`c)Y42gDFtDQ(tb-5+SnWzi$0^$wZv8bt>3VQ>8xgHB!RLBH-_IEQ{qLZy#Fxy(P*uxU zyBR`qQHkvJGkev}=^*M19gQx)&SeCyiv{%DQ|`8)8m=UfxauC2dqxYD;uqT{ftJ~I zHQuMkN=fk_N+)x>**D57x09R!f@r~4+D>`<^Q_y99t%X>J^mAKB>VNkx?3c^ykzru z+2i6TzL`U?r7%=>_Pcc5y~FdTqy2)7(eW7*t;36(a<1&{Q4by*bH0)Mlja;91j+|~ zuaoP3CuAv=`>TqEFkb^q3}#{)DDtiCz0YtDTMKV62p@R70OLfo$2^X~;`$!aW=2Nh zjUJWH+ev>~4|_S+OP-5;|NVaB%un~SC_FY+mGx5Jm2P)-555zL>I&j~Zy1!MIog|k zeyF0V7Pm$#TyW>{i8JQ|yn_cgIQCUeCQow~@CwU0gFa?!d||mmV0qh~v1wC=XE9ep z=rojFf2VoYn^NNO+3=2F99QnW4$Akp;LWpt*c&xFk zWZgCM&wRGI{}s9-W&3U_?`r%%)tHQ{uKwAShfUOb+4;GwCEquaeq}pk;M=! zs>dQx$E^4Q%W#|1ZwIGOEgMZFd1GN{e)Zgmg;^ zNJ>jer<8Oz3#D7SK^mmHyQHPNy9K0UoyoiR9%p}JeCN;k1>zcu#q&IK&ilUZD^OBz z_i@n@n)Jg9J4x9???%`2hy>h{THf(d?rC86#~QEGbz+?F9TzE-PVTO0HH!gAZjS5Z z(hr;~C)@u3JJ;uz*P#T0KGg%p2{9qch3XHzIN!ecByt*|JU!cPKTE{bVb)OqO34WY z1?tVL%uK`Ps}EMp*6CeF>mOQvA(0Wt4T|QmEZMD^3)YEz!mTe3>@40tt z*5`2$r_U7xbqRRar3NrabBcUT0%+J;+Ju{TxFhbRla_=z-5 zm4iJM@^iuxd%NC5hD3HCH;A-3ZbD~)UwjB|f7FbVzojnPL&fXIBz!04Z&oFULCx~! z?XOsab5xQ0YK50XiK9=FQFvUO4#{fKnJ6Z}%Q7M%1!4Y}GGsfX1#B}}#Mzbb1qTc$$ZPBtb^RS)7C%m{1>Sdd}w{ld6 zitiD_Q^X4=PY3=i#n7sE)j<~m1stx-un^JGGtF;tPNrbTU9L`t?1Qchx{aJTI9tH^ z>^lhHVKury@-o#~PLODu?=2IR*6IuZ=(A974P&VNV2DcoNV~TAt8?my2@t7k+b9OG zy4fmEbf%JNTF`6)Boq=ur$eao*C_zq zkOER{^06T2GXg)q07FYlzeM$gWeI>~S9wR^fE&4wIxrSELyZ+3}&ns+l;UYHW^Xj3r~_J0k9&BK zsFZr;Qe@RceQlxJI#+?>zt%Hnd86$X$Knzx!NeKdKQw z$k?QytM9F66DOvy2fjvX_`s(UcIYmzo0FNL7Ca{t0H-bP&a6Rdm7}?rtg-_ZfTq_# zq|2|E(I9Y+{cbRN4M4K+OQOE_rPH>y_ZS`b>Cx36RE8P$t%z<&*ZVJY!vy2aSp8Az zrEML1KX=@vJ-!NZs%#N1oI%Fc717XHQ|Yd(t})nz)RZXvXJd?ssf6?k|EDwj5;dNt zzGw_=oItr(VdBL8iAMcNbdgwN9uP8far59U`?VSg$W)y1#)!UrnuU`~3ySQNlcgr% zC8n5E4t%`feCYfMYM=E~zFg5Jy!E2zFKKJR2Q_}bP<*09etUe_ojWGTjrPAdv|w|1 zP6klvb<*36@L*6|hm#Pu!m5%%A)`!fJhTT$h#8Xvys3gU78Z))_#-~?u{lrOYm3=R zxJoDS_X^ismCghr()rn$)L&ragmT*Z&D2o1EEs6-rjk&zZCONx0`3N-V8xiCf(j` zbRMRW#^FevZkOe$ULRQS{vk`$ya2B1is7#tr|~MkGNrHr=keYyLe9aJ4e$9xpik+) zG}giu4y<|u7Ph@TI{{aI^a^2I-9r7b+%mZ}W;TfOgZsFi+U51C7cJK;%Q|%aSPm}G z7Wm@>88{Lie3eEj+JI=umq?t2KcSQo)W{YLip!S@qA}sg@{=(m>0S>oOkv8fwQi(x z`!lu@?bacH0sV@mNAz^7il{7-%QM-iGYiFEiZ3etbl|q3uf}`)Z9oM)!ks7gnq?pK z+dum$e)Y3_M(3E;396$LSC`1>5Z)d-Ty`qG-W6fxJ#J)hLVZk1jL!O7J7Yp0*x$i2 zCs#TiRc*?-hjJagnAJaK+5z=8!)*6`;IEJ$vfJ+7Wjx#}L{Tx!abkg3TC0S^V z^s&$*oC6=?JtLjheEjudQ2`FfkRS9j6U>5<3pDmoUKfE+(I z6{iQdBE}fC1p4PF<9!Yg@-CY4sQM#1T$+n2?o3M}ymJeAq^*Ti6Ei0O3P!Uqf_IIKvQD%&?&yLdrc4PgJz z%NLViOXYpwK(QumeX{@PJGM>QcFLLT3Qh;`0)^sWa!IAZUy%7Hb}zE2GQMd4B)A~O zrMIWbh%BIS{)$1d`2v~iuxxIA788r;ONzn8TQFN3)Nb+*G7P}W%LHf2+4k@~m^Wa? zN_Cfj`1CTRpF4pV!zBl@$}S(9j0TGgE?0#;-?3Jfu?{bDRaSW(Ydv5bOZYbk$UpZw z|Nf1W7vAlTMECxR@B@|NW$mH+1VcQrAAHHunON3nM);WB{nyp6MaI_$#|4a{bKghX z31BOMm$)7w(2v~sL>5u`V#3)dtE(@yn!N)2&%Y2{dQSfg=z|`wyB$)Cc%^mRQ9=Lo zjwNC-B}4!s<{yzW@v40R-++jvqBm#1?^y?6Gv7k?9b3%ig2b1d^T5sKxT~Qa-!5JW zz(FmqX1!awzQI?uwzadn8gyn9@E5qJ48Reld}U24*kU>5XUPWx$;I*iFqDv06f3S31~T`|^}}1YVzBX29?52cE6IE>+!w3DOG05e56TPxi%pcM`^`I(D%L2of+;0Y zVTzo|&V6$-%E!EE`<-93ASJGAVY!!JxeZcfzKA6u;cm6mA`kK@;9PbOr5j0;KISUh zw$N#(G`ZTrm$`I5TOfU>KNXYy&rlV~YN0^_jA7I?)F>wp^XQlns!_B^yMoi?KG#6c z$g~V5=&eSar1glct!s-e70%hMXB;UH0y!OSg?MtG1W$#5g0KBh( z4+W>OF&)8FVc(9vr$Mae=>+m$H?ZUhS&9zM2R3;49iW3flm4{ElRuSzxNlE6?DGYK z?nbdxuA13RkhJh~w7%$*77mM@a}0^JiUsT>h3aj^w%>`hPW|HHipyPec~BFxRvKJq zI1Ky^Ssz`rlhX@Hoh9D)S-Pl7NT(`R-9GE)_4YQbR0QbPDYdbg*|QMu=w>P-B$Fq4 zA8yA`%&Z&GfXkR1w@KAjEG(cIADg1uwyc_xk|9d-s1(preSA=PDtTA*OwJ!V*0KOA zPoY}J{HTFM@+dbOq_jB90uQ33FOliRFFHoq?>?;S(Cm?NBQk6N)-=~?_kY;FWWi|STw}Owm=NfS?>QXze zTM1IOA*y-wFjSZ>{Os*4S`Y{SlR3@q;gIp_I7T0WIYqX3p62N%r-Ql!ZO{BOvfi)q z;t-*9&k47aOn=Z&{@xlwaSw)oe)C~`AZ23-ak|-lB=wl@uk7E;1>h4xt5mTg!Ki|Z zjZJ*a4?N456{;2Mv3Sr0m?m3Ggw9Lpn`*THZXC9(4v-PNcly*~$eShuU>wWS;`((Q zmM8alAjz*h+C=GcW_s}MaGTQncH3a{`&01HL(!SP%H>g+BtE0=t&GhV0lO~b_dbV< zwxIB}laj(4)Wtau6^)a>{az(^JZQ+~h$(ilEK}zVt}%+T0ZN%CAJZD|L-ylXm5(c* zN%M)oi(w)CywK_?cNP4>R-0{l-=e#f+sY!QH(0x7f=TjH@`54!nE5Jl?|d;n-%i$i z%Sf%44N@nF{FXg<|S9nomw|ba6u;~H0|0P&ILQWb9VF(EG*3L zn~34s5&zvGW_wFvWYJ+NdApOZ=-&027I$+?ITfX%JZKX+=&i-TvUJdWDU|$k${`=; za@jLo4^`FpJH1kpXD!9j37BL2J2RzDr?Kx59CW3(4gg6iU}(AlIBr0N+)}KWdXj}` zU_yAyo;|&v*!r1q-s!M+ZZ7z1Gv9c_rgM-$n)2nP=WWYi8n1uSBpoOvGc6{msflF( z$PP3^*C8l!{@c+@KE13KLg>*DA&@p-O;C-nw80H0+Ny;5= z8KVtf^TlsA?z!e`3k3XQ-hWz`x@=AKOuITvA**PE~hCX(F zVWYUEIrf{*@{HZ4Er%ftC39%{twX70XIS27(P8q}7ISzWcjjPS&Dr&Xgum&ikrnU$ z#XSM)y(9L|{9;I(CiDK?zP`R}76-?VhVA={YdX7g4~hkSz|+V$iFS?_A5U}GRT zBzRMbX3s_O*HMb!OCKl&n_}2Qu_zvH_#p@FrL5ApYdN6(Ka+OP3P5r9DA(S;)f)1JF!4U(poEZEEwNtPW-`H8Phz28EQ3b4mnSredLEe18jv=LcHsoWRQ}SjROQ# zE3yGQjihdRhL+DErjB!ztq&g(|n*_(GmwHmz$og-*~c`EIc z>ypk9BP9pNREu|88>MM8MuBE0oBwjNB;U6aw6V3*H^G|{%MJ(CyjRyFTv>N}@f92M zig79Rd0WHwsB$$@S_@fk;yO{J*`GoiMKLf7@)X}A--$Rr@!vO9Xb%=JhqpZsq@YwB ziTjGr<1855C&>LV!~3Zc42_&YYNYBdngvNhBx+tq8Am*j{Ao16=jV1T|q$fP&rNuka z_Mnr*S!b%K?FVakXe^S3%~lD)G6pgD4g>Rq+Wst%+G&DOUotDv%Yr!JC86|F=OzvY zZjAo^^pqJWXVfd_2}sdhA4^Ui*q5s`-hso{?pgus5a(8@HHK;(EL4~Vr3$jCz}jfH6*cnL-7ybHsIOw_)2(O?WFn*Ojo+zlDIkCL_Q+64QZ-* z>!-2%z&9cs%n%X=*`J{7*Dco#jMYcWUL+?b;&0O}HJo`r#=v-vz1f2*t^3R~iMmy; zwX(cT=PU|I9hH+jcB}bYVloE@{VUb^i?Q8ekM#1+3*8!(aqC*&Fk_`8-oGjF6_c9s~p_7w;D&TL|A8BL3(e}6W6Q1j)rHgtjr!=+Uti`bU zpNkXeiIc9Ynd6qB`AfUAVNWlZqiB(#b;K}2XMR%%fcAjp9B3#JR@V0G??Ch|Jei4; z3GhG>t+7xCrs1!SNODK^d5g&dozDl8O-@18&|8nQZD0Cn!u-PcroA5K1adGv(5Lf}1K(NZR3;6gO#Lia21c8NwuTQgf%C=gy z75!OU(Nn#@rR=NIi4ef5rsnc;P_|3~ogmjcD)hu=k?oe;E$9x{6IkU2eXZ zF%`lEqGSDsCuD`{Z9g>#B=c~P>Nyt7&BIYckf#mUXaH$HewUW8DJ;0vc>L?6^3lE- z6b`@!$&Z(=--UsJfoR@23SUEA<8X}P2 z4Wm}Dy#6@StTS3`f(YbQ9blM=$6|nqY$E$1%KSwn!9NAgT2r$3^Ce31o8zuowObnC zrqo*#bjz46qySdbJ2sFonyWOsJ6SIzNV8b9DN z*y?R-;4o+p9P**>EM~o<%fSR)x>tI03^nS0kH$ZtF!1U_2`yYtOeC-w>04m3cLAZ0 z=g+6vZ9hFvJcubePX2oTnz5`}(dHm7Y1dr@Z*d~6!d0=?ZH;1+8@L#0Iv=c$I3lmh z*u@XcmPK{bTkEc~z;H`}nvYRBGn}R;z~i!hv1wqc^`hKs(?Y{>r}qwj9slMGOIWz$ zk-4UahhGc(ZR=$^8VGhRyzK*P@Qlb3Ot7ZyA3XhJ_t}|RsfSC+;qD%xFJUz3(^5;2 z6)fPY#LE%_=p0>9pwk5eT=2B5|Ayw}Yd6~!-N6fIa{)G$o~4<%FRvMeKWYCQ+x5eB zcs;*F;kXi*ug=O?yFann&E;B5!sa~M=RSH9eXF{bU5I-~h~3dcH|dEYN^offpE-X? zGL|#_Jp8^A9}#h!{Nk_yo!oq?Zu;SY2-Ll@al_@cl~ixICqARP0#e*J5#e<$lRA&t zDA18&dPn-Wvl@>vH2fuK2Nsfed}e4skz;aNmmxXjMLtFli)mbCzws-Ki$`clvhV%p zn6wt?6UBlbPf3;tco~t~dKBC5aS6V4I67$Hc!#)SsUWuk4dHFQzeFjAL$Oik$k4$F z>Zsj@KhO{Y-vLFSpMT|7(RZ11#R80+jSsSCfwC?w(+?R;y+_;AfEewO9WNEn!CzWm z*Pzg1Q6NeTTj-CY>uEVG410}!U}33N`I#5;ju#dPz@I^7I*Qk*tv;45)}g#~NX%Szn|-PA@AeYrWem3AQsx}Zgy$-?FF+dKWHep ztd@-Wi>PL1)GE!+`2o$@_^jsL-TjC@;6`4w!$^d)ISY=G8FbOy0i%`DnH?gcDIiuQ z-rLaZ%wxBT4>@lg7Q5W)X5n&&HN+zhyRelV-opOCJO_OmVrBTKke*`oAGS%i+JtL) zh=P#?SWOew91!QqVg=eMH`?k=(zIT!_@0I}t9MqdERZy;UP5nUGh zb}2wgwTcRx8Cfp#P4^M$fW89#gBpt=ye#xC$Z0X)W2FYwmMm#Ns%5`cG7ulp75YSx z7OIV#=9211@+QS{d1mD)(gF=}iiQ|tzRF)&8rWgF2!(@Mb9IWY6Ae`*FZWpHH*5mp z&;?AHj3T<8nzHS}rbkWU*1pLv*_T*Y@ZP#YWUDV<_H61$r1FoHu`1#7{s4}NIIM9a zF{}tJUT_Y3oGD=BmjR4sCrYRWrY&-{5;3o?o<7bE-xj49Hcj1zL#;A2;r->DZ>>aTs*QLGaY1s>Xl*s{Hzxu#*Z0+Q{=2r7xp#xJXC;py958Mj zt=E>`n+8CbxtZDfG%cRc>z4vuf&t;SS373l3XJ>^(9TynGY5B7`jhqAu_vs;>-r!< z!}w!h74_sj4#&?pzV0Uw0+oS#$@A&M=7E~dqn^WrboW}imnPT4ufpM0HeWq!^W9{E zH2p#C<;mid%2|D%E0*d}Rr1N3hFSQ}MZ^y&S`#ZlB(lnAY!V%E@G_ItDMJ1;G!f#Q zScvzBNd9!!^6m8377I1WN5q=r%}V=fMj&bLn{WXc^nqV;%pb5$Shp|BfiFO$Idn^DdXcoWdA^4IczysX94JSq!--{Xr^>g#Aw`nRs?)tdiGVsRpPVF? zv#@(2nCj=QwC%{eS$AQr`*HT>nC{nqxB$1?yRD5$LeDg*763sa}9Z1_$?5O|9ic$s(xOXe;ABR@uPy!1#Zw9SznG z3~JN`gC5||-&y2_bHbre$*ilNgUQ=VfU?{@dmRxREMA}tJbB*dunn!-P9EYwG+}eS z6|Sw3fT{OWm39O)8|5BD#udhWUEyKUg4||h7-q2)ER<{)4Fu_A{1j0K>QPMZ!*xnc zy6(>E7Ul28Xe2W%B4q}NRXL{=^+?xxM*~jKRg(_}HcY!O63<^1aXIyg@p90~>yK6OEqjLs}N%oJSM<`~}t@^X7Ydww%Ug z2hFcKkA-avl9xeQ_wkawJ-dD}j3{ZWP1iDxZ`CAq(Uf~)W z8-rqn4X}8y79$1h4uH{rQ3o^GcRK8Wv21;90EALmll!{##!7stFk$QMS-a0#QA~PX zjaKSy+P@v~D7`FD0g9vgeK%jQ@v~W-5_#c|rUN5?h(E1Mdpo(Pgt;l8SprtGe*a*1 z9XQi|v}lJ(g7ef>yj8zdvFHOF$Pv>|VRF8Fcr6~D4BWkd<$NR6WBNx=5AU#3)!y%j zM)U{3&rWGRk2ebGntDB zmV%Hu0zkS)fzg(D+>|3BIoVSY<4F2B+KbKM<^biZpIFAmW4pK%0ty6m*UDjj_3-p( z6R(~GhEBc2F3wZ7l4jTdaX-Ief!q}_WLz@$ znj+HQcH~iUPapya|3e@mnTGd!ZY+<-X=nj9(b~z`;jPC0A2GqX+bI zYXj1faNf%E`$})HIEoYFb2-nbos|SMF1P&8m0*omMBdhg8yrXO@wLz=nrQE`RqGFC z)RUEJ4dgVS=D(;3m$AGh>6u?)l7#IOlajbR8_ksSx-qKJ2RwTY4dUW`?3L|q+`f&^ zV(nUH&?i8=7Z@|rr^-9=sCrWb@)_@{wgnl(j?IfHG(FYW)k#smdLXmG36t2Xx4l8iZ{P6k86d?`|e*YE(5`V{Vr^^gBIa1O} zVb`#C5M!U?WboBNm(WfljMzP2u^UJ}?XLLUpabX7Fv5#0`XBWn66I^i*c)rubK{~` zsn0QSNZl15i;LLft#8XNCk#6%I40=giCces;MeuH>zE9&8VaU%j{f&A6{aMA0m)W8 zzd2%`wch))D4+*d`MZcl|d60~TYof?DKmM{( zoW#q22@V6Rm?lf$$+`lfR3QJ-BVy=kNNGG3vI95n-#^&>@02Eo|4wP*CHu$Q^Pjh( zApY;@BeY*^-on|!%y+K=1^nN?O4O!Gl4tQKW*n1TG}CCrG<8At--<{|Vc`LYml@kr zKpy#jsv`gWUt|9rAoc(C(f)_{axkh9?#1Zd-vvALuEY0a@;d%6u?YNlHNeA)Dfw$m zD<~`VscYq|Volkr93Q&gfw!M=~%gx49qPhpGgpccT;cPCI_E^E!z|L;IWwlYS=#)NkBY!U$%Mi8oK%_ zv@wtQ;k|x-7RT7NJfZ_H@!lI$@b5ao^HnehfPlZM{LhGc-vaM{E^o7|)@Gw~^#tM1h8P~#0z!1X!kTn&VBiK|1<53^MbM;;2c;3?m5h2RTC+L_|rH(+yx)1c=3uHlX2p95(bhg3lYc5oeGK z0nsiODQ?f&ke3sNTQTqu-p^KYS8PwPOKmyFba|UC0Lpw~?Ptc?V*!>UdiAE~@g-U& z9Wk!u{d_#UHmfso3!v=XYQly*j@U#ld+UHmv6^o4Iz#L=Ft!T@N~3tKMbm{JXsPp_ z5q^HxxQ)!@q8hx3Exb0THWpKOv7%ZWBR2aD;`)_a?RG- zkC2~k^_@#v;_gQL@8bh=1iWu*XYoZw^CkD-tys&PO*Crnm`2axCuzYz|io%ZyQ_KL!FiyVl(~@#;6s27pj5JI*y#Rh@H}G* z5%JZ@ZO_JVY${L4G~_op%4_bbaY4T|S8Mecj;xpfq&BN|o6jB#V_*{Vn4OcKZ`y`I z=At>mWQjLcO6XnAe!6q=kJSnxw9)aa@$ZK6;+ObPJyLBz-9GYDpbl|z+32|~|DFgSLy)CsSRAbpiPXgF9} zsa9_D<=eLBpWi<8R<&z)OLsA6NaQU=Sg#;9?s|B0#28rND7U!fJE-Yl2kOK&jih97 z-W*KwM?{abRhV4L=0Z398?4;d0;gNU`ggPK?MqkoafA5yT&_%W)7QcP@O+eZ$P#*X z0>|gXcaA8)SqB2Ly>Y8El64m6PE`^yAsl8`s6ZdX>Gf>+6ZE7XHrjMj>u@|l;4OEkLH$$v zh4$swMnurNl{+571Flyt@aF-Zi>V5)azO#DP@sI0R;zm6Kk-xN5fTCl(VuLT>A&3jY!&pOz(9bIH61(B>Aw2*N8d+S50DRvPX+@90}h0Wo{No^l)dTC zl8?k-67Mtbm#s3LJm$vY=!cK`zemVx;tIcq7u-9)S!qxRQWjWCJU{sgL_D3K{ek=e z@}koCCFPQjacnAtG*^7?k8Y54i!=N+6EmIHVPT<)Dr6I6c4gn)k z{L9;$Yo)CBn%DDWOZ$hzd_o|2D=0i%ym0&_5z)78cIN02&2GCKwT3T-nS17(8lbJ| z4}Pj7kS`1O_5BN-Y49llIWFQ|`f3U%J47lr3IN<*iZt&EhUtB;?i6JpWN#)|CYUr{ zCq9TRa1b#5*{Y-%D*@9YR-+CZLyRBpc~d}Y2B?8J*=?j}hOu1i?02+{z&!?tV9>mQ zHeD(w3S`9t49^PfNMit?I7!vJ-Pz?LGtIE)(O29><#f1X4CVSr@8`(EJzeMcUMmdTHi z(s8|o`wmdx^^$dCjXYLN1U@Tg~lEhWu@Twl@<}-G>Q@Rag7fjauD-s=mp*QzKh-@4joF_{O>eE03mWoo?S;)d z9I`Le5D^#?GpUw~+c(~eqwQMWHiH2|N}Y}0aRYj=Qwx^~4gf-)-n%(^=)HfrKJJJ6Gu1h;}A+2sMw}gC(ktyux&i#8SY}X{#ejO24EHz1K=p;cezR+tUZRaxmYl|Lx6|-aGd(~+Dhj6OJ-o* z{w7vRDhf1BEiIc)ca-U zAjh7FQ={Pdu*-NN2t@_}RojwK=dbRk6KjHRfl{w!ByGN7{r2i6l1ck7WgIIpj7`v6 z{C-d6osY8yu>E5p2+N=RQd6Xkcc^8neHj$NjLW2J*pp2PtVKY~ieFos9&oxaE6ne8 zSgPyVZUR|VK2IPIKCxMakxK(qI=4D?tMbcc5|#s-A=yUP7yF|Z=IZP;`>>W&Q==!Q zN;J5`as=Yc0wQTeB+875X&khvAC5O=YEZ161mM@%(RfR9A=o&4d`VG%-i2te+m8w^ zLW|YM5a7q9Sgs}ccvCM)#miuSUd(%eh%3XbJ0pk_^Zsu0c!k}lG6WckAhc!bLbnh6 z=pjzqz&l6{0Ml0uj?NlyixGuj`s)SSS!}@9v+U4*Yr&}I=qfoq0EV&7b8*1eQK14Y zvs^TovRZh*A1=t^y!WQjc2to*H_F>H8$puX~xN<2srn>wOlS> z#|4j~UQ@XI?y4LJ8{oFP3q8DQyd+tRog05UNOfk;zSecwK%Oxb-wYhPnslEaHz~RU zuA#7U%uB#fUUyx`Ob3O60LrQ59eN9X`Sitg`qOi>8E0Jmms701V63}%wx>`!B1ds9 z-ngDZJejZDZz_2pwQ<(5s4{ROJ+d=Z1ZfNx*f?6pfK=qlzlT`|&m5*RYf2fzyb_0Q zk6Wr!l%S2j{)Bh$jy6GBVU8gtaFKWJG#KgIF9-3JBWnbYs$(?+(Ipq>RQeL%g%s1j z_Es#=JNWegN@p4BSDb{N()(MeS4YWPqv6oCb!mXn98NK&3ciHG$iNlv%pUat2ApJX z-ca@(i#?BIv9c-w2~=p_j>!*?nq(Mf^>NffiR`N{Twi*t37vl>->T&7g5Y~#xEYjO zdvrRm5VX-B8M}($_UG3Bu*zaNK&-MSirqc#b2I75?wtDyo*)WI=jFROrFKP&JbQ0~fvP4%!oe7Loa_&{Y0-P|JZ^5Dl_x$C_+Y@di#C zYPGpO4Hp4XP^7}TF`I)BIu=qw?FJWJEHkzV)xFWRj$Gb8DIT!vr7Tc#Z5ek3nWWM! zk$u?`XWu-u83`foTazLM%4N34#5h(>QW0BE6Ixew8E}w$nQqvAN=r6`^L_9g{_rtB zO)!GLELGwwCuC(UTRg{uldD0>=)OpijzzQ0pj?k55x;VSp`NXAoe-n1;a$*tr;rCx zs5rZPS^x$CNh|H!cZ(@Db`xt`Yu=~TFvC7tXc}mwm=`a6@It~yxyla4&e z_&_;`!yfta85YvMb(D{)bg#8$nf`#BKl%=w_pE{bbehkjpr*huU`9g{4lJ7h@HXag z=hN^IFxy&x=ibBYVohm1hb;G$kRqmLw z={E1EB1P3YnAn!kXK%V}Ne0xDApDo@p!;&il5WaEzg8>jE9Y;o!@)FX-cpb_CkZz4 zL2c*6?f1MyRZ^-Jt?d;GDlbqtSqhxhD_ru(n&a6m_cl5vB}M!>n2Jblslsj!Dc(%9 zr3dIfg^cCY81uEsx*Ce}E7|~o% z+SXaRJ;jgy%JL9rZ{nxH{8EM4yO{n@N(ga96TdH9XGW9^-yN?+Mq6MPdAQm|@v8K@ z#M8P@4Zdi6aU$7hXE&``OOJ&Fj%^I{-)~CR;ds5~zlAT?1lqUyYH@+z4hBlR@3)_< z4ThZPj?nvl(7}YbATn#NWQCq2$CZ4PlYh9{Mnm$0XGY&o=@PTcTU$8a{yefG{-N&c zb~|tGz0=ng%i!;fK7`Js0Uw(ko|P=4uSHsOi`nOO7?j&wJ9%q&v~op5!VeXaD*TGD zTd0yt*M5N6HS(=hM2P>V8dNy2-G7fnmTR8Z4ZI@r^WR_BzD6`hhsbl$lq_7xb|`j_ z#H-NF=x~dp9(Lwuc&_mq_obZFjF_NVmU}WK2yzuCaR%;UkPF~F9q{N5@`TRh*4!>M zC9WVESl9$$hwn7-%O;O8_yLK#F1j}gU=*t*LPMh21e7-UO*^67TYD_U0EtLIzoqo z1xUj_xn89N)Qx~l1V?;4NubG8th|Inwi8pBSD=p>=H+*0W`SRmm z8>tYzT?#*VV#%SgnhfKtDV3d%K=HT@;Pnm(kf*NKRZ6QFTD7>`M0JxmD;{cEdBhgx zfjDgpCn2fQ=IL47oquNtE=sE0NL}Q;8CY`=oJ#yywhPyNfa-ZPfbDC1n*k)`5p(nK zj8&d-fiymq(AzX#`$!<2n0r_HEFxuaq_YLKf&c+ENlf7qhtBQA;pErhLyfsO?O(`o{`7{>Oy-K<2gp#l-pFsM3Qz)=ATEGzLznM?;bZae!}P zP?k^dHy-{IxkDM7gs%ZD`hQ`$&sC(21D#RcY2~ zR|z-17Cmd>tPP;7^oZptE93Q=MTQifXM!-H8#H{8DF%F6^`h^K zUcAj|*R4g=+?2kOS%}fEHH}I5-8x>8>LOwP@>$YLw^`5&r0_GpGiH%SqkXr)<8Er6 za;uV$|8DfG+Yrj;Fo6|}ORI+*u2uh-;7n?>dnE@Us67%-)0)jB<^!%+H|V4zWeQ5_ zEcT(6&9i?gAb%41p;VCXLO93?3{yC_9(%FY^MhhiOI}>jr{|RuKMv^|wf)(T^BX_ymVsO9cW zv!=Os_S$ z{I$^lr&}$9uXtAIt@m{Hg-y0H9PB3O>W063h-^m z>}=9@j$X?GxNLH%^&blQ!ywO5ktK3eS2s33xVTV4n3$$cU?5*=3kZ7u@$MTD()-AQ zPV%nY-8hCp^?QAYYLA-?sMt(D=JA4h0Mrfo!xQQGss;S+=p;Fc*JEJ00{&AcFhK*| zqMF@;c$0RWL#&rbFBLarg%rb=ykF>|Xv$>$M`SeQ&&j#rSg6>QfV&)>Jo@}Ll9BWb zYS3@fiO+-IhmTU)$;s6iMhP7RRWKn}5dUZi*;Yx+EDEB4Y&gs5v`m;PzTbBkx^O;1=e_}$o?%~Wa+h(c?(*q9h7hE<7!^!&x z7ilt_=1~<+qz&GHm6sHcenuccKpMm@YbZN7C3`R)p) zZATUQV4}zSK0WutSd(oTDLVdZ)}%N)l_S01%`OP5C5i8t^own^76zK&^NOq9O| zm#-u)ifCf<5H+0+GR(5(vSp)rB?n--%{*GGjtUArru#kesUzz&Ehu$wBj`NYaU%GB8o4BFIGA`V%k=um0s=(x`dm&Kc*yt z170<$XUvOgsUX#?u1R&D>#&UHU#g=h>Wc*_*r&BJC94l!G%0~~T(x`d2HBe~2;c3- zYcmczc-2UU&FcKZ!Qpp>;~~Yo2k_+$VfEdEz4iaIbT8r3Iwht5o6zRBmjE2Z=OvTi z@2p8W8!0{J`b*k39ltDf+5On~GGlA$$h)9_PhGP;51p6a7j}Pso5h7^^ZSe8yNh-a z(r2E_Pk}At$Fk~-OQ`oV$DiXrgyBJkSUcg^A0iCaHYvQXGvKnk1~_Y(|$6Z9=?+!jqZ>wpVO^=d!qcH z8_bbVfA>-T#3Fs9H6DY)mZ#;a8JdXxtf+XME{AQZzjf9k16F1W{8c8W>{o^t5h1`R zE*#A=xzf7#OXH7@fGx}Mx(j@cBnEt4&V(iC)f4d9s--r6rE$I*mJ9dhgy_~NE5tD- z$jp9`ooTUR{qqx1NDH`e231zR${W!Erj&t9Z#&I5+8ZFW*T zGX*MVJF+*o6RXzv#SI4+iJ2Gv)ILQppqD??;bTc0Y~pd)>_CM!RuoZIR$%Or^E!O^79k@Mz8g^ zAiuPX@p!3X;Yi-&aMsz^sPI8=zM&gP95tNp$cJr{LDa|<;uAK|_Z|tl41(sCR=0;& z`M_ud59W<{2sds0xFfH4~$ zPj-am8x0rHC#|q@pA*4zi5$gpTk}Dw_Hn;r) z8-O*}wu&3?*qkW<<<98Jo8+!VpO10=Qh&6l9Drd@y)|o(ACGo`Xa1Zt7x|nWe&=eZ zn4$HeM_yAX+P~Vyw#MuD5j9v@U5)$TOuyvU4gZ3OoWd95#Z<1*>n&z=vGR^<;12P5 zI}HKUr&M!Z)X_n3oira|g?lk{R)-ZMPXSQ*4%pGYP1-4otpz#vr z>%GNU)^~RE`3m5U?Ddc*^$_UM(nv;DUSQya0(c94kAu#If~Ig3J8}51SVtP(LbnN6(xTDWo>6iD4=EtjCq(^nUl{Y(a+pntsK*Oa$ z{Occ48>>M{j7wwwX@+4}Ysp?xfJrV~Bkek%hYx~*LDa4UV`0mU3=X)ey05W9KC+_C zzZ1iMXm$#rczRahbbVlY+bmOdW6UO0+1*j{4zWPF1xu+Ht-Knj94$1^oiDMp9xnYE zA%J{jukp4(diC4&8;v)lK!yj=yZE-b&|;qsDqH=xn!wLTtHCby?~>Va(%)VCQ;uJv zBS!5EJ1g(^uu9#KHb_?nTBFCQ`#I6HCST!MWhh8WG@j3o?CxA@vP|bu4}Pd2qsVe^_`tI5OzwdlPy$reTVMp&`ET?e?B@wvLza4IN*q^!a#NAAN`s}GviQ9NBb<0c1 z?#wt~%%+xCWEr{Eo}B1`FF4Tx5s6F|Rp{ZcfI5A1?X&@F-b zAnLKnvziAj?6v(R9L@+yfF{x>|2vMv)JAk~ctDu^8}58%=7Iy5X_;gipByR*?^mykn}i z)_J3iMM3)xtaar05=HPxzYw_CJD=yUn&ey>segAH{;^Id4aT98+Kz#}&wYs?A*WcP zTpnRe)Fhno!@3j=;6tm$w?-pLeHVkgu3PZH4uVpC*aAc`BcNY?LgilMt0C7WVD=A9 zl9_BaO1wJzLCFXe#$wj+-U{1iF&N|kGl;Aq<7Yoq3;VzUwJv^9TYQ`8K?`jAQPkXp z58k=NkRqN7=Tux^S*cx0I{_0)Knz%o>zK4kSO&JJJCo;{ZVq2Mmv19j0F`V@hS+Ez z2?3*EC%rWSZ>v>OV(*qjYSHe`U_Vu|kOTQ15 zMb?t2mkOeZ-2bNhV~fI`3D$Tr*Qr}-GBKa>3@=?-x@spQx*&6oTH@iD?%B2V-OQ5j z_$Af*J695$BwqPo`A%_S<@*RS>m|mVd(CmShv$*=6keE2X}uymIyhO%4v@XAv;ea5 z>UIvy(=EK~t=M>Q7h=S@RUC$f9PccJ%zbwx?tfrb~aC-}=?=SZQSjYUsbG#DwyxQFhdI6%F=^(rRV@t8Bakn}iaV8CBg@pE z>g_8hGY$8Uhu644ix{P6$^M%r6*rPBy=b@*hje?_&h~QK{PuK+u^P{WRKhtB zJLd<5|4;nGK|QXcR+PoN=p@&8FB;Sh*ec$pi?y8MHC~sDRqwF|0G}`9S~4$Ct*q=3 zu2Q?a$?FP(9KJfoIrE*)9X5R~!Ev72Gq`q*hq=sgf#RO&m58YTut~v~ z2iflH)Y_Eseu^Q#)~6sgrDS(LCv_a8T)z33s;;M!onRo z=V98sJpLtODG-Q6P6oAw{94;}(E=x{|KlxZ2pR6ak6KVsV>RqBdkh&WDVQtU-%-?M z!Lx8G(hBzn40})@m5P--_ukwhS>i4hQO_M_xKWu(aFNMzx{Lu$!pSnW({koP&s`}{`j$jp~;&!xygp%F@~_V@x56U3Q6zB z_KTxbcaBg#nw8H}Z)Xv{LVl0xtm@01u!^nk7k|RTBI4BRaF>-TI$y#}MvCPmJsvBp z3=!g6GCgg3{gW`-U6-&uwGjjSwbtqJ@;dIFytH~%y2d2#bV=;zI;0cRQJSKnx`AAj zm{E6a?rN00NmF>F;09`D(U~G74wuL*8Yi&|t@6p&MV{!F?{g99IfF5@(x?T(jhK$!@!z?IPLBt^ zVJN*nn`XQ~R!Qb~7wtv_+$4vkB8=BsR9=9-(0q3{TCNwt`*NZ(dD!YWOH%DcQUw~| zFmQHp1;;OM^uuvfu5Odz`V7w?RIH-gUZ(i0z9{7)V;Xw)UPvj|%DiHt%)G4Y*3nYF zVGtpR=Le!)W##CvW30am<)eUzE})RWT_OMxW3*VrArWfDEL#{&VJjRsk#)xaFoE{` zYSxrECD{klOySV*jev^ov_Xfw@R2I)OW26#QLLC%J1^cn0<%Z6c%643`(zYRtp*QgG zi_A;R51L-4T|QJRt~MJwnuNoj&U}zZOR3r7bMCucE8plIE?EyKa5aF38>Hj>m?(776Zel zx@GvnH&b0;1+S05sQMA*y&%@LzVV5ohNiRJDZ|Le@0m z3gj(*7aY+=X|p=c1(BTXJz1kKf zu`7i3yZ_HMijHmyGLI9nkYRuQ~Hdom=^3QK4qvg|l1(mLxXg z-cS4#=RS*UJ&7F3C#;WhGtGx9>{0}*SRi+x8Cc@VcU#Tiz{-U#cTDZYsBG#6kKSzgy$sF1TG#GMtWZR%_@uE%rA5slPa)wkzXfa0LetIz z-*TzSJa9w$IIpM@<7K5=KdD9w_x`kV9t$>WPbb}nK}JqH9}j&w&@f?-<0m6$O~T#$ z{0kpka}KtE;FimG(Z1!W@qG}&9Akty=zDwL<>2^h-a|!2d5eqy-spT=K`EuMPjt6A z1`%2DPe6wOn;rUizQfcj(yC4M^>Pijn6{_gf(Y`8cw-?P8^UweUsN@c}rj317MXErI?p=S8$HA1iJ~_YsMWLA@Lc@MH z`IE?onbRd!Ki&j_^fMuBH$3U!&oponQ%!QN@?BeKcMEi;F+;!Rg?^ z$s2ts=I5xtwzMVN;BIsyjoBH6>2`RQ1O4vLv%>7fBF4DG*jQL?ydR43iF&p9S=9^7$Zq~r zMSvO%56Hdmllfz z0S*3v2f?d=!vRn>{iL-;>HBY*Jj4L-lJA|H8q4DL~*1zJ*x;he&_$jy8!EAn)R}dd=}IfehuVCab&9me)6*C82d( z3;>oD4H%hCota)W?_quT`n0f54{W)a4r_27V2I!w0tC_j+~b?oC~>7nt`V1W3?r5+ zxl;QL8vLV%<5%amx7(c}iekamq6M32E8J-;Hu~-#j1mJ2ltDflDC9_c=hN;|h00+p z5MYejrdFJr7Yu(b1}wk1Q)??bL2=Mh>Gl}LAVNncUvb?xn9aFW_jZQ{dF%1hrJQBH z7#TYHRSykFRhMVz0v#&)yw3jRwiP>rCf6t*#lSqZb2V;^jOl5ERBqF|frEFfCtL8y zc=MN%eTbYr&iQT)AB*!{)PI*n64f$a+&-~A%io+5wTp=peii1ZQL|rf)~hvsyOVfm zy`j^Q8t7qAoFJ<>du&T-oIWs!l)!VV8%>!g%#shN7Ld# zYd2`X;RJo2hP2%cYS;3qK8pqn;_FyFRT4?}&Qy(kJLj`;x0^-8Hh@rpblpC}^2A}{ zlbxTLpYAzSUBZNmzEjys4z&ySV5&|<)oz7I=9nC8yW~521)V{4JZ$ z7k}{TsymjQHzFBU@M<{t>c!XOnR6=28jFFHEOkr)rwz4-~?8`5Jb5+GIH2I7+xK6BdAamO6(33!dQ8mAE_CU#=yvq$Qk4^2Vn z_d2bT6iha3)0k^Ni~|C=xPhs>@3`aFhFXvkfSscGEb;B1AZqT}-reRfUHB#*cAJH=kwp%hYPt8ORBL~&RimA+!LIYUOUww=P2gPuhXQ$v z+-{LpTaP36AS*tFVM6L?x!U)$42`nMHplNWA#jL+a5eM5ZOG$u&^1**1E`?>0oUul ztzJY&Ka8ZDMvnX8EY4<8-sV#vI$a-v3j+V0su@`m6MVfe?PeQL^5|ZdcLVy2!ap%j zYIeLppDI(oK|5d+_?-O;14#qVLJ=Ax2L{d<9^yl>bOF z{CP%mUYBqphSg42@;81pr&W0q;*M(hp8&00W>*cdv--QgccKpnQK3244eEf`1<`}= zNdf;Xz(xT?EZJLVSky%T!0dV26HX5DPJ6(rv5qE?0Td^$hK_`JtX|{k+_`@p7G>UF z!ONogod6((ATeg?boHMpp_p)-Wl}7R1W3BbMzb*^+D)OG_-h%WXCx{e);!$DMJ&L` zG#EhIL(S@TJ<0NCz$KCaj%Bzlc$h)O4?2{Y^_%IsL9-&*uGC%#&#ynhc6)UgF)B+y zogO&Nx0=c z;N*yeuD|ececL5$n07b8AUywM@-778E+ks4){v_eAcE(1a4@o!hlLZ-&Jx|T)c8+> z7(>e!XI|5W_EhB;g7reI2hOoxlz_@ndHER~B2Qg9Zp(j$85%2)7}-eBO|M2H?M$eB z+h@msi$_xY<^lMmJY#qEH-!R1n9NUg1b!R+v3!8wLFxnC7zPnZ&O|8q#BG0;w^UW6 zmO5+V3n80fve)n5W5&025RfplfASvKU};C{usv?0$9WHy{E%&&eIMdKjcERTaqNas z==W@E@7L;uDmyW-Nyg|Ew0En9=oNrsbFLaI!_z0TJr)AsVFSgpls-#351B|NBHLPp z!i)b}B-VLzp4;-1^OHxBS5LmqpAGLI44t&^G^>QK-Y1{{QIF(1eq^cSJB5OTjnRKc zi%&;AYu7JdtdXmskW2HQOTecqmfz9;Z%5o2&j0FL`~QCP>&iyb|Ghst-JBP}e}2@# z{O;9)Mx%H}92V_jKXPOvfaK-BKZF2}pyBJO;av){|JoJ;QWD1hvM2n%-(UjAshoYe zJMUKLL2y-0-lHoc)KZ1MQfl(nrt}_l?NqCH! zNqF=;S1LB>`DQEG$Yo8s=LKzj?U+i(Adb$!VZ45sJcGRckw6(#7Kzx|)1GCUyoQ3!_wAxl-;DW$M7ek&5 zzM_2}j=b|JP~ZJp@ec0{(v z&^^_#@|g>T?E6s%b=%Xyv~62#r(zSRcR`If6v)B4qJEeQl%@1%NFyruhFpLkjvU5b z&0gcLMP3qsU5kdgRT=T#?q8gz7R`nKK4^3s|1ROh5G)Ar4bb1)wkT84rt9_ z5s!PW?MX*RZ!=VtK66vfF#yt1&U=Te{xltr(Eq2)a&d;y3Nqik2Jzlr>iw2oq*`vF z3MwQ@&dyvw&F6_Mybl5lt-0-fW3|`}hu0zoOaPJbX#(f-0F0=G^P|>R&twyZ<#fDX z68+pzQ)D~RIX#Cd~>u)&l&=wtS)J8%e1VQqzUTPEoI>%Gu zPYj5x|18sRyg9!;G@y^|S)+#w`o}%DuI~ijrb>Y6-6{U$k0Wv_3JFa5c&Q!BKWat0 z7DNm;Zq?yXh(-Zw0~-F@@Lca$^sDct+)zgy%B@P9-`Wp@anfhG{_;F;<+82cMk#u~Vu;W#vl_^q`=&E{iG}yybxIR-N)53-_b|ly@Dz^n zXa(jQ-EK8|VkwNz#;Ywle5br<`VQ3B9FU5{?7u)naaLj@3){ zHi*H+Dbr-NrSBFu$G`w-6w}QtG!oDw7gv*ljkWCOlOIvYrTz}dV;(#>y)nOw5%#$U z*c3aGJj;kNy>6^>m=FU{_kTtNnLWY}0s)WtQ8X0tR5KUf#NnJq+=0LWHSw7V*A@*> zjEy7H8$KHYs5`MpSp3*pB}8cK+@{SQzB?_ubiqGYObNYq3kRl>RpzIGGC14HQ+&l> z$#7ocQCaOK#KNzC7aW*@CcN!QXu_V}^B>@p2g&mn&)QF(Yx?!}>>!mWdedUyxuvgMge?Ec66|!-s?bOxW--_vFV-mW;;@svC07&NA&yLY zfoa9eEL7u=RyIMB{k)m>J|=86fP{XQ?Xgbt0jD0{1>uQ)ODWVIfGZxQgz6&wX0)9r z|MmgU~XEcVB%^;Yv}`b-mvb- z%BS>OemL1v=sezl+_uhKKBThRPPpfJ8I>h6=;$*#G^_Dc{VKDUwY_mu%$o3s>0zXY zAUCB*V3v6i2hTSvq(w2l?B+2JCI2Pt@^09Nky0sMV7*PV^q0Ny;r>L+l6R4kbnPcb zbJ0QiY%7EBfnmWu)pu_HVSCDtQdX8dCg4hkCxCQ{1X}?!Cbd`PT6kgoYt#{Sme>(9 z7-mI4mnv)G=vM=Bujkt1_R~uJtZ!eq{Jno-tI_^b^uRUyp9d{`u-6Y4k}tp0z4&Mg zV4Tqzle~GVr7Ws7_#mBGjDbNXanXi0aDbjQeh{=`uJE*V7-Z+<6PG;lJ>x~lI#9F@ zaiPDA`ytE@EVkddpD)NNJbp&%fO5BK0#T`az?r)Ez0aEIvzX-f6vyKLF`OKb>*mx2&=e>7$kRxW?_71@XG(`OiK_M2z>3UPMyP~&*ul)jy%xcPYU}kaYJZ7O^x+T?(q6wp@Vc6W9`*X_gW85Y{EJ%ieLABS&#-_n6=Y_eNBop`q5IP0kpz0MWIbw~ z1#sjqW3u7|rSy=2nmr^|6SL+u_LKpI#Q(0&#ieEp2)VyzqIB>0uwComXqnc#cL74N zJtLVQ(&Td7lpJ@M!VXflGOWV-nq*{qoWS%!a>?`A-yL0~WjG<{#P= zc1xxK1E4HgE4M)2e2)X9kmDRTIST~xYMph0&dUtuMQmRJcS?9}P(-;JtX%2rPZO~( zPyP4TfzV0W9pGgUcO%|k<=_|aUB1~i;Tf4|>&fqx(mEdy@kb(oxw>xMiW423$8vXU zs#)mKzGkf}rI^b*{&dfg^Yl)6wR0$mQ06;hEhk2<7YS&hQ}f%)Kz`063j>(hZ5`6RfshT;R}h(s7dMcDA{j66-1s=V$4^@&_HBW442ng>OGIdm-|FjU0-SWsv04wy1%XJ!GiFOEwc;qr@cY&V(pW>AX zA0qoLp!H>){1RaV>jA~l5PqnAkz(WHk9tfI9c>^`=uYA%N_>{II^6*!VJ2%3-YSK@zVa8s!VZsO`RULme1 zM_lbAL3}@cEuSZ(sZ(XE7BS6L)=E~_;&vO;1Bg} zVb>4bQVpHoD>}>;<`0g_W}3oqHk#Id!@0pQg7exS>*M9vih)Q;lxns0Ouj&3&trO} z&4lUtqt5`lah&mcRd{T()1ptpG51BgYZWqDp&NU_|LpKOe4~%_`i}Z4OtOd^RY>yWmx))j2-sh%XTFpWSK_oDZbS!e)Fb5Cx^5yvvJ=kH;I>{oI~0D0xqaTF&@{0 zVwNd>15m2r&rR5jKc-4DdHtANE&B17{#pg1on74Hf=<#*H(Z9J`&1oCPnz8geb3`G zN#k8#@IZBB#+an1ry5gV<-XTCOXU^ z;l)U&MzREWoEJ@UM%o_+=J;d^)PCFjBDRd#Q|XoA$HKY4GTtovN@jEMQHmboga+&r z_DIkQiU#@SnZ3vBua|LY!*3h7J%JX)ovUk>pA>j(SM=F7k1O zFM6iXDJR%9F=|;WO)rh6n*OLbg-afpJ-(Ya9Dcz*5>zOk8MiQ3XLVdt5V=0_gCnL@ z98-k=A4rt>#T373kjpq_`X`_eqh_imljiY6^WH-X8ZB1maa(l$a4iy5k>*|lLz%97 z!>`3?n3)lFVPR}zBjQ;prC2>n)KFuj1V@xc$BMEJhTx7 zjva>e`g^_4T~?+XT7^~-6Q5b&4i%h!MT-4HVmrB12(y`NzGD4E;_`t?42Z2Jd+%QQ zU+4LCU1Y=jkn@KaD8G~pICwUG!(Ezs42li7A5sg;hN^`w)rw1CIB|C3ZBZ}5!GRyg z9gyaoy~P+R`A#Npbr2Eby3!C(k%!_hx4AUPm*5z8oHf@ETqTj{A$i&MG>-tZTr~@f zJ0TS_IeYWQzLE(9qL~}xyakMkw1BX|{q=5My#T{!KUPToS?4qynX}M+V z4fg*I8}VgHRA{JiB6FaL(o;I;>0m*b2_dGxR~?)tz5S^7kakuErbUp$Yf`C0$k&vo z8)7?JYD%SM4vTEL*rdpfgg>^5V!BXiI|?!>pKBPr4ihVzyTJRAvj90J=LwCy7LF52 z40D)Ein24|(^~r5EW6yD8fqj}$Ym*~4gQ15Up6u`5vV=5vUn}yiAcXLZ(E&4LYerF zz@$~5r|sLm98;g3Ba)d;&57jO`b_aX8>6dn5j?D1udY=PP2sktDK+i{(^^)O}Qy;G^|Y8m(38h0{5^4zgKsS%&8zVB24zjRJ|hYc_nbC|iq|HPHUG0|jf;ZO@aUhOPs+jrV1=~ce*)>Il+@=C|eWi#WPNnE0RkE5T|FUso z3N0S)S8_^q4pg7q=E}0Cf0ZD=GDV5{DKzSkr?G>)Kouo?(w>%qj}p&I8|-4>q?&Ui zmw||*o+On`1%qnXWH&+lWMATz*O2X~{U3NT2&b#9P}r_-2m6SO#cxHfz?J%=OSXB` z7db1B+pz{qdVq%6T>R|t@L$WQwib(Uo?IYo%;HU?@PQxws{e!D*P2~oSEyVp>J50 z?7F}&Gw`c9sgn~ph?AKf%^>+{3uNygTgW%xb7^SYF7TpHS<;jR)F-fvZ*QgObRs zJksYi`Zd#cLu3X`7sIpI3@ShRf3H%5ThLl^Tu{->tsQTTr{T=jOIo##$w%bB7;0-Xi_(Tq&0eY}T$a~=O?o09Fc08o6R!{EpPyqa+S zL5&L4SY14a4v&4X76>l>g|EN>Ug1dor2iPs_jyrN>)-D>1{xtO22|XnN?>slQ5Sca z#g0<{GgQeY6>#G3V~L6d{z&O-s&hnDT$%uQ96(j*_a5ruf?o}&IxkLn+@BJ}(%EAI z*q6q(pXlc0EZd%%ixsbDeEjRIZyT`vy~(gjYvrWL5~iT3Sj!j@b_0RzFI|w5Ey?ZC z2Sgf(J5D-@7A2n;lZ4F?LFT(NRP+am*qcxNcSZLmM9nG5x)v-U5Xe>VxZc!Z0Gtu2 zg~xq>V1~5Dmy~E+?;vs^kk+NDJK!S_rYE=TQ0cY{QUO4ytMMGa!Hfm{{tZAf1dyV literal 118061 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󏭆QtH?Ii)p+|a2bac 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