hob-bot 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,13 +18,13 @@
18
18
 
19
19
  **Work that can continue.** Assistants can read files, inspect job status, activity and results without interrupting the work, and resume a finished job with separate cards and reports for each round. They estimate job duration and receive reminders when work runs over; completion notices include actual and expected time.
20
20
 
21
- **Asks first, then remembers.** Each assistant has "confirm before running" rules. Pick "always allow" once and it becomes a rule, so you won't be asked about that again.
21
+ **Rules you control.** Set global rules for every assistant and job in Settings, with separate lists for actions that need confirmation and instructions to follow. Each assistant can also have its own rules; pick "always allow" once to save an exception.
22
22
 
23
23
  **Schedules.** Daily briefs, weekly reports, month-end checks: routines run on cron-style schedules and post job cards and results into the assistant's conversation. A routine can also use a saved assistant skill.
24
24
 
25
25
  **Knowledge bases.** Organize, search and preview files, bind collections to assistants, and follow citations to source passages. An optional embedding model enables hybrid search; PDF text can also be indexed.
26
26
 
27
- **Cloud desktop.** An optional separate container gives each assistant its own screen and browser, with a shared screen for selected assistants. Watch or take control, sync the clipboard, and type with your local input method.
27
+ **Cloud desktop.** An optional separate container gives each assistant its own screen and browser, with a shared screen for selected assistants. Assistants can browse directly, share login state with their jobs and send screenshots in chat. Watch or take control, sync the clipboard, use your local input method and keyboard shortcuts.
28
28
 
29
29
  **A clearer workspace.** The right panel brings assistant details, jobs and files together; its two lists load more as you scroll, and nested pages retain their address on refresh. Completed unread work is marked on the assistant's avatar. Archive an assistant when no longer needed while keeping its conversations and job history.
30
30
 
@@ -42,7 +42,7 @@
42
42
 
43
43
  **Made for the phone too.** Hob is an installable web app with a mobile layout and Telegram-style gestures: swipe a message to reply, long-press for actions. Light and dark themes follow your system.
44
44
 
45
- ![Hob on a phone: assistant list, a delegation card, an approval question](docs/screenshots/mobile.png)
45
+ ![Hob on a phone: assistant list, a delegation card and assistant settings](docs/screenshots/mobile.png)
46
46
 
47
47
  ## Quick start
48
48
 
@@ -114,7 +114,7 @@ Jobs run inside the container (git, curl, python3, ripgrep and fd are installed)
114
114
 
115
115
  ### Cloud desktop
116
116
 
117
- The optional cloud desktop is a separate Linux container. Each assistant has its own screen and browser profile, started on first use. An additional public screen can be enabled for selected assistants in Settings → Cloud desktop; by default no assistant can use it. Only one job uses the public screen at a time, and others wait up to 10 minutes. Screens with no viewers, browser connections or activity are reclaimed after 30 minutes by default; browser login data persists. With the root `compose.yaml` and `HOB_PASSWORD` set in `.env`, start both services with:
117
+ The optional cloud desktop is a separate Linux container. Each assistant has its own screen and browser profile, started on first use. Assistants can operate their browser directly and share its login state with their jobs; when a job is using the browser, the assistant is asked to wait or coordinate with it. Browser and desktop screenshots can be sent in chat. An additional public screen can be enabled for selected assistants in Settings → Cloud desktop; by default no assistant can use it. Only one job uses the public screen at a time, and others wait up to 10 minutes. Screens with no viewers, browser connections or activity are reclaimed after 30 minutes by default; browser login data persists. With the root `compose.yaml` and `HOB_PASSWORD` set in `.env`, start both services with:
118
118
 
119
119
  ```bash
120
120
  docker compose --profile desktop up -d
package/README.zh-CN.md CHANGED
@@ -18,13 +18,13 @@
18
18
 
19
19
  **可以接着做。** 助手可以读取文件,查看任务状态、过程和结果,无需打断任务;已结束的任务可以续做,每轮分别保留卡片和报告。助手会估计任务用时,超时后收到提醒;结束通知会写明实际用时和预计用时。
20
20
 
21
- **先问,再记住。** 每个助手都有执行前确认规则。选一次「一直允许」就会记成规则,以后同类操作不再问。
21
+ **自己定规则。** 在设置中管理所有助手和任务的全局规则,分为「执行前确认」和「一律照做」。每个助手也有自己的规则;选一次「一直允许」就会记成规则。
22
22
 
23
23
  **定时任务。** 每日简报、周报、月底对账,按 cron 式的时间表运行,任务卡和结果发到对应助手的对话里。定时任务也可以绑定已保存的助手技能。
24
24
 
25
25
  **知识库。** 整理、搜索和预览文件,将知识库绑定给助手,并从出处跳转到原文段落。配置向量模型后可混合检索,也支持为 PDF 文字建立索引。
26
26
 
27
- **云桌面。** 可选的独立容器为每个助手提供屏幕和浏览器,也可允许指定助手使用公共屏幕。你可以观看或接管,使用剪贴板同步和本机输入法。
27
+ **云桌面。** 可选的独立容器为每个助手提供屏幕和浏览器,也可允许指定助手使用公共屏幕。助手可以直接操作浏览器,和任务共用登录状态,并在对话中发送截图。你可以观看或接管,使用剪贴板同步、本机输入法和键盘快捷键。
28
28
 
29
29
  **更清晰的工作区。** 右栏集中展示助手信息、任务和文件,两个列表滚动到底自动加载更多,二级页面刷新后仍可通过地址恢复。助手头像会标出完成未读的工作。不再需要的助手可以归档,对话和历史任务仍会保留。
30
30
 
@@ -42,7 +42,7 @@
42
42
 
43
43
  **手机上也好用。** Hob 可以安装成网页应用,手机上是专门的布局,交互照 Telegram:向左滑动消息即可回复,长按弹出菜单。支持亮色和暗色主题。
44
44
 
45
- ![手机上的 Hob:助手列表、委派卡、确认问题](docs/screenshots/mobile.png)
45
+ ![手机上的 Hob:助手列表、委派卡、助手设置](docs/screenshots/mobile.png)
46
46
 
47
47
  ## 快速开始
48
48
 
@@ -114,7 +114,7 @@ docker compose up -d
114
114
 
115
115
  ### 云桌面
116
116
 
117
- 云桌面是可选的独立 Linux 容器。每个助手有独立屏幕和浏览器登录状态,首次使用时启动。设置 → 云桌面中可以允许指定助手使用公共屏幕,默认不允许任何助手使用;公共屏幕同一时间只供一个任务使用,其他任务最多等待 10 分钟。没有观看者、浏览器连接和操作的屏幕默认空闲 30 分钟后回收,浏览器登录状态会保留。在根目录 `compose.yaml` 同目录的 `.env` 设置 `HOB_PASSWORD` 后,一条命令启动两项服务:
117
+ 云桌面是可选的独立 Linux 容器。每个助手有独立屏幕和浏览器登录状态,首次使用时启动。助手可以直接操作浏览器,和任务共用登录状态;任务正在使用浏览器时,助手会收到等待或协调的提示。浏览器和桌面截图可以发到对话中。设置 → 云桌面中可以允许指定助手使用公共屏幕,默认不允许任何助手使用;公共屏幕同一时间只供一个任务使用,其他任务最多等待 10 分钟。没有观看者、浏览器连接和操作的屏幕默认空闲 30 分钟后回收,浏览器登录状态会保留。在根目录 `compose.yaml` 同目录的 `.env` 设置 `HOB_PASSWORD` 后,一条命令启动两项服务:
118
118
 
119
119
  ```bash
120
120
  docker compose --profile desktop up -d
