@scienjoy/sj-digital-human-assistant-adaptive 1.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sjDigitalHumanAssistantAdaptive.umd.min.js","sources":["../src/index.js","../../utils/src/index.js"],"sourcesContent":["import Hls from 'hls.js';\nimport { AliRTS } from 'aliyun-rts-sdk';\nimport { debounce } from '../../utils/src/index.js';\n\n\"use strict\";\n\nfunction SjDigitalHumanAssistantAdaptive(options) {\n\toptions = options || {};\n\tthis.config = this._assign({}, {\n\t\tbaseUrl: \"\",\n\t\twindowTitle: \"数字人助手\",\n\t\tdefaultPlayText: \"\",\n\t\treconnectInterval: 1,\n\t\tmaxReconnectTimes: 10,\n\t\tsecretKey: \"abc999\",\n\t\taccessToken: \"aaaaaaa\",\n\t\twindowWidth: \"300px\",\n\t\twindowHeight: \"550px\",\n\t\tavatarId: 1,\n\t\tisVideoFullscreen: true,\n\t\thlsClass: Hls,\n\t\taliRtsClass: AliRTS,\n\t\tcontainer: typeof document !== \"undefined\" ? document.body : null,\n\t\tzIndex: 9999,\n\t\tmobileBreakpoint: 768\n\t}, options);\n\n\tthis.state = {\n\t\tisConnected: false,\n\t\tisConnecting: false,\n\t\tisSSEConnected: false,\n\t\tisAutoplayBlocked: true,\n\t\tisMediaReady: false,\n\t\tisVideoFullscreen: !!this.config.isVideoFullscreen,\n\t\thasAvatarUrl: true,\n\t\tqueueCount: 0,\n\t\tisTextInputMode: true,\n\t\tisRecording: false,\n\t\tshowReconnectDialog: false,\n\t\tneedManualPlay: false,\n\t\tisIOSWechat: this._isIOSWechat(),\n\t\tisReceivingReply: false,\n\t\tcurrentAiMessage: this.config.defaultPlayText || \"\",\n\t\tcurrentReconnectTimes: 0,\n\t\tisManualDisconnect: false,\n\t\tisWaitingReconnect: false,\n\t\tisMobileDevice: true,\n\t\tdragPosition: null,\n\t\tisDragging: false,\n\t\tdragMoved: false,\n\t\tsessionid: \"\",\n\t\tchatSessionId: \"\",\n\t\tcurrentHlsUrl: \"\",\n\t\tcurrentRtsUrl: \"\",\n\t\tvideoEleBg: \"\",\n\t\tposterBgUrl: \"\",\n\t\tdefaultVideoUrl: \"\",\n\t\tavatarPic: \"\",\n\t\tshowToastFlag: false,\n\t\ttoastMessage: \"\",\n\t\tplayingVoiceId: null,\n\t\thasUnmuted: false\n\t};\n\n\tthis.drag = {\n\t\tstartClientX: 0,\n\t\tstartClientY: 0,\n\t\tstartLeft: 0,\n\t\tstartTop: 0\n\t};\n\n\tthis.stream = {\n\t\thls: null,\n\t\taliRts: null,\n\t\tsseReader: null,\n\t\tsseReconnectTimer: null,\n\t\treconnectTimer: null\n\t};\n\n\tthis.audio = {\n\t\tmediaStream: null,\n\t\taudioContext: null,\n\t\tsourceNode: null,\n\t\tprocessorNode: null,\n\t\tchunks: [],\n\t\tstartTime: 0,\n\t\tpermissionPromise: null,\n\t\tcurrentVoiceAudio: null\n\t};\n\n\tthis.dom = {};\n\tthis.chatMessages = [];\n\tthis.sseReconnectCount = 0;\n\tthis.toastTimer = null;\n\tthis.blockClickTimer = null;\n\tthis.reconnectDialogCallback = null;\n\tthis.resizeHandler = null;\n\tthis.stopRequestedBeforeStart = false;\n\tthis.isButtonPressed = false;\n\tthis.permissionCheckTimer = null;\n\n\tif (!this.config.baseUrl) {\n\t\tthrow new Error(\"[SjDigitalHumanAssistantAdaptive] baseUrl is required\");\n\t}\n\n\tthis.init();\n}\n\nSjDigitalHumanAssistantAdaptive.prototype._assign = function (target) {\n\tif (target == null) {\n\t\tthrow new TypeError(\"Cannot convert undefined or null to object\");\n\t}\n\ttarget = Object(target);\n\tfor (var i = 1; i < arguments.length; i++) {\n\t\tvar source = arguments[i];\n\t\tif (!source) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (var key in source) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\t\ttarget[key] = source[key];\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.init = function () {\n\tthis.state.isMobileDevice = this.detectMobileDevice();\n\tthis.injectStyle();\n\tthis.mountDom();\n\tthis.updateRemBase();\n\tthis.bindEvent();\n\tthis.syncDeviceMode();\n\tthis.renderInitialMessages();\n\tthis.bootstrap();\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.injectStyle = function () {\n\tif (document.getElementById(\"sj-digital-human-adaptive-style\")) {\n\t\treturn;\n\t}\n\tvar css = [\n\t\t\".sjdha-root{--sjdha-rem:50px;position:fixed;right:16px;bottom:16px;display:flex;flex-direction:column;background:#f5f5f5;border-radius:calc(var(--sjdha-rem) * 0.2);overflow:hidden;box-shadow:0 calc(var(--sjdha-rem) * 0.2) calc(var(--sjdha-rem) * 0.5) rgba(15,23,42,.18);z-index:\" + this.config.zIndex + \";font-family:'Microsoft YaHei','PingFang SC',sans-serif;color:#232323;font-size:calc(var(--sjdha-rem) * 0.28);-webkit-text-size-adjust:100%;touch-action:pan-x pan-y}\",\n\t\t\".sjdha-root,.sjdha-root *{box-sizing:border-box}\",\n\t\t\".sjdha-root.device-mobile{left:0;right:0;top:0;bottom:0;width:100%;height:100dvh;max-width:none;border-radius:0}\",\n\t\t\".sjdha-root.device-web{width:300px;height:550px;max-width:calc(100vw - 24px);max-height:calc(100vh - 24px)}\",\n\t\t\".sjdha-root.video-fullscreen .sjdha-video-area{flex:none;height:calc(100% - calc(var(--sjdha-rem) * 1.16));min-height:calc(100% - calc(var(--sjdha-rem) * 1.16))}\",\n\t\t\".sjdha-root.video-split .sjdha-video-area{flex:none;height:40%;min-height:calc(var(--sjdha-rem) * 4)}\",\n\t\t\".sjdha-root.video-fullscreen.device-mobile .sjdha-video-area{height:calc(100% - calc(var(--sjdha-rem) * 1.16) - env(safe-area-inset-bottom));min-height:calc(100% - calc(var(--sjdha-rem) * 1.16) - env(safe-area-inset-bottom))}\",\n\t\t\".sjdha-video-area{position:relative;flex:1;min-height:calc(var(--sjdha-rem) * 4);background-size:100% 100%;background-position:center top;cursor:grab;overflow:hidden}\",\n\t\t\".sjdha-video-area:before{content:'';position:absolute;inset:0;backdrop-filter:blur(8px);z-index:0}\",\n\t\t\".sjdha-digital-human{position:relative;z-index:1;width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden}\",\n\t\t\".sjdha-video{position:absolute;left:50%;top:0;transform:translateX(-50%);width:auto;height:100%;background:transparent;object-fit:contain}\",\n\t\t\".sjdha-queue{position:absolute;left:50%;bottom:calc(var(--sjdha-rem) * 0.21);transform:translateX(-50%);padding:calc(var(--sjdha-rem) * 0.16) calc(var(--sjdha-rem) * 0.32);border-radius:999px;background:rgba(15,23,42,.55);backdrop-filter:blur(calc(var(--sjdha-rem) * 0.08));color:#fff;font-size:calc(var(--sjdha-rem) * 0.2);white-space:nowrap;z-index:10;display:none}\",\n\t\t\".sjdha-fullscreen-btn{position:absolute;top:calc(var(--sjdha-rem) * 0.9);right:calc(var(--sjdha-rem) * 0.3);width:calc(var(--sjdha-rem) * 0.6);height:calc(var(--sjdha-rem) * 0.6);border:0;border-radius:50%;background:rgba(15,23,42,.45);color:#fff;font-size:calc(var(--sjdha-rem) * 0.28);line-height:calc(var(--sjdha-rem) * 0.6);text-align:center;cursor:pointer;z-index:20;display:flex;align-items:center;justify-content:center}\",\n\t\t\".sjdha-fullscreen-btn:disabled{opacity:.45;cursor:not-allowed}\",\n\t\t\".sjdha-autoplay-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:calc(var(--sjdha-rem) * 0.16);background:rgba(0,0,0,.45);color:#fff;z-index:30;font-size:calc(var(--sjdha-rem) * 0.28)}\",\n\t\t\".sjdha-autoplay-overlay.hidden{display:none}\",\n\t\t\".sjdha-manual-play{display:flex;flex-direction:column;align-items:center;gap:calc(var(--sjdha-rem) * 0.16);cursor:pointer}\",\n\t\t\".sjdha-autoplay-icon{width:calc(var(--sjdha-rem) * 1.12);height:calc(var(--sjdha-rem) * 1.12);border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.25);font-size:calc(var(--sjdha-rem) * 0.48)}\",\n\t\t\".sjdha-autoplay-spinner{width:calc(var(--sjdha-rem) * 0.8);height:calc(var(--sjdha-rem) * 0.8);border-radius:50%;border:3px solid rgba(255,255,255,.35);border-top-color:#fff;animation:sjdha-spin .8s linear infinite}\",\n\t\t\".sjdha-ai-response{position:absolute;left:calc(var(--sjdha-rem) * 0.32);right:calc(var(--sjdha-rem) * 0.32);bottom:calc(var(--sjdha-rem) * 1.2);padding:calc(var(--sjdha-rem) * 0.32) calc(var(--sjdha-rem) * 0.32) calc(var(--sjdha-rem) * 0.45);background:rgba(255,255,255,.95);border-radius:calc(var(--sjdha-rem) * 0.24);box-shadow:0 calc(var(--sjdha-rem) * 0.08) calc(var(--sjdha-rem) * 0.24) rgba(0,0,0,.1);z-index:15;display:none}\",\n\t\t\".sjdha-ai-response-label{font-size:calc(var(--sjdha-rem) * 0.28);color:#509aff;font-weight:600;text-align:center;margin-bottom:calc(var(--sjdha-rem) * 0.05)}\",\n\t\t\".sjdha-ai-response-content{-ms-overflow-style: none;scrollbar-width: none;font-size:calc(var(--sjdha-rem) * 0.3);line-height:1.5;max-height:calc(var(--sjdha-rem) * 2.4);overflow:auto;text-align:center;word-break:break-word}\",\n\t\t\".sjdha-chat-area{height:60%;min-height:calc(var(--sjdha-rem) * 4);background:#fff;margin-top:calc(var(--sjdha-rem) * -0.15);display:flex;flex-direction:column;position:relative;z-index:9}\",\n\t\t\".sjdha-chat-area.hidden{display:none}\",\n\t\t\".sjdha-chat-date{padding:calc(var(--sjdha-rem) * 0.33) 0 calc(var(--sjdha-rem) * 0.23);text-align:center;font-size:calc(var(--sjdha-rem) * 0.26);line-height:calc(var(--sjdha-rem) * 0.26);color:#888}\",\n\t\t\".sjdha-chat-list{flex:1;padding:calc(var(--sjdha-rem) * 0.1) calc(var(--sjdha-rem) * 0.16) calc(var(--sjdha-rem) * 1.28);overflow-y:auto;-ms-overflow-style:none;scrollbar-width:none;-webkit-overflow-scrolling:touch}\",\n\t\t\".sjdha-chat-list::-webkit-scrollbar{display:none}\",\n\t\t\".sjdha-time-label{text-align:center;padding:calc(var(--sjdha-rem) * 0.4) 0 calc(var(--sjdha-rem) * 0.2);font-size:calc(var(--sjdha-rem) * 0.26);color:#888}\",\n\t\t\".sjdha-chat-item{display:flex;max-width:85%;margin-bottom:calc(var(--sjdha-rem) * 0.26);text-align:left}\",\n\t\t\".sjdha-chat-item.system{margin-right:auto}\",\n\t\t\".sjdha-chat-item.user{margin-left:auto;flex-direction:row-reverse}\",\n\t\t\".sjdha-avatar{width:calc(var(--sjdha-rem) * 0.8);height:calc(var(--sjdha-rem) * 0.8);border-radius:50%;background:#f0f0f0 center/cover no-repeat;flex-shrink:0;margin:0 calc(var(--sjdha-rem) * 0.12)}\",\n\t\t\".sjdha-chat-item.system .sjdha-avatar{margin-right:calc(var(--sjdha-rem) * 0.22)}\",\n\t\t\".sjdha-chat-item.user .sjdha-avatar{margin-left:calc(var(--sjdha-rem) * 0.22);background-image:url('https://szr-data.xiu361.cn/img/szr_video/szr_button/user-avatar.png')}\",\n\t\t\".sjdha-bubble{position:relative;padding:calc(var(--sjdha-rem) * 0.16) calc(var(--sjdha-rem) * 0.28);border-radius:calc(var(--sjdha-rem) * 0.2);line-height:1.4;font-size:calc(var(--sjdha-rem) * 0.28);word-break:break-word;display:flex;align-items:center;min-height:calc(var(--sjdha-rem) * 0.28)}\",\n\t\t\".sjdha-chat-item.system .sjdha-bubble{background:#fff;color:#333;box-shadow:0 4px 12px rgba(15,23,42,.06)}\",\n\t\t\".sjdha-chat-item.system .sjdha-bubble:before{content:'';position:absolute;left:calc(var(--sjdha-rem) * -0.11);top:calc(var(--sjdha-rem) * 0.34);border-top:calc(var(--sjdha-rem) * 0.12) solid transparent;border-bottom:calc(var(--sjdha-rem) * 0.12) solid transparent;border-right:calc(var(--sjdha-rem) * 0.12) solid #fff}\",\n\t\t\".sjdha-chat-item.user .sjdha-bubble{background:#509aff;color:#fff}\",\n\t\t\".sjdha-chat-item.user .sjdha-bubble:after{content:'';position:absolute;right:calc(var(--sjdha-rem) * -0.11);top:calc(var(--sjdha-rem) * 0.34);border-top:calc(var(--sjdha-rem) * 0.12) solid transparent;border-bottom:calc(var(--sjdha-rem) * 0.12) solid transparent;border-left:calc(var(--sjdha-rem) * 0.12) solid #509aff}\",\n\t\t\".sjdha-voice-bubble{cursor:pointer;min-width:calc(var(--sjdha-rem) * 0.8);justify-content:space-between;gap:calc(var(--sjdha-rem) * 0.16);padding:calc(var(--sjdha-rem) * 0.2) calc(var(--sjdha-rem) * 0.32)}\",\n\t\t\".sjdha-voice-icon{width:calc(var(--sjdha-rem) * 0.4);height:calc(var(--sjdha-rem) * 0.4);background:url('https://szr-data.xiu361.cn/img/szr_video/szr_button/play-voice-icon.png') no-repeat center center;background-size:contain;position:relative}\",\n\t\t\".sjdha-voice-icon.playing{animation:sjdha-voice-play 1s ease-in-out infinite}\",\n\t\t\".sjdha-voice-icon.playing:before,.sjdha-voice-icon.playing:after{display:none}\",\n\t\t\".sjdha-input-bar{position:absolute;left:0;right:0;bottom:0;height:calc(var(--sjdha-rem) * 1.16);padding:calc(var(--sjdha-rem) * 0.16);display:flex;align-items:center;gap:calc(var(--sjdha-rem) * 0.16);background:#fff;border-top:1px solid #edf2f7}\",\n\t\t\".sjdha-root.video-fullscreen .sjdha-chat-area{position:absolute;left:0;right:0;bottom:0;height:calc(var(--sjdha-rem) * 1.16);min-height:calc(var(--sjdha-rem) * 1.16);background:transparent;border-radius:0;padding:0;z-index:40}\",\n\t\t\".sjdha-root.video-fullscreen .sjdha-chat-list{flex:none;height:0;padding:0;overflow:hidden}\",\n\t\t\".sjdha-root.video-fullscreen.device-mobile .sjdha-chat-area{height:calc(calc(var(--sjdha-rem) * 1.16) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom)}\",\n\t\t\".sjdha-mode-btn,.sjdha-send-btn,.sjdha-voice-input{border:0;border-radius:calc(var(--sjdha-rem) * 0.16);height:calc(var(--sjdha-rem) * 0.84)}\",\n\t\t\".sjdha-mode-btn{width:calc(var(--sjdha-rem) * 0.66);background:#eff6ff;color:#3b82f6;font-size:calc(var(--sjdha-rem) * 0.36);cursor:pointer;flex-shrink:0;padding:0}\",\n\t\t\".sjdha-input-wrap{flex:1;height:calc(var(--sjdha-rem) * 0.84);border:1px solid #dbeafe;border-radius:calc(var(--sjdha-rem) * 0.16);overflow:hidden;background:#f5f5f5;display:flex;align-items:center;padding:0 calc(var(--sjdha-rem) * 0.16)}\",\n\t\t\".sjdha-input{width:100%;height:100%;padding:0 calc(var(--sjdha-rem) * 0.08);border:0;outline:none;font-size:16px;background:transparent;-webkit-text-size-adjust:100%;touch-action:manipulation;appearance:none;-webkit-appearance:none}\",\n\t\t\".sjdha-voice-input{flex:1;background:#f5f5f5;color:#1a1a1a;font-size:calc(var(--sjdha-rem) * 0.28);font-weight:600;cursor:pointer;user-select:none;-webkit-user-select:none;touch-action:manipulation}\",\n\t\t\".sjdha-send-btn{min-width:calc(var(--sjdha-rem) * 1.04);padding:0 calc(var(--sjdha-rem) * 0.32);background:#509aff;color:#fff;cursor:pointer;font-size:calc(var(--sjdha-rem) * 0.28)}\",\n\t\t\".sjdha-send-btn:disabled{opacity:.55;cursor:not-allowed}\",\n\t\t\".sjdha-recording{position:absolute;inset:0;display:none;align-items:center;justify-content:center;background:rgba(15,23,42,.5);z-index:40}\",\n\t\t\".sjdha-recording.show{display:flex}\",\n\t\t\".sjdha-recording-card{display:flex;flex-direction:column;align-items:center;gap:calc(var(--sjdha-rem) * 0.24);padding:calc(var(--sjdha-rem) * 0.6) calc(var(--sjdha-rem) * 0.8);border-radius:calc(var(--sjdha-rem) * 0.24);background:rgba(15,23,42,.85);color:#fff}\",\n\t\t\".sjdha-wave{display:flex;align-items:flex-end;gap:calc(var(--sjdha-rem) * 0.08);height:calc(var(--sjdha-rem) * 0.64)}\",\n\t\t\".sjdha-wave span{width:calc(var(--sjdha-rem) * 0.08);border-radius:999px;background:#fff;animation:sjdha-wave 1.1s ease-in-out infinite}\",\n\t\t\".sjdha-dialog-overlay,.sjdha-toast{position:absolute;inset:0;display:none;align-items:center;justify-content:center;z-index:50}\",\n\t\t\".sjdha-dialog-overlay.show,.sjdha-toast.show{display:flex}\",\n\t\t\".sjdha-dialog-overlay{background:rgba(15,23,42,.45)}\",\n\t\t\".sjdha-dialog{width:calc(var(--sjdha-rem) * 5.2);padding:calc(var(--sjdha-rem) * 0.36);background:#fff;border-radius:calc(var(--sjdha-rem) * 0.28);box-shadow:0 calc(var(--sjdha-rem) * 0.24) calc(var(--sjdha-rem) * 0.64) rgba(15,23,42,.22)}\",\n\t\t\".sjdha-dialog-content{font-size:calc(var(--sjdha-rem) * 0.3);line-height:1.5;color:#1e293b;text-align:center}\",\n\t\t\".sjdha-dialog-footer{margin-top:16px;display:flex;justify-content:center}\",\n\t\t\".sjdha-dialog-btn{height:calc(var(--sjdha-rem) * 0.68);padding:0 calc(var(--sjdha-rem) * 0.36);border:0;border-radius:calc(var(--sjdha-rem) * 0.2);background:#509aff;color:#fff;cursor:pointer}\",\n\t\t\".sjdha-toast{pointer-events:none}\",\n\t\t\".sjdha-toast-content{padding:calc(var(--sjdha-rem) * 0.2) calc(var(--sjdha-rem) * 0.32);border-radius:999px;background:rgba(15,23,42,.8);color:#fff;font-size:calc(var(--sjdha-rem) * 0.26)}\",\n\t\t\".sjdha-root.device-web{font-size:14px;min-height:467px;display:grid;grid-template-columns:1fr;grid-template-rows:188px minmax(0,1fr);align-items:stretch;border-radius:20px;box-shadow:0 18px 48px rgba(15,23,42,.18);border:1px solid rgba(148,163,184,.22);z-index:1000}\",\n\t\t\".sjdha-root.device-web.video-fullscreen{grid-template-rows:minmax(0,1fr) auto}\",\n\t\t\".sjdha-root.device-web.video-fullscreen .sjdha-video-area{grid-column:1;grid-row:1;height:100%;min-height:0}\",\n\t\t\".sjdha-root.device-web.video-split .sjdha-video-area{height:auto;min-height:188px}\",\n\t\t\".sjdha-root.device-web .sjdha-video-area{grid-column:1;grid-row:1;min-height:0;height:auto;cursor:move;user-select:none}\",\n\t\t\".sjdha-root.device-web .sjdha-video-area:before{backdrop-filter:blur(10px)}\",\n\t\t\".sjdha-root.device-web .sjdha-queue{bottom:14px;padding:6px 12px;font-size:12px;backdrop-filter:blur(8px)}\",\n\t\t\".sjdha-root.device-web .sjdha-fullscreen-btn{top:24px;right:24px;width:44px;height:44px;font-size:16px;line-height:44px}\",\n\t\t\".sjdha-root.device-web .sjdha-autoplay-overlay{gap:10px;font-size:14px}\",\n\t\t\".sjdha-root.device-web .sjdha-manual-play{gap:10px}\",\n\t\t\".sjdha-root.device-web .sjdha-autoplay-icon{width:56px;height:56px;font-size:22px}\",\n\t\t\".sjdha-root.device-web .sjdha-autoplay-spinner{width:50px;height:50px}\",\n\t\t\".sjdha-root.device-web .sjdha-ai-response{left:14px;right:14px;bottom:22px;padding:12px 14px 14px;border-radius:14px;background:rgba(255,255,255,.92);box-shadow:0 8px 24px rgba(0,0,0,.1)}\",\n\t\t\".sjdha-root.device-web .sjdha-ai-response-label{font-size:12px;margin-bottom:4px}\",\n\t\t\".sjdha-root.device-web .sjdha-ai-response-content{font-size:16px;max-height:100px;scrollbar-width:none;-ms-overflow-style:none}\",\n\t\t\".sjdha-root.device-web .sjdha-chat-area{grid-column:1;grid-row:2;min-height:0;height:auto;margin-top:0;user-select:none;overflow:hidden;background:rgba(255,255,255,.92)}\",\n\t\t\".sjdha-root.device-web.video-fullscreen .sjdha-chat-area{display:flex;position:static;height:auto;min-height:auto;background:transparent;border:none;box-shadow:none;backdrop-filter:none;border-radius:0;overflow:visible;padding:0}\",\n\t\t\".sjdha-root.device-web .sjdha-chat-date{padding:12px 0 10px;font-size:12px;line-height:1.4}\",\n\t\t\".sjdha-root.device-web .sjdha-time-label{padding:12px 0 6px;font-size:12px;line-height:1.4}\",\n\t\t\".sjdha-root.device-web .sjdha-chat-list{flex:1;padding:0 12px 12px;box-sizing:border-box}\",\n\t\t\".sjdha-root.device-web .sjdha-chat-item{margin-bottom:10px;max-width:88%}\",\n\t\t\".sjdha-root.device-web .sjdha-avatar{width:28px;height:28px;margin:0 8px;box-shadow:0 6px 14px rgba(80,154,255,.12)}\",\n\t\t\".sjdha-root.device-web .sjdha-chat-item.system .sjdha-avatar{margin-right:8px}\",\n\t\t\".sjdha-root.device-web .sjdha-chat-item.user .sjdha-avatar{margin-left:8px}\",\n\t\t\".sjdha-root.device-web .sjdha-bubble{padding:10px 12px;border-radius:14px;font-size:14px;line-height:1.5;min-height:16px;box-shadow:0 6px 16px rgba(15,23,42,.05)}\",\n\t\t\".sjdha-root.device-web .sjdha-chat-item.system .sjdha-bubble{background:#fff}\",\n\t\t\".sjdha-root.device-web .sjdha-chat-item.system .sjdha-bubble:before{left:-8px;top:12px;border-top:8px solid transparent;border-bottom:8px solid transparent;border-right:8px solid #fff}\",\n\t\t\".sjdha-root.device-web .sjdha-chat-item.user .sjdha-bubble{background:linear-gradient(135deg,#509aff 0%,#2f7bf3 100%)}\",\n\t\t\".sjdha-root.device-web .sjdha-chat-item.user .sjdha-bubble:after{right:-8px;top:12px;border-top:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid #2f7bf3}\",\n\t\t\".sjdha-root.device-web .sjdha-voice-bubble{min-width:40px;gap:8px;justify-content:space-between}\",\n\t\t\".sjdha-root.device-web .sjdha-voice-icon{width:24px;height:24px}\",\n\t\t\".sjdha-root.device-web .sjdha-input-bar{position:static;height:auto;min-height:auto;padding:10px;gap:10px;background:rgba(255,255,255,.92);box-shadow:0 10px 24px rgba(15,23,42,.08);box-sizing:border-box}\",\n\t\t\".sjdha-root.device-web .sjdha-mode-btn,.sjdha-root.device-web .sjdha-send-btn,.sjdha-root.device-web .sjdha-voice-input{height:38px;border-radius:12px}\",\n\t\t\".sjdha-root.device-web .sjdha-mode-btn{width:36px;font-size:18px}\",\n\t\t\".sjdha-root.device-web .sjdha-input-wrap{height:38px;border-radius:12px;padding:0 10px;background:#f2f5fa;border:none}\",\n\t\t\".sjdha-root.device-web .sjdha-input{padding:0;font-size:13px}\",\n\t\t\".sjdha-root.device-web .sjdha-voice-input{font-size:13px;background:#f2f5fa}\",\n\t\t\".sjdha-root.device-web .sjdha-send-btn{min-width:60px;padding:0 14px;font-size:14px;background:linear-gradient(135deg,#509aff 0%,#2f7bf3 100%)}\",\n\t\t\".sjdha-root.device-web .sjdha-recording-card{gap:12px;padding:24px 30px;border-radius:16px}\",\n\t\t\".sjdha-root.device-web .sjdha-wave{gap:4px;height:32px}\",\n\t\t\".sjdha-root.device-web .sjdha-wave span{width:4px}\",\n\t\t\".sjdha-root.device-web .sjdha-dialog{width:260px;padding:18px;border-radius:14px;box-shadow:0 12px 32px rgba(15,23,42,.22)}\",\n\t\t\".sjdha-root.device-web .sjdha-dialog-content{font-size:15px}\",\n\t\t\".sjdha-root.device-web .sjdha-dialog-btn{height:34px;padding:0 18px;border-radius:10px}\",\n\t\t\".sjdha-root.device-web .sjdha-toast-content{padding:10px 16px;font-size:13px}\",\n\t\t\"@keyframes sjdha-spin{to{transform:rotate(360deg)}}\",\n\t\t\"@keyframes sjdha-pulse{0%{transform:scale(.8);opacity:.8}100%{transform:scale(1.6);opacity:0}}\",\n\t\t\"@keyframes sjdha-voice-play{0%,100%{opacity:1}50%{opacity:.5}}\",\n\t\t\"@keyframes sjdha-wave{0%,100%{height:calc(var(--sjdha-rem) * 0.16);opacity:.45}50%{height:calc(var(--sjdha-rem) * 0.64);opacity:1}}\",\n\t\t\"@media (max-width:768px){.sjdha-root{width:100%!important;height:100dvh!important;max-width:none!important;max-height:none!important;left:0!important;top:0!important;right:0!important;bottom:0!important;border-radius:0}}\"\n\t].join(\"\");\n\tvar style = document.createElement(\"style\");\n\tstyle.id = \"sj-digital-human-adaptive-style\";\n\tstyle.type = \"text/css\";\n\tstyle.textContent = css;\n\tdocument.head.appendChild(style);\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.mountDom = function () {\n\tvar root = document.createElement(\"div\");\n\troot.className = \"sjdha-root\";\n\troot.innerHTML = [\n\t\t'<div class=\"sjdha-video-area\">',\n\t\t' <div class=\"sjdha-digital-human\">',\n\t\t' <video class=\"sjdha-video\" playsinline webkit-playsinline x5-video-player-type=\"h5\" x5-video-player-fullscreen=\"true\" x5-video-orientation=\"portraint\" autoplay loop muted></video>',\n\t\t' <div class=\"sjdha-queue\"></div>',\n\t\t' <button type=\"button\" class=\"sjdha-fullscreen-btn\"></button>',\n\t\t' <div class=\"sjdha-autoplay-overlay\">',\n\t\t' <div class=\"sjdha-manual-play\" style=\"display:none\">',\n\t\t' <div class=\"sjdha-autoplay-icon\">▶</div>',\n\t\t' <span>点击开始对话</span>',\n\t\t' </div>',\n\t\t' <div class=\"sjdha-autoplay-spinner\"></div>',\n\t\t' </div>',\n\t\t' <div class=\"sjdha-ai-response\">',\n\t\t' <div class=\"sjdha-ai-response-label\">正在播报</div>',\n\t\t' <div class=\"sjdha-ai-response-content\"></div>',\n\t\t' </div>',\n\t\t' </div>',\n\t\t'</div>',\n\t\t'<div class=\"sjdha-chat-area\">',\n\t\t' <div class=\"sjdha-chat-list\"><div class=\"sjdha-chat-date\"></div></div>',\n\t\t' <div class=\"sjdha-input-bar\">',\n\t\t' <button type=\"button\" class=\"sjdha-mode-btn\"></button>',\n\t\t' <div class=\"sjdha-input-wrap\"><input class=\"sjdha-input\" type=\"text\" placeholder=\"请输入聊天内容...\"></div>',\n\t\t' <button type=\"button\" class=\"sjdha-voice-input\" style=\"display:none\">按住 说话</button>',\n\t\t' <button type=\"button\" class=\"sjdha-send-btn\">发送</button>',\n\t\t' </div>',\n\t\t'</div>',\n\t\t'<div class=\"sjdha-recording\">',\n\t\t' <div class=\"sjdha-recording-card\">',\n\t\t' <div class=\"sjdha-wave\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div>',\n\t\t' <div>松开 发送</div>',\n\t\t' </div>',\n\t\t'</div>',\n\t\t'<div class=\"sjdha-dialog-overlay\">',\n\t\t' <div class=\"sjdha-dialog\">',\n\t\t' <div class=\"sjdha-dialog-content\">离开会话时间过长,是否重连?</div>',\n\t\t' <div class=\"sjdha-dialog-footer\"><button type=\"button\" class=\"sjdha-dialog-btn\">确认</button></div>',\n\t\t' </div>',\n\t\t'</div>',\n\t\t'<div class=\"sjdha-toast\"><div class=\"sjdha-toast-content\"></div></div>'\n\t].join(\"\");\n\n\t(this.config.container || document.body).appendChild(root);\n\n\tthis.dom.root = root;\n\tthis.dom.videoArea = root.querySelector(\".sjdha-video-area\");\n\tthis.dom.video = root.querySelector(\".sjdha-video\");\n\tthis.dom.queue = root.querySelector(\".sjdha-queue\");\n\tthis.dom.fullscreenBtn = root.querySelector(\".sjdha-fullscreen-btn\");\n\tthis.dom.autoplayOverlay = root.querySelector(\".sjdha-autoplay-overlay\");\n\tthis.dom.manualPlay = root.querySelector(\".sjdha-manual-play\");\n\tthis.dom.autoplaySpinner = root.querySelector(\".sjdha-autoplay-spinner\");\n\tthis.dom.aiResponse = root.querySelector(\".sjdha-ai-response\");\n\tthis.dom.aiResponseContent = root.querySelector(\".sjdha-ai-response-content\");\n\tthis.dom.chatArea = root.querySelector(\".sjdha-chat-area\");\n\tthis.dom.chatDate = root.querySelector(\".sjdha-chat-date\");\n\tthis.dom.chatList = root.querySelector(\".sjdha-chat-list\");\n\tthis.dom.modeBtn = root.querySelector(\".sjdha-mode-btn\");\n\tthis.dom.inputWrap = root.querySelector(\".sjdha-input-wrap\");\n\tthis.dom.input = root.querySelector(\".sjdha-input\");\n\tthis.dom.voiceInput = root.querySelector(\".sjdha-voice-input\");\n\tthis.dom.sendBtn = root.querySelector(\".sjdha-send-btn\");\n\tthis.dom.recording = root.querySelector(\".sjdha-recording\");\n\tthis.dom.dialog = root.querySelector(\".sjdha-dialog-overlay\");\n\tthis.dom.dialogConfirm = root.querySelector(\".sjdha-dialog-btn\");\n\tthis.dom.toast = root.querySelector(\".sjdha-toast\");\n\tthis.dom.toastContent = root.querySelector(\".sjdha-toast-content\");\n\n\tthis.dom.input.value = \"\";\n\tthis.dom.chatDate.textContent = this._formatDateHeader();\n\tthis._refreshModeButton();\n\tthis._refreshFullscreenButton();\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.bindEvent = function () {\n\tvar that = this;\n\n\tthis.dom.fullscreenBtn.addEventListener(\"click\", function (event) {\n\t\tevent.stopPropagation();\n\t\tthat.toggleVideoFullscreen();\n\t});\n\n\tthis.dom.manualPlay.addEventListener(\"click\", function (event) {\n\t\tevent.stopPropagation();\n\t\tthat.handleManualPlay();\n\t});\n\n\tthis.dom.root.addEventListener(\"click\", function () {\n\t\tthat.handleContainerClick();\n\t});\n\n\tthis.dom.sendBtn.addEventListener(\"click\", function () {\n\t\tthat.sendMessage();\n\t});\n\n\tthis.dom.input.addEventListener(\"keyup\", function (event) {\n\t\tif (event.key === \"Enter\") {\n\t\t\tthat.sendMessage();\n\t\t}\n\t});\n\n\tthis.dom.input.addEventListener(\"input\", function () {\n\t\tthat.renderStatus();\n\t});\n\n\tthis.dom.modeBtn.addEventListener(\"click\", function () {\n\t\tthat.toggleInputMode();\n\t});\n\n\tthis.dom.voiceInput.addEventListener(\"touchstart\", function (event) {\n\t\tevent.preventDefault();\n\t\tthat.startVoiceInput();\n\t}, { passive: false });\n\n\tthis.dom.voiceInput.addEventListener(\"touchend\", function (event) {\n\t\tevent.preventDefault();\n\t\tthat.stopVoiceInput();\n\t}, { passive: false });\n\n\tthis.dom.voiceInput.addEventListener(\"touchcancel\", function (event) {\n\t\tevent.preventDefault();\n\t\tthat.stopVoiceInput();\n\t}, { passive: false });\n\n\tthis.dom.voiceInput.addEventListener(\"mousedown\", function (event) {\n\t\tevent.preventDefault();\n\t\tthat.startVoiceInput();\n\t});\n\n\tthis.dom.dialogConfirm.addEventListener(\"click\", function () {\n\t\tthat.onReconnectConfirm();\n\t});\n\n\tthis.dom.videoArea.addEventListener(\"mousedown\", function (event) {\n\t\tthat.handleVideoAreaMouseDown(event);\n\t});\n\n\tthis.resizeHandler = debounce(function () {\n\t\tthat.handleResize();\n\t}, 100);\n\n\tdocument.addEventListener(\"mouseup\", function () {\n\t\tthat.stopVoiceInput();\n\t});\n\tdocument.addEventListener(\"mousemove\", function (event) {\n\t\tthat.onDocMouseMove(event);\n\t});\n\tdocument.addEventListener(\"mouseup\", function () {\n\t\tthat.onDocMouseUp();\n\t});\n\twindow.addEventListener(\"resize\", this.resizeHandler);\n\twindow.addEventListener(\"beforeunload\", function () {\n\t\tthat.destroy();\n\t});\n\n\tthis.dom.video.addEventListener(\"playing\", function () {\n\t\tthat.markVideoReady();\n\t});\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.bootstrap = async function () {\n\ttry {\n\t\tawait this.getSessionId();\n\t\tawait this.getPageDefaultData();\n\t\tthis.startConnection();\n\t} catch (error) {\n\t\tconsole.error(\"[SjDigitalHumanAssistantAdaptive] bootstrap failed\", error);\n\t\tthis.showToast(\"初始化失败,请稍后重试\");\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.renderInitialMessages = function () {\n\tif (this.config.defaultPlayText) {\n\t\tthis.chatMessages.push({ type: \"system\", msg: this.config.defaultPlayText });\n\t\tthis.renderChatList();\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.detectMobileDevice = function () {\n\tif (typeof window === \"undefined\") {\n\t\treturn true;\n\t}\n\tvar narrowViewport = window.innerWidth <= this.config.mobileBreakpoint;\n\tvar coarsePointer = window.matchMedia && window.matchMedia(\"(pointer: coarse)\").matches;\n\tvar hasTouchPoints = navigator.maxTouchPoints > 0 || \"ontouchstart\" in window;\n\tvar mobileUA = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|HarmonyOS|Windows Phone/i.test(navigator.userAgent);\n\treturn !!(narrowViewport || (mobileUA && hasTouchPoints) || coarsePointer);\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.syncDeviceMode = function () {\n\tthis.state.isMobileDevice = this.detectMobileDevice();\n\tthis.updateRemBase();\n\tthis.dom.root.classList.toggle(\"device-mobile\", this.state.isMobileDevice);\n\tthis.dom.root.classList.toggle(\"device-web\", !this.state.isMobileDevice);\n\tthis.dom.root.classList.toggle(\"video-fullscreen\", !!this.state.isVideoFullscreen);\n\tthis.dom.root.classList.toggle(\"video-split\", !this.state.hasAvatarUrl);\n\n\tif (!this.state.isMobileDevice) {\n\t\tthis.dom.root.style.width = this._normalizeSize(this.config.windowWidth) || \"300px\";\n\t\tthis.dom.root.style.height = this._normalizeSize(this.config.windowHeight) || \"550px\";\n\t\tif (!this.state.dragPosition) {\n\t\t\tthis.dom.root.style.right = \"24px\";\n\t\t\tthis.dom.root.style.bottom = \"24px\";\n\t\t}\n\t} else {\n\t\tthis.state.dragPosition = null;\n\t\tthis.dom.root.style.left = \"0\";\n\t\tthis.dom.root.style.top = \"0\";\n\t\tthis.dom.root.style.right = \"0\";\n\t\tthis.dom.root.style.bottom = \"0\";\n\t}\n\n\t// 在全屏模式下保留输入栏可见,但隐藏聊天列表;非全屏时恢复默认显示\n\tif (this.state.isVideoFullscreen) {\n\t\tthis.dom.chatArea.classList.remove(\"hidden\");\n\t\t// 全屏时隐藏聊天列表\n this.dom.chatList.style.display = \"none\";\n\t\t// 保证输入区在全屏下仍可见并按当前模式显示文本/语音控件\n\t\tthis.dom.inputWrap.style.display = this.state.isTextInputMode ? \"block\" : \"none\";\n\t\tthis.dom.sendBtn.style.display = this.state.isTextInputMode ? \"block\" : \"none\";\n\t\tthis.dom.voiceInput.style.display = this.state.isTextInputMode ? \"none\" : \"block\";\n\t} else {\n\t\t// 恢复聊天列表所有子项显示\n\t\tthis.dom.chatList.style.display = \"block\";\n\t\tthis.dom.chatArea.classList.remove(\"hidden\");\n\t}\n\tthis.dom.aiResponse.style.display = this.state.isVideoFullscreen && this.state.currentAiMessage ? \"block\" : \"none\";\n this._refreshFullscreenButton();\n\tthis.dom.fullscreenBtn.style.display = this.state.hasAvatarUrl ? \"flex\" : \"none\";\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.handleResize = function () {\n\tthis.updateRemBase();\n\tthis.syncDeviceMode();\n\tthis.clampDragPositionOnResize();\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.toggleVideoFullscreen = function () {\n\tthis.state.isVideoFullscreen = !this.state.isVideoFullscreen;\n\tthis.syncDeviceMode();\n\tif (!this.state.isVideoFullscreen) {\n\t\tthis.scrollChatToBottom();\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.handleVideoAreaMouseDown = function (event) {\n\tif (this.state.isMobileDevice || event.button !== 0 || this._isInteractiveDragTarget(event.target)) {\n\t\treturn;\n\t}\n\tevent.preventDefault();\n\tvar rect = this.dom.root.getBoundingClientRect();\n\tthis.drag.startClientX = event.clientX;\n\tthis.drag.startClientY = event.clientY;\n\tthis.drag.startLeft = rect.left;\n\tthis.drag.startTop = rect.top;\n\tthis.state.isDragging = true;\n\tthis.state.dragMoved = false;\n\tthis.state.dragPosition = { left: rect.left, top: rect.top };\n\tthis.dom.videoArea.style.cursor = \"grabbing\";\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.onDocMouseMove = function (event) {\n\tif (!this.state.isDragging) {\n\t\treturn;\n\t}\n\tvar dx = event.clientX - this.drag.startClientX;\n\tvar dy = event.clientY - this.drag.startClientY;\n\tif (!this.state.dragMoved && (Math.abs(dx) > 2 || Math.abs(dy) > 2)) {\n\t\tthis.state.dragMoved = true;\n\t}\n\tvar rect = this.dom.root.getBoundingClientRect();\n\tvar next = this._clampPosition(this.drag.startLeft + dx, this.drag.startTop + dy, rect.width, rect.height);\n\tthis.state.dragPosition = next;\n\tthis.dom.root.style.left = next.left + \"px\";\n\tthis.dom.root.style.top = next.top + \"px\";\n\tthis.dom.root.style.right = \"auto\";\n\tthis.dom.root.style.bottom = \"auto\";\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.onDocMouseUp = function () {\n\tif (!this.state.isDragging) {\n\t\treturn;\n\t}\n\tthis.state.isDragging = false;\n\tthis.dom.videoArea.style.cursor = \"grab\";\n\tif (this.state.dragMoved) {\n\t\tvar that = this;\n\t\twindow.addEventListener(\"click\", function blockClick(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\twindow.removeEventListener(\"click\", blockClick, true);\n\t\t}, true);\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.clampDragPositionOnResize = function () {\n\tif (!this.state.dragPosition || this.state.isMobileDevice) {\n\t\treturn;\n\t}\n\tvar rect = this.dom.root.getBoundingClientRect();\n\tvar next = this._clampPosition(this.state.dragPosition.left, this.state.dragPosition.top, rect.width, rect.height);\n\tthis.state.dragPosition = next;\n\tthis.dom.root.style.left = next.left + \"px\";\n\tthis.dom.root.style.top = next.top + \"px\";\n };\n\nSjDigitalHumanAssistantAdaptive.prototype.handleContainerClick = function () {\n\tif (this.state.hasUnmuted) {\n\t\treturn;\n\t}\n\tif (this.dom.video && this.dom.video.muted) {\n\t\tthis.dom.video.muted = false;\n\t\tif (this.dom.video.paused) {\n\t\t\tthis.dom.video.play();\n\t\t}\n\t\tthis.state.hasUnmuted = true;\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.handleManualPlay = async function () {\n\tif (!this.dom.video || !this.state.isMediaReady) {\n\t\treturn;\n\t}\n\ttry {\n\t\tawait this.dom.video.play();\n\t\tthis.dom.video.muted = false;\n\t\tthis.state.isAutoplayBlocked = false;\n\t\tthis.renderAutoplayState();\n\t} catch (error) {\n\t\tthis.showToast(\"视频播放失败,请点击按钮重试\");\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.toggleInputMode = function () {\n\tif (this.state.isTextInputMode && !this.state.isSSEConnected) {\n\t\tthis.showToast(\"消息服务未连接,请稍后再试\");\n\t\treturn;\n\t}\n\tthis.state.isTextInputMode = !this.state.isTextInputMode;\n\tthis._refreshModeButton();\n\tthis.dom.inputWrap.style.display = this.state.isTextInputMode ? \"block\" : \"none\";\n\tthis.dom.sendBtn.style.display = this.state.isTextInputMode ? \"block\" : \"none\";\n\tthis.dom.voiceInput.style.display = this.state.isTextInputMode ? \"none\" : \"block\";\n\tif (!this.state.isTextInputMode) {\n\t\tthis.ensureRecorder();\n\t} else {\n\t\tthis.releaseRecorder();\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.sendMessage = async function () {\n\tvar text = (this.dom.input.value || \"\").replace(/^\\s+|\\s+$/g, \"\");\n\tif (!text) {\n\t\treturn;\n\t}\n\tif (!this.state.isSSEConnected) {\n\t\tthis.showToast(\"消息服务未连接,请稍后再试\");\n\t\treturn;\n\t}\n\tawait this.digitalHumanInterruptTalk();\n\tthis.state.isReceivingReply = false;\n\tthis.state.currentAiMessage = \"\";\n\tvar now = Date.now();\n\tthis.chatMessages.push({\n\t\ttype: \"user\",\n\t\tmsg: text,\n\t\ttimestamp: now,\n\t\tshowTime: this.shouldShowTimeLabel(now)\n\t});\n\tthis.dom.input.value = \"\";\n\tthis.renderStatus();\n\tthis.renderChatList();\n\tthis.scrollChatToBottom();\n\tawait this.digitalHumanChat(text, \"chat\");\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.receiveMessage = function (text) {\n\tvar cleanText = (text || \"\").replace(/^\\s+|\\s+$/g, \"\");\n\tif (!cleanText) {\n\t\treturn;\n\t}\n\tvar last = this.chatMessages[this.chatMessages.length - 1];\n\tif (this.state.isReceivingReply && last && last.type === \"system\") {\n\t\tlast.msg += cleanText;\n\t\tthis.state.currentAiMessage += cleanText;\n\t} else {\n\t\tthis.chatMessages.push({ type: \"system\", msg: cleanText });\n\t\tthis.state.isReceivingReply = true;\n\t\tthis.state.currentAiMessage = cleanText;\n\t}\n\tthis.renderChatList();\n\tthis.scrollChatToBottom();\n\tthis.renderAiResponse();\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.renderChatList = function () {\n\tvar list = this.dom.chatList;\n\tvar avatarStyle = this.state.avatarPic ? ' style=\"background-image:url(' + this._escapeHtml(this.state.avatarPic) + ')\"' : \"\";\n\tvar html = \"\";\n\tfor (var i = 0; i < this.chatMessages.length; i++) {\n\t\tvar msg = this.chatMessages[i];\n\t\tif (!msg) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (msg.type === \"user\" && msg.showTime && msg.timestamp) {\n\t\t\thtml += '<div class=\"sjdha-time-label\"><span>' + this._escapeHtml(this.formatMessageTime(msg.timestamp)) + '</span></div>';\n\t\t}\n\t\tif (msg.type === \"system\" && msg.msg) {\n\t\t\thtml += '<div class=\"sjdha-chat-item system\"><div class=\"sjdha-avatar\"' + avatarStyle + '></div><div class=\"sjdha-bubble\">' + this._escapeHtml(msg.msg) + '</div></div>';\n\t\t} else if (msg.type === \"user\" && (msg.msg || msg.voiceUrl)) {\n\t\t\tif (msg.voiceUrl) {\n\t\t\t\thtml += '<div class=\"sjdha-chat-item user\" data-voice-index=\"' + i + '\"><div class=\"sjdha-avatar\"></div><div class=\"sjdha-bubble sjdha-voice-bubble\"><div>' + this._escapeHtml(String(msg.duration || 0)) + '\"</div><div class=\"sjdha-voice-icon' + (this.state.playingVoiceId === i ? ' playing' : '') + '\"></div></div></div>';\n\t\t\t} else {\n\t\t\t\thtml += '<div class=\"sjdha-chat-item user\"><div class=\"sjdha-avatar\"></div><div class=\"sjdha-bubble\">' + this._escapeHtml(msg.msg) + '</div></div>';\n\t\t\t}\n\t\t}\n\t}\n\t// 如果用户将 .sjdha-chat-date 放入了 chat-list,保留其原始 HTML,避免被覆盖\n\tvar dateHtml = \"\";\n\ttry {\n\t\tif (this.dom.chatDate && this.dom.chatDate.parentElement === list) {\n\t\t\tdateHtml = this.dom.chatDate.outerHTML || \"\";\n\t\t}\n\t} catch (e) {\n\t\tdateHtml = \"\";\n\t}\n\tlist.innerHTML = dateHtml + html;\n\n\t// 重新绑定 chatDate 引用(如果存在于 list 中的话)\n\tif (list.querySelector) {\n\t\tvar newDate = list.querySelector('.sjdha-chat-date');\n\t\tif (newDate) {\n\t\t\tthis.dom.chatDate = newDate;\n\t\t}\n\t}\n\n\tvar voiceNodes = list.querySelectorAll(\"[data-voice-index]\");\n\tvar that = this;\n\tfor (var j = 0; j < voiceNodes.length; j++) {\n\t\tvoiceNodes[j].addEventListener(\"click\", function () {\n\t\t\tvar idx = parseInt(this.getAttribute(\"data-voice-index\"), 10);\n\t\t\tthat.playVoice(that.chatMessages[idx], idx);\n\t\t});\n\t}\n\n\tthis.renderAiResponse();\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.renderAiResponse = function () {\n\tthis.dom.aiResponseContent.textContent = this.state.currentAiMessage || \"\";\n\tthis.dom.aiResponse.style.display = this.state.isVideoFullscreen && this.state.currentAiMessage ? \"block\" : \"none\";\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.scrollChatToBottom = function () {\n\tvar that = this;\n\tsetTimeout(function () {\n\t\tthat.dom.chatList.scrollTop = that.dom.chatList.scrollHeight;\n\t\tthat.dom.aiResponseContent.scrollTop = that.dom.aiResponseContent.scrollHeight;\n\t}, 0);\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.startConnection = function () {\n\tvar that = this;\n\tif (this.state.isConnected || this.state.isConnecting) {\n\t\treturn;\n\t}\n\n\tvar hlsUrl = this.state.currentHlsUrl;\n\tvar rtsUrl = this.state.currentRtsUrl;\n\n\tif (!hlsUrl && !rtsUrl) {\n\t\tif (this.state.defaultVideoUrl) {\n\t\t\tthis.dom.video.src = this.state.defaultVideoUrl;\n\t\t\tthis.state.isMediaReady = true;\n\t\t\tthis.dom.video.play().then(function () {\n\t\t\t\tthat.state.isAutoplayBlocked = false;\n\t\t\t\tthat.renderAutoplayState();\n\t\t\t}).catch(function () {\n\t\t\t\tthat.state.isAutoplayBlocked = true;\n\t\t\t\tthat.renderAutoplayState();\n\t\t\t});\n\t\t}\n\t\treturn;\n\t}\n\n\tthis.state.isConnecting = true;\n\tthis.state.isManualDisconnect = false;\n\tthis.renderStatus();\n\tthis.cleanupVideo();\n\tthis.destroyRts();\n\n\tif (rtsUrl) {\n\t\tthis.tryPlayWithRts(rtsUrl, hlsUrl);\n\t\treturn;\n\t}\n\tthis.playWithHls(hlsUrl);\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.tryPlayWithRts = function (rtsUrl, hlsUrl) {\n\tvar AliRtsCtor = this.config.aliRtsClass;\n\tvar that = this;\n\tif (!AliRtsCtor || !AliRtsCtor.createClient) {\n\t\tthis.playWithHls(hlsUrl);\n\t\treturn;\n\t}\n\tthis.stream.aliRts = AliRtsCtor.createClient();\n\tif (this.stream.aliRts.on) {\n\t\tthis.stream.aliRts.on(\"onError\", function (error) {\n\t\t\tconsole.error(\"[SjDigitalHumanAssistantAdaptive] RTS error\", error);\n\t\t});\n\t}\n\tthis.stream.aliRts.isSupport({ isReceiveVideo: true }).then(function () {\n\t\tthat.subscribeRts(rtsUrl, hlsUrl);\n\t}).catch(function () {\n\t\tthat.destroyRts();\n\t\tthat.playWithHls(hlsUrl);\n\t});\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.subscribeRts = function (rtsUrl, hlsUrl) {\n\tvar that = this;\n\tthis.stream.aliRts.subscribe(rtsUrl, {\n\t\tmediaTimeout: 6000,\n\t\tretryTimes: 3,\n\t\tretryInterval: 2000\n\t}).then(function (remoteStream) {\n\t\tif (remoteStream && remoteStream.play) {\n\t\t\tremoteStream.play(that.dom.video);\n\t\t}\n\t\tthat.state.isMediaReady = true;\n\t\tthat.state.isConnected = true;\n\t\tthat.state.isConnecting = false;\n\t\tthat.state.currentReconnectTimes = 0;\n\t\tthat.clearReconnectTimer();\n\t\tthat.dom.video.play().then(function () {\n\t\t\tthat.state.isAutoplayBlocked = false;\n\t\t\tthat.renderAutoplayState();\n\t\t}).catch(function () {\n\t\t\tthat.state.isAutoplayBlocked = true;\n\t\t\tthat.renderAutoplayState();\n\t\t});\n\t\tthat.renderStatus();\n\t}).catch(function () {\n\t\tthat.destroyRts();\n\t\tthat.playWithHls(hlsUrl);\n\t});\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.playWithHls = function (hlsUrl) {\n\tvar that = this;\n\tvar HlsCtor = this.config.hlsClass;\n\tif (!hlsUrl) {\n\t\tthis.state.isConnecting = false;\n\t\tthis.renderStatus();\n\t\tthis.reconnect();\n\t\treturn;\n\t}\n\n\tif (this.stream.hls && this.stream.hls.destroy) {\n\t\tthis.stream.hls.destroy();\n\t\tthis.stream.hls = null;\n\t}\n\n\tif (HlsCtor && HlsCtor.isSupported && HlsCtor.isSupported()) {\n\t\tthis.stream.hls = new HlsCtor({\n\t\t\tmaxBufferLength: 30,\n\t\t\tmaxMaxBufferLength: 60,\n\t\t\tliveSyncDurationCount: 2,\n\t\t\tfragLoadingMaxRetry: 10,\n\t\t\tfragLoadingRetryDelay: 1000,\n\t\t\tmanifestLoadingMaxRetry: 4,\n\t\t\tlevelLoadingMaxRetry: 4,\n\t\t\tenableWorker: true,\n\t\t\tlowLatencyMode: false\n\t\t});\n\t\tthis.stream.hls.loadSource(hlsUrl);\n\t\tthis.stream.hls.attachMedia(this.dom.video);\n\t\tthis.stream.hls.on(HlsCtor.Events.MANIFEST_PARSED, function () {\n\t\t\tthat.state.isMediaReady = true;\n\t\t\tthat.dom.video.play().then(function () {\n\t\t\t\tthat.state.isAutoplayBlocked = false;\n\t\t\t\tthat.renderAutoplayState();\n\t\t\t}).catch(function () {\n\t\t\t\tthat.state.isAutoplayBlocked = true;\n\t\t\t\tthat.renderAutoplayState();\n\t\t\t});\n\t\t});\n\t\tthis.stream.hls.on(HlsCtor.Events.ERROR, function (event, data) {\n\t\t\tif (data && data.fatal) {\n\t\t\t\tthat.state.isConnected = false;\n\t\t\t\tthat.state.isConnecting = false;\n\t\t\t\tthat.renderStatus();\n\t\t\t\tthat.reconnect();\n\t\t\t}\n\t\t});\n\t} else if (this.dom.video.canPlayType(\"application/vnd.apple.mpegurl\")) {\n\t\tthis.dom.video.src = hlsUrl;\n\t\tthis.dom.video.load();\n\t\tthis.dom.video.addEventListener(\"loadedmetadata\", function onLoaded() {\n\t\t\tthat.dom.video.removeEventListener(\"loadedmetadata\", onLoaded);\n\t\t\tthat.state.isConnected = true;\n\t\t\tthat.state.isConnecting = false;\n\t\t\tthat.state.isMediaReady = true;\n\t\t\tthat.state.currentReconnectTimes = 0;\n\t\t\tthat.clearReconnectTimer();\n\t\t\tthat.renderStatus();\n\t\t});\n\t\tthis.dom.video.play().then(function () {\n\t\t\tthat.state.isAutoplayBlocked = false;\n\t\t\tthat.renderAutoplayState();\n\t\t}).catch(function () {\n\t\t\tthat.state.isAutoplayBlocked = true;\n\t\t\tthat.renderAutoplayState();\n\t\t});\n\t} else {\n\t\tthis.state.isConnecting = false;\n\t\tthis.renderStatus();\n\t\tthis.reconnect();\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.markVideoReady = function () {\n\tthis.state.isConnected = true;\n\tthis.state.isConnecting = false;\n\tthis.state.currentReconnectTimes = 0;\n\tthis.state.isMediaReady = true;\n\tthis.clearReconnectTimer();\n\tthis.renderStatus();\n\tthis.state.isAutoplayBlocked = false;\n\tthis.state.needManualPlay = false;\n\tthis.renderAutoplayState();\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.renderStatus = function () {\n\tthis.dom.sendBtn.disabled = !this.state.isSSEConnected || !(this.dom.input.value || \"\").replace(/^\\s+|\\s+$/g, \"\");\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.renderAutoplayState = function () {\n\tvar overlayVisible = this.state.isAutoplayBlocked;\n\tthis.dom.autoplayOverlay.classList.toggle(\"hidden\", !overlayVisible);\n\tthis.dom.manualPlay.style.display = this.state.needManualPlay ? \"flex\" : \"none\";\n\tthis.dom.autoplaySpinner.style.display = this.state.needManualPlay ? \"none\" : \"block\";\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.reconnect = function () {\n\tvar that = this;\n\tif (this.state.isManualDisconnect || this.state.isConnected || this.state.isConnecting || this.state.isWaitingReconnect) {\n\t\treturn;\n\t}\n\tif (this.config.maxReconnectTimes !== -1 && this.state.currentReconnectTimes >= this.config.maxReconnectTimes) {\n\t\treturn;\n\t}\n\tthis.state.isWaitingReconnect = true;\n\tthis.state.currentReconnectTimes += 1;\n\tthis.stream.reconnectTimer = setTimeout(function () {\n\t\tthat.state.isWaitingReconnect = false;\n\t\tif (!that.state.isConnected && !that.state.isConnecting) {\n\t\t\tthat.startConnection();\n\t\t}\n\t}, this.config.reconnectInterval * 1000);\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.clearReconnectTimer = function () {\n\tif (this.stream.reconnectTimer) {\n\t\tclearTimeout(this.stream.reconnectTimer);\n\t\tthis.stream.reconnectTimer = null;\n\t}\n\tthis.state.isWaitingReconnect = false;\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.startSSE = function () {\n\tvar that = this;\n\tif (!this.state.chatSessionId) {\n\t\treturn;\n\t}\n\tfetch(this._buildUrl(\"/stream_llm\"), {\n\t\tmethod: \"POST\",\n\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\tbody: JSON.stringify({\n\t\t\tchatSessionId: parseInt(this.state.chatSessionId, 10),\n\t\t\tsessionid: parseInt(this.state.sessionid || 0, 10)\n\t\t})\n\t}).then(function (response) {\n\t\tthat.state.isSSEConnected = true;\n\t\tthat.sseReconnectCount = 0;\n\t\tthat.renderStatus();\n\t\tif (!that.state.hasAvatarUrl) {\n\t\t\tthat.fetchSessionStatus();\n\t\t}\n\t\tif (!response.body) {\n\t\t\treturn;\n\t\t}\n\t\tthat.stream.sseReader = response.body.getReader();\n\t\tthat.consumeSSE();\n\t}).catch(function (error) {\n\t\tconsole.error(\"[SjDigitalHumanAssistantAdaptive] SSE failed\", error);\n\t\tthat.state.isSSEConnected = false;\n\t\tthat.renderStatus();\n\t});\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.consumeSSE = function () {\n\tvar that = this;\n\tvar buffer = \"\";\n\tfunction read() {\n\t\tif (!that.stream.sseReader) {\n\t\t\treturn;\n\t\t}\n\t\tthat.stream.sseReader.read().then(function (result) {\n\t\t\tif (result.done) {\n\t\t\t\tthat.state.isSSEConnected = false;\n\t\t\t\tthat.renderStatus();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbuffer += new TextDecoder().decode(result.value);\n\t\t\tvar lines = buffer.split(\"\\n\");\n\t\t\tbuffer = lines.pop() || \"\";\n\t\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\t\tthat.handleSSELine(lines[i]);\n\t\t\t}\n\t\t\tread();\n\t\t}).catch(function () {\n\t\t\tthat.reconnectSSE();\n\t\t});\n\t}\n\tread();\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.handleSSELine = function (line) {\n\tif (!line || line.indexOf(\"data:\") !== 0) {\n\t\treturn;\n\t}\n\tvar rawData = line.slice(5).replace(/^\\s+|\\s+$/g, \"\");\n\tif (!rawData || rawData === \"<endofanswer>\") {\n\t\treturn;\n\t}\n\tif (rawData.indexOf(\"[ERROR]\") !== -1) {\n\t\tif (rawData === \"[ERROR] Disconnected by server\") {\n\t\t\tthis.promptReconnect();\n\t\t\treturn;\n\t\t}\n\t\tthis.reconnectSSE();\n\t\treturn;\n\t}\n\ttry {\n\t\tvar jsonData = JSON.parse(rawData);\n\t\tif (jsonData && jsonData.text) {\n\t\t\tif (jsonData.text.indexOf(\"[ERROR]\") !== -1) {\n\t\t\t\tthis.reconnectSSE();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.receiveMessage(jsonData.text);\n\t\t\treturn;\n\t\t}\n\t\tif (typeof jsonData === \"string\") {\n\t\t\tthis.receiveMessage(jsonData);\n\t\t\treturn;\n\t\t}\n\t} catch (error) {\n\t\tthis.receiveMessage(rawData);\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.reconnectSSE = function () {\n\tvar that = this;\n\tif (this.sseReconnectCount >= 5) {\n\t\treturn;\n\t}\n\tthis.sseReconnectCount += 1;\n\tif (this.stream.sseReader) {\n\t\tthis.stream.sseReader.cancel();\n\t\tthis.stream.sseReader = null;\n\t}\n\tthis.state.isSSEConnected = false;\n\tthis.renderStatus();\n\tif (this.stream.sseReconnectTimer) {\n\t\tclearTimeout(this.stream.sseReconnectTimer);\n\t}\n\tthis.stream.sseReconnectTimer = setTimeout(function () {\n\t\tthat.startSSE();\n\t}, 1000);\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.promptReconnect = function () {\n\tvar that = this;\n\tthis.state.showReconnectDialog = true;\n\tthis.dom.dialog.classList.add(\"show\");\n\tthis.state.isConnected = false;\n\tthis.state.isMediaReady = false;\n\tthis.state.isAutoplayBlocked = true;\n\tthis.state.isConnecting = false;\n\tthis.state.isSSEConnected = false;\n\tthis.renderAutoplayState();\n\tthis.renderStatus();\n\tif (this.stream.sseReader) {\n\t\tthis.stream.sseReader.cancel();\n\t\tthis.stream.sseReader = null;\n\t}\n\tif (this.stream.hls && this.stream.hls.destroy) {\n\t\tthis.stream.hls.destroy();\n\t\tthis.stream.hls = null;\n\t}\n\tthis.destroyRts();\n\tthis.cleanupVideo();\n\tthis.reconnectDialogCallback = async function () {\n\t\tawait that.getSessionId();\n\t\tthat.startConnection();\n\t};\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.onReconnectConfirm = async function () {\n\tthis.state.showReconnectDialog = false;\n\tthis.dom.dialog.classList.remove(\"show\");\n\tif (this.reconnectDialogCallback) {\n\t\tawait this.reconnectDialogCallback();\n\t\tthis.reconnectDialogCallback = null;\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.digitalHumanChat = async function (text, type) {\n\tif (!this.state.isSSEConnected) {\n\t\treturn;\n\t}\n\ttype = type || \"echo\";\n\ttry {\n\t\tawait this._request(\"/human\", \"POST\", {\n\t\t\tchatSessionId: parseInt(this.state.chatSessionId, 10),\n\t\t\tsessionid: parseInt(this.state.sessionid || 0, 10),\n\t\t\ttype: type,\n\t\t\ttext: text\n\t\t});\n\t} catch (error) {\n\t\tconsole.error(\"[SjDigitalHumanAssistantAdaptive] send chat failed\", error);\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.digitalHumanInterruptTalk = async function () {\n\tif (!this.state.chatSessionId) {\n\t\treturn;\n\t}\n\ttry {\n\t\tawait this._request(\"/interrupt_talk\", \"POST\", {\n\t\t\tchatSessionId: parseInt(this.state.chatSessionId, 10),\n\t\t\tsessionid: parseInt(this.state.sessionid || 0, 10)\n\t\t});\n\t} catch (error) {\n\t\tconsole.error(\"[SjDigitalHumanAssistantAdaptive] interrupt failed\", error);\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.getPageDefaultData = async function () {\n\tvar response = await fetch(this._buildUrl(\"/daxi/avatar/info?id=\" + this.config.avatarId), {\n\t\tmethod: \"GET\"\n\t});\n\tif (!response.ok) {\n\t\tthrow new Error(\"get default data failed\");\n\t}\n\tvar result = await response.json();\n\tvar entity = result && result.data && result.data.entities ? result.data.entities[0] : null;\n\tif (!entity) {\n\t\treturn;\n\t}\n\tthis.state.posterBgUrl = entity.imageDefault || \"\";\n\tthis.state.videoEleBg = entity.coverImageUrl || \"\";\n\tthis.state.defaultVideoUrl = entity.videoDefault || \"\";\n\tthis.state.avatarPic = entity.characterAvatar || \"\";\n\tif (this.state.posterBgUrl) {\n\t\tthis.dom.video.setAttribute(\"poster\", this.state.posterBgUrl);\n\t}\n\tif (this.state.videoEleBg) {\n\t\tthis.dom.videoArea.style.backgroundImage = \"url(\" + this.state.videoEleBg + \")\";\n\t}\n\tthis.renderChatList();\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.getSessionId = async function () {\n\tvar result = await this._request(\"/connect\", \"POST\", {\n\t\taccessToken: this.config.accessToken\n\t});\n\tthis.state.chatSessionId = result && result.chatSessionId != null ? String(result.chatSessionId) : \"\";\n\tthis.state.sessionid = result && result.sessionid != null ? String(result.sessionid) : \"\";\n\tif (this.state.chatSessionId) {\n\t\tthis.startSSE();\n\t}\n\tif (result && result.sessionid != null && Number(result.sessionid) >= 0) {\n\t\tvar urlItem = result.sessionid && Number(result.sessionid) === 0 ? result.sessionid : \"\";\n\t\tif (result.hlsAvatarUrl) {\n\t\t\tthis.state.currentRtsUrl = \"artc://\" + String(result.hlsAvatarUrl).replace(/^https:\\/\\//, \"\").replace(/\\.m3u8$/, \"\") + urlItem;\n\t\t}\n\t}\n\tif (result && result.hlsAvatarUrl) {\n\t\tthis.state.currentHlsUrl = result.hlsAvatarUrl;\n\t\tthis.state.hasAvatarUrl = true;\n\t} else {\n\t\tthis.state.currentHlsUrl = \"\";\n\t\tthis.state.currentRtsUrl = \"\";\n\t\tthis.state.hasAvatarUrl = false;\n\t\tthis.state.isVideoFullscreen = false;\n\t}\n\tthis.syncDeviceMode();\n\treturn result;\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.fetchSessionStatus = async function () {\n\ttry {\n\t\tvar result = await this._request(\"/session_status\", \"GET\");\n\t\tvar activeSessions = result && result.active_chat_sessions ? result.active_chat_sessions : 0;\n\t\tvar maxSessions = result && result.max_sessions ? result.max_sessions : 0;\n\t\tvar waitingCount = activeSessions - maxSessions;\n\t\tthis.state.queueCount = waitingCount > 0 ? waitingCount : 0;\n\t\tthis.dom.queue.textContent = this.state.queueCount ? \"语音回复排队中,前方\" + this.state.queueCount + \"人\" : \"\";\n\t\tthis.dom.queue.style.display = this.state.queueCount ? \"block\" : \"none\";\n\t} catch (error) {\n\t\tconsole.error(\"[SjDigitalHumanAssistantAdaptive] session status failed\", error);\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.ensureRecorder = async function () {\n\tif (this.audio.mediaStream || this.audio.permissionPromise) {\n\t\treturn this.audio.permissionPromise || Promise.resolve(true);\n\t}\n\tvar that = this;\n\tthis.audio.permissionPromise = navigator.mediaDevices.getUserMedia({ audio: true }).then(function (stream) {\n\t\tthat.audio.mediaStream = stream;\n\t\tthat.audio.permissionPromise = null;\n\t\treturn true;\n\t}).catch(function () {\n\t\tthat.audio.permissionPromise = null;\n\t\tthat.showToast(\"无法访问麦克风\");\n\t\treturn false;\n\t});\n\treturn this.audio.permissionPromise;\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.startVoiceInput = async function () {\n\tif (this.state.isRecording) {\n\t\treturn;\n\t}\n\tthis.stopRequestedBeforeStart = false;\n\tthis.isButtonPressed = true;\n\tif (this.dom.video) {\n\t\tthis.dom.video.muted = true;\n\t}\n\tawait this.digitalHumanInterruptTalk();\n\tif (this.stopRequestedBeforeStart || !this.isButtonPressed) {\n\t\tthis.isButtonPressed = false;\n\t\treturn;\n\t}\n\tvar ready = await this.ensureRecorder();\n\tif (!ready || this.stopRequestedBeforeStart || !this.isButtonPressed) {\n\t\tthis.isButtonPressed = false;\n\t\treturn;\n\t}\n\tthis.beginRecordStream();\n\tthis.state.isRecording = true;\n\tthis.dom.recording.classList.add(\"show\");\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.beginRecordStream = function () {\n\tvar AudioContextCtor = window.AudioContext || window.webkitAudioContext;\n\tif (!this.audio.mediaStream || !AudioContextCtor) {\n\t\treturn;\n\t}\n\tthis.audio.audioContext = new AudioContextCtor();\n\tthis.audio.sourceNode = this.audio.audioContext.createMediaStreamSource(this.audio.mediaStream);\n\tthis.audio.processorNode = this.audio.audioContext.createScriptProcessor(4096, 1, 1);\n\tthis.audio.chunks = [];\n\tthis.audio.startTime = Date.now();\n\tvar that = this;\n\tthis.audio.processorNode.onaudioprocess = function (event) {\n\t\tvar input = event.inputBuffer.getChannelData(0);\n\t\tthat.audio.chunks.push(new Float32Array(input));\n\t};\n\tthis.audio.sourceNode.connect(this.audio.processorNode);\n\tthis.audio.processorNode.connect(this.audio.audioContext.destination);\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.stopVoiceInput = function () {\n\tthis.stopRequestedBeforeStart = true;\n\tthis.isButtonPressed = false;\n\tif (this.dom.video) {\n\t\tthis.dom.video.muted = false;\n\t}\n\tif (!this.state.isRecording) {\n\t\treturn;\n\t}\n\tthis.state.isRecording = false;\n\tthis.dom.recording.classList.remove(\"show\");\n\tvar duration = Math.round((Date.now() - this.audio.startTime) / 1000);\n\tvar blob = this.finishRecordStream();\n\tif (!blob || duration < 1) {\n\t\tthis.showToast(\"录音时间太短\");\n\t\treturn;\n\t}\n\tthis.sendVoiceMessage(blob, duration);\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.finishRecordStream = function () {\n\tif (!this.audio.audioContext) {\n\t\treturn null;\n\t}\n\tif (this.audio.processorNode) {\n\t\tthis.audio.processorNode.disconnect();\n\t\tthis.audio.processorNode = null;\n\t}\n\tif (this.audio.sourceNode) {\n\t\tthis.audio.sourceNode.disconnect();\n\t\tthis.audio.sourceNode = null;\n\t}\n\tvar sampleRate = this.audio.audioContext.sampleRate;\n\tthis.audio.audioContext.close();\n\tthis.audio.audioContext = null;\n\tvar merged = this.mergeAudioChunks(this.audio.chunks);\n\tthis.audio.chunks = [];\n\tif (!merged.length) {\n\t\treturn null;\n\t}\n\tvar downsampled = this.downsampleBuffer(merged, sampleRate, 16000);\n\treturn this.encodeWav(downsampled, 16000);\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.releaseRecorder = function () {\n\tthis.stopRequestedBeforeStart = true;\n\tthis.isButtonPressed = false;\n\tthis.state.isRecording = false;\n\tif (this.dom.recording) {\n\t\tthis.dom.recording.classList.remove(\"show\");\n\t}\n\tif (this.audio.processorNode) {\n\t\tthis.audio.processorNode.disconnect();\n\t\tthis.audio.processorNode = null;\n\t}\n\tif (this.audio.sourceNode) {\n\t\tthis.audio.sourceNode.disconnect();\n\t\tthis.audio.sourceNode = null;\n\t}\n\tif (this.audio.audioContext) {\n\t\tthis.audio.audioContext.close();\n\t\tthis.audio.audioContext = null;\n\t}\n\tif (this.audio.mediaStream) {\n\t\tvar tracks = this.audio.mediaStream.getTracks();\n\t\tfor (var i = 0; i < tracks.length; i++) {\n\t\t\ttracks[i].stop();\n\t\t}\n\t\tthis.audio.mediaStream = null;\n\t}\n\tthis.audio.permissionPromise = null;\n\tthis.audio.chunks = [];\n\tif (this.dom.video) {\n\t\tthis.dom.video.muted = false;\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.sendVoiceMessage = async function (blob, durationSec) {\n\tvar voiceUrl = URL.createObjectURL(blob);\n\tvar now = Date.now();\n\tthis.chatMessages.push({\n\t\ttype: \"user\",\n\t\tmsg: \"[语音]\",\n\t\ttimestamp: now,\n\t\tshowTime: this.shouldShowTimeLabel(now),\n\t\tvoiceUrl: voiceUrl,\n\t\tduration: durationSec\n\t});\n\tthis.renderChatList();\n\tthis.scrollChatToBottom();\n\ttry {\n\t\tvar formData = new FormData();\n\t\tformData.append(\"audio\", blob, \"recording.wav\");\n\t\tformData.append(\"duration\", String(durationSec));\n\t\tformData.append(\"chatSessionId\", this.state.chatSessionId);\n\t\tformData.append(\"sessionid\", this.state.sessionid);\n\t\tvar response = await fetch(this._buildUrl(\"/stt\"), {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: formData\n\t\t});\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(\"voice post failed\");\n\t\t}\n\t\tvar result = await response.json();\n\t\tif (result && result.result) {\n\t\t\tawait this.digitalHumanChat(String(result.result).replace(/^\\s+|\\s+$/g, \"\"), \"chat\");\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"[SjDigitalHumanAssistantAdaptive] send voice failed\", error);\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.playVoice = async function (msg, idx) {\n\tvar that = this;\n\tif (!msg || !msg.voiceUrl) {\n\t\treturn;\n\t}\n\tif (this.audio.currentVoiceAudio) {\n\t\tthis.audio.currentVoiceAudio.pause();\n\t\tthis.audio.currentVoiceAudio = null;\n\t}\n\tif (this.state.playingVoiceId === idx) {\n\t\tthis.state.playingVoiceId = null;\n\t\tthis.renderChatList();\n\t\treturn;\n\t}\n\tawait this.digitalHumanInterruptTalk();\n\tthis.state.playingVoiceId = idx;\n\tthis.renderChatList();\n\tvar audio = new Audio(msg.voiceUrl);\n\tthis.audio.currentVoiceAudio = audio;\n\taudio.play();\n\taudio.onended = function () {\n\t\tthat.state.playingVoiceId = null;\n\t\tthat.audio.currentVoiceAudio = null;\n\t\tthat.renderChatList();\n\t};\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.showToast = function (message) {\n\tvar that = this;\n\tthis.state.toastMessage = message;\n\tthis.dom.toastContent.textContent = message;\n\tthis.dom.toast.classList.add(\"show\");\n\tif (this.toastTimer) {\n\t\tclearTimeout(this.toastTimer);\n\t}\n\tthis.toastTimer = setTimeout(function () {\n\t\tthat.dom.toast.classList.remove(\"show\");\n\t}, 2000);\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.cleanupVideo = function () {\n\tthis.dom.video.pause();\n\tthis.dom.video.srcObject = null;\n\tthis.dom.video.src = \"\";\n\tthis.dom.video.load();\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.destroyRts = function () {\n\tif (this.stream.aliRts && this.stream.aliRts.unsubscribe) {\n\t\ttry {\n\t\t\tthis.stream.aliRts.unsubscribe();\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[SjDigitalHumanAssistantAdaptive] unsubscribe rts failed\", error);\n\t\t}\n\t}\n\tthis.stream.aliRts = null;\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.destroy = function () {\n\tif (this.stream.sseReader) {\n\t\tthis.stream.sseReader.cancel();\n\t\tthis.stream.sseReader = null;\n\t}\n\tif (this.stream.sseReconnectTimer) {\n\t\tclearTimeout(this.stream.sseReconnectTimer);\n\t}\n\tthis.clearReconnectTimer();\n\tthis.destroyRts();\n\tif (this.stream.hls && this.stream.hls.destroy) {\n\t\tthis.stream.hls.destroy();\n\t\tthis.stream.hls = null;\n\t}\n\tif (this.audio.currentVoiceAudio) {\n\t\tthis.audio.currentVoiceAudio.pause();\n\t}\n\tthis.releaseRecorder();\n // 清理视频元素\n if (this.dom.video) {\n this.dom.video.pause();\n this.dom.video.srcObject = null;\n this.dom.video.src = '';\n this.dom.video.load();\n }\n\tif (this.dom.root && this.dom.root.parentNode) {\n\t\tthis.dom.root.parentNode.removeChild(this.dom.root);\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype._request = async function (path, method, data) {\n\tvar requestInit = {\n\t\tmethod: method || \"GET\",\n\t\theaders: {}\n\t};\n\tif (requestInit.method !== \"GET\") {\n\t\trequestInit.headers[\"Content-Type\"] = \"application/json\";\n\t\trequestInit.body = JSON.stringify(data || {});\n\t}\n\tvar response = await fetch(this._buildUrl(path), requestInit);\n\tif (!response.ok) {\n\t\tthrow new Error(\"request failed: \" + response.status);\n\t}\n\treturn response.json();\n};\n\nSjDigitalHumanAssistantAdaptive.prototype._buildUrl = function (path) {\n\tvar ts = String(Math.floor(Date.now() / 1000));\n\tvar separator = path.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n\tvar sign = this._md5(this.config.secretKey + ts);\n\treturn this.config.baseUrl.replace(/\\/$/, \"\") + path + separator + \"timestamp=\" + encodeURIComponent(ts) + \"&sign=\" + encodeURIComponent(sign);\n};\n\nSjDigitalHumanAssistantAdaptive.prototype._normalizeSize = function (value) {\n\tif (value === undefined || value === null || value === \"\") {\n\t\treturn undefined;\n\t}\n\treturn typeof value === \"number\" ? value + \"px\" : String(value);\n};\n\nSjDigitalHumanAssistantAdaptive.prototype._getRemBase = function () {\n\tif (typeof window === \"undefined\") {\n\t\treturn 50;\n\t}\n\tvar viewportWidth = 375;\n\tif (window.visualViewport && window.visualViewport.width) {\n\t\tviewportWidth = window.visualViewport.width;\n\t} else if (window.innerWidth) {\n\t\tviewportWidth = window.innerWidth;\n\t} else if (document.documentElement && document.documentElement.clientWidth) {\n\t\tviewportWidth = document.documentElement.clientWidth;\n\t}\n\tvar width = Math.max(320, Math.min(viewportWidth, 750));\n\treturn width / 7.5;\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.updateRemBase = function () {\n\tif (!this.dom || !this.dom.root) {\n\t\treturn;\n\t}\n\tvar isMobileDevice = this.detectMobileDevice();\n\tthis.dom.root.style.setProperty(\"--sjdha-rem\", (isMobileDevice ? this._getRemBase() : 50) + \"px\");\n};\n\nSjDigitalHumanAssistantAdaptive.prototype._isInteractiveDragTarget = function (target) {\n\treturn !!(target && target.closest && target.closest(\"button,input,.sjdha-manual-play\"));\n};\n\nSjDigitalHumanAssistantAdaptive.prototype._clampPosition = function (left, top, width, height) {\n\tvar maxLeft = Math.max(0, window.innerWidth - width);\n\tvar maxTop = Math.max(0, window.innerHeight - height);\n\treturn {\n\t\tleft: Math.max(0, Math.min(left, maxLeft)),\n\t\ttop: Math.max(0, Math.min(top, maxTop))\n\t};\n};\n\nSjDigitalHumanAssistantAdaptive.prototype._refreshModeButton = function () {\n\tthis.dom.modeBtn.style.cssText = this.state.isTextInputMode ? \"background: url('https://szr-data.xiu361.cn/img/szr_video/szr_button/voice-btn.png') no-repeat center center;background-size: contain;\" : \"background: url('https://szr-data.xiu361.cn/img/szr_video/szr_button/text-btn.png') no-repeat center center;background-size: contain;\";\n};\n\nSjDigitalHumanAssistantAdaptive.prototype._refreshFullscreenButton = function () {\n\tthis.dom.fullscreenBtn.style.cssText = this.state.isVideoFullscreen ? \"background: url('https://szr-data.xiu361.cn/img/szr_video/szr_button/reduce-btn.png') no-repeat center center;background-size: contain;\" : \"background: url('https://szr-data.xiu361.cn/img/szr_video/szr_button/magnify-btn.png') no-repeat center center;background-size: contain;\";\n};\n\nSjDigitalHumanAssistantAdaptive.prototype._formatDateHeader = function () {\n\tvar now = new Date();\n\treturn \"今天 \" + now.getFullYear() + \"年\" + (now.getMonth() + 1) + \"月\" + now.getDate() + \"日\";\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.formatMessageTime = function (timestamp) {\n\tvar date = new Date(timestamp);\n\tvar hours = date.getHours();\n\tvar minutes = String(date.getMinutes()).padStart(2, \"0\");\n\tvar period = hours < 12 ? \"上午\" : \"下午\";\n\tvar displayHour = hours < 12 ? hours : (hours === 12 ? 12 : hours - 12);\n\treturn period + \" \" + displayHour + \":\" + minutes;\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.shouldShowTimeLabel = function (currentTimestamp) {\n\tfor (var i = this.chatMessages.length - 1; i >= 0; i--) {\n\t\tvar msg = this.chatMessages[i];\n\t\tif (msg && msg.type === \"user\" && msg.timestamp) {\n\t\t\treturn currentTimestamp - msg.timestamp > 180000;\n\t\t}\n\t}\n\treturn false;\n};\n\nSjDigitalHumanAssistantAdaptive.prototype._isIOSWechat = function () {\n\treturn /iPhone|iPad|iPod/i.test(navigator.userAgent) && /MicroMessenger/i.test(navigator.userAgent);\n};\n\nSjDigitalHumanAssistantAdaptive.prototype._escapeHtml = function (value) {\n\treturn String(value == null ? \"\" : value)\n\t\t.replace(/&/g, \"&amp;\")\n\t\t.replace(/</g, \"&lt;\")\n\t\t.replace(/>/g, \"&gt;\")\n\t\t.replace(/\\\"/g, \"&quot;\")\n\t\t.replace(/'/g, \"&#39;\");\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.mergeAudioChunks = function (chunks) {\n\tvar length = 0;\n\tvar i;\n\tfor (i = 0; i < chunks.length; i++) {\n\t\tlength += chunks[i].length;\n\t}\n\tvar result = new Float32Array(length);\n\tvar offset = 0;\n\tfor (i = 0; i < chunks.length; i++) {\n\t\tresult.set(chunks[i], offset);\n\t\toffset += chunks[i].length;\n\t}\n\treturn result;\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.downsampleBuffer = function (buffer, sampleRate, outSampleRate) {\n\tif (outSampleRate === sampleRate) {\n\t\treturn buffer;\n\t}\n\tvar ratio = sampleRate / outSampleRate;\n\tvar newLength = Math.round(buffer.length / ratio);\n\tvar result = new Float32Array(newLength);\n\tvar offsetResult = 0;\n\tvar offsetBuffer = 0;\n\twhile (offsetResult < result.length) {\n\t\tvar nextOffsetBuffer = Math.round((offsetResult + 1) * ratio);\n\t\tvar accum = 0;\n\t\tvar count = 0;\n\t\tvar i;\n\t\tfor (i = offsetBuffer; i < nextOffsetBuffer && i < buffer.length; i++) {\n\t\t\taccum += buffer[i];\n\t\t\tcount += 1;\n\t\t}\n\t\tresult[offsetResult] = accum / count;\n\t\toffsetResult += 1;\n\t\toffsetBuffer = nextOffsetBuffer;\n\t}\n\treturn result;\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.encodeWav = function (samples, sampleRate) {\n\tvar buffer = new ArrayBuffer(44 + samples.length * 2);\n\tvar view = new DataView(buffer);\n\tthis.writeString(view, 0, \"RIFF\");\n\tview.setUint32(4, 36 + samples.length * 2, true);\n\tthis.writeString(view, 8, \"WAVE\");\n\tthis.writeString(view, 12, \"fmt \");\n\tview.setUint32(16, 16, true);\n\tview.setUint16(20, 1, true);\n\tview.setUint16(22, 1, true);\n\tview.setUint32(24, sampleRate, true);\n\tview.setUint32(28, sampleRate * 2, true);\n\tview.setUint16(32, 2, true);\n\tview.setUint16(34, 16, true);\n\tthis.writeString(view, 36, \"data\");\n\tview.setUint32(40, samples.length * 2, true);\n\tthis.floatTo16BitPCM(view, 44, samples);\n\treturn new Blob([view], { type: \"audio/wav\" });\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.writeString = function (view, offset, value) {\n\tfor (var i = 0; i < value.length; i++) {\n\t\tview.setUint8(offset + i, value.charCodeAt(i));\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype.floatTo16BitPCM = function (view, offset, input) {\n\tfor (var i = 0; i < input.length; i++, offset += 2) {\n\t\tvar sample = Math.max(-1, Math.min(1, input[i]));\n\t\tview.setInt16(offset, sample < 0 ? sample * 32768 : sample * 32767, true);\n\t}\n};\n\nSjDigitalHumanAssistantAdaptive.prototype._md5 = function (string) {\n\tfunction safeAdd(x, y) {\n\t\tvar lsw = (x & 65535) + (y & 65535);\n\t\tvar msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n\t\treturn (msw << 16) | (lsw & 65535);\n\t}\n\tfunction bitRotateLeft(num, cnt) {\n\t\treturn (num << cnt) | (num >>> (32 - cnt));\n\t}\n\tfunction md5cmn(q, a, b, x, s, t) {\n\t\treturn safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n\t}\n\tfunction md5ff(a, b, c, d, x, s, t) {\n\t\treturn md5cmn((b & c) | ((~b) & d), a, b, x, s, t);\n\t}\n\tfunction md5gg(a, b, c, d, x, s, t) {\n\t\treturn md5cmn((b & d) | (c & (~d)), a, b, x, s, t);\n\t}\n\tfunction md5hh(a, b, c, d, x, s, t) {\n\t\treturn md5cmn(b ^ c ^ d, a, b, x, s, t);\n\t}\n\tfunction md5ii(a, b, c, d, x, s, t) {\n\t\treturn md5cmn(c ^ (b | (~d)), a, b, x, s, t);\n\t}\n\tfunction binlMD5(x, len) {\n\t\tx[len >> 5] |= 128 << (len % 32);\n\t\tx[(((len + 64) >>> 9) << 4) + 14] = len;\n\t\tvar i;\n\t\tvar olda;\n\t\tvar oldb;\n\t\tvar oldc;\n\t\tvar oldd;\n\t\tvar a = 1732584193;\n\t\tvar b = -271733879;\n\t\tvar c = -1732584194;\n\t\tvar d = 271733878;\n\t\tfor (i = 0; i < x.length; i += 16) {\n\t\t\tolda = a;\n\t\t\toldb = b;\n\t\t\toldc = c;\n\t\t\toldd = d;\n\t\t\ta = md5ff(a, b, c, d, x[i], 7, -680876936);\n\t\t\td = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n\t\t\tc = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n\t\t\tb = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n\t\t\ta = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n\t\t\td = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n\t\t\tc = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n\t\t\tb = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n\t\t\ta = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n\t\t\td = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n\t\t\tc = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n\t\t\tb = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n\t\t\ta = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n\t\t\td = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n\t\t\tc = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n\t\t\tb = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\t\t\ta = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n\t\t\td = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n\t\t\tc = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n\t\t\tb = md5gg(b, c, d, a, x[i], 20, -373897302);\n\t\t\ta = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n\t\t\td = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n\t\t\tc = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n\t\t\tb = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n\t\t\ta = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n\t\t\td = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n\t\t\tc = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n\t\t\tb = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n\t\t\ta = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n\t\t\td = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n\t\t\tc = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n\t\t\tb = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\t\t\ta = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n\t\t\td = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n\t\t\tc = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n\t\t\tb = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n\t\t\ta = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n\t\t\td = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n\t\t\tc = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n\t\t\tb = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n\t\t\ta = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n\t\t\td = md5hh(d, a, b, c, x[i], 11, -358537222);\n\t\t\tc = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n\t\t\tb = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n\t\t\ta = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n\t\t\td = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n\t\t\tc = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n\t\t\tb = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\t\t\ta = md5ii(a, b, c, d, x[i], 6, -198630844);\n\t\t\td = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n\t\t\tc = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n\t\t\tb = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n\t\t\ta = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n\t\t\td = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n\t\t\tc = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n\t\t\tb = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n\t\t\ta = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n\t\t\td = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n\t\t\tc = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n\t\t\tb = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n\t\t\ta = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n\t\t\td = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n\t\t\tc = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n\t\t\tb = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\t\t\ta = safeAdd(a, olda);\n\t\t\tb = safeAdd(b, oldb);\n\t\t\tc = safeAdd(c, oldc);\n\t\t\td = safeAdd(d, oldd);\n\t\t}\n\t\treturn [a, b, c, d];\n\t}\n\tfunction binl2rstr(input) {\n\t\tvar i;\n\t\tvar output = \"\";\n\t\tfor (i = 0; i < input.length * 32; i += 8) {\n\t\t\toutput += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 255);\n\t\t}\n\t\treturn output;\n\t}\n\tfunction rstr2binl(input) {\n\t\tvar i;\n\t\tvar output = [];\n\t\toutput[(input.length >> 2) - 1] = undefined;\n\t\tfor (i = 0; i < output.length; i += 1) {\n\t\t\toutput[i] = 0;\n\t\t}\n\t\tfor (i = 0; i < input.length * 8; i += 8) {\n\t\t\toutput[i >> 5] |= (input.charCodeAt(i / 8) & 255) << (i % 32);\n\t\t}\n\t\treturn output;\n\t}\n\tfunction rstrMD5(s) {\n\t\treturn binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n\t}\n\tfunction rstr2hex(input) {\n\t\tvar hexTab = \"0123456789abcdef\";\n\t\tvar output = \"\";\n\t\tvar x;\n\t\tvar i;\n\t\tfor (i = 0; i < input.length; i += 1) {\n\t\t\tx = input.charCodeAt(i);\n\t\t\toutput += hexTab.charAt((x >>> 4) & 15) + hexTab.charAt(x & 15);\n\t\t}\n\t\treturn output;\n\t}\n\tfunction str2rstrUTF8(input) {\n\t\treturn unescape(encodeURIComponent(input));\n\t}\n\treturn rstr2hex(rstrMD5(str2rstrUTF8(string)));\n};\n\nexport default SjDigitalHumanAssistantAdaptive;\n","// src/utils/index.js 公共工具方法\n\"use strict\";\n\n// 防抖函数\nexport function debounce(fn, delay) {\n if (typeof fn !== \"function\") return;\n var timer = null;\n return function () {\n var that = this;\n var args = arguments;\n clearTimeout(timer);\n timer = setTimeout(function () {\n fn.apply(that, args);\n }, delay || 100);\n };\n}\n\n// 对象合并(兼容ES5)\nexport function objectAssign(target) {\n if (target == null) throw new TypeError(\"Cannot convert undefined or null to object\");\n var to = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var nextSource = arguments[i];\n if (nextSource != null) {\n for (var nextKey in nextSource) {\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n}\n\n// 其他公共方法:DOM查询、样式设置等\nexport function querySelector(el, selector) {\n return el.querySelector(selector);\n}"],"names":["SjDigitalHumanAssistantAdaptive","options","this","config","_assign","baseUrl","windowTitle","defaultPlayText","reconnectInterval","maxReconnectTimes","secretKey","accessToken","windowWidth","windowHeight","avatarId","isVideoFullscreen","hlsClass","Hls","aliRtsClass","AliRTS","container","document","body","zIndex","mobileBreakpoint","state","isConnected","isConnecting","isSSEConnected","isAutoplayBlocked","isMediaReady","hasAvatarUrl","queueCount","isTextInputMode","isRecording","showReconnectDialog","needManualPlay","isIOSWechat","_isIOSWechat","isReceivingReply","currentAiMessage","currentReconnectTimes","isManualDisconnect","isWaitingReconnect","isMobileDevice","dragPosition","isDragging","dragMoved","sessionid","chatSessionId","currentHlsUrl","currentRtsUrl","videoEleBg","posterBgUrl","defaultVideoUrl","avatarPic","showToastFlag","toastMessage","playingVoiceId","hasUnmuted","drag","startClientX","startClientY","startLeft","startTop","stream","hls","aliRts","sseReader","sseReconnectTimer","reconnectTimer","audio","mediaStream","audioContext","sourceNode","processorNode","chunks","startTime","permissionPromise","currentVoiceAudio","dom","chatMessages","sseReconnectCount","toastTimer","blockClickTimer","reconnectDialogCallback","resizeHandler","stopRequestedBeforeStart","isButtonPressed","permissionCheckTimer","Error","init","prototype","target","TypeError","Object","i","arguments","length","source","key","hasOwnProperty","call","detectMobileDevice","injectStyle","mountDom","updateRemBase","bindEvent","syncDeviceMode","renderInitialMessages","bootstrap","getElementById","css","join","style","createElement","id","type","textContent","head","appendChild","root","className","innerHTML","videoArea","querySelector","video","queue","fullscreenBtn","autoplayOverlay","manualPlay","autoplaySpinner","aiResponse","aiResponseContent","chatArea","chatDate","chatList","modeBtn","inputWrap","input","voiceInput","sendBtn","recording","dialog","dialogConfirm","toast","toastContent","value","_formatDateHeader","_refreshModeButton","_refreshFullscreenButton","that","addEventListener","event","stopPropagation","toggleVideoFullscreen","handleManualPlay","handleContainerClick","sendMessage","renderStatus","toggleInputMode","preventDefault","startVoiceInput","passive","stopVoiceInput","onReconnectConfirm","handleVideoAreaMouseDown","fn","delay","timer","args","clearTimeout","setTimeout","apply","debounce","handleResize","onDocMouseMove","onDocMouseUp","window","destroy","markVideoReady","_asyncToGenerator","_regenerator","m","_callee","_t","w","_context","p","n","getSessionId","getPageDefaultData","startConnection","v","console","error","showToast","a","push","msg","renderChatList","narrowViewport","innerWidth","coarsePointer","matchMedia","matches","hasTouchPoints","navigator","maxTouchPoints","mobileUA","test","userAgent","classList","toggle","left","top","right","bottom","width","_normalizeSize","height","remove","display","clampDragPositionOnResize","scrollChatToBottom","button","_isInteractiveDragTarget","rect","getBoundingClientRect","clientX","clientY","cursor","dx","dy","Math","abs","next","_clampPosition","blockClick","removeEventListener","muted","paused","play","_callee2","_context2","renderAutoplayState","releaseRecorder","ensureRecorder","_callee3","text","now","_context3","replace","digitalHumanInterruptTalk","Date","timestamp","showTime","shouldShowTimeLabel","digitalHumanChat","receiveMessage","cleanText","last","renderAiResponse","list","avatarStyle","_escapeHtml","html","formatMessageTime","voiceUrl","String","duration","dateHtml","parentElement","outerHTML","e","newDate","voiceNodes","querySelectorAll","j","idx","parseInt","getAttribute","playVoice","scrollTop","scrollHeight","hlsUrl","rtsUrl","cleanupVideo","destroyRts","tryPlayWithRts","playWithHls","src","then","catch","AliRtsCtor","createClient","on","isSupport","isReceiveVideo","subscribeRts","subscribe","mediaTimeout","retryTimes","retryInterval","remoteStream","clearReconnectTimer","HlsCtor","reconnect","isSupported","maxBufferLength","maxMaxBufferLength","liveSyncDurationCount","fragLoadingMaxRetry","fragLoadingRetryDelay","manifestLoadingMaxRetry","levelLoadingMaxRetry","enableWorker","lowLatencyMode","loadSource","attachMedia","Events","MANIFEST_PARSED","ERROR","data","fatal","canPlayType","load","onLoaded","disabled","overlayVisible","startSSE","fetch","_buildUrl","method","headers","JSON","stringify","response","fetchSessionStatus","getReader","consumeSSE","buffer","read","result","done","lines","TextDecoder","decode","split","pop","handleSSELine","reconnectSSE","line","indexOf","rawData","slice","promptReconnect","jsonData","parse","cancel","add","_callee4","_context4","_callee5","_context5","_ref6","_callee6","_t3","_context6","_request","_x","_x2","_callee7","_t4","_context7","_callee8","entity","_context8","ok","json","entities","imageDefault","coverImageUrl","videoDefault","characterAvatar","setAttribute","backgroundImage","_callee9","urlItem","_context9","Number","hlsAvatarUrl","_callee0","activeSessions","maxSessions","waitingCount","_t5","_context0","active_chat_sessions","max_sessions","_callee1","_context1","Promise","resolve","mediaDevices","getUserMedia","_callee10","_context10","beginRecordStream","AudioContextCtor","AudioContext","webkitAudioContext","createMediaStreamSource","createScriptProcessor","onaudioprocess","inputBuffer","getChannelData","Float32Array","connect","destination","round","blob","finishRecordStream","sendVoiceMessage","disconnect","sampleRate","close","merged","mergeAudioChunks","downsampled","downsampleBuffer","encodeWav","tracks","getTracks","stop","_ref11","_callee11","durationSec","formData","_t6","_context11","URL","createObjectURL","FormData","append","_x3","_x4","_ref12","_callee12","_context12","pause","Audio","onended","_x5","_x6","message","srcObject","unsubscribe","warn","parentNode","removeChild","_ref13","_callee13","path","requestInit","_context13","status","_x7","_x8","_x9","ts","floor","separator","sign","_md5","encodeURIComponent","_getRemBase","viewportWidth","visualViewport","documentElement","clientWidth","max","min","setProperty","closest","maxLeft","maxTop","innerHeight","cssText","getFullYear","getMonth","getDate","date","hours","getHours","getMinutes","padStart","currentTimestamp","offset","set","outSampleRate","ratio","newLength","offsetResult","offsetBuffer","nextOffsetBuffer","accum","count","samples","ArrayBuffer","view","DataView","writeString","setUint32","setUint16","floatTo16BitPCM","Blob","setUint8","charCodeAt","sample","setInt16","string","safeAdd","x","y","lsw","md5cmn","q","b","s","t","num","cnt","md5ff","c","d","md5gg","md5hh","md5ii","hexTab","output","charAt","rstr2hex","fromCharCode","binl2rstr","len","olda","oldb","oldc","oldd","binlMD5","undefined","rstr2binl","unescape"],"mappings":";;q/DAMA,SAASA,EAAgCC,GA+FxC,GA9FAA,EAAUA,GAAW,CAAA,EACrBC,KAAKC,OAASD,KAAKE,QAAQ,CAAA,EAAI,CAC9BC,QAAS,GACTC,YAAa,QACbC,gBAAiB,GACjBC,kBAAmB,EACnBC,kBAAmB,GACnBC,UAAW,SACXC,YAAa,UACbC,YAAa,QACbC,aAAc,QACdC,SAAU,EACVC,mBAAmB,EACnBC,SAAUC,EACVC,YAAaC,EAAAA,OACbC,UAA+B,oBAAbC,SAA2BA,SAASC,KAAO,KAC7DC,OAAQ,KACRC,iBAAkB,KAChBvB,GAEHC,KAAKuB,MAAQ,CACZC,aAAa,EACbC,cAAc,EACdC,gBAAgB,EAChBC,mBAAmB,EACnBC,cAAc,EACdf,oBAAqBb,KAAKC,OAAOY,kBACjCgB,cAAc,EACdC,WAAY,EACZC,iBAAiB,EACjBC,aAAa,EACbC,qBAAqB,EACrBC,gBAAgB,EAChBC,YAAanC,KAAKoC,eAClBC,kBAAkB,EAClBC,iBAAkBtC,KAAKC,OAAOI,iBAAmB,GACjDkC,sBAAuB,EACvBC,oBAAoB,EACpBC,oBAAoB,EACpBC,gBAAgB,EAChBC,aAAc,KACdC,YAAY,EACZC,WAAW,EACXC,UAAW,GACXC,cAAe,GACfC,cAAe,GACfC,cAAe,GACfC,WAAY,GACZC,YAAa,GACbC,gBAAiB,GACjBC,UAAW,GACXC,eAAe,EACfC,aAAc,GACdC,eAAgB,KAChBC,YAAY,GAGbzD,KAAK0D,KAAO,CACXC,aAAc,EACdC,aAAc,EACdC,UAAW,EACXC,SAAU,GAGX9D,KAAK+D,OAAS,CACbC,IAAK,KACLC,OAAQ,KACRC,UAAW,KACXC,kBAAmB,KACnBC,eAAgB,MAGjBpE,KAAKqE,MAAQ,CACZC,YAAa,KACbC,aAAc,KACdC,WAAY,KACZC,cAAe,KACfC,OAAQ,GACRC,UAAW,EACXC,kBAAmB,KACnBC,kBAAmB,MAGpB7E,KAAK8E,IAAM,CAAA,EACX9E,KAAK+E,aAAe,GACpB/E,KAAKgF,kBAAoB,EACzBhF,KAAKiF,WAAa,KAClBjF,KAAKkF,gBAAkB,KACvBlF,KAAKmF,wBAA0B,KAC/BnF,KAAKoF,cAAgB,KACrBpF,KAAKqF,0BAA2B,EAChCrF,KAAKsF,iBAAkB,EACvBtF,KAAKuF,qBAAuB,MAEvBvF,KAAKC,OAAOE,QAChB,MAAM,IAAIqF,MAAM,yDAGjBxF,KAAKyF,MACN,QAEA3F,EAAgC4F,UAAUxF,QAAU,SAAUyF,GAC7D,GAAc,MAAVA,EACH,MAAM,IAAIC,UAAU,8CAErBD,EAASE,OAAOF,GAChB,IAAK,IAAIG,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAC1C,IAAIG,EAASF,UAAUD,GACvB,GAAKG,EAGL,IAAK,IAAIC,KAAOD,EACXJ,OAAOH,UAAUS,eAAeC,KAAKH,EAAQC,KAChDP,EAAOO,GAAOD,EAAOC,GAGxB,CACA,OAAOP,CACR,EAEA7F,EAAgC4F,UAAUD,KAAO,WAChDzF,KAAKuB,MAAMmB,eAAiB1C,KAAKqG,qBACjCrG,KAAKsG,cACLtG,KAAKuG,WACLvG,KAAKwG,gBACLxG,KAAKyG,YACLzG,KAAK0G,iBACL1G,KAAK2G,wBACL3G,KAAK4G,WACN,EAEA9G,EAAgC4F,UAAUY,YAAc,WACvD,IAAInF,SAAS0F,eAAe,mCAA5B,CAGA,IAAIC,EAAM,CACT,yRAA2R9G,KAAKC,OAAOoB,OAAS,wKAChT,mDACA,mHACA,8GACA,oKACA,wGACA,oOACA,yKACA,qGACA,kJACA,6IACA,kXACA,8aACA,iEACA,6PACA,+CACA,6HACA,mPACA,0NACA,kbACA,gKACA,kOACA,8LACA,wCACA,yMACA,0NACA,oDACA,8JACA,2GACA,6CACA,qEACA,yMACA,oFACA,6KACA,ySACA,6GACA,kUACA,qEACA,kUACA,gNACA,wPACA,gFACA,iFACA,wPACA,qOACA,8FACA,mLACA,gJACA,uKACA,iPACA,2OACA,yMACA,wLACA,2DACA,6IACA,sCACA,wQACA,wHACA,2IACA,kIACA,6DACA,uDACA,kPACA,gHACA,4EACA,mMACA,oCACA,+LACA,6QACA,iFACA,+GACA,qFACA,2HACA,8EACA,6GACA,2HACA,0EACA,sDACA,qFACA,yEACA,8LACA,oFACA,kIACA,4KACA,wOACA,8FACA,8FACA,4FACA,4EACA,uHACA,iFACA,8EACA,qKACA,gFACA,2LACA,yHACA,2LACA,mGACA,mEACA,8MACA,0JACA,oEACA,yHACA,gEACA,+EACA,kJACA,8FACA,0DACA,qDACA,8HACA,+DACA,0FACA,gFACA,sDACA,iGACA,iEACA,sIACA,gOACC0F,KAAK,IACHC,EAAQ7F,SAAS8F,cAAc,SACnCD,EAAME,GAAK,kCACXF,EAAMG,KAAO,WACbH,EAAMI,YAAcN,EACpB3F,SAASkG,KAAKC,YAAYN,EA7H1B,CA8HD,EAEAlH,EAAgC4F,UAAUa,SAAW,WACpD,IAAIgB,EAAOpG,SAAS8F,cAAc,OAClCM,EAAKC,UAAY,aACjBD,EAAKE,UAAY,CAChB,iCACA,sCACA,0LACA,sCACA,mEACA,2CACA,6DACA,mDACA,8BACA,eACA,mDACA,aACA,sCACA,wDACA,sDACA,aACA,WACA,SACA,gCACA,2EACA,kCACA,6DACA,2GACA,0FACA,+DACA,WACA,SACA,gCACA,uCACA,6IACA,uBACA,WACA,SACA,qCACA,+BACA,6DACA,wGACA,WACA,SACA,0EACCV,KAAK,KAEN/G,KAAKC,OAAOiB,WAAaC,SAASC,MAAMkG,YAAYC,GAErDvH,KAAK8E,IAAIyC,KAAOA,EAChBvH,KAAK8E,IAAI4C,UAAYH,EAAKI,cAAc,qBACxC3H,KAAK8E,IAAI8C,MAAQL,EAAKI,cAAc,gBACpC3H,KAAK8E,IAAI+C,MAAQN,EAAKI,cAAc,gBACpC3H,KAAK8E,IAAIgD,cAAgBP,EAAKI,cAAc,yBAC5C3H,KAAK8E,IAAIiD,gBAAkBR,EAAKI,cAAc,2BAC9C3H,KAAK8E,IAAIkD,WAAaT,EAAKI,cAAc,sBACzC3H,KAAK8E,IAAImD,gBAAkBV,EAAKI,cAAc,2BAC9C3H,KAAK8E,IAAIoD,WAAaX,EAAKI,cAAc,sBACzC3H,KAAK8E,IAAIqD,kBAAoBZ,EAAKI,cAAc,8BAChD3H,KAAK8E,IAAIsD,SAAWb,EAAKI,cAAc,oBACvC3H,KAAK8E,IAAIuD,SAAWd,EAAKI,cAAc,oBACvC3H,KAAK8E,IAAIwD,SAAWf,EAAKI,cAAc,oBACvC3H,KAAK8E,IAAIyD,QAAUhB,EAAKI,cAAc,mBACtC3H,KAAK8E,IAAI0D,UAAYjB,EAAKI,cAAc,qBACxC3H,KAAK8E,IAAI2D,MAAQlB,EAAKI,cAAc,gBACpC3H,KAAK8E,IAAI4D,WAAanB,EAAKI,cAAc,sBACzC3H,KAAK8E,IAAI6D,QAAUpB,EAAKI,cAAc,mBACtC3H,KAAK8E,IAAI8D,UAAYrB,EAAKI,cAAc,oBACxC3H,KAAK8E,IAAI+D,OAAStB,EAAKI,cAAc,yBACrC3H,KAAK8E,IAAIgE,cAAgBvB,EAAKI,cAAc,qBAC5C3H,KAAK8E,IAAIiE,MAAQxB,EAAKI,cAAc,gBACpC3H,KAAK8E,IAAIkE,aAAezB,EAAKI,cAAc,wBAE3C3H,KAAK8E,IAAI2D,MAAMQ,MAAQ,GACvBjJ,KAAK8E,IAAIuD,SAASjB,YAAcpH,KAAKkJ,oBACrClJ,KAAKmJ,qBACLnJ,KAAKoJ,0BACN,EAEAtJ,EAAgC4F,UAAUe,UAAY,WACrD,IAAI4C,EAAOrJ,KAEXA,KAAK8E,IAAIgD,cAAcwB,iBAAiB,QAAS,SAAUC,GAC1DA,EAAMC,kBACNH,EAAKI,uBACN,GAEAzJ,KAAK8E,IAAIkD,WAAWsB,iBAAiB,QAAS,SAAUC,GACvDA,EAAMC,kBACNH,EAAKK,kBACN,GAEA1J,KAAK8E,IAAIyC,KAAK+B,iBAAiB,QAAS,WACvCD,EAAKM,sBACN,GAEA3J,KAAK8E,IAAI6D,QAAQW,iBAAiB,QAAS,WAC1CD,EAAKO,aACN,GAEA5J,KAAK8E,IAAI2D,MAAMa,iBAAiB,QAAS,SAAUC,GAChC,UAAdA,EAAMrD,KACTmD,EAAKO,aAEP,GAEA5J,KAAK8E,IAAI2D,MAAMa,iBAAiB,QAAS,WACxCD,EAAKQ,cACN,GAEA7J,KAAK8E,IAAIyD,QAAQe,iBAAiB,QAAS,WAC1CD,EAAKS,iBACN,GAEA9J,KAAK8E,IAAI4D,WAAWY,iBAAiB,aAAc,SAAUC,GAC5DA,EAAMQ,iBACNV,EAAKW,iBACN,EAAG,CAAEC,SAAS,IAEdjK,KAAK8E,IAAI4D,WAAWY,iBAAiB,WAAY,SAAUC,GAC1DA,EAAMQ,iBACNV,EAAKa,gBACN,EAAG,CAAED,SAAS,IAEdjK,KAAK8E,IAAI4D,WAAWY,iBAAiB,cAAe,SAAUC,GAC7DA,EAAMQ,iBACNV,EAAKa,gBACN,EAAG,CAAED,SAAS,IAEdjK,KAAK8E,IAAI4D,WAAWY,iBAAiB,YAAa,SAAUC,GAC3DA,EAAMQ,iBACNV,EAAKW,iBACN,GAEAhK,KAAK8E,IAAIgE,cAAcQ,iBAAiB,QAAS,WAChDD,EAAKc,oBACN,GAEAnK,KAAK8E,IAAI4C,UAAU4B,iBAAiB,YAAa,SAAUC,GAC1DF,EAAKe,yBAAyBb,EAC/B,GAEAvJ,KAAKoF,cCtZC,SAAkBiF,EAAIC,GAC3B,GAAkB,mBAAPD,EAAX,CACA,IAAIE,EAAQ,KACZ,OAAO,WACL,IAAIlB,EAAOrJ,KACPwK,EAAOzE,UACX0E,aAAaF,GACbA,EAAQG,WAAW,WACjBL,EAAGM,MAAMtB,EAAMmB,EACjB,EAAGF,EACL,CAT8B,CAUhC,CD2YsBM,CAAS,WAC7BvB,EAAKwB,cACN,EAAG,KAEH1J,SAASmI,iBAAiB,UAAW,WACpCD,EAAKa,gBACN,GACA/I,SAASmI,iBAAiB,YAAa,SAAUC,GAChDF,EAAKyB,eAAevB,EACrB,GACApI,SAASmI,iBAAiB,UAAW,WACpCD,EAAK0B,cACN,GACAC,OAAO1B,iBAAiB,SAAUtJ,KAAKoF,eACvC4F,OAAO1B,iBAAiB,eAAgB,WACvCD,EAAK4B,SACN,GAEAjL,KAAK8E,IAAI8C,MAAM0B,iBAAiB,UAAW,WAC1CD,EAAK6B,gBACN,EACD,EAEApL,EAAgC4F,UAAUkB,UAASuE,EAAAC,IAAAC,EAAG,SAAAC,IAAA,IAAAC,EAAA,OAAAH,IAAAI,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAAA,OAAAF,EAAAC,EAAA,EAAAD,EAAAE,EAAA,EAE9C3L,KAAK4L,eAAc,KAAA,EAAA,OAAAH,EAAAE,EAAA,EACnB3L,KAAK6L,qBAAoB,KAAA,EAC/B7L,KAAK8L,kBAAkBL,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAM,EAEvBC,QAAQC,MAAM,qDAAoDV,GAClEvL,KAAKkM,UAAU,eAAe,KAAA,EAAA,OAAAT,EAAAU,EAAA,GAAA,EAAAb,EAAAtL,KAAA,CAAA,CAAA,EAAA,IAAA,IAIhCF,EAAgC4F,UAAUiB,sBAAwB,WAC7D3G,KAAKC,OAAOI,kBACfL,KAAK+E,aAAaqH,KAAK,CAAEjF,KAAM,SAAUkF,IAAKrM,KAAKC,OAAOI,kBAC1DL,KAAKsM,iBAEP,EAEAxM,EAAgC4F,UAAUW,mBAAqB,WAC9D,GAAsB,oBAAX2E,OACV,OAAO,EAER,IAAIuB,EAAiBvB,OAAOwB,YAAcxM,KAAKC,OAAOqB,iBAClDmL,EAAgBzB,OAAO0B,YAAc1B,OAAO0B,WAAW,qBAAqBC,QAC5EC,EAAiBC,UAAUC,eAAiB,GAAK,iBAAkB9B,OACnE+B,EAAW,gGAAgGC,KAAKH,UAAUI,WAC9H,SAAUV,GAAmBQ,GAAYH,GAAmBH,EAC7D,EAEA3M,EAAgC4F,UAAUgB,eAAiB,WAC1D1G,KAAKuB,MAAMmB,eAAiB1C,KAAKqG,qBACjCrG,KAAKwG,gBACLxG,KAAK8E,IAAIyC,KAAK2F,UAAUC,OAAO,gBAAiBnN,KAAKuB,MAAMmB,gBAC3D1C,KAAK8E,IAAIyC,KAAK2F,UAAUC,OAAO,cAAenN,KAAKuB,MAAMmB,gBACzD1C,KAAK8E,IAAIyC,KAAK2F,UAAUC,OAAO,qBAAsBnN,KAAKuB,MAAMV,mBAChEb,KAAK8E,IAAIyC,KAAK2F,UAAUC,OAAO,eAAgBnN,KAAKuB,MAAMM,cAErD7B,KAAKuB,MAAMmB,gBAQf1C,KAAKuB,MAAMoB,aAAe,KAC1B3C,KAAK8E,IAAIyC,KAAKP,MAAMoG,KAAO,IAC3BpN,KAAK8E,IAAIyC,KAAKP,MAAMqG,IAAM,IAC1BrN,KAAK8E,IAAIyC,KAAKP,MAAMsG,MAAQ,IAC5BtN,KAAK8E,IAAIyC,KAAKP,MAAMuG,OAAS,MAX7BvN,KAAK8E,IAAIyC,KAAKP,MAAMwG,MAAQxN,KAAKyN,eAAezN,KAAKC,OAAOS,cAAgB,QAC5EV,KAAK8E,IAAIyC,KAAKP,MAAM0G,OAAS1N,KAAKyN,eAAezN,KAAKC,OAAOU,eAAiB,QACzEX,KAAKuB,MAAMoB,eACf3C,KAAK8E,IAAIyC,KAAKP,MAAMsG,MAAQ,OAC5BtN,KAAK8E,IAAIyC,KAAKP,MAAMuG,OAAS,SAW3BvN,KAAKuB,MAAMV,mBACdb,KAAK8E,IAAIsD,SAAS8E,UAAUS,OAAO,UAE7B3N,KAAK8E,IAAIwD,SAAStB,MAAM4G,QAAU,OAExC5N,KAAK8E,IAAI0D,UAAUxB,MAAM4G,QAAU5N,KAAKuB,MAAMQ,gBAAkB,QAAU,OAC1E/B,KAAK8E,IAAI6D,QAAQ3B,MAAM4G,QAAU5N,KAAKuB,MAAMQ,gBAAkB,QAAU,OACxE/B,KAAK8E,IAAI4D,WAAW1B,MAAM4G,QAAU5N,KAAKuB,MAAMQ,gBAAkB,OAAS,UAG1E/B,KAAK8E,IAAIwD,SAAStB,MAAM4G,QAAU,QAClC5N,KAAK8E,IAAIsD,SAAS8E,UAAUS,OAAO,WAEpC3N,KAAK8E,IAAIoD,WAAWlB,MAAM4G,QAAU5N,KAAKuB,MAAMV,mBAAqBb,KAAKuB,MAAMe,iBAAmB,QAAU,OACzGtC,KAAKoJ,2BACRpJ,KAAK8E,IAAIgD,cAAcd,MAAM4G,QAAU5N,KAAKuB,MAAMM,aAAe,OAAS,MAC3E,EAEA/B,EAAgC4F,UAAUmF,aAAe,WACxD7K,KAAKwG,gBACLxG,KAAK0G,iBACL1G,KAAK6N,2BACN,EAEA/N,EAAgC4F,UAAU+D,sBAAwB,WACjEzJ,KAAKuB,MAAMV,mBAAqBb,KAAKuB,MAAMV,kBAC3Cb,KAAK0G,iBACA1G,KAAKuB,MAAMV,mBACfb,KAAK8N,oBAEP,EAEAhO,EAAgC4F,UAAU0E,yBAA2B,SAAUb,GAC9E,IAAIvJ,KAAKuB,MAAMmB,gBAAmC,IAAjB6G,EAAMwE,SAAgB/N,KAAKgO,yBAAyBzE,EAAM5D,QAA3F,CAGA4D,EAAMQ,iBACN,IAAIkE,EAAOjO,KAAK8E,IAAIyC,KAAK2G,wBACzBlO,KAAK0D,KAAKC,aAAe4F,EAAM4E,QAC/BnO,KAAK0D,KAAKE,aAAe2F,EAAM6E,QAC/BpO,KAAK0D,KAAKG,UAAYoK,EAAKb,KAC3BpN,KAAK0D,KAAKI,SAAWmK,EAAKZ,IAC1BrN,KAAKuB,MAAMqB,YAAa,EACxB5C,KAAKuB,MAAMsB,WAAY,EACvB7C,KAAKuB,MAAMoB,aAAe,CAAEyK,KAAMa,EAAKb,KAAMC,IAAKY,EAAKZ,KACvDrN,KAAK8E,IAAI4C,UAAUV,MAAMqH,OAAS,UAVlC,CAWD,EAEAvO,EAAgC4F,UAAUoF,eAAiB,SAAUvB,GACpE,GAAKvJ,KAAKuB,MAAMqB,WAAhB,CAGA,IAAI0L,EAAK/E,EAAM4E,QAAUnO,KAAK0D,KAAKC,aAC/B4K,EAAKhF,EAAM6E,QAAUpO,KAAK0D,KAAKE,cAC9B5D,KAAKuB,MAAMsB,YAAc2L,KAAKC,IAAIH,GAAM,GAAKE,KAAKC,IAAIF,GAAM,KAChEvO,KAAKuB,MAAMsB,WAAY,GAExB,IAAIoL,EAAOjO,KAAK8E,IAAIyC,KAAK2G,wBACrBQ,EAAO1O,KAAK2O,eAAe3O,KAAK0D,KAAKG,UAAYyK,EAAItO,KAAK0D,KAAKI,SAAWyK,EAAIN,EAAKT,MAAOS,EAAKP,QACnG1N,KAAKuB,MAAMoB,aAAe+L,EAC1B1O,KAAK8E,IAAIyC,KAAKP,MAAMoG,KAAOsB,EAAKtB,KAAO,KACvCpN,KAAK8E,IAAIyC,KAAKP,MAAMqG,IAAMqB,EAAKrB,IAAM,KACrCrN,KAAK8E,IAAIyC,KAAKP,MAAMsG,MAAQ,OAC5BtN,KAAK8E,IAAIyC,KAAKP,MAAMuG,OAAS,MAZ7B,CAaD,EAEAzN,EAAgC4F,UAAUqF,aAAe,WACnD/K,KAAKuB,MAAMqB,aAGhB5C,KAAKuB,MAAMqB,YAAa,EACxB5C,KAAK8E,IAAI4C,UAAUV,MAAMqH,OAAS,OAC9BrO,KAAKuB,MAAMsB,WAEdmI,OAAO1B,iBAAiB,QAAS,SAASsF,EAAWrF,GACpDA,EAAMQ,iBACNR,EAAMC,kBACNwB,OAAO6D,oBAAoB,QAASD,GAAY,EACjD,GAAG,GAEL,EAEA9O,EAAgC4F,UAAUmI,0BAA4B,WACrE,GAAK7N,KAAKuB,MAAMoB,eAAgB3C,KAAKuB,MAAMmB,eAA3C,CAGA,IAAIuL,EAAOjO,KAAK8E,IAAIyC,KAAK2G,wBACrBQ,EAAO1O,KAAK2O,eAAe3O,KAAKuB,MAAMoB,aAAayK,KAAMpN,KAAKuB,MAAMoB,aAAa0K,IAAKY,EAAKT,MAAOS,EAAKP,QAC3G1N,KAAKuB,MAAMoB,aAAe+L,EAC1B1O,KAAK8E,IAAIyC,KAAKP,MAAMoG,KAAOsB,EAAKtB,KAAO,KACvCpN,KAAK8E,IAAIyC,KAAKP,MAAMqG,IAAMqB,EAAKrB,IAAM,IALrC,CAMC,EAEFvN,EAAgC4F,UAAUiE,qBAAuB,WAC5D3J,KAAKuB,MAAMkC,YAGXzD,KAAK8E,IAAI8C,OAAS5H,KAAK8E,IAAI8C,MAAMkH,QACpC9O,KAAK8E,IAAI8C,MAAMkH,OAAQ,EACnB9O,KAAK8E,IAAI8C,MAAMmH,QAClB/O,KAAK8E,IAAI8C,MAAMoH,OAEhBhP,KAAKuB,MAAMkC,YAAa,EAE1B,EAEA3D,EAAgC4F,UAAUgE,iBAAgByB,EAAAC,IAAAC,EAAG,SAAA4D,IAAA,OAAA7D,IAAAI,EAAA,SAAA0D,GAAA,cAAAA,EAAAxD,EAAAwD,EAAAvD,GAAA,KAAA,EAAA,GACvD3L,KAAK8E,IAAI8C,OAAU5H,KAAKuB,MAAMK,aAAY,CAAAsN,EAAAvD,EAAA,EAAA,KAAA,CAAA,OAAAuD,EAAA/C,EAAA,GAAA,KAAA,EAAA,OAAA+C,EAAAxD,EAAA,EAAAwD,EAAAvD,EAAA,EAIxC3L,KAAK8E,IAAI8C,MAAMoH,OAAM,KAAA,EAC3BhP,KAAK8E,IAAI8C,MAAMkH,OAAQ,EACvB9O,KAAKuB,MAAMI,mBAAoB,EAC/B3B,KAAKmP,sBAAsBD,EAAAvD,EAAA,EAAA,MAAA,KAAA,EAAAuD,EAAAxD,EAAA,EAAAwD,EAAAnD,EAE3B/L,KAAKkM,UAAU,kBAAkB,KAAA,EAAA,OAAAgD,EAAA/C,EAAA,GAAA,EAAA8C,EAAAjP,KAAA,CAAA,CAAA,EAAA,IAAA,IAInCF,EAAgC4F,UAAUoE,gBAAkB,YACvD9J,KAAKuB,MAAMQ,iBAAoB/B,KAAKuB,MAAMG,gBAI9C1B,KAAKuB,MAAMQ,iBAAmB/B,KAAKuB,MAAMQ,gBACzC/B,KAAKmJ,qBACLnJ,KAAK8E,IAAI0D,UAAUxB,MAAM4G,QAAU5N,KAAKuB,MAAMQ,gBAAkB,QAAU,OAC1E/B,KAAK8E,IAAI6D,QAAQ3B,MAAM4G,QAAU5N,KAAKuB,MAAMQ,gBAAkB,QAAU,OACxE/B,KAAK8E,IAAI4D,WAAW1B,MAAM4G,QAAU5N,KAAKuB,MAAMQ,gBAAkB,OAAS,QACrE/B,KAAKuB,MAAMQ,gBAGf/B,KAAKoP,kBAFLpP,KAAKqP,kBATLrP,KAAKkM,UAAU,gBAajB,EAEApM,EAAgC4F,UAAUkE,YAAWuB,EAAAC,IAAAC,EAAG,SAAAiE,IAAA,IAAAC,EAAAC,EAAA,OAAApE,IAAAI,EAAA,SAAAiE,GAAA,cAAAA,EAAA9D,GAAA,KAAA,EACU,GAA7D4D,GAAQvP,KAAK8E,IAAI2D,MAAMQ,OAAS,IAAIyG,QAAQ,aAAc,IACrD,CAAAD,EAAA9D,EAAA,EAAA,KAAA,CAAA,OAAA8D,EAAAtD,EAAA,GAAA,KAAA,EAAA,GAGJnM,KAAKuB,MAAMG,eAAc,CAAA+N,EAAA9D,EAAA,EAAA,KAAA,CACG,OAAhC3L,KAAKkM,UAAU,iBAAiBuD,EAAAtD,EAAA,GAAA,KAAA,EAAA,OAAAsD,EAAA9D,EAAA,EAG3B3L,KAAK2P,4BAA2B,KAAA,EAaZ,OAZ1B3P,KAAKuB,MAAMc,kBAAmB,EAC9BrC,KAAKuB,MAAMe,iBAAmB,GAC1BkN,EAAMI,KAAKJ,MACfxP,KAAK+E,aAAaqH,KAAK,CACtBjF,KAAM,OACNkF,IAAKkD,EACLM,UAAWL,EACXM,SAAU9P,KAAK+P,oBAAoBP,KAEpCxP,KAAK8E,IAAI2D,MAAMQ,MAAQ,GACvBjJ,KAAK6J,eACL7J,KAAKsM,iBACLtM,KAAK8N,qBAAqB2B,EAAA9D,EAAA,EACpB3L,KAAKgQ,iBAAiBT,EAAM,QAAO,KAAA,EAAA,OAAAE,EAAAtD,EAAA,GAAA,EAAAmD,EAAAtP,KAAA,IAG1CF,EAAgC4F,UAAUuK,eAAiB,SAAUV,GACpE,IAAIW,GAAaX,GAAQ,IAAIG,QAAQ,aAAc,IACnD,GAAKQ,EAAL,CAGA,IAAIC,EAAOnQ,KAAK+E,aAAa/E,KAAK+E,aAAaiB,OAAS,GACpDhG,KAAKuB,MAAMc,kBAAoB8N,GAAsB,WAAdA,EAAKhJ,MAC/CgJ,EAAK9D,KAAO6D,EACZlQ,KAAKuB,MAAMe,kBAAoB4N,IAE/BlQ,KAAK+E,aAAaqH,KAAK,CAAEjF,KAAM,SAAUkF,IAAK6D,IAC9ClQ,KAAKuB,MAAMc,kBAAmB,EAC9BrC,KAAKuB,MAAMe,iBAAmB4N,GAE/BlQ,KAAKsM,iBACLtM,KAAK8N,qBACL9N,KAAKoQ,kBAZL,CAaD,EAEAtQ,EAAgC4F,UAAU4G,eAAiB,WAI1D,IAHA,IAAI+D,EAAOrQ,KAAK8E,IAAIwD,SAChBgI,EAActQ,KAAKuB,MAAM8B,UAAY,gCAAkCrD,KAAKuQ,YAAYvQ,KAAKuB,MAAM8B,WAAa,KAAO,GACvHmN,EAAO,GACF1K,EAAI,EAAGA,EAAI9F,KAAK+E,aAAaiB,OAAQF,IAAK,CAClD,IAAIuG,EAAMrM,KAAK+E,aAAae,GACvBuG,IAGY,SAAbA,EAAIlF,MAAmBkF,EAAIyD,UAAYzD,EAAIwD,YAC9CW,GAAQ,uCAAyCxQ,KAAKuQ,YAAYvQ,KAAKyQ,kBAAkBpE,EAAIwD,YAAc,iBAE3F,WAAbxD,EAAIlF,MAAqBkF,EAAIA,IAChCmE,GAAQ,gEAAkEF,EAAc,oCAAsCtQ,KAAKuQ,YAAYlE,EAAIA,KAAO,eACnI,SAAbA,EAAIlF,OAAoBkF,EAAIA,KAAOA,EAAIqE,YAC7CrE,EAAIqE,SACPF,GAAQ,uDAAyD1K,EAAI,uFAAyF9F,KAAKuQ,YAAYI,OAAOtE,EAAIuE,UAAY,IAAM,uCAAyC5Q,KAAKuB,MAAMiC,iBAAmBsC,EAAI,WAAa,IAAM,uBAE1S0K,GAAQ,+FAAiGxQ,KAAKuQ,YAAYlE,EAAIA,KAAO,gBAGxI,CAEA,IAAIwE,EAAW,GACf,IACK7Q,KAAK8E,IAAIuD,UAAYrI,KAAK8E,IAAIuD,SAASyI,gBAAkBT,IAC5DQ,EAAW7Q,KAAK8E,IAAIuD,SAAS0I,WAAa,GAE5C,CAAE,MAAOC,GACRH,EAAW,EACZ,CAIA,GAHAR,EAAK5I,UAAYoJ,EAAWL,EAGxBH,EAAK1I,cAAe,CACvB,IAAIsJ,EAAUZ,EAAK1I,cAAc,oBAC7BsJ,IACHjR,KAAK8E,IAAIuD,SAAW4I,EAEtB,CAIA,IAFA,IAAIC,EAAab,EAAKc,iBAAiB,sBACnC9H,EAAOrJ,KACFoR,EAAI,EAAGA,EAAIF,EAAWlL,OAAQoL,IACtCF,EAAWE,GAAG9H,iBAAiB,QAAS,WACvC,IAAI+H,EAAMC,SAAStR,KAAKuR,aAAa,oBAAqB,IAC1DlI,EAAKmI,UAAUnI,EAAKtE,aAAasM,GAAMA,EACxC,GAGDrR,KAAKoQ,kBACN,EAEAtQ,EAAgC4F,UAAU0K,iBAAmB,WAC5DpQ,KAAK8E,IAAIqD,kBAAkBf,YAAcpH,KAAKuB,MAAMe,kBAAoB,GACxEtC,KAAK8E,IAAIoD,WAAWlB,MAAM4G,QAAU5N,KAAKuB,MAAMV,mBAAqBb,KAAKuB,MAAMe,iBAAmB,QAAU,MAC7G,EAEAxC,EAAgC4F,UAAUoI,mBAAqB,WAC9D,IAAIzE,EAAOrJ,KACX0K,WAAW,WACVrB,EAAKvE,IAAIwD,SAASmJ,UAAYpI,EAAKvE,IAAIwD,SAASoJ,aAChDrI,EAAKvE,IAAIqD,kBAAkBsJ,UAAYpI,EAAKvE,IAAIqD,kBAAkBuJ,YACnE,EAAG,EACJ,EAEA5R,EAAgC4F,UAAUoG,gBAAkB,WAC3D,IAAIzC,EAAOrJ,KACX,IAAIA,KAAKuB,MAAMC,cAAexB,KAAKuB,MAAME,aAAzC,CAIA,IAAIkQ,EAAS3R,KAAKuB,MAAMyB,cACpB4O,EAAS5R,KAAKuB,MAAM0B,cAEnB0O,GAAWC,GAehB5R,KAAKuB,MAAME,cAAe,EAC1BzB,KAAKuB,MAAMiB,oBAAqB,EAChCxC,KAAK6J,eACL7J,KAAK6R,eACL7R,KAAK8R,aAEDF,EACH5R,KAAK+R,eAAeH,EAAQD,GAG7B3R,KAAKgS,YAAYL,IAxBZ3R,KAAKuB,MAAM6B,kBACdpD,KAAK8E,IAAI8C,MAAMqK,IAAMjS,KAAKuB,MAAM6B,gBAChCpD,KAAKuB,MAAMK,cAAe,EAC1B5B,KAAK8E,IAAI8C,MAAMoH,OAAOkD,KAAK,WAC1B7I,EAAK9H,MAAMI,mBAAoB,EAC/B0H,EAAK8F,qBACN,GAAGgD,MAAM,WACR9I,EAAK9H,MAAMI,mBAAoB,EAC/B0H,EAAK8F,qBACN,GAfF,CA+BD,EAEArP,EAAgC4F,UAAUqM,eAAiB,SAAUH,EAAQD,GAC5E,IAAIS,EAAapS,KAAKC,OAAOe,YACzBqI,EAAOrJ,KACNoS,GAAeA,EAAWC,cAI/BrS,KAAK+D,OAAOE,OAASmO,EAAWC,eAC5BrS,KAAK+D,OAAOE,OAAOqO,IACtBtS,KAAK+D,OAAOE,OAAOqO,GAAG,UAAW,SAAUrG,GAC1CD,QAAQC,MAAM,8CAA+CA,EAC9D,GAEDjM,KAAK+D,OAAOE,OAAOsO,UAAU,CAAEC,gBAAgB,IAAQN,KAAK,WAC3D7I,EAAKoJ,aAAab,EAAQD,EAC3B,GAAGQ,MAAM,WACR9I,EAAKyI,aACLzI,EAAK2I,YAAYL,EAClB,IAdC3R,KAAKgS,YAAYL,EAenB,EAEA7R,EAAgC4F,UAAU+M,aAAe,SAAUb,EAAQD,GAC1E,IAAItI,EAAOrJ,KACXA,KAAK+D,OAAOE,OAAOyO,UAAUd,EAAQ,CACpCe,aAAc,IACdC,WAAY,EACZC,cAAe,MACbX,KAAK,SAAUY,GACbA,GAAgBA,EAAa9D,MAChC8D,EAAa9D,KAAK3F,EAAKvE,IAAI8C,OAE5ByB,EAAK9H,MAAMK,cAAe,EAC1ByH,EAAK9H,MAAMC,aAAc,EACzB6H,EAAK9H,MAAME,cAAe,EAC1B4H,EAAK9H,MAAMgB,sBAAwB,EACnC8G,EAAK0J,sBACL1J,EAAKvE,IAAI8C,MAAMoH,OAAOkD,KAAK,WAC1B7I,EAAK9H,MAAMI,mBAAoB,EAC/B0H,EAAK8F,qBACN,GAAGgD,MAAM,WACR9I,EAAK9H,MAAMI,mBAAoB,EAC/B0H,EAAK8F,qBACN,GACA9F,EAAKQ,cACN,GAAGsI,MAAM,WACR9I,EAAKyI,aACLzI,EAAK2I,YAAYL,EAClB,EACD,EAEA7R,EAAgC4F,UAAUsM,YAAc,SAAUL,GACjE,IAAItI,EAAOrJ,KACPgT,EAAUhT,KAAKC,OAAOa,SAC1B,IAAK6Q,EAIJ,OAHA3R,KAAKuB,MAAME,cAAe,EAC1BzB,KAAK6J,oBACL7J,KAAKiT,YAIFjT,KAAK+D,OAAOC,KAAOhE,KAAK+D,OAAOC,IAAIiH,UACtCjL,KAAK+D,OAAOC,IAAIiH,UAChBjL,KAAK+D,OAAOC,IAAM,MAGfgP,GAAWA,EAAQE,aAAeF,EAAQE,eAC7ClT,KAAK+D,OAAOC,IAAM,IAAIgP,EAAQ,CAC7BG,gBAAiB,GACjBC,mBAAoB,GACpBC,sBAAuB,EACvBC,oBAAqB,GACrBC,sBAAuB,IACvBC,wBAAyB,EACzBC,qBAAsB,EACtBC,cAAc,EACdC,gBAAgB,IAEjB3T,KAAK+D,OAAOC,IAAI4P,WAAWjC,GAC3B3R,KAAK+D,OAAOC,IAAI6P,YAAY7T,KAAK8E,IAAI8C,OACrC5H,KAAK+D,OAAOC,IAAIsO,GAAGU,EAAQc,OAAOC,gBAAiB,WAClD1K,EAAK9H,MAAMK,cAAe,EAC1ByH,EAAKvE,IAAI8C,MAAMoH,OAAOkD,KAAK,WAC1B7I,EAAK9H,MAAMI,mBAAoB,EAC/B0H,EAAK8F,qBACN,GAAGgD,MAAM,WACR9I,EAAK9H,MAAMI,mBAAoB,EAC/B0H,EAAK8F,qBACN,EACD,GACAnP,KAAK+D,OAAOC,IAAIsO,GAAGU,EAAQc,OAAOE,MAAO,SAAUzK,EAAO0K,GACrDA,GAAQA,EAAKC,QAChB7K,EAAK9H,MAAMC,aAAc,EACzB6H,EAAK9H,MAAME,cAAe,EAC1B4H,EAAKQ,eACLR,EAAK4J,YAEP,IACUjT,KAAK8E,IAAI8C,MAAMuM,YAAY,kCACrCnU,KAAK8E,IAAI8C,MAAMqK,IAAMN,EACrB3R,KAAK8E,IAAI8C,MAAMwM,OACfpU,KAAK8E,IAAI8C,MAAM0B,iBAAiB,iBAAkB,SAAS+K,IAC1DhL,EAAKvE,IAAI8C,MAAMiH,oBAAoB,iBAAkBwF,GACrDhL,EAAK9H,MAAMC,aAAc,EACzB6H,EAAK9H,MAAME,cAAe,EAC1B4H,EAAK9H,MAAMK,cAAe,EAC1ByH,EAAK9H,MAAMgB,sBAAwB,EACnC8G,EAAK0J,sBACL1J,EAAKQ,cACN,GACA7J,KAAK8E,IAAI8C,MAAMoH,OAAOkD,KAAK,WAC1B7I,EAAK9H,MAAMI,mBAAoB,EAC/B0H,EAAK8F,qBACN,GAAGgD,MAAM,WACR9I,EAAK9H,MAAMI,mBAAoB,EAC/B0H,EAAK8F,qBACN,KAEAnP,KAAKuB,MAAME,cAAe,EAC1BzB,KAAK6J,eACL7J,KAAKiT,YAEP,EAEAnT,EAAgC4F,UAAUwF,eAAiB,WAC1DlL,KAAKuB,MAAMC,aAAc,EACzBxB,KAAKuB,MAAME,cAAe,EAC1BzB,KAAKuB,MAAMgB,sBAAwB,EACnCvC,KAAKuB,MAAMK,cAAe,EAC1B5B,KAAK+S,sBACL/S,KAAK6J,eACL7J,KAAKuB,MAAMI,mBAAoB,EAC/B3B,KAAKuB,MAAMW,gBAAiB,EAC5BlC,KAAKmP,qBACN,EAEArP,EAAgC4F,UAAUmE,aAAe,WACxD7J,KAAK8E,IAAI6D,QAAQ2L,UAAYtU,KAAKuB,MAAMG,kBAAoB1B,KAAK8E,IAAI2D,MAAMQ,OAAS,IAAIyG,QAAQ,aAAc,GAC/G,EAEA5P,EAAgC4F,UAAUyJ,oBAAsB,WAC/D,IAAIoF,EAAiBvU,KAAKuB,MAAMI,kBAChC3B,KAAK8E,IAAIiD,gBAAgBmF,UAAUC,OAAO,UAAWoH,GACrDvU,KAAK8E,IAAIkD,WAAWhB,MAAM4G,QAAU5N,KAAKuB,MAAMW,eAAiB,OAAS,OACzElC,KAAK8E,IAAImD,gBAAgBjB,MAAM4G,QAAU5N,KAAKuB,MAAMW,eAAiB,OAAS,OAC/E,EAEApC,EAAgC4F,UAAUuN,UAAY,WACrD,IAAI5J,EAAOrJ,KACPA,KAAKuB,MAAMiB,oBAAsBxC,KAAKuB,MAAMC,aAAexB,KAAKuB,MAAME,cAAgBzB,KAAKuB,MAAMkB,yBAGjGzC,KAAKC,OAAOM,mBAA4BP,KAAKuB,MAAMgB,uBAAyBvC,KAAKC,OAAOM,oBAG5FP,KAAKuB,MAAMkB,oBAAqB,EAChCzC,KAAKuB,MAAMgB,uBAAyB,EACpCvC,KAAK+D,OAAOK,eAAiBsG,WAAW,WACvCrB,EAAK9H,MAAMkB,oBAAqB,EAC3B4G,EAAK9H,MAAMC,aAAgB6H,EAAK9H,MAAME,cAC1C4H,EAAKyC,iBAEP,EAAmC,IAAhC9L,KAAKC,OAAOK,mBAChB,EAEAR,EAAgC4F,UAAUqN,oBAAsB,WAC3D/S,KAAK+D,OAAOK,iBACfqG,aAAazK,KAAK+D,OAAOK,gBACzBpE,KAAK+D,OAAOK,eAAiB,MAE9BpE,KAAKuB,MAAMkB,oBAAqB,CACjC,EAEA3C,EAAgC4F,UAAU8O,SAAW,WACpD,IAAInL,EAAOrJ,KACNA,KAAKuB,MAAMwB,eAGhB0R,MAAMzU,KAAK0U,UAAU,eAAgB,CACpCC,OAAQ,OACRC,QAAS,CAAE,eAAgB,oBAC3BxT,KAAMyT,KAAKC,UAAU,CACpB/R,cAAeuO,SAAStR,KAAKuB,MAAMwB,cAAe,IAClDD,UAAWwO,SAAStR,KAAKuB,MAAMuB,WAAa,EAAG,QAE9CoP,KAAK,SAAU6C,GACjB1L,EAAK9H,MAAMG,gBAAiB,EAC5B2H,EAAKrE,kBAAoB,EACzBqE,EAAKQ,eACAR,EAAK9H,MAAMM,cACfwH,EAAK2L,qBAEDD,EAAS3T,OAGdiI,EAAKtF,OAAOG,UAAY6Q,EAAS3T,KAAK6T,YACtC5L,EAAK6L,aACN,GAAG/C,MAAM,SAAUlG,GAClBD,QAAQC,MAAM,+CAAgDA,GAC9D5C,EAAK9H,MAAMG,gBAAiB,EAC5B2H,EAAKQ,cACN,EACD,EAEA/J,EAAgC4F,UAAUwP,WAAa,WACtD,IAAI7L,EAAOrJ,KACPmV,EAAS,IACb,SAASC,IACH/L,EAAKtF,OAAOG,WAGjBmF,EAAKtF,OAAOG,UAAUkR,OAAOlD,KAAK,SAAUmD,GAC3C,GAAIA,EAAOC,KAGV,OAFAjM,EAAK9H,MAAMG,gBAAiB,OAC5B2H,EAAKQ,eAIN,IAAI0L,GADJJ,IAAU,IAAIK,aAAcC,OAAOJ,EAAOpM,QACvByM,MAAM,MACzBP,EAASI,EAAMI,OAAS,GACxB,IAAK,IAAI7P,EAAI,EAAGA,EAAIyP,EAAMvP,OAAQF,IACjCuD,EAAKuM,cAAcL,EAAMzP,IAE1BsP,GACD,GAAGjD,MAAM,WACR9I,EAAKwM,cACN,EACD,CACAT,EACD,EAEAtV,EAAgC4F,UAAUkQ,cAAgB,SAAUE,GACnE,GAAKA,GAAkC,IAA1BA,EAAKC,QAAQ,SAA1B,CAGA,IAAIC,EAAUF,EAAKG,MAAM,GAAGvG,QAAQ,aAAc,IAClD,GAAKsG,GAAuB,kBAAZA,EAAhB,CAGA,IAAmC,IAA/BA,EAAQD,QAAQ,WACnB,MAAgB,mCAAZC,OACHhW,KAAKkW,uBAGNlW,KAAK6V,eAGN,IACC,IAAIM,EAAWtB,KAAKuB,MAAMJ,GAC1B,GAAIG,GAAYA,EAAS5G,KACxB,OAA0C,IAAtC4G,EAAS5G,KAAKwG,QAAQ,gBACzB/V,KAAK6V,oBAGN7V,KAAKiQ,eAAekG,EAAS5G,MAG9B,GAAwB,iBAAb4G,EAEV,YADAnW,KAAKiQ,eAAekG,EAGtB,CAAE,MAAOlK,GACRjM,KAAKiQ,eAAe+F,EACrB,CAzBA,CAJA,CA8BD,EAEAlW,EAAgC4F,UAAUmQ,aAAe,WACxD,IAAIxM,EAAOrJ,KACPA,KAAKgF,mBAAqB,IAG9BhF,KAAKgF,mBAAqB,EACtBhF,KAAK+D,OAAOG,YACflE,KAAK+D,OAAOG,UAAUmS,SACtBrW,KAAK+D,OAAOG,UAAY,MAEzBlE,KAAKuB,MAAMG,gBAAiB,EAC5B1B,KAAK6J,eACD7J,KAAK+D,OAAOI,mBACfsG,aAAazK,KAAK+D,OAAOI,mBAE1BnE,KAAK+D,OAAOI,kBAAoBuG,WAAW,WAC1CrB,EAAKmL,UACN,EAAG,KACJ,EAEA1U,EAAgC4F,UAAUwQ,gBAAkB,WAC3D,IAAI7M,EAAOrJ,KACXA,KAAKuB,MAAMU,qBAAsB,EACjCjC,KAAK8E,IAAI+D,OAAOqE,UAAUoJ,IAAI,QAC9BtW,KAAKuB,MAAMC,aAAc,EACzBxB,KAAKuB,MAAMK,cAAe,EAC1B5B,KAAKuB,MAAMI,mBAAoB,EAC/B3B,KAAKuB,MAAME,cAAe,EAC1BzB,KAAKuB,MAAMG,gBAAiB,EAC5B1B,KAAKmP,sBACLnP,KAAK6J,eACD7J,KAAK+D,OAAOG,YACflE,KAAK+D,OAAOG,UAAUmS,SACtBrW,KAAK+D,OAAOG,UAAY,MAErBlE,KAAK+D,OAAOC,KAAOhE,KAAK+D,OAAOC,IAAIiH,UACtCjL,KAAK+D,OAAOC,IAAIiH,UAChBjL,KAAK+D,OAAOC,IAAM,MAEnBhE,KAAK8R,aACL9R,KAAK6R,eACL7R,KAAKmF,wBAAuBgG,EAAAC,IAAAC,EAAG,SAAAkL,IAAA,OAAAnL,IAAAI,EAAA,SAAAgL,GAAA,cAAAA,EAAA7K,GAAA,KAAA,EAAA,OAAA6K,EAAA7K,EAAA,EACxBtC,EAAKuC,eAAc,KAAA,EACzBvC,EAAKyC,kBAAkB,KAAA,EAAA,OAAA0K,EAAArK,EAAA,GAAA,EAAAoK,EAAA,GAEzB,EAEAzW,EAAgC4F,UAAUyE,mBAAkBgB,EAAAC,IAAAC,EAAG,SAAAoL,IAAA,OAAArL,IAAAI,EAAA,SAAAkL,GAAA,cAAAA,EAAA/K,GAAA,KAAA,EAErB,GADzC3L,KAAKuB,MAAMU,qBAAsB,EACjCjC,KAAK8E,IAAI+D,OAAOqE,UAAUS,OAAO,SAC7B3N,KAAKmF,wBAAuB,CAAAuR,EAAA/K,EAAA,EAAA,KAAA,CAAA,OAAA+K,EAAA/K,EAAA,EACzB3L,KAAKmF,0BAAyB,KAAA,EACpCnF,KAAKmF,wBAA0B,KAAK,KAAA,EAAA,OAAAuR,EAAAvK,EAAA,GAAA,EAAAsK,EAAAzW,KAAA,IAItCF,EAAgC4F,UAAUsK,iBAAgB,WAAA,IAAA2G,EAAAxL,EAAAC,IAAAC,EAAG,SAAAuL,EAAgBrH,EAAMpI,GAAI,IAAA0P,EAAA,OAAAzL,IAAAI,EAAA,SAAAsL,GAAA,cAAAA,EAAApL,EAAAoL,EAAAnL,GAAA,KAAA,EAAA,GACjF3L,KAAKuB,MAAMG,eAAc,CAAAoV,EAAAnL,EAAA,EAAA,KAAA,CAAA,OAAAmL,EAAA3K,EAAA,GAAA,KAAA,EAGR,OAAtBhF,EAAOA,GAAQ,OAAO2P,EAAApL,EAAA,EAAAoL,EAAAnL,EAAA,EAEf3L,KAAK+W,SAAS,SAAU,OAAQ,CACrChU,cAAeuO,SAAStR,KAAKuB,MAAMwB,cAAe,IAClDD,UAAWwO,SAAStR,KAAKuB,MAAMuB,WAAa,EAAG,IAC/CqE,KAAMA,EACNoI,KAAMA,IACL,KAAA,EAAAuH,EAAAnL,EAAA,EAAA,MAAA,KAAA,EAAAmL,EAAApL,EAAA,EAAAmL,EAAAC,EAAA/K,EAEFC,QAAQC,MAAM,qDAAoD4K,GAAS,KAAA,EAAA,OAAAC,EAAA3K,EAAA,GAAA,EAAAyK,EAAA5W,KAAA,CAAA,CAAA,EAAA,IAAA,IAE5E,OAAA,SAAAgX,EAAAC,GAAA,OAAAN,EAAAhM,MAAA3K,KAAA+F,UAAA,CAAA,CAfyD,GAiB1DjG,EAAgC4F,UAAUiK,0BAAyBxE,EAAAC,IAAAC,EAAG,SAAA6L,IAAA,IAAAC,EAAA,OAAA/L,IAAAI,EAAA,SAAA4L,GAAA,cAAAA,EAAA1L,EAAA0L,EAAAzL,GAAA,KAAA,EAAA,GAChE3L,KAAKuB,MAAMwB,cAAa,CAAAqU,EAAAzL,EAAA,EAAA,KAAA,CAAA,OAAAyL,EAAAjL,EAAA,GAAA,KAAA,EAAA,OAAAiL,EAAA1L,EAAA,EAAA0L,EAAAzL,EAAA,EAItB3L,KAAK+W,SAAS,kBAAmB,OAAQ,CAC9ChU,cAAeuO,SAAStR,KAAKuB,MAAMwB,cAAe,IAClDD,UAAWwO,SAAStR,KAAKuB,MAAMuB,WAAa,EAAG,MAC9C,KAAA,EAAAsU,EAAAzL,EAAA,EAAA,MAAA,KAAA,EAAAyL,EAAA1L,EAAA,EAAAyL,EAAAC,EAAArL,EAEFC,QAAQC,MAAM,qDAAoDkL,GAAS,KAAA,EAAA,OAAAC,EAAAjL,EAAA,GAAA,EAAA+K,EAAAlX,KAAA,CAAA,CAAA,EAAA,IAAA,IAI7EF,EAAgC4F,UAAUmG,mBAAkBV,EAAAC,IAAAC,EAAG,SAAAgM,IAAA,IAAAtC,EAAAM,EAAAiC,EAAA,OAAAlM,IAAAI,EAAA,SAAA+L,GAAA,cAAAA,EAAA5L,GAAA,KAAA,EAAA,OAAA4L,EAAA5L,EAAA,EACzC8I,MAAMzU,KAAK0U,UAAU,wBAA0B1U,KAAKC,OAAOW,UAAW,CAC1F+T,OAAQ,QACP,KAAA,EAFU,IAARI,EAAQwC,EAAAxL,GAGEyL,GAAE,CAAAD,EAAA5L,EAAA,EAAA,KAAA,CAAA,MACT,IAAInG,MAAM,2BAA0B,KAAA,EAAA,OAAA+R,EAAA5L,EAAA,EAExBoJ,EAAS0C,OAAM,KAAA,EACyD,GADvFpC,EAAMkC,EAAAxL,EACNuL,EAASjC,GAAUA,EAAOpB,MAAQoB,EAAOpB,KAAKyD,SAAWrC,EAAOpB,KAAKyD,SAAS,GAAK,KAC5E,CAAAH,EAAA5L,EAAA,EAAA,KAAA,CAAA,OAAA4L,EAAApL,EAAA,GAAA,KAAA,EAGXnM,KAAKuB,MAAM4B,YAAcmU,EAAOK,cAAgB,GAChD3X,KAAKuB,MAAM2B,WAAaoU,EAAOM,eAAiB,GAChD5X,KAAKuB,MAAM6B,gBAAkBkU,EAAOO,cAAgB,GACpD7X,KAAKuB,MAAM8B,UAAYiU,EAAOQ,iBAAmB,GAC7C9X,KAAKuB,MAAM4B,aACdnD,KAAK8E,IAAI8C,MAAMmQ,aAAa,SAAU/X,KAAKuB,MAAM4B,aAE9CnD,KAAKuB,MAAM2B,aACdlD,KAAK8E,IAAI4C,UAAUV,MAAMgR,gBAAkB,OAAShY,KAAKuB,MAAM2B,WAAa,KAE7ElD,KAAKsM,iBAAiB,KAAA,EAAA,OAAAiL,EAAApL,EAAA,GAAA,EAAAkL,EAAArX,KAAA,IAGvBF,EAAgC4F,UAAUkG,aAAYT,EAAAC,IAAAC,EAAG,SAAA4M,IAAA,IAAA5C,EAAA6C,EAAA,OAAA9M,IAAAI,EAAA,SAAA2M,GAAA,cAAAA,EAAAxM,GAAA,KAAA,EAAA,OAAAwM,EAAAxM,EAAA,EACrC3L,KAAK+W,SAAS,WAAY,OAAQ,CACpDtW,YAAaT,KAAKC,OAAOQ,cACxB,KAAA,EAqBoB,OAvBlB4U,EAAM8C,EAAApM,EAGV/L,KAAKuB,MAAMwB,cAAgBsS,GAAkC,MAAxBA,EAAOtS,cAAwB4N,OAAO0E,EAAOtS,eAAiB,GACnG/C,KAAKuB,MAAMuB,UAAYuS,GAA8B,MAApBA,EAAOvS,UAAoB6N,OAAO0E,EAAOvS,WAAa,GACnF9C,KAAKuB,MAAMwB,eACd/C,KAAKwU,WAEFa,GAA8B,MAApBA,EAAOvS,WAAqBsV,OAAO/C,EAAOvS,YAAc,IACjEoV,EAAU7C,EAAOvS,WAA0C,IAA7BsV,OAAO/C,EAAOvS,WAAmBuS,EAAOvS,UAAY,GAClFuS,EAAOgD,eACVrY,KAAKuB,MAAM0B,cAAgB,UAAY0N,OAAO0E,EAAOgD,cAAc3I,QAAQ,cAAe,IAAIA,QAAQ,UAAW,IAAMwI,IAGrH7C,GAAUA,EAAOgD,cACpBrY,KAAKuB,MAAMyB,cAAgBqS,EAAOgD,aAClCrY,KAAKuB,MAAMM,cAAe,IAE1B7B,KAAKuB,MAAMyB,cAAgB,GAC3BhD,KAAKuB,MAAM0B,cAAgB,GAC3BjD,KAAKuB,MAAMM,cAAe,EAC1B7B,KAAKuB,MAAMV,mBAAoB,GAEhCb,KAAK0G,iBAAiByR,EAAAhM,EAAA,EACfkJ,GAAM,EAAA4C,EAAAjY,KAAA,IAGdF,EAAgC4F,UAAUsP,mBAAkB7J,EAAAC,IAAAC,EAAG,SAAAiN,IAAA,IAAAjD,EAAAkD,EAAAC,EAAAC,EAAAC,EAAA,OAAAtN,IAAAI,EAAA,SAAAmN,GAAA,cAAAA,EAAAjN,EAAAiN,EAAAhN,GAAA,KAAA,EAAA,OAAAgN,EAAAjN,EAAA,EAAAiN,EAAAhN,EAAA,EAE1C3L,KAAK+W,SAAS,kBAAmB,OAAM,KAAA,EAAtD1B,EAAMsD,EAAA5M,EACNwM,EAAiBlD,GAAUA,EAAOuD,qBAAuBvD,EAAOuD,qBAAuB,EACvFJ,EAAcnD,GAAUA,EAAOwD,aAAexD,EAAOwD,aAAe,EACpEJ,EAAeF,EAAiBC,EACpCxY,KAAKuB,MAAMO,WAAa2W,EAAe,EAAIA,EAAe,EAC1DzY,KAAK8E,IAAI+C,MAAMT,YAAcpH,KAAKuB,MAAMO,WAAa,aAAe9B,KAAKuB,MAAMO,WAAa,IAAM,GAClG9B,KAAK8E,IAAI+C,MAAMb,MAAM4G,QAAU5N,KAAKuB,MAAMO,WAAa,QAAU,OAAO6W,EAAAhN,EAAA,EAAA,MAAA,KAAA,EAAAgN,EAAAjN,EAAA,EAAAgN,EAAAC,EAAA5M,EAExEC,QAAQC,MAAM,0DAAyDyM,GAAS,KAAA,EAAA,OAAAC,EAAAxM,EAAA,GAAA,EAAAmM,EAAAtY,KAAA,CAAA,CAAA,EAAA,IAAA,IAIlFF,EAAgC4F,UAAU2J,eAAclE,EAAAC,IAAAC,EAAG,SAAAyN,IAAA,IAAAzP,EAAA,OAAA+B,IAAAI,EAAA,SAAAuN,GAAA,cAAAA,EAAApN,GAAA,KAAA,EAAA,IACtD3L,KAAKqE,MAAMC,cAAetE,KAAKqE,MAAMO,kBAAiB,CAAAmU,EAAApN,EAAA,EAAA,KAAA,CAAA,OAAAoN,EAAA5M,EAAA,EAClDnM,KAAKqE,MAAMO,mBAAqBoU,QAAQC,SAAQ,IAAK,KAAA,EAW1D,OATC5P,EAAOrJ,KACXA,KAAKqE,MAAMO,kBAAoBiI,UAAUqM,aAAaC,aAAa,CAAE9U,OAAO,IAAQ6N,KAAK,SAAUnO,GAGlG,OAFAsF,EAAKhF,MAAMC,YAAcP,EACzBsF,EAAKhF,MAAMO,kBAAoB,MACxB,CACR,GAAGuN,MAAM,WAGR,OAFA9I,EAAKhF,MAAMO,kBAAoB,KAC/ByE,EAAK6C,UAAU,YACR,CACR,GAAG6M,EAAA5M,EAAA,EACInM,KAAKqE,MAAMO,mBAAiB,EAAAkU,EAAA9Y,KAAA,IAGpCF,EAAgC4F,UAAUsE,gBAAemB,EAAAC,IAAAC,EAAG,SAAA+N,IAAA,OAAAhO,IAAAI,EAAA,SAAA6N,GAAA,cAAAA,EAAA1N,GAAA,KAAA,EAAA,IACvD3L,KAAKuB,MAAMS,YAAW,CAAAqX,EAAA1N,EAAA,EAAA,KAAA,CAAA,OAAA0N,EAAAlN,EAAA,GAAA,KAAA,EAOzB,OAJDnM,KAAKqF,0BAA2B,EAChCrF,KAAKsF,iBAAkB,EACnBtF,KAAK8E,IAAI8C,QACZ5H,KAAK8E,IAAI8C,MAAMkH,OAAQ,GACvBuK,EAAA1N,EAAA,EACK3L,KAAK2P,4BAA2B,KAAA,EAAA,IAClC3P,KAAKqF,0BAA6BrF,KAAKsF,gBAAe,CAAA+T,EAAA1N,EAAA,EAAA,KAAA,CAC5B,OAA7B3L,KAAKsF,iBAAkB,EAAM+T,EAAAlN,EAAA,GAAA,KAAA,EAAA,OAAAkN,EAAA1N,EAAA,EAGZ3L,KAAKqP,iBAAgB,KAAA,EAA9B,GAAAgK,EAAAtN,IACK/L,KAAKqF,0BAA6BrF,KAAKsF,gBAAe,CAAA+T,EAAA1N,EAAA,EAAA,KAAA,CACtC,OAA7B3L,KAAKsF,iBAAkB,EAAM+T,EAAAlN,EAAA,GAAA,KAAA,EAG9BnM,KAAKsZ,oBACLtZ,KAAKuB,MAAMS,aAAc,EACzBhC,KAAK8E,IAAI8D,UAAUsE,UAAUoJ,IAAI,QAAQ,KAAA,EAAA,OAAA+C,EAAAlN,EAAA,GAAA,EAAAiN,EAAApZ,KAAA,IAG1CF,EAAgC4F,UAAU4T,kBAAoB,WAC7D,IAAIC,EAAmBvO,OAAOwO,cAAgBxO,OAAOyO,mBACrD,GAAKzZ,KAAKqE,MAAMC,aAAgBiV,EAAhC,CAGAvZ,KAAKqE,MAAME,aAAe,IAAIgV,EAC9BvZ,KAAKqE,MAAMG,WAAaxE,KAAKqE,MAAME,aAAamV,wBAAwB1Z,KAAKqE,MAAMC,aACnFtE,KAAKqE,MAAMI,cAAgBzE,KAAKqE,MAAME,aAAaoV,sBAAsB,KAAM,EAAG,GAClF3Z,KAAKqE,MAAMK,OAAS,GACpB1E,KAAKqE,MAAMM,UAAYiL,KAAKJ,MAC5B,IAAInG,EAAOrJ,KACXA,KAAKqE,MAAMI,cAAcmV,eAAiB,SAAUrQ,GACnD,IAAId,EAAQc,EAAMsQ,YAAYC,eAAe,GAC7CzQ,EAAKhF,MAAMK,OAAO0H,KAAK,IAAI2N,aAAatR,GACzC,EACAzI,KAAKqE,MAAMG,WAAWwV,QAAQha,KAAKqE,MAAMI,eACzCzE,KAAKqE,MAAMI,cAAcuV,QAAQha,KAAKqE,MAAME,aAAa0V,YAZzD,CAaD,EAEAna,EAAgC4F,UAAUwE,eAAiB,WAM1D,GALAlK,KAAKqF,0BAA2B,EAChCrF,KAAKsF,iBAAkB,EACnBtF,KAAK8E,IAAI8C,QACZ5H,KAAK8E,IAAI8C,MAAMkH,OAAQ,GAEnB9O,KAAKuB,MAAMS,YAAhB,CAGAhC,KAAKuB,MAAMS,aAAc,EACzBhC,KAAK8E,IAAI8D,UAAUsE,UAAUS,OAAO,QACpC,IAAIiD,EAAWpC,KAAK0L,OAAOtK,KAAKJ,MAAQxP,KAAKqE,MAAMM,WAAa,KAC5DwV,EAAOna,KAAKoa,sBACXD,GAAQvJ,EAAW,EACvB5Q,KAAKkM,UAAU,UAGhBlM,KAAKqa,iBAAiBF,EAAMvJ,EAT5B,CAUD,EAEA9Q,EAAgC4F,UAAU0U,mBAAqB,WAC9D,IAAKpa,KAAKqE,MAAME,aACf,OAAO,KAEJvE,KAAKqE,MAAMI,gBACdzE,KAAKqE,MAAMI,cAAc6V,aACzBta,KAAKqE,MAAMI,cAAgB,MAExBzE,KAAKqE,MAAMG,aACdxE,KAAKqE,MAAMG,WAAW8V,aACtBta,KAAKqE,MAAMG,WAAa,MAEzB,IAAI+V,EAAava,KAAKqE,MAAME,aAAagW,WACzCva,KAAKqE,MAAME,aAAaiW,QACxBxa,KAAKqE,MAAME,aAAe,KAC1B,IAAIkW,EAASza,KAAK0a,iBAAiB1a,KAAKqE,MAAMK,QAE9C,GADA1E,KAAKqE,MAAMK,OAAS,IACf+V,EAAOzU,OACX,OAAO,KAER,IAAI2U,EAAc3a,KAAK4a,iBAAiBH,EAAQF,EAAY,MAC5D,OAAOva,KAAK6a,UAAUF,EAAa,KACpC,EAEA7a,EAAgC4F,UAAU0J,gBAAkB,WAmB3D,GAlBApP,KAAKqF,0BAA2B,EAChCrF,KAAKsF,iBAAkB,EACvBtF,KAAKuB,MAAMS,aAAc,EACrBhC,KAAK8E,IAAI8D,WACZ5I,KAAK8E,IAAI8D,UAAUsE,UAAUS,OAAO,QAEjC3N,KAAKqE,MAAMI,gBACdzE,KAAKqE,MAAMI,cAAc6V,aACzBta,KAAKqE,MAAMI,cAAgB,MAExBzE,KAAKqE,MAAMG,aACdxE,KAAKqE,MAAMG,WAAW8V,aACtBta,KAAKqE,MAAMG,WAAa,MAErBxE,KAAKqE,MAAME,eACdvE,KAAKqE,MAAME,aAAaiW,QACxBxa,KAAKqE,MAAME,aAAe,MAEvBvE,KAAKqE,MAAMC,YAAa,CAE3B,IADA,IAAIwW,EAAS9a,KAAKqE,MAAMC,YAAYyW,YAC3BjV,EAAI,EAAGA,EAAIgV,EAAO9U,OAAQF,IAClCgV,EAAOhV,GAAGkV,OAEXhb,KAAKqE,MAAMC,YAAc,IAC1B,CACAtE,KAAKqE,MAAMO,kBAAoB,KAC/B5E,KAAKqE,MAAMK,OAAS,GAChB1E,KAAK8E,IAAI8C,QACZ5H,KAAK8E,IAAI8C,MAAMkH,OAAQ,EAEzB,EAEAhP,EAAgC4F,UAAU2U,iBAAgB,WAAA,IAAAY,EAAA9P,EAAAC,IAAAC,EAAG,SAAA6P,EAAgBf,EAAMgB,GAAW,IAAAzK,EAAAlB,EAAA4L,EAAArG,EAAAM,EAAAgG,EAAA,OAAAjQ,IAAAI,EAAA,SAAA8P,GAAA,cAAAA,EAAA5P,EAAA4P,EAAA3P,GAAA,KAAA,EAkBzC,OAjBhD+E,EAAW6K,IAAIC,gBAAgBrB,GAC/B3K,EAAMI,KAAKJ,MACfxP,KAAK+E,aAAaqH,KAAK,CACtBjF,KAAM,OACNkF,IAAK,OACLwD,UAAWL,EACXM,SAAU9P,KAAK+P,oBAAoBP,GACnCkB,SAAUA,EACVE,SAAUuK,IAEXnb,KAAKsM,iBACLtM,KAAK8N,qBAAqBwN,EAAA5P,EAAA,GAErB0P,EAAW,IAAIK,UACVC,OAAO,QAASvB,EAAM,iBAC/BiB,EAASM,OAAO,WAAY/K,OAAOwK,IACnCC,EAASM,OAAO,gBAAiB1b,KAAKuB,MAAMwB,eAC5CqY,EAASM,OAAO,YAAa1b,KAAKuB,MAAMuB,WAAWwY,EAAA3P,EAAA,EAC9B8I,MAAMzU,KAAK0U,UAAU,QAAS,CAClDC,OAAQ,OACRvT,KAAMga,IACL,KAAA,EAHU,IAARrG,EAAQuG,EAAAvP,GAIEyL,GAAE,CAAA8D,EAAA3P,EAAA,EAAA,KAAA,CAAA,MACT,IAAInG,MAAM,qBAAoB,KAAA,EAAA,OAAA8V,EAAA3P,EAAA,EAElBoJ,EAAS0C,OAAM,KAAA,EAAxB,KAANpC,EAAMiG,EAAAvP,KACIsJ,EAAOA,OAAM,CAAAiG,EAAA3P,EAAA,EAAA,KAAA,CAAA,OAAA2P,EAAA3P,EAAA,EACpB3L,KAAKgQ,iBAAiBW,OAAO0E,EAAOA,QAAQ3F,QAAQ,aAAc,IAAK,QAAO,KAAA,EAAA4L,EAAA3P,EAAA,EAAA,MAAA,KAAA,EAAA2P,EAAA5P,EAAA,EAAA2P,EAAAC,EAAAvP,EAGrFC,QAAQC,MAAM,sDAAqDoP,GAAS,KAAA,EAAA,OAAAC,EAAAnP,EAAA,GAAA,EAAA+O,EAAAlb,KAAA,CAAA,CAAA,EAAA,IAAA,IAE7E,OAAA,SAAA2b,EAAAC,GAAA,OAAAX,EAAAtQ,MAAA3K,KAAA+F,UAAA,CAAA,CAjCyD,GAmC1DjG,EAAgC4F,UAAU8L,UAAS,WAAA,IAAAqK,EAAA1Q,EAAAC,IAAAC,EAAG,SAAAyQ,EAAgBzP,EAAKgF,GAAG,IAAAhI,EAAAhF,EAAA,OAAA+G,IAAAI,EAAA,SAAAuQ,GAAA,cAAAA,EAAApQ,GAAA,KAAA,EAC9D,GAAXtC,EAAOrJ,KACNqM,GAAQA,EAAIqE,SAAQ,CAAAqL,EAAApQ,EAAA,EAAA,KAAA,CAAA,OAAAoQ,EAAA5P,EAAA,GAAA,KAAA,EAMxB,GAHGnM,KAAKqE,MAAMQ,oBACd7E,KAAKqE,MAAMQ,kBAAkBmX,QAC7Bhc,KAAKqE,MAAMQ,kBAAoB,MAE5B7E,KAAKuB,MAAMiC,iBAAmB6N,EAAG,CAAA0K,EAAApQ,EAAA,EAAA,KAAA,CAEd,OADtB3L,KAAKuB,MAAMiC,eAAiB,KAC5BxD,KAAKsM,iBAAiByP,EAAA5P,EAAA,GAAA,KAAA,EAAA,OAAA4P,EAAApQ,EAAA,EAGjB3L,KAAK2P,4BAA2B,KAAA,EACtC3P,KAAKuB,MAAMiC,eAAiB6N,EAC5BrR,KAAKsM,iBACDjI,EAAQ,IAAI4X,MAAM5P,EAAIqE,UAC1B1Q,KAAKqE,MAAMQ,kBAAoBR,EAC/BA,EAAM2K,OACN3K,EAAM6X,QAAU,WACf7S,EAAK9H,MAAMiC,eAAiB,KAC5B6F,EAAKhF,MAAMQ,kBAAoB,KAC/BwE,EAAKiD,gBACN,EAAE,KAAA,EAAA,OAAAyP,EAAA5P,EAAA,GAAA,EAAA2P,EAAA9b,KAAA,IACF,OAAA,SAAAmc,EAAAC,GAAA,OAAAP,EAAAlR,MAAA3K,KAAA+F,UAAA,CAAA,CAzBkD,GA2BnDjG,EAAgC4F,UAAUwG,UAAY,SAAUmQ,GAC/D,IAAIhT,EAAOrJ,KACXA,KAAKuB,MAAMgC,aAAe8Y,EAC1Brc,KAAK8E,IAAIkE,aAAa5B,YAAciV,EACpCrc,KAAK8E,IAAIiE,MAAMmE,UAAUoJ,IAAI,QACzBtW,KAAKiF,YACRwF,aAAazK,KAAKiF,YAEnBjF,KAAKiF,WAAayF,WAAW,WAC5BrB,EAAKvE,IAAIiE,MAAMmE,UAAUS,OAAO,OACjC,EAAG,IACJ,EAEA7N,EAAgC4F,UAAUmM,aAAe,WACxD7R,KAAK8E,IAAI8C,MAAMoU,QACfhc,KAAK8E,IAAI8C,MAAM0U,UAAY,KAC3Btc,KAAK8E,IAAI8C,MAAMqK,IAAM,GACrBjS,KAAK8E,IAAI8C,MAAMwM,MAChB,EAEAtU,EAAgC4F,UAAUoM,WAAa,WACtD,GAAI9R,KAAK+D,OAAOE,QAAUjE,KAAK+D,OAAOE,OAAOsY,YAC5C,IACCvc,KAAK+D,OAAOE,OAAOsY,aACpB,CAAE,MAAOtQ,GACRD,QAAQwQ,KAAK,2DAA4DvQ,EAC1E,CAEDjM,KAAK+D,OAAOE,OAAS,IACtB,EAEAnE,EAAgC4F,UAAUuF,QAAU,WAC/CjL,KAAK+D,OAAOG,YACflE,KAAK+D,OAAOG,UAAUmS,SACtBrW,KAAK+D,OAAOG,UAAY,MAErBlE,KAAK+D,OAAOI,mBACfsG,aAAazK,KAAK+D,OAAOI,mBAE1BnE,KAAK+S,sBACL/S,KAAK8R,aACD9R,KAAK+D,OAAOC,KAAOhE,KAAK+D,OAAOC,IAAIiH,UACtCjL,KAAK+D,OAAOC,IAAIiH,UAChBjL,KAAK+D,OAAOC,IAAM,MAEfhE,KAAKqE,MAAMQ,mBACd7E,KAAKqE,MAAMQ,kBAAkBmX,QAE9Bhc,KAAKoP,kBAEEpP,KAAK8E,IAAI8C,QACT5H,KAAK8E,IAAI8C,MAAMoU,QACfhc,KAAK8E,IAAI8C,MAAM0U,UAAY,KAC3Btc,KAAK8E,IAAI8C,MAAMqK,IAAM,GACrBjS,KAAK8E,IAAI8C,MAAMwM,QAElBpU,KAAK8E,IAAIyC,MAAQvH,KAAK8E,IAAIyC,KAAKkV,YAClCzc,KAAK8E,IAAIyC,KAAKkV,WAAWC,YAAY1c,KAAK8E,IAAIyC,KAEhD,EAEAzH,EAAgC4F,UAAUqR,SAAQ,WAAA,IAAA4F,EAAAxR,EAAAC,IAAAC,EAAG,SAAAuR,EAAgBC,EAAMlI,EAAQV,GAAI,IAAA6I,EAAA/H,EAAA,OAAA3J,IAAAI,EAAA,SAAAuR,GAAA,cAAAA,EAAApR,GAAA,KAAA,EAQrF,MAH0B,SAJvBmR,EAAc,CACjBnI,OAAQA,GAAU,MAClBC,QAAS,CAAA,IAEMD,SACfmI,EAAYlI,QAAQ,gBAAkB,mBACtCkI,EAAY1b,KAAOyT,KAAKC,UAAUb,GAAQ,CAAA,IAC1C8I,EAAApR,EAAA,EACoB8I,MAAMzU,KAAK0U,UAAUmI,GAAOC,GAAY,KAAA,EAAjD,IAAR/H,EAAQgI,EAAAhR,GACEyL,GAAE,CAAAuF,EAAApR,EAAA,EAAA,KAAA,CAAA,MACT,IAAInG,MAAM,mBAAqBuP,EAASiI,QAAO,KAAA,EAAA,OAAAD,EAAA5Q,EAAA,EAE/C4I,EAAS0C,QAAM,EAAAmF,EAAA5c,KAAA,IACtB,OAAA,SAAAid,EAAAC,EAAAC,GAAA,OAAAR,EAAAhS,MAAA3K,KAAA+F,UAAA,CAAA,CAdiD,GAgBlDjG,EAAgC4F,UAAUgP,UAAY,SAAUmI,GAC/D,IAAIO,EAAKzM,OAAOnC,KAAK6O,MAAMzN,KAAKJ,MAAQ,MACpC8N,GAAkC,IAAtBT,EAAK9G,QAAQ,KAAc,IAAM,IAC7CwH,EAAOvd,KAAKwd,KAAKxd,KAAKC,OAAOO,UAAY4c,GAC7C,OAAOpd,KAAKC,OAAOE,QAAQuP,QAAQ,MAAO,IAAMmN,EAAOS,EAAY,aAAeG,mBAAmBL,GAAM,SAAWK,mBAAmBF,EAC1I,EAEAzd,EAAgC4F,UAAU+H,eAAiB,SAAUxE,GACpE,GAAIA,SAAmD,KAAVA,EAG7C,MAAwB,iBAAVA,EAAqBA,EAAQ,KAAO0H,OAAO1H,EAC1D,EAEAnJ,EAAgC4F,UAAUgY,YAAc,WACvD,GAAsB,oBAAX1S,OACV,OAAO,GAER,IAAI2S,EAAgB,IASpB,OARI3S,OAAO4S,gBAAkB5S,OAAO4S,eAAepQ,MAClDmQ,EAAgB3S,OAAO4S,eAAepQ,MAC5BxC,OAAOwB,WACjBmR,EAAgB3S,OAAOwB,WACbrL,SAAS0c,iBAAmB1c,SAAS0c,gBAAgBC,cAC/DH,EAAgBxc,SAAS0c,gBAAgBC,aAE9BtP,KAAKuP,IAAI,IAAKvP,KAAKwP,IAAIL,EAAe,MACnC,GAChB,EAEA7d,EAAgC4F,UAAUc,cAAgB,WACzD,GAAKxG,KAAK8E,KAAQ9E,KAAK8E,IAAIyC,KAA3B,CAGA,IAAI7E,EAAiB1C,KAAKqG,qBAC1BrG,KAAK8E,IAAIyC,KAAKP,MAAMiX,YAAY,eAAgBvb,EAAiB1C,KAAK0d,cAAgB,IAAM,KAF5F,CAGD,EAEA5d,EAAgC4F,UAAUsI,yBAA2B,SAAUrI,GAC9E,SAAUA,GAAUA,EAAOuY,SAAWvY,EAAOuY,QAAQ,mCACtD,EAEApe,EAAgC4F,UAAUiJ,eAAiB,SAAUvB,EAAMC,EAAKG,EAAOE,GACtF,IAAIyQ,EAAU3P,KAAKuP,IAAI,EAAG/S,OAAOwB,WAAagB,GAC1C4Q,EAAS5P,KAAKuP,IAAI,EAAG/S,OAAOqT,YAAc3Q,GAC9C,MAAO,CACNN,KAAMoB,KAAKuP,IAAI,EAAGvP,KAAKwP,IAAI5Q,EAAM+Q,IACjC9Q,IAAKmB,KAAKuP,IAAI,EAAGvP,KAAKwP,IAAI3Q,EAAK+Q,IAEjC,EAEAte,EAAgC4F,UAAUyD,mBAAqB,WAC9DnJ,KAAK8E,IAAIyD,QAAQvB,MAAMsX,QAAWte,KAAKuB,MAAMQ,gBAAkB,yIAA2I,uIAC3M,EAEAjC,EAAgC4F,UAAU0D,yBAA2B,WACpEpJ,KAAK8E,IAAIgD,cAAcd,MAAMsX,QAAWte,KAAKuB,MAAMV,kBAAoB,0IAA4I,0IACpN,EAEAf,EAAgC4F,UAAUwD,kBAAoB,WAC7D,IAAIsG,EAAM,IAAII,KACd,MAAO,MAAQJ,EAAI+O,cAAgB,KAAO/O,EAAIgP,WAAa,GAAK,IAAMhP,EAAIiP,UAAY,GACvF,EAEA3e,EAAgC4F,UAAU+K,kBAAoB,SAAUZ,GACvE,IAAI6O,EAAO,IAAI9O,KAAKC,GAChB8O,EAAQD,EAAKE,WAIjB,OAFaD,EAAQ,GAAK,KAAO,MAEjB,KADEA,EAAQ,GAAKA,EAAmB,KAAVA,EAAe,GAAKA,EAAQ,IAChC,IAHtBhO,OAAO+N,EAAKG,cAAcC,SAAS,EAAG,IAIrD,EAEAhf,EAAgC4F,UAAUqK,oBAAsB,SAAUgP,GACzE,IAAK,IAAIjZ,EAAI9F,KAAK+E,aAAaiB,OAAS,EAAGF,GAAK,EAAGA,IAAK,CACvD,IAAIuG,EAAMrM,KAAK+E,aAAae,GAC5B,GAAIuG,GAAoB,SAAbA,EAAIlF,MAAmBkF,EAAIwD,UACrC,OAAOkP,EAAmB1S,EAAIwD,UAAY,IAE5C,CACA,OAAO,CACR,EAEA/P,EAAgC4F,UAAUtD,aAAe,WACxD,MAAO,oBAAoB4K,KAAKH,UAAUI,YAAc,kBAAkBD,KAAKH,UAAUI,UAC1F,EAEAnN,EAAgC4F,UAAU6K,YAAc,SAAUtH,GACjE,OAAO0H,OAAgB,MAAT1H,EAAgB,GAAKA,GACjCyG,QAAQ,KAAM,SACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,QACdA,QAAQ,MAAO,UACfA,QAAQ,KAAM,QACjB,EAEA5P,EAAgC4F,UAAUgV,iBAAmB,SAAUhW,GACtE,IACIoB,EADAE,EAAS,EAEb,IAAKF,EAAI,EAAGA,EAAIpB,EAAOsB,OAAQF,IAC9BE,GAAUtB,EAAOoB,GAAGE,OAErB,IAAIqP,EAAS,IAAI0E,aAAa/T,GAC1BgZ,EAAS,EACb,IAAKlZ,EAAI,EAAGA,EAAIpB,EAAOsB,OAAQF,IAC9BuP,EAAO4J,IAAIva,EAAOoB,GAAIkZ,GACtBA,GAAUta,EAAOoB,GAAGE,OAErB,OAAOqP,CACR,EAEAvV,EAAgC4F,UAAUkV,iBAAmB,SAAUzF,EAAQoF,EAAY2E,GAC1F,GAAIA,IAAkB3E,EACrB,OAAOpF,EAOR,IALA,IAAIgK,EAAQ5E,EAAa2E,EACrBE,EAAY5Q,KAAK0L,MAAM/E,EAAOnP,OAASmZ,GACvC9J,EAAS,IAAI0E,aAAaqF,GAC1BC,EAAe,EACfC,EAAe,EACZD,EAAehK,EAAOrP,QAAQ,CACpC,IAGIF,EAHAyZ,EAAmB/Q,KAAK0L,OAAOmF,EAAe,GAAKF,GACnDK,EAAQ,EACRC,EAAQ,EAEZ,IAAK3Z,EAAIwZ,EAAcxZ,EAAIyZ,GAAoBzZ,EAAIqP,EAAOnP,OAAQF,IACjE0Z,GAASrK,EAAOrP,GAChB2Z,GAAS,EAEVpK,EAAOgK,GAAgBG,EAAQC,EAC/BJ,GAAgB,EAChBC,EAAeC,CAChB,CACA,OAAOlK,CACR,EAEAvV,EAAgC4F,UAAUmV,UAAY,SAAU6E,EAASnF,GACxE,IAAIpF,EAAS,IAAIwK,YAAY,GAAsB,EAAjBD,EAAQ1Z,QACtC4Z,EAAO,IAAIC,SAAS1K,GAexB,OAdAnV,KAAK8f,YAAYF,EAAM,EAAG,QAC1BA,EAAKG,UAAU,EAAG,GAAsB,EAAjBL,EAAQ1Z,QAAY,GAC3ChG,KAAK8f,YAAYF,EAAM,EAAG,QAC1B5f,KAAK8f,YAAYF,EAAM,GAAI,QAC3BA,EAAKG,UAAU,GAAI,IAAI,GACvBH,EAAKI,UAAU,GAAI,GAAG,GACtBJ,EAAKI,UAAU,GAAI,GAAG,GACtBJ,EAAKG,UAAU,GAAIxF,GAAY,GAC/BqF,EAAKG,UAAU,GAAiB,EAAbxF,GAAgB,GACnCqF,EAAKI,UAAU,GAAI,GAAG,GACtBJ,EAAKI,UAAU,GAAI,IAAI,GACvBhgB,KAAK8f,YAAYF,EAAM,GAAI,QAC3BA,EAAKG,UAAU,GAAqB,EAAjBL,EAAQ1Z,QAAY,GACvChG,KAAKigB,gBAAgBL,EAAM,GAAIF,GACxB,IAAIQ,KAAK,CAACN,GAAO,CAAEzY,KAAM,aACjC,EAEArH,EAAgC4F,UAAUoa,YAAc,SAAUF,EAAMZ,EAAQ/V,GAC/E,IAAK,IAAInD,EAAI,EAAGA,EAAImD,EAAMjD,OAAQF,IACjC8Z,EAAKO,SAASnB,EAASlZ,EAAGmD,EAAMmX,WAAWta,GAE7C,EAEAhG,EAAgC4F,UAAUua,gBAAkB,SAAUL,EAAMZ,EAAQvW,GACnF,IAAK,IAAI3C,EAAI,EAAGA,EAAI2C,EAAMzC,OAAQF,IAAKkZ,GAAU,EAAG,CACnD,IAAIqB,EAAS7R,KAAKuP,OAAQvP,KAAKwP,IAAI,EAAGvV,EAAM3C,KAC5C8Z,EAAKU,SAAStB,EAAQqB,EAAS,EAAa,MAATA,EAA0B,MAATA,GAAgB,EACrE,CACD,EAEAvgB,EAAgC4F,UAAU8X,KAAO,SAAU+C,GAC1D,SAASC,EAAQC,EAAGC,GACnB,IAAIC,GAAW,MAAJF,IAAkB,MAAJC,GAEzB,OADWD,GAAK,KAAOC,GAAK,KAAOC,GAAO,KAC3B,GAAa,MAANA,CACvB,CAIA,SAASC,EAAOC,EAAG1U,EAAG2U,EAAGL,EAAGM,EAAGC,GAC9B,OAAOR,GAJeS,EAIOT,EAAQA,EAAQrU,EAAG0U,GAAIL,EAAQC,EAAGO,OAJpCE,EAIyCH,GAH7CE,IAAS,GAAKC,EAGmCJ,GAJzE,IAAuBG,EAAKC,CAK5B,CACA,SAASC,EAAMhV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAGM,EAAGC,GAChC,OAAOJ,EAAQE,EAAIM,GAAQN,EAAKO,EAAIlV,EAAG2U,EAAGL,EAAGM,EAAGC,EACjD,CACA,SAASM,EAAMnV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAGM,EAAGC,GAChC,OAAOJ,EAAQE,EAAIO,EAAMD,GAAMC,EAAKlV,EAAG2U,EAAGL,EAAGM,EAAGC,EACjD,CACA,SAASO,EAAMpV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAGM,EAAGC,GAChC,OAAOJ,EAAOE,EAAIM,EAAIC,EAAGlV,EAAG2U,EAAGL,EAAGM,EAAGC,EACtC,CACA,SAASQ,EAAMrV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAGM,EAAGC,GAChC,OAAOJ,EAAOQ,GAAKN,GAAMO,GAAKlV,EAAG2U,EAAGL,EAAGM,EAAGC,EAC3C,CA8HA,OAdA,SAAkBvY,GACjB,IAEIgY,EACA3a,EAHA2b,EAAS,mBACTC,EAAS,GAGb,IAAK5b,EAAI,EAAGA,EAAI2C,EAAMzC,OAAQF,GAAK,EAClC2a,EAAIhY,EAAM2X,WAAWta,GACrB4b,GAAUD,EAAOE,OAAQlB,IAAM,EAAK,IAAMgB,EAAOE,OAAW,GAAJlB,GAEzD,OAAOiB,CACR,CAIOE,CArCP,SAAmBnZ,GAClB,IAAI3C,EACA4b,EAAS,GACb,IAAK5b,EAAI,EAAGA,EAAmB,GAAf2C,EAAMzC,OAAaF,GAAK,EACvC4b,GAAU/Q,OAAOkR,aAAcpZ,EAAM3C,GAAK,KAAQA,EAAI,GAAO,KAE9D,OAAO4b,CACR,CAcQI,CA7GR,SAAiBrB,EAAGsB,GAGnB,IAAIjc,EACAkc,EACAC,EACAC,EACAC,EANJ1B,EAAEsB,GAAO,IAAM,KAAQA,EAAM,GAC7BtB,EAA8B,IAAzBsB,EAAM,KAAQ,GAAM,IAAWA,EAMpC,IAAI5V,EAAI,WACJ2U,GAAI,UACJM,GAAI,WACJC,EAAI,UACR,IAAKvb,EAAI,EAAGA,EAAI2a,EAAEza,OAAQF,GAAK,GAC9Bkc,EAAO7V,EACP8V,EAAOnB,EACPoB,EAAOd,EACPe,EAAOd,EACPlV,EAAIgV,EAAMhV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAE3a,GAAI,cAC5Bub,EAAIF,EAAME,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,GAAI,IAAI,WACpCsb,EAAID,EAAMC,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,GAAI,GAAI,WACpCgb,EAAIK,EAAML,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,GAAI,IAAI,YACpCqG,EAAIgV,EAAMhV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAE3a,EAAI,GAAI,GAAG,WACnCub,EAAIF,EAAME,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,GAAI,GAAI,YACpCsb,EAAID,EAAMC,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,GAAI,IAAI,YACpCgb,EAAIK,EAAML,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,GAAI,IAAI,UACpCqG,EAAIgV,EAAMhV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAE3a,EAAI,GAAI,EAAG,YACnCub,EAAIF,EAAME,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,GAAI,IAAI,YACpCsb,EAAID,EAAMC,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,IAAK,IAAI,OACrCgb,EAAIK,EAAML,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,IAAK,IAAI,YACrCqG,EAAIgV,EAAMhV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAE3a,EAAI,IAAK,EAAG,YACpCub,EAAIF,EAAME,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,IAAK,IAAI,UACrCsb,EAAID,EAAMC,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,IAAK,IAAI,YAErCqG,EAAImV,EAAMnV,EADV2U,EAAIK,EAAML,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,IAAK,GAAI,YACrBsb,EAAGC,EAAGZ,EAAE3a,EAAI,GAAI,GAAG,WACnCub,EAAIC,EAAMD,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,GAAI,GAAG,YACnCsb,EAAIE,EAAMF,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,IAAK,GAAI,WACrCgb,EAAIQ,EAAMR,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,GAAI,eAC5BqG,EAAImV,EAAMnV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAE3a,EAAI,GAAI,GAAG,WACnCub,EAAIC,EAAMD,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,IAAK,EAAG,UACpCsb,EAAIE,EAAMF,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,IAAK,IAAI,WACrCgb,EAAIQ,EAAMR,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,GAAI,IAAI,WACpCqG,EAAImV,EAAMnV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAE3a,EAAI,GAAI,EAAG,WACnCub,EAAIC,EAAMD,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,IAAK,GAAG,YACpCsb,EAAIE,EAAMF,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,GAAI,IAAI,WACpCgb,EAAIQ,EAAMR,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,GAAI,GAAI,YACpCqG,EAAImV,EAAMnV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAE3a,EAAI,IAAK,GAAG,YACpCub,EAAIC,EAAMD,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,GAAI,GAAG,UACnCsb,EAAIE,EAAMF,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,GAAI,GAAI,YAEpCqG,EAAIoV,EAAMpV,EADV2U,EAAIQ,EAAMR,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,IAAK,IAAI,YACrBsb,EAAGC,EAAGZ,EAAE3a,EAAI,GAAI,GAAG,QACnCub,EAAIE,EAAMF,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,GAAI,IAAI,YACpCsb,EAAIG,EAAMH,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,IAAK,GAAI,YACrCgb,EAAIS,EAAMT,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,IAAK,IAAI,UACrCqG,EAAIoV,EAAMpV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAE3a,EAAI,GAAI,GAAG,YACnCub,EAAIE,EAAMF,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,GAAI,GAAI,YACpCsb,EAAIG,EAAMH,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,GAAI,IAAI,WACpCgb,EAAIS,EAAMT,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,IAAK,IAAI,YACrCqG,EAAIoV,EAAMpV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAE3a,EAAI,IAAK,EAAG,WACpCub,EAAIE,EAAMF,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,GAAI,eAC5Bsb,EAAIG,EAAMH,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,GAAI,IAAI,WACpCgb,EAAIS,EAAMT,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,GAAI,GAAI,UACpCqG,EAAIoV,EAAMpV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAE3a,EAAI,GAAI,GAAG,WACnCub,EAAIE,EAAMF,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,IAAK,IAAI,WACrCsb,EAAIG,EAAMH,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,IAAK,GAAI,WAErCqG,EAAIqV,EAAMrV,EADV2U,EAAIS,EAAMT,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,GAAI,IAAI,WACpBsb,EAAGC,EAAGZ,EAAE3a,GAAI,cAC5Bub,EAAIG,EAAMH,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,GAAI,GAAI,YACpCsb,EAAII,EAAMJ,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,IAAK,IAAI,YACrCgb,EAAIU,EAAMV,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,GAAI,IAAI,UACpCqG,EAAIqV,EAAMrV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAE3a,EAAI,IAAK,EAAG,YACpCub,EAAIG,EAAMH,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,GAAI,IAAI,YACpCsb,EAAII,EAAMJ,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,IAAK,IAAI,SACrCgb,EAAIU,EAAMV,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,GAAI,IAAI,YACpCqG,EAAIqV,EAAMrV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAE3a,EAAI,GAAI,EAAG,YACnCub,EAAIG,EAAMH,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,IAAK,IAAI,UACrCsb,EAAII,EAAMJ,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,GAAI,IAAI,YACpCgb,EAAIU,EAAMV,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,IAAK,GAAI,YACrCqG,EAAIqV,EAAMrV,EAAG2U,EAAGM,EAAGC,EAAGZ,EAAE3a,EAAI,GAAI,GAAG,WACnCub,EAAIG,EAAMH,EAAGlV,EAAG2U,EAAGM,EAAGX,EAAE3a,EAAI,IAAK,IAAI,YACrCsb,EAAII,EAAMJ,EAAGC,EAAGlV,EAAG2U,EAAGL,EAAE3a,EAAI,GAAI,GAAI,WACpCgb,EAAIU,EAAMV,EAAGM,EAAGC,EAAGlV,EAAGsU,EAAE3a,EAAI,GAAI,IAAI,WACpCqG,EAAIqU,EAAQrU,EAAG6V,GACflB,EAAIN,EAAQM,EAAGmB,GACfb,EAAIZ,EAAQY,EAAGc,GACfb,EAAIb,EAAQa,EAAGc,GAEhB,MAAO,CAAChW,EAAG2U,EAAGM,EAAGC,EAClB,CAsBkBe,CAblB,SAAmB3Z,GAClB,IAAI3C,EACA4b,EAAS,GAEb,IADAA,GAAQjZ,EAAMzC,QAAU,GAAK,QAAKqc,EAC7Bvc,EAAI,EAAGA,EAAI4b,EAAO1b,OAAQF,GAAK,EACnC4b,EAAO5b,GAAK,EAEb,IAAKA,EAAI,EAAGA,EAAmB,EAAf2C,EAAMzC,OAAYF,GAAK,EACtC4b,EAAO5b,GAAK,KAAiC,IAA1B2C,EAAM2X,WAAWta,EAAI,KAAcA,EAAI,GAE3D,OAAO4b,CACR,CAE0BY,CADTvB,EAeTwB,SAAS9E,mBAEoB8C,KAhBc,EAAXQ,EAAE/a,UAD1C,IAAiB+a,CAkBlB"}
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@scienjoy/sj-digital-human-assistant-adaptive",
3
+ "version": "1.0.0",
4
+ "description": "AI数字人助手 Adaptive 原生JS组件,UMD格式,适配移动端与桌面端",
5
+ "main": "dist/sjDigitalHumanAssistantAdaptive.umd.min.js",
6
+ "module": "dist/sjDigitalHumanAssistantAdaptive.umd.js",
7
+ "files": [
8
+ "dist/",
9
+ "package.json",
10
+ "README.md"
11
+ ],
12
+ "keywords": ["digital-human", "ai", "umd", "adaptive"],
13
+ "author": "scienjoy",
14
+ "private": false,
15
+ "scripts": {
16
+ "build": "rollup -c",
17
+ "clean": "rimraf dist"
18
+ }
19
+ }