@@ -0,0 +1,5 @@
1
+ import{r as z,M as Xe,j as I,u as Gn,a as Wn,d as jn,s as Zn,b as Yn,I as Ri}from"./index-BZhge0qe.js";function qn(i){return i>>>0}function gi(i){return i|0}let Bi="warn",R=()=>{},he=()=>{},le=()=>{},q=()=>{};function $n(i){if(typeof i>"u"?i=Bi:Bi=i,R=he=le=q=()=>{},typeof window.console<"u")switch(i){case"debug":R=console.debug.bind(window.console);case"info":he=console.info.bind(window.console);case"warn":le=console.warn.bind(window.console);case"error":q=console.error.bind(window.console);case"none":break;default:throw new window.Error("invalid logging type '"+i+"'")}}$n();function jt(i,t=!1){try{return decodeURIComponent(escape(i))}catch(e){if(e instanceof URIError&&t)return i;throw e}}function Se(i){return unescape(encodeURIComponent(i))}const vi={toBase64Table:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".split(""),base64Pad:"=",encode(i){let t="";const e=i.length,s=e%3;for(let r=0;r<e-2;r+=3)t+=this.toBase64Table[i[r]>>2],t+=this.toBase64Table[((i[r]&3)<<4)+(i[r+1]>>4)],t+=this.toBase64Table[((i[r+1]&15)<<2)+(i[r+2]>>6)],t+=this.toBase64Table[i[r+2]&63];const n=e-s;return s===2?(t+=this.toBase64Table[i[n]>>2],t+=this.toBase64Table[((i[n]&3)<<4)+(i[n+1]>>4)],t+=this.toBase64Table[(i[n+1]&15)<<2],t+=this.toBase64Table[64]):s===1&&(t+=this.toBase64Table[i[n]>>2],t+=this.toBase64Table[(i[n]&3)<<4],t+=this.toBase64Table[64],t+=this.toBase64Table[64]),t},toBinaryTable:[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,0,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1],decode(i,t=0){let e=i.indexOf("=")-t;e<0&&(e=i.length-t);const s=(e>>2)*3+Math.floor(e%4/1.5),n=new Array(s);let r=0,a=0;for(let h=0,c=t;c<i.length;c++){const o=this.toBinaryTable[i.charCodeAt(c)&127],l=i.charAt(c)===this.base64Pad;if(o===-1){q("Illegal character code "+i.charCodeAt(c)+" at position "+c);continue}a=a<<6|o,r+=6,r>=8&&(r-=8,l||(n[h++]=a>>r&255),a&=(1<<r)-1)}if(r){const h=new Error("Corrupted base64 string");throw h.name="Base64-Error",h}return n}};let nn="ontouchstart"in document.documentElement||document.ontouchstart!==void 0||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0;window.addEventListener("touchstart",function i(){nn=!0,window.removeEventListener("touchstart",i,!1)},!1);let mt=10*(window.devicePixelRatio||1),rn=!1;try{const i=document.createElement("canvas");i.style.cursor='url("data:image/x-icon;base64,AAACAAEACAgAAAIAAgA4AQAAFgAAACgAAAAIAAAAEAAAAAEAIAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAA==") 2 2, default',i.style.cursor.indexOf("url")===0?(he("Data URI scheme cursor supported"),rn=!0):le("Data URI scheme cursor not supported")}catch(i){q("Data URI scheme cursor test exception: "+i)}const Jn=rn;let er=!0;try{const i=document.createElement("div");i.style.visibility="hidden",i.style.overflow="scroll",document.body.appendChild(i);const t=document.createElement("div");i.appendChild(t);const e=i.offsetWidth-t.offsetWidth;i.parentNode.removeChild(i),er=e!=0}catch(i){q("Scrollbar test exception: "+i)}let an=!1;async function tr(){if(!("VideoDecoder"in window))return!1;const i={codec:"avc1.42401f",codedWidth:1920,codedHeight:1080,optimizeForLatency:!0};if(!(await VideoDecoder.isConfigSupported(i)).supported)return!1;const e=new Uint8Array(vi.decode("AAAAAWdCwBTZnpuAgICgAAADACAAAAZB4oVNAAAAAWjJYyyAAAABBgX//4HcRem95tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTY0IHIzMTA4IDMxZTE5ZjkgLSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDIzIC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcveDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MCByZWY9NSBkZWJsb2NrPTE6MDowIGFuYWx5c2U9MHgxOjB4MTExIG1lPWhleCBzdWJtZT04IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVmPTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0yIDh4OGRjdD0wIGNxbT0wIGRlYWR6b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9MSBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTAgd2VpZ2h0cD0wIGtleWludD1pbmZpbml0ZSBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NTAgcmM9YWJyIG1idHJlZT0xIGJpdHJhdGU9NDAwIHJhdGV0b2w9MS4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAABZYiEBrxmKAAPVccAAS044AA5DRJMnkycJk4TPw=="));let s=!1,n=null,r=new VideoDecoder({output:h=>{s=!0,h.close()},error:h=>{n=h}}),a=new EncodedVideoChunk({timestamp:0,type:"key",data:e});r.configure(i),r.decode(a);try{await r.flush()}catch(h){n=h}return!(!s||n!==null)}an=await tr();function ze(){return!!/mac/i.exec(navigator.platform)}function Mt(){return!!/win/i.exec(navigator.platform)}function $e(){return!!/ipad/i.exec(navigator.platform)||!!/iphone/i.exec(navigator.platform)||!!/ipod/i.exec(navigator.platform)}function Je(i,t,e){const s=e.getBoundingClientRect();let n={x:0,y:0};return i<s.left?n.x=0:i>=s.right?n.x=s.width-1:n.x=i-s.left,t<s.top?n.y=0:t>=s.bottom?n.y=s.height-1:n.y=t-s.top,n}function Ue(i){i.stopPropagation(),i.preventDefault()}let Zt=!1,on=null;document.captureElement=null;function Be(i){if(Zt)return;const t=new i.constructor(i.type,i);Zt=!0,document.captureElement?document.captureElement.dispatchEvent(t):on.dispatchEvent(t),Zt=!1,i.stopPropagation(),t.defaultPrevented&&i.preventDefault(),i.type==="mouseup"&&cn()}function hn(){const i=document.getElementById("noVNC_mouse_capture_elem");i.style.cursor=window.getComputedStyle(document.captureElement).cursor}const ln=new MutationObserver(hn);function ir(i){if(i.setCapture)i.setCapture(),document.captureElement=i;else{cn();let t=document.getElementById("noVNC_mouse_capture_elem");t===null&&(t=document.createElement("div"),t.id="noVNC_mouse_capture_elem",t.style.position="fixed",t.style.top="0px",t.style.left="0px",t.style.width="100%",t.style.height="100%",t.style.zIndex=1e4,t.style.display="none",document.body.appendChild(t),t.addEventListener("contextmenu",Be),t.addEventListener("mousemove",Be),t.addEventListener("mouseup",Be)),document.captureElement=i,ln.observe(i,{attributes:!0}),hn(),t.style.display="",window.addEventListener("mousemove",Be),window.addEventListener("mouseup",Be)}}function cn(){if(document.releaseCapture)document.releaseCapture(),document.captureElement=null;else{if(!document.captureElement)return;on=document.captureElement,document.captureElement=null,ln.disconnect();const i=document.getElementById("noVNC_mouse_capture_elem");i.style.display="none",window.removeEventListener("mousemove",Be),window.removeEventListener("mouseup",Be)}}class un{constructor(){this._listeners=new Map}addEventListener(t,e){this._listeners.has(t)||this._listeners.set(t,new Set),this._listeners.get(t).add(e)}removeEventListener(t,e){this._listeners.has(t)&&this._listeners.get(t).delete(e)}dispatchEvent(t){return this._listeners.has(t.type)?(this._listeners.get(t.type).forEach(e=>e.call(this,t)),!t.defaultPrevented):!0}}class sr{constructor(t){if(this._drawCtx=null,this._renderQ=[],this._flushPromise=null,this._fbWidth=0,this._fbHeight=0,this._prevDrawStyle="",R(">> Display.constructor"),this._target=t,!this._target)throw new Error("Target must be set");if(typeof this._target=="string")throw new Error("target must be a DOM element");if(!this._target.getContext)throw new Error("no getContext method");this._targetCtx=this._target.getContext("2d"),this._viewportLoc={x:0,y:0,w:this._target.width,h:this._target.height},this._backbuffer=document.createElement("canvas"),this._drawCtx=this._backbuffer.getContext("2d"),this._damageBounds={left:0,top:0,right:this._backbuffer.width,bottom:this._backbuffer.height},R("User Agent: "+navigator.userAgent),R("<< Display.constructor"),this._scale=1,this._clipViewport=!1}get scale(){return this._scale}set scale(t){this._rescale(t)}get clipViewport(){return this._clipViewport}set clipViewport(t){this._clipViewport=t;const e=this._viewportLoc;this.viewportChangeSize(e.w,e.h),this.viewportChangePos(0,0)}get width(){return this._fbWidth}get height(){return this._fbHeight}viewportChangePos(t,e){const s=this._viewportLoc;t=Math.floor(t),e=Math.floor(e),this._clipViewport||(t=-s.w,e=-s.h);const n=s.x+s.w-1,r=s.y+s.h-1;t<0&&s.x+t<0&&(t=-s.x),n+t>=this._fbWidth&&(t-=n+t-this._fbWidth+1),s.y+e<0&&(e=-s.y),r+e>=this._fbHeight&&(e-=r+e-this._fbHeight+1),!(t===0&&e===0)&&(R("viewportChange deltaX: "+t+", deltaY: "+e),s.x+=t,s.y+=e,this._damage(s.x,s.y,s.w,s.h),this.flip())}viewportChangeSize(t,e){(!this._clipViewport||typeof t>"u"||typeof e>"u")&&(R("Setting viewport to full display region"),t=this._fbWidth,e=this._fbHeight),t=Math.floor(t),e=Math.floor(e),t>this._fbWidth&&(t=this._fbWidth),e>this._fbHeight&&(e=this._fbHeight);const s=this._viewportLoc;if(s.w!==t||s.h!==e){s.w=t,s.h=e;const n=this._target;n.width=t,n.height=e,this.viewportChangePos(0,0),this._damage(s.x,s.y,s.w,s.h),this.flip(),this._rescale(this._scale)}}absX(t){return this._scale===0?0:gi(t/this._scale+this._viewportLoc.x)}absY(t){return this._scale===0?0:gi(t/this._scale+this._viewportLoc.y)}resize(t,e){this._prevDrawStyle="",this._fbWidth=t,this._fbHeight=e;const s=this._backbuffer;if(s.width!==t||s.height!==e){let r=null;s.width>0&&s.height>0&&(r=this._drawCtx.getImageData(0,0,s.width,s.height)),s.width!==t&&(s.width=t),s.height!==e&&(s.height=e),r&&this._drawCtx.putImageData(r,0,0)}const n=this._viewportLoc;this.viewportChangeSize(n.w,n.h),this.viewportChangePos(0,0)}getImageData(){return this._drawCtx.getImageData(0,0,this.width,this.height)}toDataURL(t,e){return this._backbuffer.toDataURL(t,e)}toBlob(t,e,s){return this._backbuffer.toBlob(t,e,s)}_damage(t,e,s,n){t<this._damageBounds.left&&(this._damageBounds.left=t),e<this._damageBounds.top&&(this._damageBounds.top=e),t+s>this._damageBounds.right&&(this._damageBounds.right=t+s),e+n>this._damageBounds.bottom&&(this._damageBounds.bottom=e+n)}flip(t){if(this._renderQ.length!==0&&!t)this._renderQPush({type:"flip"});else{let e=this._damageBounds.left,s=this._damageBounds.top,n=this._damageBounds.right-e,r=this._damageBounds.bottom-s,a=e-this._viewportLoc.x,h=s-this._viewportLoc.y;a<0&&(n+=a,e-=a,a=0),h<0&&(r+=h,s-=h,h=0),a+n>this._viewportLoc.w&&(n=this._viewportLoc.w-a),h+r>this._viewportLoc.h&&(r=this._viewportLoc.h-h),n>0&&r>0&&this._targetCtx.drawImage(this._backbuffer,e,s,n,r,a,h,n,r),this._damageBounds.left=this._damageBounds.top=65535,this._damageBounds.right=this._damageBounds.bottom=0}}pending(){return this._renderQ.length>0}flush(){return this._renderQ.length===0?Promise.resolve():(this._flushPromise===null&&(this._flushPromise=new Promise(t=>{this._flushResolve=t})),this._flushPromise)}fillRect(t,e,s,n,r,a){this._renderQ.length!==0&&!a?this._renderQPush({type:"fill",x:t,y:e,width:s,height:n,color:r}):(this._setFillColor(r),this._drawCtx.fillRect(t,e,s,n),this._damage(t,e,s,n))}copyImage(t,e,s,n,r,a,h){this._renderQ.length!==0&&!h?this._renderQPush({type:"copy",oldX:t,oldY:e,x:s,y:n,width:r,height:a}):(this._drawCtx.mozImageSmoothingEnabled=!1,this._drawCtx.webkitImageSmoothingEnabled=!1,this._drawCtx.msImageSmoothingEnabled=!1,this._drawCtx.imageSmoothingEnabled=!1,this._drawCtx.drawImage(this._backbuffer,t,e,r,a,s,n,r,a),this._damage(s,n,r,a))}imageRect(t,e,s,n,r,a){if(s===0||n===0)return;const h=new Image;h.src="data: "+r+";base64,"+vi.encode(a),this._renderQPush({type:"img",img:h,x:t,y:e,width:s,height:n})}videoFrame(t,e,s,n,r){this._renderQPush({type:"frame",frame:r,x:t,y:e,width:s,height:n})}blitImage(t,e,s,n,r,a,h){if(this._renderQ.length!==0&&!h){const c=new Uint8Array(s*n*4);c.set(new Uint8Array(r.buffer,0,c.length)),this._renderQPush({type:"blit",data:c,x:t,y:e,width:s,height:n})}else{let c=new Uint8ClampedArray(r.buffer,r.byteOffset+a,s*n*4),o=new ImageData(c,s,n);this._drawCtx.putImageData(o,t,e),this._damage(t,e,s,n)}}drawImage(t,...e){if(this._drawCtx.drawImage(t,...e),e.length<=4){const[s,n]=e;this._damage(s,n,t.width,t.height)}else{const[,,s,n,r,a]=e;this._damage(r,a,s,n)}}autoscale(t,e){let s;if(t===0||e===0)s=0;else{const n=this._viewportLoc,r=t/e;n.w/n.h>=r?s=t/n.w:s=e/n.h}this._rescale(s)}_rescale(t){this._scale=t;const e=this._viewportLoc,s=t*e.w+"px",n=t*e.h+"px";(this._target.style.width!==s||this._target.style.height!==n)&&(this._target.style.width=s,this._target.style.height=n)}_setFillColor(t){const e="rgb("+t[0]+","+t[1]+","+t[2]+")";e!==this._prevDrawStyle&&(this._drawCtx.fillStyle=e,this._prevDrawStyle=e)}_renderQPush(t){this._renderQ.push(t),this._renderQ.length===1&&this._scanRenderQ()}_resumeRenderQ(){this.removeEventListener("load",this._noVNCDisplay._resumeRenderQ),this._noVNCDisplay._scanRenderQ()}_scanRenderQ(){let t=!0;for(;t&&this._renderQ.length>0;){const e=this._renderQ[0];switch(e.type){case"flip":this.flip(!0);break;case"copy":this.copyImage(e.oldX,e.oldY,e.x,e.y,e.width,e.height,!0);break;case"fill":this.fillRect(e.x,e.y,e.width,e.height,e.color,!0);break;case"blit":this.blitImage(e.x,e.y,e.width,e.height,e.data,0,!0);break;case"img":if(e.img.complete){if(e.img.width!==e.width||e.img.height!==e.height){q("Decoded image has incorrect dimensions. Got "+e.img.width+"x"+e.img.height+". Expected "+e.width+"x"+e.height+".");return}this.drawImage(e.img,e.x,e.y),e.img.src=""}else e.img._noVNCDisplay=this,e.img.addEventListener("load",this._resumeRenderQ),t=!1;break;case"frame":if(e.frame.ready){let s=e.frame.frame;(s.codedWidth<e.width||s.codedHeight<e.height)&&le("Decoded video frame does not cover its full rectangle area. Expecting at least "+e.width+"x"+e.height+" but got "+s.codedWidth+"x"+s.codedHeight);const n=0,r=0,a=e.width,h=e.height,c=e.x,o=e.y,l=a,d=h;this.drawImage(s,n,r,a,h,c,o,l,d),s.close()}else{let s=this;e.frame.promise.then(()=>{s._scanRenderQ()}),t=!1}break}t&&this._renderQ.shift()}this._renderQ.length===0&&this._flushPromise!==null&&(this._flushResolve(),this._flushPromise=null,this._flushResolve=null)}}function Ce(i,t,e,s,n){if(t.subarray&&i.subarray){i.set(t.subarray(e,e+s),n);return}for(var r=0;r<s;r++)i[n+r]=t[e+r]}var Rt=Uint8Array,xe=Uint16Array,Bt=Int32Array;function bi(i,t,e,s){for(var n=i&65535|0,r=i>>>16&65535|0,a=0;e!==0;){a=e>2e3?2e3:e,e-=a;do n=n+t[s++]|0,r=r+n|0;while(--a);n%=65521,r%=65521}return n|r<<16|0}function ee(){for(var i,t=[],e=0;e<256;e++){i=e;for(var s=0;s<8;s++)i=i&1?3988292384^i>>>1:i>>>1;t[e]=i}return t}ee();var yt=30,nr=12;function rr(i,t){var e,s,n,r,a,h,c,o,l,d,_,x,k,C,F,X,K,M,E,T,N,A,H,U,Q;e=i.state,s=i.next_in,U=i.input,n=s+(i.avail_in-5),r=i.next_out,Q=i.output,a=r-(t-i.avail_out),h=r+(i.avail_out-257),c=e.dmax,o=e.wsize,l=e.whave,d=e.wnext,_=e.window,x=e.hold,k=e.bits,C=e.lencode,F=e.distcode,X=(1<<e.lenbits)-1,K=(1<<e.distbits)-1;e:do{k<15&&(x+=U[s++]<<k,k+=8,x+=U[s++]<<k,k+=8),M=C[x&X];t:for(;;){if(E=M>>>24,x>>>=E,k-=E,E=M>>>16&255,E===0)Q[r++]=M&65535;else if(E&16){T=M&65535,E&=15,E&&(k<E&&(x+=U[s++]<<k,k+=8),T+=x&(1<<E)-1,x>>>=E,k-=E),k<15&&(x+=U[s++]<<k,k+=8,x+=U[s++]<<k,k+=8),M=F[x&K];i:for(;;){if(E=M>>>24,x>>>=E,k-=E,E=M>>>16&255,E&16){if(N=M&65535,E&=15,k<E&&(x+=U[s++]<<k,k+=8,k<E&&(x+=U[s++]<<k,k+=8)),N+=x&(1<<E)-1,N>c){i.msg="invalid distance too far back",e.mode=yt;break e}if(x>>>=E,k-=E,E=r-a,N>E){if(E=N-E,E>l&&e.sane){i.msg="invalid distance too far back",e.mode=yt;break e}if(A=0,H=_,d===0){if(A+=o-E,E<T){T-=E;do Q[r++]=_[A++];while(--E);A=r-N,H=Q}}else if(d<E){if(A+=o+d-E,E-=d,E<T){T-=E;do Q[r++]=_[A++];while(--E);if(A=0,d<T){E=d,T-=E;do Q[r++]=_[A++];while(--E);A=r-N,H=Q}}}else if(A+=d-E,E<T){T-=E;do Q[r++]=_[A++];while(--E);A=r-N,H=Q}for(;T>2;)Q[r++]=H[A++],Q[r++]=H[A++],Q[r++]=H[A++],T-=3;T&&(Q[r++]=H[A++],T>1&&(Q[r++]=H[A++]))}else{A=r-N;do Q[r++]=Q[A++],Q[r++]=Q[A++],Q[r++]=Q[A++],T-=3;while(T>2);T&&(Q[r++]=Q[A++],T>1&&(Q[r++]=Q[A++]))}}else if((E&64)===0){M=F[(M&65535)+(x&(1<<E)-1)];continue i}else{i.msg="invalid distance code",e.mode=yt;break e}break}}else if((E&64)===0){M=C[(M&65535)+(x&(1<<E)-1)];continue t}else if(E&32){e.mode=nr;break e}else{i.msg="invalid literal/length code",e.mode=yt;break e}break}}while(s<n&&r<h);T=k>>3,s-=T,k-=T<<3,x&=(1<<k)-1,i.next_in=s,i.next_out=r,i.avail_in=s<n?5+(n-s):5-(s-n),i.avail_out=r<h?257+(h-r):257-(r-h),e.hold=x,e.bits=k}var Ne=15,Di=852,Ii=592,Pi=0,Yt=1,Ui=2,ar=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],or=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],hr=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],lr=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];function at(i,t,e,s,n,r,a,h){var c=h.bits,o=0,l=0,d=0,_=0,x=0,k=0,C=0,F=0,X=0,K=0,M,E,T,N,A,H=null,U=0,Q,j=new xe(Ne+1),te=new xe(Ne+1),_e=null,W=0,ve,se,$;for(o=0;o<=Ne;o++)j[o]=0;for(l=0;l<s;l++)j[t[e+l]]++;for(x=c,_=Ne;_>=1&&j[_]===0;_--);if(x>_&&(x=_),_===0)return n[r++]=1<<24|64<<16|0,n[r++]=1<<24|64<<16|0,h.bits=1,0;for(d=1;d<_&&j[d]===0;d++);for(x<d&&(x=d),F=1,o=1;o<=Ne;o++)if(F<<=1,F-=j[o],F<0)return-1;if(F>0&&(i===Pi||_!==1))return-1;for(te[1]=0,o=1;o<Ne;o++)te[o+1]=te[o]+j[o];for(l=0;l<s;l++)t[e+l]!==0&&(a[te[t[e+l]]++]=l);if(i===Pi?(H=_e=a,Q=19):i===Yt?(H=ar,U-=257,_e=or,W-=257,Q=256):(H=hr,_e=lr,Q=-1),K=0,l=0,o=d,A=r,k=x,C=0,T=-1,X=1<<x,N=X-1,i===Yt&&X>Di||i===Ui&&X>Ii)return 1;for(;;){ve=o-C,a[l]<Q?(se=0,$=a[l]):a[l]>Q?(se=_e[W+a[l]],$=H[U+a[l]]):(se=96,$=0),M=1<<o-C,E=1<<k,d=E;do E-=M,n[A+(K>>C)+E]=ve<<24|se<<16|$|0;while(E!==0);for(M=1<<o-1;K&M;)M>>=1;if(M!==0?(K&=M-1,K+=M):K=0,l++,--j[o]===0){if(o===_)break;o=t[e+a[l]]}if(o>x&&(K&N)!==T){for(C===0&&(C=x),A+=d,k=o-C,F=1<<k;k+C<_&&(F-=j[k+C],!(F<=0));)k++,F<<=1;if(X+=1<<k,i===Yt&&X>Di||i===Ui&&X>Ii)return 1;T=K&N,n[T]=x<<24|k<<16|A-r|0}}return K!==0&&(n[A+K]=o-C<<24|64<<16|0),h.bits=x,0}var cr=0,fn=1,dn=2;const Ni=4,Dt=0,ur=1,fr=2,Pe=-2,dr=-3,_r=-4,xr=-5,Hi=8;var _n=1,zi=2,Oi=3,Vi=4,Gi=5,Wi=6,ji=7,Zi=8,Yi=9,qi=10,$i=11,ke=12,qt=13,Ji=14,$t=15,es=16,ts=17,is=18,ss=19,vt=20,kt=21,ns=22,rs=23,as=24,os=25,hs=26,Jt=27,ls=28,cs=29,Z=30,pr=31,gr=32,br=852,wr=592,mr=15,yr=mr;function us(i){return(i>>>24&255)+(i>>>8&65280)+((i&65280)<<8)+((i&255)<<24)}function vr(){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 xe(320),this.work=new xe(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function kr(i){var t;return!i||!i.state?Pe:(t=i.state,i.total_in=i.total_out=t.total=0,i.msg="",t.wrap&&(i.adler=t.wrap&1),t.mode=_n,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Bt(br),t.distcode=t.distdyn=new Bt(wr),t.sane=1,t.back=-1,Dt)}function xn(i){var t;return!i||!i.state?Pe:(t=i.state,t.wsize=0,t.whave=0,t.wnext=0,kr(i))}function Sr(i,t){var e,s;return!i||!i.state||(s=i.state,t<0?(e=0,t=-t):(e=(t>>4)+1,t<48&&(t&=15)),t&&(t<8||t>15))?Pe:(s.window!==null&&s.wbits!==t&&(s.window=null),s.wrap=e,s.wbits=t,xn(i))}function Er(i,t){var e,s;return i?(s=new vr,i.state=s,s.window=null,e=Sr(i,t),e!==Dt&&(i.state=null),e):Pe}function Cr(i){return Er(i,yr)}var fs=!0,ei,ti;function Kr(i){if(fs){var t;for(ei=new Bt(512),ti=new Bt(32),t=0;t<144;)i.lens[t++]=8;for(;t<256;)i.lens[t++]=9;for(;t<280;)i.lens[t++]=7;for(;t<288;)i.lens[t++]=8;for(at(fn,i.lens,0,288,ei,0,i.work,{bits:9}),t=0;t<32;)i.lens[t++]=5;at(dn,i.lens,0,32,ti,0,i.work,{bits:5}),fs=!1}i.lencode=ei,i.lenbits=9,i.distcode=ti,i.distbits=5}function Ar(i,t,e,s){var n,r=i.state;return r.window===null&&(r.wsize=1<<r.wbits,r.wnext=0,r.whave=0,r.window=new Rt(r.wsize)),s>=r.wsize?(Ce(r.window,t,e-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):(n=r.wsize-r.wnext,n>s&&(n=s),Ce(r.window,t,e-s,n,r.wnext),s-=n,s?(Ce(r.window,t,e-s,s,0),r.wnext=s,r.whave=r.wsize):(r.wnext+=n,r.wnext===r.wsize&&(r.wnext=0),r.whave<r.wsize&&(r.whave+=n))),0}function Xr(i,t){var e,s,n,r,a,h,c,o,l,d,_,x,k,C,F=0,X,K,M,E,T,N,A,H,U=new Rt(4),Q,j,te=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!i||!i.state||!i.output||!i.input&&i.avail_in!==0)return Pe;e=i.state,e.mode===ke&&(e.mode=qt),a=i.next_out,n=i.output,c=i.avail_out,r=i.next_in,s=i.input,h=i.avail_in,o=e.hold,l=e.bits,d=h,_=c,H=Dt;e:for(;;)switch(e.mode){case _n:if(e.wrap===0){e.mode=qt;break}for(;l<16;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}if(e.wrap&2&&o===35615){e.check=0,U[0]=o&255,U[1]=o>>>8&255,e.check=ee(e.check),o=0,l=0,e.mode=zi;break}if(e.flags=0,e.head&&(e.head.done=!1),!(e.wrap&1)||(((o&255)<<8)+(o>>8))%31){i.msg="incorrect header check",e.mode=Z;break}if((o&15)!==Hi){i.msg="unknown compression method",e.mode=Z;break}if(o>>>=4,l-=4,A=(o&15)+8,e.wbits===0)e.wbits=A;else if(A>e.wbits){i.msg="invalid window size",e.mode=Z;break}e.dmax=1<<A,i.adler=e.check=1,e.mode=o&512?qi:ke,o=0,l=0;break;case zi:for(;l<16;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}if(e.flags=o,(e.flags&255)!==Hi){i.msg="unknown compression method",e.mode=Z;break}if(e.flags&57344){i.msg="unknown header flags set",e.mode=Z;break}e.head&&(e.head.text=o>>8&1),e.flags&512&&(U[0]=o&255,U[1]=o>>>8&255,e.check=ee(e.check)),o=0,l=0,e.mode=Oi;case Oi:for(;l<32;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}e.head&&(e.head.time=o),e.flags&512&&(U[0]=o&255,U[1]=o>>>8&255,U[2]=o>>>16&255,U[3]=o>>>24&255,e.check=ee(e.check)),o=0,l=0,e.mode=Vi;case Vi:for(;l<16;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}e.head&&(e.head.xflags=o&255,e.head.os=o>>8),e.flags&512&&(U[0]=o&255,U[1]=o>>>8&255,e.check=ee(e.check)),o=0,l=0,e.mode=Gi;case Gi:if(e.flags&1024){for(;l<16;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}e.length=o,e.head&&(e.head.extra_len=o),e.flags&512&&(U[0]=o&255,U[1]=o>>>8&255,e.check=ee(e.check)),o=0,l=0}else e.head&&(e.head.extra=null);e.mode=Wi;case Wi:if(e.flags&1024&&(x=e.length,x>h&&(x=h),x&&(e.head&&(A=e.head.extra_len-e.length,e.head.extra||(e.head.extra=new Array(e.head.extra_len)),Ce(e.head.extra,s,r,x,A)),e.flags&512&&(e.check=ee(e.check)),h-=x,r+=x,e.length-=x),e.length))break e;e.length=0,e.mode=ji;case ji:if(e.flags&2048){if(h===0)break e;x=0;do A=s[r+x++],e.head&&A&&e.length<65536&&(e.head.name+=String.fromCharCode(A));while(A&&x<h);if(e.flags&512&&(e.check=ee(e.check)),h-=x,r+=x,A)break e}else e.head&&(e.head.name=null);e.length=0,e.mode=Zi;case Zi:if(e.flags&4096){if(h===0)break e;x=0;do A=s[r+x++],e.head&&A&&e.length<65536&&(e.head.comment+=String.fromCharCode(A));while(A&&x<h);if(e.flags&512&&(e.check=ee(e.check)),h-=x,r+=x,A)break e}else e.head&&(e.head.comment=null);e.mode=Yi;case Yi:if(e.flags&512){for(;l<16;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}if(o!==(e.check&65535)){i.msg="header crc mismatch",e.mode=Z;break}o=0,l=0}e.head&&(e.head.hcrc=e.flags>>9&1,e.head.done=!0),i.adler=e.check=0,e.mode=ke;break;case qi:for(;l<32;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}i.adler=e.check=us(o),o=0,l=0,e.mode=$i;case $i:if(e.havedict===0)return i.next_out=a,i.avail_out=c,i.next_in=r,i.avail_in=h,e.hold=o,e.bits=l,fr;i.adler=e.check=1,e.mode=ke;case ke:case qt:if(e.last){o>>>=l&7,l-=l&7,e.mode=Jt;break}for(;l<3;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}switch(e.last=o&1,o>>>=1,l-=1,o&3){case 0:e.mode=Ji;break;case 1:Kr(e),e.mode=vt;break;case 2:e.mode=ts;break;case 3:i.msg="invalid block type",e.mode=Z}o>>>=2,l-=2;break;case Ji:for(o>>>=l&7,l-=l&7;l<32;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}if((o&65535)!==(o>>>16^65535)){i.msg="invalid stored block lengths",e.mode=Z;break}e.length=o&65535,o=0,l=0,e.mode=$t;case $t:e.mode=es;case es:if(x=e.length,x){if(x>h&&(x=h),x>c&&(x=c),x===0)break e;Ce(n,s,r,x,a),h-=x,r+=x,c-=x,a+=x,e.length-=x;break}e.mode=ke;break;case ts:for(;l<14;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}if(e.nlen=(o&31)+257,o>>>=5,l-=5,e.ndist=(o&31)+1,o>>>=5,l-=5,e.ncode=(o&15)+4,o>>>=4,l-=4,e.nlen>286||e.ndist>30){i.msg="too many length or distance symbols",e.mode=Z;break}e.have=0,e.mode=is;case is:for(;e.have<e.ncode;){for(;l<3;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}e.lens[te[e.have++]]=o&7,o>>>=3,l-=3}for(;e.have<19;)e.lens[te[e.have++]]=0;if(e.lencode=e.lendyn,e.lenbits=7,Q={bits:e.lenbits},H=at(cr,e.lens,0,19,e.lencode,0,e.work,Q),e.lenbits=Q.bits,H){i.msg="invalid code lengths set",e.mode=Z;break}e.have=0,e.mode=ss;case ss:for(;e.have<e.nlen+e.ndist;){for(;F=e.lencode[o&(1<<e.lenbits)-1],X=F>>>24,K=F>>>16&255,M=F&65535,!(X<=l);){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}if(M<16)o>>>=X,l-=X,e.lens[e.have++]=M;else{if(M===16){for(j=X+2;l<j;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}if(o>>>=X,l-=X,e.have===0){i.msg="invalid bit length repeat",e.mode=Z;break}A=e.lens[e.have-1],x=3+(o&3),o>>>=2,l-=2}else if(M===17){for(j=X+3;l<j;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}o>>>=X,l-=X,A=0,x=3+(o&7),o>>>=3,l-=3}else{for(j=X+7;l<j;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}o>>>=X,l-=X,A=0,x=11+(o&127),o>>>=7,l-=7}if(e.have+x>e.nlen+e.ndist){i.msg="invalid bit length repeat",e.mode=Z;break}for(;x--;)e.lens[e.have++]=A}}if(e.mode===Z)break;if(e.lens[256]===0){i.msg="invalid code -- missing end-of-block",e.mode=Z;break}if(e.lenbits=9,Q={bits:e.lenbits},H=at(fn,e.lens,0,e.nlen,e.lencode,0,e.work,Q),e.lenbits=Q.bits,H){i.msg="invalid literal/lengths set",e.mode=Z;break}if(e.distbits=6,e.distcode=e.distdyn,Q={bits:e.distbits},H=at(dn,e.lens,e.nlen,e.ndist,e.distcode,0,e.work,Q),e.distbits=Q.bits,H){i.msg="invalid distances set",e.mode=Z;break}e.mode=vt;case vt:e.mode=kt;case kt:if(h>=6&&c>=258){i.next_out=a,i.avail_out=c,i.next_in=r,i.avail_in=h,e.hold=o,e.bits=l,rr(i,_),a=i.next_out,n=i.output,c=i.avail_out,r=i.next_in,s=i.input,h=i.avail_in,o=e.hold,l=e.bits,e.mode===ke&&(e.back=-1);break}for(e.back=0;F=e.lencode[o&(1<<e.lenbits)-1],X=F>>>24,K=F>>>16&255,M=F&65535,!(X<=l);){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}if(K&&(K&240)===0){for(E=X,T=K,N=M;F=e.lencode[N+((o&(1<<E+T)-1)>>E)],X=F>>>24,K=F>>>16&255,M=F&65535,!(E+X<=l);){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}o>>>=E,l-=E,e.back+=E}if(o>>>=X,l-=X,e.back+=X,e.length=M,K===0){e.mode=hs;break}if(K&32){e.back=-1,e.mode=ke;break}if(K&64){i.msg="invalid literal/length code",e.mode=Z;break}e.extra=K&15,e.mode=ns;case ns:if(e.extra){for(j=e.extra;l<j;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}e.length+=o&(1<<e.extra)-1,o>>>=e.extra,l-=e.extra,e.back+=e.extra}e.was=e.length,e.mode=rs;case rs:for(;F=e.distcode[o&(1<<e.distbits)-1],X=F>>>24,K=F>>>16&255,M=F&65535,!(X<=l);){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}if((K&240)===0){for(E=X,T=K,N=M;F=e.distcode[N+((o&(1<<E+T)-1)>>E)],X=F>>>24,K=F>>>16&255,M=F&65535,!(E+X<=l);){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}o>>>=E,l-=E,e.back+=E}if(o>>>=X,l-=X,e.back+=X,K&64){i.msg="invalid distance code",e.mode=Z;break}e.offset=M,e.extra=K&15,e.mode=as;case as:if(e.extra){for(j=e.extra;l<j;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}e.offset+=o&(1<<e.extra)-1,o>>>=e.extra,l-=e.extra,e.back+=e.extra}if(e.offset>e.dmax){i.msg="invalid distance too far back",e.mode=Z;break}e.mode=os;case os:if(c===0)break e;if(x=_-c,e.offset>x){if(x=e.offset-x,x>e.whave&&e.sane){i.msg="invalid distance too far back",e.mode=Z;break}x>e.wnext?(x-=e.wnext,k=e.wsize-x):k=e.wnext-x,x>e.length&&(x=e.length),C=e.window}else C=n,k=a-e.offset,x=e.length;x>c&&(x=c),c-=x,e.length-=x;do n[a++]=C[k++];while(--x);e.length===0&&(e.mode=kt);break;case hs:if(c===0)break e;n[a++]=e.length,c--,e.mode=kt;break;case Jt:if(e.wrap){for(;l<32;){if(h===0)break e;h--,o|=s[r++]<<l,l+=8}if(_-=c,i.total_out+=_,e.total+=_,_&&(i.adler=e.check=e.flags?ee(e.check):bi(e.check,n,_,a-_)),_=c,(e.flags?o:us(o))!==e.check){i.msg="incorrect data check",e.mode=Z;break}o=0,l=0}e.mode=ls;case ls:if(e.wrap&&e.flags){for(;l<32;){if(h===0)break e;h--,o+=s[r++]<<l,l+=8}if(o!==(e.total&4294967295)){i.msg="incorrect length check",e.mode=Z;break}o=0,l=0}e.mode=cs;case cs:H=ur;break e;case Z:H=dr;break e;case pr:return _r;case gr:default:return Pe}return i.next_out=a,i.avail_out=c,i.next_in=r,i.avail_in=h,e.hold=o,e.bits=l,(e.wsize||_!==i.avail_out&&e.mode<Z&&(e.mode<Jt||t!==Ni))&&Ar(i,i.output,i.next_out,_-i.avail_out),d-=i.avail_in,_-=i.avail_out,i.total_in+=d,i.total_out+=_,e.total+=_,e.wrap&&_&&(i.adler=e.check=e.flags?ee(e.check,n,_,i.next_out-_):bi(e.check,n,_,i.next_out-_)),i.data_type=e.bits+(e.last?64:0)+(e.mode===ke?128:0)+(e.mode===vt||e.mode===$t?256:0),(d===0&&_===0||t===Ni)&&H===Dt&&(H=xr),H}function pn(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}class zt{constructor(){this.strm=new pn,this.chunkSize=1024*10*10,this.strm.output=new Uint8Array(this.chunkSize),Cr(this.strm)}setInput(t){t?(this.strm.input=t,this.strm.avail_in=this.strm.input.length,this.strm.next_in=0):(this.strm.input=null,this.strm.avail_in=0,this.strm.next_in=0)}inflate(t){if(t>this.chunkSize&&(this.chunkSize=t,this.strm.output=new Uint8Array(this.chunkSize)),this.strm.next_out=0,this.strm.avail_out=t,Xr(this.strm,0)<0)throw new Error("zlib inflate failed");if(this.strm.next_out!=t)throw new Error("Incomplete zlib block");return new Uint8Array(this.strm.output.buffer,0,this.strm.next_out)}reset(){xn(this.strm)}}var Fr=4,ds=0,_s=1,Mr=2;function Ze(i){for(var t=i.length;--t>=0;)i[t]=0}var Tr=0,Qr=1,Lr=2,Rr=3,Br=258,ki=29,_t=256,lt=_t+1+ki,We=30,Si=19,gn=2*lt+1,Ie=15,ii=16,Dr=7,bn=256,wn=16,mn=17,yn=18,wi=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],Tt=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],Ir=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],vn=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Pr=512,Ae=new Array((lt+2)*2);Ze(Ae);var ot=new Array(We*2);Ze(ot);var ct=new Array(Pr);Ze(ct);var ut=new Array(Br-Rr+1);Ze(ut);var Ei=new Array(ki);Ze(Ei);var It=new Array(We);Ze(It);function si(i,t,e,s,n){this.static_tree=i,this.extra_bits=t,this.extra_base=e,this.elems=s,this.max_length=n,this.has_stree=i&&i.length}var kn,Sn,En;function ni(i,t){this.dyn_tree=i,this.max_code=0,this.stat_desc=t}function Cn(i){return i<256?ct[i]:ct[256+(i>>>7)]}function Pt(i,t){i.pending_buf[i.pending++]=t&255,i.pending_buf[i.pending++]=t>>>8&255}function de(i,t,e){i.bi_valid>ii-e?(i.bi_buf|=t<<i.bi_valid&65535,Pt(i,i.bi_buf),i.bi_buf=t>>ii-i.bi_valid,i.bi_valid+=e-ii):(i.bi_buf|=t<<i.bi_valid&65535,i.bi_valid+=e)}function Ee(i,t,e){de(i,e[t*2],e[t*2+1])}function Kn(i,t){var e=0;do e|=i&1,i>>>=1,e<<=1;while(--t>0);return e>>>1}function Ur(i,t){var e=t.dyn_tree,s=t.max_code,n=t.stat_desc.static_tree,r=t.stat_desc.has_stree,a=t.stat_desc.extra_bits,h=t.stat_desc.extra_base,c=t.stat_desc.max_length,o,l,d,_,x,k,C=0;for(_=0;_<=Ie;_++)i.bl_count[_]=0;for(e[i.heap[i.heap_max]*2+1]=0,o=i.heap_max+1;o<gn;o++)l=i.heap[o],_=e[e[l*2+1]*2+1]+1,_>c&&(_=c,C++),e[l*2+1]=_,!(l>s)&&(i.bl_count[_]++,x=0,l>=h&&(x=a[l-h]),k=e[l*2],i.opt_len+=k*(_+x),r&&(i.static_len+=k*(n[l*2+1]+x)));if(C!==0){do{for(_=c-1;i.bl_count[_]===0;)_--;i.bl_count[_]--,i.bl_count[_+1]+=2,i.bl_count[c]--,C-=2}while(C>0);for(_=c;_!==0;_--)for(l=i.bl_count[_];l!==0;)d=i.heap[--o],!(d>s)&&(e[d*2+1]!==_&&(i.opt_len+=(_-e[d*2+1])*e[d*2],e[d*2+1]=_),l--)}}function An(i,t,e){var s=new Array(Ie+1),n=0,r,a;for(r=1;r<=Ie;r++)s[r]=n=n+e[r-1]<<1;for(a=0;a<=t;a++){var h=i[a*2+1];h!==0&&(i[a*2]=Kn(s[h]++,h))}}function Nr(){var i,t,e,s,n,r=new Array(Ie+1);for(e=0,s=0;s<ki-1;s++)for(Ei[s]=e,i=0;i<1<<wi[s];i++)ut[e++]=s;for(ut[e-1]=s,n=0,s=0;s<16;s++)for(It[s]=n,i=0;i<1<<Tt[s];i++)ct[n++]=s;for(n>>=7;s<We;s++)for(It[s]=n<<7,i=0;i<1<<Tt[s]-7;i++)ct[256+n++]=s;for(t=0;t<=Ie;t++)r[t]=0;for(i=0;i<=143;)Ae[i*2+1]=8,i++,r[8]++;for(;i<=255;)Ae[i*2+1]=9,i++,r[9]++;for(;i<=279;)Ae[i*2+1]=7,i++,r[7]++;for(;i<=287;)Ae[i*2+1]=8,i++,r[8]++;for(An(Ae,lt+1,r),i=0;i<We;i++)ot[i*2+1]=5,ot[i*2]=Kn(i,5);kn=new si(Ae,wi,_t+1,lt,Ie),Sn=new si(ot,Tt,0,We,Ie),En=new si(new Array(0),Ir,0,Si,Dr)}function Xn(i){var t;for(t=0;t<lt;t++)i.dyn_ltree[t*2]=0;for(t=0;t<We;t++)i.dyn_dtree[t*2]=0;for(t=0;t<Si;t++)i.bl_tree[t*2]=0;i.dyn_ltree[bn*2]=1,i.opt_len=i.static_len=0,i.last_lit=i.matches=0}function Fn(i){i.bi_valid>8?Pt(i,i.bi_buf):i.bi_valid>0&&(i.pending_buf[i.pending++]=i.bi_buf),i.bi_buf=0,i.bi_valid=0}function Hr(i,t,e,s){Fn(i),Pt(i,e),Pt(i,~e),Ce(i.pending_buf,i.window,t,e,i.pending),i.pending+=e}function xs(i,t,e,s){var n=t*2,r=e*2;return i[n]<i[r]||i[n]===i[r]&&s[t]<=s[e]}function ri(i,t,e){for(var s=i.heap[e],n=e<<1;n<=i.heap_len&&(n<i.heap_len&&xs(t,i.heap[n+1],i.heap[n],i.depth)&&n++,!xs(t,s,i.heap[n],i.depth));)i.heap[e]=i.heap[n],e=n,n<<=1;i.heap[e]=s}function ps(i,t,e){var s,n,r=0,a,h;if(i.last_lit!==0)do s=i.pending_buf[i.d_buf+r*2]<<8|i.pending_buf[i.d_buf+r*2+1],n=i.pending_buf[i.l_buf+r],r++,s===0?Ee(i,n,t):(a=ut[n],Ee(i,a+_t+1,t),h=wi[a],h!==0&&(n-=Ei[a],de(i,n,h)),s--,a=Cn(s),Ee(i,a,e),h=Tt[a],h!==0&&(s-=It[a],de(i,s,h)));while(r<i.last_lit);Ee(i,bn,t)}function mi(i,t){var e=t.dyn_tree,s=t.stat_desc.static_tree,n=t.stat_desc.has_stree,r=t.stat_desc.elems,a,h,c=-1,o;for(i.heap_len=0,i.heap_max=gn,a=0;a<r;a++)e[a*2]!==0?(i.heap[++i.heap_len]=c=a,i.depth[a]=0):e[a*2+1]=0;for(;i.heap_len<2;)o=i.heap[++i.heap_len]=c<2?++c:0,e[o*2]=1,i.depth[o]=0,i.opt_len--,n&&(i.static_len-=s[o*2+1]);for(t.max_code=c,a=i.heap_len>>1;a>=1;a--)ri(i,e,a);o=r;do a=i.heap[1],i.heap[1]=i.heap[i.heap_len--],ri(i,e,1),h=i.heap[1],i.heap[--i.heap_max]=a,i.heap[--i.heap_max]=h,e[o*2]=e[a*2]+e[h*2],i.depth[o]=(i.depth[a]>=i.depth[h]?i.depth[a]:i.depth[h])+1,e[a*2+1]=e[h*2+1]=o,i.heap[1]=o++,ri(i,e,1);while(i.heap_len>=2);i.heap[--i.heap_max]=i.heap[1],Ur(i,t),An(e,c,i.bl_count)}function gs(i,t,e){var s,n=-1,r,a=t[1],h=0,c=7,o=4;for(a===0&&(c=138,o=3),t[(e+1)*2+1]=65535,s=0;s<=e;s++)r=a,a=t[(s+1)*2+1],!(++h<c&&r===a)&&(h<o?i.bl_tree[r*2]+=h:r!==0?(r!==n&&i.bl_tree[r*2]++,i.bl_tree[wn*2]++):h<=10?i.bl_tree[mn*2]++:i.bl_tree[yn*2]++,h=0,n=r,a===0?(c=138,o=3):r===a?(c=6,o=3):(c=7,o=4))}function bs(i,t,e){var s,n=-1,r,a=t[1],h=0,c=7,o=4;for(a===0&&(c=138,o=3),s=0;s<=e;s++)if(r=a,a=t[(s+1)*2+1],!(++h<c&&r===a)){if(h<o)do Ee(i,r,i.bl_tree);while(--h!==0);else r!==0?(r!==n&&(Ee(i,r,i.bl_tree),h--),Ee(i,wn,i.bl_tree),de(i,h-3,2)):h<=10?(Ee(i,mn,i.bl_tree),de(i,h-3,3)):(Ee(i,yn,i.bl_tree),de(i,h-11,7));h=0,n=r,a===0?(c=138,o=3):r===a?(c=6,o=3):(c=7,o=4)}}function zr(i){var t;for(gs(i,i.dyn_ltree,i.l_desc.max_code),gs(i,i.dyn_dtree,i.d_desc.max_code),mi(i,i.bl_desc),t=Si-1;t>=3&&i.bl_tree[vn[t]*2+1]===0;t--);return i.opt_len+=3*(t+1)+5+5+4,t}function Or(i,t,e,s){var n;for(de(i,t-257,5),de(i,e-1,5),de(i,s-4,4),n=0;n<s;n++)de(i,i.bl_tree[vn[n]*2+1],3);bs(i,i.dyn_ltree,t-1),bs(i,i.dyn_dtree,e-1)}function Vr(i){var t=4093624447,e;for(e=0;e<=31;e++,t>>>=1)if(t&1&&i.dyn_ltree[e*2]!==0)return ds;if(i.dyn_ltree[18]!==0||i.dyn_ltree[20]!==0||i.dyn_ltree[26]!==0)return _s;for(e=32;e<_t;e++)if(i.dyn_ltree[e*2]!==0)return _s;return ds}var ws=!1;function Gr(i){ws||(Nr(),ws=!0),i.l_desc=new ni(i.dyn_ltree,kn),i.d_desc=new ni(i.dyn_dtree,Sn),i.bl_desc=new ni(i.bl_tree,En),i.bi_buf=0,i.bi_valid=0,Xn(i)}function Mn(i,t,e,s){de(i,(Tr<<1)+(s?1:0),3),Hr(i,t,e)}function Wr(i,t,e,s){var n,r,a=0;i.level>0?(i.strm.data_type===Mr&&(i.strm.data_type=Vr(i)),mi(i,i.l_desc),mi(i,i.d_desc),a=zr(i),n=i.opt_len+3+7>>>3,r=i.static_len+3+7>>>3,r<=n&&(n=r)):n=r=e+5,e+4<=n&&t!==-1?Mn(i,t,e,s):i.strategy===Fr||r===n?(de(i,(Qr<<1)+(s?1:0),3),ps(i,Ae,ot)):(de(i,(Lr<<1)+(s?1:0),3),Or(i,i.l_desc.max_code+1,i.d_desc.max_code+1,a+1),ps(i,i.dyn_ltree,i.dyn_dtree)),Xn(i),s&&Fn(i)}function Te(i,t,e){return i.pending_buf[i.d_buf+i.last_lit*2]=t>>>8&255,i.pending_buf[i.d_buf+i.last_lit*2+1]=t&255,i.pending_buf[i.l_buf+i.last_lit]=e&255,i.last_lit++,t===0?i.dyn_ltree[e*2]++:(i.matches++,t--,i.dyn_ltree[(ut[e]+_t+1)*2]++,i.dyn_dtree[Cn(t)*2]++),i.last_lit===i.lit_bufsize-1}const jr={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},xt=0,ms=3,ft=4,Zr=5,Oe=0,je=-2,ai=-5,Tn=-1,Yr=1,St=2,qr=3,$r=4,Jr=0,ea=2,Ci=8;var ta=15,ia=8,sa=29,na=256,yi=na+1+sa,ra=30,aa=19,oa=2*yi+1,ha=15,V=3,Fe=258,be=Fe+V+1,la=32,Qn=42,ys=69,oi=73,hi=91,li=103,nt=113,Et=666,ie=1,pt=2,dt=3,Ot=4,ca=3;function Ve(i,t){return i.msg=jr[t],t}function vs(i){return(i<<1)-(i>4?9:0)}function De(i){for(var t=i.length;--t>=0;)i[t]=0}function Re(i){var t=i.state,e=t.pending;e>i.avail_out&&(e=i.avail_out),e!==0&&(Ce(i.output,t.pending_buf,t.pending_out,e,i.next_out),i.next_out+=e,t.pending_out+=e,i.total_out+=e,i.avail_out-=e,t.pending-=e,t.pending===0&&(t.pending_out=0))}function ce(i,t){Wr(i,i.block_start>=0?i.block_start:-1,i.strstart-i.block_start,t),i.block_start=i.strstart,Re(i.strm)}function Y(i,t){i.pending_buf[i.pending++]=t}function ci(i,t){i.pending_buf[i.pending++]=t>>>8&255,i.pending_buf[i.pending++]=t&255}function ua(i,t,e,s){var n=i.avail_in;return n>s&&(n=s),n===0?0:(i.avail_in-=n,Ce(t,i.input,i.next_in,n,e),i.state.wrap===1?i.adler=bi(i.adler,t,n,e):i.state.wrap===2&&(i.adler=ee(i.adler)),i.next_in+=n,i.total_in+=n,n)}function Ln(i,t){var e=i.max_chain_length,s=i.strstart,n,r,a=i.prev_length,h=i.nice_match,c=i.strstart>i.w_size-be?i.strstart-(i.w_size-be):0,o=i.window,l=i.w_mask,d=i.prev,_=i.strstart+Fe,x=o[s+a-1],k=o[s+a];i.prev_length>=i.good_match&&(e>>=2),h>i.lookahead&&(h=i.lookahead);do if(n=t,!(o[n+a]!==k||o[n+a-1]!==x||o[n]!==o[s]||o[++n]!==o[s+1])){s+=2,n++;do;while(o[++s]===o[++n]&&o[++s]===o[++n]&&o[++s]===o[++n]&&o[++s]===o[++n]&&o[++s]===o[++n]&&o[++s]===o[++n]&&o[++s]===o[++n]&&o[++s]===o[++n]&&s<_);if(r=Fe-(_-s),s=_-Fe,r>a){if(i.match_start=t,a=r,r>=h)break;x=o[s+a-1],k=o[s+a]}}while((t=d[t&l])>c&&--e!==0);return a<=i.lookahead?a:i.lookahead}function gt(i){var t=i.w_size,e,s,n,r,a;do{if(r=i.window_size-i.lookahead-i.strstart,i.strstart>=t+(t-be)){Ce(i.window,i.window,t,t,0),i.match_start-=t,i.strstart-=t,i.block_start-=t,s=i.hash_size,e=s;do n=i.head[--e],i.head[e]=n>=t?n-t:0;while(--s);s=t,e=s;do n=i.prev[--e],i.prev[e]=n>=t?n-t:0;while(--s);r+=t}if(i.strm.avail_in===0)break;if(s=ua(i.strm,i.window,i.strstart+i.lookahead,r),i.lookahead+=s,i.lookahead+i.insert>=V)for(a=i.strstart-i.insert,i.ins_h=i.window[a],i.ins_h=(i.ins_h<<i.hash_shift^i.window[a+1])&i.hash_mask;i.insert&&(i.ins_h=(i.ins_h<<i.hash_shift^i.window[a+V-1])&i.hash_mask,i.prev[a&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=a,a++,i.insert--,!(i.lookahead+i.insert<V)););}while(i.lookahead<be&&i.strm.avail_in!==0)}function fa(i,t){var e=65535;for(e>i.pending_buf_size-5&&(e=i.pending_buf_size-5);;){if(i.lookahead<=1){if(gt(i),i.lookahead===0&&t===xt)return ie;if(i.lookahead===0)break}i.strstart+=i.lookahead,i.lookahead=0;var s=i.block_start+e;if((i.strstart===0||i.strstart>=s)&&(i.lookahead=i.strstart-s,i.strstart=s,ce(i,!1),i.strm.avail_out===0)||i.strstart-i.block_start>=i.w_size-be&&(ce(i,!1),i.strm.avail_out===0))return ie}return i.insert=0,t===ft?(ce(i,!0),i.strm.avail_out===0?dt:Ot):(i.strstart>i.block_start&&(ce(i,!1),i.strm.avail_out===0),ie)}function ui(i,t){for(var e,s;;){if(i.lookahead<be){if(gt(i),i.lookahead<be&&t===xt)return ie;if(i.lookahead===0)break}if(e=0,i.lookahead>=V&&(i.ins_h=(i.ins_h<<i.hash_shift^i.window[i.strstart+V-1])&i.hash_mask,e=i.prev[i.strstart&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=i.strstart),e!==0&&i.strstart-e<=i.w_size-be&&(i.match_length=Ln(i,e)),i.match_length>=V)if(s=Te(i,i.strstart-i.match_start,i.match_length-V),i.lookahead-=i.match_length,i.match_length<=i.max_lazy_match&&i.lookahead>=V){i.match_length--;do i.strstart++,i.ins_h=(i.ins_h<<i.hash_shift^i.window[i.strstart+V-1])&i.hash_mask,e=i.prev[i.strstart&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=i.strstart;while(--i.match_length!==0);i.strstart++}else i.strstart+=i.match_length,i.match_length=0,i.ins_h=i.window[i.strstart],i.ins_h=(i.ins_h<<i.hash_shift^i.window[i.strstart+1])&i.hash_mask;else s=Te(i,0,i.window[i.strstart]),i.lookahead--,i.strstart++;if(s&&(ce(i,!1),i.strm.avail_out===0))return ie}return i.insert=i.strstart<V-1?i.strstart:V-1,t===ft?(ce(i,!0),i.strm.avail_out===0?dt:Ot):i.last_lit&&(ce(i,!1),i.strm.avail_out===0)?ie:pt}function He(i,t){for(var e,s,n;;){if(i.lookahead<be){if(gt(i),i.lookahead<be&&t===xt)return ie;if(i.lookahead===0)break}if(e=0,i.lookahead>=V&&(i.ins_h=(i.ins_h<<i.hash_shift^i.window[i.strstart+V-1])&i.hash_mask,e=i.prev[i.strstart&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=i.strstart),i.prev_length=i.match_length,i.prev_match=i.match_start,i.match_length=V-1,e!==0&&i.prev_length<i.max_lazy_match&&i.strstart-e<=i.w_size-be&&(i.match_length=Ln(i,e),i.match_length<=5&&(i.strategy===Yr||i.match_length===V&&i.strstart-i.match_start>4096)&&(i.match_length=V-1)),i.prev_length>=V&&i.match_length<=i.prev_length){n=i.strstart+i.lookahead-V,s=Te(i,i.strstart-1-i.prev_match,i.prev_length-V),i.lookahead-=i.prev_length-1,i.prev_length-=2;do++i.strstart<=n&&(i.ins_h=(i.ins_h<<i.hash_shift^i.window[i.strstart+V-1])&i.hash_mask,e=i.prev[i.strstart&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=i.strstart);while(--i.prev_length!==0);if(i.match_available=0,i.match_length=V-1,i.strstart++,s&&(ce(i,!1),i.strm.avail_out===0))return ie}else if(i.match_available){if(s=Te(i,0,i.window[i.strstart-1]),s&&ce(i,!1),i.strstart++,i.lookahead--,i.strm.avail_out===0)return ie}else i.match_available=1,i.strstart++,i.lookahead--}return i.match_available&&(s=Te(i,0,i.window[i.strstart-1]),i.match_available=0),i.insert=i.strstart<V-1?i.strstart:V-1,t===ft?(ce(i,!0),i.strm.avail_out===0?dt:Ot):i.last_lit&&(ce(i,!1),i.strm.avail_out===0)?ie:pt}function da(i,t){for(var e,s,n,r,a=i.window;!(i.lookahead<=Fe&&(gt(i),i.lookahead<=Fe,i.lookahead===0));){if(i.match_length=0,i.lookahead>=V&&i.strstart>0&&(n=i.strstart-1,s=a[n],s===a[++n]&&s===a[++n]&&s===a[++n])){r=i.strstart+Fe;do;while(s===a[++n]&&s===a[++n]&&s===a[++n]&&s===a[++n]&&s===a[++n]&&s===a[++n]&&s===a[++n]&&s===a[++n]&&n<r);i.match_length=Fe-(r-n),i.match_length>i.lookahead&&(i.match_length=i.lookahead)}if(i.match_length>=V?(e=Te(i,1,i.match_length-V),i.lookahead-=i.match_length,i.strstart+=i.match_length,i.match_length=0):(e=Te(i,0,i.window[i.strstart]),i.lookahead--,i.strstart++),e&&(ce(i,!1),i.strm.avail_out===0))return ie}return i.insert=0,i.last_lit&&(ce(i,!1),i.strm.avail_out===0)?ie:pt}function _a(i,t){for(var e;!(i.lookahead===0&&(gt(i),i.lookahead===0));)if(i.match_length=0,e=Te(i,0,i.window[i.strstart]),i.lookahead--,i.strstart++,e&&(ce(i,!1),i.strm.avail_out===0))return ie;return i.insert=0,i.last_lit&&(ce(i,!1),i.strm.avail_out===0)?ie:pt}function we(i,t,e,s,n){this.good_length=i,this.max_lazy=t,this.nice_length=e,this.max_chain=s,this.func=n}var Ge;Ge=[new we(0,0,0,0,fa),new we(4,4,8,4,ui),new we(4,5,16,8,ui),new we(4,6,32,32,ui),new we(4,4,16,16,He),new we(8,16,32,32,He),new we(8,16,128,128,He),new we(8,32,128,256,He),new we(32,128,258,1024,He),new we(32,258,258,4096,He)];function xa(i){i.window_size=2*i.w_size,De(i.head),i.max_lazy_match=Ge[i.level].max_lazy,i.good_match=Ge[i.level].good_length,i.nice_match=Ge[i.level].nice_length,i.max_chain_length=Ge[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=V-1,i.match_available=0,i.ins_h=0}function pa(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ci,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new xe(oa*2),this.dyn_dtree=new xe((2*ra+1)*2),this.bl_tree=new xe((2*aa+1)*2),De(this.dyn_ltree),De(this.dyn_dtree),De(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new xe(ha+1),this.heap=new xe(2*yi+1),De(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new xe(2*yi+1),De(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function ga(i){var t;return!i||!i.state?Ve(i,je):(i.total_in=i.total_out=0,i.data_type=ea,t=i.state,t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?Qn:nt,i.adler=t.wrap===2?0:1,t.last_flush=xt,Gr(t),Oe)}function ba(i){var t=ga(i);return t===Oe&&xa(i.state),t}function wa(i,t,e,s,n,r){if(!i)return je;var a=1;if(t===Tn&&(t=6),t<0||t>9||r<0||r>$r)return Ve(i,je);var h=new pa;return i.state=h,h.strm=i,h.wrap=a,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=n+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+V-1)/V),h.window=new Rt(h.w_size*2),h.head=new xe(h.hash_size),h.prev=new xe(h.w_size),h.lit_bufsize=1<<n+6,h.pending_buf_size=h.lit_bufsize*4,h.pending_buf=new Rt(h.pending_buf_size),h.d_buf=1*h.lit_bufsize,h.l_buf=3*h.lit_bufsize,h.level=t,h.strategy=r,h.method=e,ba(i)}function ma(i,t){return wa(i,t,Ci,ta,ia,Jr)}function ks(i,t){var e,s,n,r;if(!i||!i.state||t>Zr||t<0)return i?Ve(i,je):je;if(s=i.state,!i.output||!i.input&&i.avail_in!==0||s.status===Et&&t!==ft)return Ve(i,i.avail_out===0?ai:je);if(s.strm=i,e=s.last_flush,s.last_flush=t,s.status===Qn)if(s.wrap===2)i.adler=0,Y(s,31),Y(s,139),Y(s,8),s.gzhead?(Y(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(s.gzhead.extra?4:0)+(s.gzhead.name?8:0)+(s.gzhead.comment?16:0)),Y(s,s.gzhead.time&255),Y(s,s.gzhead.time>>8&255),Y(s,s.gzhead.time>>16&255),Y(s,s.gzhead.time>>24&255),Y(s,s.level===9?2:s.strategy>=St||s.level<2?4:0),Y(s,s.gzhead.os&255),s.gzhead.extra&&s.gzhead.extra.length&&(Y(s,s.gzhead.extra.length&255),Y(s,s.gzhead.extra.length>>8&255)),s.gzhead.hcrc&&(i.adler=ee(i.adler,s.pending_buf,s.pending)),s.gzindex=0,s.status=ys):(Y(s,0),Y(s,0),Y(s,0),Y(s,0),Y(s,0),Y(s,s.level===9?2:s.strategy>=St||s.level<2?4:0),Y(s,ca),s.status=nt);else{var a=Ci+(s.w_bits-8<<4)<<8,h=-1;s.strategy>=St||s.level<2?h=0:s.level<6?h=1:s.level===6?h=2:h=3,a|=h<<6,s.strstart!==0&&(a|=la),a+=31-a%31,s.status=nt,ci(s,a),s.strstart!==0&&(ci(s,i.adler>>>16),ci(s,i.adler&65535)),i.adler=1}if(s.status===ys)if(s.gzhead.extra){for(n=s.pending;s.gzindex<(s.gzhead.extra.length&65535)&&!(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>n&&(i.adler=ee(i.adler,s.pending_buf,s.pending-n)),Re(i),n=s.pending,s.pending===s.pending_buf_size));)Y(s,s.gzhead.extra[s.gzindex]&255),s.gzindex++;s.gzhead.hcrc&&s.pending>n&&(i.adler=ee(i.adler,s.pending_buf,s.pending-n)),s.gzindex===s.gzhead.extra.length&&(s.gzindex=0,s.status=oi)}else s.status=oi;if(s.status===oi)if(s.gzhead.name){n=s.pending;do{if(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>n&&(i.adler=ee(i.adler,s.pending_buf,s.pending-n)),Re(i),n=s.pending,s.pending===s.pending_buf_size)){r=1;break}s.gzindex<s.gzhead.name.length?r=s.gzhead.name.charCodeAt(s.gzindex++)&255:r=0,Y(s,r)}while(r!==0);s.gzhead.hcrc&&s.pending>n&&(i.adler=ee(i.adler,s.pending_buf,s.pending-n)),r===0&&(s.gzindex=0,s.status=hi)}else s.status=hi;if(s.status===hi)if(s.gzhead.comment){n=s.pending;do{if(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>n&&(i.adler=ee(i.adler,s.pending_buf,s.pending-n)),Re(i),n=s.pending,s.pending===s.pending_buf_size)){r=1;break}s.gzindex<s.gzhead.comment.length?r=s.gzhead.comment.charCodeAt(s.gzindex++)&255:r=0,Y(s,r)}while(r!==0);s.gzhead.hcrc&&s.pending>n&&(i.adler=ee(i.adler,s.pending_buf,s.pending-n)),r===0&&(s.status=li)}else s.status=li;if(s.status===li&&(s.gzhead.hcrc?(s.pending+2>s.pending_buf_size&&Re(i),s.pending+2<=s.pending_buf_size&&(Y(s,i.adler&255),Y(s,i.adler>>8&255),i.adler=0,s.status=nt)):s.status=nt),s.pending!==0){if(Re(i),i.avail_out===0)return s.last_flush=-1,Oe}else if(i.avail_in===0&&vs(t)<=vs(e)&&t!==ft)return Ve(i,ai);if(s.status===Et&&i.avail_in!==0)return Ve(i,ai);if(i.avail_in!==0||s.lookahead!==0||s.status!==Et){var c=s.strategy===St?_a(s):s.strategy===qr?da(s,t):Ge[s.level].func(s,t);if((c===dt||c===Ot)&&(s.status=Et),c===ie||c===dt)return i.avail_out===0&&(s.last_flush=-1),Oe;if(c===pt&&(Mn(s,0,0,!1),De(s.head),s.lookahead===0&&(s.strstart=0,s.block_start=0,s.insert=0),Re(i),i.avail_out===0))return s.last_flush=-1,Oe}return Oe}class ya{constructor(){this.strm=new pn,this.chunkSize=1024*10*10,this.outputBuffer=new Uint8Array(this.chunkSize),ma(this.strm,Tn)}deflate(t){this.strm.input=t,this.strm.avail_in=this.strm.input.length,this.strm.next_in=0,this.strm.output=this.outputBuffer,this.strm.avail_out=this.chunkSize,this.strm.next_out=0;let e=ks(this.strm,ms),s=new Uint8Array(this.strm.output.buffer,0,this.strm.next_out);if(e<0)throw new Error("zlib deflate failed");if(this.strm.avail_in>0){let n=[s],r=s.length;do{if(this.strm.output=new Uint8Array(this.chunkSize),this.strm.next_out=0,this.strm.avail_out=this.chunkSize,e=ks(this.strm,ms),e<0)throw new Error("zlib deflate failed");let c=new Uint8Array(this.strm.output.buffer,0,this.strm.next_out);r+=c.length,n.push(c)}while(this.strm.avail_in>0);let a=new Uint8Array(r),h=0;for(let c=0;c<n.length;c++)a.set(n[c],h),h+=n[c].length;s=a}return this.strm.input=null,this.strm.avail_in=0,this.strm.next_in=0,s}}const f={XK_BackSpace:65288,XK_Tab:65289,XK_Clear:65291,XK_Return:65293,XK_Pause:65299,XK_Scroll_Lock:65300,XK_Escape:65307,XK_Delete:65535,XK_Multi_key:65312,XK_Codeinput:65335,XK_SingleCandidate:65340,XK_MultipleCandidate:65341,XK_PreviousCandidate:65342,XK_Kanji:65313,XK_Muhenkan:65314,XK_Henkan:65315,XK_Romaji:65316,XK_Hiragana:65317,XK_Katakana:65318,XK_Hiragana_Katakana:65319,XK_Zenkaku:65320,XK_Hankaku:65321,XK_Zenkaku_Hankaku:65322,XK_Kana_Shift:65326,XK_Eisu_toggle:65328,XK_Home:65360,XK_Left:65361,XK_Up:65362,XK_Right:65363,XK_Down:65364,XK_Prior:65365,XK_Next:65366,XK_End:65367,XK_Select:65376,XK_Print:65377,XK_Execute:65378,XK_Insert:65379,XK_Undo:65381,XK_Redo:65382,XK_Menu:65383,XK_Find:65384,XK_Cancel:65385,XK_Help:65386,XK_Mode_switch:65406,XK_Num_Lock:65407,XK_KP_Space:65408,XK_KP_Enter:65421,XK_KP_Home:65429,XK_KP_Left:65430,XK_KP_Up:65431,XK_KP_Right:65432,XK_KP_Down:65433,XK_KP_Prior:65434,XK_KP_Next:65435,XK_KP_End:65436,XK_KP_Begin:65437,XK_KP_Insert:65438,XK_KP_Delete:65439,XK_KP_Equal:65469,XK_KP_Multiply:65450,XK_KP_Add:65451,XK_KP_Separator:65452,XK_KP_Subtract:65453,XK_KP_Decimal:65454,XK_KP_Divide:65455,XK_KP_0:65456,XK_KP_1:65457,XK_KP_2:65458,XK_KP_3:65459,XK_KP_4:65460,XK_KP_5:65461,XK_KP_6:65462,XK_KP_7:65463,XK_KP_8:65464,XK_KP_9:65465,XK_F1:65470,XK_F2:65471,XK_F3:65472,XK_F4:65473,XK_F5:65474,XK_F6:65475,XK_F7:65476,XK_F8:65477,XK_F9:65478,XK_F10:65479,XK_F11:65480,XK_F12:65481,XK_F13:65482,XK_F14:65483,XK_F15:65484,XK_F16:65485,XK_F17:65486,XK_F18:65487,XK_F19:65488,XK_F20:65489,XK_F21:65490,XK_F22:65491,XK_F23:65492,XK_F24:65493,XK_F25:65494,XK_F26:65495,XK_F27:65496,XK_F28:65497,XK_F29:65498,XK_F30:65499,XK_F31:65500,XK_F32:65501,XK_F33:65502,XK_F34:65503,XK_F35:65504,XK_Shift_L:65505,XK_Shift_R:65506,XK_Control_L:65507,XK_Control_R:65508,XK_Caps_Lock:65509,XK_Meta_L:65511,XK_Meta_R:65512,XK_Alt_L:65513,XK_Alt_R:65514,XK_Super_L:65515,XK_Super_R:65516,XK_ISO_Level3_Shift:65027,XK_ISO_Next_Group:65032,XK_ISO_Prev_Group:65034,XK_ISO_First_Group:65036,XK_ISO_Last_Group:65038,XK_space:32,XK_asterisk:42,XK_plus:43,XK_comma:44,XK_minus:45,XK_period:46,XK_slash:47,XK_0:48,XK_1:49,XK_2:50,XK_3:51,XK_4:52,XK_5:53,XK_6:54,XK_7:55,XK_8:56,XK_9:57,XK_equal:61,XK_Hangul:65329,XK_Hangul_Hanja:65332,XK_Hangul_Jeonja:65336,XF86XK_MonBrightnessUp:269025026,XF86XK_MonBrightnessDown:269025027,XF86XK_Standby:269025040,XF86XK_AudioLowerVolume:269025041,XF86XK_AudioMute:269025042,XF86XK_AudioRaiseVolume:269025043,XF86XK_AudioPlay:269025044,XF86XK_AudioStop:269025045,XF86XK_AudioPrev:269025046,XF86XK_AudioNext:269025047,XF86XK_HomePage:269025048,XF86XK_Mail:269025049,XF86XK_Search:269025051,XF86XK_AudioRecord:269025052,XF86XK_Calculator:269025053,XF86XK_Calendar:269025056,XF86XK_PowerDown:269025057,XF86XK_Back:269025062,XF86XK_Forward:269025063,XF86XK_Stop:269025064,XF86XK_Refresh:269025065,XF86XK_PowerOff:269025066,XF86XK_WakeUp:269025067,XF86XK_Eject:269025068,XF86XK_ScreenSaver:269025069,XF86XK_WWW:269025070,XF86XK_Favorites:269025072,XF86XK_AudioPause:269025073,XF86XK_AudioMedia:269025074,XF86XK_MyComputer:269025075,XF86XK_BrightnessAdjust:269025083,XF86XK_AudioRewind:269025086,XF86XK_Close:269025110,XF86XK_Copy:269025111,XF86XK_Cut:269025112,XF86XK_Excel:269025116,XF86XK_LogOff:269025121,XF86XK_New:269025128,XF86XK_Open:269025131,XF86XK_Paste:269025133,XF86XK_Phone:269025134,XF86XK_Reply:269025138,XF86XK_Save:269025143,XF86XK_Send:269025147,XF86XK_Spell:269025148,XF86XK_SplitScreen:269025149,XF86XK_Word:269025161,XF86XK_ZoomIn:269025163,XF86XK_ZoomOut:269025164,XF86XK_WebCam:269025167,XF86XK_MailForward:269025168,XF86XK_Music:269025170,XF86XK_AudioForward:269025175,XF86XK_AudioRandomPlay:269025177,XF86XK_Subtitle:269025178,XF86XK_AudioCycleTrack:269025179,XF86XK_Hibernate:269025192,XF86XK_AudioMicMute:269025202,XF86XK_Next_VMode:269024802},va={256:960,257:992,258:451,259:483,260:417,261:433,262:454,263:486,264:710,265:742,266:709,267:741,268:456,269:488,270:463,271:495,272:464,273:496,274:938,275:954,278:972,279:1004,280:458,281:490,282:460,283:492,284:728,285:760,286:683,287:699,288:725,289:757,290:939,291:955,292:678,293:694,294:673,295:689,296:933,297:949,298:975,299:1007,302:967,303:999,304:681,305:697,308:684,309:700,310:979,311:1011,312:930,313:453,314:485,315:934,316:950,317:421,318:437,321:419,322:435,323:465,324:497,325:977,326:1009,327:466,328:498,330:957,331:959,332:978,333:1010,336:469,337:501,338:5052,339:5053,340:448,341:480,342:931,343:947,344:472,345:504,346:422,347:438,348:734,349:766,350:426,351:442,352:425,353:441,354:478,355:510,356:427,357:443,358:940,359:956,360:989,361:1021,362:990,363:1022,364:733,365:765,366:473,367:505,368:475,369:507,370:985,371:1017,376:5054,377:428,378:444,379:431,380:447,381:430,382:446,402:2294,466:16777681,711:439,728:418,729:511,731:434,733:445,901:1966,902:1953,904:1954,905:1955,906:1956,908:1959,910:1960,911:1963,912:1974,913:1985,914:1986,915:1987,916:1988,917:1989,918:1990,919:1991,920:1992,921:1993,922:1994,923:1995,924:1996,925:1997,926:1998,927:1999,928:2e3,929:2001,931:2002,932:2004,933:2005,934:2006,935:2007,936:2008,937:2009,938:1957,939:1961,940:1969,941:1970,942:1971,943:1972,944:1978,945:2017,946:2018,947:2019,948:2020,949:2021,950:2022,951:2023,952:2024,953:2025,954:2026,955:2027,956:2028,957:2029,958:2030,959:2031,960:2032,961:2033,962:2035,963:2034,964:2036,965:2037,966:2038,967:2039,968:2040,969:2041,970:1973,971:1977,972:1975,973:1976,974:1979,1025:1715,1026:1713,1027:1714,1028:1716,1029:1717,1030:1718,1031:1719,1032:1720,1033:1721,1034:1722,1035:1723,1036:1724,1038:1726,1039:1727,1040:1761,1041:1762,1042:1783,1043:1767,1044:1764,1045:1765,1046:1782,1047:1786,1048:1769,1049:1770,1050:1771,1051:1772,1052:1773,1053:1774,1054:1775,1055:1776,1056:1778,1057:1779,1058:1780,1059:1781,1060:1766,1061:1768,1062:1763,1063:1790,1064:1787,1065:1789,1066:1791,1067:1785,1068:1784,1069:1788,1070:1760,1071:1777,1072:1729,1073:1730,1074:1751,1075:1735,1076:1732,1077:1733,1078:1750,1079:1754,1080:1737,1081:1738,1082:1739,1083:1740,1084:1741,1085:1742,1086:1743,1087:1744,1088:1746,1089:1747,1090:1748,1091:1749,1092:1734,1093:1736,1094:1731,1095:1758,1096:1755,1097:1757,1098:1759,1099:1753,1100:1752,1101:1756,1102:1728,1103:1745,1105:1699,1106:1697,1107:1698,1108:1700,1109:1701,1110:1702,1111:1703,1112:1704,1113:1705,1114:1706,1115:1707,1116:1708,1118:1710,1119:1711,1168:1725,1169:1709,1488:3296,1489:3297,1490:3298,1491:3299,1492:3300,1493:3301,1494:3302,1495:3303,1496:3304,1497:3305,1498:3306,1499:3307,1500:3308,1501:3309,1502:3310,1503:3311,1504:3312,1505:3313,1506:3314,1507:3315,1508:3316,1509:3317,1510:3318,1511:3319,1512:3320,1513:3321,1514:3322,1548:1452,1563:1467,1567:1471,1569:1473,1570:1474,1571:1475,1572:1476,1573:1477,1574:1478,1575:1479,1576:1480,1577:1481,1578:1482,1579:1483,1580:1484,1581:1485,1582:1486,1583:1487,1584:1488,1585:1489,1586:1490,1587:1491,1588:1492,1589:1493,1590:1494,1591:1495,1592:1496,1593:1497,1594:1498,1600:1504,1601:1505,1602:1506,1603:1507,1604:1508,1605:1509,1606:1510,1607:1511,1608:1512,1609:1513,1610:1514,1611:1515,1612:1516,1613:1517,1614:1518,1615:1519,1616:1520,1617:1521,1618:1522,3585:3489,3586:3490,3587:3491,3588:3492,3589:3493,3590:3494,3591:3495,3592:3496,3593:3497,3594:3498,3595:3499,3596:3500,3597:3501,3598:3502,3599:3503,3600:3504,3601:3505,3602:3506,3603:3507,3604:3508,3605:3509,3606:3510,3607:3511,3608:3512,3609:3513,3610:3514,3611:3515,3612:3516,3613:3517,3614:3518,3615:3519,3616:3520,3617:3521,3618:3522,3619:3523,3620:3524,3621:3525,3622:3526,3623:3527,3624:3528,3625:3529,3626:3530,3627:3531,3628:3532,3629:3533,3630:3534,3631:3535,3632:3536,3633:3537,3634:3538,3635:3539,3636:3540,3637:3541,3638:3542,3639:3543,3640:3544,3641:3545,3642:3546,3647:3551,3648:3552,3649:3553,3650:3554,3651:3555,3652:3556,3653:3557,3654:3558,3655:3559,3656:3560,3657:3561,3658:3562,3659:3563,3660:3564,3661:3565,3664:3568,3665:3569,3666:3570,3667:3571,3668:3572,3669:3573,3670:3574,3671:3575,3672:3576,3673:3577,8194:2722,8195:2721,8196:2723,8197:2724,8199:2725,8200:2726,8201:2727,8202:2728,8210:2747,8211:2730,8212:2729,8213:1967,8215:3295,8216:2768,8217:2769,8218:2813,8220:2770,8221:2771,8222:2814,8224:2801,8225:2802,8226:2790,8229:2735,8230:2734,8240:2773,8242:2774,8243:2775,8248:2812,8254:1150,8361:3839,8364:8364,8453:2744,8470:1712,8471:2811,8478:2772,8482:2761,8531:2736,8532:2737,8533:2738,8534:2739,8535:2740,8536:2741,8537:2742,8538:2743,8539:2755,8540:2756,8541:2757,8542:2758,8592:2299,8593:2300,8594:2301,8595:2302,8658:2254,8660:2253,8706:2287,8711:2245,8728:3018,8730:2262,8733:2241,8734:2242,8743:2270,8744:2271,8745:2268,8746:2269,8747:2239,8756:2240,8764:2248,8771:2249,8773:16785992,8800:2237,8801:2255,8804:2236,8805:2238,8834:2266,8835:2267,8866:3068,8867:3036,8868:3010,8869:3022,8968:3027,8970:3012,8981:2810,8992:2212,8993:2213,9109:3020,9115:2219,9117:2220,9118:2221,9120:2222,9121:2215,9123:2216,9124:2217,9126:2218,9128:2223,9132:2224,9143:2209,9146:2543,9147:2544,9148:2546,9149:2547,9225:2530,9226:2533,9227:2537,9228:2531,9229:2532,9251:2732,9252:2536,9472:2211,9474:2214,9484:2210,9488:2539,9492:2541,9496:2538,9500:2548,9508:2549,9516:2551,9524:2550,9532:2542,9618:2529,9642:2791,9643:2785,9644:2779,9645:2786,9646:2783,9647:2767,9650:2792,9651:2787,9654:2781,9655:2765,9660:2793,9661:2788,9664:2780,9665:2764,9670:2528,9675:2766,9679:2782,9702:2784,9734:2789,9742:2809,9747:2762,9756:2794,9758:2795,9792:2808,9794:2807,9827:2796,9829:2798,9830:2797,9837:2806,9839:2805,10003:2803,10007:2804,10013:2777,10016:2800,10216:2748,10217:2750,12289:1188,12290:1185,12300:1186,12301:1187,12443:1246,12444:1247,12449:1191,12450:1201,12451:1192,12452:1202,12453:1193,12454:1203,12455:1194,12456:1204,12457:1195,12458:1205,12459:1206,12461:1207,12463:1208,12465:1209,12467:1210,12469:1211,12471:1212,12473:1213,12475:1214,12477:1215,12479:1216,12481:1217,12483:1199,12484:1218,12486:1219,12488:1220,12490:1221,12491:1222,12492:1223,12493:1224,12494:1225,12495:1226,12498:1227,12501:1228,12504:1229,12507:1230,12510:1231,12511:1232,12512:1233,12513:1234,12514:1235,12515:1196,12516:1236,12517:1197,12518:1237,12519:1198,12520:1238,12521:1239,12522:1240,12523:1241,12524:1242,12525:1243,12527:1244,12530:1190,12531:1245,12539:1189,12540:1200},ka={lookup(i){if(i>=32&&i<=255)return i;const t=va[i];return t!==void 0?t:16777216|i}},Ss={8:"Backspace",9:"Tab",10:"NumpadClear",13:"Enter",16:"ShiftLeft",17:"ControlLeft",18:"AltLeft",19:"Pause",20:"CapsLock",21:"Lang1",25:"Lang2",27:"Escape",28:"Convert",29:"NonConvert",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",41:"Select",44:"PrintScreen",45:"Insert",46:"Delete",47:"Help",48:"Digit0",49:"Digit1",50:"Digit2",51:"Digit3",52:"Digit4",53:"Digit5",54:"Digit6",55:"Digit7",56:"Digit8",57:"Digit9",91:"MetaLeft",92:"MetaRight",93:"ContextMenu",95:"Sleep",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9",106:"NumpadMultiply",107:"NumpadAdd",108:"NumpadDecimal",109:"NumpadSubtract",110:"NumpadDecimal",111:"NumpadDivide",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",124:"F13",125:"F14",126:"F15",127:"F16",128:"F17",129:"F18",130:"F19",131:"F20",132:"F21",133:"F22",134:"F23",135:"F24",144:"NumLock",145:"ScrollLock",166:"BrowserBack",167:"BrowserForward",168:"BrowserRefresh",169:"BrowserStop",170:"BrowserSearch",171:"BrowserFavorites",172:"BrowserHome",173:"AudioVolumeMute",174:"AudioVolumeDown",175:"AudioVolumeUp",176:"MediaTrackNext",177:"MediaTrackPrevious",178:"MediaStop",179:"MediaPlayPause",180:"LaunchMail",181:"MediaSelect",182:"LaunchApp1",183:"LaunchApp2",225:"AltRight"},Es={Backspace:"Backspace",AltLeft:"Alt",AltRight:"Alt",CapsLock:"CapsLock",ContextMenu:"ContextMenu",ControlLeft:"Control",ControlRight:"Control",Enter:"Enter",MetaLeft:"Meta",MetaRight:"Meta",ShiftLeft:"Shift",ShiftRight:"Shift",Tab:"Tab",Delete:"Delete",End:"End",Help:"Help",Home:"Home",Insert:"Insert",PageDown:"PageDown",PageUp:"PageUp",ArrowDown:"ArrowDown",ArrowLeft:"ArrowLeft",ArrowRight:"ArrowRight",ArrowUp:"ArrowUp",NumLock:"NumLock",NumpadBackspace:"Backspace",NumpadClear:"Clear",Escape:"Escape",F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12",F13:"F13",F14:"F14",F15:"F15",F16:"F16",F17:"F17",F18:"F18",F19:"F19",F20:"F20",F21:"F21",F22:"F22",F23:"F23",F24:"F24",F25:"F25",F26:"F26",F27:"F27",F28:"F28",F29:"F29",F30:"F30",F31:"F31",F32:"F32",F33:"F33",F34:"F34",F35:"F35",PrintScreen:"PrintScreen",ScrollLock:"ScrollLock",Pause:"Pause",BrowserBack:"BrowserBack",BrowserFavorites:"BrowserFavorites",BrowserForward:"BrowserForward",BrowserHome:"BrowserHome",BrowserRefresh:"BrowserRefresh",BrowserSearch:"BrowserSearch",BrowserStop:"BrowserStop",Eject:"Eject",LaunchApp1:"LaunchMyComputer",LaunchApp2:"LaunchCalendar",LaunchMail:"LaunchMail",MediaPlayPause:"MediaPlay",MediaStop:"MediaStop",MediaTrackNext:"MediaTrackNext",MediaTrackPrevious:"MediaTrackPrevious",Power:"Power",Sleep:"Sleep",AudioVolumeDown:"AudioVolumeDown",AudioVolumeMute:"AudioVolumeMute",AudioVolumeUp:"AudioVolumeUp",WakeUp:"WakeUp"},Qe={};function m(i,t){if(t===void 0)throw new Error('Undefined keysym for key "'+i+'"');if(i in Qe)throw new Error('Duplicate entry for key "'+i+'"');Qe[i]=[t,t,t,t]}function Vt(i,t,e){if(t===void 0)throw new Error('Undefined keysym for key "'+i+'"');if(e===void 0)throw new Error('Undefined keysym for key "'+i+'"');if(i in Qe)throw new Error('Duplicate entry for key "'+i+'"');Qe[i]=[t,t,e,t]}function G(i,t,e){if(t===void 0)throw new Error('Undefined keysym for key "'+i+'"');if(e===void 0)throw new Error('Undefined keysym for key "'+i+'"');if(i in Qe)throw new Error('Duplicate entry for key "'+i+'"');Qe[i]=[t,t,t,e]}Vt("Alt",f.XK_Alt_L,f.XK_Alt_R);m("AltGraph",f.XK_ISO_Level3_Shift);m("CapsLock",f.XK_Caps_Lock);Vt("Control",f.XK_Control_L,f.XK_Control_R);Vt("Meta",f.XK_Super_L,f.XK_Super_R);m("NumLock",f.XK_Num_Lock);m("ScrollLock",f.XK_Scroll_Lock);Vt("Shift",f.XK_Shift_L,f.XK_Shift_R);G("Enter",f.XK_Return,f.XK_KP_Enter);m("Tab",f.XK_Tab);G(" ",f.XK_space,f.XK_KP_Space);G("ArrowDown",f.XK_Down,f.XK_KP_Down);G("ArrowLeft",f.XK_Left,f.XK_KP_Left);G("ArrowRight",f.XK_Right,f.XK_KP_Right);G("ArrowUp",f.XK_Up,f.XK_KP_Up);G("End",f.XK_End,f.XK_KP_End);G("Home",f.XK_Home,f.XK_KP_Home);G("PageDown",f.XK_Next,f.XK_KP_Next);G("PageUp",f.XK_Prior,f.XK_KP_Prior);m("Backspace",f.XK_BackSpace);G("Clear",f.XK_Clear,f.XK_KP_Begin);m("Copy",f.XF86XK_Copy);m("Cut",f.XF86XK_Cut);G("Delete",f.XK_Delete,f.XK_KP_Delete);G("Insert",f.XK_Insert,f.XK_KP_Insert);m("Paste",f.XF86XK_Paste);m("Redo",f.XK_Redo);m("Undo",f.XK_Undo);m("Cancel",f.XK_Cancel);m("ContextMenu",f.XK_Menu);m("Escape",f.XK_Escape);m("Execute",f.XK_Execute);m("Find",f.XK_Find);m("Help",f.XK_Help);m("Pause",f.XK_Pause);m("Select",f.XK_Select);m("ZoomIn",f.XF86XK_ZoomIn);m("ZoomOut",f.XF86XK_ZoomOut);m("BrightnessDown",f.XF86XK_MonBrightnessDown);m("BrightnessUp",f.XF86XK_MonBrightnessUp);m("Eject",f.XF86XK_Eject);m("LogOff",f.XF86XK_LogOff);m("Power",f.XF86XK_PowerOff);m("PowerOff",f.XF86XK_PowerDown);m("PrintScreen",f.XK_Print);m("Hibernate",f.XF86XK_Hibernate);m("Standby",f.XF86XK_Standby);m("WakeUp",f.XF86XK_WakeUp);m("AllCandidates",f.XK_MultipleCandidate);m("Alphanumeric",f.XK_Eisu_toggle);m("CodeInput",f.XK_Codeinput);m("Compose",f.XK_Multi_key);m("Convert",f.XK_Henkan);m("GroupFirst",f.XK_ISO_First_Group);m("GroupLast",f.XK_ISO_Last_Group);m("GroupNext",f.XK_ISO_Next_Group);m("GroupPrevious",f.XK_ISO_Prev_Group);m("NonConvert",f.XK_Muhenkan);m("PreviousCandidate",f.XK_PreviousCandidate);m("SingleCandidate",f.XK_SingleCandidate);m("HangulMode",f.XK_Hangul);m("HanjaMode",f.XK_Hangul_Hanja);m("JunjaMode",f.XK_Hangul_Jeonja);m("Eisu",f.XK_Eisu_toggle);m("Hankaku",f.XK_Hankaku);m("Hiragana",f.XK_Hiragana);m("HiraganaKatakana",f.XK_Hiragana_Katakana);m("KanaMode",f.XK_Kana_Shift);m("KanjiMode",f.XK_Kanji);m("Katakana",f.XK_Katakana);m("Romaji",f.XK_Romaji);m("Zenkaku",f.XK_Zenkaku);m("ZenkakuHankaku",f.XK_Zenkaku_Hankaku);m("F1",f.XK_F1);m("F2",f.XK_F2);m("F3",f.XK_F3);m("F4",f.XK_F4);m("F5",f.XK_F5);m("F6",f.XK_F6);m("F7",f.XK_F7);m("F8",f.XK_F8);m("F9",f.XK_F9);m("F10",f.XK_F10);m("F11",f.XK_F11);m("F12",f.XK_F12);m("F13",f.XK_F13);m("F14",f.XK_F14);m("F15",f.XK_F15);m("F16",f.XK_F16);m("F17",f.XK_F17);m("F18",f.XK_F18);m("F19",f.XK_F19);m("F20",f.XK_F20);m("F21",f.XK_F21);m("F22",f.XK_F22);m("F23",f.XK_F23);m("F24",f.XK_F24);m("F25",f.XK_F25);m("F26",f.XK_F26);m("F27",f.XK_F27);m("F28",f.XK_F28);m("F29",f.XK_F29);m("F30",f.XK_F30);m("F31",f.XK_F31);m("F32",f.XK_F32);m("F33",f.XK_F33);m("F34",f.XK_F34);m("F35",f.XK_F35);m("Close",f.XF86XK_Close);m("MailForward",f.XF86XK_MailForward);m("MailReply",f.XF86XK_Reply);m("MailSend",f.XF86XK_Send);m("MediaFastForward",f.XF86XK_AudioForward);m("MediaPause",f.XF86XK_AudioPause);m("MediaPlay",f.XF86XK_AudioPlay);m("MediaRecord",f.XF86XK_AudioRecord);m("MediaRewind",f.XF86XK_AudioRewind);m("MediaStop",f.XF86XK_AudioStop);m("MediaTrackNext",f.XF86XK_AudioNext);m("MediaTrackPrevious",f.XF86XK_AudioPrev);m("New",f.XF86XK_New);m("Open",f.XF86XK_Open);m("Print",f.XK_Print);m("Save",f.XF86XK_Save);m("SpellCheck",f.XF86XK_Spell);m("AudioVolumeDown",f.XF86XK_AudioLowerVolume);m("AudioVolumeUp",f.XF86XK_AudioRaiseVolume);m("AudioVolumeMute",f.XF86XK_AudioMute);m("MicrophoneVolumeMute",f.XF86XK_AudioMicMute);m("LaunchApplication1",f.XF86XK_MyComputer);m("LaunchApplication2",f.XF86XK_Calculator);m("LaunchCalendar",f.XF86XK_Calendar);m("LaunchMail",f.XF86XK_Mail);m("LaunchMediaPlayer",f.XF86XK_AudioMedia);m("LaunchMusicPlayer",f.XF86XK_Music);m("LaunchPhone",f.XF86XK_Phone);m("LaunchScreenSaver",f.XF86XK_ScreenSaver);m("LaunchSpreadsheet",f.XF86XK_Excel);m("LaunchWebBrowser",f.XF86XK_WWW);m("LaunchWebCam",f.XF86XK_WebCam);m("LaunchWordProcessor",f.XF86XK_Word);m("BrowserBack",f.XF86XK_Back);m("BrowserFavorites",f.XF86XK_Favorites);m("BrowserForward",f.XF86XK_Forward);m("BrowserHome",f.XF86XK_HomePage);m("BrowserRefresh",f.XF86XK_Refresh);m("BrowserSearch",f.XF86XK_Search);m("BrowserStop",f.XF86XK_Stop);m("Dimmer",f.XF86XK_BrightnessAdjust);m("MediaAudioTrack",f.XF86XK_AudioCycleTrack);m("RandomToggle",f.XF86XK_AudioRandomPlay);m("SplitScreenToggle",f.XF86XK_SplitScreen);m("Subtitle",f.XF86XK_Subtitle);m("VideoModeNext",f.XF86XK_Next_VMode);G("=",f.XK_equal,f.XK_KP_Equal);G("+",f.XK_plus,f.XK_KP_Add);G("-",f.XK_minus,f.XK_KP_Subtract);G("*",f.XK_asterisk,f.XK_KP_Multiply);G("/",f.XK_slash,f.XK_KP_Divide);G(".",f.XK_period,f.XK_KP_Decimal);G(",",f.XK_comma,f.XK_KP_Separator);G("0",f.XK_0,f.XK_KP_0);G("1",f.XK_1,f.XK_KP_1);G("2",f.XK_2,f.XK_KP_2);G("3",f.XK_3,f.XK_KP_3);G("4",f.XK_4,f.XK_KP_4);G("5",f.XK_5,f.XK_KP_5);G("6",f.XK_6,f.XK_KP_6);G("7",f.XK_7,f.XK_KP_7);G("8",f.XK_8,f.XK_KP_8);G("9",f.XK_9,f.XK_KP_9);function ht(i){if(i.code){switch(i.code){case"OSLeft":return"MetaLeft";case"OSRight":return"MetaRight"}return i.code}if(i.keyCode in Ss){let t=Ss[i.keyCode];if(ze()&&t==="ContextMenu"&&(t="MetaRight"),i.location===2)switch(t){case"ShiftLeft":return"ShiftRight";case"ControlLeft":return"ControlRight";case"AltLeft":return"AltRight"}if(i.location===3)switch(t){case"Delete":return"NumpadDecimal";case"Insert":return"Numpad0";case"End":return"Numpad1";case"ArrowDown":return"Numpad2";case"PageDown":return"Numpad3";case"ArrowLeft":return"Numpad4";case"ArrowRight":return"Numpad6";case"Home":return"Numpad7";case"ArrowUp":return"Numpad8";case"PageUp":return"Numpad9";case"Enter":return"NumpadEnter"}return t}return"Unidentified"}function Sa(i){if(i.key!==void 0&&i.key!=="Unidentified"){switch(i.key){case"OS":return"Meta";case"LaunchMyComputer":return"LaunchApplication1";case"LaunchCalculator":return"LaunchApplication2"}switch(i.key){case"UIKeyInputUpArrow":return"ArrowUp";case"UIKeyInputDownArrow":return"ArrowDown";case"UIKeyInputLeftArrow":return"ArrowLeft";case"UIKeyInputRightArrow":return"ArrowRight";case"UIKeyInputEscape":return"Escape"}return i.key==="\0"&&i.code==="NumpadDecimal"?"Delete":i.key}const t=ht(i);return t in Es?Es[t]:i.charCode?String.fromCharCode(i.charCode):"Unidentified"}function Ea(i){const t=Sa(i);if(t==="Unidentified")return null;if(t in Qe){let s=i.location;if(t==="Meta"&&s===0&&(s=2),t==="Clear"&&s===3&&ht(i)==="NumLock"&&(s=0),(s===void 0||s>3)&&(s=0),t==="Meta"){let n=ht(i);if(n==="AltLeft")return f.XK_Meta_L;if(n==="AltRight")return f.XK_Meta_R}if(t==="Clear"&&ht(i)==="NumLock")return f.XK_Num_Lock;if(Mt())switch(t){case"Zenkaku":case"Hankaku":return f.XK_Zenkaku_Hankaku;case"Romaji":case"KanaMode":return f.XK_Romaji}return Qe[t][s]}if(t.length!==1)return null;const e=t.charCodeAt();return e?ka.lookup(e):null}class Ca{constructor(t){this._target=t||null,this._keyDownList={},this._altGrArmed=!1,this._eventHandlers={keyup:this._handleKeyUp.bind(this),keydown:this._handleKeyDown.bind(this),blur:this._allKeysUp.bind(this)},this.onkeyevent=()=>{}}_sendKeyEvent(t,e,s,n=null,r=null){if(s)this._keyDownList[e]=t;else{if(!(e in this._keyDownList))return;delete this._keyDownList[e]}R("onkeyevent "+(s?"down":"up")+", keysym: "+t,", code: "+e+", numlock: "+n+", capslock: "+r),this.onkeyevent(t,e,s,n,r)}_getKeyCode(t){const e=ht(t);if(e!=="Unidentified")return e;if(t.keyCode&&t.keyCode!==229)return"Platform"+t.keyCode;if(t.keyIdentifier){if(t.keyIdentifier.substr(0,2)!=="U+")return t.keyIdentifier;const s=parseInt(t.keyIdentifier.substr(2),16);return"Platform"+String.fromCharCode(s).toUpperCase().charCodeAt()}return"Unidentified"}_handleKeyDown(t){const e=this._getKeyCode(t);let s=Ea(t),n=t.getModifierState("NumLock"),r=t.getModifierState("CapsLock");if((ze()||$e())&&(n=null),this._altGrArmed&&(this._altGrArmed=!1,clearTimeout(this._altGrTimeout),e==="AltRight"&&t.timeStamp-this._altGrCtrlTime<50?s=f.XK_ISO_Level3_Shift:this._sendKeyEvent(f.XK_Control_L,"ControlLeft",!0,n,r)),e==="Unidentified"){s&&(this._sendKeyEvent(s,e,!0,n,r),this._sendKeyEvent(s,e,!1,n,r)),Ue(t);return}if(ze()||$e())switch(s){case f.XK_Super_L:s=f.XK_Alt_L;break;case f.XK_Super_R:s=f.XK_Super_L;break;case f.XK_Alt_L:s=f.XK_Mode_switch;break;case f.XK_Alt_R:s=f.XK_ISO_Level3_Shift;break}if(e in this._keyDownList&&(s=this._keyDownList[e]),(ze()||$e())&&t.metaKey&&e!=="MetaLeft"&&e!=="MetaRight"){this._sendKeyEvent(s,e,!0,n,r),this._sendKeyEvent(s,e,!1,n,r),Ue(t);return}if((ze()||$e())&&e==="CapsLock"){this._sendKeyEvent(f.XK_Caps_Lock,"CapsLock",!0,n,r),this._sendKeyEvent(f.XK_Caps_Lock,"CapsLock",!1,n,r),Ue(t);return}const a=[f.XK_Zenkaku_Hankaku,f.XK_Eisu_toggle,f.XK_Katakana,f.XK_Hiragana,f.XK_Romaji];if(Mt()&&a.includes(s)){this._sendKeyEvent(s,e,!0,n,r),this._sendKeyEvent(s,e,!1,n,r),Ue(t);return}if(Ue(t),e==="ControlLeft"&&Mt()&&!("ControlLeft"in this._keyDownList)){this._altGrArmed=!0,this._altGrTimeout=setTimeout(this._interruptAltGrSequence.bind(this),100),this._altGrCtrlTime=t.timeStamp;return}this._sendKeyEvent(s,e,!0,n,r)}_handleKeyUp(t){Ue(t);const e=this._getKeyCode(t);if(this._interruptAltGrSequence(),(ze()||$e())&&e==="CapsLock"){this._sendKeyEvent(f.XK_Caps_Lock,"CapsLock",!0),this._sendKeyEvent(f.XK_Caps_Lock,"CapsLock",!1);return}this._sendKeyEvent(this._keyDownList[e],e,!1),Mt()&&(e==="ShiftLeft"||e==="ShiftRight")&&("ShiftRight"in this._keyDownList&&this._sendKeyEvent(this._keyDownList.ShiftRight,"ShiftRight",!1),"ShiftLeft"in this._keyDownList&&this._sendKeyEvent(this._keyDownList.ShiftLeft,"ShiftLeft",!1))}_interruptAltGrSequence(){this._altGrArmed&&(this._altGrArmed=!1,clearTimeout(this._altGrTimeout),this._sendKeyEvent(f.XK_Control_L,"ControlLeft",!0))}_allKeysUp(){R(">> Keyboard.allKeysUp"),this._interruptAltGrSequence();for(let t in this._keyDownList)this._sendKeyEvent(this._keyDownList[t],t,!1);R("<< Keyboard.allKeysUp")}grab(){this._target.addEventListener("keydown",this._eventHandlers.keydown),this._target.addEventListener("keyup",this._eventHandlers.keyup),window.addEventListener("blur",this._eventHandlers.blur)}ungrab(){this._target.removeEventListener("keydown",this._eventHandlers.keydown),this._target.removeEventListener("keyup",this._eventHandlers.keyup),window.removeEventListener("blur",this._eventHandlers.blur),this._allKeysUp()}}const me=0,Cs=1,Ks=2,As=4,Xs=8,fi=16,et=32,tt=64,di=127,Fs=50,Ka=90,Ms=250,Aa=1e3,Xa=1e3,Fa=50;class Ma{constructor(){this._target=null,this._state=di,this._tracked=[],this._ignored=[],this._waitingRelease=!1,this._releaseStart=0,this._longpressTimeoutId=null,this._twoTouchTimeoutId=null,this._boundEventHandler=this._eventHandler.bind(this)}attach(t){this.detach(),this._target=t,this._target.addEventListener("touchstart",this._boundEventHandler),this._target.addEventListener("touchmove",this._boundEventHandler),this._target.addEventListener("touchend",this._boundEventHandler),this._target.addEventListener("touchcancel",this._boundEventHandler)}detach(){this._target&&(this._stopLongpressTimeout(),this._stopTwoTouchTimeout(),this._target.removeEventListener("touchstart",this._boundEventHandler),this._target.removeEventListener("touchmove",this._boundEventHandler),this._target.removeEventListener("touchend",this._boundEventHandler),this._target.removeEventListener("touchcancel",this._boundEventHandler),this._target=null)}_eventHandler(t){let e;switch(t.stopPropagation(),t.preventDefault(),t.type){case"touchstart":e=this._touchStart;break;case"touchmove":e=this._touchMove;break;case"touchend":case"touchcancel":e=this._touchEnd;break}for(let s=0;s<t.changedTouches.length;s++){let n=t.changedTouches[s];e.call(this,n.identifier,n.clientX,n.clientY)}}_touchStart(t,e,s){if(this._hasDetectedGesture()||this._state===me){this._ignored.push(t);return}if(this._tracked.length>0&&Date.now()-this._tracked[0].started>Ms){this._state=me,this._ignored.push(t);return}if(this._waitingRelease){this._state=me,this._ignored.push(t);return}switch(this._tracked.push({id:t,started:Date.now(),active:!0,firstX:e,firstY:s,lastX:e,lastY:s,angle:0}),this._tracked.length){case 1:this._startLongpressTimeout();break;case 2:this._state&=-26,this._stopLongpressTimeout();break;case 3:this._state&=-99;break;default:this._state=me}}_touchMove(t,e,s){let n=this._tracked.find(h=>h.id===t);if(n===void 0)return;n.lastX=e,n.lastY=s;let r=e-n.firstX,a=s-n.firstY;if((n.firstX!==n.lastX||n.firstY!==n.lastY)&&(n.angle=Math.atan2(a,r)*180/Math.PI),!this._hasDetectedGesture()){if(Math.hypot(r,a)<Fs)return;if(this._state&=-24,this._stopLongpressTimeout(),this._tracked.length!==1&&(this._state&=~Xs),this._tracked.length!==2&&(this._state&=-97),this._tracked.length===2){let h=this._tracked.find(o=>o.id!==t);if(Math.hypot(h.firstX-h.lastX,h.firstY-h.lastY)>Fs){let o=Math.abs(n.angle-h.angle);o=Math.abs((o+180)%360-180),o>Ka?this._state&=~et:this._state&=~tt,this._isTwoTouchTimeoutRunning()&&this._stopTwoTouchTimeout()}else this._isTwoTouchTimeoutRunning()||this._startTwoTouchTimeout()}if(!this._hasDetectedGesture())return;this._pushEvent("gesturestart")}this._pushEvent("gesturemove")}_touchEnd(t,e,s){if(this._ignored.indexOf(t)!==-1){this._ignored.splice(this._ignored.indexOf(t),1),this._ignored.length===0&&this._tracked.length===0&&(this._state=di,this._waitingRelease=!1);return}if(!this._hasDetectedGesture()&&this._isTwoTouchTimeoutRunning()&&(this._stopTwoTouchTimeout(),this._state=me),!this._hasDetectedGesture()&&(this._state&=-105,this._state&=~fi,this._stopLongpressTimeout(),!this._waitingRelease))switch(this._releaseStart=Date.now(),this._waitingRelease=!0,this._tracked.length){case 1:this._state&=-7;break;case 2:this._state&=-6;break}if(this._waitingRelease){Date.now()-this._releaseStart>Ms&&(this._state=me),this._tracked.some(r=>Date.now()-r.started>Aa)&&(this._state=me);let n=this._tracked.find(r=>r.id===t);if(n.active=!1,this._hasDetectedGesture())this._pushEvent("gesturestart");else if(this._state!==me)return}this._hasDetectedGesture()&&this._pushEvent("gestureend");for(let n=0;n<this._tracked.length;n++)this._tracked[n].active&&this._ignored.push(this._tracked[n].id);this._tracked=[],this._state=me,this._ignored.indexOf(t)!==-1&&this._ignored.splice(this._ignored.indexOf(t),1),this._ignored.length===0&&(this._state=di,this._waitingRelease=!1)}_hasDetectedGesture(){return!(this._state===me||this._state&this._state-1||this._state&(Cs|Ks|As)&&this._tracked.some(t=>t.active))}_startLongpressTimeout(){this._stopLongpressTimeout(),this._longpressTimeoutId=setTimeout(()=>this._longpressTimeout(),Xa)}_stopLongpressTimeout(){clearTimeout(this._longpressTimeoutId),this._longpressTimeoutId=null}_longpressTimeout(){if(this._hasDetectedGesture())throw new Error("A longpress gesture failed, conflict with a different gesture");this._state=fi,this._pushEvent("gesturestart")}_startTwoTouchTimeout(){this._stopTwoTouchTimeout(),this._twoTouchTimeoutId=setTimeout(()=>this._twoTouchTimeout(),Fa)}_stopTwoTouchTimeout(){clearTimeout(this._twoTouchTimeoutId),this._twoTouchTimeoutId=null}_isTwoTouchTimeoutRunning(){return this._twoTouchTimeoutId!==null}_twoTouchTimeout(){if(this._tracked.length===0)throw new Error("A pinch or two drag gesture failed, no tracked touches");let t=this._getAverageMovement(),e=Math.abs(t.x),s=Math.abs(t.y),n=this._getAverageDistance(),r=Math.abs(Math.hypot(n.first.x,n.first.y)-Math.hypot(n.last.x,n.last.y));s<r&&e<r?this._state=tt:this._state=et,this._pushEvent("gesturestart"),this._pushEvent("gesturemove")}_pushEvent(t){let e={type:this._stateToGesture(this._state)},s=this._getPosition(),n=s.last;switch(t==="gesturestart"&&(n=s.first),this._state){case et:case tt:n=s.first;break}if(e.clientX=n.x,e.clientY=n.y,this._state===tt){let a=this._getAverageDistance();t==="gesturestart"?(e.magnitudeX=a.first.x,e.magnitudeY=a.first.y):(e.magnitudeX=a.last.x,e.magnitudeY=a.last.y)}else if(this._state===et)if(t==="gesturestart")e.magnitudeX=0,e.magnitudeY=0;else{let a=this._getAverageMovement();e.magnitudeX=a.x,e.magnitudeY=a.y}let r=new CustomEvent(t,{detail:e});this._target.dispatchEvent(r)}_stateToGesture(t){switch(t){case Cs:return"onetap";case Ks:return"twotap";case As:return"threetap";case Xs:return"drag";case fi:return"longpress";case et:return"twodrag";case tt:return"pinch"}throw new Error("Unknown gesture state: "+t)}_getPosition(){if(this._tracked.length===0)throw new Error("Failed to get gesture position, no tracked touches");let t=this._tracked.length,e=0,s=0,n=0,r=0;for(let a=0;a<this._tracked.length;a++)e+=this._tracked[a].firstX,s+=this._tracked[a].firstY,n+=this._tracked[a].lastX,r+=this._tracked[a].lastY;return{first:{x:e/t,y:s/t},last:{x:n/t,y:r/t}}}_getAverageMovement(){if(this._tracked.length===0)throw new Error("Failed to get gesture movement, no tracked touches");let t,e;t=e=0;let s=this._tracked.length;for(let n=0;n<this._tracked.length;n++)t+=this._tracked[n].lastX-this._tracked[n].firstX,e+=this._tracked[n].lastY-this._tracked[n].firstY;return{x:t/s,y:e/s}}_getAverageDistance(){if(this._tracked.length===0)throw new Error("Failed to get gesture distance, no tracked touches");let t=this._tracked[0],e=this._tracked[this._tracked.length-1],s=Math.abs(e.firstX-t.firstX),n=Math.abs(e.firstY-t.firstY),r=Math.abs(e.lastX-t.lastX),a=Math.abs(e.lastY-t.lastY);return{first:{x:s,y:n},last:{x:r,y:a}}}}const it=!Jn||nn;class Ta{constructor(){this._target=null,this._canvas=document.createElement("canvas"),it&&(this._canvas.style.position="fixed",this._canvas.style.zIndex="65535",this._canvas.style.pointerEvents="none",this._canvas.style.userSelect="none",this._canvas.style.WebkitUserSelect="none",this._canvas.style.visibility="hidden"),this._position={x:0,y:0},this._hotSpot={x:0,y:0},this._eventHandlers={mouseover:this._handleMouseOver.bind(this),mouseleave:this._handleMouseLeave.bind(this),mousemove:this._handleMouseMove.bind(this),mouseup:this._handleMouseUp.bind(this)}}attach(t){if(this._target&&this.detach(),this._target=t,it){document.body.appendChild(this._canvas);const e={capture:!0,passive:!0};this._target.addEventListener("mouseover",this._eventHandlers.mouseover,e),this._target.addEventListener("mouseleave",this._eventHandlers.mouseleave,e),this._target.addEventListener("mousemove",this._eventHandlers.mousemove,e),this._target.addEventListener("mouseup",this._eventHandlers.mouseup,e)}this.clear()}detach(){if(this._target){if(it){const t={capture:!0,passive:!0};this._target.removeEventListener("mouseover",this._eventHandlers.mouseover,t),this._target.removeEventListener("mouseleave",this._eventHandlers.mouseleave,t),this._target.removeEventListener("mousemove",this._eventHandlers.mousemove,t),this._target.removeEventListener("mouseup",this._eventHandlers.mouseup,t),document.contains(this._canvas)&&document.body.removeChild(this._canvas)}this._target=null}}change(t,e,s,n,r){if(n===0||r===0){this.clear();return}this._position.x=this._position.x+this._hotSpot.x-e,this._position.y=this._position.y+this._hotSpot.y-s,this._hotSpot.x=e,this._hotSpot.y=s;let a=this._canvas.getContext("2d");this._canvas.width=n,this._canvas.height=r;let h=new ImageData(new Uint8ClampedArray(t),n,r);if(a.clearRect(0,0,n,r),a.putImageData(h,0,0),it)this._updatePosition();else{let c=this._canvas.toDataURL();this._target.style.cursor="url("+c+")"+e+" "+s+", default"}}clear(){this._target.style.cursor="none",this._canvas.width=0,this._canvas.height=0,this._position.x=this._position.x+this._hotSpot.x,this._position.y=this._position.y+this._hotSpot.y,this._hotSpot.x=0,this._hotSpot.y=0}move(t,e){if(!it)return;window.visualViewport?(this._position.x=t+window.visualViewport.offsetLeft,this._position.y=e+window.visualViewport.offsetTop):(this._position.x=t,this._position.y=e),this._updatePosition();let s=document.elementFromPoint(t,e);this._updateVisibility(s)}_handleMouseOver(t){this._handleMouseMove(t)}_handleMouseLeave(t){this._updateVisibility(t.relatedTarget)}_handleMouseMove(t){this._updateVisibility(t.target),this._position.x=t.clientX-this._hotSpot.x,this._position.y=t.clientY-this._hotSpot.y,this._updatePosition()}_handleMouseUp(t){let e=document.elementFromPoint(t.clientX,t.clientY);this._updateVisibility(e),this._captureIsActive()&&window.setTimeout(()=>{this._target&&(e=document.elementFromPoint(t.clientX,t.clientY),this._updateVisibility(e))},0)}_showCursor(){this._canvas.style.visibility==="hidden"&&(this._canvas.style.visibility="")}_hideCursor(){this._canvas.style.visibility!=="hidden"&&(this._canvas.style.visibility="hidden")}_shouldShowCursor(t){return t?t===this._target?!0:!(!this._target.contains(t)||window.getComputedStyle(t).cursor!=="none"):!1}_updateVisibility(t){this._captureIsActive()&&(t=document.captureElement),this._shouldShowCursor(t)?this._showCursor():this._hideCursor()}_updatePosition(){this._canvas.style.left=this._position.x+"px",this._canvas.style.top=this._position.y+"px"}_captureIsActive(){return document.captureElement&&document.documentElement.contains(document.captureElement)}}const _i=40*1024*1024,Ct={CONNECTING:"connecting",OPEN:"open",CLOSING:"closing",CLOSED:"closed"},Kt={CONNECTING:[WebSocket.CONNECTING,Ct.CONNECTING],OPEN:[WebSocket.OPEN,Ct.OPEN],CLOSING:[WebSocket.CLOSING,Ct.CLOSING],CLOSED:[WebSocket.CLOSED,Ct.CLOSED]},Ts=["send","close","binaryType","onerror","onmessage","onopen","protocol","readyState"];class Qa{constructor(){this._websocket=null,this._rQi=0,this._rQlen=0,this._rQbufferSize=1024*1024*4,this._rQ=null,this._sQbufferSize=1024*10,this._sQlen=0,this._sQ=null,this._eventHandlers={message:()=>{},open:()=>{},close:()=>{},error:()=>{}}}get readyState(){let t;return this._websocket===null?"unused":(t=this._websocket.readyState,Kt.CONNECTING.includes(t)?"connecting":Kt.OPEN.includes(t)?"open":Kt.CLOSING.includes(t)?"closing":Kt.CLOSED.includes(t)?"closed":"unknown")}rQpeek8(){return this._rQ[this._rQi]}rQskipBytes(t){this._rQi+=t}rQshift8(){return this._rQshift(1)}rQshift16(){return this._rQshift(2)}rQshift32(){return this._rQshift(4)}_rQshift(t){let e=0;for(let s=t-1;s>=0;s--)e+=this._rQ[this._rQi++]<<s*8;return e>>>0}rQlen(){return this._rQlen-this._rQi}rQshiftStr(t){let e="";for(let s=0;s<t;s+=4096){let n=this.rQshiftBytes(Math.min(4096,t-s),!1);e+=String.fromCharCode.apply(null,n)}return e}rQshiftBytes(t,e=!0){return this._rQi+=t,e?this._rQ.slice(this._rQi-t,this._rQi):this._rQ.subarray(this._rQi-t,this._rQi)}rQshiftTo(t,e){t.set(new Uint8Array(this._rQ.buffer,this._rQi,e)),this._rQi+=e}rQpeekBytes(t,e=!0){return e?this._rQ.slice(this._rQi,this._rQi+t):this._rQ.subarray(this._rQi,this._rQi+t)}rQwait(t,e,s){if(this._rQlen-this._rQi<e){if(s){if(this._rQi<s)throw new Error("rQwait cannot backup "+s+" bytes");this._rQi-=s}return!0}return!1}sQpush8(t){this._sQensureSpace(1),this._sQ[this._sQlen++]=t}sQpush16(t){this._sQensureSpace(2),this._sQ[this._sQlen++]=t>>8&255,this._sQ[this._sQlen++]=t>>0&255}sQpush32(t){this._sQensureSpace(4),this._sQ[this._sQlen++]=t>>24&255,this._sQ[this._sQlen++]=t>>16&255,this._sQ[this._sQlen++]=t>>8&255,this._sQ[this._sQlen++]=t>>0&255}sQpushString(t){let e=t.split("").map(s=>s.charCodeAt(0));this.sQpushBytes(new Uint8Array(e))}sQpushBytes(t){for(let e=0;e<t.length;){this._sQensureSpace(1);let s=this._sQbufferSize-this._sQlen;s>t.length-e&&(s=t.length-e),this._sQ.set(t.subarray(e,e+s),this._sQlen),this._sQlen+=s,e+=s}}flush(){this._sQlen>0&&this.readyState==="open"&&(this._websocket.send(new Uint8Array(this._sQ.buffer,0,this._sQlen)),this._sQlen=0)}_sQensureSpace(t){this._sQbufferSize-this._sQlen<t&&this.flush()}off(t){this._eventHandlers[t]=()=>{}}on(t,e){this._eventHandlers[t]=e}_allocateBuffers(){this._rQ=new Uint8Array(this._rQbufferSize),this._sQ=new Uint8Array(this._sQbufferSize)}init(){this._allocateBuffers(),this._rQi=0,this._websocket=null}open(t,e){this.attach(new WebSocket(t,e))}attach(t){this.init();const e=[...Object.keys(t),...Object.getOwnPropertyNames(Object.getPrototypeOf(t))];for(let s=0;s<Ts.length;s++){const n=Ts[s];if(e.indexOf(n)<0)throw new Error("Raw channel missing property: "+n)}this._websocket=t,this._websocket.binaryType="arraybuffer",this._websocket.onmessage=this._recvMessage.bind(this),this._websocket.onopen=()=>{R(">> WebSock.onopen"),this._websocket.protocol&&he("Server choose sub-protocol: "+this._websocket.protocol),this._eventHandlers.open(),R("<< WebSock.onopen")},this._websocket.onclose=s=>{R(">> WebSock.onclose"),this._eventHandlers.close(s),R("<< WebSock.onclose")},this._websocket.onerror=s=>{R(">> WebSock.onerror: "+s),this._eventHandlers.error(s),R("<< WebSock.onerror: "+s)}}close(){this._websocket&&((this.readyState==="connecting"||this.readyState==="open")&&(he("Closing WebSocket connection"),this._websocket.close()),this._websocket.onmessage=()=>{})}_expandCompactRQ(t){const e=(this._rQlen-this._rQi+t)*8,s=this._rQbufferSize<e;if(s&&(this._rQbufferSize=Math.max(this._rQbufferSize*2,e)),this._rQbufferSize>_i&&(this._rQbufferSize=_i,this._rQbufferSize-(this._rQlen-this._rQi)<t))throw new Error("Receive queue buffer exceeded "+_i+" bytes, and the new message could not fit");if(s){const n=this._rQ.buffer;this._rQ=new Uint8Array(this._rQbufferSize),this._rQ.set(new Uint8Array(n,this._rQi,this._rQlen-this._rQi))}else this._rQ.copyWithin(0,this._rQi,this._rQlen);this._rQlen=this._rQlen-this._rQi,this._rQi=0}_recvMessage(t){this._rQlen==this._rQi&&(this._rQlen=0,this._rQi=0);const e=new Uint8Array(t.data);e.length>this._rQbufferSize-this._rQlen&&this._expandCompactRQ(e.length),this._rQ.set(e,this._rQlen),this._rQlen+=e.length,this._rQlen-this._rQi>0?this._eventHandlers.message():R("Ignoring empty message")}}const La={Again:57349,AltLeft:56,AltRight:57400,ArrowDown:57424,ArrowLeft:57419,ArrowRight:57421,ArrowUp:57416,AudioVolumeDown:57390,AudioVolumeMute:57376,AudioVolumeUp:57392,Backquote:41,Backslash:43,Backspace:14,BracketLeft:26,BracketRight:27,BrowserBack:57450,BrowserFavorites:57446,BrowserForward:57449,BrowserHome:57394,BrowserRefresh:57447,BrowserSearch:57445,BrowserStop:57448,CapsLock:58,Comma:51,ContextMenu:57437,ControlLeft:29,ControlRight:57373,Convert:121,Copy:57464,Cut:57404,Delete:57427,Digit0:11,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Eject:57469,End:57423,Enter:28,Equal:13,Escape:1,F1:59,F10:68,F11:87,F12:88,F13:93,F14:94,F15:95,F16:85,F17:57347,F18:57463,F19:57348,F2:60,F20:90,F21:116,F22:57465,F23:109,F24:111,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,Find:57409,Help:57461,Hiragana:119,Home:57415,Insert:57426,IntlBackslash:86,IntlRo:115,IntlYen:125,KanaMode:112,Katakana:120,KeyA:30,KeyB:48,KeyC:46,KeyD:32,KeyE:18,KeyF:33,KeyG:34,KeyH:35,KeyI:23,KeyJ:36,KeyK:37,KeyL:38,KeyM:50,KeyN:49,KeyO:24,KeyP:25,KeyQ:16,KeyR:19,KeyS:31,KeyT:20,KeyU:22,KeyV:47,KeyW:17,KeyX:45,KeyY:21,KeyZ:44,Lang1:114,Lang2:113,Lang3:120,Lang4:119,Lang5:118,LaunchApp1:57451,LaunchApp2:57377,LaunchMail:57452,MediaPlayPause:57378,MediaSelect:57453,MediaStop:57380,MediaTrackNext:57369,MediaTrackPrevious:57360,MetaLeft:57435,MetaRight:57436,Minus:12,NonConvert:123,NumLock:69,Numpad0:82,Numpad1:79,Numpad2:80,Numpad3:81,Numpad4:75,Numpad5:76,Numpad6:77,Numpad7:71,Numpad8:72,Numpad9:73,NumpadAdd:78,NumpadComma:126,NumpadDecimal:83,NumpadDivide:57397,NumpadEnter:57372,NumpadEqual:89,NumpadMultiply:55,NumpadParenLeft:57462,NumpadParenRight:57467,NumpadSubtract:74,Open:100,PageDown:57425,PageUp:57417,Paste:101,Pause:57414,Period:52,Power:57438,PrintScreen:84,Props:57350,Quote:40,ScrollLock:70,Semicolon:39,ShiftLeft:42,ShiftRight:54,Slash:53,Sleep:57439,Space:57,Suspend:57381,Tab:15,Undo:57351,WakeUp:57443},B={encodingRaw:0,encodingCopyRect:1,encodingRRE:2,encodingHextile:5,encodingZlib:6,encodingTight:7,encodingZRLE:16,encodingTightPNG:-260,encodingJPEG:21,encodingH264:50,pseudoEncodingQualityLevel0:-32,pseudoEncodingDesktopSize:-223,pseudoEncodingLastRect:-224,pseudoEncodingCursor:-239,pseudoEncodingQEMUExtendedKeyEvent:-258,pseudoEncodingQEMULedEvent:-261,pseudoEncodingDesktopName:-307,pseudoEncodingExtendedDesktopSize:-308,pseudoEncodingXvp:-309,pseudoEncodingFence:-312,pseudoEncodingContinuousUpdates:-313,pseudoEncodingExtendedMouseButtons:-316,pseudoEncodingCompressLevel0:-256,pseudoEncodingVMwareCursor:1464686180,pseudoEncodingExtendedClipboard:3231835598};class Ki{constructor(){this._key=null}get algorithm(){return{name:"AES-ECB"}}static async importKey(t,e,s,n){const r=new Ki;return await r._importKey(t,s,n),r}async _importKey(t,e,s){this._key=await window.crypto.subtle.importKey("raw",t,{name:"AES-CBC"},e,s)}async encrypt(t,e){const s=new Uint8Array(e);if(s.length%16!==0||this._key===null)return null;const n=s.length/16;for(let r=0;r<n;r++){const a=new Uint8Array(await window.crypto.subtle.encrypt({name:"AES-CBC",iv:new Uint8Array(16)},this._key,s.slice(r*16,r*16+16))).slice(0,16);s.set(a,r*16)}return s}}class Ai{constructor(){this._rawKey=null,this._ctrKey=null,this._cbcKey=null,this._zeroBlock=new Uint8Array(16),this._prefixBlock0=this._zeroBlock,this._prefixBlock1=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]),this._prefixBlock2=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2])}get algorithm(){return{name:"AES-EAX"}}async _encryptBlock(t){const e=await window.crypto.subtle.encrypt({name:"AES-CBC",iv:this._zeroBlock},this._cbcKey,t);return new Uint8Array(e).slice(0,16)}async _initCMAC(){const t=await this._encryptBlock(this._zeroBlock),e=new Uint8Array(16),s=t[0]>>>6;for(let r=0;r<15;r++)e[r]=t[r+1]>>6|t[r]<<2,t[r]=t[r+1]>>7|t[r]<<1;const n=[0,135,14,137];e[14]^=s>>>1,e[15]=t[15]<<2^n[s],t[15]=t[15]<<1^n[s>>1],this._k1=t,this._k2=e}async _encryptCTR(t,e){const s=await window.crypto.subtle.encrypt({name:"AES-CTR",counter:e,length:128},this._ctrKey,t);return new Uint8Array(s)}async _decryptCTR(t,e){const s=await window.crypto.subtle.decrypt({name:"AES-CTR",counter:e,length:128},this._ctrKey,t);return new Uint8Array(s)}async _computeCMAC(t,e){if(e.length!==16)return null;const s=Math.floor(t.length/16),n=Math.ceil(t.length/16),r=t.length-s*16,a=new Uint8Array((n+1)*16);if(a.set(e),a.set(t,16),r===0)for(let o=0;o<16;o++)a[s*16+o]^=this._k1[o];else{a[(s+1)*16+r]=128;for(let o=0;o<16;o++)a[(s+1)*16+o]^=this._k2[o]}let h=await window.crypto.subtle.encrypt({name:"AES-CBC",iv:this._zeroBlock},this._cbcKey,a);return h=new Uint8Array(h),h.slice(h.length-32,h.length-16)}static async importKey(t,e,s,n){const r=new Ai;return await r._importKey(t),r}async _importKey(t){this._rawKey=t,this._ctrKey=await window.crypto.subtle.importKey("raw",t,{name:"AES-CTR"},!1,["encrypt","decrypt"]),this._cbcKey=await window.crypto.subtle.importKey("raw",t,{name:"AES-CBC"},!1,["encrypt"]),await this._initCMAC()}async encrypt(t,e){const s=t.additionalData,n=t.iv,r=await this._computeCMAC(n,this._prefixBlock0),a=await this._encryptCTR(e,r),h=await this._computeCMAC(s,this._prefixBlock1),c=await this._computeCMAC(a,this._prefixBlock2);for(let l=0;l<16;l++)c[l]^=r[l]^h[l];const o=new Uint8Array(16+a.length);return o.set(a),o.set(c,a.length),o}async decrypt(t,e){const s=e.slice(0,e.length-16),n=t.additionalData,r=t.iv,a=e.slice(e.length-16),h=await this._computeCMAC(r,this._prefixBlock0),c=await this._computeCMAC(n,this._prefixBlock1),o=await this._computeCMAC(s,this._prefixBlock2);for(let d=0;d<16;d++)o[d]^=h[d]^c[d];if(o.length!==a.length)return null;for(let d=0;d<a.length;d++)if(o[d]!==a[d])return null;return await this._decryptCTR(s,h)}}const Qs=[13,16,10,23,0,4,2,27,14,5,20,9,22,18,11,3,25,7,15,6,26,19,12,1,40,51,30,36,46,54,29,39,50,44,32,47,43,48,38,55,33,52,45,41,49,35,28,31],Ra=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],u=0;let p,g,y,b,w,v;p=65536;g=1<<24;y=p|g;b=4;w=1024;v=b|w;const Ls=[y|w,u|u,p|u,y|v,y|b,p|v,u|b,p|u,u|w,y|w,y|v,u|w,g|v,y|b,g|u,u|b,u|v,g|w,g|w,p|w,p|w,y|u,y|u,g|v,p|b,g|b,g|b,p|b,u|u,u|v,p|v,g|u,p|u,y|v,u|b,y|u,y|w,g|u,g|u,u|w,y|b,p|u,p|w,g|b,u|w,u|b,g|v,p|v,y|v,p|b,y|u,g|v,g|b,u|v,p|v,y|w,u|v,g|w,g|w,u|u,p|b,p|w,u|u,y|b];p=1<<20;g=1<<31;y=p|g;b=32;w=32768;v=b|w;const Rs=[y|v,g|w,u|w,p|v,p|u,u|b,y|b,g|v,g|b,y|v,y|w,g|u,g|w,p|u,u|b,y|b,p|w,p|b,g|v,u|u,g|u,u|w,p|v,y|u,p|b,g|b,u|u,p|w,u|v,y|w,y|u,u|v,u|u,p|v,y|b,p|u,g|v,y|u,y|w,u|w,y|u,g|w,u|b,y|v,p|v,u|b,u|w,g|u,u|v,y|w,p|u,g|b,p|b,g|v,g|b,p|b,p|w,u|u,g|w,u|v,g|u,y|b,y|v,p|w];p=1<<17;g=1<<27;y=p|g;b=8;w=512;v=b|w;const Bs=[u|v,y|w,u|u,y|b,g|w,u|u,p|v,g|w,p|b,g|b,g|b,p|u,y|v,p|b,y|u,u|v,g|u,u|b,y|w,u|w,p|w,y|u,y|b,p|v,g|v,p|w,p|u,g|v,u|b,y|v,u|w,g|u,y|w,g|u,p|b,u|v,p|u,y|w,g|w,u|u,u|w,p|b,y|v,g|w,g|b,u|w,u|u,y|b,g|v,p|u,g|u,y|v,u|b,p|v,p|w,g|b,y|u,g|v,u|v,y|u,p|v,u|b,y|b,p|w];p=8192;g=1<<23;y=p|g;b=1;w=128;v=b|w;const Ds=[y|b,p|v,p|v,u|w,y|w,g|v,g|b,p|b,u|u,y|u,y|u,y|v,u|v,u|u,g|w,g|b,u|b,p|u,g|u,y|b,u|w,g|u,p|b,p|w,g|v,u|b,p|w,g|w,p|u,y|w,y|v,u|v,g|w,g|b,y|u,y|v,u|v,u|u,u|u,y|u,p|w,g|w,g|v,u|b,y|b,p|v,p|v,u|w,y|v,u|v,u|b,p|u,g|b,p|b,y|w,g|v,p|b,p|w,g|u,y|b,u|w,g|u,p|u,y|w];p=1<<25;g=1<<30;y=p|g;b=256;w=1<<19;v=b|w;const Is=[u|b,p|v,p|w,y|b,u|w,u|b,g|u,p|w,g|v,u|w,p|b,g|v,y|b,y|w,u|v,g|u,p|u,g|w,g|w,u|u,g|b,y|v,y|v,p|b,y|w,g|b,u|u,y|u,p|v,p|u,y|u,u|v,u|w,y|b,u|b,p|u,g|u,p|w,y|b,g|v,p|b,g|u,y|w,p|v,g|v,u|b,p|u,y|w,y|v,u|v,y|u,y|v,p|w,u|u,g|w,y|u,u|v,p|b,g|b,u|w,u|u,g|w,p|v,g|b];p=1<<22;g=1<<29;y=p|g;b=16;w=16384;v=b|w;const Ps=[g|b,y|u,u|w,y|v,y|u,u|b,y|v,p|u,g|w,p|v,p|u,g|b,p|b,g|w,g|u,u|v,u|u,p|b,g|v,u|w,p|w,g|v,u|b,y|b,y|b,u|u,p|v,y|w,u|v,p|w,y|w,g|u,g|w,u|b,y|b,p|w,y|v,p|u,u|v,g|b,p|u,g|w,g|u,u|v,g|b,y|v,p|w,y|u,p|v,y|w,u|u,y|b,u|b,u|w,y|u,p|v,u|w,p|b,g|v,u|u,y|w,g|u,p|b,g|v];p=1<<21;g=1<<26;y=p|g;b=2;w=2048;v=b|w;const Us=[p|u,y|b,g|v,u|u,u|w,g|v,p|v,y|w,y|v,p|u,u|u,g|b,u|b,g|u,y|b,u|v,g|w,p|v,p|b,g|w,g|b,y|u,y|w,p|b,y|u,u|w,u|v,y|v,p|w,u|b,g|u,p|w,g|u,p|w,p|u,g|v,g|v,y|b,y|b,u|b,p|b,g|u,g|w,p|u,y|w,u|v,p|v,y|w,u|v,g|b,y|v,y|u,p|w,u|u,u|b,y|v,u|u,p|v,y|u,u|w,g|b,g|w,u|w,p|b];p=1<<18;g=1<<28;y=p|g;b=64;w=4096;v=b|w;const Ns=[g|v,u|w,p|u,y|v,g|u,g|v,u|b,g|u,p|b,y|u,y|v,p|w,y|w,p|v,u|w,u|b,y|u,g|b,g|w,u|v,p|w,p|b,y|b,y|w,u|v,u|u,u|u,y|b,g|b,g|w,p|v,p|u,p|v,p|u,y|w,u|w,u|b,y|b,u|w,p|v,g|w,u|b,g|b,y|u,y|b,g|u,p|u,g|v,u|u,y|v,p|b,g|b,y|u,g|w,g|v,u|u,y|v,p|w,p|w,u|v,u|v,p|b,g|u,y|w];class Rn{constructor(t){this.keys=[];const e=[],s=[],n=[];for(let r=0,a=56;r<56;++r,a-=8){a+=a<-5?65:a<-3?31:a<-1?63:a===27?35:0;const h=a&7;e[r]=(t[a>>>3]&1<<h)!==0?1:0}for(let r=0;r<16;++r){const a=r<<1,h=a+1;n[a]=n[h]=0;for(let c=28;c<59;c+=28)for(let o=c-28;o<c;++o){const l=o+Ra[r];s[o]=l<c?e[l]:e[l-28]}for(let c=0;c<24;++c)s[Qs[c]]!==0&&(n[a]|=1<<23-c),s[Qs[c+24]]!==0&&(n[h]|=1<<23-c)}for(let r=0,a=0,h=0;r<16;++r){const c=n[a++],o=n[a++];this.keys[h]=(c&16515072)<<6,this.keys[h]|=(c&4032)<<10,this.keys[h]|=(o&16515072)>>>10,this.keys[h]|=(o&4032)>>>6,++h,this.keys[h]=(c&258048)<<12,this.keys[h]|=(c&63)<<16,this.keys[h]|=(o&258048)>>>4,this.keys[h]|=o&63,++h}}enc8(t){const e=t.slice();let s=0,n,r,a;n=e[s++]<<24|e[s++]<<16|e[s++]<<8|e[s++],r=e[s++]<<24|e[s++]<<16|e[s++]<<8|e[s++],a=(n>>>4^r)&252645135,r^=a,n^=a<<4,a=(n>>>16^r)&65535,r^=a,n^=a<<16,a=(r>>>2^n)&858993459,n^=a,r^=a<<2,a=(r>>>8^n)&16711935,n^=a,r^=a<<8,r=r<<1|r>>>31&1,a=(n^r)&2863311530,n^=a,r^=a,n=n<<1|n>>>31&1;for(let h=0,c=0;h<8;++h){a=r<<28|r>>>4,a^=this.keys[c++];let o=Us[a&63];o|=Is[a>>>8&63],o|=Bs[a>>>16&63],o|=Ls[a>>>24&63],a=r^this.keys[c++],o|=Ns[a&63],o|=Ps[a>>>8&63],o|=Ds[a>>>16&63],o|=Rs[a>>>24&63],n^=o,a=n<<28|n>>>4,a^=this.keys[c++],o=Us[a&63],o|=Is[a>>>8&63],o|=Bs[a>>>16&63],o|=Ls[a>>>24&63],a=n^this.keys[c++],o|=Ns[a&63],o|=Ps[a>>>8&63],o|=Ds[a>>>16&63],o|=Rs[a>>>24&63],r^=o}for(r=r<<31|r>>>1,a=(n^r)&2863311530,n^=a,r^=a,n=n<<31|n>>>1,a=(n>>>8^r)&16711935,r^=a,n^=a<<8,a=(n>>>2^r)&858993459,r^=a,n^=a<<2,a=(r>>>16^n)&65535,n^=a,r^=a<<16,a=(r>>>4^n)&252645135,n^=a,r^=a<<4,a=[r,n],s=0;s<8;s++)e[s]=(a[s>>>2]>>>8*(3-s%4))%256,e[s]<0&&(e[s]+=256);return e}}class Xi{constructor(){this._cipher=null}get algorithm(){return{name:"DES-ECB"}}static importKey(t,e,s,n){const r=new Xi;return r._importKey(t),r}_importKey(t,e,s){this._cipher=new Rn(t)}encrypt(t,e){const s=new Uint8Array(e);if(s.length%8!==0||this._cipher===null)return null;const n=s.length/8;for(let r=0;r<n;r++)s.set(this._cipher.enc8(s.slice(r*8,r*8+8)),r*8);return s}}class Fi{constructor(){this._cipher=null}get algorithm(){return{name:"DES-CBC"}}static importKey(t,e,s,n){const r=new Fi;return r._importKey(t),r}_importKey(t){this._cipher=new Rn(t)}encrypt(t,e){const s=new Uint8Array(e);let n=new Uint8Array(t.iv);if(s.length%8!==0||this._cipher===null)return null;const r=s.length/8;for(let a=0;a<r;a++){for(let h=0;h<8;h++)n[h]^=e[a*8+h];n=this._cipher.enc8(n),s.set(n,a*8)}return s}}function Ut(i,t,e){let s=1n;for(i=i%e;t>0n;)(t&1n)===1n&&(s=s*i%e),t=t>>1n,i=i*i%e;return s}function Nt(i,t=0){let e=i.toString(16);t===0&&(t=Math.ceil(e.length/2)),e=e.padStart(t*2,"0");const s=e.length/2,n=new Uint8Array(s);for(let r=0;r<s;r++)n[r]=parseInt(e.slice(r*2,r*2+2),16);return n}function ge(i){let t="0x";for(let e=0;e<i.length;e++)t+=i[e].toString(16).padStart(2,"0");return BigInt(t)}class Ht{constructor(){this._keyLength=0,this._keyBytes=0,this._n=null,this._e=null,this._d=null,this._nBigInt=null,this._eBigInt=null,this._dBigInt=null,this._extractable=!1}get algorithm(){return{name:"RSA-PKCS1-v1_5"}}_base64urlDecode(t){return t=t.replace(/-/g,"+").replace(/_/g,"/"),t=t.padEnd(Math.ceil(t.length/4)*4,"="),vi.decode(t)}_padArray(t,e){const s=new Uint8Array(e);return s.set(t,e-t.length),s}static async generateKey(t,e,s){const n=new Ht;return await n._generateKey(t,e),{privateKey:n}}async _generateKey(t,e){this._keyLength=t.modulusLength,this._keyBytes=Math.ceil(this._keyLength/8);const s=await window.crypto.subtle.generateKey({name:"RSA-OAEP",modulusLength:t.modulusLength,publicExponent:t.publicExponent,hash:{name:"SHA-256"}},!0,["encrypt","decrypt"]),n=await window.crypto.subtle.exportKey("jwk",s.privateKey);this._n=this._padArray(this._base64urlDecode(n.n),this._keyBytes),this._nBigInt=ge(this._n),this._e=this._padArray(this._base64urlDecode(n.e),this._keyBytes),this._eBigInt=ge(this._e),this._d=this._padArray(this._base64urlDecode(n.d),this._keyBytes),this._dBigInt=ge(this._d),this._extractable=e}static async importKey(t,e,s,n){if(n.length!==1||n[0]!=="encrypt")throw new Error("only support importing RSA public key");const r=new Ht;return await r._importKey(t,s),r}async _importKey(t,e){const s=t.n,n=t.e;if(s.length!==n.length)throw new Error("the sizes of modulus and public exponent do not match");this._keyBytes=s.length,this._keyLength=this._keyBytes*8,this._n=new Uint8Array(this._keyBytes),this._e=new Uint8Array(this._keyBytes),this._n.set(s),this._e.set(n),this._nBigInt=ge(this._n),this._eBigInt=ge(this._e),this._extractable=e}async encrypt(t,e){if(e.length>this._keyBytes-11)return null;const s=new Uint8Array(this._keyBytes-e.length-3);window.crypto.getRandomValues(s);for(let h=0;h<s.length;h++)s[h]=Math.floor(s[h]*254/255+1);const n=new Uint8Array(this._keyBytes);n[1]=2,n.set(s,2),n.set(e,s.length+3);const r=ge(n),a=Ut(r,this._eBigInt,this._nBigInt);return Nt(a,this._keyBytes)}async decrypt(t,e){if(e.length!==this._keyBytes)return null;const s=ge(e),n=Ut(s,this._dBigInt,this._nBigInt),r=Nt(n,this._keyBytes);if(r[0]!==0||r[1]!==2)return null;let a=2;for(;a<r.length&&r[a]!==0;a++);return a===r.length?null:r.slice(a+1,r.length)}async exportKey(){if(!this._extractable)throw new Error("key is not extractable");return{n:this._n,e:this._e,d:this._d}}}class Ba{constructor(t){this._key=t}get algorithm(){return{name:"DH"}}exportKey(){return this._key}}class Mi{constructor(){this._g=null,this._p=null,this._gBigInt=null,this._pBigInt=null,this._privateKey=null}get algorithm(){return{name:"DH"}}static generateKey(t,e){const s=new Mi;return s._generateKey(t),{privateKey:s,publicKey:new Ba(s._publicKey)}}_generateKey(t){const e=t.g,s=t.p;this._keyBytes=s.length,this._gBigInt=ge(e),this._pBigInt=ge(s),this._privateKey=window.crypto.getRandomValues(new Uint8Array(this._keyBytes)),this._privateKeyBigInt=ge(this._privateKey),this._publicKey=Nt(Ut(this._gBigInt,this._privateKeyBigInt,this._pBigInt),this._keyBytes)}deriveBits(t,e){const s=Math.ceil(e/8),n=new Uint8Array(t.public),r=s>this._keyBytes?s:this._keyBytes,a=Ut(ge(n),this._privateKeyBigInt,this._pBigInt);return Nt(a,r).slice(0,r)}}async function Da(i){let t="";for(let e=0;e<i.length;e++)t+=String.fromCharCode(i[e]);return Ia(Ua(Na(Pa(t),8*t.length)))}function Ia(i){let t=new Uint8Array(i.length);for(let e=0;e<i.length;e++)t[e]=i.charCodeAt(e);return t}function Pa(i){let t=Array(i.length>>2);for(let e=0;e<t.length;e++)t[e]=0;for(let e=0;e<8*i.length;e+=8)t[e>>5]|=(255&i.charCodeAt(e/8))<<e%32;return t}function Ua(i){let t="";for(let e=0;e<32*i.length;e+=8)t+=String.fromCharCode(i[e>>5]>>>e%32&255);return t}function Na(i,t){i[t>>5]|=128<<t%32,i[14+(t+64>>>9<<4)]=t;let e=1732584193,s=-271733879,n=-1732584194,r=271733878;for(let a=0;a<i.length;a+=16){let h=e,c=s,o=n,l=r;s=oe(s=oe(s=oe(s=oe(s=ae(s=ae(s=ae(s=ae(s=re(s=re(s=re(s=re(s=ne(s=ne(s=ne(s=ne(s,n=ne(n,r=ne(r,e=ne(e,s,n,r,i[a+0],7,-680876936),s,n,i[a+1],12,-389564586),e,s,i[a+2],17,606105819),r,e,i[a+3],22,-1044525330),n=ne(n,r=ne(r,e=ne(e,s,n,r,i[a+4],7,-176418897),s,n,i[a+5],12,1200080426),e,s,i[a+6],17,-1473231341),r,e,i[a+7],22,-45705983),n=ne(n,r=ne(r,e=ne(e,s,n,r,i[a+8],7,1770035416),s,n,i[a+9],12,-1958414417),e,s,i[a+10],17,-42063),r,e,i[a+11],22,-1990404162),n=ne(n,r=ne(r,e=ne(e,s,n,r,i[a+12],7,1804603682),s,n,i[a+13],12,-40341101),e,s,i[a+14],17,-1502002290),r,e,i[a+15],22,1236535329),n=re(n,r=re(r,e=re(e,s,n,r,i[a+1],5,-165796510),s,n,i[a+6],9,-1069501632),e,s,i[a+11],14,643717713),r,e,i[a+0],20,-373897302),n=re(n,r=re(r,e=re(e,s,n,r,i[a+5],5,-701558691),s,n,i[a+10],9,38016083),e,s,i[a+15],14,-660478335),r,e,i[a+4],20,-405537848),n=re(n,r=re(r,e=re(e,s,n,r,i[a+9],5,568446438),s,n,i[a+14],9,-1019803690),e,s,i[a+3],14,-187363961),r,e,i[a+8],20,1163531501),n=re(n,r=re(r,e=re(e,s,n,r,i[a+13],5,-1444681467),s,n,i[a+2],9,-51403784),e,s,i[a+7],14,1735328473),r,e,i[a+12],20,-1926607734),n=ae(n,r=ae(r,e=ae(e,s,n,r,i[a+5],4,-378558),s,n,i[a+8],11,-2022574463),e,s,i[a+11],16,1839030562),r,e,i[a+14],23,-35309556),n=ae(n,r=ae(r,e=ae(e,s,n,r,i[a+1],4,-1530992060),s,n,i[a+4],11,1272893353),e,s,i[a+7],16,-155497632),r,e,i[a+10],23,-1094730640),n=ae(n,r=ae(r,e=ae(e,s,n,r,i[a+13],4,681279174),s,n,i[a+0],11,-358537222),e,s,i[a+3],16,-722521979),r,e,i[a+6],23,76029189),n=ae(n,r=ae(r,e=ae(e,s,n,r,i[a+9],4,-640364487),s,n,i[a+12],11,-421815835),e,s,i[a+15],16,530742520),r,e,i[a+2],23,-995338651),n=oe(n,r=oe(r,e=oe(e,s,n,r,i[a+0],6,-198630844),s,n,i[a+7],10,1126891415),e,s,i[a+14],15,-1416354905),r,e,i[a+5],21,-57434055),n=oe(n,r=oe(r,e=oe(e,s,n,r,i[a+12],6,1700485571),s,n,i[a+3],10,-1894986606),e,s,i[a+10],15,-1051523),r,e,i[a+1],21,-2054922799),n=oe(n,r=oe(r,e=oe(e,s,n,r,i[a+8],6,1873313359),s,n,i[a+15],10,-30611744),e,s,i[a+6],15,-1560198380),r,e,i[a+13],21,1309151649),n=oe(n,r=oe(r,e=oe(e,s,n,r,i[a+4],6,-145523070),s,n,i[a+11],10,-1120210379),e,s,i[a+2],15,718787259),r,e,i[a+9],21,-343485551),e=Me(e,h),s=Me(s,c),n=Me(n,o),r=Me(r,l)}return Array(e,s,n,r)}function Gt(i,t,e,s,n,r){return Me(Ha(Me(Me(t,i),Me(s,r)),n),e)}function ne(i,t,e,s,n,r,a){return Gt(t&e|~t&s,i,t,n,r,a)}function re(i,t,e,s,n,r,a){return Gt(t&s|e&~s,i,t,n,r,a)}function ae(i,t,e,s,n,r,a){return Gt(t^e^s,i,t,n,r,a)}function oe(i,t,e,s,n,r,a){return Gt(e^(t|~s),i,t,n,r,a)}function Me(i,t){let e=(65535&i)+(65535&t);return(i>>16)+(t>>16)+(e>>16)<<16|65535&e}function Ha(i,t){return i<<t|i>>>32-t}class za{constructor(){this._algorithms={"AES-ECB":Ki,"AES-EAX":Ai,"DES-ECB":Xi,"DES-CBC":Fi,"RSA-PKCS1-v1_5":Ht,DH:Mi,MD5:Da}}encrypt(t,e,s){if(e.algorithm.name!==t.name)throw new Error("algorithm does not match");if(typeof e.encrypt!="function")throw new Error("key does not support encryption");return e.encrypt(t,s)}decrypt(t,e,s){if(e.algorithm.name!==t.name)throw new Error("algorithm does not match");if(typeof e.decrypt!="function")throw new Error("key does not support encryption");return e.decrypt(t,s)}importKey(t,e,s,n,r){if(t!=="raw")throw new Error("key format is not supported");const a=this._algorithms[s.name];if(typeof a>"u"||typeof a.importKey!="function")throw new Error("algorithm is not supported");return a.importKey(e,s,n,r)}generateKey(t,e,s){const n=this._algorithms[t.name];if(typeof n>"u"||typeof n.generateKey!="function")throw new Error("algorithm is not supported");return n.generateKey(t,e,s)}exportKey(t,e){if(t!=="raw")throw new Error("key format is not supported");if(typeof e.exportKey!="function")throw new Error("key does not support exportKey");return e.exportKey()}digest(t,e){const s=this._algorithms[t];if(typeof s!="function")throw new Error("algorithm is not supported");return s(e)}deriveBits(t,e,s){if(e.algorithm.name!==t.name)throw new Error("algorithm does not match");if(typeof e.deriveBits!="function")throw new Error("key does not support deriveBits");return e.deriveBits(t,s)}}const J=new za;class Hs{constructor(){this._cipher=null,this._counter=new Uint8Array(16)}async setKey(t){this._cipher=await J.importKey("raw",t,{name:"AES-EAX"},!1,["encrypt, decrypt"])}async makeMessage(t){const e=new Uint8Array([(t.length&65280)>>>8,t.length&255]),s=await J.encrypt({name:"AES-EAX",iv:this._counter,additionalData:e},this._cipher,t);for(let r=0;r<16&&this._counter[r]++===255;r++);const n=new Uint8Array(t.length+2+16);return n.set(e),n.set(s,2),n}async receiveMessage(t,e){const s=new Uint8Array([(t&65280)>>>8,t&255]),n=await J.decrypt({name:"AES-EAX",iv:this._counter,additionalData:s},this._cipher,e);for(let r=0;r<16&&this._counter[r]++===255;r++);return n}}class Oa extends un{constructor(t,e){super(),this._hasStarted=!1,this._checkSock=null,this._checkCredentials=null,this._approveServerResolve=null,this._sockReject=null,this._credentialsReject=null,this._approveServerReject=null,this._sock=t,this._getCredentials=e}_waitSockAsync(t){return new Promise((e,s)=>{const n=()=>!this._sock.rQwait("RA2",t);n()?e():(this._checkSock=()=>{n()&&(e(),this._checkSock=null,this._sockReject=null)},this._sockReject=s)})}_waitApproveKeyAsync(){return new Promise((t,e)=>{this._approveServerResolve=t,this._approveServerReject=e})}_waitCredentialsAsync(t){const e=()=>t===1&&this._getCredentials().username!==void 0&&this._getCredentials().password!==void 0?!0:t===2&&this._getCredentials().password!==void 0;return new Promise((s,n)=>{e()?s():(this._checkCredentials=()=>{e()&&(s(),this._checkCredentials=null,this._credentialsReject=null)},this._credentialsReject=n)})}checkInternalEvents(){this._checkSock!==null&&this._checkSock(),this._checkCredentials!==null&&this._checkCredentials()}approveServer(){this._approveServerResolve!==null&&(this._approveServerResolve(),this._approveServerResolve=null)}disconnect(){this._sockReject!==null&&(this._sockReject(new Error("disconnect normally")),this._sockReject=null),this._credentialsReject!==null&&(this._credentialsReject(new Error("disconnect normally")),this._credentialsReject=null),this._approveServerReject!==null&&(this._approveServerReject(new Error("disconnect normally")),this._approveServerReject=null)}async negotiateRA2neAuthAsync(){this._hasStarted=!0,await this._waitSockAsync(4);const t=this._sock.rQpeekBytes(4),e=this._sock.rQshift32();if(e<1024)throw new Error("RA2: server public key is too short: "+e);if(e>8192)throw new Error("RA2: server public key is too long: "+e);const s=Math.ceil(e/8);await this._waitSockAsync(s*2);const n=this._sock.rQshiftBytes(s),r=this._sock.rQshiftBytes(s),a=await J.importKey("raw",{n,e:r},{name:"RSA-PKCS1-v1_5"},!1,["encrypt"]),h=new Uint8Array(4+s*2);h.set(t),h.set(n,4),h.set(r,4+s);let c=this._waitApproveKeyAsync();this.dispatchEvent(new CustomEvent("serververification",{detail:{type:"RSA",publickey:h}})),await c;const o=2048,l=Math.ceil(o/8),d=(await J.generateKey({name:"RSA-PKCS1-v1_5",modulusLength:o,publicExponent:new Uint8Array([1,0,1])},!0,["encrypt"])).privateKey,_=await J.exportKey("raw",d),x=_.n,k=_.e,C=new Uint8Array(4+l*2);C[0]=(o&4278190080)>>>24,C[1]=(o&16711680)>>>16,C[2]=(o&65280)>>>8,C[3]=o&255,C.set(x,4),C.set(k,4+l),this._sock.sQpushBytes(C),this._sock.flush();const F=new Uint8Array(16);window.crypto.getRandomValues(F);const X=await J.encrypt({name:"RSA-PKCS1-v1_5"},a,F),K=new Uint8Array(2+s);if(K[0]=(s&65280)>>>8,K[1]=s&255,K.set(X,2),this._sock.sQpushBytes(K),this._sock.flush(),await this._waitSockAsync(2),this._sock.rQshift16()!==l)throw new Error("RA2: wrong encrypted message length");const M=this._sock.rQshiftBytes(l),E=await J.decrypt({name:"RSA-PKCS1-v1_5"},d,M);if(E===null||E.length!==16)throw new Error("RA2: corrupted server encrypted random");let T=new Uint8Array(32),N=new Uint8Array(32);T.set(E),T.set(F,16),N.set(F),N.set(E,16),T=await window.crypto.subtle.digest("SHA-1",T),T=new Uint8Array(T).slice(0,16),N=await window.crypto.subtle.digest("SHA-1",N),N=new Uint8Array(N).slice(0,16);const A=new Hs;await A.setKey(T);const H=new Hs;await H.setKey(N);let U=new Uint8Array(8+s*2+l*2),Q=new Uint8Array(8+s*2+l*2);if(U.set(h),U.set(C,4+s*2),Q.set(C),Q.set(h,4+l*2),U=await window.crypto.subtle.digest("SHA-1",U),Q=await window.crypto.subtle.digest("SHA-1",Q),U=new Uint8Array(U),Q=new Uint8Array(Q),this._sock.sQpushBytes(await A.makeMessage(Q)),this._sock.flush(),await this._waitSockAsync(38),this._sock.rQshift16()!==20)throw new Error("RA2: wrong server hash");const j=await H.receiveMessage(20,this._sock.rQshiftBytes(36));if(j===null)throw new Error("RA2: failed to authenticate the message");for(let $=0;$<20;$++)if(j[$]!==U[$])throw new Error("RA2: wrong server hash");if(await this._waitSockAsync(19),this._sock.rQshift16()!==1)throw new Error("RA2: wrong subtype");let te=await H.receiveMessage(1,this._sock.rQshiftBytes(17));if(te===null)throw new Error("RA2: failed to authenticate the message");te=te[0];let _e=this._waitCredentialsAsync(te);if(te===1)(this._getCredentials().username===void 0||this._getCredentials().password===void 0)&&this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["username","password"]}}));else if(te===2)this._getCredentials().password===void 0&&this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["password"]}}));else throw new Error("RA2: wrong subtype");await _e;let W;te===1?W=Se(this._getCredentials().username).slice(0,255):W="";const ve=Se(this._getCredentials().password).slice(0,255),se=new Uint8Array(W.length+ve.length+2);se[0]=W.length,se[W.length+1]=ve.length;for(let $=0;$<W.length;$++)se[$+1]=W.charCodeAt($);for(let $=0;$<ve.length;$++)se[W.length+2+$]=ve.charCodeAt($);this._sock.sQpushBytes(await A.makeMessage(se)),this._sock.flush()}get hasStarted(){return this._hasStarted}set hasStarted(t){this._hasStarted=t}}class Va{constructor(){this._lines=0}decodeRect(t,e,s,n,r,a,h){if(s===0||n===0)return!0;this._lines===0&&(this._lines=n);const c=h==8?1:4,o=s*c;for(;this._lines>0;){if(r.rQwait("RAW",o))return!1;const l=e+(n-this._lines);let d=r.rQshiftBytes(o,!1);if(h==8){const _=new Uint8Array(s*4);for(let x=0;x<s;x++)_[x*4+0]=(d[x]>>0&3)*255/3,_[x*4+1]=(d[x]>>2&3)*255/3,_[x*4+2]=(d[x]>>4&3)*255/3,_[x*4+3]=255;d=_}for(let _=0;_<s;_++)d[_*4+3]=255;a.blitImage(t,l,s,1,d,0),this._lines--}return!0}}class Ga{decodeRect(t,e,s,n,r,a,h){if(r.rQwait("COPYRECT",4))return!1;let c=r.rQshift16(),o=r.rQshift16();return s===0||n===0||a.copyImage(c,o,t,e,s,n),!0}}class Wa{constructor(){this._subrects=0}decodeRect(t,e,s,n,r,a,h){if(this._subrects===0){if(r.rQwait("RRE",8))return!1;this._subrects=r.rQshift32();let c=r.rQshiftBytes(4);a.fillRect(t,e,s,n,c)}for(;this._subrects>0;){if(r.rQwait("RRE",12))return!1;let c=r.rQshiftBytes(4),o=r.rQshift16(),l=r.rQshift16(),d=r.rQshift16(),_=r.rQshift16();a.fillRect(t+o,e+l,d,_,c),this._subrects--}return!0}}class ja{constructor(){this._tiles=0,this._lastsubencoding=0,this._tileBuffer=new Uint8Array(256*4)}decodeRect(t,e,s,n,r,a,h){for(this._tiles===0&&(this._tilesX=Math.ceil(s/16),this._tilesY=Math.ceil(n/16),this._totalTiles=this._tilesX*this._tilesY,this._tiles=this._totalTiles);this._tiles>0;){let c=1;if(r.rQwait("HEXTILE",c))return!1;let o=r.rQpeek8();if(o>30)throw new Error("Illegal hextile subencoding (subencoding: "+o+")");const l=this._totalTiles-this._tiles,d=l%this._tilesX,_=Math.floor(l/this._tilesX),x=t+d*16,k=e+_*16,C=Math.min(16,t+s-x),F=Math.min(16,e+n-k);if(o&1)c+=C*F*4;else if(o&2&&(c+=4),o&4&&(c+=4),o&8){if(c++,r.rQwait("HEXTILE",c))return!1;let X=r.rQpeekBytes(c).at(-1);o&16?c+=X*6:c+=X*2}if(r.rQwait("HEXTILE",c))return!1;if(r.rQshift8(),o===0)this._lastsubencoding&1?R(" Ignoring blank after RAW"):a.fillRect(x,k,C,F,this._background);else if(o&1){let X=C*F,K=r.rQshiftBytes(X*4,!1);for(let M=0;M<X;M++)K[M*4+3]=255;a.blitImage(x,k,C,F,K,0)}else{if(o&2&&(this._background=new Uint8Array(r.rQshiftBytes(4))),o&4&&(this._foreground=new Uint8Array(r.rQshiftBytes(4))),this._startTile(x,k,C,F,this._background),o&8){let X=r.rQshift8();for(let K=0;K<X;K++){let M;o&16?M=r.rQshiftBytes(4):M=this._foreground;const E=r.rQshift8(),T=E>>4,N=E&15,A=r.rQshift8(),H=(A>>4)+1,U=(A&15)+1;this._subTile(T,N,H,U,M)}}this._finishTile(a)}this._lastsubencoding=o,this._tiles--}return!0}_startTile(t,e,s,n,r){this._tileX=t,this._tileY=e,this._tileW=s,this._tileH=n;const a=r[0],h=r[1],c=r[2],o=this._tileBuffer;for(let l=0;l<s*n*4;l+=4)o[l]=a,o[l+1]=h,o[l+2]=c,o[l+3]=255}_subTile(t,e,s,n,r){const a=r[0],h=r[1],c=r[2],o=t+s,l=e+n,d=this._tileBuffer,_=this._tileW;for(let x=e;x<l;x++)for(let k=t;k<o;k++){const C=(k+x*_)*4;d[C]=a,d[C+1]=h,d[C+2]=c,d[C+3]=255}}_finishTile(t){t.blitImage(this._tileX,this._tileY,this._tileW,this._tileH,this._tileBuffer,0)}}class Za{constructor(){this._zlib=new zt,this._length=0}decodeRect(t,e,s,n,r,a,h){if(s===0||n===0)return!0;if(this._length===0){if(r.rQwait("ZLIB",4))return!1;this._length=r.rQshift32()}if(r.rQwait("ZLIB",this._length))return!1;let c=new Uint8Array(r.rQshiftBytes(this._length,!1));this._length=0,this._zlib.setInput(c),c=this._zlib.inflate(s*n*4),this._zlib.setInput(null);for(let o=0;o<s*n;o++)c[o*4+3]=255;return a.blitImage(t,e,s,n,c,0),!0}}class Bn{constructor(){this._ctl=null,this._filter=null,this._numColors=0,this._palette=new Uint8Array(1024),this._len=0,this._zlibs=[];for(let t=0;t<4;t++)this._zlibs[t]=new zt}decodeRect(t,e,s,n,r,a,h){if(this._ctl===null){if(r.rQwait("TIGHT compression-control",1))return!1;this._ctl=r.rQshift8();for(let o=0;o<4;o++)this._ctl>>o&1&&(this._zlibs[o].reset(),he("Reset zlib stream "+o));this._ctl=this._ctl>>4}let c;if(this._ctl===8)c=this._fillRect(t,e,s,n,r,a,h);else if(this._ctl===9)c=this._jpegRect(t,e,s,n,r,a,h);else if(this._ctl===10)c=this._pngRect(t,e,s,n,r,a,h);else if((this._ctl&8)==0)c=this._basicRect(this._ctl,t,e,s,n,r,a,h);else throw new Error("Illegal tight compression received (ctl: "+this._ctl+")");return c&&(this._ctl=null),c}_fillRect(t,e,s,n,r,a,h){if(r.rQwait("TIGHT",3))return!1;let c=r.rQshiftBytes(3);return a.fillRect(t,e,s,n,c,!1),!0}_jpegRect(t,e,s,n,r,a,h){let c=this._readData(r);return c===null?!1:(a.imageRect(t,e,s,n,"image/jpeg",c),!0)}_pngRect(t,e,s,n,r,a,h){throw new Error("PNG received in standard Tight rect")}_basicRect(t,e,s,n,r,a,h,c){if(this._filter===null)if(t&4){if(a.rQwait("TIGHT",1))return!1;this._filter=a.rQshift8()}else this._filter=0;let o=t&3,l;switch(this._filter){case 0:l=this._copyFilter(o,e,s,n,r,a,h,c);break;case 1:l=this._paletteFilter(o,e,s,n,r,a,h,c);break;case 2:l=this._gradientFilter(o,e,s,n,r,a,h,c);break;default:throw new Error("Illegal tight filter received (ctl: "+this._filter+")")}return l&&(this._filter=null),l}_copyFilter(t,e,s,n,r,a,h,c){const o=n*r*3;let l;if(o===0)return!0;if(o<12){if(a.rQwait("TIGHT",o))return!1;l=a.rQshiftBytes(o)}else{if(l=this._readData(a),l===null)return!1;this._zlibs[t].setInput(l),l=this._zlibs[t].inflate(o),this._zlibs[t].setInput(null)}let d=new Uint8Array(n*r*4);for(let _=0,x=0;_<n*r*4;_+=4,x+=3)d[_]=l[x],d[_+1]=l[x+1],d[_+2]=l[x+2],d[_+3]=255;return h.blitImage(e,s,n,r,d,0,!1),!0}_paletteFilter(t,e,s,n,r,a,h,c){if(this._numColors===0){if(a.rQwait("TIGHT palette",1))return!1;const x=a.rQpeek8()+1,k=x*3;if(a.rQwait("TIGHT palette",1+k))return!1;this._numColors=x,a.rQskipBytes(1),a.rQshiftTo(this._palette,k)}const o=this._numColors<=2?1:8,d=Math.floor((n*o+7)/8)*r;let _;if(d===0)return!0;if(d<12){if(a.rQwait("TIGHT",d))return!1;_=a.rQshiftBytes(d)}else{if(_=this._readData(a),_===null)return!1;this._zlibs[t].setInput(_),_=this._zlibs[t].inflate(d),this._zlibs[t].setInput(null)}return this._numColors==2?this._monoRect(e,s,n,r,_,this._palette,h):this._paletteRect(e,s,n,r,_,this._palette,h),this._numColors=0,!0}_monoRect(t,e,s,n,r,a,h){const c=this._getScratchBuffer(s*n*4),o=Math.floor((s+7)/8),l=Math.floor(s/8);for(let d=0;d<n;d++){let _,x,k;for(k=0;k<l;k++)for(let C=7;C>=0;C--)_=(d*s+k*8+7-C)*4,x=(r[d*o+k]>>C&1)*3,c[_]=a[x],c[_+1]=a[x+1],c[_+2]=a[x+2],c[_+3]=255;for(let C=7;C>=8-s%8;C--)_=(d*s+k*8+7-C)*4,x=(r[d*o+k]>>C&1)*3,c[_]=a[x],c[_+1]=a[x+1],c[_+2]=a[x+2],c[_+3]=255}h.blitImage(t,e,s,n,c,0,!1)}_paletteRect(t,e,s,n,r,a,h){const c=this._getScratchBuffer(s*n*4),o=s*n*4;for(let l=0,d=0;l<o;l+=4,d++){const _=r[d]*3;c[l]=a[_],c[l+1]=a[_+1],c[l+2]=a[_+2],c[l+3]=255}h.blitImage(t,e,s,n,c,0,!1)}_gradientFilter(t,e,s,n,r,a,h,c){const o=n*r*3;let l;if(o===0)return!0;if(o<12){if(a.rQwait("TIGHT",o))return!1;l=a.rQshiftBytes(o)}else{if(l=this._readData(a),l===null)return!1;this._zlibs[t].setInput(l),l=this._zlibs[t].inflate(o),this._zlibs[t].setInput(null)}let d=new Uint8Array(4*n*r),_=0,x=0,k=new Uint8Array(3);for(let K=0;K<n;K++){for(let M=0;M<3;M++){const E=k[M],T=l[x++]+E;d[_++]=T,k[M]=T}d[_++]=255}let C=0,F=new Uint8Array(3),X=new Uint8Array(3);for(let K=1;K<r;K++){k.fill(0),X.fill(0);for(let M=0;M<n;M++){for(let E=0;E<3;E++){F[E]=d[C++];let T=k[E]+F[E]-X[E];T<0?T=0:T>255&&(T=255);const N=l[x++]+T;d[_++]=N,X[E]=F[E],k[E]=N}d[_++]=255,C++}}return h.blitImage(e,s,n,r,d,0,!1),!0}_readData(t){if(this._len===0){if(t.rQwait("TIGHT",3))return null;let s;s=t.rQshift8(),this._len=s&127,s&128&&(s=t.rQshift8(),this._len|=(s&127)<<7,s&128&&(s=t.rQshift8(),this._len|=s<<14))}if(t.rQwait("TIGHT",this._len))return null;let e=t.rQshiftBytes(this._len,!1);return this._len=0,e}_getScratchBuffer(t){return(!this._scratchBuffer||this._scratchBuffer.length<t)&&(this._scratchBuffer=new Uint8Array(t)),this._scratchBuffer}}class Ya extends Bn{_pngRect(t,e,s,n,r,a,h){let c=this._readData(r);return c===null?!1:(a.imageRect(t,e,s,n,"image/png",c),!0)}_basicRect(t,e,s,n,r,a,h,c){throw new Error("BasicCompression received in TightPNG rect")}}const At=64,Xt=64;class qa{constructor(){this._length=0,this._inflator=new zt,this._pixelBuffer=new Uint8Array(At*Xt*4),this._tileBuffer=new Uint8Array(At*Xt*4)}decodeRect(t,e,s,n,r,a,h){if(this._length===0){if(r.rQwait("ZLib data length",4))return!1;this._length=r.rQshift32()}if(r.rQwait("Zlib data",this._length))return!1;const c=r.rQshiftBytes(this._length,!1);this._inflator.setInput(c);for(let o=e;o<e+n;o+=Xt){let l=Math.min(Xt,e+n-o);for(let d=t;d<t+s;d+=At){let _=Math.min(At,t+s-d);const x=_*l,k=this._inflator.inflate(1)[0];if(k===0){const C=this._readPixels(x);a.blitImage(d,o,_,l,C,0,!1)}else if(k===1){const C=this._readPixels(1);a.fillRect(d,o,_,l,[C[0],C[1],C[2]])}else if(k>=2&&k<=16){const C=this._decodePaletteTile(k,x,_,l);a.blitImage(d,o,_,l,C,0,!1)}else if(k===128){const C=this._decodeRLETile(x);a.blitImage(d,o,_,l,C,0,!1)}else if(k>=130&&k<=255){const C=this._decodeRLEPaletteTile(k-128,x);a.blitImage(d,o,_,l,C,0,!1)}else throw new Error("Unknown subencoding: "+k)}}return this._length=0,!0}_getBitsPerPixelInPalette(t){if(t<=2)return 1;if(t<=4)return 2;if(t<=16)return 4}_readPixels(t){let e=this._pixelBuffer;const s=this._inflator.inflate(3*t);for(let n=0,r=0;n<t*4;n+=4,r+=3)e[n]=s[r],e[n+1]=s[r+1],e[n+2]=s[r+2],e[n+3]=255;return e}_decodePaletteTile(t,e,s,n){const r=this._tileBuffer,a=this._readPixels(t),h=this._getBitsPerPixelInPalette(t),c=(1<<h)-1;let o=0,l=this._inflator.inflate(1)[0];for(let d=0;d<n;d++){let _=8-h;for(let x=0;x<s;x++){_<0&&(_=8-h,l=this._inflator.inflate(1)[0]);let k=l>>_&c;r[o]=a[k*4],r[o+1]=a[k*4+1],r[o+2]=a[k*4+2],r[o+3]=a[k*4+3],o+=4,_-=h}_<8-h&&d<n-1&&(l=this._inflator.inflate(1)[0])}return r}_decodeRLETile(t){const e=this._tileBuffer;let s=0;for(;s<t;){const n=this._readPixels(1),r=this._readRLELength();for(let a=0;a<r;a++)e[s*4]=n[0],e[s*4+1]=n[1],e[s*4+2]=n[2],e[s*4+3]=n[3],s++}return e}_decodeRLEPaletteTile(t,e){const s=this._tileBuffer,n=this._readPixels(t);let r=0;for(;r<e;){let a=this._inflator.inflate(1)[0],h=1;if(a>=128&&(a-=128,h=this._readRLELength()),a>t)throw new Error("Too big index in palette: "+a+", palette size: "+t);if(r+h>e)throw new Error("Too big rle length in palette mode: "+h+", allowed length is: "+(e-r));for(let c=0;c<h;c++)s[r*4]=n[a*4],s[r*4+1]=n[a*4+1],s[r*4+2]=n[a*4+2],s[r*4+3]=n[a*4+3],r++}return s}_readRLELength(){let t=0,e=0;do e=this._inflator.inflate(1)[0],t+=e;while(e===255);return t+1}}class $a{constructor(){this._cachedQuantTables=[],this._cachedHuffmanTables=[],this._segments=[]}decodeRect(t,e,s,n,r,a,h){for(;;){let x=this._readSegment(r);if(x===null)return!1;if(this._segments.push(x),x[1]===217)break}let c=[],o=[];for(let x of this._segments){let k=x[1];k===196?c.push(x):k===219&&o.push(x)}const l=this._segments.findIndex(x=>x[1]==192||x[1]==194);if(l==-1)throw new Error("Illegal JPEG image without SOF");o.length===0&&this._segments.splice(l+1,0,...this._cachedQuantTables),c.length===0&&this._segments.splice(l+1,0,...this._cachedHuffmanTables);let d=0;for(let x of this._segments)d+=x.length;let _=new Uint8Array(d);d=0;for(let x of this._segments)_.set(x,d),d+=x.length;return a.imageRect(t,e,s,n,"image/jpeg",_),c.length!==0&&(this._cachedHuffmanTables=c),o.length!==0&&(this._cachedQuantTables=o),this._segments=[],!0}_readSegment(t){if(t.rQwait("JPEG",2))return null;let e=t.rQshift8();if(e!=255)throw new Error("Illegal JPEG marker received (byte: "+e+")");let s=t.rQshift8();if(s>=208&&s<=217||s==1)return new Uint8Array([e,s]);if(t.rQwait("JPEG",2,2))return null;let n=t.rQshift16();if(n<2)throw new Error("Illegal JPEG length received (length: "+n+")");if(t.rQwait("JPEG",n-2,4))return null;let r=0;if(s===218){if(t.rQwait("JPEG",n-2+2,4))return null;let h=t.rQlen(),c=t.rQpeekBytes(h,!1);for(;;){let o=c.indexOf(255,n-2+r);if(o===-1||o===h-1)return t.rQwait("JPEG",1/0,4),null;if(c.at(o+1)===0||c.at(o+1)>=208&&c.at(o+1)<=215){r=o+2-(n-2);continue}r=o-(n-2);break}}let a=new Uint8Array(2+n+r);return a[0]=e,a[1]=s,a[2]=n>>8,a[3]=n,a.set(t.rQshiftBytes(n-2+r,!1),4),a}}class Ja{constructor(t){this._data=t,this._index=0,this.profileIdc=null,this.constraintSet=null,this.levelIdc=null}_getStartSequenceLen(t){let e=this._data;return e[t+0]==0&&e[t+1]==0&&e[t+2]==0&&e[t+3]==1?4:e[t+0]==0&&e[t+1]==0&&e[t+2]==1?3:0}_indexOfNextNalUnit(t){let e=this._data;for(let s=t;s<e.length;++s)if(this._getStartSequenceLen(s)!=0)return s;return-1}_parseSps(t){this.profileIdc=this._data[t],this.constraintSet=this._data[t+1],this.levelIdc=this._data[t+2]}_parseNalUnit(t){const e=this._data[t];if(e&128)throw new Error("H264 parsing sanity check failed, forbidden zero bit is set");const s=e&31;switch(s){case 1:return{slice:!0};case 5:return{slice:!0,key:!0};case 6:return{};case 7:return this._parseSps(t+1),{};case 8:return{};default:le("Unhandled unit type: ",s);break}return{}}parse(){const t=this._index;let e=!1;for(;this._index<this._data.length;){const s=this._getStartSequenceLen(this._index);if(s==0)throw new Error("Invalid start sequence in bit stream");const{slice:n,key:r}=this._parseNalUnit(this._index+s);let a=this._indexOfNextNalUnit(this._index+s);if(a==-1?this._index=this._data.length:this._index=a,r&&(e=!0),n)break}return t===this._index?null:{frame:this._data.subarray(t,this._index),key:e}}}class eo{constructor(t,e){this.lastUsed=0,this._width=t,this._height=e,this._profileIdc=null,this._constraintSet=null,this._levelIdc=null,this._decoder=null,this._pendingFrames=[]}_handleFrame(t){let e=this._pendingFrames.shift();if(e===void 0)throw new Error("Pending frame queue empty when receiving frame from decoder");if(e.timestamp!=t.timestamp)throw new Error("Video frame timestamp mismatch. Expected "+t.timestamp+" but but got "+e.timestamp);e.frame=t,e.ready=!0,e.resolve(),e.keep||t.close()}_handleError(t){throw new Error("Failed to decode frame: "+t.message)}_configureDecoder(t,e,s){(this._decoder===null||this._decoder.state==="closed")&&(this._decoder=new VideoDecoder({output:r=>this._handleFrame(r),error:r=>this._handleError(r)}));const n="avc1."+t.toString(16).padStart(2,"0")+e.toString(16).padStart(2,"0")+s.toString(16).padStart(2,"0");this._decoder.configure({codec:n,codedWidth:this._width,codedHeight:this._height,optimizeForLatency:!0})}_preparePendingFrame(t){let e={timestamp:t,promise:null,resolve:null,frame:null,ready:!1,keep:!1};return e.promise=new Promise(s=>{e.resolve=s}),this._pendingFrames.push(e),e}decode(t){let e=new Ja(t),s=null,n=Math.round(window.performance.now()*1e3);for(;;){let r=e.parse();if(r===null)break;if(e.profileIdc!==null&&(self._profileIdc=e.profileIdc,self._constraintSet=e.constraintSet,self._levelIdc=e.levelIdc),this._decoder===null||this._decoder.state!=="configured"){if(!r.key){le("Missing key frame. Can't decode until one arrives");continue}if(self._profileIdc===null){le("Cannot config decoder. Have not received SPS and PPS yet.");continue}this._configureDecoder(self._profileIdc,self._constraintSet,self._levelIdc)}s=this._preparePendingFrame(n);const a=new EncodedVideoChunk({timestamp:n,type:r.key?"key":"delta",data:r.frame});try{this._decoder.decode(a)}catch(h){le("Failed to decode:",h)}}return s!==null&&(s.keep=!0),s}}class to{constructor(){this._tick=0,this._contexts={}}_contextId(t,e,s,n){return[t,e,s,n].join(",")}_findOldestContextId(){let t=Number.MAX_VALUE,e;for(const[s,n]of Object.entries(this._contexts))n.lastUsed<t&&(t=n.lastUsed,e=s);return e}_createContext(t,e,s,n){if(Object.keys(this._contexts).length>=64){let h=this._findOldestContextId();delete this._contexts[h]}let a=new eo(s,n);return this._contexts[this._contextId(t,e,s,n)]=a,a}_getContext(t,e,s,n){let r=this._contexts[this._contextId(t,e,s,n)];return r!==void 0?r:this._createContext(t,e,s,n)}_resetContext(t,e,s,n){delete this._contexts[this._contextId(t,e,s,n)]}_resetAllContexts(){this._contexts={}}decodeRect(t,e,s,n,r,a,h){if(r.rQwait("h264 header",8))return!1;const l=r.rQshift32(),d=r.rQshift32();if(r.rQwait("h264 payload",l,8))return!1;d&2?this._resetAllContexts():d&1&&this._resetContext(t,e,s,n);let _=this._getContext(t,e,s,n);if(_.lastUsed=this._tick++,l!==0){let x=r.rQshiftBytes(l,!1),k=_.decode(x);k!==null&&a.videoFrame(t,e,s,n,k)}return!0}}const io=3,so="rgb(40, 40, 40)",zs=17,Os=50,Vs=19,st=75,Ke=50,no=1e3,ro=50,Gs=1,Ft=2,Ws=6,js=16,xi=19,Zs=22,Ys=30,qs=113,$s=129,Js=256,ye=1,en=1<<24,Qt=1<<25,tn=1<<26,rt=1<<27,Lt=1<<28;class P extends un{constructor(t,e,s){if(!t)throw new Error("Must specify target");if(!e)throw new Error("Must specify URL, WebSocket or RTCDataChannel");window.isSecureContext||q("noVNC requires a secure context (TLS). Expect crashes!"),super(),this._target=t,typeof e=="string"?this._url=e:(this._url=null,this._rawChannel=e),s=s||{},this._rfbCredentials=s.credentials||{},this._shared="shared"in s?!!s.shared:!0,this._repeaterID=s.repeaterID||"",this._wsProtocols=s.wsProtocols||[],this._rfbConnectionState="",this._rfbInitState="",this._rfbAuthScheme=-1,this._rfbCleanDisconnect=!0,this._rfbRSAAESAuthenticationState=null,this._rfbVersion=0,this._rfbMaxVersion=3.8,this._rfbTightVNC=!1,this._rfbVeNCryptState=0,this._rfbXvpVer=0,this._fbWidth=0,this._fbHeight=0,this._fbName="",this._capabilities={power:!1},this._supportsFence=!1,this._supportsContinuousUpdates=!1,this._enabledContinuousUpdates=!1,this._supportsSetDesktopSize=!1,this._screenID=0,this._screenFlags=0,this._pendingRemoteResize=!1,this._lastResize=0,this._qemuExtKeyEventSupported=!1,this._extendedPointerEventSupported=!1,this._clipboardText=null,this._clipboardServerCapabilitiesActions={},this._clipboardServerCapabilitiesFormats={},this._sock=null,this._display=null,this._flushing=!1,this._keyboard=null,this._gestures=null,this._resizeObserver=null,this._disconnTimer=null,this._resizeTimeout=null,this._mouseMoveTimer=null,this._decoders={},this._FBU={rects:0,x:0,y:0,width:0,height:0,encoding:null},this._mousePos={},this._mouseButtonMask=0,this._mouseLastMoveTime=0,this._viewportDragging=!1,this._viewportDragPos={},this._viewportHasMoved=!1,this._accumulatedWheelDeltaX=0,this._accumulatedWheelDeltaY=0,this._gestureLastTapTime=null,this._gestureFirstDoubleTapEv=null,this._gestureLastMagnitudeX=0,this._gestureLastMagnitudeY=0,this._eventHandlers={focusCanvas:this._focusCanvas.bind(this),handleResize:this._handleResize.bind(this),handleMouse:this._handleMouse.bind(this),handleWheel:this._handleWheel.bind(this),handleGesture:this._handleGesture.bind(this),handleRSAAESCredentialsRequired:this._handleRSAAESCredentialsRequired.bind(this),handleRSAAESServerVerification:this._handleRSAAESServerVerification.bind(this)},R(">> RFB.constructor"),this._screen=document.createElement("div"),this._screen.style.display="flex",this._screen.style.width="100%",this._screen.style.height="100%",this._screen.style.overflow="auto",this._screen.style.background=so,this._canvas=document.createElement("canvas"),this._canvas.style.margin="auto",this._canvas.style.outline="none",this._canvas.width=0,this._canvas.height=0,this._canvas.tabIndex=-1,this._screen.appendChild(this._canvas),this._cursor=new Ta,this._cursorImage=P.cursors.none,this._decoders[B.encodingRaw]=new Va,this._decoders[B.encodingCopyRect]=new Ga,this._decoders[B.encodingRRE]=new Wa,this._decoders[B.encodingHextile]=new ja,this._decoders[B.encodingZlib]=new Za,this._decoders[B.encodingTight]=new Bn,this._decoders[B.encodingTightPNG]=new Ya,this._decoders[B.encodingZRLE]=new qa,this._decoders[B.encodingJPEG]=new $a,this._decoders[B.encodingH264]=new to;try{this._display=new sr(this._canvas)}catch(n){throw q("Display exception: "+n),n}this._keyboard=new Ca(this._canvas),this._keyboard.onkeyevent=this._handleKeyEvent.bind(this),this._remoteCapsLock=null,this._remoteNumLock=null,this._gestures=new Ma,this._sock=new Qa,this._sock.on("open",this._socketOpen.bind(this)),this._sock.on("close",this._socketClose.bind(this)),this._sock.on("message",this._handleMessage.bind(this)),this._sock.on("error",this._socketError.bind(this)),this._expectedClientWidth=null,this._expectedClientHeight=null,this._resizeObserver=new ResizeObserver(this._eventHandlers.handleResize),this._updateConnectionState("connecting"),R("<< RFB.constructor"),this.dragViewport=!1,this.focusOnClick=!0,this._viewOnly=!1,this._clipViewport=!1,this._clippingViewport=!1,this._scaleViewport=!1,this._resizeSession=!1,this._showDotCursor=!1,this._qualityLevel=6,this._compressionLevel=2}get viewOnly(){return this._viewOnly}set viewOnly(t){this._viewOnly=t,(this._rfbConnectionState==="connecting"||this._rfbConnectionState==="connected")&&(t?this._keyboard.ungrab():this._keyboard.grab())}get capabilities(){return this._capabilities}get clippingViewport(){return this._clippingViewport}_setClippingViewport(t){t!==this._clippingViewport&&(this._clippingViewport=t,this.dispatchEvent(new CustomEvent("clippingviewport",{detail:this._clippingViewport})))}get touchButton(){return 0}set touchButton(t){le("Using old API!")}get clipViewport(){return this._clipViewport}set clipViewport(t){this._clipViewport=t,this._updateClip()}get scaleViewport(){return this._scaleViewport}set scaleViewport(t){this._scaleViewport=t,t&&this._clipViewport&&this._updateClip(),this._updateScale(),!t&&this._clipViewport&&this._updateClip()}get resizeSession(){return this._resizeSession}set resizeSession(t){this._resizeSession=t,t&&this._requestRemoteResize()}get showDotCursor(){return this._showDotCursor}set showDotCursor(t){this._showDotCursor=t,this._refreshCursor()}get background(){return this._screen.style.background}set background(t){this._screen.style.background=t}get qualityLevel(){return this._qualityLevel}set qualityLevel(t){if(!Number.isInteger(t)||t<0||t>9){q("qualityLevel must be an integer between 0 and 9");return}this._qualityLevel!==t&&(this._qualityLevel=t,this._rfbConnectionState==="connected"&&this._sendEncodings())}get compressionLevel(){return this._compressionLevel}set compressionLevel(t){if(!Number.isInteger(t)||t<0||t>9){q("compressionLevel must be an integer between 0 and 9");return}this._compressionLevel!==t&&(this._compressionLevel=t,this._rfbConnectionState==="connected"&&this._sendEncodings())}disconnect(){this._updateConnectionState("disconnecting"),this._sock.off("error"),this._sock.off("message"),this._sock.off("open"),this._rfbRSAAESAuthenticationState!==null&&this._rfbRSAAESAuthenticationState.disconnect()}approveServer(){this._rfbRSAAESAuthenticationState!==null&&this._rfbRSAAESAuthenticationState.approveServer()}sendCredentials(t){this._rfbCredentials=t,this._resumeAuthentication()}sendCtrlAltDel(){this._rfbConnectionState!=="connected"||this._viewOnly||(he("Sending Ctrl-Alt-Del"),this.sendKey(f.XK_Control_L,"ControlLeft",!0),this.sendKey(f.XK_Alt_L,"AltLeft",!0),this.sendKey(f.XK_Delete,"Delete",!0),this.sendKey(f.XK_Delete,"Delete",!1),this.sendKey(f.XK_Alt_L,"AltLeft",!1),this.sendKey(f.XK_Control_L,"ControlLeft",!1))}machineShutdown(){this._xvpOp(1,2)}machineReboot(){this._xvpOp(1,3)}machineReset(){this._xvpOp(1,4)}sendKey(t,e,s){if(this._rfbConnectionState!=="connected"||this._viewOnly)return;if(s===void 0){this.sendKey(t,e,!0),this.sendKey(t,e,!1);return}const n=La[e];if(this._qemuExtKeyEventSupported&&n)t=t||0,he("Sending key ("+(s?"down":"up")+"): keysym "+t+", scancode "+n),P.messages.QEMUExtendedKeyEvent(this._sock,t,s,n);else{if(!t)return;he("Sending keysym ("+(s?"down":"up")+"): "+t),P.messages.keyEvent(this._sock,t,s?1:0)}}focus(t){this._canvas.focus(t)}blur(){this._canvas.blur()}clipboardPasteFrom(t){if(!(this._rfbConnectionState!=="connected"||this._viewOnly))if(this._clipboardServerCapabilitiesFormats[ye]&&this._clipboardServerCapabilitiesActions[rt])this._clipboardText=t,P.messages.extendedClipboardNotify(this._sock,[ye]);else{let e,s,n;e=0;for(let r of t)e++;n=new Uint8Array(e),s=0;for(let r of t){let a=r.codePointAt(0);a>255&&(a=63),n[s++]=a}P.messages.clientCutText(this._sock,n)}}getImageData(){return this._display.getImageData()}toDataURL(t,e){return this._display.toDataURL(t,e)}toBlob(t,e,s){return this._display.toBlob(t,e,s)}_connect(){if(R(">> RFB.connect"),this._url)he(`connecting to ${this._url}`),this._sock.open(this._url,this._wsProtocols);else{if(he(`attaching ${this._rawChannel} to Websock`),this._sock.attach(this._rawChannel),this._sock.readyState==="closed")throw Error("Cannot use already closed WebSocket/RTCDataChannel");this._sock.readyState==="open"&&this._socketOpen()}this._target.appendChild(this._screen),this._gestures.attach(this._canvas),this._cursor.attach(this._canvas),this._refreshCursor(),this._resizeObserver.observe(this._screen),this._canvas.addEventListener("mousedown",this._eventHandlers.focusCanvas),this._canvas.addEventListener("touchstart",this._eventHandlers.focusCanvas),this._canvas.addEventListener("mousedown",this._eventHandlers.handleMouse),this._canvas.addEventListener("mouseup",this._eventHandlers.handleMouse),this._canvas.addEventListener("mousemove",this._eventHandlers.handleMouse),this._canvas.addEventListener("click",this._eventHandlers.handleMouse),this._canvas.addEventListener("contextmenu",this._eventHandlers.handleMouse),this._canvas.addEventListener("wheel",this._eventHandlers.handleWheel),this._canvas.addEventListener("gesturestart",this._eventHandlers.handleGesture),this._canvas.addEventListener("gesturemove",this._eventHandlers.handleGesture),this._canvas.addEventListener("gestureend",this._eventHandlers.handleGesture),R("<< RFB.connect")}_disconnect(){R(">> RFB.disconnect"),this._cursor.detach(),this._canvas.removeEventListener("gesturestart",this._eventHandlers.handleGesture),this._canvas.removeEventListener("gesturemove",this._eventHandlers.handleGesture),this._canvas.removeEventListener("gestureend",this._eventHandlers.handleGesture),this._canvas.removeEventListener("wheel",this._eventHandlers.handleWheel),this._canvas.removeEventListener("mousedown",this._eventHandlers.handleMouse),this._canvas.removeEventListener("mouseup",this._eventHandlers.handleMouse),this._canvas.removeEventListener("mousemove",this._eventHandlers.handleMouse),this._canvas.removeEventListener("click",this._eventHandlers.handleMouse),this._canvas.removeEventListener("contextmenu",this._eventHandlers.handleMouse),this._canvas.removeEventListener("mousedown",this._eventHandlers.focusCanvas),this._canvas.removeEventListener("touchstart",this._eventHandlers.focusCanvas),this._resizeObserver.disconnect(),this._keyboard.ungrab(),this._gestures.detach(),this._sock.close();try{this._target.removeChild(this._screen)}catch(t){if(t.name!=="NotFoundError")throw t}clearTimeout(this._resizeTimeout),clearTimeout(this._mouseMoveTimer),R("<< RFB.disconnect")}_socketOpen(){this._rfbConnectionState==="connecting"&&this._rfbInitState===""?(this._rfbInitState="ProtocolVersion",R("Starting VNC handshake")):this._fail("Unexpected server connection while "+this._rfbConnectionState)}_socketClose(t){R("WebSocket on-close event");let e="";switch(t.code&&(e="(code: "+t.code,t.reason&&(e+=", reason: "+t.reason),e+=")"),this._rfbConnectionState){case"connecting":this._fail("Connection closed "+e);break;case"connected":this._updateConnectionState("disconnecting"),this._updateConnectionState("disconnected");break;case"disconnecting":this._updateConnectionState("disconnected");break;case"disconnected":this._fail("Unexpected server disconnect when already disconnected "+e);break;default:this._fail("Unexpected server disconnect before connecting "+e);break}this._sock.off("close"),this._rawChannel=null}_socketError(t){le("WebSocket on-error event")}_focusCanvas(t){this.focusOnClick&&this.focus({preventScroll:!0})}_setDesktopName(t){this._fbName=t,this.dispatchEvent(new CustomEvent("desktopname",{detail:{name:this._fbName}}))}_saveExpectedClientSize(){this._expectedClientWidth=this._screen.clientWidth,this._expectedClientHeight=this._screen.clientHeight}_currentClientSize(){return[this._screen.clientWidth,this._screen.clientHeight]}_clientHasExpectedSize(){const[t,e]=this._currentClientSize();return t==this._expectedClientWidth&&e==this._expectedClientHeight}_handleResize(){this._clientHasExpectedSize()||(window.requestAnimationFrame(()=>{this._updateClip(),this._updateScale(),this._saveExpectedClientSize()}),this._requestRemoteResize())}_updateClip(){const t=this._display.clipViewport;let e=this._clipViewport;if(this._scaleViewport&&(e=!1),t!==e&&(this._display.clipViewport=e),e){const s=this._screenSize();this._display.viewportChangeSize(s.w,s.h),this._fixScrollbars(),this._setClippingViewport(s.w<this._display.width||s.h<this._display.height)}else this._setClippingViewport(!1);t!==e&&this._saveExpectedClientSize()}_updateScale(){if(!this._scaleViewport)this._display.scale=1;else{const t=this._screenSize();this._display.autoscale(t.w,t.h)}this._fixScrollbars()}_requestRemoteResize(){if(!this._resizeSession||this._viewOnly||!this._supportsSetDesktopSize||this._pendingRemoteResize)return;if(Date.now()-this._lastResize<100){clearTimeout(this._resizeTimeout),this._resizeTimeout=setTimeout(this._requestRemoteResize.bind(this),100-(Date.now()-this._lastResize));return}this._resizeTimeout=null;const t=this._screenSize();t.w===this._fbWidth&&t.h===this._fbHeight||(this._pendingRemoteResize=!0,this._lastResize=Date.now(),P.messages.setDesktopSize(this._sock,Math.floor(t.w),Math.floor(t.h),this._screenID,this._screenFlags),R("Requested new desktop size: "+t.w+"x"+t.h))}_screenSize(){let t=this._screen.getBoundingClientRect();return{w:t.width,h:t.height}}_fixScrollbars(){const t=this._screen.style.overflow;this._screen.style.overflow="hidden",this._screen.getBoundingClientRect(),this._screen.style.overflow=t}_updateConnectionState(t){const e=this._rfbConnectionState;if(t===e){R("Already in state '"+t+"', ignoring");return}if(e==="disconnected"){q("Tried changing state of a disconnected RFB object");return}switch(t){case"connected":if(e!=="connecting"){q("Bad transition to connected state, previous connection state: "+e);return}break;case"disconnected":if(e!=="disconnecting"){q("Bad transition to disconnected state, previous connection state: "+e);return}break;case"connecting":if(e!==""){q("Bad transition to connecting state, previous connection state: "+e);return}break;case"disconnecting":if(e!=="connected"&&e!=="connecting"){q("Bad transition to disconnecting state, previous connection state: "+e);return}break;default:q("Unknown connection state: "+t);return}switch(this._rfbConnectionState=t,R("New state '"+t+"', was '"+e+"'."),this._disconnTimer&&t!=="disconnecting"&&(R("Clearing disconnect timer"),clearTimeout(this._disconnTimer),this._disconnTimer=null,this._sock.off("close")),t){case"connecting":this._connect();break;case"connected":this.dispatchEvent(new CustomEvent("connect",{detail:{}}));break;case"disconnecting":this._disconnect(),this._disconnTimer=setTimeout(()=>{q("Disconnection timed out."),this._updateConnectionState("disconnected")},io*1e3);break;case"disconnected":this.dispatchEvent(new CustomEvent("disconnect",{detail:{clean:this._rfbCleanDisconnect}}));break}}_fail(t){switch(this._rfbConnectionState){case"disconnecting":q("Failed when disconnecting: "+t);break;case"connected":q("Failed while connected: "+t);break;case"connecting":q("Failed when connecting: "+t);break;default:q("RFB failure: "+t);break}return this._rfbCleanDisconnect=!1,this._updateConnectionState("disconnecting"),this._updateConnectionState("disconnected"),!1}_setCapability(t,e){this._capabilities[t]=e,this.dispatchEvent(new CustomEvent("capabilities",{detail:{capabilities:this._capabilities}}))}_handleMessage(){if(this._sock.rQwait("message",1)){le("handleMessage called on an empty receive queue");return}switch(this._rfbConnectionState){case"disconnected":q("Got data while disconnected");break;case"connected":for(;!(this._flushing||!this._normalMsg()||this._sock.rQwait("message",1)););break;case"connecting":for(;this._rfbConnectionState==="connecting"&&this._initMsg(););break;default:q("Got data while in an invalid state");break}}_handleKeyEvent(t,e,s,n,r){e=="CapsLock"&&s&&(this._remoteCapsLock=null),this._remoteCapsLock!==null&&r!==null&&this._remoteCapsLock!==r&&s&&(R("Fixing remote caps lock"),this.sendKey(f.XK_Caps_Lock,"CapsLock",!0),this.sendKey(f.XK_Caps_Lock,"CapsLock",!1),this._remoteCapsLock=null),e=="NumLock"&&s&&(this._remoteNumLock=null),this._remoteNumLock!==null&&n!==null&&this._remoteNumLock!==n&&s&&(R("Fixing remote num lock"),this.sendKey(f.XK_Num_Lock,"NumLock",!0),this.sendKey(f.XK_Num_Lock,"NumLock",!1),this._remoteNumLock=null),this.sendKey(t,e,s)}static _convertButtonMask(t){const e={0:1,1:4,2:2,3:128,4:256};let s=0;for(let n=0;n<5;n++)t&1<<n&&(s|=e[n]);return s}_handleMouse(t){if(t.type==="click"&&t.target!==this._canvas||(t.stopPropagation(),t.preventDefault(),t.type==="click"||t.type==="contextmenu"))return;let e=Je(t.clientX,t.clientY,this._canvas),s=P._convertButtonMask(t.buttons),n=t.type=="mousedown";switch(t.type){case"mousedown":case"mouseup":if(this.dragViewport)if(n&&!this._viewportDragging){this._viewportDragging=!0,this._viewportDragPos={x:e.x,y:e.y},this._viewportHasMoved=!1,this._flushMouseMoveTimer(e.x,e.y),this._mouseButtonMask=s;break}else{if(this._viewportDragging=!1,this._viewportHasMoved){this._mouseButtonMask=s;break}this._sendMouse(e.x,e.y,this._mouseButtonMask)}n&&ir(this._canvas),this._handleMouseButton(e.x,e.y,s);break;case"mousemove":if(this._viewportDragging){const r=this._viewportDragPos.x-e.x,a=this._viewportDragPos.y-e.y;(this._viewportHasMoved||Math.abs(r)>mt||Math.abs(a)>mt)&&(this._viewportHasMoved=!0,this._viewportDragPos={x:e.x,y:e.y},this._display.viewportChangePos(r,a));break}this._handleMouseMove(e.x,e.y);break}}_handleMouseButton(t,e,s){this._flushMouseMoveTimer(t,e),this._mouseButtonMask=s,this._sendMouse(t,e,this._mouseButtonMask)}_handleMouseMove(t,e){if(this._mousePos={x:t,y:e},this._mouseMoveTimer==null){const s=Date.now()-this._mouseLastMoveTime;s>zs?(this._sendMouse(t,e,this._mouseButtonMask),this._mouseLastMoveTime=Date.now()):this._mouseMoveTimer=setTimeout(()=>{this._handleDelayedMouseMove()},zs-s)}}_handleDelayedMouseMove(){this._mouseMoveTimer=null,this._sendMouse(this._mousePos.x,this._mousePos.y,this._mouseButtonMask),this._mouseLastMoveTime=Date.now()}_sendMouse(t,e,s){if(this._rfbConnectionState!=="connected"||this._viewOnly)return;if(s&32768)throw new Error("Illegal mouse button mask (mask: "+s+")");let n=s&32640;this._extendedPointerEventSupported&&n?P.messages.extendedPointerEvent(this._sock,this._display.absX(t),this._display.absY(e),s):P.messages.pointerEvent(this._sock,this._display.absX(t),this._display.absY(e),s)}_handleWheel(t){if(this._rfbConnectionState!=="connected"||this._viewOnly)return;t.stopPropagation(),t.preventDefault();let e=Je(t.clientX,t.clientY,this._canvas),s=P._convertButtonMask(t.buttons),n=t.deltaX,r=t.deltaY;t.deltaMode!==0&&(n*=Vs,r*=Vs),this._accumulatedWheelDeltaX+=n,this._accumulatedWheelDeltaY+=r,Math.abs(this._accumulatedWheelDeltaX)>=Os&&(this._accumulatedWheelDeltaX<0?(this._handleMouseButton(e.x,e.y,s|32),this._handleMouseButton(e.x,e.y,s)):this._accumulatedWheelDeltaX>0&&(this._handleMouseButton(e.x,e.y,s|64),this._handleMouseButton(e.x,e.y,s)),this._accumulatedWheelDeltaX=0),Math.abs(this._accumulatedWheelDeltaY)>=Os&&(this._accumulatedWheelDeltaY<0?(this._handleMouseButton(e.x,e.y,s|8),this._handleMouseButton(e.x,e.y,s)):this._accumulatedWheelDeltaY>0&&(this._handleMouseButton(e.x,e.y,s|16),this._handleMouseButton(e.x,e.y,s)),this._accumulatedWheelDeltaY=0)}_fakeMouseMove(t,e,s){this._handleMouseMove(e,s),this._cursor.move(t.detail.clientX,t.detail.clientY)}_handleTapEvent(t,e){let s=Je(t.detail.clientX,t.detail.clientY,this._canvas);if(this._gestureLastTapTime!==null&&Date.now()-this._gestureLastTapTime<no&&this._gestureFirstDoubleTapEv.detail.type===t.detail.type){let n=this._gestureFirstDoubleTapEv.detail.clientX-t.detail.clientX,r=this._gestureFirstDoubleTapEv.detail.clientY-t.detail.clientY;Math.hypot(n,r)<ro?s=Je(this._gestureFirstDoubleTapEv.detail.clientX,this._gestureFirstDoubleTapEv.detail.clientY,this._canvas):this._gestureFirstDoubleTapEv=t}else this._gestureFirstDoubleTapEv=t;this._gestureLastTapTime=Date.now(),this._fakeMouseMove(this._gestureFirstDoubleTapEv,s.x,s.y),this._handleMouseButton(s.x,s.y,e),this._handleMouseButton(s.x,s.y,0)}_handleGesture(t){let e,s=Je(t.detail.clientX,t.detail.clientY,this._canvas);switch(t.type){case"gesturestart":switch(t.detail.type){case"onetap":this._handleTapEvent(t,1);break;case"twotap":this._handleTapEvent(t,4);break;case"threetap":this._handleTapEvent(t,2);break;case"drag":this.dragViewport?(this._viewportHasMoved=!1,this._viewportDragging=!0,this._viewportDragPos={x:s.x,y:s.y}):(this._fakeMouseMove(t,s.x,s.y),this._handleMouseButton(s.x,s.y,1));break;case"longpress":this.dragViewport?(this._viewportHasMoved=!1,this._viewportDragPos={x:s.x,y:s.y}):(this._fakeMouseMove(t,s.x,s.y),this._handleMouseButton(s.x,s.y,4));break;case"twodrag":this._gestureLastMagnitudeX=t.detail.magnitudeX,this._gestureLastMagnitudeY=t.detail.magnitudeY,this._fakeMouseMove(t,s.x,s.y);break;case"pinch":this._gestureLastMagnitudeX=Math.hypot(t.detail.magnitudeX,t.detail.magnitudeY),this._fakeMouseMove(t,s.x,s.y);break}break;case"gesturemove":switch(t.detail.type){case"onetap":case"twotap":case"threetap":break;case"drag":case"longpress":if(this.dragViewport){this._viewportDragging=!0;const n=this._viewportDragPos.x-s.x,r=this._viewportDragPos.y-s.y;(this._viewportHasMoved||Math.abs(n)>mt||Math.abs(r)>mt)&&(this._viewportHasMoved=!0,this._viewportDragPos={x:s.x,y:s.y},this._display.viewportChangePos(n,r))}else this._fakeMouseMove(t,s.x,s.y);break;case"twodrag":for(this._fakeMouseMove(t,s.x,s.y);t.detail.magnitudeY-this._gestureLastMagnitudeY>Ke;)this._handleMouseButton(s.x,s.y,8),this._handleMouseButton(s.x,s.y,0),this._gestureLastMagnitudeY+=Ke;for(;t.detail.magnitudeY-this._gestureLastMagnitudeY<-Ke;)this._handleMouseButton(s.x,s.y,16),this._handleMouseButton(s.x,s.y,0),this._gestureLastMagnitudeY-=Ke;for(;t.detail.magnitudeX-this._gestureLastMagnitudeX>Ke;)this._handleMouseButton(s.x,s.y,32),this._handleMouseButton(s.x,s.y,0),this._gestureLastMagnitudeX+=Ke;for(;t.detail.magnitudeX-this._gestureLastMagnitudeX<-Ke;)this._handleMouseButton(s.x,s.y,64),this._handleMouseButton(s.x,s.y,0),this._gestureLastMagnitudeX-=Ke;break;case"pinch":if(this._fakeMouseMove(t,s.x,s.y),e=Math.hypot(t.detail.magnitudeX,t.detail.magnitudeY),Math.abs(e-this._gestureLastMagnitudeX)>st){for(this._handleKeyEvent(f.XK_Control_L,"ControlLeft",!0);e-this._gestureLastMagnitudeX>st;)this._handleMouseButton(s.x,s.y,8),this._handleMouseButton(s.x,s.y,0),this._gestureLastMagnitudeX+=st;for(;e-this._gestureLastMagnitudeX<-st;)this._handleMouseButton(s.x,s.y,16),this._handleMouseButton(s.x,s.y,0),this._gestureLastMagnitudeX-=st}this._handleKeyEvent(f.XK_Control_L,"ControlLeft",!1);break}break;case"gestureend":switch(t.detail.type){case"onetap":case"twotap":case"threetap":case"pinch":case"twodrag":break;case"drag":this.dragViewport?this._viewportDragging=!1:(this._fakeMouseMove(t,s.x,s.y),this._handleMouseButton(s.x,s.y,0));break;case"longpress":if(this._viewportHasMoved)break;this.dragViewport&&!this._viewportHasMoved?(this._fakeMouseMove(t,s.x,s.y),this._handleMouseButton(s.x,s.y,4),this._handleMouseButton(s.x,s.y,0),this._viewportDragging=!1):(this._fakeMouseMove(t,s.x,s.y),this._handleMouseButton(s.x,s.y,0));break}break}}_flushMouseMoveTimer(t,e){this._mouseMoveTimer!==null&&(clearTimeout(this._mouseMoveTimer),this._mouseMoveTimer=null,this._sendMouse(t,e,this._mouseButtonMask))}_negotiateProtocolVersion(){if(this._sock.rQwait("version",12))return!1;const t=this._sock.rQshiftStr(12).substr(4,7);he("Server ProtocolVersion: "+t);let e=0;switch(t){case"000.000":e=1;break;case"003.003":case"003.006":this._rfbVersion=3.3;break;case"003.007":this._rfbVersion=3.7;break;case"003.008":case"003.889":case"004.000":case"004.001":case"005.000":this._rfbVersion=3.8;break;default:return this._fail("Invalid server version "+t)}if(e){let n="ID:"+this._repeaterID;for(;n.length<250;)n+="\0";return this._sock.sQpushString(n),this._sock.flush(),!0}this._rfbVersion>this._rfbMaxVersion&&(this._rfbVersion=this._rfbMaxVersion);const s="00"+parseInt(this._rfbVersion,10)+".00"+this._rfbVersion*10%10;this._sock.sQpushString("RFB "+s+`
2
+ `),this._sock.flush(),R("Sent ProtocolVersion: "+s),this._rfbInitState="Security"}_isSupportedSecurityType(t){return[Gs,Ft,Ws,js,xi,Zs,Ys,qs,Js].includes(t)}_negotiateSecurity(){if(this._rfbVersion>=3.7){const t=this._sock.rQshift8();if(this._sock.rQwait("security type",t,1))return!1;if(t===0)return this._rfbInitState="SecurityReason",this._securityContext="no security types",this._securityStatus=1,!0;const e=this._sock.rQshiftBytes(t);R("Server security types: "+e),this._rfbAuthScheme=-1;for(let s of e)if(this._isSupportedSecurityType(s)){this._rfbAuthScheme=s;break}if(this._rfbAuthScheme===-1)return this._fail("Unsupported security types (types: "+e+")");this._sock.sQpush8(this._rfbAuthScheme),this._sock.flush()}else{if(this._sock.rQwait("security scheme",4))return!1;if(this._rfbAuthScheme=this._sock.rQshift32(),this._rfbAuthScheme==0)return this._rfbInitState="SecurityReason",this._securityContext="authentication scheme",this._securityStatus=1,!0}return this._rfbInitState="Authentication",R("Authenticating using scheme: "+this._rfbAuthScheme),!0}_handleSecurityReason(){if(this._sock.rQwait("reason length",4))return!1;const t=this._sock.rQshift32();let e="";if(t>0){if(this._sock.rQwait("reason",t,4))return!1;e=this._sock.rQshiftStr(t)}return e!==""?(this.dispatchEvent(new CustomEvent("securityfailure",{detail:{status:this._securityStatus,reason:e}})),this._fail("Security negotiation failed on "+this._securityContext+" (reason: "+e+")")):(this.dispatchEvent(new CustomEvent("securityfailure",{detail:{status:this._securityStatus}})),this._fail("Security negotiation failed on "+this._securityContext))}_negotiateXvpAuth(){return this._rfbCredentials.username===void 0||this._rfbCredentials.password===void 0||this._rfbCredentials.target===void 0?(this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["username","password","target"]}})),!1):(this._sock.sQpush8(this._rfbCredentials.username.length),this._sock.sQpush8(this._rfbCredentials.target.length),this._sock.sQpushString(this._rfbCredentials.username),this._sock.sQpushString(this._rfbCredentials.target),this._sock.flush(),this._rfbAuthScheme=Ft,this._negotiateAuthentication())}_negotiateVeNCryptAuth(){if(this._rfbVeNCryptState==0){if(this._sock.rQwait("vencrypt version",2))return!1;const t=this._sock.rQshift8(),e=this._sock.rQshift8();if(!(t==0&&e==2))return this._fail("Unsupported VeNCrypt version "+t+"."+e);this._sock.sQpush8(0),this._sock.sQpush8(2),this._sock.flush(),this._rfbVeNCryptState=1}if(this._rfbVeNCryptState==1){if(this._sock.rQwait("vencrypt ack",1))return!1;const t=this._sock.rQshift8();if(t!=0)return this._fail("VeNCrypt failure "+t);this._rfbVeNCryptState=2}if(this._rfbVeNCryptState==2){if(this._sock.rQwait("vencrypt subtypes length",1))return!1;const t=this._sock.rQshift8();if(t<1)return this._fail("VeNCrypt subtypes empty");this._rfbVeNCryptSubtypesLength=t,this._rfbVeNCryptState=3}if(this._rfbVeNCryptState==3){if(this._sock.rQwait("vencrypt subtypes",4*this._rfbVeNCryptSubtypesLength))return!1;const t=[];for(let e=0;e<this._rfbVeNCryptSubtypesLength;e++)t.push(this._sock.rQshift32());this._rfbAuthScheme=-1;for(let e of t)if(e!==xi&&this._isSupportedSecurityType(e)){this._rfbAuthScheme=e;break}return this._rfbAuthScheme===-1?this._fail("Unsupported security types (types: "+t+")"):(this._sock.sQpush32(this._rfbAuthScheme),this._sock.flush(),this._rfbVeNCryptState=4,!0)}}_negotiatePlainAuth(){if(this._rfbCredentials.username===void 0||this._rfbCredentials.password===void 0)return this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["username","password"]}})),!1;const t=Se(this._rfbCredentials.username),e=Se(this._rfbCredentials.password);return this._sock.sQpush32(t.length),this._sock.sQpush32(e.length),this._sock.sQpushString(t),this._sock.sQpushString(e),this._sock.flush(),this._rfbInitState="SecurityResult",!0}_negotiateStdVNCAuth(){if(this._sock.rQwait("auth challenge",16))return!1;if(this._rfbCredentials.password===void 0)return this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["password"]}})),!1;const t=Array.prototype.slice.call(this._sock.rQshiftBytes(16)),e=P.genDES(this._rfbCredentials.password,t);return this._sock.sQpushBytes(e),this._sock.flush(),this._rfbInitState="SecurityResult",!0}_negotiateARDAuth(){if(this._rfbCredentials.username===void 0||this._rfbCredentials.password===void 0)return this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["username","password"]}})),!1;if(this._rfbCredentials.ardPublicKey!=null&&this._rfbCredentials.ardCredentials!=null)return this._sock.sQpushBytes(this._rfbCredentials.ardCredentials),this._sock.sQpushBytes(this._rfbCredentials.ardPublicKey),this._sock.flush(),this._rfbCredentials.ardCredentials=null,this._rfbCredentials.ardPublicKey=null,this._rfbInitState="SecurityResult",!0;if(this._sock.rQwait("read ard",4))return!1;let t=this._sock.rQshiftBytes(2),e=this._sock.rQshift16();if(this._sock.rQwait("read ard keylength",e*2,4))return!1;let s=this._sock.rQshiftBytes(e),n=this._sock.rQshiftBytes(e),r=J.generateKey({name:"DH",g:t,p:s},!1,["deriveBits"]);return this._negotiateARDAuthAsync(e,n,r),!1}async _negotiateARDAuthAsync(t,e,s){const n=J.exportKey("raw",s.publicKey),r=J.deriveBits({name:"DH",public:e},s.privateKey,t*8),a=Se(this._rfbCredentials.username).substring(0,63),h=Se(this._rfbCredentials.password).substring(0,63),c=window.crypto.getRandomValues(new Uint8Array(128));for(let _=0;_<a.length;_++)c[_]=a.charCodeAt(_);c[a.length]=0;for(let _=0;_<h.length;_++)c[64+_]=h.charCodeAt(_);c[64+h.length]=0;const o=await J.digest("MD5",r),l=await J.importKey("raw",o,{name:"AES-ECB"},!1,["encrypt"]),d=await J.encrypt({name:"AES-ECB"},l,c);this._rfbCredentials.ardCredentials=d,this._rfbCredentials.ardPublicKey=n,this._resumeAuthentication()}_negotiateTightUnixAuth(){return this._rfbCredentials.username===void 0||this._rfbCredentials.password===void 0?(this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["username","password"]}})),!1):(this._sock.sQpush32(this._rfbCredentials.username.length),this._sock.sQpush32(this._rfbCredentials.password.length),this._sock.sQpushString(this._rfbCredentials.username),this._sock.sQpushString(this._rfbCredentials.password),this._sock.flush(),this._rfbInitState="SecurityResult",!0)}_negotiateTightTunnels(t){const e={0:{vendor:"TGHT",signature:"NOTUNNEL"}},s={};for(let n=0;n<t;n++){const r=this._sock.rQshift32(),a=this._sock.rQshiftStr(4),h=this._sock.rQshiftStr(8);s[r]={vendor:a,signature:h}}return R("Server Tight tunnel types: "+s),s[1]&&s[1].vendor==="SICR"&&s[1].signature==="SCHANNEL"&&(R("Detected Siemens server. Assuming NOTUNNEL support."),s[0]={vendor:"TGHT",signature:"NOTUNNEL"}),s[0]?s[0].vendor!=e[0].vendor||s[0].signature!=e[0].signature?this._fail("Client's tunnel type had the incorrect vendor or signature"):(R("Selected tunnel type: "+e[0]),this._sock.sQpush32(0),this._sock.flush(),!1):this._fail("Server wanted tunnels, but doesn't support the notunnel type")}_negotiateTightAuth(){if(!this._rfbTightVNC){if(this._sock.rQwait("num tunnels",4))return!1;const n=this._sock.rQshift32();if(n>0&&this._sock.rQwait("tunnel capabilities",16*n,4))return!1;if(this._rfbTightVNC=!0,n>0)return this._negotiateTightTunnels(n),!1}if(this._sock.rQwait("sub auth count",4))return!1;const t=this._sock.rQshift32();if(t===0)return this._rfbInitState="SecurityResult",!0;if(this._sock.rQwait("sub auth capabilities",16*t,4))return!1;const e={STDVNOAUTH__:1,STDVVNCAUTH_:2,TGHTULGNAUTH:129},s=[];for(let n=0;n<t;n++){this._sock.rQshift32();const r=this._sock.rQshiftStr(12);s.push(r)}R("Server Tight authentication types: "+s);for(let n in e)if(s.indexOf(n)!=-1)switch(this._sock.sQpush32(e[n]),this._sock.flush(),R("Selected authentication type: "+n),n){case"STDVNOAUTH__":return this._rfbInitState="SecurityResult",!0;case"STDVVNCAUTH_":return this._rfbAuthScheme=Ft,!0;case"TGHTULGNAUTH":return this._rfbAuthScheme=$s,!0;default:return this._fail("Unsupported tiny auth scheme (scheme: "+n+")")}return this._fail("No supported sub-auth types!")}_handleRSAAESCredentialsRequired(t){this.dispatchEvent(t)}_handleRSAAESServerVerification(t){this.dispatchEvent(t)}_negotiateRA2neAuth(){return this._rfbRSAAESAuthenticationState===null&&(this._rfbRSAAESAuthenticationState=new Oa(this._sock,()=>this._rfbCredentials),this._rfbRSAAESAuthenticationState.addEventListener("serververification",this._eventHandlers.handleRSAAESServerVerification),this._rfbRSAAESAuthenticationState.addEventListener("credentialsrequired",this._eventHandlers.handleRSAAESCredentialsRequired)),this._rfbRSAAESAuthenticationState.checkInternalEvents(),this._rfbRSAAESAuthenticationState.hasStarted||this._rfbRSAAESAuthenticationState.negotiateRA2neAuthAsync().catch(t=>{t.message!=="disconnect normally"&&this._fail(t.message)}).then(()=>(this._rfbInitState="SecurityResult",!0)).finally(()=>{this._rfbRSAAESAuthenticationState.removeEventListener("serververification",this._eventHandlers.handleRSAAESServerVerification),this._rfbRSAAESAuthenticationState.removeEventListener("credentialsrequired",this._eventHandlers.handleRSAAESCredentialsRequired),this._rfbRSAAESAuthenticationState=null}),!1}_negotiateMSLogonIIAuth(){if(this._sock.rQwait("mslogonii dh param",24))return!1;if(this._rfbCredentials.username===void 0||this._rfbCredentials.password===void 0)return this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["username","password"]}})),!1;const t=this._sock.rQshiftBytes(8),e=this._sock.rQshiftBytes(8),s=this._sock.rQshiftBytes(8),n=J.generateKey({name:"DH",g:t,p:e},!0,["deriveBits"]),r=J.exportKey("raw",n.publicKey),a=J.deriveBits({name:"DH",public:s},n.privateKey,64),h=J.importKey("raw",a,{name:"DES-CBC"},!1,["encrypt"]),c=Se(this._rfbCredentials.username).substring(0,255),o=Se(this._rfbCredentials.password).substring(0,63);let l=new Uint8Array(256),d=new Uint8Array(64);window.crypto.getRandomValues(l),window.crypto.getRandomValues(d);for(let _=0;_<c.length;_++)l[_]=c.charCodeAt(_);l[c.length]=0;for(let _=0;_<o.length;_++)d[_]=o.charCodeAt(_);return d[o.length]=0,l=J.encrypt({name:"DES-CBC",iv:a},h,l),d=J.encrypt({name:"DES-CBC",iv:a},h,d),this._sock.sQpushBytes(r),this._sock.sQpushBytes(l),this._sock.sQpushBytes(d),this._sock.flush(),this._rfbInitState="SecurityResult",!0}_negotiateAuthentication(){switch(this._rfbAuthScheme){case Gs:return this._rfbVersion>=3.8?this._rfbInitState="SecurityResult":this._rfbInitState="ClientInitialisation",!0;case Zs:return this._negotiateXvpAuth();case Ys:return this._negotiateARDAuth();case Ft:return this._negotiateStdVNCAuth();case js:return this._negotiateTightAuth();case xi:return this._negotiateVeNCryptAuth();case Js:return this._negotiatePlainAuth();case $s:return this._negotiateTightUnixAuth();case Ws:return this._negotiateRA2neAuth();case qs:return this._negotiateMSLogonIIAuth();default:return this._fail("Unsupported auth scheme (scheme: "+this._rfbAuthScheme+")")}}_handleSecurityResult(){if(this._sock.rQwait("VNC auth response ",4))return!1;const t=this._sock.rQshift32();return t===0?(this._rfbInitState="ClientInitialisation",R("Authentication OK"),!0):this._rfbVersion>=3.8?(this._rfbInitState="SecurityReason",this._securityContext="security result",this._securityStatus=t,!0):(this.dispatchEvent(new CustomEvent("securityfailure",{detail:{status:t}})),this._fail("Security handshake failed"))}_negotiateServerInit(){if(this._sock.rQwait("server initialization",24))return!1;const t=this._sock.rQshift16(),e=this._sock.rQshift16(),s=this._sock.rQshift8(),n=this._sock.rQshift8(),r=this._sock.rQshift8(),a=this._sock.rQshift8(),h=this._sock.rQshift16(),c=this._sock.rQshift16(),o=this._sock.rQshift16(),l=this._sock.rQshift8(),d=this._sock.rQshift8(),_=this._sock.rQshift8();this._sock.rQskipBytes(3);const x=this._sock.rQshift32();if(this._sock.rQwait("server init name",x,24))return!1;let k=this._sock.rQshiftStr(x);if(k=jt(k,!0),this._rfbTightVNC){if(this._sock.rQwait("TightVNC extended server init header",8,24+x))return!1;const C=this._sock.rQshift16(),F=this._sock.rQshift16(),X=this._sock.rQshift16();this._sock.rQskipBytes(2);const K=(C+F+X)*16;if(this._sock.rQwait("TightVNC extended server init header",K,32+x))return!1;this._sock.rQskipBytes(16*C),this._sock.rQskipBytes(16*F),this._sock.rQskipBytes(16*X)}return he("Screen: "+t+"x"+e+", bpp: "+s+", depth: "+n+", bigEndian: "+r+", trueColor: "+a+", redMax: "+h+", greenMax: "+c+", blueMax: "+o+", redShift: "+l+", greenShift: "+d+", blueShift: "+_),this._setDesktopName(k),this._resize(t,e),this._viewOnly||this._keyboard.grab(),this._fbDepth=24,this._fbName==="Intel(r) AMT KVM"&&(le("Intel AMT KVM only supports 8/16 bit depths. Using low color mode."),this._fbDepth=8),P.messages.pixelFormat(this._sock,this._fbDepth,!0),this._sendEncodings(),P.messages.fbUpdateRequest(this._sock,!1,0,0,this._fbWidth,this._fbHeight),this._updateConnectionState("connected"),!0}_sendEncodings(){const t=[];t.push(B.encodingCopyRect),this._fbDepth==24&&(an&&t.push(B.encodingH264),t.push(B.encodingTight),t.push(B.encodingTightPNG),t.push(B.encodingZRLE),t.push(B.encodingJPEG),t.push(B.encodingHextile),t.push(B.encodingRRE),t.push(B.encodingZlib)),t.push(B.encodingRaw),t.push(B.pseudoEncodingQualityLevel0+this._qualityLevel),t.push(B.pseudoEncodingCompressLevel0+this._compressionLevel),t.push(B.pseudoEncodingDesktopSize),t.push(B.pseudoEncodingLastRect),t.push(B.pseudoEncodingQEMUExtendedKeyEvent),t.push(B.pseudoEncodingQEMULedEvent),t.push(B.pseudoEncodingExtendedDesktopSize),t.push(B.pseudoEncodingXvp),t.push(B.pseudoEncodingFence),t.push(B.pseudoEncodingContinuousUpdates),t.push(B.pseudoEncodingDesktopName),t.push(B.pseudoEncodingExtendedClipboard),t.push(B.pseudoEncodingExtendedMouseButtons),this._fbDepth==24&&(t.push(B.pseudoEncodingVMwareCursor),t.push(B.pseudoEncodingCursor)),P.messages.clientEncodings(this._sock,t)}_initMsg(){switch(this._rfbInitState){case"ProtocolVersion":return this._negotiateProtocolVersion();case"Security":return this._negotiateSecurity();case"Authentication":return this._negotiateAuthentication();case"SecurityResult":return this._handleSecurityResult();case"SecurityReason":return this._handleSecurityReason();case"ClientInitialisation":return this._sock.sQpush8(this._shared?1:0),this._sock.flush(),this._rfbInitState="ServerInitialisation",!0;case"ServerInitialisation":return this._negotiateServerInit();default:return this._fail("Unknown init state (state: "+this._rfbInitState+")")}}_resumeAuthentication(){setTimeout(this._initMsg.bind(this),0)}_handleSetColourMapMsg(){return R("SetColorMapEntries"),this._fail("Unexpected SetColorMapEntries message")}_handleServerCutText(){if(R("ServerCutText"),this._sock.rQwait("ServerCutText header",7,1))return!1;this._sock.rQskipBytes(3);let t=this._sock.rQshift32();if(t=gi(t),this._sock.rQwait("ServerCutText content",Math.abs(t),8))return!1;if(t>=0){const e=this._sock.rQshiftStr(t);if(this._viewOnly)return!0;this.dispatchEvent(new CustomEvent("clipboard",{detail:{text:e}}))}else{t=Math.abs(t);const e=this._sock.rQshift32();let s=e&65535,n=e&4278190080;if(!!(n&en)){this._clipboardServerCapabilitiesFormats={},this._clipboardServerCapabilitiesActions={};for(let h=0;h<=15;h++){let c=1<<h;s&c&&(this._clipboardServerCapabilitiesFormats[c]=!0,this._sock.rQshift32())}for(let h=24;h<=31;h++){let c=1<<h;this._clipboardServerCapabilitiesActions[c]=!!(n&c)}let a=[en,Qt,tn,rt,Lt];P.messages.extendedClipboardCaps(this._sock,a,{extendedClipboardFormatText:0})}else if(n===Qt){if(this._viewOnly)return!0;this._clipboardText!=null&&this._clipboardServerCapabilitiesActions[Lt]&&s&ye&&P.messages.extendedClipboardProvide(this._sock,[ye],[this._clipboardText])}else if(n===tn){if(this._viewOnly)return!0;this._clipboardServerCapabilitiesActions[rt]&&(this._clipboardText!=null?P.messages.extendedClipboardNotify(this._sock,[ye]):P.messages.extendedClipboardNotify(this._sock,[]))}else if(n===rt){if(this._viewOnly)return!0;this._clipboardServerCapabilitiesActions[Qt]&&s&ye&&P.messages.extendedClipboardRequest(this._sock,[ye])}else if(n===Lt){if(this._viewOnly||!(s&ye))return!0;this._clipboardText=null;let a=this._sock.rQshiftBytes(t-4),h=new zt,c=null;h.setInput(a);for(let o=0;o<=15;o++){let l=1<<o;if(s&l){let d=0,_=h.inflate(4);d|=_[0]<<24,d|=_[1]<<16,d|=_[2]<<8,d|=_[3];let x=h.inflate(d);l===ye&&(c=x)}}if(h.setInput(null),c!==null){let o="";for(let l=0;l<c.length;l++)o+=String.fromCharCode(c[l]);c=o,c=jt(c),c.length>0&&c.charAt(c.length-1)==="\0"&&(c=c.slice(0,-1)),c=c.replaceAll(`\r
3
+ `,`
4
+ `),this.dispatchEvent(new CustomEvent("clipboard",{detail:{text:c}}))}}else return this._fail("Unexpected action in extended clipboard message: "+n)}return!0}_handleServerFenceMsg(){if(this._sock.rQwait("ServerFence header",8,1))return!1;this._sock.rQskipBytes(3);let t=this._sock.rQshift32(),e=this._sock.rQshift8();if(this._sock.rQwait("ServerFence payload",e,9))return!1;e>64&&(le("Bad payload length ("+e+") in fence response"),e=64);const s=this._sock.rQshiftStr(e);return this._supportsFence=!0,t&1<<31?(t&=3,P.messages.clientFence(this._sock,t,s),!0):this._fail("Unexpected fence response")}_handleXvpMsg(){if(this._sock.rQwait("XVP version and message",3,1))return!1;this._sock.rQskipBytes(1);const t=this._sock.rQshift8(),e=this._sock.rQshift8();switch(e){case 0:q("XVP operation failed");break;case 1:this._rfbXvpVer=t,he("XVP extensions enabled (version "+this._rfbXvpVer+")"),this._setCapability("power",!0);break;default:this._fail("Illegal server XVP message (msg: "+e+")");break}return!0}_normalMsg(){let t;this._FBU.rects>0?t=0:t=this._sock.rQshift8();let e,s;switch(t){case 0:return s=this._framebufferUpdate(),s&&!this._enabledContinuousUpdates&&P.messages.fbUpdateRequest(this._sock,!0,0,0,this._fbWidth,this._fbHeight),s;case 1:return this._handleSetColourMapMsg();case 2:return R("Bell"),this.dispatchEvent(new CustomEvent("bell",{detail:{}})),!0;case 3:return this._handleServerCutText();case 150:return e=!this._supportsContinuousUpdates,this._supportsContinuousUpdates=!0,this._enabledContinuousUpdates=!1,e&&(this._enabledContinuousUpdates=!0,this._updateContinuousUpdates(),he("Enabling continuous updates.")),!0;case 248:return this._handleServerFenceMsg();case 250:return this._handleXvpMsg();default:return this._fail("Unexpected server message (type "+t+")"),R("sock.rQpeekBytes(30): "+this._sock.rQpeekBytes(30)),!0}}_framebufferUpdate(){if(this._FBU.rects===0){if(this._sock.rQwait("FBU header",3,1))return!1;if(this._sock.rQskipBytes(1),this._FBU.rects=this._sock.rQshift16(),this._display.pending())return this._flushing=!0,this._display.flush().then(()=>{this._flushing=!1,this._sock.rQwait("message",1)||this._handleMessage()}),!1}for(;this._FBU.rects>0;){if(this._FBU.encoding===null){if(this._sock.rQwait("rect header",12))return!1;this._FBU.x=this._sock.rQshift16(),this._FBU.y=this._sock.rQshift16(),this._FBU.width=this._sock.rQshift16(),this._FBU.height=this._sock.rQshift16(),this._FBU.encoding=this._sock.rQshift32(),this._FBU.encoding>>=0}if(!this._handleRect())return!1;this._FBU.rects--,this._FBU.encoding=null}return this._display.flip(),!0}_handleRect(){switch(this._FBU.encoding){case B.pseudoEncodingLastRect:return this._FBU.rects=1,!0;case B.pseudoEncodingVMwareCursor:return this._handleVMwareCursor();case B.pseudoEncodingCursor:return this._handleCursor();case B.pseudoEncodingQEMUExtendedKeyEvent:return this._qemuExtKeyEventSupported=!0,!0;case B.pseudoEncodingDesktopName:return this._handleDesktopName();case B.pseudoEncodingDesktopSize:return this._resize(this._FBU.width,this._FBU.height),!0;case B.pseudoEncodingExtendedDesktopSize:return this._handleExtendedDesktopSize();case B.pseudoEncodingExtendedMouseButtons:return this._extendedPointerEventSupported=!0,!0;case B.pseudoEncodingQEMULedEvent:return this._handleLedEvent();default:return this._handleDataRect()}}_handleVMwareCursor(){const t=this._FBU.x,e=this._FBU.y,s=this._FBU.width,n=this._FBU.height;if(this._sock.rQwait("VMware cursor encoding",1))return!1;const r=this._sock.rQshift8();this._sock.rQshift8();let a;const h=4;if(r==0){if(a=new Array(s*n*h),this._sock.rQwait("VMware cursor classic encoding",s*n*h*2,2))return!1;let o=new Array(s*n);for(let d=0;d<s*n;d++)o[d]=this._sock.rQshift32();let l=new Array(s*n);for(let d=0;d<s*n;d++)l[d]=this._sock.rQshift32();for(let d=0;d<s*n;d++)if(o[d]==0){let _=l[d],x=_>>8&255,k=_>>16&255,C=_>>24&255;a[d*h]=x,a[d*h+1]=k,a[d*h+2]=C,a[d*h+3]=255}else(o[d]&-256)==-256?l[d]==0?(a[d*h]=0,a[d*h+1]=0,a[d*h+2]=0,a[d*h+3]=0):(l[d]&-256,a[d*h]=0,a[d*h+1]=0,a[d*h+2]=0,a[d*h+3]=255):(a[d*h]=0,a[d*h+1]=0,a[d*h+2]=0,a[d*h+3]=255)}else if(r==1){if(this._sock.rQwait("VMware cursor alpha encoding",s*n*4,2))return!1;a=new Array(s*n*h);for(let c=0;c<s*n;c++){let o=this._sock.rQshift32();a[c*4]=o>>24&255,a[c*4+1]=o>>16&255,a[c*4+2]=o>>8&255,a[c*4+3]=o&255}}else return le("The given cursor type is not supported: "+r+" given."),!1;return this._updateCursor(a,t,e,s,n),!0}_handleCursor(){const t=this._FBU.x,e=this._FBU.y,s=this._FBU.width,n=this._FBU.height,r=s*n*4,a=Math.ceil(s/8)*n;let h=r+a;if(this._sock.rQwait("cursor encoding",h))return!1;const c=this._sock.rQshiftBytes(r),o=this._sock.rQshiftBytes(a);let l=new Uint8Array(s*n*4),d=0;for(let _=0;_<n;_++)for(let x=0;x<s;x++){let k=_*Math.ceil(s/8)+Math.floor(x/8),C=o[k]<<x%8&128?255:0;l[d]=c[d+2],l[d+1]=c[d+1],l[d+2]=c[d],l[d+3]=C,d+=4}return this._updateCursor(l,t,e,s,n),!0}_handleDesktopName(){if(this._sock.rQwait("DesktopName",4))return!1;let t=this._sock.rQshift32();if(this._sock.rQwait("DesktopName",t,4))return!1;let e=this._sock.rQshiftStr(t);return e=jt(e,!0),this._setDesktopName(e),!0}_handleLedEvent(){if(this._sock.rQwait("LED status",1))return!1;let t=this._sock.rQshift8(),e=!!(t&2),s=!!(t&4);return this._remoteCapsLock=s,this._remoteNumLock=e,!0}_handleExtendedDesktopSize(){if(this._sock.rQwait("ExtendedDesktopSize",4))return!1;const t=this._sock.rQpeek8();let e=4+t*16;if(this._sock.rQwait("ExtendedDesktopSize",e))return!1;const s=!this._supportsSetDesktopSize;this._supportsSetDesktopSize=!0,this._sock.rQskipBytes(1),this._sock.rQskipBytes(3);for(let n=0;n<t;n+=1)n===0?(this._screenID=this._sock.rQshift32(),this._sock.rQskipBytes(2),this._sock.rQskipBytes(2),this._sock.rQskipBytes(2),this._sock.rQskipBytes(2),this._screenFlags=this._sock.rQshift32()):this._sock.rQskipBytes(16);if(this._FBU.x===1&&(this._pendingRemoteResize=!1),this._FBU.x===1&&this._FBU.y!==0){let n="";switch(this._FBU.y){case 1:n="Resize is administratively prohibited";break;case 2:n="Out of resources";break;case 3:n="Invalid screen layout";break;default:n="Unknown reason";break}le("Server did not accept the resize request: "+n)}else this._resize(this._FBU.width,this._FBU.height);return s&&this._requestRemoteResize(),this._FBU.x===1&&this._FBU.y===0&&this._requestRemoteResize(),!0}_handleDataRect(){let t=this._decoders[this._FBU.encoding];if(!t)return this._fail("Unsupported encoding (encoding: "+this._FBU.encoding+")"),!1;try{return t.decodeRect(this._FBU.x,this._FBU.y,this._FBU.width,this._FBU.height,this._sock,this._display,this._fbDepth)}catch(e){return this._fail("Error decoding rect: "+e),!1}}_updateContinuousUpdates(){this._enabledContinuousUpdates&&P.messages.enableContinuousUpdates(this._sock,!0,0,0,this._fbWidth,this._fbHeight)}_resize(t,e){this._fbWidth=t,this._fbHeight=e,this._display.resize(this._fbWidth,this._fbHeight),this._updateClip(),this._updateScale(),this._updateContinuousUpdates(),this._saveExpectedClientSize()}_xvpOp(t,e){this._rfbXvpVer<t||(he("Sending XVP operation "+e+" (version "+t+")"),P.messages.xvpOp(this._sock,t,e))}_updateCursor(t,e,s,n,r){this._cursorImage={rgbaPixels:t,hotx:e,hoty:s,w:n,h:r},this._refreshCursor()}_shouldShowDotCursor(){if(!this._showDotCursor)return!1;for(let t=3;t<this._cursorImage.rgbaPixels.length;t+=4)if(this._cursorImage.rgbaPixels[t])return!1;return!0}_refreshCursor(){if(this._rfbConnectionState!=="connecting"&&this._rfbConnectionState!=="connected")return;const t=this._shouldShowDotCursor()?P.cursors.dot:this._cursorImage;this._cursor.change(t.rgbaPixels,t.hotx,t.hoty,t.w,t.h)}static genDES(t,e){const s=t.split("").map(r=>r.charCodeAt(0)),n=J.importKey("raw",s,{name:"DES-ECB"},!1,["encrypt"]);return J.encrypt({name:"DES-ECB"},n,e)}}P.messages={keyEvent(i,t,e){i.sQpush8(4),i.sQpush8(e),i.sQpush16(0),i.sQpush32(t),i.flush()},QEMUExtendedKeyEvent(i,t,e,s){function n(a){const h=s>>8,c=s&255;return h===224&&c<127?c|128:a}i.sQpush8(255),i.sQpush8(0),i.sQpush16(e),i.sQpush32(t);const r=n(s);i.sQpush32(r),i.flush()},pointerEvent(i,t,e,s){i.sQpush8(5),s=s&127,i.sQpush8(s),i.sQpush16(t),i.sQpush16(e),i.flush()},extendedPointerEvent(i,t,e,s){i.sQpush8(5);let n=s>>7&255;if(n&252)throw new Error("Invalid mouse button mask: "+s);let r=s&127;r|=128,i.sQpush8(r),i.sQpush16(t),i.sQpush16(e),i.sQpush8(n),i.flush()},_buildExtendedClipboardFlags(i,t){let e=new Uint8Array(4),s=0,n=0;for(let r=0;r<i.length;r++)n|=i[r];for(let r=0;r<t.length;r++)s|=t[r];return e[0]=n>>24,e[1]=0,e[2]=0,e[3]=s,e},extendedClipboardProvide(i,t,e){let s=new ya,n=[];for(let h=0;h<t.length;h++){if(t[h]!=ye)throw new Error("Unsupported extended clipboard format for Provide message.");e[h]=e[h].replace(/\r\n|\r|\n/gm,`\r
5
+ `);let c=Se(e[h]+"\0");n.push(c.length>>24&255,c.length>>16&255,c.length>>8&255,c.length&255);for(let o=0;o<c.length;o++)n.push(c.charCodeAt(o))}let r=s.deflate(new Uint8Array(n)),a=new Uint8Array(4+r.length);a.set(P.messages._buildExtendedClipboardFlags([Lt],t)),a.set(r,4),P.messages.clientCutText(i,a,!0)},extendedClipboardNotify(i,t){let e=P.messages._buildExtendedClipboardFlags([rt],t);P.messages.clientCutText(i,e,!0)},extendedClipboardRequest(i,t){let e=P.messages._buildExtendedClipboardFlags([Qt],t);P.messages.clientCutText(i,e,!0)},extendedClipboardCaps(i,t,e){let s=Object.keys(e),n=new Uint8Array(4+4*s.length);s.map(a=>parseInt(a)),s.sort((a,h)=>a-h),n.set(P.messages._buildExtendedClipboardFlags(t,[]));let r=4;for(let a=0;a<s.length;a++)n[r]=e[s[a]]>>24,n[r+1]=e[s[a]]>>16,n[r+2]=e[s[a]]>>8,n[r+3]=e[s[a]]>>0,r+=4,n[3]|=1<<s[a];P.messages.clientCutText(i,n,!0)},clientCutText(i,t,e=!1){i.sQpush8(6),i.sQpush8(0),i.sQpush8(0),i.sQpush8(0);let s;e?s=qn(-t.length):s=t.length,i.sQpush32(s),i.sQpushBytes(t),i.flush()},setDesktopSize(i,t,e,s,n){i.sQpush8(251),i.sQpush8(0),i.sQpush16(t),i.sQpush16(e),i.sQpush8(1),i.sQpush8(0),i.sQpush32(s),i.sQpush16(0),i.sQpush16(0),i.sQpush16(t),i.sQpush16(e),i.sQpush32(n),i.flush()},clientFence(i,t,e){i.sQpush8(248),i.sQpush8(0),i.sQpush8(0),i.sQpush8(0),i.sQpush32(t),i.sQpush8(e.length),i.sQpushString(e),i.flush()},enableContinuousUpdates(i,t,e,s,n,r){i.sQpush8(150),i.sQpush8(t),i.sQpush16(e),i.sQpush16(s),i.sQpush16(n),i.sQpush16(r),i.flush()},pixelFormat(i,t,e){let s;t>16?s=32:t>8?s=16:s=8;const n=Math.floor(t/3);i.sQpush8(0),i.sQpush8(0),i.sQpush8(0),i.sQpush8(0),i.sQpush8(s),i.sQpush8(t),i.sQpush8(0),i.sQpush8(e?1:0),i.sQpush16((1<<n)-1),i.sQpush16((1<<n)-1),i.sQpush16((1<<n)-1),i.sQpush8(n*0),i.sQpush8(n*1),i.sQpush8(n*2),i.sQpush8(0),i.sQpush8(0),i.sQpush8(0),i.flush()},clientEncodings(i,t){i.sQpush8(2),i.sQpush8(0),i.sQpush16(t.length);for(let e=0;e<t.length;e++)i.sQpush32(t[e]);i.flush()},fbUpdateRequest(i,t,e,s,n,r){typeof e>"u"&&(e=0),typeof s>"u"&&(s=0),i.sQpush8(3),i.sQpush8(t?1:0),i.sQpush16(e),i.sQpush16(s),i.sQpush16(n),i.sQpush16(r),i.flush()},xvpOp(i,t,e){i.sQpush8(250),i.sQpush8(0),i.sQpush8(t),i.sQpush8(e),i.flush()}};P.cursors={none:{rgbaPixels:new Uint8Array,w:0,h:0,hotx:0,hoty:0},dot:{rgbaPixels:new Uint8Array([255,255,255,255,0,0,0,255,255,255,255,255,0,0,0,255,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,255,255,255,255,255]),w:3,h:3,hotx:1,hoty:1}};function Dn(i){const t=i.codePointAt(0);return t<=255?t:16777216+t}function ao(i,t){return i&&i===t?"":t}function oo(i){return/[\r\n]/.test(i)||Array.from(i).length>32?"paste":"keys"}function ho(i){return(i.code==="KeyV"||!i.code&&i.key.toLowerCase()==="v")&&(i.ctrlKey||i.metaKey)&&!i.altKey}const sn={Backspace:65288,Tab:65289,Enter:65293,Escape:65307,Home:65360,ArrowLeft:65361,ArrowUp:65362,ArrowRight:65363,ArrowDown:65364,PageUp:65365,PageDown:65366,End:65367,Insert:65379,Delete:65535,Shift:65505,Control:65507,Meta:65515,Alt:65513,CapsLock:65509};function lo(i,t=!1){if(i.key in sn){const s=sn[t&&i.key==="Meta"?"Control":i.key];return i.location===2&&["Shift","Control","Meta","Alt"].includes(i.key)?s+1:s}if((i.ctrlKey||i.metaKey)&&/^Key[A-Z]$/.test(i.code??""))return i.code.charCodeAt(3)+32;const e=/^F([1-9]|1[0-2])$/.exec(i.key);return e?65469+Number(e[1]):Array.from(i.key).length===1?Dn(i.key):null}const In="/mock/desktop.jpg",pi=/Mac|iPhone|iPad/.test(navigator.platform);function Pn(i,t){return`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/desktop/vnc?screen=${encodeURIComponent(t)}&client=${encodeURIComponent(i)}`}function Un(){const i="hob-desktop-client",t=sessionStorage.getItem(i);if(t)return t;const e=crypto.getRandomValues(new Uint8Array(16)),s=Array.from(e,r=>r.toString(16).padStart(2,"0")).join(""),n=`${s.slice(0,8)}-${s.slice(8,12)}-${s.slice(12,16)}-${s.slice(16,20)}-${s.slice(20)}`;return sessionStorage.setItem(i,n),n}function uo({screen:i}){const t=z.useRef(null),[e]=z.useState(Un),[s,n]=z.useState(Xe?"ready":"connecting"),[r,a]=z.useState(0);return z.useEffect(()=>{if(Xe)return;n("connecting");const h=new P(t.current,Pn(e,i));h.viewOnly=!0,h.scaleViewport=!0,h.resizeSession=!1,h.qualityLevel=3,h.compressionLevel=9;let c,o=!0;return h.addEventListener("connect",()=>{o&&n("ready")}),h.addEventListener("disconnect",()=>{o&&(n("lost"),c=setTimeout(()=>a(l=>l+1),5e3))}),()=>{o=!1,clearTimeout(c),h.disconnect()}},[e,i,r]),I.jsxs(I.Fragment,{children:[I.jsx("div",{className:"desktop-canvas",ref:t}),Xe?I.jsx("img",{className:"desktop-shot",src:In,alt:""}):null,s==="ready"?null:I.jsx("div",{className:"now-msg",children:s==="connecting"?"正在连接云桌面…":"云桌面连接已断开,正在重连…"})]})}function fo({onClose:i,takeOver:t=!1,initialScreen:e="hob"}){const s=z.useRef(null),n=z.useRef(null),r=z.useRef(null),a=z.useRef(!1),h=z.useRef(!1),c=z.useRef(""),o=z.useRef(new Map),l=z.useRef(new Map),d=z.useRef(Promise.resolve()),_=z.useRef(0),x=z.useRef(0),k=z.useRef(""),[C,F]=z.useState(""),[X]=z.useState(Un),[K,M]=z.useState(Xe&&t?{taken:!0,mine:!0}:{taken:!1,mine:!1}),[E,T]=z.useState("connecting"),[N,A]=z.useState(""),[H,U]=z.useState(0),[Q,j]=z.useState(!1),te=Gn().assistants,_e=Wn(),[W,ve]=z.useState(e),se=z.useRef(W),$=z.useRef(!1);se.current=W;const[Ye]=z.useState(()=>window.matchMedia("(hover: none)").matches);z.useEffect(()=>{if(!K.mine||!Ye)return;j(!0);const S=setTimeout(()=>j(!1),6e3);return()=>clearTimeout(S)},[K.mine,Ye]),z.useEffect(()=>{K.mine||Le(),a.current=K.mine,n.current&&(n.current.viewOnly=!K.mine),K.mine||(x.current++,F(""),r.current?.blur())},[K.mine]),z.useEffect(()=>{const S=()=>{document.hidden&&Le()};return window.addEventListener("blur",Le),document.addEventListener("visibilitychange",S),()=>{window.removeEventListener("blur",Le),document.removeEventListener("visibilitychange",S),Le()}},[]),z.useEffect(()=>{if(!C)return;const S=setTimeout(()=>F(""),8e3);return()=>clearTimeout(S)},[C]),z.useEffect(()=>{const S=r.current;if(!S)return;const L=D=>{if(!a.current||h.current||D.isComposing)return;const O=D.inputType==="deleteContentBackward"?[65288,"Backspace"]:D.inputType==="insertLineBreak"||D.inputType==="insertParagraph"?[65293,"Enter"]:null;O&&(D.preventDefault(),fe(O[0],O[1],!0),fe(O[0],O[1],!1))};return S.addEventListener("beforeinput",L),()=>S.removeEventListener("beforeinput",L)},[K.mine]),z.useEffect(()=>{let S=!0;$.current=!0;let L,D=!1;if(T("connecting"),A(""),M({taken:!1,mine:!1}),a.current=!1,Xe){jn()==="failed"?(T("lost"),A("无法连接云桌面,请确认云桌面已部署并启动。")):(T("ready"),t&&M({taken:!0,mine:!0}));return}const O=()=>fetch("/api/desktop/control",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({client:X,screen:W,action:"release"})}).catch(()=>{}),qe=async()=>{const ue=await fetch(`/api/desktop/control?client=${encodeURIComponent(X)}&screen=${encodeURIComponent(W)}`);if(!ue.ok)throw new Error("无法读取接管状态。");const pe=await ue.json();return D=pe.mine,S&&M(pe),pe},Li=new EventSource("/api/events");return Li.onmessage=ue=>{try{const pe=JSON.parse(ue.data);pe.type==="desktop-control"&&pe.screen===W&&qe().catch(wt=>{S&&A(wt.message)})}catch{}},(async()=>{try{if(await Zn(W),!S)return;L=new P(s.current,Pn(X,W)),n.current=L,L.viewOnly=!0,L.scaleViewport=!0,L.resizeSession=!1,L.addEventListener("connect",()=>{S&&(T("ready"),A(""),qe().then(async ue=>{S&&t&&!ue.taken&&(await Ti("take",W),D=!0,S||O())}).catch(ue=>{S&&A(ue.message)}))}),L.addEventListener("disconnect",()=>{S&&(T("lost"),A("云桌面连接已断开,请重试;仍无法连接时请确认云桌面已启动。"))}),L.addEventListener("clipboard",ue=>{if(!a.current)return;const pe=ue.detail.text;if(pe===k.current)return;const wt=++x.current;F(""),navigator.clipboard?.writeText(pe).then(()=>{x.current===wt&&F("")}).catch(()=>{a.current&&x.current===wt&&F(pe)}),navigator.clipboard||F(pe)})}catch(ue){S&&(T("lost"),A(ue instanceof Error?ue.message:String(ue)))}})(),()=>{S=!1,$.current=!1,Li.close(),(D||a.current)&&O(),a.current=!1,n.current===L&&(n.current=null),L?.disconnect()}},[X,W,H,t]);async function Ti(S,L=W){const D=await fetch("/api/desktop/control",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({client:X,screen:L,action:S})}),O=await D.json();if(!D.ok)throw new Error(O.error??"操作失败。");$.current&&se.current===L?(a.current=O.mine,M(O)):S==="take"&&O.mine&&fetch("/api/desktop/control",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({client:X,screen:L,action:"release"})})}async function Nn(){if(Xe){M(K.mine?{taken:!1,mine:!1}:{taken:!0,mine:!0});return}try{await Ti(K.mine?"release":"take")}catch(S){A(S instanceof Error?S.message:String(S))}}function Le(){_.current++;for(const{keysym:S,code:L}of l.current.values())n.current?.sendKey(S,L,!1);l.current.clear(),o.current.clear()}function Qi(S){const L=n.current,D=se.current;d.current=d.current.then(async()=>{a.current&&n.current===L&&se.current===D&&await S()}).catch(O=>A(O instanceof Error?O.message:String(O)))}function fe(S,L,D){const O=_.current;Qi(()=>{if(O!==_.current)return;n.current?.sendKey(S,L,D);const qe=L??String(S);D?l.current.set(qe,{keysym:S,code:L}):l.current.delete(qe)})}function Wt(S){if(!S||!n.current||!a.current)return;k.current=S;for(const{keysym:D,code:O}of o.current.values())fe(D,O,!1);o.current.clear();const L=se.current;Qi(async()=>{const D=await fetch("/api/desktop/paste",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({client:X,screen:L,text:S})});if(!D.ok){const O=await D.json().catch(()=>({}));throw new Error(O.error??"云桌面粘贴失败。")}})}function Hn(S){if(!(!S||!a.current)){if(/[^\x20-\x7e]/.test(S)||oo(S)==="paste")return Wt(S);for(const L of S){const D=Dn(L);fe(D,null,!0),fe(D,null,!1)}}}function zn(S){if(!a.current||h.current||S.nativeEvent.isComposing||S.keyCode===229)return;if(c.current="",pi&&S.metaKey&&["KeyW","KeyT","KeyN","KeyQ"].includes(S.code)){Le();return}if(ho(S.nativeEvent)||Array.from(S.key).length===1&&!S.ctrlKey&&!S.metaKey&&!S.altKey)return;const D=lo(S.nativeEvent,pi);if(D===null)return;S.preventDefault();const O=S.code||S.key;if(pi&&S.metaKey&&S.key!=="Meta"&&S.key!=="Shift"&&S.key!=="Control"&&S.key!=="Alt"){S.repeat||(fe(D,O,!0),fe(D,O,!1));return}o.current.set(O,{keysym:D,code:O}),fe(D,O,!0)}function On(S){const L=S.code||S.key,D=o.current.get(L);D&&(S.preventDefault(),fe(D.keysym,D.code,!1),o.current.delete(L))}const bt=K.taken&&!K.mine,Vn=K.mine||(Xe||E==="ready")&&!bt;return Yn.createPortal(I.jsxs("div",{className:"desktop-overlay",role:"dialog","aria-label":"云桌面",children:[I.jsxs("div",{className:"desktop-bar",children:[I.jsx("span",{className:"desktop-title",children:"云桌面"}),I.jsx("span",{className:`desktop-tag${K.mine?" live":""}`,children:K.mine?"你在操作":"只看"}),bt?I.jsx("span",{className:"desktop-note",children:"其他人正在接管"}):null,K.mine&&C?I.jsxs("span",{className:"desktop-clipboard",children:["云桌面复制了文字 ",I.jsx("button",{className:"hob-btn",onClick:()=>{if(!navigator.clipboard)return A("复制失败,请使用支持剪贴板的安全连接。");navigator.clipboard.writeText(C).then(()=>F("")).catch(()=>A("复制失败,请检查浏览器的剪贴板权限。"))},children:"复制到本机"})]}):null,E==="ready"&&N?I.jsx("span",{className:"desktop-note bad",role:"alert",children:N}):null,I.jsx("span",{className:"sp"}),I.jsxs("select",{className:"pick desktop-open","aria-label":"屏幕",value:W,onChange:S=>ve(S.target.value),children:[!Object.values(_e.profiles).includes(W)&&W!=="public"?I.jsx("option",{value:W,children:W}):null,te.filter(S=>_e.profiles[S.id]).map(S=>{const L=_e.profiles[S.id],D=_e.screens.some(O=>O.id===L&&O.running);return I.jsxs("option",{value:L,children:[S.name," · ",D?"运行中":"未启动"]},S.id)}),I.jsxs("option",{value:"public",children:["公共屏幕 · ",_e.screens.some(S=>S.id==="public"&&S.running)?"运行中":"未启动"]})]}),K.mine&&Ye?I.jsx("button",{className:"hob-btn",onClick:()=>r.current?.focus(),children:"键盘"}):null,I.jsx("button",{className:"hob-btn hob-btn-primary",disabled:!Vn,title:bt?"其他人正在接管":void 0,onClick:()=>void Nn(),children:K.mine?"交还":"接管"}),I.jsx("button",{className:"hob-icon-btn",title:"关闭","aria-label":"关闭云桌面",onClick:i,children:I.jsx(Ri,{name:"close",size:18})})]}),I.jsx("div",{className:"desktop-stage",children:I.jsxs("div",{className:"desktop-frame",children:[I.jsx("div",{className:"desktop-canvas",ref:s,onPointerDownCapture:S=>{if(a.current&&!Ye&&r.current){const L=S.currentTarget.getBoundingClientRect();r.current.style.left=`${Math.max(0,Math.min(L.width-1,S.clientX-L.left))}px`,r.current.style.top=`${Math.max(0,Math.min(L.height-1,S.clientY-L.top))}px`,r.current.focus({preventScroll:!0})}},onFocus:()=>{a.current&&!Ye&&r.current?.focus({preventScroll:!0})}}),K.mine?I.jsx("textarea",{ref:r,className:"desktop-input","aria-label":"云桌面输入",autoCapitalize:"off",autoComplete:"off",spellCheck:!1,onBlur:Le,onKeyDown:zn,onKeyUp:On,onPaste:S=>{S.preventDefault(),Wt(S.clipboardData.getData("text/plain")),S.currentTarget.value=""},onCompositionStart:()=>{h.current=!0,c.current=""},onCompositionEnd:S=>{h.current=!1,c.current=S.data,S.data&&Wt(S.data),S.currentTarget.value=""},onInput:S=>{const L=S.nativeEvent;if(!(h.current||L.isComposing)){if(L.inputType==="deleteContentBackward")fe(65288,"Backspace",!0),fe(65288,"Backspace",!1);else if(L.inputType==="insertLineBreak"||L.inputType==="insertParagraph")fe(65293,"Enter",!0),fe(65293,"Enter",!1);else if(L.inputType==="insertText"||L.inputType==="insertFromComposition"){const D=L.data??S.currentTarget.value;Hn(ao(c.current,D))}c.current="",S.currentTarget.value=""}}}):null,Xe&&E==="ready"?I.jsx("img",{className:"desktop-shot",src:In,alt:""}):null,E==="ready"?null:I.jsx("div",{className:"desktop-msg",children:E==="connecting"?I.jsxs(I.Fragment,{children:[I.jsx(Ri,{name:"spin",size:20,className:"spin"}),I.jsx("span",{children:"正在连接云桌面…"})]}):I.jsxs(I.Fragment,{children:[I.jsx("div",{className:"badline",role:"alert",children:N}),I.jsx("button",{className:"hob-btn",onClick:()=>U(S=>S+1),children:"重试"})]})})]})}),Q?I.jsx("div",{className:"desktop-tip",children:"双指缩放,单指拖动画面"}):null]}),document.body)}export{uo as DesktopMini,fo as DesktopView};